Sunteți pe pagina 1din 17

Structuri logice – programarea structurată

1. Structura liniară
2. Structura decizională (alternativă)
3. Structura repetitivă

Structura liniară

Este o structură simplă, în care comenzile (instrucțiunile) se


execută secvențial, una după alta, fără ramificații.

Problemă:​ Se dau două numere întregi memorate în variabilele a și b.


Se cere să se calculeze suma lor să se afișeze rezultatul pe ecran.
Structuri logice – programarea structurată

Pseudocod Schema logică C++


Intreg a,b,s # include <iostream>
Inceput using namespace std;
Citeste a,b int a,b,s;
s←a+b int main ()
Scrie s {
Sfarsit cin>>a>>b;
s=a+b;
cout<<s;
}

Tema:
Se dau 2 numere naturale h m, reprezentând un ora curentă
exprimată în ore şi minute.
Să se determine care va fi ora peste x minute.

Date de intrare Programul citește de la tastatură numerele h1 m1 x.

Date de ieşire Programul afișează pe ecran numerele h2 m2, separate


printr-un spaţiu,
cu semnificaţia din enunţ.

Restricţii şi precizări
0 ≤ h1, h2 ≤ 23
Structuri logice – programarea structurată
0 ≤ m1, m2 ≤ 59
0 ≤ x ≤ 10000

Structura decizională
1. Structura decizională simplă
2. Structura decizională cu ramură vidă

Structura decizională simplă

Pseudocod Schema logică C++


Dacă ​<expresie logica> ​atunci if (​expresie logica​)
{
​Instructiuni 1
altfel I​ nstructiuni 1;
}
​Instructiuni 2 else
Sfarsit daca {
​Instructiuni 2;
}

Modul de functionare:
- se evalueaza expresia logica
- daca este adevarata, se executa ​Instructiuni 1
- daca nu este adevarata, se executa Instructiuni 2
Obs. - In C++, instructiuni 1, sau instructiuni 2 se grupeaza in bloc de
instructiuni, intre {}
- daca este o singura instructiune nu este necesar sa punem bloc {}
- pe ramurile atunci/ altfel pot fi incluse si alte instructiuni decizionale
- in situatia de mai sus, cel mai apropiat “altfel” se leaga de ultimul
“daca”
- NICIODATA nu se vor efectua ambele ramuri
Aplicatie:
Sa se determine maximul dintre doua numere intregi date a, b. Pe ecran se va afisa cel mai
mare dintre ele.
Structuri logice – programarea structurată

Pseudocod Schema logică C++


Intreg a,b #include <iostream>
Inceput using namespace std;
int a,b;
Citeste a,b int main()
Dacă ​a>b ​atunci {
​Scrie a cin>>a>>b;
altfel if(a>b)
cout<<a;
​Scrie b
else
Sfarsit daca cout<<b;
return 0;
Sfarsit }

Sa se determine maximul dintre trei numere intregi date a, b, c.


Pe ecran se va afisa cel mai mare dintre ele.

Pseudocod Schema logică C++


Intreg a,b, c #include <iostream>
Inceput using namespace std;
int a,b,c;
Citeste a,b,c int main()
Dacă ​a>b ​atunci {
​Dacă ​a>c​ atunci cin>>a>>b>>c;
​Scrie a if(a>b)
if(a>c)
​altfel
cout<<a;
​ Scrie c else
​Sfarsit daca cout<<c;
altfel
​Dacă ​ b>c ​ atunci else
​Scrie b if(b>c)
cout<<b;
​altfel else
​ Scrie c cout<<c;
​Sfarsit daca return 0;
Sfarsit daca }

Sfarsit
Structuri logice – programarea structurată

Structura decizională cu ramura vida

Pseudocod Schema logică C++


Dacă ​<expresie logica> ​atunci if (​expresie logica​)
​Instructiuni {
​Instructiuni;
Sfarsit daca
}

Aplicatie:
Sa se determine maximul dintre trei numere intregi date a, b, c.

Pseudocod Schema logică C++


Intreg a,b, c, mx #include <iostream>
using namespace std;
Inceput
int a,b,c,mx;
Citeste a,b,c int main()
mx←a {
Dacă ​b>mx ​atunci cin>>a>>b>>c;
​mx←b mx=a;
Sfarsit daca if(b>mx)
mx=b;
Dacă ​c>mx ​atunci if(c>mx)
​mx←c mx=c;
Sfarsit daca return 0;
Scrie mx }
Sfarsit
Structuri logice – programarea structurată
Se dau 3 numere intregi a, b, c. Sa se ordoneze crescator si sa se afiseze pe ecran. Se va
utiliza structura alternativa cu ramura vida.

