Sunteți pe pagina 1din 6

Pana acum Astazi

• Tipuri simple de date


• Instructiuni repetitive: while, do/while, for
• Operatori
• Instructiunea break
• Instructiuni
– instructiunea vida • Instructiunea continue
– instructiunea simpla • Instructiunea goto
– instructiunea compusa
– instructiuni conditionale: if, switch • Instructiunea return
– instructiuni repetitive: while
PCLP6 - 1 PCLP6 - 2

Instructiuni repetitive - while (1) Instructiuni repetitive - while (2)


Exemplul 2: Sa se afiseze valorile functiei sin(x) cu Sa se afiseze doar 30 de linii o data pe ecran.
pasul de 1 grad sexagesimal xє[0,360). #include <stdio.h>
#include <math.h>
#include <stdio.h> #include <conio.h>
#include <math.h> #define PI 3.14159265
#define PI 3.14159265 void main()
void main() { int x;
double pas;
{ int x; pas = PI/180;
double pas; x = 0;
pas = PI/180; while(x < 360)
x = 0; { printf(″sin(%d)=%.16lf\n″, x, sin(x*pas) );
while(x < 360) if(++x%30 == 0)
{ printf(″sin(%d)=%.16lf\n″, x, sin(x*pas) ); { printf(″Pentru a continua apasati o tasta.″);
getch();
x++; } /* sfarsit if */
} } /* sfarsit while */
} } /* sfarsit main */
PCLP6 - 3 PCLP6 - 4

1
Instructiuni repetitive - while (3) Instructiuni repetitive - while (4)
Exemplul 3: Sa se calculeze media aritmetica a
numerelor de la 11 la 15. Modificarea buclei infinite. numar suma
#include <stdio.h> #include <stdio.h> 11 0
12 11
void main() void main()
{ int numar, suma; 13 23
{ int numar, suma; 14 36
numar = 11;
numar = 11; !!!! Bucla infinita suma = 0; 15 50
suma = 0; while(numar <= 15) 16 65
while(numar != 15) { suma += numar;
suma += numar; numar++;
printf(″media aritmetica este %.2lf\n″, suma/5.0 ); }
} printf(″media aritmetica este %.2lf\n″, suma/5.0 );
}
PCLP6 - 5 PCLP6 - 6

Instructiuni repetitive - while (5) Instructiuni repetitive - do/while (1)


Modificarea buclei infinite. numar suma do
10 0 instructiune
#include <stdio.h> instructiune;
11 11 while(expresie);
void main() 12 23 F T
expresie
{ int numar, suma; 13 36
numar = 10; 50

14
suma = 0; 15 65 instructiune
while(numar++ < 15) 16 instructiune;
suma += numar; while(expresie)
F
printf(″media aritmetica este %.2lf\n″, suma/5.0 ); instructiune; expresie T

} instructiune
PCLP6 - 7 PCLP6 - 8

2
Instructiuni repetitive - do/while (2) Instructiuni repetitive - do/while (3)
#include <stdio.h>
#include <stdlib.h>
Exemplul 1: Sa se calculeze radacina patrata a unui #define ER 1e-10
numar pozitiv subunitar cu o eroare mai mica de 10-10 void main()
{ double nr, x1, x2, y;
folosind metoda iterativa a lui Newton. printf(″Introduceti valoarea numarului: ″);
scanf(″%lf″, &nr);
Fie sirul if(nr<=0 || nr>=1)
x0, x1, x2,…, xn { printf(″Numarul nu este in intervalul (0,1).″);
exit(1);
unde: }
x0 = 1 si xn+1 = 0,5(xn + a/xn) x2=1;
do
Sirul este convergent si { x1 = x2;
x2 = 0.5 * (x1 + nr/x1);
lim xn a |xn+1 – xn| < 10-10 }while(((y = x1-x2) < 0 ? –y : y) >= ER);
n printf(″nr = %lf\tsqrt(nr)=%.11lf\n″, nr, x2 );
}
PCLP6 - 9 PCLP6 - 10

Instructiuni repetitive - do/while (4) Instructiuni repetitive - for (1)


