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

Imi poate explica cineva mecanismul algoritmului urmator?
s=elevi
n=strlen(s);
for (i=0;i<=n;i++)
strrev(s);
cout <<strrev(s+strlen(s)-i-1)<<" ";
strrev(s+strlen(s)-i-1);
strrev(s);

Este un algoritm de afisare a prefixelor : e el ele elev elevi
As vrea sa aflu gandirea programului, cum schimba cuvintele in asa fel încât ajung la forma finala prezentata... 50 puncte plus coroana celui mai complex răspuns. Mulțumesc !

Răspunsuri la întrebare

Răspuns de vargaadorjan
2
strrev(s) este o functie care inverseaza sirul de caractere primit ca si parametruEx: in cazul sirului elevi strrev(s) returneaza "ivele"
in fiecare iteratie a ciclului for algoritmul inverseaza sirul ca mai apoi sa poata inversa ultimele i+1 caractereale sirului astfel obtinand prefixele , ultimele doua strrev- uri readuc sirul de caractere in starea lor initiala,adica elevii = 0    strrev(s) -> ivele    strrev(s+strlen(s)-i-1) -> e, sirul are forma "ivele"    strrev(s+strlen(s)-i-1) -> e  sirul are forma "ivele"     strrev(s) -> elevi i = 1    strrev(s) -> ivele    strrev(s+strlen(s)-i-1) -> el, sirul are forma "iveel"    strrev(s+strlen(s)-i-1) -> le  sirul are forma "ivele"     strrev(s) -> elevi i = 2    strrev(s) -> ivele    strrev(s+strlen(s)-i-1) -> ele, sirul are forma "ivele"    strrev(s+strlen(s)-i-1) -> ele  sirul are forma "ivele"     strrev(s) -> elevii = 3    strrev(s) -> ivele    strrev(s+strlen(s)-i-1) -> elev, sirul are forma "ielev"    strrev(s+strlen(s)-i-1) -> vele  sirul are forma "ivele"     strrev(s) -> elevii = 4    strrev(s) -> ivele    strrev(s+strlen(s)-i-1) -> elevi, sirul are forma "elevi"    strrev(s+strlen(s)-i-1) -> ivele  sirul are forma "ivele"     strrev(s) -> elevi         
Alte întrebări interesante