algoritmi - reprezentarea algoritmilor.pdf

13
Laborator I: ALGORITMI. REPREZENTAREA ALGORITMILOR 1. Algoritmi Noţiunea de algoritm este fundamentală în informatică (aşa cum este în matematică noţiunea de mulţime). Astfel încât putem întâlni diverse definiţii ale algoritmului. De exemplu, Enciclopædia Britannica dă următoarea definiţie: "O procedură sistematică ce produce într-un număr finit de paşi răspunsul la o întrebare sau rezolvarea unei probleme". Dicţionarul de calculatoare & Internet (editura Teora, 1999) defineşte algoritmul astfel: "O procedură matematică sau logică de rezolvare a unei probleme. O metodă de a găsi răspunsul corect la o problemă dificilă prin împărţirea ei într-un anumit număr de etape simple." Caracteristicile unui algoritm sunt: - determinism (claritate): succesiunea paşilor este precis determinată; - finitudine (eficacitate): numărul paşilor descrişi este finit; - generalitate (universalitate): rezolvă orice problemă din clasa de probleme pentru care a fost elaborat (pentru orice set de date de intrare). Algoritmii se folosesc în orice limbaj, inclusiv în cel natural. O reţetă de bucătărie este un algoritm: "Se amestecă 30g drojdie cu o linguriţă zahăr. Se amestecă totul cu 4 linguri făină şi 4 linguri lapte. Pauză timp de 15 minute. Se amestecă totul cu 400g făină şi două pahare lapte timp de 5 minute. Pauză timp de 20 minute. Se unge tava. Se pune amestecul în tavă. Se pun fructele peste amestec. Se dă la cuptor. Pauză timp de 20 minute. Se scoate din cuptor. Pauză timp de 5 minute. Se taie şi se mănâncă". Cuvântul algoritm provine din traducerea în latină (“Algoritmi de numero Indorum”) a titlului scrierii matematicianului arab Al-Horezmi (“Al-Horezmi despre numărarea indiană”). Abu Abdullah Mohamed Ibn Musa Al-Horezmi (770 – 840) a fost unul dintre cei mai mari matematicieni ai lumii. A trăit în Bagdad, în timpul califului Mamun. A fondat câteva din ramurile matematicii. Este faimos şi ca astronom. Cea mai mare realizare a sa o constituie introducerea conceptului de algoritm. O alta de rang asemănător este introducerea cifrei zero. Algoritmii se întâlnesc mereu în viaţa obişnuită. Acţionarea unor dispozitive sau maşini se face conform algoritmilor (apăs butonul de apel al liftului, aştept până când ajunge, deschid uşile, intru, închid uşile, comand oprirea următoare, aştept până ajung, deschid uşile, ies, închid uşile). Chiar şi normele de comportare sunt algoritmi (deschid uşa sălii de aşteptare, intru, închid uşa, salut persoanele aflate aici, dacă există un scaun liber, atunci mă aşez, aştept până îmi vine rândul).

Upload: angela-biro

Post on 10-Jul-2016

5 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Algoritmi - Reprezentarea Algoritmilor.pdf

Laborator I: ALGORITMI. REPREZENTAREA

ALGORITMILOR

1. Algoritmi

Noţiunea de algoritm este fundamentală în informatică (aşa cum este în matematică noţiunea de mulţime). Astfel încât putem întâlni diverse definiţii ale algoritmului. De exemplu, Enciclopædia Britannica dă următoarea definiţie: "O procedură sistematică ce produce într-un număr finit de paşi răspunsul la o întrebare sau rezolvarea unei probleme". Dicţionarul de calculatoare & Internet (editura Teora, 1999) defineşte algoritmul astfel: "O procedură matematică sau logică de rezolvare a unei probleme. O metodă de a găsi răspunsul corect la o problemă dificilă prin împărţirea ei într-un anumit număr de etape simple."

