0% au considerat acest document util (0 voturi)
28 vizualizări95 pagini

S10 Operatori & Structuri

Documentul descrie operatorii utilizați în algoritmi, inclusiv operatorii de atribuire, matematici, relaționali, logici și de concatenare. Fiecare tip de operator are un set specific de funcții și exemple, cum ar fi adunarea, scăderea, compararea valorilor și manipularea șirurilor de caractere. De asemenea, se discută despre utilizarea operatorului de atribuire pentru inițializarea și calculul iterativ al variabilelor în cadrul unui algoritm.

Încărcat de

Elev07 test
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
28 vizualizări95 pagini

S10 Operatori & Structuri

Documentul descrie operatorii utilizați în algoritmi, inclusiv operatorii de atribuire, matematici, relaționali, logici și de concatenare. Fiecare tip de operator are un set specific de funcții și exemple, cum ar fi adunarea, scăderea, compararea valorilor și manipularea șirurilor de caractere. De asemenea, se discută despre utilizarea operatorului de atribuire pentru inițializarea și calculul iterativ al variabilelor în cadrul unui algoritm.

Încărcat de

Elev07 test
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd

Operatorii

Operatorii sunt caractere speciale (*, /, >, etc.) sau


cuvinte cheie (mod, and etc.) prin intermediul cărora
se reprezintă operațiile care se efectuează în cadrul
unui algoritm. Fiecare limbaj de programare are
implementat propriul set de operatori. În acest
capitol vor fi prezentați operatorii care se folosesc în
cadrul unui algoritm.
Asupra operanzilor dintr-o expresie puteți aplica
următorii operatori:
- operatorul de atribuire
- operatorii matema�ci
- operatorul de concatenare a șirurilor de caractere
- operatorii relaționali
- operatorii logici
Operatorii pot fi aplicați numai pe anumite �puri de
operanzi, producând rezultate de un anumit �p.

Operatorii matema�ci
Se aplică pe date de �p numeric și furnizează un
rezultat de �p numeric.
Operator Semnificație Exemplu
+(adunare) Aduna matema�c cei doi 5+2=7
operanzi.
- (scădere) Scade al doilea operand din 7-3=4
primul operand.
/ Împarte primul operand la 7/2=3.5
(împărțire al doilea operand.
reală)
* înmultește cei doi operanzi. 2*4=8
(înmulțire)
**|^ Ridică primul operand la 2**3=8
(ridicare la
puterea furnizată de cel de
putere) al doilea operand.
MOD Calculează restul împărțirii 19 MOD
(modulo) primului operand la al 4 =3
doilea operand.
DIV Calculează câtul împărțirii 19 DIV 4
(împărțire primului operand la al 19 =4
întreagă) div 4 = 4 doilea operand.
Operatorii relaționali (de comparație)
Se aplică pe operanzi de �p numeric sau de �p șir de
caractere și furnizează un rezultat de �p logic.
Operator Semnifica�e Exemplu
= (egalitate) Rezultatul este T dacă cei (5=5)=T
doi operanzi sunt egali. (5=7)=F
<> | # Rezultatul este T dacă cei (5<>5)=F
(diferit) doi operanzi sunt diferi� (5<>7)=T
<(mai mic) Rezultatul este T dacă (5<7)=T
primul operand este mai (7<5)=F
mic decât al doilea operand.
> (mai Rezultatul este T dacă (7>5)=T
mare) primul operand este mai (5>7)=F
mare decât al doilea
operand.
<= (mai mic Rezultatul este T dacă (5<=5)=T
sau egal) primul operand este mai (7<=5)=F
mic sau cel mult egal fată de
al doilea operand.
>= (mai Rezultatul este T dacă (7>=5)=T
mare sau primul operand este mai (5>=7)=F
egal) mare sau cel mult egal față
de al doilea operand.
Un operator relațional aplicat pe două șiruri de
caractere realizează compararea celor două șiruri de
caractere. Compararea a două caractere este posibilă
prin compararea numerică a codurilor ASCII ale celor
două caractere. As�el, codul ASCII al caracterului d este
100, iar al caracterului D este 68. Deci, caracterul d este
mai mare decât caracterul D.
Convenție de notare: Semnul | plasat între două
elemente are semnificația conjuncției sau, adică
pentru operația de ridicare la putere pot fi folosite
simbolurile ** sau simbolul ^
Pentru compararea celor două caractere se va scrie
"d">"D", iar în urma executării operației de comparare
se va produce rezultatul logic T, deoarece operația de
comparare se execută între cele două valori numerice
(100>68).
Compararea a două șiruri de caractere se face prin
compararea codului ASCII al caracterelor din aceeași
poziție a fiecărui șir. Dacă cele două șiruri nu au aceeași
lungime, șirul cu lungime mai mică este completat la
sfârșit, până la egalarea lungimilor, cu caracterul care
are codul ASCII 0. Operația de comparare începe cu
prima poziție din șir și con�nuă cu următoarele poziții,
numai dacă pozițiile anterioare sunt iden�ce în ambele
șiruri.
De exemplu, șirul de caractere Idee este mai mare
decât șirul de caractere IDEE, deoarece, în poziția a
doua, caracterele din cele două șiruri nu mai sunt
iden�ce, iar codul ASCII al caracterului d este mai mare
decât codul ASCII al caracterului D. Operația de
comparare se oprește după cel de al doilea caracter și
nu mai contează codurile caracterelor din pozițiile
următoare. Pentru compararea celor două șiruri de
caractere se va scrie "Idee">"IDEE", iar în urma
executării operației de comparare se va produce
rezultatul logic T.
Operatorul de concatenare
Se aplică pe operanzi de �p șir de caractere și
furnizează un rezultat de �p șir de
caractere.

