structuri de control - competentedigitale.ro+.pdf · instrucţiunea switch permite selectarea unei...

7
1 Structuri de control 1. Structura liniară Structura liniară este o secvenţă de instrucţiuni care se execută necondiţionat, o singură dată. O astfel de structură poate să conţină instrucţiuni pentru citirea şi scrierea datelor, calcule matematice (expresii) şi instrucţiuni de atribuire. Exemplu Să se scrie un program care interschimbă conţinutul a două variabile întregi x şi y. #include<iostream.h> int main() {int x=7,y=21; //iniţializare cu valori x=x+y; y=x-y; x=x-y; cout<<”x=”<<x<<endl<<”y=”<<y; return 0; } 2. Structuri alternative a) Instrucţiunea if if (cond_logică) instrucţiune 1; else instrucţiune 2; Structurile alternative dirijează execuţia unei secvenţe de instrucţiuni (1 sau 2) în funcţie de valoarea unei condiţii plasate în blocul de decizie. Dacă secvenţa de instrucţiuni 2 este vidă, instrucţiunea if nu are ramura else. Exemplu: Să se scrie un program C care să verifice dacă trei numere reale citite de la tastatură pot reprezenta lungimile laturilor unui triunghi: #include <iostream.h> int main () { float a, b, c; cout<<"Introduceti cele 3 lungimi ale laturilor:"; cin>>a>>b>>c; if ((a < (b + c))&&(b < (a + c))&&(c < (a + b))&& a>0 && b>0 && c>0 ) cout<<"Cele trei segmente pot forma un triunghi !"; else cout<<"Cele trei segmente nu pot forma triunghi !"; return 0; } b) Instrucţiunea de selecţie (switch) Instrucţiunea switch permite selectarea unei alternative din mai multe posibilităţi în funcţie de valoarea unei variabile sau expresii de tip întreg. Sintaxa este următoarea:

Upload: others

Post on 08-Sep-2019

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Structuri de control - competentedigitale.ro+.pdf · Instrucţiunea switch permite selectarea unei alternative din mai multe posibilităţi în funcţie de valoarea unei variabile

1

Structuri de control

1. Structura liniară

Structura liniară este o secvenţă de instrucţiuni care se execută necondiţionat, o singură dată. O astfel de structură

poate să conţină instrucţiuni pentru citirea şi scrierea datelor, calcule matematice (expresii) şi instrucţiuni de atribuire.

Exemplu Să se scrie un program care interschimbă conţinutul a două variabile întregi x şi y.

#include<iostream.h>

int main()

{int x=7,y=21; //iniţializare cu valori

x=x+y;

y=x-y;

x=x-y;

cout<<”x=”<<x<<endl<<”y=”<<y;

return 0;

}

2. Structuri alternative

a) Instrucţiunea if

if (cond_logică)

instrucţiune 1;

else

instrucţiune 2;

Structurile alternative dirijează execuţia unei secvenţe de instrucţiuni (1 sau 2) în funcţie de valoarea unei condiţii

plasate în blocul de decizie. Dacă secvenţa de instrucţiuni 2 este vidă, instrucţiunea if nu are ramura else.

Exemplu: Să se scrie un program C care să verifice dacă trei numere reale citite de la tastatură pot reprezenta lungimile

laturilor unui triunghi:

#include <iostream.h>

int main ()

{

float a, b, c;

cout<<"Introduceti cele 3 lungimi ale laturilor:";

cin>>a>>b>>c;

if ((a < (b + c))&&(b < (a + c))&&(c < (a + b))&& a>0 && b>0 && c>0 )

cout<<"Cele trei segmente pot forma un triunghi !";

else

cout<<"Cele trei segmente nu pot forma triunghi !";

return 0;

}

b) Instrucţiunea de selecţie (switch) Instrucţiunea switch permite selectarea unei alternative din mai multe posibilităţi în funcţie de valoarea unei variabile sau expresii de tip întreg. Sintaxa este următoarea:

