Informatică, întrebare adresată de sikesjack1, 8 ani în urmă

Buna! Care este diferenta in acest algoritm intre while (q) si while (q -> urm)?? Cu while (q) functioneaza cum trebuie. Incerc sa invat liste simplu inlantuite si ma pierd in aceste detalii. Ma puteti ajuta????? while (prim -> urm) { int x = prim -> info; ///in variabila x vom stoca valoarea ce se afla la adresa curenta din prim nod *q = prim -> urm; /// in noul element q, vom salva urmatorul element din lista p while (q) { int y = q -> info; ///in variabila y, vom stoca valoarea ce se afla la adresa din elementul q if (cmmdc(x,y) == 1) ///daca cmmdc (x,y) este 1 ==> cele doua elemente sunt prime intre ele { ctr++; } q = q -> urm; ///progresam in lista pornita de la elemntul prim + 1 } prim = prim -> urm; ///progresam in lista originala } Multumesc!

Răspunsuri la întrebare

Răspuns de MrCalibster
1

Diferenta dintre cele doua while-uri e ca primul verifica daca pointerul este diferit de NULL, iar cel de-al doilea verifica daca pointerul urmator este diferit de NULL. Daca lista ar avea o strucutura mai speciala cred ca ar functiona echivalent. Eroarea la compilare poate fi generata de exemplu daca q ia valoare NULL inainte de while(s-a ajuns la sfarsitul listei), si se verifica q->urm, operatia nefiind permisa pe pointerii nuli. La liste trebuie sa ai grija sa nu ajungi sa folosesti elementele structurii pe pointerii nuli, deoarece nu va merge bine. Foarte folositor ar fi sa inveti sa folosesti debugger-ul( ia vreo 15 min, in mare dai pe butonul de debugg, un buton ca ala de run, doar ca rosu, si dupa dai run line pentru a executa numai o linie de cod) pentru a vedea exact la ce pas nu mai functioneaza bine programul, fiind destul de necesar la astfel de probleme.

Alte întrebări interesante