Operator Semnificație Exemplu

+ Reunește două șiruri de "Buna


(concatenare) caractere într-un singur "+"ziua"=
șir de caractere. "Buna ziua"
Operatorii logici
Se aplică numai pe operanzi de �p logic și furnizează un
rezultat de �p logic.
Operator Semnificație a NOT a
NOT Schimbă valoarea unui T F
(negare) operand cu complementul
său: T cu F și F cu T. F T
Operator Semnificație a b a AND b a OR b
AND ("și" Rezultatul este T dacă T T T T
logic) ambii operanzi au
valoarea T, al�el este F. T F F T
OR ("sau" Rezultatul este T dacă F T F T
logic) cel puțin unul dintre
operanzi are valoarea F F F F
T, al�el este F.
Operatorii logici sunt foarte u�li atunci când construiți
expresii logice care descriu anumite condiții ce vor fi
testate, urmând ca, în funcție de rezultat, să se execute
anumite operații.
Dacă expresiile logice sunt prea complexe, le puteți
simplifica folosind următoarele relațiile lui De Morgan:
NOT (a AND b) = (NOT a) OR (NOT b)
NOT (a OR b) = (NOT a) AND (NOT b)

Operatorul de atribuire
Prin acest operator puteți atribui o anumită valoare
unei date:
nume ← expresie
Operația de atribuire se desfășoară în două etape: mai
întâi se evaluează expresia, după care valoarea
obținută se atribuie datei iden�ficate prin nume.
Rezultatul evaluării expresiei trebuie să fie de același
�p cu data iden�ficată prin nume.

Exemplu Semnificație
n ←100 Datei de �p numeric n i se
atribuie valoarea 100.
Exemplu Semnificație
n←n+200 Se evaluează expresia
adunându-se 200 la
valoarea datei n. Valoarea
obținută în urma evaluării
este 300 și se atribuie ca
valoare nouă datei n.
text←"șir de Datei de �p șir de caractere
caractere" text i se atribuie valoarea
"șir de caractere".
Prin operația de atribuire, în zona de memorie alocată
datei se scrie noua valoare a datei, vechea valoare
pierzându-se.

Dacă vreți să păstrați și vechea valoare, va trebui ca,