Page 2: Structuri de control - competentedigitale.ro+.pdf · Instrucţiunea switch permite selectarea unei alternative din mai multe posibilităţi în funcţie de valoarea unei variabile

2

switch (expresie)

{

case valoare_1:

instructiune_11;

instructiune_12;

instructiune_13;

break;

case valoare_2:

instructiune_21;

instructiune_22;

break;

case valoare_N:

instructiune_N;

break;

default:

instructiune_M;

break;

}

Selectorul expresie trebuie să fie de tip întreg. Toate valorile din care se face selecţia, valoare_1 până la valoare_N trebuie să fie întregi. Ele trebuie să fie şi distincte. Dacă expresie este egală cu valoare_1, execuţia continuă cu instrucţiunile care apar pe această ramură (instructiune_11, instructiune_12, instructiune_13) şi continuă până la întâlnirea unei instrucţiuni break sau până când se încheie blocul switch. Instrucţiunea break este opţională. Dacă expresie este egală cu valoare_2, se execută instructiune_21, instructiune_22 etc. Dacă expresie nu este egală cu nici una dintre valorile valoare_1 până la valoare_N, se execută instrucţiunile de sub eticheta default. Această etichetă este opţională. Exemplu: Programul următor afişează un calificativ în funcţie de nota unui student citită de la tastatură. #include <iostream>

using namespace std;

int main (void)

{

int nota;

cout<<"nota=";cin>>nota;

switch (nota)

{

case 1:

case 2:

case 3:

case 4:

cout<<"Repetent \n";

break;

case 5:

case 6:

case 7:

cout<<"Slab \n";

break;

case 8:

case 9:

cout<<"Bine \n";

break;

case 10:

cout<<"Foarte bine \n";

break;

default:

cout<<"Valoarea introdusa nu este o nota corecta!";

break;

}

return 0;

}

Page 3: Structuri de control - competentedigitale.ro+.pdf · Instrucţiunea switch permite selectarea unei alternative din mai multe posibilităţi în funcţie de valoarea unei variabile

3

Aplicaţie (manual pg. 24)

Se consideră două cercuri date fiecare prin coordonatele cercului (x,y) şi rază (r). Să se afişeze, pe ecran, poziţia celor două

cercuri unul faţă de celălalt. Informaţiile despre cercuri se citesc din fişier.

/*Poziţiile relative a două cercuri :

a) exterioare – nu au nici un punct comun şi d > R + r

b) tangente exterior – un singur punct comun şi d = R + r

c) secante – au două puncte comune şi R – r < d < R + r

d) tangente interior – un singur punct comun şi d = R – r

e) interioare – nu au nici un punct comun şi d < R – r

f) concentrice – nici un punct comun, au acelaşi centru şi d = 0 */

#include <iostream>

#include<math.h>

#include<fstream>

using namespace std;

ifstream f("date.in");

int main()

{float x1,x2,y1,y2,r1,r2,d,R,r;

//in fisier avem, in ordine: x1,y1,x2,y2,r1,r2

f>>x1>>y1>>x2>>y2>>r1>>r2;

d=sqrt(pow(y2-y1,2)+pow(x2-x1,2));

cout<<"d="<<d<<endl;

if(r1>r2) {R=r1;r=r2;}

else {R=r2;r=r1;}

if(d-R-r>0.01)cout<<"a) exterioare - nu au nici un punct comun"<<endl;

if((d-R-r)>=0&&(d-R-r)<=0.01)cout<<"b)tangente exterior-un singur punct comun"

<<endl;

if(R-r<d&&d<R+r&&(d-R+r)>=0.01) cout<<"c) secante - au doua puncte comune"<<endl;

if((d-R+r)>=0&&(d-R+r)<=0.01)cout<<"d)tangente interior-un singur punct comun"

<<endl;

if(d<R-r && d>0) cout<<"e) interioare - nu au nici un punct comun"<<endl;

if(d==0) cout<<"f) concentrice - nici un punct comun, au acelasi centru";

return 0;

}

