miercuri, 12 august 2015

Primul pas în informatică




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 algebra are la origine o lucrare fundamentală în domeniul aritmeticii a matematicianului persan Al-Khwarizmi iar cuvântul algoritm provine din numele autorului ) î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 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 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. 2.1.b)  sau sfârşitul (fig. 2.1.c) unui algoritm, proceduri sau funcţii;


 




                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;

                      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;
                          a)                         b)                           c)
Blocuri de calcul

·      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“.

                        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 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.


 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.


 

Structura alternativă.


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

                           a)                                b)

Variante de structuri alternative.


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)                                             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ă. 





 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.
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ă;
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. 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ă.

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;

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 sfârşit 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;

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)
          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).