Sunteți pe pagina 1din 8

CAP.

V – Implementarea algoritmilor în limbajul C++

INSTRUCŢIUNILE DE CONTROL

INSTRUCŢIUNEA IF … ELSE

Implementează structura alternativă simplă (dacă…atunci…altfel…sfârşit_dacă).


Sintaxa este :
if (expresie)
instrucţiune_1;
[else
instrucţiune_2;]
Obs : expresie trebuie să furnizeze un rezultat numeric care va fi interpretat ca
o constantă logică :
- FALSE dacă rezultatul obţinut în urma evaluării expresiei este 0;
- TRUE dacă rezultatul obţinut în urma evaluării expresiei este diferit de 0;
Se execută astfel:
PAS 1 : se evaluează expresia expresie
PAS 2: - dacă rezultatul expresiei este diferit de 0 (TRUE) se execută instrucţiune_1;
- dacă rezultatul expresiei este 0 (FALSE) se execută instrucţiune_2.
Pentru structura alternativă simplă cu o ramură vidă nu se mai precizează
else instrucţiune_2; instrucţiunea if având în acest caz sintaxa :
if (expresie)
instrucţiune_1;

Brebenel George – Colegiul Tehnic ”Iuliu Maniu”-2009


CAP.V – Implementarea algoritmilor în limbajul C++

Aplicatia 1. Se citesc două numere a, b. Să se scrie un program C++ care determină


maximul celor două numere. (exp: a=3, b=7 => max=7)
#include<iostream>
using namespace std;
int main(){
int a,b,max;
cout<<"a="; cin>>a;
cout<<"b="; cin>>b;
if (a>b)
max=a;
else
max=b;
cout<<"max="<<max;
return 0;

Aplicatia 2. Fie x o variabilă întreagă. Se consideră secvenţa de program următoare:


if (x>-10)
if (2*x<x)
cout<<”DOI”;
else
if (x) //  if (x<>0)
cout<<”TREI”;
else
cout<<”UNU”;
a) Ce se va afişa în urma executării secvenţei dacă iniţial x=-20?
a) UNU b) DOI c) TREI d) NIMIC
b) Pentru ce valoare a lui x, în urma executării secvenţei se afişează DOI?
a) x=0 b) -10<x<0 c) x>0 d) x<-10
c) Pentru ce valoare a lui x, în urma executării secvenţei se afişează TREI?
a) -1 b) 0 c) 3 d) 10
d) Există vreun mesaj dintre UNU, DOI, TREI care se va afişa în urma executării
secvenţei indiferent de valoarea variabilei x? Care este?
a) da, UNU b) da, DOI c) da, TREI d) nu

Brebenel George – Colegiul Tehnic ”Iuliu Maniu”-2009


CAP.V – Implementarea algoritmilor în limbajul C++

INSTRUCŢIUNEA SWITCH … CASE

Implementează structura alternativă generalizată (în caz


că…cazul…altfel…sfârşit_în caz_că).
Sintaxa este :
switch (expresie){
case exp_1 : instrucţiune_1; break;
case exp_2 : instrucţiune_2; break;
……………………………………………………………………
case exp_i : instrucţiune_i; break;
……………………………………………………………………
case exp_n : instrucţiune_n; break;
[default : instrucţiune_n+1;]
}
Obs : expresie trebuie să furnizeze un rezultat numeric întreg, iar expresiile care
se evaluează pentru fiecare caz (exp_i) trebuie să fie constante întregi sau expresii
constante cu valoare întreagă.
Se execută astfel:
PAS 1 : se evaluează expresia expresie
PAS 2: dacă rezultatul expresiei are valoarea exp_1 se execută instrucţiune_1, după
care se trece la instrucţiunea care urmează după switch, altfel se trece la pasul următor
PAS 3: dacă rezultatul expresiei are valoarea exp_2 se execută instrucţiune_2, după
care se trece la instrucţiunea care urmează după switch, altfel se trece la pasul următor
…………………………………………………………………………………………………………………………………………………………………
PAS n: dacă rezultatul expresiei are valoarea exp_n se execută instrucţiune_n, după
care se trece la instrucţiunea care urmează după switch, altfel se execută instrucţiunea
care urmează după eticheta default, dacă această etichetă există, după care se trece la
instrucţiunea care urmează după switch.