Exemple de fişiere de intrare:

a) b) c) d) e) f)

x1=2

y1=2.5

x2=5

y2=4

r1=1.25

r2=1.25

r1=1.3541

r2=2

r1=3

r2=2

r1=6.3541

r2=3

r1=7

r2=3

//x1=x2

//y1=y2

x1=2

y1=2.5

x2=2

y2=2.5

Page 4: Structuri de control - competentedigitale.ro+.pdf · Instrucţiunea switch permite selectarea unei alternative din mai multe posibilităţi în funcţie de valoarea unei variabile

4

3. Structuri repetitive

1. Structura repetitivă cu număr cunoscut de paşi – instrucţiunea for

Sintaxa instrucţiunii for în limbajul Pseudocod este:

pentru contor expresie_1, expresie_2 execută

instrucţiune

Efect:

1. Se evaluează expresie_1.

2. Se atribuie variabilei contor valoarea expresiei expresie_1.

3. Se evaluează expresie_2.

4. Dacă valoarea variabilei contor este mai mică sau egală cu valoarea expresiei 2, atunci se

execută instrucţiunea şi apoi se măreşte cu 1 (se incrementează) valoarea variabilei contor,

după care se revine la pasul 3. Dacă valoarea variabilei contor este mai mare decât valoarea

expresiei 2, atunci se iese din structura repetitivă pentru.

În limbajul C++:

for (expresie_1; expresie_2; expresie_3)

instrucţiune;

Efect:

1. Se execută iniţializarea definită de expresie_1.

2. Se evaluează expresie_2; dacă valoarea produsă la evaluare este 1 (adevărat) atunci se

execută instrucţiunea, altfel se iese din cadrul instrucţiunii repetitive for.

3. Se execută reiniţializarea definită de expresie_3 şi se reia de la pasul 2.

Observaţii: a) Instrucţiunea for este o structură repetitivă condiţionată anterior.

b) expresie_1 = iniţializarea variabilei contor (contor = valoare_iniţială)

expresie_2 = condiţia de continuare

contor <= valoare_finală for crescător

contor >= valoare_finală for descrescător

expresie_3 = modificare contor

contor ++ for crescător

contor - - for descrescător

c) Dacă în cadrul instrucţiunii for trebuie să fie executate mai multe instrucţiuni, atunci acestea

vor fi cuprinse între acolade { }.

Aplicaţii

1. Câte steluţe afişează următoarele structuri repetitive cu număr cunoscut de paşi?

a. pentru i 1, 7 execută R: 7 steluţe

scrie “*”

b. pentru i 10, 2, -1 execută R: 9 steluţe

scrie “*”

c. pentru i 7, 1, -2 execută R: 4 steluţe

scrie “*”

d. pentru i 2, 20, 2 execută R: 10 steluţe

scrie “*”

Page 5: Structuri de control - competentedigitale.ro+.pdf · Instrucţiunea switch permite selectarea unei alternative din mai multe posibilităţi în funcţie de valoarea unei variabile

5

2. Care este valoarea variabilei t după executarea secvenţei următoare? t=0;

for (i=1; i<=7; i++)

t++;

3. Se citeşte de la tastatură un număr n natural. Să se afişeze pe ecran toate numerele naturale de la 1 la n.

4. Să se realizeze un program care afişează alfabetul de la ‘a’ la ‘z’, precum şi de la ‘z’ la ‘a’.

5. Se citesc de la tastatură un număr natural n şi apoi n numere întregi. Să se calculeze suma şi produsul celor

n numere.

6. Se citesc n numere naturale. Să se calculeze produsul numerelor impare dintre cele n numere.

7. Se citesc n numere naturale. Să se calculeze media aritmetică a lor.

