Sunteți pe pagina 1din 9

CENTRUL DE PREGĂTIRE PENTRU PERFORMANȚĂ HAI LA OLIMPIADĂ !

DISCIPLINA INFORMATICĂ
JUDEȚUL SUCEAVA

Titlul lectiei: Structuri de control. Structura decizionala, structuri repetitive

Data: 22.10.2016

Profesor: Pintea Eugen

Grupa: clasa a IX-a GRUPA1

Locul de desfasurare: Colegiul National „Stefan cel Mare” Suceava

STRUCTURI DE CONTROL

Algoritmul reprezintă o succesiune, finită, de paşi care se execută cu scopul de-a rezolva
o problemă sau o categorie de probleme.
Algoritmul proiectat pentru rezolvarea unei anumite probleme trebuie implementat într-
un limbaj de programare; prelucrarea datelor se realizează cu ajutorul instrucţiunilor.
Instrucţiunea descrie un proces de prelucrare pe care un calculator il poate executa. O
instructiune este o construcţie valida (care respectă sintaxa limbajului) urmată de “;” . Ordinea în
care se execută instrucţiunile unui program defineşte aşa-numita structură de control a
programului.

Limbajele moderne sunt alcatuite pe principiile programării structurate. Conform lui C. Bohm şi
G. Jacobini, orice algoritm poate fi realizat prin combinarea a trei structuri fundamentale:

 structura secvenţiala sau liniara;


 structura alternativa (de decizie, de selecţie);
 structura repetitivă (ciclică).

Structura liniară (numită şi secvenţială) este alcatuită din urmatoarele instrucţiuni:

- comentarii
- declararea variabilelor
- instrucţiunea de citire
- instrucţiunea de scriere
- instrucţiunea de atribuire
- instrucţiunea compusă (sau blocul de instrucţiuni)
Comentarii

În cadrul algoritmilor se pot adauga comentarii pentru a descrie operaţiile efectuate sau pentru a
da indicaţii în privinţa implementarii.În cazul în care textul comentariului se află doar pe un singur rând
comentariul este precedat de „//” iar dacă comentariul ocupa mai multe rânduri fie fiecare rând trebuie
precedat de „//” fie folosim „/*……*/”.

Exemple: //Comentariu pe un singur rând

//Comentariu pe un al doilea rând

/* Comentariu a carui text

se scrie pe mai mult de un rând*/

Comentariile sunt foarte utile mai ales atunci când se lucrează ân echipă.

Declararea variabilelor

Declararea variabilelor se face specificând tipul şi denumirea acestora ca în exemplele


următoare:

int a;

float b;

char c;

int x, z, y;

Orice variabilă care este folosită în algoritm trebuie declarată în prealabil. Limbajul de
programare C++ face diferenţa între literele mari şi literele mici (este case sensitive). Astfel,
varibila cu denumirea x va fi diferită de varibila cu denumirea X.

Instructiunea de citire

Pseudocod C++
Citeşte a; cin>>a;
Citeşte a, b, c; cin>>a>>b>>c;

Instrucţiunea de afişare

Pseudocod C++
Afişează a; cout<<a;
Afişează a,b,c; cout<<a<<b<<c;

Instructiunea de atribuire

Pseudocod C++
a5; a=5;
b2-5x; b=2-5*x;
Blocul de instrucţiuni

Pseudocod C++
Început {
Instrucţiune 1; Instrucţiune 1;
Instructiune 2; Instrucţiune 2;
........................ ........................
Instrucţiune n; Instrucţiune n;
Sfârşit
}
Structura alternativă (decizională, de selecţie)

Structura alternativă decide în baza unei condiţii care va fi instrucţiunea sau blocul de
instruţiuni ce urmează a fi executate în cadrul algoritmului.

Pseudocod C++
Dacă (condiţie) atunci if (condiţie)
Secvenţa 1 de operaţii instrucţiune 1;
sau sau

Dacă (condiţie) atunci if (condiţie)


Secvenţa 1 de operaţii instrucţiune 1;
Altfel else
Secvenţa 2 de operaţii instrucţiune 2;