Caracteristicile unui algoritm sunt: - determinism (claritate): succesiunea paşilor este precis determinată; - finitudine (eficacitate): numărul paşilor descrişi este finit; - generalitate (universalitate): rezolvă orice problemă din clasa de probleme

pentru care a fost elaborat (pentru orice set de date de intrare).

Algoritmii se folosesc în orice limbaj, inclusiv în cel natural. O reţetă de bucătărie este un algoritm:

"Se amestecă 30g drojdie cu o linguriţă zahăr. Se amestecă totul cu 4 linguri făină şi 4 linguri lapte. Pauză timp de 15 minute. Se amestecă totul cu 400g făină şi două pahare lapte timp de 5 minute. Pauză timp de 20 minute. Se unge tava. Se pune amestecul în tavă. Se pun fructele peste amestec. Se dă la cuptor. Pauză timp de 20 minute. Se scoate din cuptor. Pauză timp de 5 minute. Se taie şi se mănâncă".

Cuvântul algoritm provine din traducerea în latină (“Algoritmi de numero Indorum”) a titlului scrierii matematicianului arab Al-Horezmi (“Al-Horezmi despre numărarea indiană”). Abu Abdullah Mohamed Ibn Musa Al-Horezmi (770 – 840) a fost unul dintre cei mai mari matematicieni ai lumii. A trăit în Bagdad, în timpul califului Mamun. A fondat câteva din ramurile matematicii. Este faimos şi ca astronom. Cea mai mare realizare a sa o constituie introducerea conceptului de algoritm. O alta de rang asemănător este introducerea cifrei zero.

Algoritmii se întâlnesc mereu în viaţa obişnuită. Acţionarea unor dispozitive sau maşini se face conform algoritmilor (apăs butonul de apel al liftului, aştept până când ajunge, deschid uşile, intru, închid uşile, comand oprirea următoare, aştept până ajung, deschid uşile, ies, închid uşile). Chiar şi normele de comportare sunt algoritmi (deschid uşa sălii de aşteptare, intru, închid uşa, salut persoanele aflate aici, dacă există un scaun liber, atunci mă aşez, aştept până îmi vine rândul).

Page 2: Algoritmi - Reprezentarea Algoritmilor.pdf

Preşcolarii învaţă algoritmi matematici: ca să adun pe 7 cu 4, folosesc numărătoarea astfel: trec în dreapta 7 bile de pe prima linie, trec în dreapta 4 bile de pe a doua linie, număr câte bile am în total în dreapta.

În gimnaziu ne întâlnim cu algoritmul lui Euclid, care stabileşte care este cel mai mare divizor comun a două numere naturale. Se observă o diferenţă fundamentală faţă de algoritmul precedent: acesta rezolvă o clasă infinită de probleme (numerele naturale pot fi oricare), pe când cel precedent rezolvă o singură problemă (cum adun pe 7 cu 4, dar nu mă învaţă cum adun pe 2 cu 5).

Există întotdeauna un algoritm de rezolvare a unei clase finite de probleme. Este varianta exhaustivă de rezolvare, adică o tabelă de valori asociată tuturor valorilor posibile. De exemplu, problema determinării înmulţirii a două numere cel mult egale cu 10 a dus la celebra tablă a înmulţirii pe care am învăţat-o în clasa a doua.

În general, nu este uşor a răspunde la problemele care au număr infinit de valori de luat în considerare. De exemplu: "este numărul n (natural) prim ?" sau "care este cel mai mic multiplu comun a două numere naturale ?". De aceea algoritmii care rezolvă astfel de probleme sunt importanţi şi sunt studiaţi în şcoală. "Elementele" lui Euclid, apărută în anul 300, conţin un algoritm care află cel mai mare divizor comun a două numere naturale. Găsirea de algoritmi eleganţi (simpli şi eficienţi) este unul din scopurile cercetării în informatică.