Brebenel George – Colegiul Tehnic ”Iuliu Maniu”-2009


CAP.V – Implementarea algoritmilor în limbajul C++

Aplicatia 1. Se introduc de la tastatură numerele întregi a şi b şi un caracter c care


reprezintă o operaţie aritmetică. Să se calculeze caloarea lui e definită ca rezultat al
aplicării operatorului aritmetic penumerele a şi b. (exp: a=3, b=5, c=’+’ => e=8)
#include<iostream>
using namespace std;
int main(){
int a,b; // a, b – folosite pentru memorarea operanzilor
char c; // c – folosit pentru memorarea operatorului
float e; // e – folosit pentru memorarea rezultatului expresiei
cout<<"a="; cin>>a; cout<<"b="; cin>>b;
cout<<"c="; cin>>c;
switch (c){
case ‘+’ : {e=a+b; cout<<"E="<<e;} break;
case ‘-’ : {e=a-b; cout<<"E="<<e;} break;
case ‘*’ : {e=a*b; cout<<"E="<<e;} break;
case ‘/’ : {e=(float)a/b; cout<<"E="<<e;} break;
// (float) realizează conversia valorii variabilei a din int în float (pt. o împărţire reală)
default : cout<<"Operator gresit";
// se execută dacă în c nu a fost memorat unul din operatorii : +, -, *, /.
}
return 0;
}

Aplicatia 2. Fie n o variabilă de tip caracter şi p o variabilă de tip întreg. Se consideră


secvenţa de operaţii, descrisă în limbaj pseudocod:
p1
daca n=’0’ atunci
pp*0
altfel
daca n=’1’ atunci
pp*1
altfel
daca n=’5’ atunci
pp*5
altfel
pp*10
sfârşit dacă
sfârşit dacă
sfârşit dacă
a) Transcrieţi secvenţa în limbajul C++, utilizând o singură instrucţiune de selecţie
(switch). Declaraţi variabilele ce apar în secvenţă.
a) Dacă valoarea variabilei n este 5, ce valoare va avea variabila p la finalul
executării secvenţei din enunţ? a) 1 b) 0 c) 11 d) 5
c) Dacă valoarea variabilei p la finalul executării secvenţei din enunţ este 11, ce
valoare iniţială poate avea variabila n? a) 1 b) * c) 0 d) 5

Brebenel George – Colegiul Tehnic ”Iuliu Maniu”-2009


CAP.V – Implementareaalgoritmilor în limbajul C++
INSTRUCŢIUNEA FOR
Implementează tot o structură repetitivă cu număr necunoscut de paşi
condiţionată anterior, dar permite o scriere mai condensată.
Sintaxa este :
for (exp_1; exp_2; exp_3) exp_1;
instrucţiune; while (exp_2){
instrucţiune;
exp_3;
}
Unde:
 exp_1 – pentru iniţializare;
 exp_2 – pentru testare, prin compararea stării curente cu starea care termină
procesul de repetare şi are rolul de a termina executarea repetată a instrucţiunii;
 exp_3 – pentru modificare, prin schimbarea stării curente, astfel încât să se
avanseze către starea finală.
Se execută astfel:
PAS 1 : se evaluează expresia exp_1;
PAS 2: se evaluează expresia exp_2.
- dacă rezultatul este diferit de zero (TRUE) se execută instrucţiune
- altfel se execută instrucţiunea care urmează după for.
PAS 3 : se evaluează expresia exp_3 şi se revine la PAS 2.

Aplicatia 1. Se citeşte un număr natural. Să se afişeze suma cifrelor.


#include<iostream>
using namespace std;
int main(){
unsigned long n=0;
int s; // s – se foloseşte pt.calcuarea sumei cifrelor numărului n
cout<<”numarul=”; cin>>n;
for (s=0; n; n/=10) // initializarea : s=0;
testarea n ( n<>0);
modificarea n/=10 ( n=n/10);
s+=n%10; //  s=s+n%10
cout<<suma=”<<s;
return 0;
}