Structura alternativă funcţionează astfel: se evaluează condiţia, iar dacă aceasta este
adevarată, se execută instrucţiunea 1. În caz contrar se va executa instrucţiunea 2. După cum se
observă din descrierea facută în tabelul anterior există structură alternativă cu o singură ramură.

Exemple:

1.

Pseudocod C++
Început #include <iostream>
Citeste n using namespace std;
Daca (restul împărţirii la 2 este 0) atunci void main()
Afişează „n este număr par” {
Altfel int n;
Afişează „n este număr imăpar” cin>>n;
Sfârşit if(n%2==0)
cout<<n<<” este numar par”;
else
cout<<n<<” este numar impar”;

}
2.Sa se realizeze un algoritm pentru a calcula suma masurilor a doua unghiuri exprimate in
grade, minute si secunde. Un grad are 60 de minute, un minut are 60 de secunde.

Exemplu: 45o,54’,37’’+23o,17’,24’’=69o,12’,1’’

Implementare:

#include<iostream>
using namespace std;
int main()
{
int m1,m2,s1,s2,g1,g2, g,m,s;
cout<<"dati masura primului unghi in grade,minute si secunde ="<<endl;
cin>>g1>>m1>>s1;
cout<<"dati masura celui de-al doilea unghi in grade,minute si secunde ="<<endl;
cin>>g2>>m2>>s2;
//1 grad=60 minute = 3600secunde si 1 minut=60secunde
if( g1<360 && g2<360 && m1<60 && m2<60 && s1<60 &&s2<60)//verificam daca valorile sunt
//corecte
{
if((s1+s2)>=60)
{ s=(s1+s2)%60;
m=1;
}
else
{s=s1+s2;
m=0;
}
if((m1+m2) >=60)
{m=(m1+m2+m)%60;
g=1;}
else{ m=m1+m2;
g=0;}
g=g1+g2+g;
cout<<g<<"grade"<<m<<"minute"<<s<<"secunde"<<endl;
}
else
cout<<"date incorecte";
return 0;
}

Instructiunea de selectie

