Lectia 5
IMPLEMENTAREA STRUCTURILOR DE CONTROL
Algoritmul proiectat pentru
rezolvarea unei anumite probleme trebuie implementat intr-un limbaj de
programare; prelucrarea datelor se realizeaza cu ajutorul instructiunilor. Instructiunea
descrie un proces de prelucrare pe care un calculator il poate executa. O
instructiune este o constructie valida (care respecta sintaxa limbajului)
urmata de ; (punct si virgula). Ordinea in care se executa
instructiunile unui program defineste asa-numita structura de control a
programului.
Limbajele moderne
sunt alcatuite pe principiile programarii
structurate. Conform lui C. Bohm si G. Jacopini, orice algoritm poate fi realizat prin combinarea
a trei structuri fundamentale:
· structura secventiala
· structura alternativa (de
decizie, de selectie)
· structura repetitiva
(ciclica)
IMPLEMENTAREA
STRUCTURII SECVENTIALE
Structura secventiala
este o insiruire de secvente
de prelucrare (instructiuni), plasate una dupa alta, in ordinea in care se doreste
executia acestora.
Instructiunea vida
Sintaxa: ;
Instructiunea vida nu are nici un efect. Se utilizeaza in constructii in care
se cere prezenta unei instructiuni, dar nu se executa
nimic (de obicei, in instructiunile repetitive).
Exemple:
int a;
for (;;) {…}
Instructiunea expresie
Sintaxa:
expresie;
Exemple:
int b, a=9;
double c;
b=a+9;
cout<<a;
Instructiunea compusa (instructiunea bloc)
Sintaxa: { declaratii de
variabile;
instr1;
instr2;
. . . . }
Intr-un bloc se pot declara si variabile care pot fi accesate doar in corpul
blocului. Instructiunea bloc este utilizata in
locurile in care este necesara prezenta unei singure instructiuni,
insa procesul de calcul este mai complex, deci trebuie descris in mai multe secvente.
Probleme propuse:
·
Sa se interschimbe continutul
a doua variabile intregi. Valorile initiale se citesc de la tastatura
·
Se cieste un numar
format din 3 cifre. Sa se interschimbe cifra unitatilor cu a sutelor
·
Se citeste un numar
format din 5 cifre. Sa se elimine cifra din mijloc
·
Se citeste un numar
natural sa se afiseze cea de a p cifra. (numarul are cel putin p cifre)
·
Sa se afiseze puterea x a unui numar intreg si radicalul
acestuia
·
Se citesc lungimea si latimea unui
dreptunghi. Sa se determine aria si perimetrul
·
Sa se determine suma cuburilor cifrelor unui nr
de cel mult 3 cifre
·
Sa se determine suma valorilor 1+2+3+…+n, pt
un n natural citit
·
Sa se determine distanta dintre doua puncte. Se cunosc coordonatele
celor doua puncte.
·
Se dau coordonatele a 3 puncte in plan. Sa se determine aria si
perimetrul triunghiului determinat de cele 3 puncte.
·
Sa se determine suma si produsul a doua fractii
IMPLEMENTAREA STRUCTURII DE DECIZIE (ALTERNATIVE,
DE SELECTIE)
Instructiunea if:
Sintaxa:
if (expresie)
instructiune1
[ else
instructiune2 ]
Ramura else este optionala.
La intalnirea instructiunii
if, se evalueaza expresie
(care reprezinta o conditie)
din paranteze. Daca valoarea expresiei este 1, sau diferita de 0 (conditia este indeplinita) se
executa instructiune1; daca valoarea expresiei este 0 (conditia
nu este indeplinita), se executa instructiune2. Deci,
la un moment dat, se executa doar una dintre cele doua instructiuni:
fie instructiune1, fie instructiune2. Dupa executia instructiunii if se trece la executia instructiunii care urmeaza
acesteia.
Observatii:
1. Instructiune1 si instructiune2 pot fi instructiuni
compuse (blocuri), sau chiar alte instructiuni if (if-uri imbricate).
2. Deoarece instructiunea if
testeaza valoarea numerica a expresiei (conditiei), este posibila prescurtarea: if
(expresie), in loc de if (expresie != 0).
3. Deoarece ramura else a instructiunii
if este optionala, in cazul
in care aceasta este omisa din secventele if-else imbricate, se produce o ambiguitate. De obicei,
ramura else se asociaza
ultimei instructiuni if.
Exemplu:
if (a*b!=0)
if (a>b)
z=a;
else
z=b;
4. Pentru
claritatea programelor sursa se recomanda alinierea instructiunilor
prin utilizarea tabulatorului orizontal.
5. Deseori, apare constructia:
if (expresie1)
instructiune1;
else
if
(expresie2)
instructiune2;
else
if (expresie3)
instructiune3;
. . . . . . . . .
else
instructiune_n;
Expresiile sunt evaluate in ordine; daca una dintre expresii are valoarea
nenula, se executa instructiunea corespunzatoare si se termina intreaga
inlantuire. Instructiunea n se executa in situatia in care nici una dintre
expresiile 1,2,. . ., n-1 nu are valoarea nenula.
Instructiunea
alternativa if. Aplicatii
1. Scrieti un algorim care
sa determine cel mai mare dintre 3 numere intregi citite.
2.
Sa se determine daca un numar natural este sau nu
patrat perfect.
3. Se citeste un numar
natural format n din exact trei cifre. Sa se determine cel mai mare numar avand
aceleasi cifre ca si numarul initial. Exemplu: pentru n=276 se genereaza 762 iar
pentru 838 se genereaza 883.
1.
Se citesc trei numere intregi a, b, c. Sa se verifice
daca aceste numere (nu are importanta ordinea in care s-au citit) sunt in
progresie aritmetica si afisati ratia progresiei in caz afirmativ. Exemplu: (10, 3,
17) este o progresie aritmetica cu ratia 7; (1, 2, 4) nu este progresie
aritmetica.
2.
se citeste un numar natural n. Sa se determine ultima
cifra a produsului 1*2*3*...*n
3.
Sa se verifica daca o fractie a/b se poate
simplifica prin k (k numar natural nenul). Sa va afisa DA sau NU.
4. Sa se determine ultima
cifra a lui 2x (x nenul).
5.
Se citesc 3 numere naturale x, y, z (x,y,z>=100
si n<=3). Sa se genereze un nou numar w format din cea de a n-a cifra
incepand de la unitati din fiecare dintre cele 3 numere x , y si z. Sa se determine
daca numarul nou astfel obtinut este patrat perfect.
Exemplu1:
x=23244
y=7588
z=638
n=3
se genereaza: 256 care este
patrat perfect
Exemplu2:
x=23044
y=7588
z=638
n=3
se genereaza: 56 care NU este
patrat perfect
6. Se citesc 5 cifre binare sa
se determine daca numarul in baza 10 asociat este un numar din intervalul [10,
20].
Exemplu: 11001(2)=25(10)
7. Se cunosc: coordonatele
centrului unui cerc intr-un sistem de coordonate cartezian, raza cercului si
coordonatele unui punct A. Sa se determine pozitia punctului fata de cerc: in
afara cercului, in interior sau daca este situat pe cerc.
Instructiunea switch
In unele cazuri
este necesara o decizie multipla speciala. Instructiunea
switch permite acest lucru.
Reprezentare prin schema
logica:
Reprezentare
prin pseudocod:
Dacă expresie=expr_const_1
instructiune1;
[iesire;]
Altfel daca expresie=expr_const_2
instructiune2;
[iesire;]
. . . . . . . .
Altfel daca expresie=expr_const_n-1
instructiune_n-1;
[iesire;]
Altfel instructiune_n;
Se testeaza daca valoarea pentru expresie este una dintre
constantele specificate (expr_const_1,
expr_const_2, etc.) si se
executa instructiunea de pe ramura corespunzatoare. In schema logica test_expresie este una
din conditiile: expresie=expr_const_1, expresie=expr_const_2, etc.
Sintaxa:
switch (expresie)
{
case expresie_const_1: instructiune_1;
[break;]
case expresie_const_2: instructiune_2;
[break;]
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
case
expresie_const_n-1: instructiune_n-1;
[break;]
[ default: instructiune_n; ]
}
Este evaluata expresie (expresie aritmetica), iar valoarea ei este comparata cu
valoarea expresiilor constante 1, 2, etc. (expresii constante=expresii care nu contin variabile). In situatia in
care valoarea expresie este egala cu valoarea expr_const_k, se executa instructiunea
corespunzatoare acelei ramuri (instructiune_k).
Daca se intalneste instructiunea
break, parcurgerea este intrerupta,
deci se va trece la executia primei instructiuni de dupa switch. Daca nu este intalnita instructiunea break, parcurgerea
continua. Break-ul cauzeaza
deci, iesirea imediata din switch.
In cazul in care valoarea expresiei nu este gasita printre valorile expresiilor constante, se executa
cazul marcat cu eticheta default (cand
acesta exista). Expresiile expresie, expresie_const_1,
expresie_const_2,etc., trebuie sa fie intregi.
Probleme propuse:
1.
Sa se verifice daca un numar
este par sau impar.
2.
Scrieti un algoritm care sa
determine cel mai mare dintre doua numere intregi citite.
3.
Scrieti un algorim care sa
determine cel mai mare dintre 3 numere intregi citite.
4.
Scrieti un program care citeste
de la tastatura trei valori numerice a, b, c si apoi afiseaza pe ecran cea mai
mare diferenta dintre oricare doua valori date.
Ex. a=100, b=15, c=105.
Se va afisa 90.
5.
Se da un numar din 3 cifre.Sa
se genereze cel mai mare numar care are aceleasi cifre ca el.
6.
Intr-un parc se joaca 3 copii
care au greutatile a,b,c. Sa se stabileasca daca se pot aseza pe un balansoar
astfel incat acesta sa stea in echilibru.
7.
Sa se rezolve ecuatia de gradul
I cu o necunoscuta: ax+b=0 unde a si b sunt coeficienti reali cititi. Discutie.
8.
Sa se rezolve ecuatia de gradul
al II-lea cu 2 necunoscute: ax2+bx+c=0 unde a,b,c sunt coeficienti reali
cititi. Discutie.
9.
Sa se verifice daca 3 numere
a,b,c sunt pitagorice.
10. Fie 2 numere cu 4 cifre. Sa se afiseze acela care are suma cifrelor mai
mare.
11. Se citesc de la tastatura coordonatele x si y ale celor trei varfuri ale
unui triunghi. Sa se scrie un algoritm care citeste aceste valori si verifica
daca acestea pot constitui varfurile triunghiului. In caz afirmativ se va afisa
tipul triunghiului (oarecare, isoscel sau echilateral).
12. Sa se verifica daca o fractie a/b se poate simplifica prin k. Sa va afisa
DA sau NU.
13. Se citesc coordonatele unui punct in plan. Sa se afiseze cadranul caruia ii
apartine.
14. Se citesc varsta, inaltimea si sexul unei persoane. Sa se calculeze
greutatea ideala, dupa formula :
G=50+0.75*(i-150)+(v-20)/4, pentru baieti
G=G*0.9, pentru fete
15. Sa se determine ultima cifra a lui 2x.
16. Se citesc de la tastatura 2 numere naturale a si b si un operator op. Sa se calculeze expresia a op b.
17. Sa se calculeze ultima cifra a lui ab.
18. Sa se calculeze ultima cifra a lui 1*2*3*…*n
19. Se citesc valorile intregi a 3 numere a,b,c si inca o variabila x. Daca x=1,
sa se afiseze maximul dintre cele 3 numere. Daca x=2, sa se afiseze minimul
dintre cele 3 numere. Daca x=3, sa se calculeze media lor aritmetica. Daca x=4,
sa se afiseze valoarea expresiei . Daca x=5, sa se afiseze valoarea expresiei . Altfel, se va afisa ultima cifra a lui |a*b*c|.
20. Se citesc 3 numere naturale x,y,z. Sa se stabileasca daca pot forma
laturile unui triunghi. Daca da, sa se testeze natura triunghiului. Daca este
isoscel, sa se calculeze perimetrul. Daca este echilateral, sa se calculeze
inaltimea. Daca este dreptunghic, sa se calculeze lungimea medianei
corespunzatoare unghiului drept. Daca este oarecare, se va
calcula aria triunghiului.
21.
Fiind dat un numar n de
maxim trei cifre, sa se verifice daca patratul numarului are ultimele cifre egale
cu n. (Ex : n=5, n=6, n=25)