8. Fie x un număr natural (x ≥ 2). Să se afişeze toţi divizorii acestuia.

9. Să se scrie un program care verifică dacă un număr natural x este număr prim.

10. Să se scrie un program care afişează toate numerele perfecte mai mici decât o valoare naturală n citită de la

tastatură. Un număr este perfect dacă se poate scrie ca suma divizorilor săi naturali mai puţin el însuşi. De

exemplu, 6 este număr perfect (6=1+2+3).

11. Se citesc de la tastatură n numere întregi. Să se determine cel mai mic dintre ele.

12. Se citesc de la tastatură n numere întregi. Să se determine cel mai mare dintre ele.

13. În șirul de numere al lui Fibonacci, fiecare număr reprezintă suma a două numere anterioare, începând cu 0

și 1. Astfel, șirul incepe cu 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610 etc. Să se scrie un program

care pentru un număr natural n citit de la tastatură, afişează al n-lea termen al şirului lui Fibonacci.

14. Se citeşte de la tastatură un număr natural n. Să se afişeze următoarele piramide de numere:

a) b) c)

1

1 2

1 2 3

......

1 2 3 4 .... n

n n-1 n-2 .... 1

n-1 n-2 .....1

.........

3 2 1

2 1

1

1

1 2

1 2 3

......

1 2 3 4 .... n-1

1 2 3 4 5 ...... n

1 2 3 4 .... n-1

......

1 2 3

1 2

1

15. Se citeşte n natural. Să se afişeze următoarea formă. În exemplul de mai jos n=5:

* * * * * * * * * * * * * * *

16. Să se afle toate numerele de forma 𝒂𝒃𝒄𝒅̅̅ ̅̅ ̅̅ ̅ divizibile cu 11.

17. Să se afişeze toate numerele gemene până la o valoare n citită de la tastatură. Două numere sunt gemene,

dacă sunt prime şi diferenţa în modul a celor două numere este 2. De exemplu, numerele 17 şi 19 sunt

gemene.

18. Să se afişeze primele n numere naturale prime.

19. Să se realizeze programul care afişează următorul meniu:

1. Afişarea descrescătoare a primelor n numere naturale.

2. Valoarea sumei S1 = 1 + 1*2 + 1*2*3 + … + 1*2*3*…*n.

3. Valoarea sumei 𝑆2 = 1 +1

2+

1

3+⋯+

1

𝑛 .

La sfârşitul fiecărei opţiuni utilizatorul este întrebat dacă doreşte să continue, iar în caz afirmativ se

realizează saltul la începutul opţiunii. În cadrul fiecarei opţiuni se citeşte valoarea lui n.

Page 6: Structuri de control - competentedigitale.ro+.pdf · Instrucţiunea switch permite selectarea unei alternative din mai multe posibilităţi în funcţie de valoarea unei variabile

6

2. Structuri repetitive cu număr necunoscut de paşi

a. Structura repetitivă cu test iniţial sau condiţionată anterior

Are următoarea formă:

În limbajul pseudocod:

cât timp condiţie execută

instrucţiune /instrucţiuni

Schema logică:

În limbajul C++:

while (condiţie_logică)

instrucţiune;

Efect:

P1: se evaluează condiţia;

P2: dacă aceasta este adevărată se execută instrucţiunea sau secvenţa de instrucţiuni şi se reia P1;

P3: dacă condiţia este falsă se iese din structura repetitivă.

Observaţie: În limbajul C++, dacă în corpul structurii repetitive se află mai multe subinstrucţiuni, atunci acestea

trebuie să fie cuprinse între acolade {}.

b. Structura repetitivă cu test final sau condiţionată posterior

Are următoarea formă:

În limbajul pseudocod:

execută

instrucţiune /instrucţiuni

cât timp condiţie

Schema logică:

În limbajul C++:

do {

instrucţiune /instrucţiuni;

} while (condiţie_logică);

