Sunteți pe pagina 1din 15

OR INFORMATICA

Sistemele de calcul datorită vitezei mari de prelucrare a datelor și


capacității de stocare ridicate pot fi foarte utile pentru rezolvarea
problemelor atât din activitatea cotidiană cât și din activitatea stiințifică și
tehnologică modernă.
Rezolvarea problemelor cu ajutorul calculatorului presupune
parcurgerea mai multor etape:
1) analiza problemei (cu stabilirea datelor de intrare/ieşire) şi
modelarea ei matematicã;
2) descrierea algoritmului de rezolvare cu ajutorul schemei logice
şi (sau) a pseudocodului;
3) scrierea programului într-un limbaj de programare evoluat;
4) compilarea programului;
5) asamblarea programului;
6) execuţia programului.
Etapele 1.-3. sunt etape realizate de programator, iar etapele 4.-6.
sunt realizate de către software sistem de calcul.

Algoritmi
Un algoritm (cuvântul are la origine o lucrare fundamentală în
domeniul aritmeticii a matematicianului persan Al-Khwarizmi) înseamnă în
matematică și informatică o metodă sau o procedură de calcul, alcătuită
din pașii elementari necesari pentru rezolvarea unei probleme sau
categorii de probleme.
Algoritmul este noțiunea fundamentală a informaticii. Totul este construit
în jurul algoritmilor chiar și reprezentarea datelor se efectuează după
algoritmi specializați.
Câteva exemple de algoritmi:
algoritmul de determinare al celui mai mare divizor comun a două
numere;
algoritmul de determinare a numerelor prime;
algoritmul de asamblare a unei mașini;

Proprietăți

Cele mai importante proprietăți ale unui algoritm sunt următoarele:


a) Eficiența - este proprietatea unui algoritm de a obține un rezultat după
un număr optim de pași.
b) Claritate – la fiecar pas operațiile efectuate să fie clar definite, fără
ambiguități și fără posibilitate de execuție arbitrară a unor operații;
c) Generalitate - este proprietatea unui algoritm de a rezolva o clasă sau
categorie de probleme, și nu doar o singură problemă particulară. Spre
exemplu, un algoritm care rezolvă doar ecuația x2 + 5x − 6 = 0 este

1
mai puțin general decât unul care rezolvă ecuația ax2 + bx + c = 0,
oricare ar fi valorile lui a,b,c.
d) Finititudine - algoritmul trebuie să furnizeze rezultatele într-un număr
finit (cât mai mic) de paşi;
e) Unicitate - etapele algoritmului trebuie să fie definite în mod unic.
f) Verificabilitatea - acea proprietate a algoritmilor care permite ca fiecare
pas să poată fi verificat într-un timp rezonabil de către om.

Clasificări
În funcție de modul de implementare, un algoritm poate fi:
recursiv – în execuția algoritmului un pas îl reprezintă apelul la sine
însuși
iterativ ( conține o structură liniară/mai multe structuri liniare și una
sau mai multe structuri repetitive)
serial sau paralel
determinist sau aleatoriu (probabilistic)
exact sau aproximativ
În funcție de modul de rezolvare , ei pot fi:
algoritmi backtracking
algoritmi 'divide et impera'
algoritmi de programare dinamică
algoritmi 'greedy'
algoritmi specializați (probabilistici, genetici, euristici ș.a.)

Reprezentarea algoritmilor

Pentru reprezentarea algoritmilor se pot utiliza mai multe metode:


schema logică;
pseudocodul (sau limbajul algoritmic);
limbajul de programare.
Primele două sunt independente de tehnica de calcul, nu respectă o
sintaxă rigidă şi sunt utile programatorului doar în faza de proiectare a
algoritmilor.
Algoritmul scris într-un limbaj de programare este singura
formă direct utilizabilă pe calculator, fiind un text codificat, pe
baza unor legi sintactice bine determinate.

Noțiuni despre algoritmi și programare structurată


Schema logică

Schema logică este o reprezentare grafică ce permite vizualizarea


înlănţuirii şi subordonării secvenţelor de operaţii. Schema logică foloseşte

2
simboluri grafice numite blocuri, care prin forma lor indică tipul operaţiei,
iar prin textul conţinut specifică semantica acesteia.
Schema logică conține blocuri terminale START/STOP care identifică
în mod unic începutul/ sfârșitul algoritmului.
blocul delimitator sau terminal (fig. 2.1.a) - defineşte începutul (fig.
b) sau sfârşitul (fig. c) unui algoritm, proceduri sau funcţii;