Brebenel George – Colegiul Tehnic ”Iuliu Maniu”-2009


CAP.V – Implementarea
algoritmilor în limbajul C++
Implementarea structurii repetitive cu număr cunoscut de paşi poate fi
implementată tot folosind instrucţiunea for.
Sintaxa este :
for (contor=vi; contor<=vf; contor+=v)
instrucţiune;

Aplicatia 2. Se citeşte un număr natural n şi un şir de numere întregi. Să se afişeze


suma numerelor pare citite în şir.
#include<iostream>
using namespace std;
int main(){
int n,i,a,s;
// i – se foloseşte pt.contor; iniţializarea se face în exp_1 a instrucţiunii for
// n – reprezintă valoarea finală a contorului
// a – se foloseşte pt.citirea numerelor
// s – se foloseşte pt.calcularea sumei; iniţializarea se face în exp_1 a instrucţiunii for
cout<<”n=”; cin>>n;
for(i=1, s=0; i<=n; i++){
// i=1, s=0;  iniţializare
// i<=n;  testare
// i++;  modificare
cout<<a=”; cin>>a; // se citeşte următorul număr în variabila a
if (!(a%2)) //  a%2==0
s+=a; //  s=s+a
} // sfârşitul blocului for
cout<<s=”<<s
return 0;
}

Brebenel George – Colegiul Tehnic ”Iuliu Maniu”-2009


CAP.V – Implementarea algoritmilor în limbajul C++
INSTRUCŢIUNEA WHILE
Implementează structura repetitivă cu număr necunoscut de paşi condiţionată
anterior (cât_timp…execută…sfârşit_ cât_timp).
Sintaxa este :
while (expresie)
instrucţiune
Se execută astfel:
PAS 1 : se evaluează expresia expresie
PAS 2: - dacă rezultatul expresiei este diferit de 0 (TRUE) se execută instrucţiune,
apoi se revine la PAS 1;
- altfel se execută instrucţiunea de după while

Aplicatia 1. Se citeşte un număr natural. Să se afişeze suma cifrelor.


#include<iostream>
using namespace std;
int main(){
unsigned long n=0;
int s=0; // s – se foloseşte pt.calcuarea sumei cifrelor numărului n;se iniţializează cu 0
cout<<”numarul=”; cin>>n;
while (n){
s+=n%10; //  s=s+n%10
n/=10; //  n=n/10
}
cout<<suma=”<<s;
return 0;
}

Brebenel George – Colegiul Tehnic ”Iuliu Maniu”-2009


CAP.V – Implementareaalgoritmilor în limbajul C++
INSTRUCŢIUNEA DO WHILE
Implementează structura repetitivă cu număr necunoscut de paşi condiţionată
posterior (execută … cât_timp).
Sintaxa este :
do
instrucţiune
while (expresie);
Se execută astfel:
PAS 1 : se execută instrucţiune;
PAS 2: se evaluează expresie :
- dacă rezultatul expresiei este diferit de 0 (TRUE) se revine la PAS 1;
- altfel se execută instrucţiunea de după do…while

Aplicatia 1. Se citeşte un număr natural n. Să se descompună în factori primi.


(exp: n=12, => 2 la puterea 2
3 la puterea 1)
#include<iostream>
using namespace std;
int main(){
int n,i=2,fm;
// n – numărul ce se descompune în factori primi
// i – numărul prim care se verifică dacă intră în descompunerea în factori primi
// fm – factorul de multiplicare (de câte ori “i” intră în descompunerea în factori primi ai lui “n”)
cout<<”n=”; cin>>n;
do{
fm=0;
while (n%i==0){
fm++; //  fm=fm+1
n/=i; //  n=n/i
}
if (fm) //  fm<>0
cout<<i<<” la puterea ”<<fm<<endl;
i++; //  i=i+1
} while (n!=1);
return 0;
}

Brebenel George – Colegiul Tehnic ”Iuliu Maniu”-2009

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