•TheNechiz
|
|
« Răspunde #3 : Noiembrie 09, 2015, 19:42:13 » |
|
1) Nu e corectă. Tu verifici dacă a și b dau același rest la împărțirea cu k, iar de aici nu rezultă că ele îl au ca divizor comun pe k ( de exemplu: a=3 b=7 k=2 3%2=1 7%2=1. însă 2 nu e divizor nici pentru a,nici pentru b ) Condiția ar trebui să fie „a%k = 0 și b%k = 0”. Ar trebui să începi cu k de la 2 până la a/2 (b/2) [o să încerc să explic asta mai jos], orice număr se împarte la 1. În afară de asta, am văzut că ai vrut să tratezi cazul în care numerele nu au divizori comuni. Nu poți face pur și simplu o ramură de "altfel". Poate că acea condiție nu e adevărată pentru k=2 și e adevărată pentru k=3, în cazul ăsta, algoritmul afișează: "nu se pot determina divizorii comuni 3...". ( de exemplu: a = 3 b = 12 când k = 2 algoritmul scrie "nu se pot determina divizorii comuni" și, la pasul următor, scrie 3 ). Trebuie să iei o variabilă logică, să îi spunem ok. Dacă ok = 0, atunci nu ai găsit niciun divizor comun. Dacă ok = 1, atunci ai găsit cel puțin un divizor comun. Îl inițializezi pe ok cu 0 și în momentul când găsești un divizor îi atribui lui ok 1. În rest, ar trebui să meargă. Cum am zis mai sus, eu m-aș fi folosit de Cel Mai Mare Divizor Comun și aș fi scris ceva de genu ăsta:
a,b,copa,copb,r,k,cmmdc,ok întreg citește a,b
copa = a copb = b
cât timp b != 0 execută r = a%b a = b b = r sfârșit cât timp
cmmdc = a a = copa b = copb ok = 0 pentru k <- 2,cmmdc execută dacă a%k == 0 și b%k == 0 atunci scrie k ok = 1 sfârșit dacă
dacă ok = 0 atunci scrie "Numerele nu au divizori comuni." sfârșit dacă
Explicație pentru k <- 2,număr/2: O proprietatea a oricărui număr întreg este că se împarte la 1 și la el însuși. Asta se știe. Nu știu dacă se poate demonstra, e ceva evident.
Mai întâi să luăm un exemplu, să spunem că numărul e 24. Divizorii lui 24 sunt 2,3,4,6,8,12. Ce înseamnă că numărul x este divizor a lui y ? Rezultă că există z întreg ( natural în cazul ăsta ) astfel încât y = x*z. 24 = 2*12 24 = 3*8 24 = 4*6 24 = 6*4 24 = 8*3 24 = 12*2
Dacă am merge peste jumătatea numărului, ar ieși ceva de genul ăsta număr = (număr/2+1)*2 => număr = ((număr+2)/2)*2 => număr = număr+2 ceea ce este imposibil.
2) Îți voi spune mai întâi ce face algoritmul tău pentru problema 2. Citește un n, verifică dacă n dă un rest mai mic decât n la împărțirea cu numerele de la 1 la n, ceea ce e adevărat pentru fiecare i ( i <-1,n ). Și însumează numerele de la 1 la n în variabila s. Algoritmul, pentru n = 5, afisează: 1,3,6,10,15.
Tu trebuie să faci suma cifrelor lui i în variabila s și apoi să verifici dacă e mai mică sau egală cu n.
|