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

Se da urmatorul limbaj pseudocod:
Citeste n
m=0
p=1
Cat timp n>0 executa
Daca n%2!=0 atunci
                             n=n-1
m=m+(n%10)*p
n=n/10
p=p*10
-----------
Scrie m

Ce valoare se va afisa daca se citeste numarul 56413? Va rog frumos sa-mi explicati pe pasi!
Multumesc anticipat :).
OBS: Numai n=n-1 este in Daca n%2=!0 atunci...


alexubebe: si unde se incheie while-ul

Răspunsuri la întrebare

Răspuns de Gillga
1
la sintaxa daca , acesta verifica daca numarul este impar (ultima cifra este impara) . In caz negativ lasa numarul (cifra) intacta ; daca numarul (cifra) este impara ( caz afirmativ ) il scade cu o unitate.

m = m + (n %10 )* p
aici pune ultima cifra din n ca prima cifra a lui m

n = n/10
elimina ultuma cifra din n

p = p* 10
creste pe in asa fel incat la inmultirea de mai sus , la m , sa fie cu o cifra mai mare , adica sa adauge ca prina cifra de fiecare data


Pe exemplul tau:
n = 56413
m = 0
p = 1

verifica numarul , si ii da impar , deci scade si devine 56412, apoi in pune la inceputul lui m , elimina cifra din n, si creste p (in exact acesta ordine)
m = 2
n = 5641
p = 10

iar acelasi lucru ; e impar , scade si n devine 5640 si adauga la m
m = 02
n = 564
p= 100

iar aceeasi idee , dar de data aceasta este par, deci nu scade din n, acesta ramanand 564

m = 402
n = 56
p = 1000

si asa mai departe pana n ajunge 0


pentru n = 56413
m = 46402

pe scurt , acest cod copiaza numarul , doar ca in loc de cifre impare , apune cifra de dinaintea lor ( cifra ce evident este para)


Sper sa te ajute sa intelegi cum verifici, daca nu ai inteles ceva poti intreba .


Alte întrebări interesante