Start
Stop

a) b) c)

Blocuri delimitatoare.
Operaţiile de bază care apar într-un algoritm sunt următoarele:
operaţii de intrare/ieşire - datele de intrare se citesc, iar datele de
ieşire se afişează (se tipăresc);

blocul de citire/scriere - se mai numeşte şi bloc de intrare/ieşire şi


este utilizat pentru descrierea operaţiilor de citire, respectiv, scriere. De
exemplu, în fig. b, se citesc valorile variabilelor a şi b , iar în fig. c, se
scriu valorile variabilelor a şi b;

Citeşte Scrie
a, b a, b

a) b) c)
Blocuri de citire/scriere
operaţii de atribuire - unei variabile i se atribuie valoarea unei
expresii;
blocul de calcul - este utilizat pentru reprezentarea operaţiei de
atribuire . Efectul acestei operaţii constă în evaluarea expresiei e şi
atribuirea rezultatului obţinut variabilei v.
De exemplu, în cazul operaţiei din fig. b, se adună valorile variabilei a
cu valoarea variabilei b şi rezultatul se atribuie variabilei x. Efectul
operaţiei din fig. c constă în creşterea cu o unitate a valorii variabilei i;

v e x a+b i i+1

a) b) c)
Blocuri de calcul

3
operaţii de decizie - se determină valoarea de adevăr a unei expresii
logice şi, funcţie de rezultatul obţinut, se ramifică rezultatul
algoritmului.

blocul de decizie - are o intrare şi două ieşiri, câte una pentru


fiecare valoare de adevăr. Dacă în urma evaluării condiţiei rezultatul este
“fals“, se urmează calea “NU“. În caz contrar, se urmează calea “DA“.

DA NU NU
Condiţie Condiţie

DA

a) b)

Blocuri de decizie.
Un bloc special îl reprezintă blocul de apel procedură/funcție

blocul de procedură - reprezintă apelul unei proceduri P. Procedura


este o secvenţă de instrucţiuni descrisă printr-o schemă logică separată şi
care are înscris în blocul terminal de început numele procedurii şi
eventualii parametrii.

Blocul de procedură.

Programare structurată

Odată cu dezvoltarea informaticii a apărut şi noţiunea de


programare structurată. La baza acestui concept stă ideea
întocmirii algoritmilor folosind câteva structuri elementare, având
o singură intrare şi o singură ieşire.
În cazul programării structurate, problema de rezolvat se
descompune în subprobleme, a căror rezolvare duce la rezolvarea

4
problemei iniţiale. Algoritmul, în acest caz, apare ca o secvenţă liniară de
structuri elementare.
Structurile elementare sunt următoarele:
structura liniară - constă în execuţia necondiţionată a unei secvenţe
de instrucţiuni, un algoritm liniar fiind un algoritm în care etapele de calcul
se succed una după cealaltă;
structura alternativă - constă în ramificarea execuţiei algoritmului în
funcţie de valoarea de adevăr a unei condiţii evaluate, algoritmii ramificaţi
presupunând luarea unei anumite decizii în funcţie de care se continuă
execuţia pe ramuri distincte;
structura repetitivă - constă în execuţia repetată, de un număr finit
de ori, a unei secvenţe de instrucţiuni. Un algoritm repetitiv presupune
repetarea unor etape de calcul de un anumit număr de ori. Ansamblul
etapelor ce se repetă alcătuiesc o buclă. Dacă numărul de repetări este
cunoscut, bucla se numeşte cu număr cunoscut de paşi, iar dacă nu este
cunoscut, bucla se numeşte cu condiţie sau cu număr necunoscut de paşi.
Subproblemelor obţinute prin descompunerea unei probleme le
corespunde conceptul de subprogram.
Subprogramele pot fi tip funcţie sau tip procedură. Diferenţa dintre
funcţie şi procedură constă în faptul că funcţia transmite programului
apelant o singură valoare, în timp ce procedura poate să nu transmită
programului apelant nici o valoare, sau să transmită una sau mau multe
valori.
Referirea unui subprogram poartă denumirea de apel.
O noţiune de bază în programare o constituie noţiunea de variabilă. O
variabilă este caracterizată de patru elemente: nume, tip, valoare şi
adresă în memorie.
Numele unei variabile este format din unul sau mai multe caractere
(litere şi cifre, primul fiind literă), de exemplu: A, o ,min, X3.
Tipul indică mulţimea de valori posibile: întreg, real, şir de caractere,
boolean etc.
Un tip variabilă poate fi elementar sau structurat.
Tipurile structurate se obţin prin gruparea tipurilor elementare. Dintre
acestea amintim tabloul, în care variabilele au acelaşi nume şi tip,
deosebindu-se prin indici. Un tablou cu o singură dimensiune se numeşte
şir, iar un tablou cu două dimensiuni se numeşte matrice.
Adresa variabilei este adresa fizică din memoria calculatorului la care
se află valoarea variabilei. De obicei adresa este invizibilă pentru
programator.
Valoarea variabilei reprezintă valoarea efectivă pe care aceasta o are
la un moment dat. Valoarea unei variabile se poate modifica numai printr-
o instrucţiune de citire sau atribuire.

