PC CURS 5 Instrucțiuni

Embed Size (px)

DESCRIPTION

Instructiuni C/c++

Citation preview

  • *Cap. 3.4Instructiuni

  • *Instruciuni- simple -structurate. Instructiuni simple: instruciunea expresie instruciunea vid instruciunile goto, continue, break i return. OBSERVATIE: apelul unei funcii este considerat ca o instruciune expresie. Instruciunile structurate- instruciunea compus -if, switch - while, for, do-while. Programul structurat - program care conine numai:-structura secvenial (instruciunea compus);-structura alternativ (instruciunea if) i selectiv (instruciunea switch);-structura repetitiv (instruciunile while, for, do-while).

  • *3.4.1. Instruciunea expresieInstruciunea expresie are formatul:expresie;adic dup expresie se scrie ";" ; expresie este conform definiei din subcapitolul 3.3.Exemple de utilizare:a)Gsirea maximului dintre dou numere: /* Programul P_3_4_1.cpp */ /* Programul afiseaza maximul dintre 2 intregi */#include #include main(){ int a,b,c; printf("\nIntroduceti doi intregi a si b\n"); scanf("%d %d",&a,&b); c=a>b?a:b; /*instruciunea expresie */ printf("\nMaximul dintre a=%d si b=%d este c=%d\n",a,b,c); getch();}

  • *b)Calculul intensitii i a defazajului ntr-un circuit serie:/*Programul P_3_4_2.cpp *//*Calculul intensitatii si a defazajului intr-un circuit R-L*/#include #include #include #define PI 3.1415void main(void){ double U,R,L,f,Z,XL,I,fi; printf("\nTensiunea efectiva in volti U="); scanf("%lf",&U); printf("\nRezistenta in ohmi R="); scanf("%lf",&R); printf("\nInductanta in henri L=");scanf("%lf",&L);printf("\nFrecventa in herti f=");scanf("%lf",&f);XL=2*PI*f*L;/*Reactanta inductiva */Z=sqrt(R*R + XL*XL);/*Impedanta circuitului */I=U/Z;/*Intensitatea in amperi */fi=atan(XL/R)*180/PI;/*defazajul in grade sexagesimale */printf("\nIntensitatea I=%6.3lf [amperi]",I);printf("\nDefazajul fi=%6.3lf [grade]",fi);getch();}

  • *3.4.2.Instruciunea vidInstruciunea vid se reduce la punct i virgul, fr a avea vreun efect. Ea se utilizeaz acolo unde se cere prezena unei instruciuni, dar de fapt nu trebuie s se execute ceva (de exemplu n instruciunile repetitive).Exemplu de utilizare:for(i = 0, s = 0; i < n; s = s + a[i], ++i);3.4.3.Instruciunea compusInstruciunea compus este o succesiune de instruciuni incluse ntre acolade, eventual precedate de declaraii (valabile numai n acest bloc): { declaraii; instruciuni; }

  • *Instruciunea compus se utilizeaz acolo unde este nevoie conform sintaxei de o singur instruciune, dar procesul de calcul necesit mai multe instruciuni.Exemple de utilizare se pot vedea n programele urmtoare legate de utilizarea instruciunilor if, while-do, for, do-while care necesit conform sintaxei utilizarea numai a unei singure instruciuni, care poate fi simpl sau structurat.

    3.4.4.Instruciunea if

    a) if ( expresie ) instruciuneb) if ( expresie ) instruciune_1 else instruciune_2

    Efectul ei este urmtorul:Se evalueaz expresia "expresie".Dac rezultatul evalurii este true se execut n cazul instruciunea "instruciune" i n cazul "instruciune_1" i apoi se trece la instruciunea imediat urmtoare instruciunii if.

  • *Dac rezultatul evalurii este false se execut n cazul Se trece la instructiunea imediat urmatoare lui if;"instruciune_2" i apoi se trece la instruciunea imediat urmtoare instruciunii ifObservaii:a) instruciunile "instruciune", "instruciune_1", "instruciune_2" pot conine instruciuni de salt la alte instruciuni dect cea urmtoare instruciunii if.b) instruciunea if poate conine alte instruciuni if. Trebuie atenie la mbinarea lui else, n sensul de a ti la care if aparine.In cazuri dubioase, pentru a elimina neclaritile, se recomand utilizarea instruciunilor compuse.

  • * /* Programul P_3_4_3.cpp *//* Calculul radacinilor ecuatiei a*x^2 +b*x +c =0 */ #include #include #include = 0) { x1=(-b-sqrt(delta))/(2*a); x2=(-b+sqrt(delta))/(2*a); printf("\nEcuatia are radacinile x1=%g si x2=%g\n",x1,x2); }

  • *else { x1=-b/(2*a); x2=sqrt(-delta)/(2*a); printf("\nEcuatia are radacinile complex conjugate: x1=%g - j*%g si x2= %g+ j*%g\n",x1,x2,x1,x2); } } else printf("\nEcuatia nu este de ordinul 2 (a=0)\n"); getch(); }

  • *3.4.5.Instruciunea switchInstruciunea switch are urmtoarea sintax:switch ( expresie ){ case C1: sir_instruciuni_1 break; case C2: sir_instruciuni_2 break; ........................................... case Cn: sir_instruciuni_n break; default: sir_instruciuni /* opional */}

  • *Observaii:

    - Alternativa default este opional. Dac nu este prezent, n cazul n care rezultatul expresiei "expresie" nu coincide cu nici o constant Ci, instruciunea switch nu are nici un efect.- Dac break nu este prezent, atunci se execut i irurile de instruciuni imediat urmtoare, pn la ntlnirea unei instruciuni break sau pn la terminarea instruciunii switch.- Instruciunea structurat switch poate fi nlocuit prin instruciuni if imbricate

  • * /* Programul P_3_4_4.cpp */ /* Operatii cu numere intregi de formaOPERAND1operatorOPERAND2 */ #include #include #include #define INFINIT 0x7fff main() { int operand1,operand2,rezultat; char operatie; printf("\nScrieti expresia fara spatii intre operanzi i\ operator\n"); scanf("%d%c%d",&operand1,&operatie,&operand2);

  • *switch(operatie){ case '+': rezultat=operand1+operand2; break; case '-': rezultat=operand1-operand2; break; case '*': rezultat=operand1*operand2; break; case '/': if (operand2!=0) rezultat = operand1/operand2; else if (operand1 >0) rezultat=INFINIT; else rezultat=-INFINIT; break; default: exit(1); };printf("\n%d %c %d = %d\n", operand1, operatie, operand2, rezultat); getch();}

  • *3.4.6.Instruciunea whileFormatul instruciunii while este urmtorul:while ( expresie ) instruciuneEfectul instruciunii while este urmtorul:a) se evalueaz "expresie";b) dac rezultatul este true se execut corpul su ("instruciune) i se revine la pasul a). Dac rezultatul este false se trece la execuia instruciunii imediat urmtoare instruciunii while.Observaii:a) n cazul n care expresie este false de la nceput, atunci instruciune nu se execut niciodat.b) n cadrul corpului instruciunii while este nevoie de existena unor instruciuni de modificare a variabilelor care intr n "expresie".

  • */* Programul P_3_4_5.cpp *//* Calculul c.m.m.d.c. si a c.m.m.m.c a doua numere naturale a si b */#include #include main(){int a,b,a1,b1,cmmdc,cmmmc,rest;printf("Introduceti a=");scanf("%d",&a);printf("Introduceti b=");scanf("%d",&b);/* Aflarea c.m.m.d.c. */a1=a;b1=b;while ((rest=a1%b1)!=0) { a1=b1; b1=rest; }; cmmdc=b1; cmmmc=a*b/cmmdc; clrscr(); printf("a=%d b=%d cmmdc(a,b)=%d cmmmc=%d", a, b,cmmdc, cmmmc); getch(); }

  • *3.4.7.Instruciunea forFormatul instruciunii for este urmtorul:for ( expr1; expr2; expr3 ) instruciuneunde:- expr1, expr2, expr3 sunt expresii;- instruciune este corpul instruciunii.Descrierea efectului instruciunii for, cu ajutorul instruciunii while este urmtorul:expr1;while ( expr2 ) { instruciune; expr3; }Observaie: expr1, expr2, expr3 pot fi vide, ns caracterele ";" nu pot lipsi.

  • *a) Aproximarea unei funcii date prin n puncte prin polinomul lui Lagrange (se menioneaza c polinomul lui Lagrange este de ordinul n-1 i trece prin cele n puncte):/* Programul P_3_4._6.cpp *//* Aproximarea prin polinomul lui Lagrange */#include #include #define NMAX 20void main(void){ double s,p,x0,x[NMAX],y[NMAX]; int n,i,j; char ch; printf("\nIntroduceti nr.puncte:n="); scanf("%d",&n); for(i=1;i
  • *ch='D'; while((ch=='D')||(ch=='d')) { printf("\nIntroduceti valoarea x0="); scanf("%lf",&x0); s=0; for(i=1;i
  • *b)Programul de calcul a mediei aritmetice a n numere reale:/* Programul P_3_4_7.cpp *//* Calculul mediei aritmetice a n numere reale */#include #include main(){ float a[100],media,suma; int i,n; printf("\nIntroduceti nr.de elemente n="); scanf("%d",&n); printf("\nIntroduceti elementele sirului\n"); for(i=0,suma=0;i
  • *3.4.8.Instruciunea do-whileInstruciunea do-while este instruciunea ciclic cu test final. Formatul ei este urmtorul:do instruciunewhile ( expresie );Efectul ei este descris cu instruciunea while astfel:instruciune;while( expresie )instruciune;Se observ c corpul ciclului se execut cel puin o dat.

  • */* Programul P_3_4_8.cpp *//* Calculul mediei aritmetice a n numere reale */#include #include main(){ float a[100],media,suma; int i,n; do{ printf("\nIntroduceti nr.de elemente >1 n="); scanf("%d",&n); } while(n
  • */* Programul P_3_4_9.cpp *//* Calculul c.m.m.d.c. si a c.m.m.m.c a doua numere naturale a si b */#include #include main(){int a,b,a1,b1,cmmdc,cmmmc,rest;printf("Introduceti a=");scanf("%d",&a);printf("Introduceti b=");scanf("%d",&b);/* Aflarea c.m.m.d.c. */a1=a;b1=b;do{ rest=a1%b1; a1=b1; b1=rest; } while (rest!=0); cmmdc=a1; cmmmc=a*b/cmmdc; clrscr(); printf("a=%d b=%d cmmdc(a,b)=%d cmmmc=%d",a,b,cmmdc,cmmmc); getch(); }

  • *3.4.9.Instruciunile continue i break Instruciunile continue i break se pot utiliza numai n corpul unui ciclu.Instruciunea continue abandoneaz iteraia curent i se trece la execuia pasului de reiniializare n cazul instruciunii for, respectiv la revalidarea expresiei care stabilete continuarea sau terminarea ciclului n cazul instruciunilor while i do-while.Instruciunea break termin ciclul i se trece la instruciunea imediat urmtoare celei repetitive (for, while, do-while).

  • * Exemplu de utilizare a instruciunii continue: elementele unei matrice de numere reale care nu sunt pe diagonala principal vor fi nlocuite cu ptratele lor ( exemplul este didactic, problema se poate rezolva altfel):for(i=0; i
  • *3.4..10. Instruciunea gotoInstruciunea goto este utilizat pentru saltul dintr-un punct al unei funcii (chiar i dintr-un ciclu) n alt punct al aceleeai funcii, respectiv la o instruciune etichetat.Eticheta este un nume urmat de caracterul ":" nume:Formatul instruciunii goto este:goto eticheta;Exemplu:goto alfa; alfa: if ( )

  • *Exemplu de utilizare: secvena de program din paragraful anterior scris cu break, se va rescrie cu goto astfel: for(i=0; i
  • *3.4.11. Funcia standard exit Prototipul funciei standard exit este descris n fiierele stdlib.h i process.h i este:void exit(int cod); Funcia exit are ca scop terminarea forat a execuiei programului. Codul de ieire folosit este zero pentru terminare normal i alte valori pentru terminare datorat unor erori. Exemplu de utilizare: dac datele pentru un program nu sunt citite corect, atunci programul se termin forat:n=scanf("%d%d%f%f",i,j,a,b);if(n!=4) exit(1); /* ieire forat din program cu codul 1 */ printf ("i=%d j=%d a=%f b=%f\n",i,j,a,b); Utilizarea instruciunilor goto, continue, break i a funciei exit distruge concepia de program structurat. De aceea nu se recomand utilizarea lor, chiar dac mresc flexibilitatea n programare.