înainte de operația de atribuire, să o salvați prin
copiere într-o altă variabilă de memorie (dată variabilă)
de același �p. Copierea se face și ea tot printr-o
operație de atribuire.
Observație: Operația de atribuire se mai folosește, în
cadrul unui algoritm, pentru executarea următoarelor
operații:
✓ inițializarea valorii unor variabile de memorie
✓ calculul itera�v al valorii unor variabile de memorie.
Calculul itera�v al valorii unei variabile de memorie
înseamnă să-i atribuiți acelei variabile de memorie
valoarea unei expresii în care unul dintre operanzi este
chiar numele acelei variabile de memorie.
Tipurile de variabile de memorie cel mai des folosite
(din punct de vedere al informației pe care o
reprezintă) sunt:
✓ Contorul sau numărătorul. Este o variabilă de
memorie care se folosește pentru a număra anumite
cazuri care pot să apară. Înainte de a începe
numărătoarea, contorul se ini�alizează cu valoarea 0
(nu a fost evidențiat încă nici un caz). În �mpul
procesului de prelucrare, atunci când se întâlnește un
caz, valoarea contorului se calculează itera�v prin
incrementare cu 1 (se crește valoarea contorului cu 1).
De exemplu, dacă folosim variabila de memorie k
pentru contor, inițializarea sa se va face cu operația de
atribuire: k←0, iar calculul itera�v, cu operația de
atribuire: k ← k+1.
✓ Suma. Este o variabilă de memorie care se folosește
pentru calculul itera�v al unei sume (adunarea, la
valoarea anterioară, a unei noi valori). Înainte de a
începe calcularea ei, suma se ini�alizează cu valoarea 0
(elementul neutru pentru operația de adunare, și
înseamnă că nu a fost adunată nici o valoare la sumă).
De exemplu, dacă folosim variabila de memorie s
pentru a calcula suma mai multor valori ci�te de la
tastatură prin intermediul unei variabile de memorie a,
inițializarea sumei se face cu operața de atribuire s←0,
iar calculul itera�v cu operația de atribuire: s←s+a.
✓ Produsul. Este o variabilă de memorie care se
folosește pentru calculul itera�v al unui produs
(înmulțirea valorii anterioare cu o nouă valoare).
Înainte de a începe calcularea lui, produsul se
ini�alizează cu valoarea 1 (elementul neutru pentru
operația de înmulțire, și înseamnă că nu a fost
înmulțită nici o valoare cu produsul). De exemplu, dacă
folosim variabila de memorie p pentru a calcula
produsul mai multor valori ci�te de la tastatură prin
intermediul unei variabile de memorie a, inițializarea
produsului se face cu operația de atribuire p ← 1, iar
calculul itera�v cu operația de atribuire: p← p*a.
Studiu de caz
Scop. Exemplificarea modului în care folosiți operatorul
de atribuire pentru inițializare și calcul itera�v.
Enunțul problemei: Se introduc n numere întregi de la
tastatură. Să se numere câte sunt pare și să se calculeze
suma și produsul lor.
În urma analizei problemei se obține specificația
programului:
✓ Funcția programului. Se numără și se calculează
suma și produsul numerelor pare dintr-o mulțime de n
numere întregi.
Din enunțul problemei rezultă că în procesul de calcul
se folosesc numai numere pare. Pentru a evidenția
acest caz (apariția unui număr par în mulțimea de
numere ci�te), se folosește proprietatea numerelor
pare: restul împărțirii unui număr par la 2 este 0, care
se exprimă prin expresia, cu rezultat de �p logic,
(a MOD 2)=0. Dacă această expresie are valoarea T,
numărul este par.
Informațiile de intrare sunt numărul de elemente ale
mulțimii de numere întregi și numerele ci�te.
Reprezentarea internă a informației se va face prin
datele de intrare: n pentru numărul de elemente ale
mulțimii și a pentru numărul ci�t curent.
✓ Pentru operațiile executate în cadrul algoritmului, se
va folosi data intermediară, prin care se numără câte
numere s-au introdus de la tastatură la un moment dat.
Data intermediară i este necesară pentru a afla când se
termina procesul de ci�re a celor n numere, având
funcția unui contor. Valoarea inițială a contorului i
(înainte de a se ci� primul număr) este 0.
✔ Informațiile de ieșire vor fi numărul de valori pare,
suma și produsul lor. Reprezentarea lor internă se va
face prin datele de ieșire: k pentru numărul de valori
(contorul numerelor pare), s pentru suma lor și p
pentru produsul lor. Valoarea inițială (înainte de a se
ci� primul număr) a contorului k și a sumei s este 0, iar
a produsului peste 1.
Algoritmul de rezolvare a problemei va fi:
Pasul 1. Început.
Pasul 2. Comunică valoarea pentru n.
Pasul 3. Atribuie valoarea inițială pentru contorul
numerelor ci�te, i: i← 0;
Pasul 4. Atribuie valoarea inițială pentru contorul
numerelor pare, k: k < 0;
Pasul 5. Atribuie valoarea inițială pentru suma
numerelor pare, s: s← 0;
Pasul 6. Atribuie valoarea inițială pentru produsul
numerelor pare, p: p← 1;
Pasul 7. Compară i<=n. Dacă este adevărat, execută
Pasul 8; al�el, execută Pasul 14.
Pasul 8. Comunică valoarea pentru a.
Pasul 9. Compară (a MOD 2) = 0. Dacă este adevărat,
execută Pasul 10; al�el, execută Pasul 13.
Pasul 10. Actualizează valoarea pentru k: k←k+1;
Pasul 11. Actualizează valoarea pentru s: s←s+a;
Pasul 12. Actualizează valoarea pentru p: p← p*a;
Pasul 13. Actualizează valoarea pentru i: i←i+1. Mergi
la Pasul 7.
Pasul 14. Comunică valorile pentru k, s, p.
Pasul 15. Terminat.
Expresiile
Expresia este o combinație validă de operatori și
operanzi.
Operanzii pot fi nume de date, constante de �p
numeric sau șir de caractere și funcții care, în
urma evaluării, furnizează un singur rezultat. În
funcție de �pul operanzilor și al operatorilor,
rezultatul expresiei poate fi de �p numeric, șir de
caractere sau logic.
Într-o expresie, operatorii se folosesc într-un anumit
scop:
✓ operatorii matema�ci, pentru efectuarea calculelor,
✓ operatorii relaționali și logici, pentru efectuarea de
comparații în vederea luării unor decizii în cadrul
algoritmului;
✓ operatorul de atribuire, pentru manipularea datelor.
Expresia este validă numai dacă operatorii care leagă
operanzii corespund �pului operanzilor pe care îi leagă.
De exemplu:
✓ Expresia E←22+75 este o expresie validă deoarece
operatorul matema�c + leagă doi operanzi exprimați
prin două constante de �p numeric.
✓ Expresia E←"Ana"+"-Maria" este o expresie validă,
deoarece operatorul de concatenare + leagă doi
operanzi exprimați prin două constante de �p șir de
caractere.
✔ Expresia E←22+"ani" nu este o expresie validă,
deoarece operatorul + leagă doi operanzi exprimați
prin două constante de �puri diferite: numeric și,
respec�v, șir de caractere. El nu poate fi interpretat
nici ca operator matema�c, nici ca operator de
concatenare.
Dacă, de exemplu, într-o expresie trebuie să se
calculeze radicalul dintr-o dată de �p numeric, nu se
poate folosi nici un operator matema�c. În acest caz,
limbajul de programare în care se lucrează pune la
dispoziție o funcție.
Funcția este o prelucrare predefinită de autorii
limbajului de programare, care se poate folosi in cadrul
unei expresii la fel ca un operand, deoarece ea este de
fapt un program care, în urma execuției, furnizează o
valoare chiar prin numele ei. Atunci când se evaluează
expresia, funcția este înlocuită cu valoarea returnată în
urma executării ei. Funcția se iden�fică printr-un
nume, iar pentru apelarea ei se scrie numele funcției
urmat de o listă de parametri precizați între paranteze
rotunde. Parametrii sunt valorile cu care se execută
funcția la acel apel.
De exemplu, funcția sin(x) returnează valoarea funcției
trigonometrice sinus pentru numărul x. Numele
funcției este sin iar parametrul x este de �p numeric.
Dacă se evaluează funcția sin(x), iar x are valoarea 2.5,
in urma execuției programului asociat, funcția va
furniza valoarea 0.598.
Pentru a evalua o expresie, calculatorul va executa într-
o anumită ordine operațiile pe care le-ați scris.
Această ordine este dată de:
✓ Precedența operatorilor. Este ordinea în care se
execută operațiile definite de operatori. Ea determină
nivelul de prioritate al operatorilor.
✓ Asocia�vitatea operatorilor. Este ordinea în care se
evaluează operatorii cu același nivel de prioritate.
Fiecare limbaj de programare are implementată o
tabelă de precedență (tabela nivelurilor de prioritate),
și pentru fiecare nivel de prioritate o anumită
asocia�vitate. Într-un algoritm vom folosi următoarea
tabelă de precedență:
1. Se evaluează funcțiile.
2. Se evaluează operatorii matema�ci. Operatorii
matema�ci au niveluri de prioritate diferite.
Operatorul ** are nivel de prioritate 1, fiind primul
care se evaluează, operatorii *, /, DIV și MOD au
nivelul de prioritate 2, iar operatorii + și - au nivelul
de prioritate 3.
3. Se evaluează operatorii de concatenare.
4. Se evaluează operatorii relaționali. Toți operatorii
relaționali au același nivel de prioritate.
5. Se evaluează operatorii logici. Ordinea de prioritate
a operatorilor logici este not, and și or, primul fiind cel
mai prioritar.
Asocia�vitatea operatorilor este de la stânga la
dreapta, adică toți operatorii care au același nivel de
prioritate se evaluează în ordine, de la stânga la
dreapta.