Se disting două tipuri de algoritmi: cei care furnizează un răspuns de tipul da/nu se numesc decizionali. Problemele rezolvate de ei se numesc probleme de decizie ("este n prim ?"). Cei care conduc la o valoare numerică se numesc calculaţionali. Problemele rezolvate se numesc probleme de calcul ("care este cel mai mic multiplu comun al numerelor a şi b ?").

Câteodată nu există algoritmi pentru rezolvarea unor clase infinite de probleme, mai ales atunci când se impun restricţii asupra metodei acceptate. De exemplu, două probleme din vremea lui Euclid, care trebuie rezolvate cu ajutorul riglei negradate şi a compasului: "să se construiască un pătrat cu aria egală cu a unui cerc dat" şi "să se deseneze trisectoarea unui unghi" au fost studiate secole de-a rândul, până când s-a demonstrat că sunt imposibile. La trecerea în secolul al XX-lea, David Hilbert (matematician german) a propus 23 de probleme de rezolvat în următoarea sută de ani. A doua problemă din listă cerea investigarea consistenţei axiomelor aritmeticii. Mulţi matematicieni aveau dubii asupra rezolvării acestei probleme, până în 1931, când Kurt Gödel (logician austriac) a demonstrat surprinzătorul rezultat că există enunţuri aritmetice indecidabile (nu se pot nici afirma şi nici nega), deoarece conduc la o procedură decizională infinită (deci nu duc la un algoritm). Într-un efort fără succes de a afla cel puţin care sunt aceste enunţuri, Alan Turing (matematician şi logician englez) a definit riguros conceptul de algoritm. Descrierea sa pentru caracteristicile esenţiale ale unei maşini care produce algoritmi (maşina Turing) a devenit fundamentul informaticii. Programele de calculator sunt tipuri speciale de algoritmi. Decidabilitatea şi calculabilitatea lor sunt probleme centrale ale scrierii programelor.

Verificarea corectitudinii algoritmilor. După elaborarea unui algoritm, se trece

la verificarea corectitudinii acestuia. Adică, ar trebui parcurs algoritmul pentru orice problemă din clasa de probleme pentru care a fost scris, şi văzut dacă furnizează rezultate

Page 3: Algoritmi - Reprezentarea Algoritmilor.pdf

corecte. Acest lucru este imposibil, dacă algoritmul rezolvă o clasă infinită de probleme. De aceea, se recomandă următoarele verificări ale algoritmilor simpli:

- dacă se încheie după un număr finit de paşi (se verifică structurile repetitive); - dacă selecţiile s-au construit corect (se verifică structurile alternative); - dacă se asigură valori pentru toate datele folosite (se verifică dacă tuturor

datelor li se atribuie valori). După încheierea cu succes a verificărilor de mai sus, se trece la testul întregului algoritm, pe diferite seturi de date, de obicei cazuri limită.

2.1. Scheme logice

Schemele, departe de a fi utilizate numai în informatică, sunt un instrument de lucru general, utilizat în chimie, fizică, inginerie, ştiinţe socio-umane, administraţie etc. În general, schemele sunt folosite pentru a arăta dinamica unui proces, de la iniţierea până la încheierea sa. Structura schemelor poate fi concepută diferit în domenii diferite, dar în mod obişnuit sunt constituite din blocuri (cu forme diverse) conectate prin linii. Ordinea de parcurgere a blocurilor, indicată de obicei prin săgeţi, trebuie să rezulte clar din schemă. Dacă este loc, procesul reprezentat este descris în interiorul blocului. Dacă nu, se folosesc simboluri explicate în afara schemei. O schemă este un desen care permite înţelegerea întregului proces prin urmărirea diferitelor aspecte apărute şi înţelegerea ordinii şi relaţiilor între aspecte.

La sfârşitul anilor ’40, când s-a conturat conceptul programului memorat, a devenit clar că scrierea programelor complexe, de mii de instrucţiuni, nu putea fi realizată fără o metodă de planificare şi urmărire a etapelor intermediare. Primul care a folosit metoda de descriere logică a etapelor unui program a fost John von Neumann. El a folosit o schemă logică pentru a evidenţia succesiunea transformărilor datelor de intrare până când se obţin datele de ieşire. Toţi programatorii au preluat acest mod de lucru, preliminar scrierii unui program. American National Standard Institute (ANSI) a publicat un standard al blocurilor folosite în informatică. Cele uzuale sunt:

