INSTRUCŢIUNEA WHILE
La scrierea programelor apare necesitatea ca o secventa de instructiuni sa se execute de mai multe ori. Atunci cānd testul pentru repetarea secventei se face īnainte de executia propriu-zisa o secventa de instructiuni se poate utiliza instructiunea while, tocmai de aceea numita si instructiunea repe 949f55j titiva ( de buclare) cu test initial.
Din punct de vdere sintactic formatul instructiunii este:
while (expresie)
instructiune
unde instructiune constituie corpul buclei while si este de obicei un bloc, dar poate fi o singura instructiune sau chiar nimic (instructiune vida), iar expresie este o expresie de tip scalar (aritmetic sau pointer).
Coprul buclei while se executa cāt timp (while - cāt timp ) expresia este diferita de zero (adevarata) si deci el poate sa nu se execute niciodata daca la prima evaluare expresia este nula. De asemenea, while poate defini si o bucla infinita, de exemplu:
while (1)
instructiune
urmānd ca iesirea din ciclare sa se faca din corpul instructiunii folosind: break, return sau exit ( ).
Urmariti programul de mai jos care detrmina c.m.m.d.c. a doua numere īntregi prin algoritmul lui Euclid.
Exemplu 3.5.1.
# include "stdio.h"
main ( )
int m,n,r;
while (1)
printf (" C.M.D.C. īntre : ");
scanf ("% d, % d", &m, &n);
printf ("este");
if (m = = 0 n = = 0 ) break;
while (r = m%n)
m = ;
n = r;
printf ("%d \n",n);
Prima instructiune while defineste o bucla infinita, iesirea din bucla facāndu-se cu break-ul de la instructiunea if (vezi instructiunea break la 3.8) atunci cānd cel putin unul din cele doua numere introduse prin apelul functiei scanf este nul, acesta oferindu-ne posibilitatea determinarii c.m.m.d.c. a oricātor perechi de īntregi.
Al doilea while este inclus īn primul si corpul acestuia executa cāt timp restul īmpartirii lui m la n este diferit de zero, adica cāt timp evaluānd expresia r= m%n obtinem o valoare nenula.
Programul care urmeaza descompune un numar natural (unsigned long) īn factori primi. Pentru fiecare factor prim gasit se afiseaza pe cāte o linie pe ecran, factorul prim respectiv si exponentul la care apare el īn descompunerea īn factori primi.
Exemplu 3.5.2.
# include "stdio.h"
main ( )
unsigned long n, i, j;
printf ("Īn Desc. lui īn factori primi \n");
printf ("n="); scanf ("% 1d", &n);
i = 2;
while (n >1)
j = 0;
while (n% i = = 0)
j + +;
n = n/i;
if (j)
printf("%1u **%1u \n", i, j );
i + +;
Prima bucla while se executa cāt timp n>1 si īn cadrul acesteia se verifica daca i este divizor a lui n, iar īn caz afirmativ j se incrementeaza cu 1 ori de cāte ori īnca mai este divizor a lui n/i, operatie efectuata īn a doua bucla while inclusa īn prima.
|