Precondițiile unei expresii.


Comisia definește cum trebuie să prelucreze
calculatorul anumite valori ale datelor.
De fiecare dată când calculatorul evaluează expresia
sunt prelucrate valorile curente ale datelor variabile
care apar ca operanzi în cadrul expresiei. În unele
cazuri trebuie stabilite anumite condiții pentru valorile
acestor date. Pentru a se putea evalua expresia, adică
trebuie stabilite precondițiile expresiei.
Precondițiile expresiei reprezintă un ansamblu de
restricții și constrângeri impuse datelor care apar în
expresie ca operanzi.
Aceasta înseamnă că dacă notăm precondiția cu P și
expresia cu E atunci.
Dacă precondiția P este adevărată, are valoarea True.
Expresia poate fi calculată cu acele valori ale datelor.
Dacă precondiția P este falsă, are valoarea false,
expresia nu poate fi calculată cu acele valori ale datelor,
deoarece fie se obține o valoare eronată, fie se poate
provoca o eroare de execuție a programului.
Precondițiile cele mai des întâlnite sunt.
 Constrângere operației de împărțire. În algoritm
puteți folosi trei operatori pentru împărțire: / DIV
MOD Pentru toate aceste operații, există precondiția
ca împărțitorul să fie diferit de zero. De exemplu,
pentru expresia a/(c+d), precondiția este c+d <>0
 Constrângerile argumentului unei funcții.
Argumentele unor funcții trebuie sã îndeplineascã o
anumită condiție. De exemplu, funcția sqrt(x) nu se
poate aplica pe o valoare nega�vă, nu se poate
extrage radicalul pătrat dintr-o valoare nega�vă.
 Constrângere pentru ca formula să fie validă.
Formula folosită pentru a calcula o valoare poate fi
validă numai pentru anumite valori ale datelor care
sunt folosite ca operanzi. De exemplu, operatorii DIV
și MOD se pot aplica numai pe date de �p întreg.
Reprezentarea algoritmilor. Algoritmii
Algoritmul este un concept abstract. Reprezentarea
algoritmului înseamnă implementarea fizică a
algoritmului. Chiar dacă algoritmul este unic, el poate
avea mai multe reprezentări fizice. De exemplu,
algoritmul de rezolvare a ecuației de gradul întâi poate
fi reprezentat prin calculele efectuate pe hâr�e de
fiecare dată când se rezolvă manual o ecuație de gradul
întâi, prin circuite electronice, dacă s-ar construi o
mașină electronică numai pentru rezolvarea ecuației de
gradul întâi, sau prin instrucțiunile unui program care
descriu pentru calculator algoritmul de rezolvare.
Când construiți un algoritm trebuie să țineți cont de
următoarele reguli:
✓ să definiți exact datele asupra cărora lucrează
algoritmul (datele de intrare, datele de ieșire și
datele intermediare);
✓ să definiți exact opera�ile care se vor executa cu
datele asupra cărora lucrează algoritmul;
✓ să definiți exact noțiunea de structură de control
a algoritmului;
✓ să definiți exact succesiunea de structuri care
formează algoritmul.
Algoritmul prin care se descrie o problemă care
trebuie să fie rezolvată de calculator nu trebuie să fie
ambiguu deoarece, în cazul exprimărilor neclare,
calculatorul nu poate să opteze singur pentru o
anumită posibilitate. Pentru a evita ambiguitatea
descrierii unui algoritm printr-un limbaj natural
(limba în care vorbim), se poate folosi pentru
reprezentarea lui un limbaj ar�ficial numit
pseudocod, apropiat de limbajul de programare, dar
care este puțin formalizat și nu este constrâns de
regulile de sintaxă ale limbajului de programare
(de exemplu, în pseudocod se poate folosi
exprimarea dacă...atunci...al�el în limba română sau
formularea if...then...else în limba engleză - care sunt
foarte aproapiate de limbajul natural, dar care
permit descrierea unor operații specifice din
algoritm).
Pseudocodul (codul fals) este considerat un cod fals
deoarece nu poate fi folosit pentru a exprima
instrucțiunile care se dau calculatorului pentru a
rezolva problema descrisă de algoritm (nu poate fi
folosit ca limbaj de programare).
El folosește expresii, din limbajul natural, în care
exprimarea acțiunilor care se execută se face prin
propoziții care se termină prin simbolul punct și
virgulă (;) În propoziții se folosesc cuvinte cheie,
pentru descrierea structurilor de control și a
operațiilor de comunicare. O propoziție care
reprezintă un pas de comunicare sau de acțiune
începe obligatoriu cu un verb.
Pseudocodul permite și descrierea datelor asupra
cărora acționează algoritmul. Pentru precizarea
�pului de dată se folosesc cuvinte cheie.
De exemplu, se pot folosi următoarele cuvinte cheie:
întreg - �pul numeric întreg; real - �pul numeric real;
logic - �pul logic; caracter - �pul caracter; și șir - �pul
șir caracter. Cuvântul cheie care precizează �pul este
urmat de o listă prin care se enumerǎ iden�ficatorii
datelor care corespund acelui �p.

