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.
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).
Niciun comentariu:
Trimiteți un comentariu
Comentează această postare.