Informatică, întrebare adresată de theo166, 8 ani în urmă

Algoritmul alăturat este reprezentat în pseudocod.

a. Scrieți ce se afișează în urma executării algoritmului dacă se
citesc, în această ordine, numerele 16 și 7.
b. Dacă pentru x se citește numărul 10, scrieți două valori care pot fi
citite pentru variabila y astfel încât, pentru fiecare dintre acestea,
în urma executării algoritmului, să se afișeze numărul 90.
c. Scrieți în pseudocod un algoritm, echivalent cu cel dat, înlocuind adecvat structura repetă...până când cu o structură repetitivă cu test inițial.

Va rog sa ma ajutati macar la cateva subpuncte, daca nu le stiti pe toate!!
PS: ofer coroana si ce mai vreti voiii

Anexe:

Răspunsuri la întrebare

Răspuns de ovdumi
3

Răspuns:

a) Daca x=16 si y=7, dupa executarea algoritmului, variabila s va fi egala cu 60. Aici e vorba de atentie, trebuie sa ai grija sa nu iti scape nimic in timp ce parcurgi algoritmul. Iti recomand sa folosesti un tabel de valori pentru a-ti fi mai usor.

b) Pentru a rezolva acest subpunct, trebuie sa intelegem exact ce face algoritmul dat. In cazul acesta, dupa citirea variabilelor x si y, in y va fi memorata valoarea cea mai mare dintre cele 2, iar in x cea mai mica. Astfel, i si j vor memora la randul lor aceste valori, j fiind mai mare decat i. Dupa ce am intrat in structura "repeta.....pana cand", observam ceva interesant. Restul impartirii unui numar la 2 poate fi ori 0 (cand numarul este par), ori 1 (cand numarul este impar). Hai sa luam un exemplu : sa presupunem ca i este par, iar j este impar. In cazul acesta, i%2=0 si j%2=1, asa ca prima instructiune din structura "repeta.....pana cand" se va rezuma la "s=s+i". Cu alte cuvinte, daca i si j au paritati diferite, in s il adunam pe numarul par. Daca cele 2 numere sunt impare, atat i%2, cat si j%2 sunt egale cu 1, caz in care s=s+j+i. Daca ambele numere sunt pare, atunci i%2=j%2=0, caz in care s nu se modifica.

Asadar, daca x=10 si ii dam lui y o valoare para, atunci s va fi egal, in final, cu suma tuturor numerelor impare din intervalul [x,y], incepand cu x+1. In cazul asta, primul termen al sumei este 11, astfel ca trebuie sa adunam urmatoarele numere impare pana cand obtinem 90. Totusi, trebuie sa tinem cont ca, la un moment dat, i si j se vor intersecta, si daca, in momentul acesta, ele sunt impare, le adaugam pe ambele in s. 11+13+15+17+19=75, iar 11+13+15+17+19+21=96 (mai mult decat 90). De aici rezulta ca unul dintre termenii sumei trebuie sa apara de doua ori, sau, cu alte cuvinte, i si j trebuie sa se intersecteze intr-un numar impar, care este totodata si media aritmetica a numerelor i si j. Acest numar trebuie sa fie 15, deoarece 11+13+15+15+17+19=90. Daca i este initial 10, iar media aritmetica a numerelor i si j este 15, rezulta usor ca j trebuie sa fie 20, adica y trebuie sa fie 20, caz in care avem :

i=10, j=20, s=0

s=0 (i si j sunt pare, deci s nu se modifica)

i=11, j=19

s=0+19+11=30

i=12, j=18

s=30 (nu se modifica)

i=13, j=17

s=30+17+13=60

i=14, j=16

s=60 (nu se modifica)

i=15, j=15 (i si j sunt egale si impare)

s=60+15+15=90

i=16, j=14 (i a devenit mai mare decat j, deci ies din structura)

Deci, in final, s=90 pentru y=20 (solutia 1)

Daca y ar fi impar, atunci s va fi egal cu suma numerelor pare din intervalul [x,y], intrucat i si j isi schimba constant paritatea (cand unul este par, celalalt este impar). Asadar, primul termen al sumei este chiar x, adica 10, si trebuie sa adunam urmatoarele numere pare pana cand obtinem 90 (in cazul acesta, i si j nu se pot intersecta). 10+12+14+16+18+20=90, si pentru ca y este impar, inseamna ca y=21 (pentru a fi siguri ca si 20 intra in suma s).

Deci cele doua valori pentru y sunt 20 si 21, astfel incat s sa fie, in final, egal cu 90.

c) structura "repeta.....pana cand i>j" este echivalenta cu "executa.....cat timp i<=j". Intrucat aceasta structura are test final, trebuie sa punem in schimb "cat timp i<=j.....executa". In rest algoritmul este la fel, la acest subpunct nu ar trebui sa ai probleme.

Daca ai vreo nelamurire, spune-mi-o pe chat.


theo166: Multumesc muult de tot!!
ovdumi: cu placere
Alte întrebări interesante