În cazul pasului de comunicare, verbul este citește


(read) pentru o operație de intrare și scrie (write)
pentru o operație de ieșire. Verbul este urmat de lista
datelor care se comunică.
Lista conține date variabile reprezentate prin
iden�ficatorii lor. În cazul unei operații de scriere lista
poate conține și date constante reprezentate prin
valoare (de exemplu, un mesaj reprezentat printr-o
constantă de �p șir de caractere). Elementele listei se
separă prin virgulă.
Cuvintele cheie pot fi în limba română (pseudocodul
în limba română) sau în limba engleză (pseudocodul
în limba engleză). Pseudocodul în limba engleză este
mai aproape de cuvintele cheie folosite în
instrucțiunile unui limbaj de programare.
Din această cauză vor fi prezentate ambele versiuni
de pseudocod, urmând ca în aplicații să folosim
numai pseudocodul în limba română.
Pentru a delimita secvența de descriere a datelor de
secvența de descriere a pașilor algoritmului, pașii
algoritmului vor fi încadrați de cuvintele cheie
început... sfârșit. (begin... end.).
De exemplu, pseudocodul pentru descrierea
algoritmului de rezolvare a ecuației de gradul întâi
este:
real a,b, z;
început
citește a,b;
┌Dacă a=0 atunci
│┌Dacă b=0 atunci
││ Scrie "Ecuația are o infinitate de soluții";
││ al�el
││ scrie "Ecuația nu are soluții";
│└─────■sfârșit_dacă;
│ al�el
│ z←b/a;
│ scrie "Soluția ecuației este ", z;
└─────■sfârșit_dacă;
sfârșit.
Observații:
1. În pseudocod, operația de comparație a fost
exprimată prin cuvintele cheie Dacă și
sfârșit_dacă. Aceste două cuvinte formează o
structură de control, adică o en�tate din cadrul
algoritmului prin care se descrie modul în care
pașii algoritmului își predau controlul unul altuia.
2. În pseudocod, pentru orice structură de control se
folosește o pereche de cuvinte cheie: primul cuvânt
precizează începutul structurii (cuvântul Dacă), iar al
doilea cuvânt precizează sfârșitul structurii (cuvântul
sfârșit_dacă).
3. Ca să fiți siguri că ați scris corect structurile de
control, verificați ca numărul de structuri deschise să
fie egal cu numărul de structuri închise (de exemplu,
numărul de cuvinte dacă să fie egal cu numărul de
cuvinte sfârșit_dacă).
4. Pentru a urmări mai ușor dacă structurile sunt
închise corect, scrieți indentat corpul structurii față
de cuvintele cheie cu care începeți și cu care
termina� structura. Scrieți la același nivel de
indentare propozițiile care se execută secvențial. De
exemplu, în structura de control descrisă în
pseudocod prin cuvintele cheie Dacă... sfârșit_dacă,
scrieți față de cuvintele cheie atunci și al�el pașii care
se execută pentru cele două valori ale condiției
testate.
Un exemplu de algoritm matema�c este rezolvarea
ecuației de gradul întâi:
a x z+b=0
unde a și b sunt coeficienții ecuației și pot lua orice
valori din domeniul numerelor reale, iar z reprezintă
un număr care se calculează și care poate lua și el
orice valoare reală, as�el încât să fie îndeplinită
relația definită prin ecuație.
Algoritmul de rezolvare a ecuației va prezenta un set
unic de operații, prin care se calculează valoarea lui
z, oricare ar fi valorile pentru a și b:
Pasul 1. Început.
Pasul 2. Comunică valorile pentru a și b.
Pasul 3. Compară a = 0. Dacă este adevărat, execută
Pasul 4; al�el, execută Pasul 7.
Pasul 4. Comparǎ b = 0. Dacă este adevărat, execută
Pasul 5; al�el, execută Pasul 6.
Pasul 5. Comunică mesajul "Ecuația are o infinitate
de soluții". Mergi la Pasul 9.
Pasul 6. Comunică mesajul "Ecuația nu are soluții".
Mergi la Pasul 9.
Pasul 7. Calculează z = -b/a.
Pasul 8. Comunică valoarea lui z.
Pasul 9. Terminat.
Numărul de pași este finit (9 pași). Toți pașii
reprezintă acțiuni care se pot executa: compară,
calculează, comunică. O dată definit acest algoritm,
pașii lui se vor exe- cuta pentru orice valori ale lui a
și b, deci algoritmul descrie rezolvarea unei pro-
bleme generale.
La fiecare executare a algoritmului care descrie o
problemă generală va fi tratat un caz par�cular, adică
se rezolvă ecuația de gradul întâi pentru valori
precizate ale lui a și b.
Algoritmii au următoarele principale proprietăți:
✓ Claritatea. Orice algoritm trebuie să fie precis
definit, să prezinte clar toate etapele care trebuie
parcurse până la obținerea soluției, fără să formuleze
nimic ambiguu.
✓ Finitatea. Algoritmul trebuie să fie format dintr-un
număr finit de pași, prin exe- cutarea cărora să se
ajungă la rezolvarea problemei și obținerea
rezultatelor.
✓ Succesiunea determinată a pașilor. Pașii care
compun algoritmul trebuie exe- cutați într-o ordine
bine determinată. De obicei, ei se execută în ordine
secvenți- ală (ordinea în care au fost scriși). În cazul
în care apare necesitatea schimbării acestei ordini,
trebuie să se precizeze clar pasul care urmează să fie
executat.
✓ Universalitatea. Algoritmul trebuie să permită
rezolvarea unei clase de proble- me, care sunt de
același �p și care diferă între ele numai prin datele de
intrare. El trebuie să ofere posibilitatea de a rezolva
orice problemă din acea clasă de probleme.
✓Realizabilitatea. Pașii care compun algoritmul
trebuie să reprezinte operații care se pot executa cu
resursele disponibile.
✓Eficiența. Operațiile care compun algoritmul
trebuie alese as�el încât soluția problemei să fie
obținută după un număr minim de pași, cu precizia
prestabilită sau cu o precizie sa�sfăcătoare.
Principiile programării structurate
Algoritmul este format din pașii care urmează să se
execute și ordinea în care se vor executa pentru a
rezolva problema. Algoritmul pentru rezolvarea
ecuației de gradul întâi conține noua pași
(vezi algoritmul precedent), iar ordinea de executare
depinde de valoarea celor doi coeficienți a și b:
✓ Dacă a =0 și b =0, se execută în ordine pașii: 1, 2,
3, 4, 5, 9.
✓ Daca a =0 și b ≠0, se execută în ordine pașii: 1, 2,
3, 4, 6, 9.
✓ Dacă a ≠ 0, se execută în ordine pașii: 1, 2, 3, 7, 8,
9.
Structura de control a algoritmului definește ordinea
de executare a pașilor, adică ordinea în care un pas
predă controlul altui pas și prin care se determină
fluxul controlului.
În cadrul algoritmilor pot fi folosite trei �puri de
structuri de control:
- structura liniară
- structura alterna�vă
- structura repe��vă

