Lecture3 - PC
-
Upload
adrian-runceanu -
Category
Engineering
-
view
80 -
download
4
Transcript of Lecture3 - PC
Programarea calculatoarelor
#3
Adrian Runceanuwww.runceanu.ro/adrian
2016
C++Instrucţiunile limbajului C++
3. Instrucţiunile limbajului C++
3.1. Instrucţiunea vidă3.2. Instrucţiunea compusă3.3. Instrucţiunea expresie3.4. Instrucţiunea if3.5. Instrucţiunea while3.6. Instrucţiunea do while3.7. Instrucţiunea for3.8. Instrucţiunea switch3.9. Instrucţiunea break3.10. Instrucţiunea continue3.11. Instrucţiunea goto3.12. Instrucţiunea return
02.12.2016 Programarea calculatoarelor 3
3.1. Instrucţiunea vidă
Limbajul C++ are câteva instrucţiuni cu ajutorul cărora se pot construi programe. Acestea sunt:
Instrucţiunea vidă:
Instrucţiunea compusă:
este delimitată de { şi se termină cu }.
02.12.2016 Programarea calculatoarelor 4
;
{ . . . . }
3. Instrucţiunile limbajului C++
3.1. Instrucţiunea vidă3.2. Instrucţiunea compusă3.3. Instrucţiunea expresie3.4. Instrucţiunea if3.5. Instrucţiunea while3.6. Instrucţiunea do while3.7. Instrucţiunea for3.8. Instrucţiunea switch3.9. Instrucţiunea break3.10. Instrucţiunea continue3.11. Instrucţiunea goto3.12. Instrucţiunea return
02.12.2016 Programarea calculatoarelor 5
3.2. Instrucţiunea compusă
Uneori programele trebuie să efectueze una sau
mai multe instrucţiuni atunci când o condiţie este
îndeplinită (de exemplu într-o instrucţiune if) şi alte
instrucţiuni când condiţia nu este îndeplinită.
Sau atunci când o condiție se evaluează într-o
structură (instrucțiune) repetitivă – de tip while, do
while sau for, iar prelucrările din acea structură pot
să fie compuse din una sau mai multe instrucțiuni.
02.12.2016 Programarea calculatoarelor 6
3.2. Instrucţiunea compusă
Limbajul C++ consideră instrucţiunile ca fiind
instrucţiuni simple şi instrucţiuni compuse:
O instrucţiune simplă este de fapt o singură
instrucţiune, cum ar fi aceea de atribuire sau de apel
al unei funcţii standard (de exemplu funcţia cout).
O instrucţiune compusă este alcătuită din două
sau mai multe instrucţiuni incluse între acolade.
02.12.2016 Programarea calculatoarelor 7
3. Instrucţiunile limbajului C++
3.2. Instrucţiunea vidă3.2. Instrucţiunea compusă3.3. Instrucţiunea expresie3.4. Instrucţiunea if3.5. Instrucţiunea while3.6. Instrucţiunea do while3.7. Instrucţiunea for3.8. Instrucţiunea switch3.9. Instrucţiunea break3.10. Instrucţiunea continue3.11. Instrucţiunea goto3.12. Instrucţiunea return
02.12.2016 Programarea calculatoarelor 8
3.3. Instrucţiunea expresie
Instrucţiunea expresie:
Are 3 forme:
a) instrucţiunea de atribuire b) instrucţiunea de apel de funcţiec) instrucţiunea de incrementare / decrementare
02.12.2016 Programarea calculatoarelor 9
expresie;
3.3. Instrucţiunea expresie
a) instrucţiunea de atribuire
Exemplu:int x, y, z;z = x + 5 * y;x + = 10; (semnificație: x = x + 10;)
02.12.2016 Programarea calculatoarelor 10
variabila = expresie; sau
variabila operator = expresie;
3.3. Instrucţiunea expresie
b) instrucţiunea de apel de funcţie
unde pa1, pa2, . . ., pan sunt parametrii actuali aifuncţiei (adică valorile cu care se va lucra înfuncţia respectivă la apelul funcţiei).
Exemplu:maxim (int a, int b); // apelul functiei maxim care are doi
parametri actuali de tip întreg
02.12.2016 Programarea calculatoarelor 11
nume_functie(pa1, pa2, . . . ,pan);
3.3. Instrucţiunea expresie
c) instrucţiunea de incrementare/decrementare
Exemplu:int i, j, k;i++; --j;k++ + --i;
02.12.2016 Programarea calculatoarelor 12
variabila ++;++ variabila;variabila --;-- variabila;
3. Instrucţiunile limbajului C++
3.1. Instrucţiunea vidă3.2. Instrucţiunea compusă3.3. Instrucţiunea expresie3.4. Instrucţiunea if3.5. Instrucţiunea while3.6. Instrucţiunea do while3.7. Instrucţiunea for3.8. Instrucţiunea switch3.9. Instrucţiunea break3.10. Instrucţiunea continue3.11. Instrucţiunea goto3.12. Instrucţiunea return
02.12.2016 Programarea calculatoarelor 13
3.4. Instrucţiunea if
Instrucţiunea if (instrucţiune de decizie sau condiţională)
Are două forme:
02.12.2016 Programarea calculatoarelor 14
if (expresie) instructiune;
if (expresie) instructiune1;
elseinstructiune2;
3.4. Instrucţiunea if
Instrucţiunea if
Observaţie:În limbajul C++, spre deosebire de limbajul
PASCAL, nu există cuvântul cheie THEN.02.12.2016 Programarea calculatoarelor 15
Exemple de programe C++
Enunţ:Să se calculeze perimetrul şi aria unui triunghioarecare dacă se cunosc laturile triunghiului.
Pas 1: Stabilim care sunt datele de intrare, adică celecare vor fi prelucrate cu ajutorul algoritmului,împreună cu datele de ieşire.
În cazul problemei date, avem:Date de intrare: a, b, şi c numere reale ce reprezintă
laturile triunghiului.Date de ieşire: p şi S numere reale ce reprezintă
perimetrul si aria triunghiului dat.02.12.2016 Programarea calculatoarelor 16
Exemple de programe C++Pas 2: Analiza problemei
Stabilim condiţiile pe care trebuie să leîndeplinească datele de intrare pentru a fiprelucrate în cadrul algoritmului.
În cadrul problemei pe care o avem de rezolvat,cunoaştem formula lui Heron pentru calculul arieiunui triunghi dacă se cunosc laturile sale:
unde p reprezintă semiperimetrul triunghiului.
))()(( cpbpappS
02.12.2016 Programarea calculatoarelor 17
Exemple de programe C++
Pas 3: Scrierea algoritmului în pseudocod:
02.12.2016 Programarea calculatoarelor 18
real a, b, c, p, Sciteşte a, b, cp <- a + b + cscrie ‘Perimetrul triunghiului este ‘, pp <- p / 2
scrie ‘Aria triunghiului este ’, Sstop
c)(pb)(pa)(ppS
Exemple de programe C++
Pas 4: Implementarea algoritmului în limbajul de programare C++:
02.12.2016 Programarea calculatoarelor 19
#include<iostream.h>#include<math.h>int main(void){
float a, b, c, p, S;cin>>a; cin>>b; cin>>c;p = a + b + c;
cout<<" Perimetrul este = "<<p;
p = p / 2;S = sqrt(p*(p-a)*(p-b)*(p-c));cout<<"Aria este = "<<S;
}
Exemple de programe C++
Pas 5: Testarea algoritmului pe date de intrare diferite şiverificarea rezultatelor.
Exemplul 1:Pentru valorile a=2, b=3, c=4, obţinem următoarele
rezultate:Perimetrul este = 9Aria este = 1.369306
Exemplul 2:Pentru valorile a=12, b=4, c=10, obţinem
următoarele rezultate:Perimetrul este = 26Aria este = 5.196152
02.12.2016 Programarea calculatoarelor 20
Exemple de programe C++
Enunţ:Să se calculeze valoarea funcţiei f(x), ştiind că x
este un număr real introdus de la tastatură:
Pas 1: Date de intrare: x număr realDate de iesire: f număr real, reprezentând valoarea
funcţiei date.
0,2
]0,7(,30
]7,(,206
)(
xdacax
xdacax
xdacax
xf
02.12.2016 Programarea calculatoarelor 21
Exemple de programe C++
Pas 2: Analiza problemeiStabilim condiţiile pe care trebuie să le
îndeplinească datele de intrare pentru a fiprelucrate în cadrul algoritmului.
Căutăm cazurile particulare.În cadrul problemei pe care o avem de rezolvat,
verificăm condiţiile date în expresia funcţiei:1) Dacă x <= -7, atunci funcţia are valoarea: -6x+202) Daca x > -7 si x <= 0, atunci funcţia are valoarea:
x+303) Daca x > 0, atunci funcţia are valoarea: sqrt(x)+2
02.12.2016 Programarea calculatoarelor 22
Exemple de programe C++
Pas 3: Scrierea algoritmului în pseudocod:
02.12.2016 Programarea calculatoarelor 23
real x, fciteşte xdacă x <= -7 atunci
f <- -6 * x + 20altfel
dacă x > -7 şi x <= 0 atuncif <- x + 30
altfelf <- sqrt(x) + 2
sfârşit dacăsfarşit dacăscrie fstop
Exemple de programe C++
Pas 4: Implementarea algoritmului în limbajul de programare C++:
02.12.2016 Programarea calculatoarelor 24
#include<iostream.h>#include<math.h>int main(void){
float x, f;cin>>x;if( x <= -7 ) f = -6 * x + 20;else
if( x > -7 && x <= 0 )f = x + 30;
elsef = sqrt(x) + 2;
cout<<"f = "<<f;}
Exemple de programe C++
Pas 5: Testarea algoritmului pe date de intrarediferite şi verificarea rezultatelor.
Exemplul 1:Pentru valoarea x=2 obţinem următorul rezultat:
f= 3.414214Exemplul 2:
Pentru valoarea x=-24 obţinem următorulrezultat:
f= 164
02.12.2016 Programarea calculatoarelor 25
Exemple de programe C++
Enunţ:Se dau trei numere întregi a,b,c. Să se
afişeze în ordine crescătoare.Exemplu: Dacă a = 12, b = 2, c = 9, atunciobţinem a = 2, b = 9, c = 12
Pas 1:Date de intrare: a, b, c numere întregiDate de iesire: a, b, c în ordine crescătoare
02.12.2016 Programarea calculatoarelor 26
Exemple de programe C++
Pas 2: Analiza problemei1) Comparăm primele două numere a şi b, dacă a este
mai mare decât b atunci vom interschimba celedouă valori.
2) Comparăm următoarele două numere b şi c, dacă beste mai mare decât c atunci vom interschimba celedouă valori.
3) Comparăm din nou cele două numere a şi b, dacă aeste mai mare decât b atunci vom interschimba celedouă valori.
02.12.2016 Programarea calculatoarelor 27
Exemple de programe C++
Pas 3: Scrierea algoritmului în pseudocod:
02.12.2016 Programarea calculatoarelor 28
întreg a, b, c, auxciteşte a, b, cdacă a > b atunci
aux <- aa <- bb <- aux
sfârşit dacădacă b > c atunci
aux <- bb <- cc <- aux
sfârşit dacădacă a > b atunci
aux <- aa <- bb <- aux
sfârşit dacăscrie a, b, cstop
Exemple de programe C++
Pas 4: Implementarea algoritmului în limbajul de programare C++:
02.12.2016 Programarea calculatoarelor 29
#include<iostream.h>int main(void){
int a, b, c, aux;cin>>a; cin>>b; cin>>c;if( a > b ) {
aux=a;a=b;b=aux;
}if( b > c ){
aux=b;b=c;c=aux;
}if( a > b ){
aux=a;a=b;b=aux;
}cout<<a<<" "<<b<<" "<<c;
}
Exemple de programe C++
Pas 5: Testarea algoritmului pe date de intrarediferite şi verificarea rezultatelor.
Exemplul 1:Pentru valorile a=11, b=7, c=10 obţinem
următorul rezultat:7 10 11
Exemplul 2:Pentru valorile a=2, b=17, c=5 obţinem
următorul rezultat:2 5 17
02.12.2016 Programarea calculatoarelor 30
3. Instrucţiunile limbajului C++
3.1. Instrucţiunea vidă3.2. Instrucţiunea compusă3.3. Instrucţiunea expresie3.4. Instrucţiunea if3.5. Instrucţiunea while3.6. Instrucţiunea do while3.7. Instrucţiunea for3.8. Instrucţiunea switch3.9. Instrucţiunea break3.10. Instrucţiunea continue3.11. Instrucţiunea goto3.12. Instrucţiunea return
02.12.2016 Programarea calculatoarelor 31
3.5. Instrucţiunea while
Instrucţiunea while(instrucţiune repetitivă cu test iniţial)
Are următoarea formă:
unde instrucţiune poate fi: instrucţiunea vidă instrucţiunea simplăsau instrucţiunea compusă
02.12.2016 Programarea calculatoarelor 32
while (expresie) instructiune;
3.5. Instrucţiunea while
Instrucţiunea while(instrucţiune repetitivă cu test
iniţial)
Funcţionarea unei astfelde instrucţiuni se bazează peevaluarea expresiei date şiexecutarea repetată ainstrucţiunii cât timp expresiaeste îndeplinită.
02.12.2016 Programarea calculatoarelor 33
3.5. Instrucţiunea while
Exemplu:Prezentăm în
continuare un program în limbajul C/C++, care calculează suma primelor n numere întregi, cu n<=10:
02.12.2016 Programarea calculatoarelor 34
#include<iostream.h>int main(void){
int i, n, s=0;
cout<<"Dati numarul n = ";
cin>>n;i = 1;while( i <= n ){
s = s + i;i++;
}
cout<<"Suma primelor "<<n<<"numere intregi este "<<s;
}
3.5. Instrucţiunea while
La execuţia acestui program se poate obţine următorul rezultat:
Dati numarul n = 5Suma primelor 5 numere intregi este 15
02.12.2016 Programarea calculatoarelor 35
3.5. Instrucţiunea while
Folosind
facilităţile limbajuluiC/C++, se poatescrie aceeaşisecvenţă deprogram într-oformă prescurtată şichiar mai eficientă:
02.12.2016 Programarea calculatoarelor 36
#include<iostream.h>int main(void){
int i=1, n, s=0;cout<<"Dati numarul n = ";cin>>n;while(i<=n) s+=i++;cout<<"Suma primelor
"<<n<<" numere intregi este"<<s;
}
3.5. Instrucţiunea while
Observaţie:Pentru ca un ciclu repetitiv să se execute
încontinuu (la infinit), se poate utiliza o buclăinfinită prin introducerea ca expresie a uneivalori diferite de 0.
while (1) este o buclă infinită care se vaexecuta până când de la tastatură se vaîntrerupe execuţia prin apăsarea tastelorCTRL+C.
02.12.2016 Programarea calculatoarelor 37
Exemple de programe C++
Enunţ:Să se citească un număr natural n. Să se scrie unalgoritm care afişează toţi divizorii numărului dat.
Exemplu: Pentru n = 12, mulţimea divizorilor este formatădin valorile 1, 2, 3, 4, 6, 12.
Pas 1: Stabilim care sunt datele de intrare, împreună cudatele de ieşire.
În cazul problemei date, avem:Date de intrare: n număr naturalDate de ieşire: divizorii numărului n
02.12.2016 Programarea calculatoarelor 38
Exemple de programe C++
Pas 2: Analiza problemeiÎn cadrul problemei pe care o avem de rezolvat,
verificăm condiţia ca un număr să fie divizor al altuinumăr şi anume:
i este divizor al numărului n dacă se împarteexact la el, adică dacă este adevărată expresia n % i =0.
Pentru a găsi toţi divizorii numărului n dat, vomda valori lui i, pornind de la valoarea 1 până lavaloarea n.
Deci vom utiliza o structură repetitivă.02.12.2016 Programarea calculatoarelor 39
Exemple de programe C++
02.12.2016 Programarea calculatoarelor 40
Pas 3:
Scrierea algoritmului în pseudocod:
natural n, iciteşte ni <- 1cât timp i <= n execută
dacă n % i = 0 atunciscrie i
sfârşit dacăi <- i + 1
sfârşit cât timpstop
Exemple de programe C++
Pas 4:Implementarea
algoritmului în limbajul de programare C++:
02.12.2016 Programarea calculatoarelor 41
#include<iostream.h>
int main(void)
{
int n, i;
cin>>n;
i = 1;
while( i <= n )
{
if( n % i == 0 )
cout<<i<<" ";
i = i + 1;
}
}
Exemple de programe C++
Pas 5: Testarea algoritmului pe date de intrare diferiteşi verificarea rezultatelor.
Exemplul 1:Pentru valoarea n=12 obţinem următorul rezultat:
1 2 3 4 6 12Exemplul 2:
Pentru valoarea n=18 obţinem următorul rezultat:1 2 3 6 9 18
02.12.2016 Programarea calculatoarelor 42
Exemple de programe C++
Enunţ:Să se citească un număr natural n. Să se scrie un algoritm careverifică dacă numărul dat este sau nu număr prim. Un număr neste prim dacă are ca divizori doar valorile 1 şi n.
Exemplu:Pentru n = 7, se va afişa mesajul ‘numărul este prim’,iar pentru n = 22, se va afişa mesajul ‘numărul NU este prim’.
Pas 1: Stabilim care sunt datele de intrare, adică cele care vor fiprelucrate cu ajutorul algoritmului, împreună cu datele de ieşire.
În cazul problemei date, avem:Date de intrare: n număr naturalDate de ieşire: număr prim sau nu
02.12.2016 Programarea calculatoarelor 43
Exemple de programe C++
Pas 2: Analiza problemeiVom presupune, la începutul problemei, că numărul
n dat este prim, şi vom specifica acest lucru cu ajutorul unei variabile de tip logic, căreia îi vom da valoarea ‘adevărat’.
Apoi vom evalua, pe rând, toate valorile începând cu valoarea 2 şi până la n/2, ca să determinăm dacă sunt divizori ai numărului n dat.
Dacă găsim un singur divizor printre aceste numere, atunci vom acorda valoarea ‘fals’ variabilei de tip logic.
La sfârşit vom verifica care este valoarea variabilei de tip logic şi vom afişa un mesaj corespunzător.
02.12.2016 Programarea calculatoarelor 44
Exemple de programe C++
02.12.2016 Programarea calculatoarelor 45
Pas 3: Scrierea algoritmului în pseudocod:
natural n, ilogic pciteşte np <- adevărati <- 2cât timp i <= n/2 execută
dacă n % i = 0 atuncip <- fals
sfârşit dacăi <- i + 1
sfârşit cât timpdacă p = adevărat atunci
scrie ‘Numarul este prim’altfel
scrie ‘Numarul NU este prim’sfârşit dacăstop
Exemple de programe C++
Pas 4: Implementarea algoritmului în limbajul de programare C++:
02.12.2016 Programarea calculatoarelor 46
#include<iostream.h>
int main(void)
{
int n, i, p;
cin>>n;
p = 1;
i = 2;
while( i <= n/2 )
{
if( n % i == 0 ) p = 0;
i = i + 1;
}
if( p == 1 ) cout<<"Numarul este PRIM";
else cout<<"Numarul NU este PRIM";
}
Exemple de programe C++
Pas 5: Testarea algoritmului pe date de intrare diferiteşi verificarea rezultatelor.
Exemplul 1:Pentru valoarea n=12 obţinem următorul rezultat:
Numarul NU este PRIMExemplul 2:
Pentru valoarea n=7 obţinem următorul rezultat:Numarul este PRIM
02.12.2016 Programarea calculatoarelor 47
Probleme propuse spre rezolvare:
1) Pentru n cunoscut, să se calculeze fn,termenul de rangul n din şirul lui Fibonacci,ştiind că:
f0 = 1; f1 = 1; fn = fn-1 + fn-2 pentru oricevaloare n >= 2.Exemplu:
02.12.2016 Programarea calculatoarelor 48
Date de intrare: 8Date de ieşire: 21 (1, 1, 2, 3, 5, 8, 13, 21)
Probleme propuse spre rezolvare:
2) Se dau trei numere. Determinaţi şi afişaţicmmdc al lor (cmmdc = cel mai mare divizorcomun).
Exemplu:
02.12.2016 Programarea calculatoarelor 49
Date de intrare: 12 32 38 Date de ieşire: 2
Probleme propuse spre rezolvare:
3) Se dă numărul n, să se afişeze toate numerelemai mici ca el, prime cu el.Doua numere sunt prime intre ele daca cel maimare divizor comun al lor este 1.
Exemplu:
02.12.2016 Programarea calculatoarelor 50
Date de intrare: 10Date de ieşire: 1 3 7 9
3.Instrucţiunile limbajului C++
3.1. Instrucţiunea vidă3.2. Instrucţiunea compusă3.3. Instrucţiunea expresie3.4. Instrucţiunea if3.5. Instrucţiunea while3.6. Instrucţiunea do while3.7. Instrucţiunea for3.8. Instrucţiunea switch3.9. Instrucţiunea break3.10. Instrucţiunea continue3.11. Instrucţiunea goto3.12. Instrucţiunea return
02.12.2016 Programarea calculatoarelor 51
3.6. Instrucţiunea do while
02.12.2016 Programarea calculatoarelor 52
doinstructiune
while (expresie);
Forma instructiunii este:
unde instrucţiune poate fi: instrucţiunea vidă instrucţiunea simplă instrucţiunea compusă
3.6. Instrucţiunea do while
02.12.2016 Programarea calculatoarelor 53
Funcţionarea unei astfel de instrucţiuni sebazează pe executarea repetată a instrucţiunii câttimp condiţia este îndeplinită.
3.6. Instrucţiunea do while
Echivalenţa cu instrucţiunea while:
Exemplu de utilizare a instructiunii do while:Să se scrie un program care tipăreşte
numerele naturale de la 0 la 9 şi suma lor peparcurs.
02.12.2016 Programarea calculatoarelor 54
instructiune; while(expresie)
instructiune;
3.6. Instrucţiunea do while
#include<iostream.h>int main(void){
int numar = 0, total = 0;do{
total = total + numar;cout<<"numar = "<<numar++<<"
total = "<<total<<endl;}while(numar<10);
}
02.12.2016 Programarea calculatoarelor 55
La execuţia acestuiprogram se obţine următorulrezultat:
numar=0 total=0numar=1 total=1numar=2 total=3numar=3 total=6numar=4 total=10numar=5 total=15numar=6 total=21numar=7 total=28numar=8 total=36numar=9 total=45
3. Instrucţiunile limbajului C++
3.1. Instrucţiunea vidă3.2. Instrucţiunea compusă3.3. Instrucţiunea expresie3.4. Instrucţiunea if3.5. Instrucţiunea while3.6. Instrucţiunea do while3.7. Instrucţiunea for3.8. Instrucţiunea switch3.9. Instrucţiunea break3.10. Instrucţiunea continue3.11. Instrucţiunea goto3.12. Instrucţiunea return
02.12.2016 Programarea calculatoarelor 56
3.7. Instrucţiunea for
Este una dintre cele mai “puternice” instrucţiuni alelimbajului C/C++, datorită formei sale.
Forma instrucțiunii este:
expresie1 – reprezintă secvenţa de iniţializarea a cicluluiexpresie2 – reprezintă condiţia de terminare a cicluluiexpresie3 – reprezintă secvenţa de reiniţializare a cicluluiinstrucţiune - corpul ciclului
02.12.2016 Programarea calculatoarelor 57
for(expresie1; expresie2; expresie3)instructiune;
3.7. Instrucţiunea for
02.12.2016 Programarea calculatoarelor 58
for(expresie1; expresie2; expresie3)instructiune;
Funcţionarea unei astfel deinstrucţiuni se bazează:pe executarea repetată a
instrucţiunii,Verificarea expresiei2Executarea expresiei3Cat timp expresia2 esteîndeplinită.
3.7. Instrucţiunea for
Se stie că instrucţiunea for este de fapt ovariantă particulară a instrucţiunii while, dreptpentru care se poate scrie echivalent astfel:
02.12.2016 Programarea calculatoarelor 59
expresie1; while(expresie2){
instructiune;expresie3;
}
3.7. Instrucţiunea for
Invers, dacă avem:
02.12.2016 Programarea calculatoarelor 60
while (expresie) instructiune;
for( ;expresie; ) instructiune;
3.7. Instrucţiunea for
Funcţionarea instrucţiunii for are loc astfel:Se porneşte ciclul repetitiv prin iniţializarea sa,
adică prin execuţia expresia1iar apoi se evaluează expresia2 şi dacă este
adevărată se execută corpul ciclului, adicăinstrucţiune
după aceea se execută expresia3, şi se reiaevaluarea expresiei2, ş.a.m.d.
02.12.2016 Programarea calculatoarelor 61
3.7. Instrucţiunea for
Observaţie:expresia1, expresia2, expresia3 pot să lipsească,dar este obligatorie prezenţa semnelor: “;”.
02.12.2016 Programarea calculatoarelor 62
for(;;) while(1) – buclă infinită
3.7. Instrucţiunea for
Exemplu: Acelaşiprogram de adunare a primelorn numere întregi, în varianta cuinstrucţiunea for, va avea o dimensiune mai mică:
02.12.2016 Programarea calculatoarelor 63
#include<iostream.h>int main(void){
int i, n, s = 0;cout<<"Dati numarul n =";cin>>n;for(i=1; i<=n; i++)
s = s + i;cout<<"Suma primelor"<<n<<" numere intregi este "<<s;
}
Exemplu de program C++ - instructiunea for
Enunţ:Fie un număr natural n. Să se scrie un
algoritm care să calculeze factorialul număruluidat.(factorial = produsul numerelor naturale mai micisau egale decat n)
Exemplu: Pentru n = 5, se va afişa valoarea p = 1*2*3*4*5=120.
02.12.2016 Programarea calculatoarelor 64
Exemplu de program C++ - instructiunea for
Pas 1: Stabilim care sunt datele de intrare, adică cele care vor fi prelucrate cu ajutorul algoritmului, împreună cu datele de ieşire.
În cazul problemei date, avem:
Date de intrare: n = număr natural
Date de ieşire: factorialul numărului dat = p
02.12.2016 Programarea calculatoarelor 65
Exemplu de program C++ - instructiunea for
Pas 2: Analiza problemei
La începutul problemei, vom iniţializavaloarea produsului numerelor cu 1.
Apoi, într-un ciclu repetitiv vom calculaprodusul numerelor naturale aflate intre 1 si n.
02.12.2016 Programarea calculatoarelor 66
Exemplu de program C++ - instructiunea for
02.12.2016 Programarea calculatoarelor 67
Pas 3: Scriereaalgoritmului în pseudocod:
natural n, p, iciteşte np <- 1pentru i=1,n execută
p <- p * isfârşit pentruscrie pstop
Exemplu de program C++ - instructiunea for
Pas 4: Implementareaalgoritmului în limbajul de programare C++:
02.12.2016 Programarea calculatoarelor 68
#include<iostream.h>
int main(void)
{
int n, p, i;
cin>>n;
p = 1;
for(i = 1; i<=n; i++)
p = p * i;
cout<<p;
}
Exemplu de program C++ - instructiunea for
Pas 5: Testarea algoritmului pe date de intrarediferite şi verificarea rezultatelor.
Exemplul 1: Pentru valoarea n=5 obţinem următorul rezultat:
120Exemplul 2:
Pentru valoarea n=7 obţinem următorul rezultat:5040
02.12.2016 Programarea calculatoarelor 69
Exemplu de program C++ - instructiunea do while
Enunţ:Fie un număr natural n de cinci cifre. Să se
scrie un algoritm care să calculeze suma cifrelor numărului dat.
Exemplu:
Pentru n = 2178, se va afişa valoarea s = 2+1+7+8 = 18
02.12.2016 Programarea calculatoarelor 70
Exemplu de program C++ - instructiunea do while
Pas 1: Stabilim care sunt datele de intrare, adică cele care vor fi prelucrate cu ajutorul algoritmului, împreună cu datele de ieşire.
În cazul problemei date, avem:
Date de intrare: n număr natural
Date de ieşire: suma cifrelor = s.
02.12.2016 Programarea calculatoarelor 71
Exemplu de program C++ - instructiunea do while
Pas 2: Analiza problemeiLa începutul problemei, vom iniţializa
valoarea sumei cifrelor numărului n dat cu 0.Apoi, într-un ciclu repetitiv vom calcula suma
cifrelor numărului, ştiind că:o cifră a unui număr scris în baza 10 este dată de
restul împărțirii la 10 - n%10,iar numărul fără ultima cifră este dat de câtul
împărțirii la 10 - n/10.
02.12.2016 Programarea calculatoarelor 72
Exemplu de program C++ - instructiunea do while
02.12.2016 Programarea calculatoarelor 73
Pas 3: Scriereaalgoritmului în pseudocod:
natural n, sciteşte ns <- 0repetă
s <- s + n % 10n <- n / 10
până când n = 0scrie sstop
Exemplu de program C++ - instructiunea do while
Pas 4: Implementareaalgoritmului în limbajul de programare C++:
02.12.2016 Programarea calculatoarelor 74
#include<iostream.h>
int main(void)
{
int n, s;
cin>>n;
s = 0;
do
{
s = s + n % 10;
n = n / 10;
}while( n != 0 );
cout<<s;
}
Exemplu de program C++ - instructiunea do while
Pas 5: Testarea algoritmului pe date de intrarediferite şi verificarea rezultatelor.
Exemplul 1: Pentru valoarea n=123 obţinem următorul rezultat:
6Exemplul 2:Pentru valoarea n=5378 obţinem următorul rezultat:
23
02.12.2016 Programarea calculatoarelor 75
Exemplu de program C++ - instructiunea do while
Enunţ:Să se scrie un program care generează toate
numerele perfecte până la o valoare dată, n.Un număr perfect este egal cu suma divizorilor
lui, inclusiv 1 (exemplu: 6=1+2+3).
Exemplu:Pentru n = 1000, se vor afişa valorile 6, 28, 496
02.12.2016 Programarea calculatoarelor 76
Exemplu de program C++ - instructiunea do while
Pas 1: Stabilim care sunt datele de intrare, adică celecare vor fi prelucrate cu ajutorul algoritmului,împreună cu datele de ieşire.
În cazul problemei date, avem:
Date de intrare: n număr natural
Date de ieşire: numerele perfecte mai mici sau egaledecât n.
02.12.2016 Programarea calculatoarelor 77
Exemplu de program C++ - instructiunea do while
Pas 2: Analiza problemeiLa începutul problemei, vom lua toate
valorile de la 1 la n, şi pentru fiecare valoare i ovom verifica dacă este sau nu număr perfect.
Numerele perfecte obţinute le vom afişa.
02.12.2016 Programarea calculatoarelor 78
Exemplu de program C++ - instructiunea do while
02.12.2016 Programarea calculatoarelor 79
Pas 3: Scriereaalgoritmului în pseudocod:
natural n, i, j, sciteşte ni <- 1repetă
s <- 0j <- 1repetă
dacă i % j = 0 atuncis <- s + j
sfârşit dacăj <- j + 1
până când j > i/2dacă s = i atunci
scrie isfârşit dacăi <- i + 1
până când i > nstop
Exemplu de program C++ - instructiunea do while
Pas 4: Implementareaalgoritmului în limbajul de programare C++:
02.12.2016 Programarea calculatoarelor 80
#include<iostream.h>
int main(void)
{
int n, i, j, s;
cin>>n;
i = 1;
do{
s = 0;
j = 1;
do{
if( i % j == 0 )
s = s + j;
j = j + 1;
}while(j <= i/2);
if( s == i )
cout<<i<<" ";
i = i + 1;
}while(i <= n);
}
Exemplu de program C++ - instructiunea do while
Pas 5: Testarea algoritmului pe date de intrarediferite şi verificarea rezultatelor.
Exemplul 1: Pentru valoarea n=100 obţinem următoarelerezultate:
6 28Exemplul 2:
Pentru valoarea n=10000 obţinem următoarelerezultate:
6 28 496 812802.12.2016 Programarea calculatoarelor 81
Exemplu de program C++ - instructiunea for
Enunţ:
Să se scrie un program care generează toate
numerele prime până la o valoare dată, n.
Un număr x este prim dacă are ca divizori doar
valorile 1 şi x.
Exemplu:
Pentru n = 22, se vor afişa valorile:
2,3,5,7,11,13,17,19
02.12.2016 Programarea calculatoarelor 82
Exemplu de program C++ - instructiunea for
Pas 1: Stabilim care sunt datele de intrare, adică cele
care vor fi prelucrate cu ajutorul algoritmului,
împreună cu datele de ieşire.
În cazul problemei date, avem:
Date de intrare: n număr natural
Date de ieşire: numerele prime mai mic decat n02.12.2016 Programarea calculatoarelor 83
Exemplu de program C++ - instructiunea for
Pas 2: Analiza problemeiIntr-un ciclu repetitiv de la 1 la n vom verifica toate valorile dacarespecta proprietatea de numar prim.
Vom presupune, la începutul problemei, că numărul i dat este prim, şi vom specifica acest lucru cu ajutorul unei variabile de tip întreg, căreia îi vom da valoarea 1.
• Apoi vom evalua, pe rând, toate valorile începând cu valoarea 2 şi până la i/2, ca să determinăm dacă sunt divizori ai numărului idat.
• Dacă găsim un singur divizor printre aceste numere, atunci vom acorda valoarea 0 variabilei de tip întreg de la începutul verificariiconditiei de numar prim.
• La sfârşit vom verifica care este valoarea variabilei de tip întreg şi vom afişa numarul i.
02.12.2016 Programarea calculatoarelor 84
Exemplu de program C++ - instructiunea for
02.12.2016 Programarea calculatoarelor 85
Pas 3: Scriereaalgoritmului în pseudocod:
natural n,i,jlogic pciteşte npentru i = 2, n execută
p <- adevăratpentru j = 2, i/2 execută
dacă i % j = 0 atuncip <- fals
sfârşit dacăsfârşit pentrudacă p = adevărat atunci
scrie i,‘ ’sfârşit dacă
sfârşit pentrustop
Exemplu de program C++ - instructiunea for
Pas 4: Implementareaalgoritmului în limbajul de programare C++:
02.12.2016 Programarea calculatoarelor 86
#include<iostream.h>
int main(void)
{
int n, prim, i, j;
cin>>n;
for(i = 2; i<=n; i++)
{
prim = 1;
for(j = 2; j<=i/2; j++)
if(i % j == 0 ) prim = 0;
if( prim == 1)
cout<<i<<“ ”;
}
}
Exemplu de program C++ - instructiunea for
Pas 5: Testarea algoritmului pe date de intrarediferite şi verificarea rezultatelor.
Exemplul 1: Pentru valoarea n=53 obţinem rezultatele:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 Exemplul 2:Pentru valoarea n=12 obţinem următorulrezultat:
2 3 5 7 11
02.12.2016 Programarea calculatoarelor 87
3. Instrucţiunile limbajului C++
3.1. Instrucţiunea vidă3.2. Instrucţiunea compusă3.3. Instrucţiunea expresie3.4. Instrucţiunea if3.5. Instrucţiunea while3.6. Instrucţiunea do while3.7. Instrucţiunea for3.8. Instrucţiunea switch3.9. Instrucţiunea break3.10. Instrucţiunea continue3.11. Instrucţiunea goto3.12. Instrucţiunea return
02.12.2016 Programarea calculatoarelor 88
3.8. Instrucţiunea switch
Instrucţiunea switchfuncţionează astfel:
Se evaluează expresia şi înfuncţie de rezultat se comparăcu c1, c2, . . ., cn şi când expresiaeste egală cu c1 atunci se execută şirul de instrucţiunicorespunzător, şi cuinstrucţiunea break se sare la sfârşitul instrucţiunii switch, la fel se întâmplă şi dacă expresiaeste egală cu c2 ,sau cu c3 , saucu cn.
02.12.2016 Programarea calculatoarelor 89
switch (expresie){
case c1 : sir_instructiuni_1;
break;case c2 :
sir_instructiuni_2;break;
. . . . . . . .case cn :
sir_instructiuni_ n;break;
default: sir_instructiuni;}
3.8. Instrucţiunea switchInstrucţiunea switch este o instrucţiune de tip
decizie multiplă astfel încât se poate scrie echivalentfolosind instrucţiunea de decizie simplă if:
02.12.2016 Programarea calculatoarelor 90
if (expresie==c1)sir_instructiuni_1;
else if (expresie==c2)
sir_instructiuni_2;. . . . . . . .
else if (expresie==cn)
sir_instructiuni_ n;else sir_instructiuni;
3.8. Instrucţiunea switch
Prezentăm încontinuare un program care numără vocalele şiconsoanele din alfabet.
De observat căunele din instrucţiunilecase se execută încascadă, pentru calcululvocalelor, iar pentruconsoane se foloseştecazul default:
02.12.2016 Programarea calculatoarelor 91
#include<iostream.h>
int main(void)
{
char litera;
int nr_vocale = 0, nr_consoane = 0;
for (litera = ‘A’; litera <= ‘Z’; litera++)
switch (litera) {
case ‘A’:
case ‘E’:
case ‘I’:
case ‘O’:
case ‘U’: nr_vocale++;
break;
default: nr_consoane++;
}
cout<<"\nNumarul de vocale este "<<nr_vocale;
cout<<"\nNumarul de consoane este "<< nr_consoane;
}
3. Instrucţiunile limbajului C++
3.1. Instrucţiunea vidă3.2. Instrucţiunea compusă3.3. Instrucţiunea expresie3.4. Instrucţiunea if3.5. Instrucţiunea while3.6. Instrucţiunea do while3.7. Instrucţiunea for3.8. Instrucţiunea switch3.9. Instrucţiunea break3.10. Instrucţiunea continue3.11. Instrucţiunea goto3.12. Instrucţiunea return
02.12.2016 Programarea calculatoarelor 92
3.9. Instrucţiunea break
Instrucţiunea întrerupe execuţia instrucţiunilorwhile, do while, for şi switch, determinând astfel ieşireaforţată dintr-un ciclu repetitv.
Exemplu:for(;;){
. . . . .break;
}02.12.2016 Programarea calculatoarelor 93
break;
3.9. Instrucţiunea break
Exemplu:
Prezentăm în
continuare, un program
care folosind
instrucţiunea break,
afisează numerele întregi
aflate între 1 şi 100 şi
apoi de la 100 la 1.
De fiecare dată când
număr ajunge la valoarea
50, instrucţiunea break
face ca execuţia ciclului
să se oprească:
02.12.2016 Programarea calculatoarelor 94
#include<iostream.h>
int main(void)
{
int numar;
for(numar = 1; numar<=100; numar++)
{
if(numar == 50) break;
cout<<" "<<numar;
}
cout<<"\nCel de-al doilea ciclurepetitiv";
for(numar = 100; numar>=1; numar--)
{
if(numar == 50) break;
cout<<" "<<numar;
}
}
3. Instrucţiunile limbajului C++
3.1. Instrucţiunea vidă3.2. Instrucţiunea compusă3.3. Instrucţiunea expresie3.4. Instrucţiunea if3.5. Instrucţiunea while3.6. Instrucţiunea do while3.7. Instrucţiunea for3.8. Instrucţiunea switch3.9. Instrucţiunea break3.10. Instrucţiunea continue3.11. Instrucţiunea goto3.12. Instrucţiunea return
02.12.2016 Programarea calculatoarelor 95
3.10. Instrucţiunea continue
Se referă la instrucţiunile de ciclare: for,while şi do while.
La întâlnirea ei ciclurile while şi do while secontinuă cu reevaluarea condiţiei de ciclare iar înciclul for se continuă cu secvenţa de reiniţializarea ciclului şi apoi cu reevaluarea ciclului.
02.12.2016 Programarea calculatoarelor 96
3.10. Instrucţiunea continue
Exemplu: Prezentăm încontinuare, un program care folosindinstrucţiuneacontinue într-un ciclu for şi într-un ciclu while, afişeazănumerele pare şiimpare aflate între1 şi 100:
02.12.2016 Programarea calculatoarelor 97
#include<iostream.h>
int main(void)
{
int numar;
cout<<"Numerele pare dintre 1 si 100 sunt: ";
for (numar = 1; numar <= 100; numar++)
{
if(numar % 2 != 0) continue;
cout<<" "<<numar;
}
cout<<"\nNumerele impare dintre 1 si 100 sunt: ";
numar=0;
while(numar <= 100)
{
numar++;
if(numar % 2==0) continue;
cout<<" "<<numar;
}
}
3. Instrucţiunile limbajului C++
3.1. Instrucţiunea vidă3.2. Instrucţiunea compusă3.3. Instrucţiunea expresie3.4. Instrucţiunea if3.5. Instrucţiunea while3.6. Instrucţiunea do while3.7. Instrucţiunea for3.8. Instrucţiunea switch3.9. Instrucţiunea break3.10. Instrucţiunea continue3.11. Instrucţiunea goto3.12. Instrucţiunea return
02.12.2016 Programarea calculatoarelor 98
3.11. Instrucţiunea goto
Este instrucţiunea pentru salt necondiţionat.unde eticheta este un nume care prefixează o instrucţiune.Exemplu: Prezentăm în continuare, un program care folosind
instrucţiunea goto, afişează numerele întregi aflate între 1 şi100:
int main(void){
int numar=1;eticheta: cout<<" ", numar++;if (numar <= 100) goto eticheta;
}02.12.2016 Programarea calculatoarelor 99
goto eticheta;
3. Instrucţiunile limbajului C++
3.1. Instrucţiunea vidă3.2. Instrucţiunea compusă3.3. Instrucţiunea expresie3.4. Instrucţiunea if3.5. Instrucţiunea while3.6. Instrucţiunea do while3.7. Instrucţiunea for3.8. Instrucţiunea switch3.9. Instrucţiunea break3.10. Instrucţiunea continue3.11. Instrucţiunea goto3.12. Instrucţiunea return
02.12.2016 Programarea calculatoarelor 100
3.12. Instrucţiunea return
Instrucţiunea return
Se foloseşte în funcţii atunci când:• se întoarce în funcţia apelantă o valoare (formele
2 şi 3)• sau într-o funcţie care nu întoarce nici o valoare
(funcţioneaza ca o procedură) – forma 1.
02.12.2016 Programarea calculatoarelor 101
1. return;2. return expresie;3. return (expresie);
Probleme propuse spre rezolvare:
1) Să se afişeze toate numerele palindrom maimari decat 10 şi mai mici decat un număr dat, n.
Exemplu:
02.12.2016 Programarea calculatoarelor 102
Date de intrare: n=110Date de ieşire:11 22 33 44 55 66 77 88 99 101
Probleme propuse spre rezolvare:
2) Să se determine toate tripletele de numere a, b,c cu proprietăţile: 1<a<b<c<100; a+b+c se dividecu 10.
Exemplu:
02.12.2016 Programarea calculatoarelor 103
Date de intrare: -Date de ieşire: 95 96 99 si 95 97 99 suntultimele doua triplete
Probleme propuse spre rezolvare:
3) Să se afişeze toate numerele de două cifre careadunate cu răsturnatul lor dau 55.
Exemplu:
02.12.2016 Programarea calculatoarelor 104
Date de intrare: -Date de ieşire: 14 41; 23 32; 32 23; 41 14
Pentru alte informații teoretice și aplicative legatede acest capitol se recomandă următoarele referințebibliografice:1. Adrian Runceanu, Mihaela Runceanu, Noțiuni deprogramare în limbajul C++, Editura AcademicaBrâncuși, Târgu-Jiu, 2012 (www.utgjiu.ro/editura)2. Adrian Runceanu, Programarea şi utilizareacalculatoarelor, Editura Academica Brâncuși, Târgu-Jiu,2003 (www.utgjiu.ro/editura)3. Octavian Dogaru, C++ - teorie şi practică, volumul I,Editura Mirton, Timişoara, 2004
(www.utgjiu.ro/editura)
02.12.2016 Programarea calculatoarelor 105
Recapitulare pseudocod – limbaj C++
Pseudocod C++
Tipuri de date simple:
naturalintregreallogic
unsignedint, longfloat, doublebool
CITIRE date citeste v1,v2 cin>>v1>>v2 ;
AFISARE date scrie expresie1, expresie2 cout<<expresie1<<expresie2
ATRIBUIRE vexpresiev=expresie;v1=v2=...=v3=expresie;
STRUCTURADECIZIONALA
daca conditie atunci instructiune 1altfel instructiune 2
if (conditie) instructiune 1;else instructiune 2;
STRUCTURAexecuta... cat timp
executainstructiune
cat timp conditie
do instructiune;
while (conditie);
PENTRUpentru vvali, valf, pas executainstructiune
for(v=vali ; v<=valf ; v=v+pas)instructiune ;
INSTRUCTIUNE COMPUSA
| instructiune 1;| instructiune 2;| .......................| instructiune n;
{instructiune 1;instructiune 2;......................instructiune n;
}
02.12.2016 Programarea calculatoarelor 106
Recapitulare elemente de limbaj C++
02.12.2016 Programarea calculatoarelor 107
Biblioteci #include <iostream.h>int main(){
................................instructiuni
}
Antet functie main{ declaratii de: tipuri, constante,
variabileCitire date intrarePrelucrare dateAfisare
}
Structura unui program C++
Pentru alte informații teoretice și aplicative legatede acest capitol se recomandă următoarele referințebibliografice:1. Adrian Runceanu, Mihaela Runceanu, Noțiuni deprogramare în limbajul C++, Editura AcademicaBrâncuși, Târgu-Jiu, 2012 (www.utgjiu.ro/editura)2. Adrian Runceanu, Programarea şi utilizareacalculatoarelor, Editura Academica Brâncuși, Târgu-Jiu,2003 (www.utgjiu.ro/editura)3. Octavian Dogaru, C++ - teorie şi practică, volumul I,Editura Mirton, Timişoara, 2004 (www.utgjiu.ro/editura)
02.12.2016 Programarea calculatoarelor 108
“First, solve the problem. Then, write the code.”
- John Johnson
02.12.2016 Programarea Calculatoarelor - curs 109