Pseudocod Schema logică C++


Intreg a,b, c, aux #include <iostream>
Inceput
using namespace std;
Citeste a,b,c int a,b,c,aux;
int main()
Dacă ​a>b ​atunci {
​aux←a cin>>a>>b>>c;
a←b if(a>b)
{
b←aux aux=a;
Sfarsit daca a=b;
Dacă ​b>c ​atunci b=aux;
​aux←b }
b←c if(b>c)
{
c←aux aux=b;
Sfarsit daca b=c;
Dacă ​a>b ​atunci c=aux;
​aux←a }
if(a>b)
a←b
{
b←aux aux=a;
Sfarsit daca a=b;
Scrie a, b, c b=aux;
Sfarsit }
cout<<a<<' '<<b<<' '<<c;
return 0;
}

Structura repetitiva
1. Structura repetitiva cu numar necunoscut de pasi
a. cu test initial
b. cu test final
2. Structura repetitiva cu numar cunoscut de pasi
Structuri logice – programarea structurată

Structura repetitiva cu numar necunoscut de pasi cu


test initial

Pseudocod Schema logică C++


cat timp ​expresie_logica ​executa while (​expresie_logica​)
​{
Instructiuni
​Instructiuni​;
Sfarsit cat timp }

Modul de functionare:
- se evalueaza expresia logica
- daca este adevarata se executa instructiunile
- se revine la evaluarea expresiei logice si se vor executa instructiunile in mod repetat
pana cand expresia logica devine falsa
OBS.
1. Variabila care apare in expresia logica si determina repetarile din bucla se numeste variabila
de ciclare.
2. Variabila de ciclare ​trebuie initializata ​(citita, sau sa aiba o valoare atribuita) inainte de
structura cat timp
3. Variabila de ciclare ​trebuie sa se modifice ​in interiorul instructiunilor, altfel se obtine o
bucla infinita

Aplicatie:
Se citeste un numar natural n. Sa se calculeze suma cifrelor lui n.
Structuri logice – programarea structurată
Intreg n,s
Inceput
Citeste n
s<- 0
cat timp n!=0 executa
s<-s+n%10
n<-n/10
sfarsit cat timp
scrie s
sfarsit

Structura repetitiva cu numar necunoscut de pasi cu


test final

Pseudocod Schema logică C++


executa do
Instructiuni {
instructiuni
cat timp ​expresie_logica }
while​ ​(e
​ xpresia logica​);
Structuri logice – programarea structurată
Modul de functionare:
- se executa instructiunile (cel putin o data oricum)
- se evalueaza expresia logica
- daca este adevarata se executa instructiunile in mod repetat pana cand expresia
logica devine falsa
OBS.
1. Variabila care apare in expresia logica si determina repetarile din bucla se numeste variabila
de ciclare.
2. Variabila de ciclare ​trebuie initializata ​(citita, sau sa aiba o valoare atribuita) inainte de
structura
3. Variabila de ciclare ​trebuie sa se modifice ​in interiorul instructiunilor, altfel se obtine o
bucla infinita

Problema:
Se da numar natural n. Se cere sa se determine numarul de cifre ale lui n.

Pseudocod Schema logică C++


intreg n,k
citeste n
k← 0
executa
n ← n/10
k ← k+1
cat timp ​n>0
scrie k
Structuri logice – programarea structurată

Sa se scrie algoritmul pseudocod de mai jos inlocuind structura cat timp cu


executa.. cat timp

citeste n
z← 0
p←1
daca n>0 atunci
executa

cat timp n>0


sfarsit daca
scrie z
Structuri logice – programarea structurată

Structura repetitiva cu numar necunoscut de pasi cu


test final (repeta...pana cand)

Pseudocod Schema logică C++


repeta do
Instructiuni {
instructiuni
pana cand ​expresie_logica }

!​
while​ ​(​ expresia logica​);