Structura liniară
Structura liniară sau secvențială este structura în
care pașii se execută în ordinea în care au fost scriși:
Pasul 1, Pasul 2,..., Pasul i, Pasul i+1,..., Pasul n-1,
Pasul n.
Fiecare pas predă controlul pasului următor (Pasul i
predă controlul Pasului i+1). Un pas al structurii
secvențiale se execută numai dacă au fost executați
toți pașii care îl preced. Structura secvențială nu
folosește decât pași de �p acțiune și comunicare
(pentru datele de intrare și datele de ieșire).

Exemplu
Se introduc de la tastatură trei numere a, b, c. Să se
calculeze media aritme�că dintre a și b și media
aritme�că dintre b și c.
Pentru calcularea celor două medii se vor folosi două
variabile de memorie, m1 și m2, și se vor executa, în
ordine, următoarele acțiuni:

Pasul 1. Început
Pasul 2. Comunică valorile pentru a, b și c
Pasul 3. Calculează m1 ← (a+b)/2
Pasul 4. Calculează m2 ← (b+c)/2
Pasul 5. Comunică valorile lui m1 și m2
Pasul 6. Terminat
Ordinea în care se execută cei șase pași este ordinea
prezentată: 1, 2, 3, 4, 5, 6. oricare ar fi valorile pentru
a, b, c. Pasul 1 predă controlul Pasului 2, Pasul 2 predă
controlul Pasului 3, Pasul 3 predă controlul Pasului 4,
Pasul 4 predă controlul Pasului 5 și Pasul 5 predă
controlul Pasului 6.
Algoritmul a fost transpus în pseudocod.

întreg a,b,c;
real m1, m2;
început
citește a, b, c;
m1← (a+b)/2;
m2← (b+c)/2;
scrie m1, m2;
sfârșit.
Probleme care se pot rezolva cu ajutorul structurii
secvențiale:
1. Se citesc trei numere întregi, de la tastatură. Să se
calculeze media aritme�că
2. Se citesc dimensiunile pentru laturile unui triunghi.
Să se calculeze aria și perimetrul triunghiului.
Structura alterna�vă
Prin această structură, se face selectarea între două
sau mai multe acțiuni, în funcție de anumite condiții.
Există două �puri de structuri alterna�ve:
✓ structura alterna�vă simplă
✓ structura alterna�vă generalizată
Structura alterna�vă simplă
La acest �p de structură se face selectarea între două
acțiuni, în funcție de îndeplinirea sau neîndeplinirea
unei condiții. De exemplu:
✓ Dacă anul este bisect, atunci împarte totalul la 366;
al�el, împarte la 365. Condiția este �pul anului:
bisect sau nu.
✓ Dacă vânzările au scăzut, reduceți prețul cu 5%.
Condiția este scăderea vânzărilor.
✓ Dacă unghiul are 90°, este un unghi drept. Condiția
este valoarea unghiului.
✓ Dacă triunghiul are toate laturile egale, este
echilateral. Condiția este relația de egalitate între
laturile triunghiului.
✓ Dacă patrulaterul are toate laturile egale și un unghi
de 90°, este un pătrat. Condiția este relația de
egalitate între laturile patrulaterului și valoarea unui
unghi al patrulaterului.
✓ Dacă ai sub 18 ani, atunci eș� minor; sau dacă ai
peste 18 ani, atunci eș� major. Condiția este vârsta
de 18 ani.
✓ Dacă vei fi în oraș la ora 13, luăm prânzul împreună.
Condiția este prezența în oraș la ora 13.
✓ Dacă nu ai 10.000.000 de lei, împrumută-te la bancă.
Condiția este suma de 10.000.000 lei.
✓ Dacă valoarea polinomului este 0 pentru x=2,
polinomul se divide prin x-2. Condiția este valoarea
0 a polinomului pentru x=2.
Exemplu
Se introduce de la tastatură un număr n. Să se calculeze
inversul acestui număr, inv, definit as�el:
inv=1/n pentru n≠0
inv=0 pentru n=0
Al�el spus: dacă n este diferit de 0, inversul are
valoarea 1/n; al�el, are valoarea 0.