Efect:

P1: se execută instrucţiunea sau instrucţiunile;

P2: se evaluează condiţia;

P3: dacă aceasta este adevărată se reia execuţia de la pasul P1;

P4: dacă condiţia este falsă se iese din structura repetitivă.

Observaţie: Cele două structuri (instrucţiuni) diferă prin faptul că, în cazul celei de-a doua structuri mai întâi se

execută subinstrucţiunea / subinstrucţiunile şi apoi se testează condiţia. Prin urmare, chiar dacă condiţia

este falsă, tot se vor executa o dată subinstrucţiunile.

Nu Da condiţie

subinstrucţiuni

Nu Da condiţie

subinstrucţiuni

Page 7: Structuri de control - competentedigitale.ro+.pdf · Instrucţiunea switch permite selectarea unei alternative din mai multe posibilităţi în funcţie de valoarea unei variabile

7

Simularea instrucţiunii cât timp cu ajutorul instrucţiunii execută cât timp

dacă condiţie atunci

execută

instrucţiune /instrucţiuni

cât timp condiţie

Se observă că a fost necesară testarea iniţială a condiţiei deoarece, spre deosebire de instrucţiunea cât

timp, instrucţiunea execută cât timp execută o dată instrucţiunea (instrucţiunile) înainte de a testa condiţia.

Simularea instrucţiunii execută cât timp cu ajutorul instrucţiunii cât timp

instrucţiune /instrucţiuni

cât timp condiţie execută

instrucţiune /instrucţiuni

Se observă că a fost necesar să executăm o dată instrucţiunea (instrucţiunile) în afara structurii cât timp.

Temă

1. Se presupune citit de la tastatură un număr n natural. Să se scrie secvenţe de algoritmi pentru următoarele

operaţii:

a. Determinarea numărului de cifre ale numărului n;

b. Determinarea primei cifre a numărului n;

c. Aflarea mediei aritmetice a cifrelor numărului n;

d. Calculaţi suma primelor două cifre ale sale;

e. Determinarea cifrei maxime şi a numărului de apariţii a acesteia dintr-o singură parcurgere a

numărului.

2. Se citeşte un număr natural n de la tastatură. Să se determine oglinditul acestuia. De exemplu, pentru

numărul 23105 oglinditul este 50132, adică acesta se obţine din numărul iniţial prin inversarea cifrelor.

3. Se dă un număr natural format dintr-un număr impar de cifre. Să se scrie un algoritm cu ajutorul căruia să

se elimine cifra din mijloc. Să se afişeze numărul obţinut.

4. Se citeşte un număr n natural de la tastatură. Să se scrie un algoritm care să afişeze cifra sau cifrele din

mijlocul numărului n. De exemplu, dacă n=15293, se va afişa 2 iar dacă n=8170, se va afişa 17.

5. Să se scrie un algoritm care, pentru un număr natural n introdus de la tastatură, să determine:

a. Suma cifrelor din prima jumătate a numărului. Dacă n are număr impar de cifre se va adăuga şi

cifra din mijloc la sumă. De exemplu, dacă n=429, se va calcula 4+2 iar dacă n=1505, se va calcula

suma 1+5.

b. Suma cifrelor din a doua jumătate a numărului. Dacă n are număr impar de cifre se va adăuga şi

cifra din mijloc la sumă. De exemplu, dacă n=429, se va calcula 2+9 iar dacă n=1505, se va calcula

suma 0+5.

6. Se citesc două numere natural n1 şi n2. Să se scrie un algoritm care să determine care dintre cele două

numere are mai multe cifre. De exemplu dacă n1=743 şi n2=438, se va afişa “au acelaşi număr de cifre”.

Dacă n1=743 şi n2=48, se va afişa “primul număr are mai multe cifre”. Algoritmul va fi conceput astfel

încât cele două numere să fie parcurse simultan.