Instructiunea while while expresie · PDF file5 Instructiunea continue Incheie iteratia...
-
Upload
vuongnguyet -
Category
Documents
-
view
214 -
download
1
Transcript of Instructiunea while while expresie · PDF file5 Instructiunea continue Incheie iteratia...
1
Instructiunea while
Forma generala:
while (expresie)
instructiune;
Modul de executie:
1) Se evalueaza expresie, daca expresie = 0 (fals) se iese din instructiunea while, altfel
(expresie ≠ 0, deci adevarat) se trece la pasul 2.
2) Se executa instructiune. Se trece la pasul 1.
Exemplu: algoritmul lui Euclid pentru calcularea celui mai mare divizor comun a doua
numere intregi.
#include <iostream.h>
void main (void) {
int m,n,r;
cout<<"\n\n***** Algoritmul lui Euclid (while) *****";
cout<<"\nIntroduceti doua numere intregi:\n";
cin>>m>>n;
r=m%n;
while(r) {
m=n;
n=r;
r=m%n;
}
cout<<"C.m.m.d.c.="<<n;
}
Exemplu: maxim si pozitia sa dintr-un sir de numere reale citite de la tastatura.
#include <iostream.h>
void main (void) {
float x,xmax;
int n,i,poz;
cout<<"\n*** Maxim si pozitia sa (fara tablou) ***";
cout<<"\nIntroduceti lungimea sirului:";
cin>>n;
xmax=-1; poz=-1; i=0;
while (i<n) {
cout<<"\nIntroduceti elementul "<<i<<": ";
cin>>x;
if (x>xmax) {
xmax=x;
poz=i;
}
i++;
}
cout<<"\nMaximul="<<xmax<<" in pozitia "<<poz;
}
Instructiunea do while
Forma generala:
2
do
instructiune;
while (expresie);
Modul de executie:
1) Se executa instructiune. Se trece la pasul 2.
2) Se evalueaza expresie, daca expresie = 0 (fals) se iese din instructiunea do while, altfel
(expresie ≠ 0, deci adevarat) se trece la pasul 1.
Exemplu: algoritmul lui Euclid pentru calcularea celui mai mare divizor comun a doua
numere intergi.
#include <iostream.h>
void main(void) {
int m,n,r;
char tasta;
cout<<"\n\n***** Algoritmul lui Euclid (do while) *****";
cout<<"\nIntroduceti doua numere intregi:\n";
cin>>m>>n;
do {
r=m%n;
m=n;
n=r;
}
while(r!=0);
cout<<"C.m.m.d.c.="<<m;
}
Exemplu: tabelarea valorilor unei functii pe un interval.
#include <iostream.h>
void main(void) {
float a,b,x,y,pas;
do
{ cout<<"\n*** Tabelare valori functie x^2+1 ***";
cout<<"\nIntroduceti limitele intervalului si pasul:";
cin>>a>>b>>pas;
}
while((a>=b)||(pas<=0));
cout<<"\n x y";
x=a;
while(x<=b)
{ y=x*x+1;
cout<<"\n"<<x<<" "<<y;
x+=pas;
}
}
Exemplu: media artimetica a numerelor strict pozitive si cea a numerelor strict negative
dintr-un sir citit de la tastatura si terminat cu valoarea 0.
#include<iostream.h>
void main() {
float medp, medn, x;
int np, nn;
cout<<"\n***Media numerelor pozitive si negative dintr-un sir terminat cu
0 ***";
medp=medn=0;
np=nn=0;
3
do {
cout<<"\nIntroduceti numarul curent:";
cin>>x;
if (x>0) {
medp+=x;
np++;
}
else
if (x<0) {
medn+=x;
nn++;
}
}
while (x!=0);
if (np!=0) medp/=np;
if (nn!=0) medn/=nn;
cout<<"\nMedia nr pozitive="<<medp;
cout<<"\nMedia nr.negative="<<medn;
}
Exemplu: aproximarea sumei seriei:
.....!
.....!3!2!1
132
++++++=
n
aaaae
na
insumarea se face pana cand modulul termenului general < ε (ε > 0).
#include<iostream.h>
#include<math.h>
void main(void) {
int n=2;
double a, suma=1, tg, eps;
cout<<"*** Dezvoltare in serie exp(a) ***\n";
cout<<"Introduceti punct si epsilon:";
cin>>a>>eps;
tg=a;
do {
suma+=tg;
tg*=a/n;
n++;
}
while (fabs(tg)>eps);
cout<<"Seria="<<suma;
}
Instructiunea for
Forma generala:
for (instructiune_initiala; expresie1; expresie2)
instructiune;
unde:
instructiune_initiala poate sa fie o declaratie sau o expresie (utilizata in general pentru
initializarea sau asignarea unei variabile sau set de variabile); poate fi si instructiune nula;
expresie1 este controlul buclei (se executa instructiunea din corpul for ori de cate ori
expresie1 este evaluata la o valoare ≠ 0, adevarat). Daca expresie1 este de la inceput = 0, fals,
instructiune nu se executa niciodata;
4
expresie2 este evaluata dupa fiecare iteratie: utilizata in general pentru a modifica variabila
initializata de instructiune_initiala. Daca expresie1 este fals inca de la inceput, expresie2 nu este
evaluata niciodata.
Modul de executie:
1) Se executa instructiune_initiala.
2) Se evalueaza expresie1: daca expresie1 = 0 (fals) se incheie executia instructiunii for,
altfel (expresie1 ≠ 0, adevarat) se trece la pasul 3.
3) Se executa instructiune din corpul lui for. Se evalueaza expresie2. Se trece la pasul 2.
Exemplu: calcularea factorialului unui numar natural n! (corect pentru n ≤ 13).
#include <iostream.h>
void main(void) {
unsigned long int fact=1, n, i;
cout<<"*** Factorial ***\n";
cout<<"Introduceti un nr natural:";
cin>>n;
for (i=2; i<=n; i++)
fact*=i;
cout<<"Factorial de n este: "<<fact;
}
Exemplu: calcularea valorii aproximative a integralei definite:
∫b
a
dxxf )(
prin metoda dreptunghiurilor (aici f(x) = x).
#include <iostream.h>
void main(void)
{
float a,b,lat,suma=0,x;
int n,i;
do {
cout<<"\n\n***** Integrala *****";
cout<<"\nIntroduceti lim integ si nr. dreptunghiuri:";
cin>>a>>b>>n;
}
while((a>=b)||(n<4));
x=a; lat=(b-a)/n;
for (i=1;i<=n;i++) {
suma+=lat*x;
x+=lat;
}
cout<<"Integrala="<<suma;
}
Instructiunea break
Este utilizata pentru a incheia instructiunile while, do while, for si switch. Pentru
instructiuni imbricate incheie instructiunea cea mai interioara. Executia continua cu instructiunea
imediat urmatoare celei intrerupte.
5
Instructiunea continue
Incheie iteratia curenta de la o instructiune while, do while sau for. Astfel:
-executia instructiunii while, respectiv do while continua cu evaluarea expresiei
reprezentand controlul ciclului;
-executia instructiunii for continua cu evaluarea expresiei2.
Instructiunea goto
Transfera executia la instructiunea etichetata specificata, dar in interiorul aceleiasi functii.
Forma generala:
goto eticheta;
unde eticheta este un identificator furnizat de utilizator, urmat de caracterul ':'.
Observatie. O eticheta nu poate sa preceada '}'. Se utilizeaza in acest caz o instructiune nula; . . . . . . . . . . .
sfarsit: ; //instructiune nula
}
Este interzis saltul peste o definitie de variabila cu initializator explicit (operator =) sau initializator
implicit (constructor de clasa). Exceptie: definitia variabilei apare intr-un bloc si este sarit intregul
bloc.
Exemplu: rezolvarea ecuatiei de gradul 2.
#include<iostream.h>
#include<math.h>
void main() {
double a,b,c,delta,x,x1,x2,x1r,x1i,x2r,x2i;
cout<<"\n*** Ecuatia de grad II, cu goto ***";
cout<<"\nIntroduceti coeficientii ecuatiei:\n";
cin>>a>>b>>c;
if (a!=0) goto ecgr2;
if (b!=0) goto ecgr1;
if (c!=0) goto vida;
cout<<"\nSolutia este R!";
goto gata;
vida:
cout<<"\nSolutie vida!";
goto gata;
ecgr1:
x=-c/b;
cout<<"\nx="<<x;
goto gata;
ecgr2:
delta=b*b-4*a*c;
if (delta<0) goto imag;
x1=(-b+sqrt(delta))/2/a;
x2=(-b-sqrt(delta))/2/a;
cout<<"\nx1="<<x1<<" x2="<<x2;
goto gata;
imag:
x1r=-b/2/a; x2r=x1r;
x1i=(sqrt(-delta))/2/a;
x2i=-x1i;
cout<<"\nx1r="<<x1r<<" x1i="<<x1i;
cout<<"\nx2r="<<x2r<<" x2i="<<x2i;
6
gata:
; // aici este o instr vida
}