Pentru calculul inversului se vor executa, în ordine,


următoarele acțiuni:
Pasul 1. Început
Pasul 2. Comunică valoarea pentru n
Pasul 3. Dacă n<>0, atunci execută Pasul 4, al�el
execută Pasul 5
Pasul 4. Calculează inv← 1/n
Pasul 5. Calculează inv ← 0
Pasul 6. Comunică valoarea lui inv
Pasul 7. Terminat

Executarea uneia dintre cele două acțiuni posibile


depinde de condiția precizată printr-o expresie logică.
Dacă expresia logică are valoarea "adevărat", se
execută acțiune 1, iar dacă expresia logică are valoarea
"fals", se execută acțiune 2. Cele două acțiuni pot fi
descrise printr-un singur pas sau prin mai mulți pași.
Observați că acest �p de structură poate fi descris prin
raționamentul Dacă... atunci... al�el... sfârșit_dacă (if...
then... else... endif) pe care îl putem folosi in
pseudocod, pentru descrierea structurii.
Dacă condiție if condiție
atunci then
acțiune 1; acțiune 1;
al�el else
acțiune 2; acțiune 2;
sfârșit_dacă; endif;
Cuvântul Dacă (if) marchează începutul structurii, iar
cuvântul sfârșit_dacă (endif) sfârșitul structurii.
Cuvintele Dacă (if) și atunci (then) delimitează expresia
logică ce se evaluează, cuvântul atunci (then) marchează
începutul secvenței de pași care descriu acțiunea care se
va executa dacă expresia logică are valoarea adevărat.
Cuvântul altfel (else) marchează începutul secvenței
de pași care descriu acțiunea care se va executa dacă
expresia logică are valoarea fals.
Observați că se execută secvențial Pasul 1, Pasul 2,
Pasul 3, după care ordinea secvențială este
abandonată și se execută Pasul 4 sau Pasul 5, în funcție
de valoarea expresiei logice n<>0, după care se reia
ordinea secvențială, executându-se Pasul 6 și Pasul 7.

Exemplul a fost transpus în pseudocod.


întreg n;
real inv;
început
citește n;
┌dacă n<>0
│ atunci
│ inv←1/n;
│ al�el
│ inv←0;
└──■sfârșit_dacă;
scrie inv;
sfârșit.
Un caz par�cular de structură alterna�vă este structura
alterna�vă cu o ramură vidă, în care acțiune 2 nu
conține nici un pas. Deoarece pentru valoarea fals a
expresiei logice nu se execută nici o acțiune, din
pseudocod va fi eliminat cuvântul al�el (else) care
marchează începutul secvenței de pași ce descriu
acțiunea care se va executa dacă expresia logică are
valoarea fals.
Exemplu
Se introduce de la tastatură un număr n. Să se
înlocuiască numărul n cu modulul său, definit as�el:
modul(n)=n pentru n ≥ 0
modul(n)=-n pentru n < 0
Se vor executa, în ordine, următoarele acțiuni:
Pasul 1. Început
Pasul 2. Comunică valoarea pentru n
Pasul 3. Dacă n<0, atunci execută Pasul 4, al�el execută
Pasul 5
Pasul 4. Calculează n ← -n
Pasul 5. Comunică valoarea lui n
Pasul 6. Terminat
Exemplul a fost transpus în pseudocod.
întreg n;
început
citește n;
┌dacă n<0
│ atunci
│ n← -n;
└──■sfârșit_dacă;
scrie n;
sfârșit.
Observație: În cazul structurii alterna�ve cu o ramură
vidă, acțiunea se va executa pe ramura pentru care
condiția are valoarea adevărat. Dacă, după ce ați gândit
algoritmul, acțiunea se execută pe ramura pentru care
condiția are valoarea fals, îl veți corecta prin negarea
condiției.
Structura alterna�vă generalizată
La acest �p de structură, se face selectarea între mai
multe acțiuni, în funcție de o variabilă de memorie
numită selector, care poate lua mai multe valori, dintr-
o mulțime ordonată de elemente de același �p cu
selectorul. De exemplu:
✓ Dacă simbolul dintre doi operanzi este +, adună
operanzii, dacă este minus, scade din primul
operand al doilea operand, dacă este *, înmulțește
operanzii, iar dacă este /, împarte operanzii, iar dacă
este alt operand, expresia este eronată.
În acest caz selectorul este simbolul, iar mulțimea de
valori este formată din simbolurile: +, -, * și /
✓ Dacă este clasa a IX-a A, sunt 27 de elevi, dacă este
clasa a IX-a B, sunt 28 de elevi, iar dacă este clasa a
IX-a C, sunt 28 de elevi. În acest caz, selectorul este
numele clasei, iar mulțimea de valori este formată
din denumirerile de clase: a IX-a A, a IX-a B și a IX-a C.