Structuri elementare

În schemele logice pot să apară următoarele structuri elementare:


a) structura liniară sau secvenţa - este o înşiruire de una sau mai
multe acţiuni (A, B, …) ce se execută secvenţial.

5
A

Structura liniară.
Acţiunile (A, B, …) pot fi blocuri: de calcul, de intrare-ieşire, de
procedură, sau combinaţii liniare ale acestora. Structura liniară se execută
necondiţionat.
b) structura alternativă sau decizia - utilizează un bloc de decizie.
Atunci când este îndeplinită condiţia, execuţia programului se continuă
pe ramura “DA“, adică se execută instrucţiunile din secvenţa A. În caz
contrar, se execută instrucţiunile din secvenţa B.
c)

DA Condiţie NU

A B

Structura alternativă.

Structura alternativă poate să apară şi în una din variantele din fig.a


sau fig. b

DA NU DA NU
Condiţie Condiţie

A A

a) b)

Variante de structuri alternative.

6
c) structura repetitivă sau bucla - se bazează pe executarea repetată a
unei secvenţe de blocuri. Această structură trebuie să conţină o condiţie
care, la un moment dat, să determine ieşirea din structura repetitivă.

Există trei tipuri de bucle: while, repeat şi for.


bucla while(repeta cât timp (este valida condiţia)) este caracterizat prin
faptul că secvenţa de instrucţiuni A se repetă atâta timp cât condiţia c
este îndeplinită. Se spune că este un ciclu cu test iniţial deoarece, mai
întâi, se verifică dacă este îndeplinită condiţia din blocul de decizie,
după care se execută secvenţa de instrucţiuni A;
bucla repeat (repeta până când (este valida condiţia)) este caracterizat
prin faptul că secvenţa de instrucţiuni A se repetă atâta timp cât
condiţia c nu este îndeplinită. Acesta este un ciclu cu test final
deoarece, mai întâi, se execută secvenţa de instrucţiuni A, după care se
verifică dacă este îndeplinită condiţia din blocul de decizie;

A A

DA nu
Condiţie Condiţie
NU DA

a) b)

Structuri repetitive: a) de tip while; b) de tip repeat.

bucla for (repeta pentru valorile) () este caracterizat prin faptul că


secvenţa de instrucţiuni A se execută pentru fiecare valoare pe care o
poate lua o variabilă, numită contor. Contorul pleacă de la o valoare
iniţială şi creşte/descreşte cu o anumită valoare, până la o valoare
finală. Ieşirea din ciclu are loc atunci când valoarea contorului devine
mai mare/mică decât valoarea variabilei finale.

În cazul buclei repeta contorul are valoarea iniţială vi, rata de


creştere/descreştere r şi valoarea finală vf. În cazul exemplului din
imagine, ieşirea din buclă are loc atunci când i > vf.
Buclele de tip while şi de tip repeat sunt bucle cu un număr
necunoscut de paşi deoarece, de cele mai multe ori, nu se cunoaşte după
câte execuţii ale secvenţei A are loc ieşirea din buclă.
Bucla de tip for este o buclă cu un număr determinat de paşi,
deoarece se poate calcula de câte ori se execută secvenţa A.

În cazul buclei while, secvenţa A poate să nu fie executată niciodată, dacă


iniţial condiţia de buclă nu este îndeplinită.

7
i vi

i i+r

DA
i <=
vf
NU

Structură repetitivă de tip for.

În cazul buclelor repeat şi for, secvenţa A este executată cel puţin o dată,
chiar dacă iniţial condiţia de buclă nu este îndeplinită.

Pseudocodul

