Cerinta: se da un tablou bimensional de max 100 elemente(10x10).Sa se afiseze cel mai mare divizor comun de pe fiecare coloana.
Cum am incercat sa rezolv:
aici e functia pentru cmmdc :
int cmmdc(int a, int b) {
int r=a%b;
while(r) {
a=b;
b=r;
r=a%b;
}
return b;
}
Aici e ceea ce am incercat(matricea e deja “incarcata” cu elemente) :
variabila dimensiune e dimensiunea tabloului(4 de ex)
variabila pos memoreaza numarul de la prima linie,fiecare coloana pe rand( [0][0] [0][1] etc ) iar apoi calculeaza divizorul comun dintre el si urmatorul element
in al doilea for coloana ramane fixata si creste doar parametrul liniei,de asta am pus [j][i]
dupa ce termina cu toate “coloanele” (col) de pe prima linie trece la un urmatorul set de coloane
variabila j din for incepe de la 1 deoarece elementul zero este deja in variabila pos si nu cred ca are rost sa fac divizorul comun a doua numere identice
Problema este ca merge pentru primul set de coloane dar apoi apare ca programul nu mai functioneaza.
salut,
O sa incerc o explicatie cat mai “didactica” posibil:
incearca intai sa faci o parcurgere a matricei pe coloane si ca sa fii sigur ca merge testeaza cu afisare. Adica afiseaza numerele de pe coloana.
dupa ce esti sigur ca parcurgi corect, pentru a calcula cmmdc al tuturor numerelor de pe o coloana trebuie sa calculezi cmmdc al primelor doua, rezultatul il vei folosi calculand cmmdc dintre acesta si urmatorul numar … si asa mai departe.
pentru matricea din imagine si cmmcd elementelor de pe prima coloana calculezi un cmmdc in variabila x=cmmdc(a11,a21) si in continuare x=cmmdc(x,a31), x=cmmdc(x,a41) si x=cmmdc(x,a51).
Toate astea le poti face in parcurgerea ta pe coloane.
Spor la treaba!
Pai asa calculez cmmdc,dintre primele 2 numere,apoi rezultatul cu al treilei numar si tot asa,pos e primul numar si se calculeaza cmmdc dintre el si urmatorul numar de pe coloana,variabila j tot creste iar rezultatul din pos se tot calculeaza cu urmatorul numar(testeaza cmmdc cu urmatorul numar ca sa zic asa)