Sunteți pe pagina 1din 2

Şef lucrări dr. ing. Morariu-Gligor Radu PUC – Laborator nr.

8 1/2

Laborator nr. 8 – Instrucţiuni de ciclare While, Do … while


Instrucţiunea de ciclare while Instrucţiunea de ciclare do … while

Se utilizează pentru programarea unor operaţii Se utilizează la


Intrare
de un număr de ori necunoscut. Este o instrucţiune de fel ca şi instrucţiunea
ciclare condiţionată anterior. while pentru programarea
ciclurilor care se execută
de un număr de ori instructiune
Intrare
necunoscut. Diferenţa
dntre cele două
Adevarat instrucţiuni constă în
expresie faptul că do … while este expresie
o instrucţiune de ciclare
Fals instructiune condiţionată posterior. Adevarat
Aceasta înseamnă că mai Fals
Iesire întâi se execută corpul Iesire
ciclului şi abia apoi se
Forma generală este următoarea: verifică condiţia.

while(expresie) Forma generală este următoarea:
instrucţiune; …
… do
Interpretarea sintaxei este următoarea: “atât instrucţiune
timp cât … “. while( expresie);
Funcţionare : …
Se evaluează expresia expresie, dacă aceasta Conţine două cuvinte cheie: do (execută),
este nenulă se execută instrucţiune, după care se revine respectiv while. Interpretarea sintaxei este următoarea:
la evaluarea expresiei. În cazul în care expresie este nulă execută … atât timp cât…. Instrucţiunea se încheie cu ;.
se trece la instrucţiunea următoare din program. Funcţionare :
Instrucţiunea este executată, apoi se evaluează
Exemplu nr. 1 : Suma elementelor unui şir. expresia. Dacă valoarea acesteia este  0 (adevărată) se
… reia execuţia instrucţiunii. În cazul în care valoarea
s=0; i=0; expresiei este nulă (falsă), se părăseşte ciclul, execuţia
while(i<n) programului continuând cu instrucţiunea imediat
{ s+=a[i]; i++} următoare ciclului.

Exemplu nr. 2 : Afişarea pe rânduri diferite a Exemplu: Citirea unui număr pozitiv:
cifrelor unui număr natural …
… do { printf(“\n a=”); scanf(“%d”,&a);}while (a<=0);
while(n!=0) …
{ printf(“\n %d”,n%10); n/=10; } Observaţie :
… 1. Diferenţa dintre while şi do … while constă în
aceea că în cazul ciclului do … while
Observaţii: instrucţiunea se execută cel puţin o dată chiar
1. expresie este de cele mai multe ori o expresie dacă expresia este falsă, spre deosebire de while
logică; unde instrucţiunea nu se execută dacă expresia
2. dacă expresie are valoarea 0 de la început, este falsă;
corpul ciclului nu se execută; 2. Dacă expresia este întotdeauna 0 ciclul do …
3. dacă valoarea expresiei este întotdeauna 0 while este infinit;
atunci ciclul este infinit. Exemplu:
Exemplu: while(1) { … } do { …. } while(1);
4. Ciclul while poate fi utilizat şi pentru scrierea 3. Instrucţiunea poate fi utilizată şi pentru
ciclurilor cu variabilă conducătoare: programarea ciclurilor cu variabilă
Exemplu: conducătoare.
… … Exemplu:
fact=1; fact=1; i=1; …
for(i=1 ; i<=n ; i++)  while(i<=n) fact=1; i=1;
fact*=i; { fact*=i; i++; } do { fact*=i; i++; } while(i<=n);
… … …
Şef lucrări dr. ing. Morariu-Gligor Radu PUC – Laborator nr. 8 2/2

Program exemplu nr. 1: Ordonarea crescătoare a Program exemplul nr. 2: Calculul primilor “n”
elementelor unui şir de numere reale. termeni din dezoltarea:

#include <stdio.h>  1 1 2 1 2  3 1 2  3  4 
#include <conio.h>   2  1      ...
 3 3 5 3 5 7 3 5 7  9 
main(void)
{ int n,i,a[20],k=1,aux;
până când diferenţa dintre doi termeni
do{ printf("\n Introd n="); scanf("%d",&n); }
consecutivi este mai mică decât o valoare impusă
while(n<=0);
(eps).
for(i=0;i<n;i++)
{printf("\n a[%2d]=",i); scanf("%d",&a[i]); }
#include<stdio.h>
for(i=0;i<n;i++)
#include<conio.h>
printf("%4d",a[i]);
#include<math.h>
while(k!=0)
#define EPS 0.000001
{ for(k=0,i=0;i<n-1;i++)
main(void)
if(a[i]>a[i+1])
{int i, j, k, p1, p2; double t[50], s;
{ aux=a[i]; a[i]=a[i+1]; a[i+1]=aux; k++; }
t[1]=1./3; i=1; s = 1+t[1];
}
do
printf("\n");
{ i++; t[i]=t[i-1]*i/(2*i+1.);s=s+t[i];
for(i=0;i<n;i++)
printf("\n PI_C = %10.8lf",2*s );
printf("%4d",a[i]);
}while( ( t[i-1]-t[i] ) >= EPS);
getch();
printf("\n PI_M = %10.8lf ",M_PI);
}
printf("\n PI_C = %10.8lf",2*s );
getch();
}

Teme propuse:

1. Se consideră două numere întregi: a şi b (a>b). Se cere să se determine câtul q şi restul r al împărţirii numărului a la b.
Programul va asigura introducerea repetată a mai multor perechi de numere. Rezultatele se vor afişa sub forma: a = b
* q + r.
2. Să se calculeze şi să se afişeze termenii din dezvoltarea:
1 1 1
Sn   2 2  2 2  ...
1  2 2 3 3  4
2 2

până când diferenţa dintre doi termeni consecutivi este mai mică decât o valoare impusă (epsilon).
3. Să se calculeze şi să se afişeze termenii din dezvoltarea:
 1  1  1
an  1  2   1  2   1  2 ...
 2   3   4 
până când diferenţa dintre doi termeni consecutivi este mai mică decât o valoare impusă (epsilon).
1 1 1 n 1 1
4. Se consideră dezvoltarea: Sn  1    ...  1 . Se cere să se determine şi să se afişeze n, Tn, Sn
2! 3! 4! n!
pentru care Tn  Tn 1   .
5. Să se calculeze suma:
x1 x3 x5
sin( x)     ...
1! 3! 5!
până când diferenţa dintre doi termeni consecutivi este mai mică decât o valoare ε impusă.
6. Să se rezolve ecuaţia: x 4  2  x3  x  2  0 în intervalele [0,1.25] şi [1.5, 3] utilizând metoda înjumătăţirii
intervalului.

Succes!!!

S-ar putea să vă placă și