Pseudocodul permite o descriere mai fidelă a algoritmului, folosind o


serie de cuvinte cheie specifice. Astfel se face tranziția de la limbajul
natural la limbajul de programare folosit pentru scrierea programului,
uşurând atât reprezentarea cât şi transpunerea acestuia. Sintaxa
pseudocodului se apropie de limbajul de programare PASCAL, dar
transpunerea într-un alt limbaj de programare este ușor de realizat.
Punctul forte al pseudocodului este că nu are o sintaxă rigidă
permițând creionarea rezolvării algoritmului la un nivel personal de
abstractizare neexistând restricțiile de sintaxă ale unui limbaj de
programare.
Pentru a realiza transpunerea facilă într-un limbaj de programare
cuvintele cheie folosite de pseudo-cod sunt reprezentări ale operațiilor de
bază efectuate de sistemul de calcul, precum și ale setului de instrucțiuni
ale procesorului. Pentru exemplificare cuvinte cheie pseudocod vom folosi
algoritmul de determinare al celui mai mare divizor comun a două
numere. Varianta folosită în exemplificare rezolvă problema determinării
c.m.m.d.c. prin împărțiri sucesive ale celor două numere până când restul
împărțirii este 0. Ultimul împărțitor fiind chiar c.m.m.d.c.

8
Cuvintele cheie din pseudocodu sunt următoarele:

1. algoritmul nume algoritm este :


Cu aceast cuvânt cod începe un algoritm scris în pseudocod şi are
rolul de a defini programul (corespunde blocului START din schema
logică).
Exemplu: algoritmul c.m.m.d.c. al 2 numere întegi este :

2. citeşte listă variabile;


Prin acest cuvânt cod se definește o operație de intrare de date.
Astfel datele sunt citite de la tastatură, din memoria internă sau externă și
transmise programului pentru prelucrare (corespunde blocului de citire din
schema logică) . Prin listă variabile se înţelege un șir de variabile separate
prin virgulă (cuvintele ȘI/SAU sunt cuvinte cheie utilizate ân operații de
logică) .
Exemplu: instrucţiunea corespunzătoare algoritm c.m.m.d.c. pentru
citire date este:
citeşte a,b;

3. scrie listă variabile;


Prin acest cuvânt cod se definește o operație de transfer de date din
program către un periferic al sistemului de calcul (display, unitate de
memorie externă, imprimantă). Această operație de ieșire date
corespunde blocului de scriere din schema logică.
Exemplu, instrucţiunea corespunzătoare algoritm c.m.m.d.c. este
următoarea:
scrie ”c.m.m.d.c. este =” , b;
Se observă particularizarea sintaxei în funcție de tipul datelor
afișate. Un program lucrează în principal cu două tipuri de date: date
variabile și date constante. O variabilă este o dată a cărei valoare se
modifică sau nu în cursul execuției programului. O constantă este o dată a
cărei valoare nu se modifică în cursul execuției programului. De asemenea
deosebim date numerice (conțin numere) și alfanumerice (conțin cuvinte).
Observăm că o constantă alfanumerică este încadrată de ghilimele duble
la operațiile de transfer de date (de intrare sau de ieșire).
4. dată expresie;
Efectul acestui cuvânt cod este de modificare a valorii datei cu
valoarea expresiei (corespunde blocului de calcul din schema logică). Prin
această operație valoarea expresiei se atribuie variabilei specificate prin
cuvântul dată.
Exemplu, instrucţiunea corespunzătoare algoritmului c.m.m.d.c. este
următoarea:
a a/ b;

5. dacă condiţie atunci listă de instrucţiuni A


[altfel listă de instrucţiuni B]
sfârşit dacă;

9
Aceste cuvinte cod corespunde structurii de decizie din schema
logică.Operațiile care se execută sunt următoarele:
-se determină valoarea logică de adevărat sau fals a condiţiei
specificate;
-dacă condiția este adevărată se execută lista de instrucţiuni A;
-dacă condiţia este falsă se execută lista de instrucţiuni B;
-execuția algoritmului după efectuarea listei de instrucțiuni A sau B
continuă cu instrucțiunea descrisă de cuvîntul cod imediat următor după
cuvîntul cod sfărșit dacă.