Modul de functionare:
- se executa instructiunile (cel putin o data oricum)
- se evalueaza expresia logica
- daca este adevarata ​FALSA​ se executa instructiunile in mod repetat pana cand
expresia logica devine ADEVARATA
OBS. Structura repeta..pana cand nu are o instructiune asociata anume in C++, ea se
traduce cu do..while negand expresia logica
4. Variabila care apare in expresia logica si determina repetarile din bucla se numeste variabila
de ciclare.
5. Variabila de ciclare ​trebuie initializata ​(citita, sau sa aiba o valoare atribuita) inainte de
structura
6. Variabila de ciclare ​trebuie sa se modifice ​in interiorul instructiunilor, altfel se obtine o
bucla infinita

Problema:
Se da numar natural n. Se cere sa se determine numarul de cifre ale lui n.

Pseudocod Schema logică C++


Structuri logice – programarea structurată
intreg n,k
citeste n
k← 0
repeta
n ← n/10
k ← k+1
pana cand ​n<=0
scrie k
Structuri logice – programarea structurată

Structura repetitiva cu numar cunoscut de pasi

Pseudocod Schema C++


logică
Pentru ​contor​←​vi,vf,pas ​executa for(​contor=vi​;​contor<=vf​;​contor=contor+pas​)
i​ nstructiuni {
instructiuni​;
Sfarsit pentru
​}

Modul de functionare:
1. Se atribuie contorului valoarea initiala (de unde pornim) vi
2. Se compara contorul cu valoarea finala (unde ne oprim) vf
3. Daca este mai mic sau egal se executa instructiunile
4. Se actulizeaza contorul cu pasul contor=contor+pas
5. Se compara contorul cu valoarea finala (unde ne oprim) si se repeta pasii
3,4 pana cand contorul devine mai mare decat valoarea finala
OBS.
1. Daca pasul este pozitiv (crescator), instructiunile se vor executa cel
putin o data daca vi<=vf
2. Daca pasul este negativ (descrescator), instructiunile se vor
executa cel putin o data daca vi>=vf
3. In pseudocod nu se mai scrie pasul daca pas=1
Structuri logice – programarea structurată
4. Numarul de repatari pentru cazul in care pas=1 este vf-vi+1
5. In c++ instructiunea for are sintaxa generala

​ for(​initializari ​; ​expresii logice de continuare ​; ​actualizari​)


{
instructiuni​;
​}

Ex.​ 1. ​Se citesc de la tastatura n numere intregi. Sa se determine cate dintre


numerele citite sunt pare.

Pseudocod C++
intreg i,n,x,k
Inceput
citeste n
Pentru ​i​←​1, n ​executa
​ citeste x
daca x%2=0 atunci
k​←k+1
sfarsit daca
Sfarsit pentru
scrie k
sfarsit

2. Se citeşte un număr natural n şi apoi un şir de n numere naturale. Să se


determine câte numere din şir sunt de forma abba (numere de patru cifre
precum 2552).
Structuri logice – programarea structurată

3. Sa se genereze (sa se construiasca) crescator si sa se afiseze pe ecran


toate numerele de forma abba.
Structuri logice – programarea structurată
Trecerea din structura repetitivă cu număr cunoscut de pași în

repetitivă cu număr necunoscut de pași cu test inițial.

Cu număr cunoscut de pași Test inițial

Pentru ​contor​←​vi, vf, [pas] contor​←​vi


executa
Cat timp​ ​contor<=vf​ ​executa
Instructiuni
Instructiuni
Sfarsit pentru
contor​←​ contor+pas

Sfarsit cat timp

Trecerea din structura repetitivă cu număr cunoscut de pași în

repetitivă cu număr necunoscut de pași cu test final.

Cu număr cunoscut de pași Test final

Pentru ​contor​←​vi, vf, [pas] contor​←​vi


executa
Daca​ ​contor<=vf​ ​atunci
Instructiuni
Executa
Sfarsit pentru
Instructiuni

contor​←​ contor+pas

Cat timp​ ​contor<=vf

Sfarsita daca
Structuri logice – programarea structurată

Pentru ​contor​←​vi, vf, [pas] contor​←​vi


executa
Daca​ ​contor<=vf​ ​atunci
Instructiuni
Repeta
Sfarsit pentru
Instructiuni

contor​←​ contor+pas

Pana cand​ ​contor​ >​vf


Sfarsita daca

Obs.

Trecerea din structuri cu număr ​necunoscut ​de pași în structura cu număr


cunoscut​ de pași nu este întotdeauna posibilă, ci numai dacă repetările
sunt dictate de modificarea constantă a unui contor.

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