Proces

Un grup de instrucţiuni care realizează o procesare (prelucrare)

Intrare / ieşire Orice operaţie a unui dispozitiv de intrare/ieşire

Decizie Descrie o condiţie (expresie logică), în funcţie de valoarea căreia se alege una din două alternative de ieşire

Proces predefinit Un grup de operaţii care nu sunt detaliate în schemă

Page 4: Algoritmi - Reprezentarea Algoritmilor.pdf

Terminal Începutul, sfârşitul sau un punct de întrerupere a unui program

Conector O legătură către altă parte a schemei

Conector de pagină O legătură către o parte a schemei, situată pe altă pagină

Exemple de folosire a acestor blocuri:

Variabila x primeşte valoarea b2 - 4ac.

Se preiau de la dispozitivul de intrare valorile

variabilelor a, b şi c.

Dacă i este mai mic sau egal cu n,

atunci se trece la execuţia blocului aflat pe săgeata marcată cu "da". Altfel, se execută blocul aflat pe săgeata marcată cu "nu". Acest bloc are două puncte de ieşire.

Se calculează valoarea funcţiei f în 2.

Începutul şi sfârşitul schemei. Aceste blocuri apar o singură

q dată într-o schemă.

Conectori pe pagină.

x ← b*b –

citeşte:

i ≤ d n

f(2)

STOP

11

Page 5: Algoritmi - Reprezentarea Algoritmilor.pdf

Conectori între pagini.

Pentru a scrie o schemă logică, programatorul trebuie să gândească în paşi

elementari rezolvarea problemei. De obicei, se începe cu citirea datelor de intrare. Apoi urmează partea de calcule şi de decizii care se iau în funcţie de rezultatele unor comparaţii. Încheierea o constituie scrierea datelor de ieşire. Fiecare dintre aceşti paşi elementari este redat de un bloc standardizat din tabelul de mai sus. În fiecare bloc se plasează o descriere a operaţiei executate.

În continuare este prezentată o schemă care citeşte două variabile reale a şi b şi scrie variabila x, calculată astfel: x = -b/a dacă a este nenul, sau x = b–7 dacă a=0.

4.2.2. Structuri de control Problema care a apărut era că fiecare programator avea stilul său de lucru şi

folosea propriul set de reguli pentru descrierea logică a programului. Fiecare folosea propria structură (grup de blocuri) pentru a descrie etape din program. De aceea citirea, înţelegerea şi modificarea structurilor era dificilă. Era necesară o uniformizare a metodelor de scriere a unei scheme. Astfel, "arta" programării trebuia transformată în "ştiinţă". În anul 1964, Corrado Böhm şi Giuseppe Iacopini au prezentat o lucrare la Congresul Internaţional de Lingvistică Algebrică şi Teoria Automatelor din Israel. În această lucrare ei demonstrează că orice schemă logică poate fi scrisă cu ajutorul a numai

START

citeşte: a, b

x ← -b /

STOP

da nu a = 0

scrie: x

x ← b - 7

2

2

Page 6: Algoritmi - Reprezentarea Algoritmilor.pdf

trei structuri, numite structuri de control de bază. Acestea sunt: structura secvenţială, structura alternativă binară şi structura repetitivă condiţionată anterior.