Ramura asociată cuvântului cod altfel este opţională (de aceea s-a
pus între paranteze pătrate), adică, în anumite cazuri, aceasta poate lipsi.
În asemenea situaţii, instrucţiunea este următoarea:
dacă condiţie
atunci listă de instrucţiuni A
sfârşit dacă;
Exemplu pentru algoritmul c.m.m.d.c.:
dacă (a<b)
atunci
aux a
a b
b a
sfârşit dacă;
Prin această secvență de cod asigurăm rularea algoritmului c.m.m.d.c.
atunci când prin împărțiri succesive ale numerelor a și b a devine mai mic
decât b dar restul împărțirii este diferit de 0 (nu s-a obținut încă
c.m.m.d.c.)

6. caz condiţie 1 : listă de instrucţiuni 1


condiţie 2 : listă de instrucţiuni 2

condiţie n : listă de instrucţiuni n
[implicit listă de instrucţiuni n+1]
sfârşit caz;

Această instrucţiune este o structură de decizie multiplă. Este


implementată diferit în limbajele de programare. Modul de excuție pentru
această structură de cuvinte cod este următorul:
-se verifică condiția 1 dacă este adevărată se execută lista de
instrucțiuni 1;
-se verifica condiția 2 dacă este adevărată se execută lista de
instrucțiuni 2;
.........................................
-se verifica condiția n dacă este adevărată se execută lista de
instrucțiuni n;
-se execută lista de instrucțiuni n+1.
Implementarea este diferită în funcție de limbajul de programare.
Implementarea în C este foarte restrictivă. Avem o variabilă de tip întreg.

10
Condițiile 1,2,... n reprezintă valori ale variabilei de caz. Cazul implicit nu
tebuie să lipsească altfel compilatorul va da eroare. Aceste restricții previn
injectare de cod în program.

Exemplu folosit în algoritmul c.m.m.d.c.


n<-0
Dacă ((a=0) SAU (b=0))
n 1
Sfârșit dacă

Dacă (a=b)
n 2
Sfârșit dacă

Caz n
1: scrie ”Date intrare incorecte”
ieșire
2: scrie”c.m.m.d.c=”, a
ieșire
Implicit...............................
Sfârșit caz
În acest exemplu se observă de ce se folosește semnul „/” pentru
împărțire. Pentru că semnul „:” intră în construcția unei instrucțiunii foarte
restictive.
De asemenea în exemplu mai apare cuvântul cod ieșire cu sensul de
părăsire a instrucțiunii caz și de a continua execuția cu cuvintul cod ce
urmează după sfărșit caz.
Instrucţiunea caz nu are un bloc corespondent în schema logică.
Totuşi ea poat fi asimilată cu mai multe structuri alternative conectate în
cascadă.

7. cât timp condiţie execută


listă de instrucţiuni A
sfârşit cât timp;

Această structură de cuvinte cod corespunde unei structuri repetitive


de tip buclă condiționată anterior.
Execuţia aloritmului descris de aceste cuvinte cod este următoarea:
-se verifică valoarea de adevăr a condișiei -condiţia;
-dacă condiția este adevărată se execută lista de instrucțiuni A, după
care se verifică valoarea de adevăr a condiției condiție după aceea se
execută execută lista de instrucțiuni A, se verifică valoarea de adevăr a
condiției condiție ș.a.m.d;
-dacă valoarea de adevăr a condiției condiție este falsă execuția
algoritmului continuă cu cuvântul cod ce urmează după sfârșit dacă.
Observație:
Dacă,la prima iterație, condiţia nu este îndeplinită, lista de instrucţiuni
A nu se execută.

11
Exemplu
cât timp (a%b≠ 0) execută
a a/b
dacă (a<b)
atunci
aux a
a b
b aux
sfârşit dacă;

sfârşit cât timp

8. repetă
listă de instrucţiuni A
până când condiţie;

Această instrucţiune corespunde structurii repetitive de tip structuri


repetitive de tip buclă condiționată posterior.
Execuţia aloritmului descris de aceste cuvinte cod este următoarea:
- se execută lista de instrucțiuni A, după care se verifică valoarea de
adevăr a condiției condiție, dacă e adevărată se execută execută lista
de instrucțiuni A, se verifică valoarea de adevăr a condiției condiție
ș.a.m.d;
-dacă valoarea de adevăr a condiției condiție este falsă execuția
algoritmului continuă cu cuvântul cod ce urmează după sfârșit dacă.
Chiar dacă iniţial condiţia nu este îndeplinită, secvenţa A se execută
cel puţin o dată.

Exemplu:
repetă
a a/b
dacă (a<b)
atunci
aux a
a b
b aux
sfârşit dacă;