Se introduc de la tastatură numerele întregi n, a, b și c.


Să se calculeze valoarea lui e, definit as�el:
e=(a+b)/c pentru n=1
e=(b+c)/a pentru n=2
e=(c+a)/b pentru n=3

Pentru calculul expresiei e se vor executa, în ordine,


următoarele acțiuni:

Pasul 1. Început
Pasul 2. Comunică valorile pentru n, a, b, c
Pasul 3. Dacă n=1, atunci execută Pasul 4, al�el execută
Pasul 5
Pasul 4. Calculează e ← (a+b)/c. Treci la Pasul 9
Pasul 5. Dacă n=2, atunci execută Pasul 6, al�el execută
Pasul 7
Pasul 6. Calculează e ← (b+c)/a. Treci la Pasul 9
Pasul 7. Dacă n=3, atunci execută Pasul 8, al�el execută
Pasul 9
Pasul 8. Calculează e ← (c+a)/b. Treci la Pasul 9
Pasul 9. Comunică valoarea lui e
Pasul 10. Terminat.
Executarea uneia dintre acțiunile posibile depinde de
valoarea selectorului. Dacă selectorul are valoarea v1,
se execută acțiune_1, dacă are valoarea v2, se execută
acțiune_2, ..., dacă are valoarea vn, se execută
acțiune_n; al�el, se execută acțiune_n+1. Fiecare
valoare a selectorului corespunde unui caz tratat,
căruia îi corespunde o acțiune care poate fi descrisă
printr-un singur pas sau prin mai mulți pași.
Observați că acest �p de structură poate fi descris prin
ra�onamentul în cazul... caz1... caz2... al�el...
sfârșit_în_cazul_că (in case... case1... case2... else...
endcase) pe care îl putem folosi în pseudocod, pentru
descrierea structurii.
în cazul că selector in case că selector
cazul v1: acțiune 1; case v1: acțiune 1;
cazul v2: acțiune 2; case v2: acțiune 2;
.............................. ..............................
cazul vi: acțiune i; case vi: acțiune i;
.............................. ..............................
cazul vn: acțiune n; case vn: acțiune n;
al�el acțiune n+1; else acțiune n+1;
sfârșit_în_caz_că; endcase;
Cuvintele în cazul că (in case) marchează începutul
structurii, iar cuvântul sfârșit_în_caz_că (endcase)
sfârșitul structurii. Cuvântul cazul (case) marchează
începutul secvenței de pași care descriu acțiunea care
se va executa pentru acel caz și cuvântul al�el (else)
marchează începutul secvenței de pași care descriu
acțiunea care se va executa dacă selectorul nu a avut
valoarea nici unui caz.
Observație: Structura alterna�vǎ generalizată
corespunde unor structuri alterna�ve simple
imbricate. O structură alterna�vă generalizată care are
n cazuri este echivalentă cu n structuri alterna�ve
simple imbricate în care condiția logică este dată de
valoarea selectorului pentru acel caz.

Exemplul a fost transpus în pseudocod.


întreg n, a,b,c;
real e;
început
citește n,a,b,c;
┌dacă n=1
│ atunci e ← (a+b)/c
│ al�el
│ ┌dacă n=2
│ │ atunci e ← (b+c)/a;
│ │ al�el ┌dacă n=3
│ │ │ atunci e ← (c+a)/b;
│ │ └──■sfârșit_dacă; m
│ └──■sfârșit dacă;
└──■sfârșit dacă;
scrie e;
sfârșit.
întreg n,a,b,c;
real e;
început
citește n,a,b,c;
┌ în cazul că n
│ caz 1: e← (a+b)/c;
│ caz 2: e← (b+c)/a;
│ caz 3: e ← (c+a)/b;
└──■sfârșit_în _caz_că;
scrie e;
sfârșit.
Probleme care se pot rezolva cu ajutorul structurii
alterna�ve:
1. Se citesc patru numere întregi de la tastatură: a, b, c
și d. Determinați care dintre produsele a x b și c x d
este mai mare.
2. Se citesc trei numere a, b și c. Să se numere câte sunt
pare.
3. Se citesc trei numere a, b și c. Să se verifice dacă ele
pot fi termenii unei progresii aritme�ce.
4. Se citesc trei numere a, b și c. Aflați dacă aceste
numere pot reprezenta laturile unui triunghi. În caz
afirma�v, calculați aria și afișați ce �p de triunghi este
(oarecare, isoscel, echilateral, dreptunghic sau
dreptunghic isoscel).
5. Se citește un număr întreg n care reprezintă un an
calendaris�c. Să se verifice dacă anul este bisect sau
nu (condiția ca un an să fie bisect este ca, dacă anul
nu este divizibil cu 100, să fie divizibil cu 4; al�el, să
fie divizibil cu 400).
6. Se citesc două intervale de �mp exprimate în ore,
minute și secunde (h1, m1 și s1, pentru primul
interval, și h2, m2 și s2, pentru al doilea interval). Să
se calculeze suma celor două intervale de �mp.
7. Se citesc trei numere reale. Să se calculeze minimul
și maximul modulelor lor.

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