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)