Structura secvenţială Evenimentele descrise în blocuri se execută unul după altul, în ordinea specificată. Structura alternativă binară În blocul de decizie este testată condiţia înscrisă. Dacă este adevărată, atunci se execută operaţia descrisă în blocul de pe ramura marcată cu "da". Dacă nu, atunci se execută operaţia descrisă în blocul de pe ramura marcată cu "nu". Structura repetitivă condiţionată anterior Este cea care permite ciclarea în programe. Se testează condiţia înscrisă. Dacă este adevărată, atunci se execută procesarea descrisă. Din nou se testează condiţia. Cât timp condiţia este adevărată, se reia procesarea. Dacă însă condiţia este falsă, atunci se încheie această structură. Observăm că fiecare din cele trei structuri descrise mai sus are un singur punct de intrare şi un singur punct de ieşire.

Programarea structurată este metoda de programare care foloseşte numai aceste trei structuri. Acum există produse software care ajută desenarea schemelor logice. Procesorul de texte Word (sub Windows) are predefinite blocurile standard ale schemelor. Flowchart Maker, ajuns la versiunea 1.3, este un produs pentru Macintosh, destinat exclusiv desenării schemelor. În afara structurilor de control de bază, mai există structuri de control auxiliare: structura de control alternativă generalizată, structura de control condiţionată posterior şi structura repetitivă cu contor. Aceste structuri au fost admise datorită frecventei lor utilizări, dar se arată că pot fi simulate cu ajutorul structurilor de bază. Structura de control alternativă generalizată

Eveniment

Eveniment

da nu Condiţ

Eveniment Eveniment

da

nu

Condiţ

=v=v

select

Eveniment

Eveniment Eveniment

Eveniment

=v =v n

Page 7: Algoritmi - Reprezentarea Algoritmilor.pdf

Alegerea următoarei prelucrări se face în funcţie de valoarea unei expresii numite selector. Dacă selector este egal cu v1, atunci se execută "Eveniment 1"; dacă are valoarea v2, se execută "Eveniment 2" şi aşa mai departe. Structura de control condiţionată posterior Se execută "Eveniment". Se testează condiţia înscrisă. Dacă este falsă, atunci se reia procesarea descrisă prin "Eveniment". Se testează condiţia din nou. Cât timp condiţia este falsă, se reia procesarea. Dacă însă condiţia este adevărată, atunci se încheie această structură. Structura repetitivă cu contor Este o structură pentru care se cunoaşte numărul de repetiţii. Contorul repetiţiei este variabila întreagă v. Contorul primeşte valoarea iniţială vi. Se testează dacă v este mai mic sau egal cu vf (valoarea finală). Dacă da, atunci se execută "Eveniment", se creşte v cu pasul p şi se reia testul. Se părăseşte această structură dacă v este mai mare decât vf.

Exemplu. Să presupunem că avem un robot înzestrat cu braţe, picioare şi ochi, pe care dorim să-l programăm astfel încât să pregătească o cană cu ceai.

Deci, sarcina principală (de nivelul 1) este: Deocamdată robotul nu poate îndeplini cerinţa, deoarece el doar recunoaşte

obiectele şi îndeplineşte comenzi simple, de genul: "pune ceainicul pe plită". De aceea, cerinţa noastră va fi descompusă în comenzi mai simple, de nivelul 2, pe care le punem în ordine:

Fiecare din aceste cerinţe este greu de îndeplinit, astfel încât trebuie descompusă,

la rândul ei, în altele de nivel inferior (nivelul 3).

da

nu

Condiţ

da

v ← vi

v ≤

v ← v +

n

1. Fă-mi o cană cu ceai

1. Fă-mi o cană cu ceai

1.1. Fierbe apa 1. 2. Pune ceai în cană 1. 3. Pune apa în cană

Page 8: Algoritmi - Reprezentarea Algoritmilor.pdf

Majoritatea programelor conţin activităţi de introducere, prelucrare de date şi extragere de rezultate. Proiectând programul şi formând module, va deveni, în curând, evident pentru fiecare modul, ce funcţie îndeplineşte în introducere, prelucrare sau extragere.

Iată cum arată întreaga diagramă de tip arbore pentru nivelul 3:

Problema 1 Se dau două matrice A = (ai j) 1 ≤ i ≤ n ,1 ≤ j ≤ m şi B = (bi j) 1 ≤ i ≤ n ,1 ≤ j ≤ m cu elemente reale (n ≤ 10, m ≤ 10). Să se calculeze matricea C = (ci j) 1 ≤ i ≤ n ,1 ≤ j ≤ m , C = A + B. Datele de intrare ale problemei sunt: numărul de linii (n) şi numărul de coloane (m) precum şi elementele matricelor A şi B. Blocul de citire precedat de (0) descrie citirea variabilelor de intrare într-un mod condensat. Să observăm că, de fapt, citirea celor două tablouri A şi B implică citirea a 2 + 2·m·n numere (valoarea lui n, valoarea lui m, cele m·n elemente ale lui A şi cele m·n elemente ale lui B), deci este vorba tot de un proces repetitiv, analog celui descris mai jos pentru algoritmul propriu-zis (adunarea matricelor). Se convine să se descrie în acest mod condensat citirea tablourilor pentru a nu complica în mod inutil şi pentru economie de spaţiu. Cum procedeul de calcul al sumei a două matrice este bine cunoscut (se adună elementele de pe aceleaşi poziţii), rămâne să analizăm, în cele ce urmează, modul în care descriem (din punct de vedere algoritmic) acest procedeu foarte simplu.

Să considerăm scrierea uzuală a celor două matrice:

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

=

nm2n1n

m22221

m11211

aaa

aaaaaa

A

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

=

nm2n1n

m22221

m11211

bbb

bbbbbb

B

1. Fă-mi o cană cu ceai

1.1. Fierbe apa 1. 2. Pune ceai în cană 1. 3. Pune apa în cană

1.1.1. Umple ceaini-cul cu apă

1.1.2 Pune ceaini-cul pe plită

1.1.3 Aş- teaptă până fierbe apa

1.1.4Pune ceaini-cul pe masă

1.2.1Ia o cană de ceai

1.2.2Pune plicul de ceai

1.3.1.Adu ceaini- cul la cană

1.3.2 Pune apa în cană

1.3.3 Ames- tecă totul

Page 9: Algoritmi - Reprezentarea Algoritmilor.pdf

Ştim că se adună elementele liniei 1 din A cu elementele liniei 1 din B (a11 cu b11, a12 cu b12,…,a1m cu b1m), apoi elementele liniei 2 din A cu elementele liniei 2 din B şi tot aşa până la linia n inclusiv. Se observă deci că se compun două procese repetitive (primul: se prelucrează n linii şi al doilea: o prelucrare implică m adunări). Pentru descrierea corespunzătoare vom folosi:

- o variabilă i care să conţină, pe rând, indicii liniilor (1,2,…,n); - o variabilă j care să conţină, pe rând, indicii coloanelor (1,2,…,m). Urmărind acum schema logică şi făcând referire la conectorii plasaţi convenabil,

putem descrie cele două procese repetitive imbricate (al doilea inclus în primul) astfel: (1) iniţializează i cu 1 (se accesează astfel primele linii din A şi B); (2) dacă i este mai mic sau cel mult egal cu n, atunci:

(3) iniţializăm j cu 1 (se accesează astfel primul element de pe linia i, i fiind acum fixat);

(4) dacă j este mai mic sau cel mult egal cu m, atunci: (5) calculăm ci j ca fiind egal cu ai j + bi j; (6) creştem indicele de coloană cu 1 (trecem la următorul element de pe

linia i) şi salt înapoi la testul (4); (7) dacă j este mai mare decât m, aceasta înseamnă că am prelucrat toate elementele liniilor i din A, respectiv B şi trebuie să trecem la liniile i+1;

dacă i este mai mare decât n, aceasta înseamnă că am prelucrat toate liniile şi suma este realizată. Urmează: (8) afişarea elementelor tabloului C şi Stop.

