Informatică, întrebare adresată de anonim667, 9 ani în urmă

raspunsula I 1 cu explocatie

Anexe:

Răspunsuri la întrebare

Răspuns de blindseeker90
1
Subprogramul va returna "dcba" pentru un sir de intrare abcd
Subprogramul returneaza inversul unui sir delimitat pana la intalnirea punctului '.'
Sa vedem cum functioneaza subprogramul
mai intai citeste un caracter: c='a'
verifica daca acel caracter este '.' daca nu citeste executa prima instructiune din ramura if care este p()
In momentul in care executa din nou p() valoarea c='a' nu dispare...ci este pusa intr-o stiva locala pentru a putea fi reactivata atunci cand revine la programul principal, pentru ca tu mai ai de executat si un cout<<c dupa ce ai executat subprogramul p()
De aceea se si numeste subprogram: il poti folosi in alte programe, inclusiv in el insusi. Variabilele declarate in interiorul subprogramelor se numesc locale si sunt salvate intr-o stiva. In momentul in care s-au executat toate programele din subprogram, revine la valorile initiale din stiva si le foloseste.
Deocamdata se executa p() din nou
vedem ca redefinim variabila c; char c; dar aceasta variabila nu are aceeasi valoare ca cea precedenta, ci este o noua valoare in stiva de apeluri care poate primi alta valoare, si chiar o primeste c='b' care e urmatorul caracter.
Atunci in stiva valorile care sunt chemate apar:
c
----
'b'
'a'

Restul programului e la fel, pana ajungi la punct
cand ajung la c='.' atunci subprogramul nu va mai executa ramura de if, deci nu se va mai reapela
Avem in acel moment stiva
c
--
'd'
'c'
'b'
'a'
Acum ca ai executat ultimul subprogram, revii la cel anterior lui, unde trebuie sa executi
cout<<c;
dar caracterul care este stocat in c in stiva este 'd' atunci printezi 'd'
ai terminat din nou subprogramul, te duci la subprogramul care l-a chemat care acum executa si el cout<<c; Dar in stiva locala caracterul c are valoarea 'c' deci o sa ne apara 'dc' pentru ca 'd' a fost deja afisat iar 'c' este afisat acum
Stiva are comportament de: Ultimul Venit, primul care iese.
Deci la sfarsit, o sa iti apara secventa 'dcba'
Alte întrebări interesante