Va rog frumos sa ma ajutati. imi da teza din asa ceva si habar n am cum sa ajung la raspunsul: nr sunt 61,65,67.daca puteti sa mi si explicati va rog :( :*
Se consideră algoritmul alăturat, descris în pseudocod.
S-a notat cu x%y restul împărţirii numărului întreg x la numărul
întreg nenul y şi cu [a] partea întreagă a numărului real a.
citeşte n (număr natural)
z<-0
p<-1
┌cât timp n>0 execută
│ c<-n%10
│ n<-[n/10]
│┌dacă c%3=0 atunci
││ z<-z+p*(9-c)
││ p<-p*10
│└■
└■
scrie z
Scrieţi toate numere naturale impare, distincte, fiecare
având exact două cifre, care pot fi citite pentru variabila
n astfel încât să se afişeze valoarea 3.
Răspunsuri la întrebare
Răspuns de
22
Programul acesta este scris in pseudo cod si iti va fi usor sa il intelegi. Dar mereu trebuie sa folosesti un pix si o foaie si sa stii cateva conditii pe care ti le voi explica mai jos:
citeşte n (număr natural) // Aici iei pe rand toate numerele de la 11 la 99 (numere naturale impare de 2 cifre). La primul pas n = 11
z<-0 // z = 0
p<-1 // p =1
┌cât timp n>0 execută // Aici ai o bucla, practic executii codul din ea pana conditia de acolo e falsa. La noi n=11, n>0 (conditia este adevarata ) executam codul:
│ c<-n%10 // c = 11%10, restul impartirii lui 11 la 10 este 1. (11:10 = 1 rest 1)
│ n<-[n/10] // n = [11/10] n = [11/10] = [1,1] -> partea intreaga este 1, deci n este acum egal cu 1, nu mai este egal cu 11
│┌dacă c%3=0 atunci // Aici verifici o singura data conditia: c%3 =0, c la noi este 1 (de mai sus) 1%3 = 1 ≠ 0 (1:3 = 0 rest 1). conditia este falsa 1≠0 deci nu intram in cod si revenim sus la instructiunea "cat timp" pentru ca tocmai am terminat codul din ea, si revenim in bucla
││ z<-z+p*(9-c)
││ p<-p*10
│└■
└■
Avem acum:
n = 1, z a ramas 0, p a ramas 1. Si intram din nou in bucla
┌cât timp n>0 execută // Verificam din nou conditia n=1 > 0 (Da, mergem mai departe)
│ c<-n%10 // c = 1%10, restul impartirii lui 1 la 10 este 1. (1:10 = 0 rest 1)
│ n<-[n/10] // n = [1/10], n = [1/10] = [0,1] -> partea intreaga este 0, deci n este acum egal cu 0, nu mai este egal cu 1
│┌dacă c%3=0 atunci // Aici verifici o singura data conditia: c%3 =0, c la noi este 1 (de mai sus) 1%3 = 1 ≠ 0 (1:3 = 0 rest 1). conditia este falsa 1≠0 deci nu intram in cod si revenim sus la instructiunea "cat timp" pentru ca tocmai am terminat codul din ea, si revenim in bucla
││ z<-z+p*(9-c)
││ p<-p*10
│└■
└■
Avem acum:
n = 0, z a ramas 0, p a ramas 1. Si intram din nou in bucla
┌cât timp n>0 execută // Verificam din nou conditia n=0 > 0 (Nu, ne oprim si iesim din bucla)
│ c<-n%10
│ n<-[n/10]
│┌dacă c%3=0 atunci
││ z<-z+p*(9-c)
││ p<-p*10
│└■
└■
scrie z // La noi z este 0, nu este 3 deci 11 nu este ce avem nevoie
Observam ca daca nu intram in conditia (*):
┌dacă c%3=0 atunci
│ z<-z+p*(9-c)
│ p<-p*10
└■
z va ramane 0. Deci numarele cautate au cifre divizibile cu 3. Adica:
13, 19, ..., 93, 99. // Cu 6 nu se poate in coada ca ar fi numar par
Dar in conditia de mai sus, vedem ca z se schimba astfel: z = z + p*(9-c).
Daca luam n = 13 ajungem in conditie cu c = 3, n = 1, z=0, p=1 de z = 0 + 1*(9-3)
=> z = 6, 6≠3 Deci nu ne ajuta.
Practic daca ultima cifra din numar e divizibila cu 3, z ar fi 6, si daca e 9 atunci z va fi tot 0, iar 6 nu se poate ca ar fi numar par.
Deci numerele cautate incep cu cifra 3, 6 sau/si 9 dar nu se termina intro cifra divizibila cu 3. De exmplu daca n = 33 ( numar care se termina intro cifra divizibila cu 3) se va intra de 2 ori in conditia (*), z va fi:
1) n=33, c = 3, z=0, p=1
┌dacă c%3=0 atunci // c =3
│ z<-z+p*(9-c) // z = 0 + 1* (9-3) = 6
│ p<-p*10 // p = 1* 10 = 10
└■
2) n=3, c = 3, z=6, p=10
┌dacă c%3=0 atunci // c =3
│ z<-z+p*(9-c) // z = 6 + 1* (9-3) = 66
│ p<-p*10 // p = 1* 10 = 100
└■
Deci z = 66.
Observam ca regula (9-c) conteaza foarte mult in noua valoare a lui z. Iar ca z sa fie egal cu 3, trebuie sa intram o singura data in conditia (*) ca sa avem 9-c=3, 9-6=3, deci o cifra sa fie 6.
Cum am vazut ca numerele cautate incep cu cifra 3, 6 sau/si 9 dar nu se termina intro cifra divizibila cu 3, dar avem nevoie ca cifra sa fie 6 (de mai sus), atunci numerele cautate incep cu 6, sunt impare si nu se termina cu 3.
Avem astfel numerele: 61, 65 si 67.
Eu ti-am scris in detaliu ca sa intelegi foarte bine dar cel mai bine e sa pui singura pe foaie, cu pixul si sa treci prin programele pas cu pas si sa fii atenta la operatii si sa tragi cat mai repede concluzii. Iar apoi nu uita mereu sa verifici rezultatul cu cerinta (asa iti vei da seama ca ai facut corect). Dupa 2-3 exercitii asemanatoare iti garantez ca iti va fi foarte usor.
Succes la teza!
citeşte n (număr natural) // Aici iei pe rand toate numerele de la 11 la 99 (numere naturale impare de 2 cifre). La primul pas n = 11
z<-0 // z = 0
p<-1 // p =1
┌cât timp n>0 execută // Aici ai o bucla, practic executii codul din ea pana conditia de acolo e falsa. La noi n=11, n>0 (conditia este adevarata ) executam codul:
│ c<-n%10 // c = 11%10, restul impartirii lui 11 la 10 este 1. (11:10 = 1 rest 1)
│ n<-[n/10] // n = [11/10] n = [11/10] = [1,1] -> partea intreaga este 1, deci n este acum egal cu 1, nu mai este egal cu 11
│┌dacă c%3=0 atunci // Aici verifici o singura data conditia: c%3 =0, c la noi este 1 (de mai sus) 1%3 = 1 ≠ 0 (1:3 = 0 rest 1). conditia este falsa 1≠0 deci nu intram in cod si revenim sus la instructiunea "cat timp" pentru ca tocmai am terminat codul din ea, si revenim in bucla
││ z<-z+p*(9-c)
││ p<-p*10
│└■
└■
Avem acum:
n = 1, z a ramas 0, p a ramas 1. Si intram din nou in bucla
┌cât timp n>0 execută // Verificam din nou conditia n=1 > 0 (Da, mergem mai departe)
│ c<-n%10 // c = 1%10, restul impartirii lui 1 la 10 este 1. (1:10 = 0 rest 1)
│ n<-[n/10] // n = [1/10], n = [1/10] = [0,1] -> partea intreaga este 0, deci n este acum egal cu 0, nu mai este egal cu 1
│┌dacă c%3=0 atunci // Aici verifici o singura data conditia: c%3 =0, c la noi este 1 (de mai sus) 1%3 = 1 ≠ 0 (1:3 = 0 rest 1). conditia este falsa 1≠0 deci nu intram in cod si revenim sus la instructiunea "cat timp" pentru ca tocmai am terminat codul din ea, si revenim in bucla
││ z<-z+p*(9-c)
││ p<-p*10
│└■
└■
Avem acum:
n = 0, z a ramas 0, p a ramas 1. Si intram din nou in bucla
┌cât timp n>0 execută // Verificam din nou conditia n=0 > 0 (Nu, ne oprim si iesim din bucla)
│ c<-n%10
│ n<-[n/10]
│┌dacă c%3=0 atunci
││ z<-z+p*(9-c)
││ p<-p*10
│└■
└■
scrie z // La noi z este 0, nu este 3 deci 11 nu este ce avem nevoie
Observam ca daca nu intram in conditia (*):
┌dacă c%3=0 atunci
│ z<-z+p*(9-c)
│ p<-p*10
└■
z va ramane 0. Deci numarele cautate au cifre divizibile cu 3. Adica:
13, 19, ..., 93, 99. // Cu 6 nu se poate in coada ca ar fi numar par
Dar in conditia de mai sus, vedem ca z se schimba astfel: z = z + p*(9-c).
Daca luam n = 13 ajungem in conditie cu c = 3, n = 1, z=0, p=1 de z = 0 + 1*(9-3)
=> z = 6, 6≠3 Deci nu ne ajuta.
Practic daca ultima cifra din numar e divizibila cu 3, z ar fi 6, si daca e 9 atunci z va fi tot 0, iar 6 nu se poate ca ar fi numar par.
Deci numerele cautate incep cu cifra 3, 6 sau/si 9 dar nu se termina intro cifra divizibila cu 3. De exmplu daca n = 33 ( numar care se termina intro cifra divizibila cu 3) se va intra de 2 ori in conditia (*), z va fi:
1) n=33, c = 3, z=0, p=1
┌dacă c%3=0 atunci // c =3
│ z<-z+p*(9-c) // z = 0 + 1* (9-3) = 6
│ p<-p*10 // p = 1* 10 = 10
└■
2) n=3, c = 3, z=6, p=10
┌dacă c%3=0 atunci // c =3
│ z<-z+p*(9-c) // z = 6 + 1* (9-3) = 66
│ p<-p*10 // p = 1* 10 = 100
└■
Deci z = 66.
Observam ca regula (9-c) conteaza foarte mult in noua valoare a lui z. Iar ca z sa fie egal cu 3, trebuie sa intram o singura data in conditia (*) ca sa avem 9-c=3, 9-6=3, deci o cifra sa fie 6.
Cum am vazut ca numerele cautate incep cu cifra 3, 6 sau/si 9 dar nu se termina intro cifra divizibila cu 3, dar avem nevoie ca cifra sa fie 6 (de mai sus), atunci numerele cautate incep cu 6, sunt impare si nu se termina cu 3.
Avem astfel numerele: 61, 65 si 67.
Eu ti-am scris in detaliu ca sa intelegi foarte bine dar cel mai bine e sa pui singura pe foaie, cu pixul si sa treci prin programele pas cu pas si sa fii atenta la operatii si sa tragi cat mai repede concluzii. Iar apoi nu uita mereu sa verifici rezultatul cu cerinta (asa iti vei da seama ca ai facut corect). Dupa 2-3 exercitii asemanatoare iti garantez ca iti va fi foarte usor.
Succes la teza!
Alte întrebări interesante
Limba română,
8 ani în urmă
Matematică,
8 ani în urmă
Matematică,
8 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă
Limba română,
9 ani în urmă