switch(expresie){

case c1: secventa_instructiuni_1; break;

case c2: secventa_instructiuni_2; break;

........................................

case cn: secventa_instructiuni_n; break;

[default: secventa_instructiuni_n+1];

unde:
 expresie are semnificaţia de expresie de tip întreg;
 ci sunt constante de tip întreg;
 secventa_ instrucţiuni_i: reprezintă o secvenţă de instrucţiuni.

Implementare

#include <iostream>
using namespace std;
int main()
{
char c;
cout<<"Introduceti un caracter:";
cin>>c;
switch (c)
{
case ('a'):
cout<<"Afisare\n";
break;
case ('t'):
cout<<"Tiparire\n";
break;
case ('x'):
cout<<"iesire\n";
break;

default:
cout<<"Caracter fara semnificatie\n";
}
}

Structuri repetitive

A. Structura repetitiva cu numar cunoscut de pasi

Instructiunea FOR
Pseudocod C++
Pentru contorvi,vf, pas executa int n,i;
Secventa de operatii for(i=1;i<=n;i++)
instructiune1;
sau
for(i=1;i<=n;i++)
{
Instructiune1;
Instructiune2;
.......................
Instructiune n;
}
- Contorul este o variabila care numara de cate ori se va executa instructiunea sau blocul de
instructiuni cuprinse in FOR.
- vi reprezinta valoarea initiala sau valoarea de la care se pleaca
- vf reprezinta valoarea finala sau valoarea la care ne oprim
- pas reprezinta valoarea cu care crestem sau descrestem (incrementare/decrementare)
Daca vi<vf s merge crescator iar daca vi>vf mergem descrescator

Contor crescator Contor descrescator


for(i=1;i<=5;i++) for(i=5;i>=1;i--)
cout<<i<<” ”; cout<<i<<” ”;
va afisa 1 2 3 4 5 va afisa 5 4 3 2 1

B. Structuri repetitive cu numar necunoscut de pasi

Structurile repetitive cu numar necunoscut de pasi pot fi de doua feluri:


o Cu test initial
o Cu test final
Structura cu test initial
Pseudocod C++
cat timp conditie while (conditie)
repeat instruction instructiune;
sfarsit cat timp

Structura cu test final


Pseudocod C++
Repeta do
Instructiune { instructiune;
pana cand conditie }while(conditie);

Aplicatii:
Suma primelor n numere pare
Cu test initial Cu test final
# include<iostream> # include<iostream>
using namespace std; using namespace std;
int main() int main()
{ {
int s=0,i=2,n,k=0; int s=0,i=2,n,k=0;
cout<<"n="; cin>>n; cout<<"n="; cin>>n;
while ( k<n) do
{ s=s+i; { s=s+i;
i=i+2; i=i+2;
k++ ; k++ ;
} }while(k<n);
cout<<"suma nr pare="<<s; cout<<"suma nr pare="<<s;
return 0; return 0;
} }

Aplicații

Structuri decizionale

1. pbinfo.ro/559
Cerința
Se dau 5 numere distincte. Să se determine suma celor mai mari 3 dintre ele.
Date de intrare
Programul citește de la tastatură 5 numere naturale.
Date de ieșire
Programul va afișa pe ecran numărul cerut.
Restricții și precizări
 cele 5 numere naturale sunt distincte, cuprinse între 1 și 10000, inclusiv
2. pbinfo.ro/1308
Cerinţa
Se citesc două numere naturale n m cu exact două cifre fiecare. Să se decidă dacă cele două
numere au cifre comune.
Date de intrare
Programul citește de la tastatură numerele n m.
Date de ieşire
Programul afișează pe ecran mesajul da dacă cele două numere au cifre comune, respectiv nu în
caz contrar.
Restricţii şi precizări
 10 ≤ n,m ≤ 99

3. pbinfo.ro/1310
Cerinţa
Se citesc două numere naturale n m cu exact trei fiecare. Să se afle câte cifre din n divid pe m.
Date de intrare
Programul citește de la tastatură numerele n m.
Date de ieşire
Programul afișează pe ecran valoarea cerută.
Restricţii şi precizări
 100 ≤ n,m ≤ 999
Structuri repetitive

4. pbinfo.ro/1261
Cerința
Se citesc numere de la tastatură până la apariția lui zero. Să se determine câte dintre ele erau pare.
Date de intrare
Programul citește de la tastatură numere întregi. Citirea se încheie la introducerea valorii 0, care nu
se va număra.
Date de ieșire
Programul afișează pe ecran numărul K, reprezentând numărul de numere pare citite.
Restricții și precizări
 numerele citite aparține intervalului (-1.000.000;1.000.000)
 în cazul în care niciun număr nu este par se va afişa valoarea NU EXISTA.

5. pbinfo.ro/351
Cerinţa
Se citește numărul natural n. Să se afișeze următoarea piramidă de numere:
1
12
123
.......
1 2 3 ... n
Date de intrare
Programul citește de la tastatură numărul n.
Date de ieşire
Programul afișează pe ecran numărul 1, pe a doua linie numerele 1 2, pe a treia linie numerele 1 2
3, etc, pe a n-a linie numerele 1 2 3 ... n. Pe fiecare linie numerele sunt separate prin exact un
spațiu.
Restricţii şi precizări
 1 ≤ n ≤ 20
6. pbinfo.ro/1405
Cerința
Se dă n un număr natural. Să se afișeze un romb de latură n umplut cu caractere * iar spațiul
spațiul exterior umplut cu #, ca în exemplu.
Date de intrare
Programul citește de la tastatură numărul n.
Date de ieșire
Programul va afișa pe ecran rombul cerut.
Restricții și precizări
 1 ≤ n ≤ 10

7. pbinfo.ro/350
Cerinţa
Se dau două numere naturale nenule n și m. Pentru mulțimileA={1,2,..,n} și B={1,2,...,m}, să se
afișeze mulțimeaA×B={(a,b) | a∈A, b∈B} – produsul cartezian al mulțimilor A și B.
Date de intrare
Programul citește de la tastatură numerele n și m.
Date de ieşire
Programul afișează pe ecran mulțimea cerută astfel:
 elementele mulțimii vor fi scrise între acolade și separate prin virgule
 fiecare element este o pereche de numere, care va fi scrisă între paranteze rotunde,
numerele din pereche fiind separate prin virgulă
 mai întâi se vor scrie perechile (a,b) pentru care a=1, cu b în ordine crescătoare, apoi
perechile pentru care a=2cu b în ordine crescătoare, etc, ca în exemplu.
Restricţii şi precizări
 1 ≤ n,m ≤ 10

8. pbinfo.ro/459
Cerinţa
Se citesc numere de la tastatură până când se introduc două numere consecutive egale. Să se
determine suma tuturor numerelor citite.
Date de intrare
Programul citește de la tastatură numere întregi. Citirea se încheie când se introduc două numere
egale.
Date de ieşire
Programul afișează pe ecran numărul S, reprezentând suma numerelor citite.
Restricţii şi precizări
 numerele citite sunt numere naturale mai mici decât 1.000.000
 valoarea absolută a sumei nu va depăși 1.000.000.000

9. pbinfo.ro/115
Cerinţa
Să se scrie un program care citeşte de la tastatură un număr natural n şi apoi un şir de n numere
naturale şi determină media aritmetică a celor pare.
Date de intrare
Programul citește de la tastatură numărul n, iar apoi n numere naturale.
Date de ieşire
Programul afișează pe ecran numărul M, reprezentând media aritmetică a valorilor pare.
Restricţii şi precizări
 0 < n < 1000
 cele n numere citite vor fi mai mici decât 1000000
 rezultatul va fi punctat dacă diferența dintre cel afișat de program și cel corect este mai
mică decât 0.01.
 în toate seturile de date de intrare se vor afla şi valori pare

10. pbinfo.ro/654

Cerința
Fie număr natural n. Acestuia i se aplică în mod repetat următoarele transformări:
 dacă n este par, devine n/2
 dacă n este impar, devine 3*n+1
În 1937 matematicianul Lothar Collatz a formulat următoarea conjectură :pentru orice număr
natural, în urma transformărilor numărul devine 1.
De exemplu, pentru n=6 se obține șirul: 6 3 10 5 16 8 4 2 1, șir care are 9 termeni.
Pentru un n dat, determinați numărul de termeni din șirul de transformări după regula de mai sus.
Date de intrare
Programul citește de la tastatură numărul n.
Date de ieșire
Programul va afișa pe ecran numărul C, reprezentând numărul de termeni din șirul transformărilor
de mai sus.
Restricții și precizări
 1 ≤ n ≤ 1 000 000

11. pbinfo.ro/246

Cerinţa
Se dau n numere naturale. Să se determine ultimele două numere impare, nu neapărat distincte,
dintre cele date.
Date de intrare
Programul citeşte de la tastatură numărul n, apoi n numere naturale, dispuse pe mai multe linii.
Date de ieşire
Programul afişează pe ecran ultimele două numere impare dintre cele date, în ordinea în care au
fost citite. Dacă nu au fost citite suficiente numere impare, se va afişa doar mesajul Numere
insuficiente.
Restricţii şi precizări
 0 < n <= 10.000
 cele n numere citite vor avea cel mult 9 cifre

12. pbinfo.ro/560

Cerința
Copiii din clasa a V-a au hotărât să planteze flori, micșunele și panseluțe, în grădina din curtea
școlii. Ei au plantat un număr de n flori astfel: un rând de micșunele, 2 rânduri de
panseluțe, 3 rânduri de micșunele, 4rânduri de panseluțe, și așa mai departe până au terminat toate
florile. Fiecare rând conține un număr de 5 flori, ultimul rând putând să conțină mai puține flori.
Copiii doresc să cunoască numărul de rânduri plantate, dacă ultimul rând a fost complet sau nu și
ce flori s-au plantat pe ultimul rând.
Date de intrare
Programul citește de la tastatură un număr natural n, reprezentând numărul florilor.
Date de ieșire
Pe primul rând al ecranului se va afișa câte rânduri au plantat copii în total, pe al doilea rând al
ecranului se va afișa mesajul DA, dacă ultimul rând este complet și mesajul NU dacă ultimul rând
este incomplet, iar pe al treilea rând al ecranului se va afișa numele florilor plantate pe ultimul
rând (micsunele sau panselute). Atenție, mesajul de pe rândul2 se scrie cu litere mari iar cel de pe
rândul 3 cu litere mici.

Bibliografie:
- http://infoscience.3x.ro
- http://sites.google.com
- http://pbinfo.ro

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