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

citeștem,n

(numerenaturale)

┌dacă m>n atunci

│ n←→m

└■

┌dacă m%2=0 atunci

│ m←m+1

└■

┌câttimpm≤nexecută

│ m←m+2

│ scrie ‘*’

└■ a. Scrieți succesiunea de caractere afișate în urma executării algoritmului dacă se citesc, în această ordine, numerele 2 și 9.

b. Dacă pentru n se citește numărul 79, scrieți două numere nenule care pot fi citite pentru m astfel încât, în urma executării algoritmului, pentru fiecare dintre acestea, să se afișeze de 40 de ori caracterul *

c.Scrieți în pseudocod un algoritm echivalent cu cel dat, înlocuind structura cât timp...execută cu o structură repetitivă cu test final.

va rog daca puteti sa si explicati

Răspunsuri la întrebare

Răspuns de andrei750238
8

Punctul A :

Se citeste m=2 si n=9.

Conditia 2>9 (m>n) este falsa, deci instructiunea din interior nu se executa

Conditia 2%2==0 (m%2==0) este adevarata, deci se executa m←m+1 (m primeste valoarea 3)

Deci pana acum m=3 si n=9

Se evalueaza 3<=9 (m<=n) adevarat se executa

  • m devine 5
  • Se afiseaza *

Se evalueaza 5<=9 (m<=n) adevarat se executa

  • m devine 7
  • Se afiseaza *

Se evalueaza 7<=9 (m<=n) adevarat se executa

  • m devine 9
  • Se afiseaza *

Se evalueaza 9<=9 (m<=n) adevarat se executa

  • m devine 11
  • Se afiseaza *

Se evaluaza 11<=9 (m<=n) fals. Nu se mai executa nimic

Programul s-a terminat.

Deci s-au afisat 4 stelute.

Raspuns : ****

Punctul B :

Daca modificam datele de intrare de la punctul a observam ca :

  1. Daca inainte de executarea buclei repetitive m=5 si n=9 se afiseaza 3 stelute
  2. Daca inainte de executarea buclei repetitive m=1 si n=9 se afiseaza 5 stelute
  3. Daca inainte de executarea buclei repetitive m=1 si n=11 se afiseaza 6 stelute

Deci numarul de stelute afisate are formula \frac{n-m}{2}+1 unde n si m sunt doua numere impare inaintea executarii secventei repetitive (n>=m).

Daca urmarim algoritmul observam ca avem cateva rute posibile prin care putem ajunge la bucla repetitiva :

- Daca m este mai mare decat n atunci are loc interschimbarea. Deci aici avem doua posibilitati care duce la un rezultat diferit - Fie m > n sau fie n >m.

- Daca m este par atunci se mareste cu o unitate. Deci aici avem doua posibilitati. Fie m este par fie este impar. Cele doua pot duce la un rezultat diferit.

Varianta I : m<n

Deci daca stim ca numarul de stelute este egal cu 40 iar n=79 putem aplica formula gasita de noi mai sus.

40=(79-m)/2+1

39=(79-m)/2

78=79-m

m=1

Deci inaintea executarii buclei repetitive, n trebuie sa aiba valoarea 79 si m valoarea 1.

Varianta I.a : m este impar

O solutie ar fi n=79 si m=1.

Varianta I.b: m este par

O alta solutie posibila ar fi n=79 si m=0 (stiind ca m este par acesta va fi marit cu o unitate). Dar in cerinta se precizeaza clar ca aceste numere trebuie sa fie nenule, deci aceasta nu e o solutie valida.

Varianta II : m>n

Stiind ca se citeste n=79 si m > n, va avea loc interschimarea m primeste valoarea 79 iar n primeste fosta valoarea a lui n.

Stim ca m=79 (este impar), deci trece nemodificat de a doua structura alternativa.

Daca aplicam formula gasita de doi mai sus pentru m=79 si 40 de stelute :

40=(n-79)/2+1

39=(n-79)/2

78=n-79

n= 157

Aceasta este valoarea lui n inainte de bucla repetitiva. Mergand inver stim ca am facut o interschimare (deci datele de intrare sunt m=157 si n = 79)

Raspuns :

n=79 si m=1

n=79 si m=157

Nota : La determinarea formulei am luat doar cazul in care cele doua numere sunt impare. Ar merita sa incercam si cazul in care n este par. E posibil sa gasim inca cateva solutie a problemei. Cerinta a cerut doar doua cazuri, eu m-am oprit aici.

Punctul C

Stim ca cele doua tipuri de structuri repetitive pot fi transformate din una in alta. Transformarea structurii "cat timp" in "repeta..." o ai atasata in imagine.

Pe exemplul nostru :

┌cât timp m≤n execută  

│ m←m+2  

│ scrie ‘*’  

└■

Devine :

┌dacă m<=n atunci

│ ┌repetă

│ │   m←m+2  

│ │   scrie ‘*’

│ └până când m>n

└■

Restul programului ramane neschimbat. Algoritm complet :

┌dacă m>n atunci  

│ n←→m  

└■

┌dacă m%2=0 atunci  

│ m←m+1  

└■

┌dacă m<=n atunci

│ ┌repetă

│ │   m←m+2  

│ │   scrie ‘*’

│ └până când m>n

└■

Anexe:
Alte întrebări interesante