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.