Să observăm că blocul de scriere din final conţine, de fapt, tot o scriere condensată. Este aceeaşi convenţie, ca şi pentru citirea tablourilor. Pentru a înţelege mai bine modul în care se modifică variabilele în această schemă logică şi faptul că prin paşii descrişi se accesează, într-adevăr, toate perechile de elemente de pe poziţii corespunzătoare din A şi B, sugerăm să se considere un tablou de variaţie a variabilelor, după exemplul din problema precedentă, pentru un caz foarte simplu, cum ar fi: n = 2, m = 3. DI: matricele A,B VL: contorii i, j DE: matricea C

(1)

START

citeşte: n,m,(ai j) 1 ≤ i ≤ n ,1 ≤ j

≤ m (bi j) 1 ≤ i ≤ n 1 ≤ j ≤

i ← 1

j ←1

da j ≤ m

da i ≤ n

nu

(0)

(2)

(3

(4

Page 10: Algoritmi - Reprezentarea Algoritmilor.pdf

Problema 2 Se dau variabilele reale a, b, c. Să se calculeze şi să se scrie media lor aritmetică. Rezolvare DI: variabilele a, b, c VL: -

START

citeşte: a, b, c

x ←

scrie: x

STOP

Page 11: Algoritmi - Reprezentarea Algoritmilor.pdf

DE: variabila x Problema 3

Se dau variabilele reale a şi b. Să se interschimbe aceste valori, astfel ca în a să fie valoarea citită în b, iar în b să fie valoarea citită în a. Să se scrie noile valori.

Rezolvare Este necesară o variabilă auxiliară aux, cu rol de depozit temporar. Prin analogie, pentru a interschimba conţinutul a două pahare (a şi b), avem nevoie de un al treilea pahar (aux) în care, la început, să transferăm conţinutul unuia din cele două: aux ← a. În paharul gol (a) aducem conţinutul celui plin (b): a ← b. În cel rămas gol (b) aducem conţinutul celui de-al treilea (aux): b ← aux.

DI: variabilele a, b VL: variabila aux DE: variabilele a, b

START

citeşte: a, b

aux ← a

a ← b

b ← aux

scrie: a, b

STOP

Page 12: Algoritmi - Reprezentarea Algoritmilor.pdf

Problema 4 Să se rezolve, în mulţimea numerelor reale, ecuaţia de gradul I: ax+b=0, cu a şi b numere reale. Rezolvare: Observăm că nu se precizează condiţia: a ≠ 0. Algoritmul trebuie să se termine corect pentru orice valori reale ale coeficienţilor a şi b, ceea ce conduce la analiza descrisă în următoarea schemă logică. DI: variabilele a, b VL: - DE: variabila x.

START

citeşte: a, b

x ← -b /

scrie: ‘identitate:

STOP

da nu b = 0

scrie: ‘imposib

da nu a = 0

scrie: x

Page 13: Algoritmi - Reprezentarea Algoritmilor.pdf

Problema 5 Să se rezolve, în mulţimea numerelor reale, ecuaţia de gradul al II-lea: ax2+bx+c=0, cu a, b, c numere reale. Rezolvare: Este necesară o discuţie. Dacă a=0, atunci se rezolvă ecuaţia de gradul I bx+c=0. Dacă a≠0, atunci se calculează ∆=b2-4ac. Ecuaţia are 2 soluţii distincte (x1 şi x2) dacă ∆>0. Ecuaţia are o soluţie dublă (x) dacă ∆=0. Ecuaţia nu are soluţii reale dacă ∆<0. DI: variabilele a, b, c VL: variabila d DE: variabilele x,x1,x2

d

da nu

START

citeşte: a,b,c

da nu a = 0

da nu

da nu b = 0

scrie: ‘impo

scrie: ‘identitate

da c = 0

d ← b*b -

d > 0

scrie: ‘x1=’,x1 ’x2=’

d = 0

x← -

scrie: ‘soluţie dublă’ x

scrie: ‘ecuaţia nu are soluţii

STOP

x ← -c /

scrie: ‘soluţiaecuaţieide gradul

x1←(-b+ d )/(2*a)

( b