CATEGORII DOCUMENTE |
Algoritmi si programare. Descrierea algoritmilor
1. Programare. Etapele programarii.
Programarea reprezinta activitatea complexa de elaborare a programelor. Programarea nu se refera strict la scrierea codului sursa (descrierea in limbaj de programare a rezolvarii problemei); aceasta activitate implica parcurgerea mai multor etape:
a. Analiza problemei. Problemele reale cu care ne confruntam nu sunt formulate intotdeauna intr-un stil clar, precis. De cele mai multe ori, problemele sunt formulate incomplet, ambiguu, lasand programatorului sarcina de a determina corect: ce se cunoaste din problema si rezultatele cerute. Etapa de analiza a problemei se finalizeaza prin identificarea celor doua elemente esentiale ale formularii unei probleme: datele de intrare si datele de iesire.
b. Proiectarea algoritmului poate fi considerata etapa de creativitate a programarii, in care folosindu-se de cunostintele si experienta dobandite, programatorul va identifica metoda de rezolvare a problemei date si va dezvolta algoritmul corespunzator. Finalitatea acestei etape o constituie un algoritm descris clar intr-una dintre variantele de reprezentare algoritmica (scheme logice, pseudocod, sau chiar limbaj de programare - in cazul in care problema este de dificultate mica).
c. Traducerea in limbaj de programare (implementarea): este etapa in care se va efectua o "traducere" in limbaj de programare a descrierii algoritmului rezultat in etapa de proiectare. Cunoasterea in detaliu a regulilor sintactice ale limbajului ales, experienta si stilul programatorului sunt ingredientele necesare si suficiente ale acestei etape.
d. Traducerea in cod masina, executia si testarea. Traducerea in cod masina se realizeaza automat cu ajutorul a doua componente ale mediului de programare: compilatorului si a editorul de legaturi. Testarea programului consta in executia sa repetata pentru o multime de date de intrare (date de test) si verificarea corectitudinii rezultatelor oferite. Rezultatele incorecte ne semnaleaza o eroare logica de proiectare si necesita o revizuire a algoritmului si re-parcurgerea etapelor programarii.
e. Intretinerea este ultima etapa a programarii si consta din actiuni de actualizare a produsului final si de asistenta oferita beneficiarului.
Dintre toate aceste etape, cea care este mai solicitanta este etapa de proiectare. Practic, parcurgerea corecta a acestei etape va face diferenta intre programatori si amatori. Esenta programarii consta in capacitatea programatorului de a elabora si descrie clar metoda de rezolvare a problemei. Orice eroare aparuta la nivelul etapei de proiectare a algoritmului va avea repercusiuni asupra produsului final, generand erori logice.
2. Definirea algoritmilor
Asa cum am subliniat mai sus, etapa de proiectare a algoritmilor este cea mai complexa dintre cele etapele enumerate ale programarii. Notiunea de algoritm, proprietatile pe care trebuie sa le indeplineasca acesta si modalitatile de reprezentare standardizata a algoritmilor fac subiectul paragrafelor urmatoare.
Cuvantul algoritm provine din pronuntia fonetica a numelui matematicianului arab Al-Khwarizmi Muhammed ibs Musa (780-850), care se refera la reguli precise pentru descrierea proceselor de calcul din aritmetica. Aceiasi descriere se regaseste in lucrarea Elementele lui Euclid, cca. 300 i.Hr., cand pentru prima data se descrie o secventa ordonata de reguli clare pentru descrierea rezolvarii unor probleme. De altfel, algoritmul de determinare a celui mai mare divizor comun a doua numere (algoritmul lui Euclid) este considerat ca primul algoritm din istorie.
In limbajul uzual, prin algoritm se intelege o metoda de rezolvare a unei probleme, alcatuita dintr-o multime de pasi, dispusi intr-o ordine stabilita, ale caror parcurgere ne conduce la rezultatul dorit. Algoritmii informatici, despre care vom discuta in acest capitol, sunt definiti mult mai riguros, surprinzand proprietatile obligatorii pe care acestia trebuie sa le indeplineasca.
Definitie: Un Algoritm (informatic) reprezinta o secventa finita si ordonata de reguli clare, a caror parcurgere ne permite ca, pornind de la o multime de date de intrare, sa obtinem in mod eficient rezultatele corecte ale problemei.
3. Proprietatile algoritmilor:
Orice algoritm informatic verifica urmatoarele proprietati:
Generalitate - un algoritm nu rezolva o singura problema, ci o clasa de probleme de acelasi tip.
Finitudine - actiunile algoritmului trebuie sa se termine dupa un numar finit de operatii, aceasta pentru orice set de date valide
Claritate - actiunile algoritmului trebuie sa fie clare, simple si riguros specificate
Corectitudine algoritmul trebuie sa produca un rezultat corect (date de iesire) pentru orice set de date de intrare valide
Eficienta - algoritmul trebuie sa fie eficient privind resursele utilizate, si anume sa utilizeze memorie minima si sa se execute intr-un timp minim.
Regulile prin care algoritmul exprima maniera de rezolvare a problemei sunt de 4 tipuri:
reguli de intrare prin care se realizeaza introducerea datelor de intrare in memoria unui sistem de calcul virtual sau real
reguli de calcul care permit efectuarea operatiilor elementare aritmetice
reguli conditionale prin care se va decide continuarea sau nu a algoritmului printr-o secventa de reguli
reguli de iesire prin care se permite furnizarea rezultatelor finale ale algoritmului
In functie de tipurile de reguli pe care le contine, un algoritm poate fi:
Algoritm liniar - contine doar reguli de tipul 1,2,4
Algoritm ramificat - contine cel putin o regula de tipul 3
Algoritmi repetitivi (ciclici) - o secventa de reguli se repeta de un numar finit de ori.
4. Obiecte si operatii ale algoritmilor
Algoritmii informatici opereaza cu urmatoarele obiecte fundamentale:
- constante
- variabile
Constanta - reprezinta o marime a carei valoare nu se modifica in timpul executiei (parcurgerii) algoritmului.
Variabila - reprezinta o marime a carei valoare este modificabila in timpul executiei algoritmului.
Cuvantul variabila este unul fundamental in programare. Prin aceasta notiune se denumesc date de tipuri diferite. Tipurile de date sunt clasificate ca tipuri elementare (intreg, real, caracter) si tipuri structurate. Datele elementare sunt unitati indivizibile de informatie, iar datele de tip structural sunt alcatuite prin asamblarea datelor elementare. Printr-un tip de data se intelege in general atat domeniul de valori posibile ale datelor, cat si operatiile specifice datelor de acel tip. Introducerea si utilizarea unei variabile in descrierea algoritmului corespunde identificarii si manipularii unei date de un tip de data presupus. Variabila are atasat un nume, o valoare curenta care apartine domeniului tipului specificat si implica cunoasterea multimii de operatii posibile la care ia parte. In algoritmii informatici, variabilele sunt toate datele de intrare, datele de iesire (rezultatele finale ale problemei) si datele intermediare (acele date care corespund unor rezultate partiale ale problemei ce intervin in procese ulterioare pentru determinarea rezultatelor finale).
In anumite situatii, actiunea algoritmilor este indreptata asupra: fisierelor si a articolelor. Fisierul reprezinta o multime structurata si omogena de date si articolul este unitatea atomica a fisierului.
Obiectele pe care le utilizeaza un algoritm sunt supuse unor operatii de manipulare. Secventa de pasi descrisa de algoritm este parcursa intr-o anumita ordine dictata de operatiile de control. Cele doua categorii de operatii formeaza operatiile principale ale algoritmilor informatici:
Operatii de intrare-iesire permit introducerea in memoria sistemului de calcul (real sau virtual) a datelor de intrare si respectiv, redarea rezultatelor obtinute
Operatii de atribuire prin intermediul acestor operatii, unei variabile i se atribuie valoarea unei alte variabile, a unei constante sau rezultatul evaluarii unei expresii
Operatii de calcul sunt operatiile executate cu ajutorul expresiilor
Operatii de decizie conditioneaza executia unui operatii sau grupe de operatii in urma evaluarii unor expresii la valorile logice - adevarat, fals.
Operatii de apel permit apelul unei instructiuni sau a unui grup de instructiuni in vederea executarii acesteia de un numar finit de ori
Operatii de salt permit continuarea algoritmului dintr-un anumit punct al acestuia
Operatii auxiliare operatii specifice lucrului cu baze de date sau fisiere.
5. Descrierea algoritmilor. Scheme logice
Reprezentarea algoritmilor poate fi facuta in doua maniere:
grafic - prin intermediul schemelor logice
textual - prin intermediul unor limbaje standardizate (limbaj pseudocod, limbaj de programare)
Schemele logice sunt reprezentari grafice ale algoritmilor informatici construite pe baza unei multimi de simboluri grafice conectate prin intermediul sagetilor. Multimea de simboluri grafice si semnificatia acestora este prezentata in continuare:
Utilizarea corecta a simbolurilor grafice permite descrierea oricarui algoritm informatic. Se evidentiaza trei structuri fundamentale corespunzatoare: parcurgerii secventiale a unei succesiuni de pasi, ramificarii algoritmilor si executiei repetate a unei secvente de operatii. Cele trei structuri fundamentale sunt: structura secventiala, structura alternativa, structura repetitiva, si sunt descrise prin blocuri de simboluri logice astfel:
Denumire structura |
Reprezentare grafica |
Semnificatie |
Structura secventiala |
|
Executia secventiala a operatiilor descrise in simbolurile de calcul: S1, .Sn |
Structura alternativa |
|
Executa secventa S1 daca conditia Cond este adevarata SAU executa secventa S2 daca Cond este falsa |
|
Executa secventa S daca conditia Cond este adevarata SAU nu executa secventa S daca Cond este falsa. |
|
Structura repetitiva |
|
Structura repetitiva preconditionata: Cat timp conditia Cond ramane adevarata repeta executia secventei S |
|
Structura repetitiva postconditionata: Repeta executia secventei S cat timp conditia Cond ramane adevarata |
Observatie: Diferenta dintre structurile repetitive preconditionata si postconditionata consta in pozitia simbolului de decizie corespunzator etapei de verificare a conditiei de continuare a executiei blocului:
structura preconditionata presupune initial verificarea conditiei si apoi executia secventei
structura postconditionata presupune executia secventei si apoi verificarea conditiei
Aceasta diferenta va genera un numar minim de repetari a secventei S diferit pentru cele doua structuri: minim 0 executii pentru structura preconditionata si minim 1 executie a secventei in structura postconditionata, in situatia in care de la prima evaluare a conditiei aceasta este falsa..
6. Exemple de scheme logice
Exemplul 1 Algoritmul de determinare a solutiilor ecuatiei de gradul 2: . Rezolvarea problemei presupune tratarea celor 4 cazurilor identificate in functie de datele de intrare furnizate:
1. radacinile ecuatiei sunt reale
2. ecuatia de gradul II nu are radacini reale
3. ecuatia este de gradul I
4. ecuatia este imposibila
Exemplul 2. Algoritmul de determinare a produsului primelor n numere naturale.
Exemplul 3. Algoritmul de determinare a celui mai mare divizor comun a doua numere:
7. Pseudocod
Pseudocodul este un limbaj standardizat intermediar intre limbajul natural si limbajul de programare. Descrierea algoritmilor cu ajutorul limbajului pseudocod inlatura din neajunsurile utilizarii schemelor logice, fiind mult mai flexibil si natural decat acestea. In plus, descrierea in pseudocod permite convertirea cu usurinta a algoritmilor astfel exprimati intr-un limbaj de programare.
Limbajul pseudocod foloseste doua tipuri de propozitii:
1. Propozitiile standard: proprii limbajului pseudocod
2. Propozitiile ne-standard: acele propozitii ce descriu in limbaj uzual operatii ce urmeaza a fi detaliate, rafinate ulterior. Aceste propozitii sunt marcate prin simbolul #.
Exista o concordanta intre simbolurile grafice ale schemelor logice si propozitiile limbajului pseudocod. De asemenea, structurile fundamentale pot fi descrise prin propozitii proprii limbajului pseudocod.
Tabelul urmator prezinta concordanta dintre descrierea grafica si propozitiile pseudocod pentru operatii specifice algoritmilor:
Schema logica |
Pseudocod |
|
Algoritmul NUME-ALGORITM este: |
|
Sfarsit NUME-ALGORITM sau SfAlgoritm |
|
Citeste a1,a2,.,an |
|
Tipareste a1,a2,.,an |
Limbajul pseudocod, pentru a usura traducerea ulterioara a algoritmului in limbaj de programare, permite folosirea unei propozitii standard echivalenta uneia dintre instructiunile populare ale limbajelor de programare. Aceasta propozitie corespunde unei structuri repetitive cu numar cunoscut de repetari si se descrie astfel:
Schema logica |
Pseudocod |
|
Pentru var de la I la F cu pasul pas Executa S Sfarsit Pentru - structura ciclica cu numar cunoscut de repetari |
Tabelul urmator prezinta modul de descriere a structurilor fundamentale in pseudocod:
Structurile fundamentale |
Schema logica |
Pseudocod |
Limbaj natural |
Structura secventiala |
|
[Executa] S1 [Executa] Sn |
Executa secvential blocurile de calcul S1, S2,.Sn |
Structuri alternative |
|
Daca Cond atunci Executa S1 Altfel Executa S2 SfDaca |
Daca conditia este adevarata atunci se executa blocul S1, altfel se executa blocul S2. |
|
Daca Cond atunci Executa S Sf Daca |
Daca conditia este adevarata atunci se executa blocul S1. |
|
Structuri repetitive |
|
Cattimp Cond Executa S SfCattimp |
Cattimp conditia Cond este adevarata se repeta blocul S. |
|
Repeta Executa S Panacand Cond |
Se repeta blocul S pana cand conditia Cond devine adevarata. |
8. Probleme propuse spre rezolvare
Sa se descrie grafic si textual (pseudocod) algoritmul de rezolvare a problemei urmatoare:
Problema 1. Sa se citeasca un numar de n valori si sa se determine cea mai mica valoare citita.
Problema 2. Sa se rezolve sistemul de 2 ecuatii liniare cu 2 necunoscute.
Problema 3. Sa se citeasca n valori si sa se calculeze media aritmetica a acestora.
9. Exemple de algoritmi descrisi in pseudocod
Exemplul 1 Algoritmul de determinare a solutiilor ecuatiei de gradul 2: .
Algoritm EcuatieGradII este:
Citeste a, b, c
Daca a ≠ 0 atunci
Daca b ≠ 0 atunci
x = -c / b
Tipareste "Sol. Ec. grad I",x
Altfel
Tipareste "Imposibil de rezolvat"
SfDaca
Altfel
= b2-4ac
Daca 0 atunci
Tipareste x1,x2
Altfel
Tipareste "Radacini complexe"
SfDaca
SfDaca
Sfarsit EcuatieGradII
Exemplul 2. Algoritmul de determinare a produsului primelor n numere naturale.
Algoritm Factorial este:
Citeste n
P:=1
Pentru i de la 1 la n cu pasul 1
Executa P:=P * i
Sfarsit Pentru
Tipareste P
Sfarsit Factorial
Exemplul 3. Algoritmul de determinare a celui mai mare divizor comun a doua numere.
Algoritm Euclid este:
Citeste a,b
rest = a modulo b
Cattimp (rest ≠ 0)
Structura repetitiva preconditionata
a = b
b = rest
rest = a modulo b
Sfarsit cattimp
Tipareste b
Sfarsit Euclid
10. Subalgoritmi
O problema de dificultate sporita necesita uneori o impartire in subprobleme de dificultate mai mica in baza principiului divide et impera. Algoritmii de rezolvare a subproblemelor rezultate sunt mai usor de descris si vor constitui subalgoritmi ai algoritmului global de rezolvare a problemei considerate. Deseori se poate intalni situatia ca o anumita secventa de operatii sa fie executata de mai multe ori pentru date de intrare diferite. In aceste cazuri este utila construirea unui subalgoritm corespunzator secventei de operatii si apelarea acestuia in algoritmul global ori de cate ori este nevoie.
Subalgorimii sunt practic algoritmi care rezolva subprobleme ale unei probleme date. Acest lucru indica faptul ca orice subalgoritm verifica proprietatile de generalitate, finitudine, claritate, corectitudine ale algoritmilor informatici. Caracterul de generalitate va fi asigurat prin parametrizarea subalgoritmilor. Acestia vor primi la intrare nu datele de intrare ale problemei ci date intermediare ale problemei globale sau rezultate partiale din procesele de calcul. Iesirile subalgoritmilor sunt date pe care algoritmul general le va prelucra ulterior. Comunicarea dintre subalgoritm si algoritmul "parinte" se realizeaza prin intermediul parametrilor. In pseudocod sintaxa generala a unui subalgoritm este urmatoarea:
Subalgoritm NumeSubalgoritm ( lista parametrii formali)
.. // operatii asupra parametrilor din lista
Sfarsit NumeSubalgoritm
Apelarea unui subalgoritm din algoritmul apelant se face prin propozitia:
Cheama NumeSubalgoritm (lista parametrii actuali)
Lista parametrilor formali va contine nume generice ale datelor de intrare si datelor de iesire ale subalgoritmului. Lista parametrilor actuali contine numele datelor concrete care se doresc a fi transmise subalgoritmului si numele sub care se retin rezultatelor partiale ale subalgoritmului.
La apelul unui subalgoritm parametrii formali (generici) din lista se vor inlocui cu parametrii concreti (actuali).
Exemplu: Sa se descrie un algoritm de determinare a maximului dintre 4 valori date, evidentiind subalgoritmul de determinare a maximului dintre oricare doua valori.
Subalgoritm Maxim2(DI: x ,y; DE: Max)
Daca x>y atunci
Max=x
Altfel
Max=y
SfDaca
Sfarsit Maxim2
Apelul repetat al subalgoritmului, pentru diferiti
parametri actuali
Algoritm Maxim4 este:
Citeste a,b,c,d
Cheama(a,b; max1)
Cheama(c,d; max2)
Cheama(max1,max2 ; maxim)
Tipareste maxim
Sfarsit Maxim4
Rezolvarea problemelor cu ajutorul calculatorului presupune:
Modelarea matematica si alegerea metodei de rezolvare se imbina cu conceperea algoritmului rezultand ceea ce numim proiectarea programului. In faza de elaborare a algoritmului trebuie sa se tina seama de proprietatile fundamentale ale algoritmilor: generalitate, claritate, finitudine, corectitudine si eficienta. Calitatea implementarii software este dependenta de calitatea algoritmului elaborat. De aceea, faza de dezvoltare a algoritmului de rezolvare a unei clase de probleme trebuie abordata cu o deosebita atentie.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 6961
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved