Sunteți pe pagina 1din 6

Instrucțiuni ciclice:

1. while (expresie boolean) instrucțiune1;


Exemplu: Suma cifrelor lui N
#include<iostream>
using namespace std;

int main()
{ int n,s=0;
cout<<”n=”; cin>>n;
while (n) { s=s+ n % 10;
n=n/10;
}
cout<<”Suma cifrelor=” <<s;
return 0;
}
2. Do While (instrucțiunea repeat Pascal)
are forma:
do { instrucțiune; }
while (expresie boolean);
Exemplu: S=1+2+3+…+n;
#include<iostream>
using namespace std;
int main(){
int n,s=0,i=1;
cout<<”n=”; cin>>n;
do { s=s+i; i++; }
while(i<=n);
cout<<”suma=”<<s;
return 0; }
Metoda II #include<iostream>
using namespace std;
int main() {
int n,s=0,i=1;
cout<<”n=”; cin>>n;
do s+=i++;
while(i<=n);
cout<<”suma=”<<s;
return 0; }
3. Instructiunea FOR
for ( inițializare; expr bool/ logică; exp. de incrementare)

Exemplu: S=1+2+3+…+n;
#include<iostream>
using namespace std;
int main(){
int i,n, s=0;
cout<<”n=”; cin>>n;
for ( i=1; i<=n; i++) s+=i; // s=s+i; s=1+2+3+4+...+n
cout<<” suma=”<<s;
return 0;
}
Metoda II

for ( i=0 , s=0; i<=n; ++i , s+=i) ;


for(i=1, s=0; i<=n && s<=100; s+=i, i++); //la fiecare pas se executa s+=i și i++
//atât timp cât se verifică relațiile i<=n && s<=100

Instructiunile ciclice (iterative) in C++

Instructiuni ciclice in C++


Instructiunile ciclice sunt instructiunile, care executa una si aceeasi instructiune (numita corpul ciclului) de mai
multe ori. Sunt trei instructiuni ciclice:
1. ins. while … do - instructiune cu un numar necunoscut de pasi
2. ins do … while (In Pascal era repeat … until) – tot cu un nr. necunoscut pasi
3. ins. for - instructiune cu contor
for (initializare; expresie bool; incriminare)
Ex. int nr=0;
for (int i=1; i<=k; i++)
if ( k % i= =0) nr++; // nr=nr+1;
if (nr==2) cout<<”k- este numar prim”<<endl;
else cout<<”k- nu e numar prim”<<endl;

Instructiunea while … do
Semantica unei notiuni ne arata ce contine ea si modul de executie
Sintaxa - ne arata multime tuturor regulilor de scriere corecta a aceste notiuni, sau instructiuni
Semantica se descrie cu ajutorul schemelor logice/ scheme- bloc.
Sintaxa se descrie cu ajutorul:
a) diagramelor de sintaxa
b) cu ajutorul formulelor BNF : ::= < > |- or []- optional {} poate sa se repete
<instr while do>::=while (<expresie bool>) <instruc>
Semantica instructiunii while… do

Instructiunea While mai intii evaluiaza o expresie de tip boolean, care are valoarea true sau false. Cat timp
expresia boolean este true se executa o instructiune, numita corpul ciclului si iar se evaluiaza expresia boolean.
Cand expresia boolean devine false, corpul ciclului nu se mai executa si se trece la urmatoarea instructiune:
Schema logica a instructiunii While:
Sinstaxa: ( ne arata cum se scrie aceasta instructiune intr-un limbaj de programare)

C++ : while (expresie boolean ) instructiune;

Ex. i=1; s=0;


while ( i<=10) { s+=i; i++; }; // i- se numeste contor ciclic
cout<<S;
va calcula suma s = 1+2+3+4+…+10 Raspuns: s= 55

Aplicatii:

Cu ajutorul instructiunii while putem rezolva urmatoarele probleme:


1. Calcula sume: s=1+2+3+…+ n, n<=1000 000
2. Calcula produse: P= 1*2*3*…*n, n<=20 ; P=2*4*6*…n
3. Calcula n! = 1*2*3*…*n, n<=20 0!=1, 1!=1
4. Calcula puteri: an = a*a*a*…*a – de n-ori, 00 – nu are sens
5. Putem afla divizorii unui numar n, suma divizorilor, numarul divizorilor
6. Putem calcula suma cifrelor, numarul de cifre si rasturnatul unui numar n
Ex: cout<<”n=”; cin>>n;
S=0; rast=0;
if (n==0) k=1; else k=0;
while (n) { s+= n % 10; k++; // inc(k)
rast=rast*10 +n % 10;
n=n / 10;
}
cout<<”n=”<<n<<endl;
cout<<”suma cifrelor=”<<s<<endl;
cout<<”nr de cifre=”<<k<<endl;
cout<<”rast=”<<rast<<endl;

Ex. n=23859 Suma= 9+5+8+3+2 =27; nr=5 ; rast= 95832


7. Putem calcula cel mai mare divizor comun a doua numere x si y ( 2 metode)
8. Putem transforma un numar n in baza 2, 4, 8, 16, …

Instructiunea do … while

Semantica: (inseamna ce contine intructiunea si modul ei de executie)


Instructiunea do …while ( spre deosebune de while mai intai executa o intructiune, numita corpul ciclului,
iar apoi evaluiaza o expresie de tip boolean, care are valoarea true sau false. Cat timp expresia boolean este
true se executa o instructiune, numita corpul ciclului si iar se evaluiaza expresia boolean. Cand expresia
boolean devine false, corpul ciclului nu se mai executa si se trece la urmatoarea instructiune:

Schema logica a instructiunii While si Repeat:


Asemanarile si deosebirile
dintre instructiunea while (exp. bool) do { instrA; }
si do { inst A } while (exp. bool);
La ambele instructiuni ciclice:
1. corpul ciclului poate sa se executa de mai multe ori (finit de iteratii)
2. La ambele instructiuni se evaluaiaza o expresie de tip boolean
3. La ambele instructiuni corpul ciclului se executa, daca expresia boolean este true , iar daca expresia boolean
este false ciclul se intrerupe.

Deosebirile:
1. La while… do intii se evaluiaza expresia bool, apoi se executa instructiune, pe cand la do…while intii se
executa instructiunea, apoi se evaluiaza expresia bool
2. Daca la while … do expresia boolean este false de la bun inceput, atunci ciclul se intrerupe si corpul ciclului
nu se executa de loc, pe cand la instructiunea do … while corpul ciclului se executa cel putin o data.
Deaceea la instructiune do … while trebuie sa fim atenti la cazurile particulare
Ex. n!- ?
While …do do… while;
cin>>n; long long P=1; cin>>n; long long P=1; i=1;
int i=2; do { P*=i; i++; }
while (i<=n) { P*=i; i++;} while (i<=n);
cout<<”n!=”<<P<<endl; cout<<”n!=”<<P<<endl;

Sintaxa: Ins. do … while se scrie in felul urmator:


do instructiune while (exp. boolean);

Rezolvarea problemelor cu ajutorul instructiunilor ciclice:


Problema 1
Se da variabila int n;
1. de citi n
2. de aflat suma cifrelor, numarul de cifre si rasturnatul nr. n
3. de scris rezultatele
Metoda I
int n; cin>>n; // cu while… do
int S=0, rast=0; int k; if (n==0) k=1; else k=0;
while (n) { S+=abs(n) % 10; rast=rast*10+ n % 10;
k++; n/=10;
}
cout<<”suma cifrelor S=”<<S<<endl;
cout<<”rasturnatul este rast=”<<rast<<endl;
cout<<”numarul de cifre este k=”<<k<<endl;
Metoda II
int n; cin>>n; // cu do …while
int S=0, rast=0; int k=0;
do { S+=abs(n) % 10; rast=rast*10+ n % 10;
k++; n/=10;
}
While (n);
cout<<”suma cifrelor S=”<<S<<endl;
cout<<”rasturnatul este rast=”<<rast<<endl;
cout<<”numarul de cifre este k=”<<k<<endl;

Instructiunea For
Instructiunea for in C se scrie in felul urmator:
for ( inițializare; expr logică de tip bool; exp. de incrementare) instructiune;
Se foloseste cand este o instructiune ciclica cu contor. Contorul este o variabila, careia la inceput ii
atribuim o valoare initiala, scriem expresia boolean pana cand se executa corpul ciclului si indicam
incrimentarea contorului

Problema1: Suma S=1+2+3+…+n; /* i- este contor ciclic si i++; - incrimentarea */


#include<iostream>
using namespace std;
int main() { int i,n, s=0;
cout<<”n=”; cin>>n;
for( i=1; i<=n; i++) s+=i; // s=s+i; i=i+1
cout<<” suma=”<<s;
return 0;
}
Metoda II for ( i=1, s=1; i<=n; ++i, s+=i ) ;
for(i=1, s=0; i<=n ; s+=i, i++); //la fiecare pas se executa s+=i și i++

Cu ajutorul instructiunii for putem calcula:


1. Sume, produce, factorialul, divizorii
2. citi si prelucra un sir de numere, un sir de caractere
3. parcurge tablouri
4. vom parcurge siruri de caractere
5. ....

Problema 2
Se da variabila int n;
1. de citi n
2. de aflat divizorii numarului n, suma divizorilor , numarul divizorilor nr. n
3. de scris rezultatele
int n; cin>>n;
if (n==0) cout<<”0- are o infinitate de divizori”<<endl;
else { cout<<”divizorii lui n sunt:”<<endl;
int suma=0, k=0;
for (int i=1; i<=n; i++)
if (n%i ==0) {cout<<i<<” ”; suma+=I; k++ }
cout<<endl;
cout<<suma<<k<<endl;
Daca numarul n are 2 divizori el este prim, in caz contrar nu este prim

Problema 3
Fie ca se da variabilele int n, a;
1. de citit n
2. de citit cu ajutorul variabilei a, n-nr intregi
3. de aflat: - suma numerelor citite
- numarul maxim
- numarul minim
- cate numere prime am citit (daca sunt citite numere prime)
4. De scris rezultatele
Avem nevoie de variabilele: S, maxi, mini, k, i, j, nr

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