• Functia exit()
for(expresie1;expresie2;expresie3)
void exit(int cod); instructiune;
- definita in bibliotecile stdlib.h si process.h
expresie1
- inchide toate fisierele deschise si se intrerupe expresie1;
executia programului while(expresie2) F T
expresie2 expresie3
{ instructiune;
- parametrul cod:
expresie3;} instructiune
• 0 – terminare normala
for(;;)
• 1 – terminare anormala (prezenta unei erori)
instructiune;
PCLP6 - 11 PCLP6 - 12

3
Instructiuni repetitive - for (2) Instructiuni repetitive - for (3)
Exemplul 1: Sa se calculeze suma patratelor
Alta varianta:
numerelor de la 1 la 10.
#include <stdio.h> #include <stdio.h>
void main() void main()
{ int i, suma; { int i, suma;
suma = 0; for(i=1, suma=0; i<=10; i++)
for(i=1; i<=10; i++) suma += i*i;
suma += i*i; printf(″suma patratelor = %d\n″, suma );
printf(″suma patratelor = %d\n″, suma ); }
}
PCLP6 - 13 PCLP6 - 14

Instructiuni repetitive - for (4) Instructiuni repetitive - for (5)


Exemplul 2: Sa se calculeze an unde a si n se citesc de la
consola, nєN* si aєQ. a) Utilizarea functiei pow:
#include <stdio.h>
#include <stdlib.h> double pow(double x, double y);
void main() p = pow(a, (double)n);
{ int n, i;
double a, p;
printf(″Baza a=: ″); scanf(″%lf″, &a); b) a2, a4, a8, a16, a32,… sunt usor de calculat
printf(″Exponent n=: ″); scanf(″%d″, &n); Orice exponent il pot scrie in binar, de ex. n=43
if(n <= 0)
{ printf(″Exponent negativ.\n″);
n = 00101011 = 20 + 21 + 23 + 25 = 1 + 2 + 8 + 32 = 43
exit(1); deci:
} a43 = a1 * a2 * a8 * a32 , obs. ca a4, a16, a64, a128 lipsesc.
for(i= 0, p =1.0; i<n; i++)
p *= a; Deplasarea la dreapta a lui n => pe ultima pozitie se afla
printf(″a = %lf\tn=%d\ta**n=%lf\n″, a, n, p ); bitul corespunzator inmultirii respective
}
PCLP6 - 15 PCLP6 - 16

4
Instructiuni repetitive - for (6) Instructiunea - break
#include <stdio.h>
#include <stdlib.h> break;
void main()
{ int n, i;
double a, p, f; #include <stdio.h> F T
printf(″Baza a=: ″); scanf(″%lf″, &a); void main() nr<11
printf(″Exponent n=: ″); scanf(″%d″, &n); { int nr=1;
if(n <= 0)
{ printf(″Exponent negativ.\n″); while(nr < 11) T
nr==4 F

exit(1); { if(nr==4)
}
i= n; break; Afiseaza nr
for(p =1.0, f =a; n; n>>1) printf(″in bucla, nr.=%d\n″, nr );
{ if(n&1) ++ nr;
p *= f; ++nr;
f *=f; //genereaza termenul urmator din sir }
} printf(″Bucla s-a terminat, nr.=%d\n″, nr);
printf(″a = %lf\tn=%d\ta**n=%lf\n″, a, i, p );
} }
PCLP6 - 17 PCLP6 - 18

Instructiunea - continue Instructiunea - goto


continue; ….
F
nr<6 T
goto eticheta; do{
void main() unde …
{ int nr; if(i==0)
T
nr==3 F eticheta: instructiune; goto divzero;
for(nr=1; nr < 6; ++nr) else
{ if(nr==3) x=y/i;
continue; Afiseaza nr ….
printf(″in bucla, nr.=%d\n″, nr ); ++nr;
}while(…);
...
} divzero: printf(″Impartire la 0\n″);
printf(″Bucla s-a terminat, nr.=%d\n″, nr); …
}

PCLP6 - 19 PCLP6 - 20

5
Instructiunea - return
return;
sau
return expresie;

- revenirea dintr-o functie

double power(double baza, int putere)


{ double p;
int i;
for(i= 0, p =1.0; i<putere; i++)
p *= baza;
return p;
}
PCLP6 - 21

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