până când (a%b≠ 0);

9. pentru i=vi, vf [, r] execută


listă de instrucţiuni A
sfârşit pentru;

12
Această instrucţiune corespunde structurii repetitive de tip buclă
condiționată de contor buclă.
Bucla se va executa până când contorul de bucle va depăși o valoare
stabilită.
Execuţia aloritmului descris de aceste cuvinte cod este următoarea:
-se dă contorului de bucle i valoarea iniţială vi;
-se execută lista de instrucţiuni A;
-se creşte valoarea variabilei i cu pasul r (i i+r);
-dacă valoarea variabilei i este mai mică sau egală cu valoarea finală vf, se
execută lista de instrucțiuni A,în caz contrar, se trece la execuţia
instrucţiunii ce urmează după sfârşit pentru.
Observație:
Specificarea valorii pasului r este opţională. În cazul în care valoarea lui r
nu se specifică, se consideră r =1.

10. stop;
Această instrucţiune determină terminarea execuţiei programului,
deci este ultima instrucţiune dintr-un program (corespunde blocului STOP
din schema logică).

11. procedura nume [(listă parametri )];


listă de instrucţiuni
sfârşit procedură

Prin procedură se înțelege un subprogram independent de programul


principal apelat ca atare de programul de bază. Prin acest cuvânt cod se
declarară o procedură. Există si declarare formală care constă în
declararea numelui procedurii şi declararea listei parametrilor (listă care
este opţională), parametrii care sunt preluați din programul apelant, sau
transmiși la apel procedură. În listă, parametri se separă prin virgulă.
Implementarea procedurilor diferă de limbajul de programare. Avem o
implementare sub formă de funcții dar și implementări sub formă de clase
și obiecte ca în C++.

12. nume listă parametri;


Acest cuvânt de cod redă apelul unei proceduri se face specificând
lista parametrilor. În listă, parametri actuali se separă prin virgulă.

13. salt;
Cu această instrucţiune se determină salt la inceputul/sfîrşitul buclei
ce conţine această instrucţiune (deci la un repetă cât timp, la un sfârşit
până când, sau la un pentru), fără a se produce ieşirea din buclă

14. ieşire;
Această instrucţiune determină ieșirea din buclă execuția programului
continuă cu următorul cuvânt cod după sfârşit cât timp, până când, sau
sfârşit pentru;

13
15. //Comentariu;
Încadrate de /* și */ sau începând pe fiecare linie cu //, comentariile
pot să apară oriunde în program. La execuţia programului, rezultatul
comentariilor este nul, acestea având o valoare de reper pentru
programator.

16. Salt necondiționat etich,


Acest cuvânt cod determină saltul execuției algoritmului la cuvântul
cod cu eticheta etich. (sintaxa este salt la și este insoțită de o eticheta)

17. Etichetă etich


Această cuvânt cod marchează acea linie din algoritm cu eticheta
etich. Poate să fie chiar o linie vidă, la care să nu se execute nici o
operație (de exemplu un comentariu).

Etich j10: j=10


.
.
dacă (condiție)
salt la Etich j10

Exemple de algoritmi descrişi în pseudocod

1.Suma a n numere reale

Cu ajutorul pseudocodului, algoritmul de calcul a sumei a n numere


reale rezultă:

algoritmul suma a n numere reale este :


citeşte n;
s 0
pentru i =1, n execută
citeşte a
s s+a
sfârşit pentru;
scrie s;
sfârşit;

2.Calcul c.m.m.d.c. a 2 numere întregi


algoritmul c.m.m.d.c. al 2 numere întegi este :
citeşte a,b;
n<-0
dacă ((a=0) SAU (b=0))
n 1
sfârșit dacă

dacă (a=b)

14
n 2
sfârșit dacă
caz n
1: scrie ”Date intrare incorecte” //cazul de excepție
ieșire
2: scrie”c.m.m.d.c=”, a //cazul cel mai favorabil
ieșire
Implicit
cât timp (a%b≠ 0) execută
dacă (a<b)
atunci
aux a
a b
b aux
sfârşit dacă;
a a/b
sfârşit cât timp
scrie”c.m.m.d.c=”, b
sfârșit caz
sfârșit
Această rezolvare nu este cea mai optimă întrucât nu se ține cont de
2 factori:
-există o posibilitate mare ca ambele numere să fie pare;
-operațiile de împarțire la 2 se efectueaza foarte rapid (o deplasare
către dreapta cu un bit).

15

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