Documente Academic
Documente Profesional
Documente Cultură
Noiunea de algoritm
Programarea procedural poate fi, uneori, folosit ca un sinonim pentru programare imperativ (specificnd msurile programului trebuie s ia pentru a ajunge la starea dorit), dar se poate referi, de asemenea, (la fel ca n acest articol), ntr-o paradigm de programare, derivat din programarea structurat, bazat pe conceptul de apel de procedur. Proceduri, de asemenea, cunoscut sub numele de rutine, subrutine, metode, sau funcii (a nu se confunda cu funcii matematice, dar similare cu cele utilizate n programarea funcional), conine pur i simplu o serie de pai de calcul care urmeaz s fie efectuate. Orice procedura dat ar putea fi numit n orice moment n timpul execuiei unui program, inclusiv prin alte proceduri sau ea nsi. O list de instruciuni care spune un calculator, pas-cu-pas, ce s fac, de regul cu un ordin de execuie liniar de la prima declaraie a doua i aa mai departe, cu bucle ocazionale i ramuri. Limbi procedurale de programare includ C, C + +, Fortran, Pascal, i de baz. *1+ Modularitatea este, n general, de dorit, mai ales n programe mari, complicate. Intrri sunt, de obicei, specificate punct de vedere sintactic, sub form de argumente i ieirile livrate ca valori de returnare. Definire a domeniului este o alta tehnica care ajuta la mentinerea procedurilor puternic modular. Acesta previne procedura de accesare a variabile de alte proceduri (i vice-versa), inclusiv cazuri anterioare de sine, fr o autorizaie explicit. Proceduri mai puin modulare, de multe ori folosite n programe mici sau mai repede n scris, au tendina de a interaciona cu un numr mare de variabile din mediul de executie, care s-ar putea modifica alte proceduri, de asemenea,. Datorit capacitii de a specifica o interfa simpl, s fie de sine stttor, i care urmeaz s fie reutilizate, procedurile sunt un vehicul convenabil pentru a face buci de cod scrise de persoane diferite sau grupuri diferite, inclusiv prin bibliotecile de programare.
Un algoritm reprezinta o succesiune de calcule care, plecand de la conditii initiale cunoscute si cu ajutorul unor operatii efectuate mecanic fara aportul creator al omului, permite obtinerea solutiilor unor probleme dintr-o anumita clasa. Altfel spus, un algoritm este un sistem de reguli care utilizand un set de date initiale ale unei probleme, dupa executia unui numar finit de pasi, faciliteaza obtinerea datelor finale, trecand printr-un sir de rezultate intermediare. Un algoritm nu este aplicabil oricaror date initiale; o data initiala pentru care se poate aplica un algoritm se numeste data sau informatie admisibila. Un algoritm trebuie sa satisfaca in general urmatoarele cerinte: a) claritate - descrierea algoritmului trebuie sa se faca precis, fara nimic arbitrar, fara ambiguitati si sa fie prevazute toate etapele de calcul si toate situatiile care se pot ivi pana la obtinerea solutiei; b) generalitate - algoritmul trebuie sa permita rezolvarea de probleme dintr-o intreaga clasa; c) finititudine - algoritmul trebuie sa furnizeze rezultatele intr-un numar finit (cat mai mic) de pasi; d) unicitate - etapele algoritmului trebuie sa fie definite in mod unic.
Operatiile de baza care apar intr-un algoritm sunt urmatoarele: operatii de intrare/iesire - datele de intrare se citesc, iar datele de iesire se afiseaza (se tiparesc); operatii de atribuire - unei variabile i se atribuie valoarea unei expresii; operatii de decizie - se determina valoarea de adevar a unei expresii logice si, functie de rezultatul obtinut, se ramifica rezultatul algoritmului.
* * *
CALL nume_procedura ( lista_parametrii ) Exista posibilitatea reluarii repetate a unui pas sau grup de mai multi pasi in interiorul unui aloritm; aceste procee repetitive pot fi definite ca iterative sau recursive. Iterativitatea este procesul prin care rezultatul este obtinut prin executia repetata a uui set de operatii, de fiecare data cu alte valori de intrare. Recursivitatea reprezinta un proces repetitiv prin care rezultatul de la un anumit pas se determina pe baza unuia sau mai multor rezultate obtinute in pasii anteriori. Scheme logice Schema logica este o forma de prezentare a algoritmului si a modului de lucru al acestuia sub forma grafica, folosind diferite simboluri grafice. Se stie ca in practica programarii se acorda o importanta deosebita realizarii schemelor logice in perioada de debut, astfel ca dupa o anumita experienta in domeniu, se incearca tot mai des renuntarea la aceasta importanta etapa a proiectarii. Figurile geometrice folosite la realizarea schemelor logice se numesc simboluri sau blocuri. Principiile ralizarii schemelor logice: orice schema logica incepe cu blocul START dupa START, daca e necesar si daca sunt date de intrare, se citesc datele de intrare. Dupa terminarea activitatii unui bloc de prelucrare, incepe activitatea blocului imediat urmator. Dupa terminarea activitatii unui bloc de decizie isi incepe activitatea blocul conectat la iesirea corespunzatoare conditiei adevarate, in cazul unui bloc simplu, cu doua iesiri, se executa blocul conectat la DA daca este adevarata conditia specificata si blocul conectat la NU in caz contrar. Schema logica isi inceteaza activitatea la blocul STOP.
3. Bloc de calcul - pune n eviden operaiile aritmetice i transferul de valori ntre diferite date ale algoritmului . Bloc de procedur
4. Bloc de decizie pune n eviden puncte de ramificaie ale algoritmului . n interiorul blocului se scrie o condiie i n funcie de ndeplinirea sau nendeplinirea acesteia se va continua pe ramura cu da,, sau pe ramura cu nu,,. da
nu
5. Conector- arat punctele de intersecie dintre ramurile unui algoritm . 6. Sgeata indic un drum posibil de urmat n schema logic .
//acesta este un comentariu; el nu influenteaza programul //declararea headerelor #include <iostream.h> //declararea variabilelelor .... //programul principal
int main() { // instructiunile programului .......... return 1;} //aici se incheie programul
In exemplul urmator (citirea a doua valori si afisarea sumei lor) trebuie sa observati: 1. orice program are trei parti: 2. citirea datelor initiale si initializarea variabilelor necesare 3. prelucrarea datel;or (programul propriuzis) 4. afisarea rezultatelor Puteti observa de asemenea:
cum se declara o variabila cum se foloseste o constanta text (sir de caractere) cum se citeste o data cum se afiseaza un sir de caractere, constante, variabile si expresii cum putem schimba valoarea unei variabile
- b si c sunt fie intrari, fie variabile ce au primit valoare (au aparut n st 151h76b nga semnului precedenti. Vom scrie prescurtat ab si a-b n loc de a0+b, respectiv a0-b. Algoritmii liniari se executa pas cu pas, ncepnd cu primul si terminnd cu ultimul.
Acestia se numesc algoritmi cu ramificatii. Foarte multi algoritmi executa anumite calcule in functie de satisfacerea unor conditii. Aceste calcule sunt redate de structura alternativa prezentata in figura 1. 3. 1. b, careia ii corespunde propozitia Pseudocod DACA cond ATUNCI A ALTFEL B SFDACA Aceste propozitii redau in Pseudocod structura alternativa de calcul. Ele cer mai intai verificarea conditiei scrise dupa cuvantul DACA. In caz ca aceasta conditie este adevarata se va executa grupul de propozitii A. In cazul in care aceasta conditie este falsa se va executa grupul de propozitii B, daca este prezenta ramura ALTFEL. Indiferent care dintre secventele A sau B a fost executata, se va continua cu propozitia urmatoare propozitiei DACA. SFSELECTEAZA structura echivalenta cu urmatorul text Pseudocod: DACA i=v1 ATUNCI A1 ALTFEL DACA i=v2 ATUNCI A2 ALTFEL DACA i=vn ATUNCI An SFDACA SFDACA SFDACA Cu propozitiile prezentate pana aici putem deja descrie destui algoritmi. Acestia se numesc algoritmi cu ramificatii.
Exist algoritmi repetitivi pentru care utilizatorul nu poate aprecia numrul de repetri(reluri)a secvenei ciclice . n aceste cazuri pentru controlul interpretrii secvenei ciclice este necesar s se defineasc o variabil de control i o expresia relaional. Dup modul n care este amplasat condiia de test se definesc secvene ciclice cu test iniial respectiv final. Comparativ cu structura cu contorizare ,n acest caz trebuiesc respectate urmtoarele condiii:
- este necesar iniializarea explicit,prin program, a variabilelor care alctuiesc condiia de test. n caz contrar se va interpreta coninutul locaiei de memorie rezervate respectivei variabile ( v. i lucr. de lab. nr. 1), ceea ce va compromite executarea respectivei secvene ciclice; pe parcursul ciclului trebuie s existe cel puin o instruciune prin care se recalculeaz valorile acestor variabile.n caz contrar secvena repetitiv poate deveni un ciclu infinit; - exist posibilitatea ca instruciunile din corpul ciclului s nu fie parcurse nici mcar o singur dat. Algoritmii repetitivi cu test iniial sunt specifici problemelor de: aritmetica numerelor(divizibilitate, transformri de baz, etc) sau de validare a datelor de intrare. n fig. 5 se reprezint pseudocodul i organigrama unei secvene repetitive cu test anterior.
a) pseudocod
b) organigram
Structura repetitiv cu test posterior (final) se deosebete de varianta anterioar numai prin aceea c instruciunile din corpul ciclului sunt executate cel puin o dat. Acest tip de algoritm este folosit n special de algoritmi specifici metodelor numerice( determinarea soluiei reale a unei ecuaii transcendente, calculul valorii radicalului,determinarea valorii unei serii cu numr infinit de termeni etc). n figura 6 se reprezint instruciunea repetitiv cu test anterior n pseudocod i organigram 7a Pseudocod 7b organigram
5a pseudocod
5b organigrama Fig. 5
Structura repetitiv cu contorizare are urmtoarele elemente: - o variabil contor i de preferin cu valori ntregi; - un interval nchis ( [iiniial , ifinal]); - condiia de test; - subblocul aciune 1 care conine instruciunile care se repet; - ipas reprezint pasul cu care se va modifica variabila i dup fiecare ciclare.De regul ipas = 1 (incrementare / decrementare).n acest caz valoarea ipas=1 nu este reprezentat exlicit n pseudocod(fig.5.a). Interpretare: - se iniializeaz variabila cu valoarea iiniial; - se verific condiia de test
i [i initial , i final ] ;
- dac testul are valoarea DA(adevrat) se execut aciune 1; - se modific valoarea variabilei i cu pasul ales;
- se revine automat al verificarea testului; - pentru valoarea NU(fals) a testului se ncheie secvena repetitiv , iar programul se continu cu instruciunea imediat urmtoare structurii ciclice(aciune 2). Obs. executa. - instruciunile de iniializare, cretere i verificare a contorului sunt incluse automat n program de ctre SC.Deci, dei sunt reprezentate n algoritm, aceste instruciuni nu apar explicit n programul de calcul; - introducerea de ctre programator a unor instruciuni de modificare a contorului duce la o execuie eronat a testului, nesemnalizat de ctre SC; - acelai efect l are includerea n algoritm a condiiei de test printr-o instruciune de decizie. Instruciunea este cu test anterior; dac i nu aparine intervalului ales, instruciunile din corpul buclei (aciune 1) nu se vor
boolean plictisit; Definirea variabilelor poate fi realizat oriunde n cadrul definiiei metodei. Localizarea definirii variabilelor este realizat n general la nceputul definiiei metodei: public static void main (String args[]) { int numar; String titlu; boolean obosit; ... } Modul de aranjare a declarrii variabilelor poate fi fcut pe o singur linie, relative la variabilele de acelai tip: int x, y, z; String preNume, numeFamilie; Totodat fiecare variabil poate fi i iniializat: int varstaMea, varstaTa, varstaLui = 20; String numeleMeu = "Alin"; boolean obosit = true; int a = 4, b = 5, c = 6; Dac sunt mai multe variabile pe o aceeai linie cu o singur iniializare, aceast iniializare se va aplica numai la ultima variabil din declaraie. Iniializarea mai multor variabile prin valori diferite se realizeaz prin separatori de tip virgul. Variabilele locale trebuie iniializate nainte de a fi utilizate, n caz contrar acestea vor genera o eroare de compilare. Pentru a prentmpina acest tip de eroare se recomand iniializarea acestor variabile. Variabilele de instan i cele de clas nu au astfel de restricii. (Valorile de iniializare depend de tipul de variabil: null pentru instanele unri clase, 0 pentru variabilele numerice, '\0' pentru caractere i false pentru variabile logice.)
baz, utiliznd puine resurse (ca de exemplu memoria necesar i timpul de execuie). Structurile de date se implementeaz utiliznd tipuri de date, referine i operaii asupra acestora, toate facilitate de ctre un limbaj de programare. Exist mai multe definiii posibile pentru tipurile de date, din mai multe perspective. O privire global definete simultan att tipurile de date ct i operaiile care se pot face cu ele, pentru c acestea sunt de fapt cele dou faete ale unei aceleiai monezi: nu pot exista una fr cealalt. Noi vom trata cele dou subiecte pe rnd i n mod inegal, acordnd o oarecare prioritate tipurilor de date. Astfel, n cea mai simpl accepiune posibil, un tip de date nu este altceva dect o mulime de valori. Ce este o valoare? Nu are nici o importan! Este un nume special dat elementelor care aparin unui tip. Termenul ``aparin'' este justificat, pentru c, reinei, tipul este o mulime, n cel mai precis sens matematic. Exemple? n Pascal tipul boolean este o mulime cu dou elemente. Aceste dou elemente se noteaz n Pascal cu false i true. False i true se numesc de aceea valori booleene. Tipul integer este tot o mulime care include, printre altele, nite elemente (valori) care n Pascal se noteaz cu -2, -1, 0, 1, 2, 3 etc. Tipul integer este un tip interesant, pentru c i propune s mimeze mulimea matematica Z a numerelor ntregi, dar nu reuete prea bine, pentru c mulimea integer este finit, iar Z nu! Care sunt limitele mulimii integer nu se specific. n dialectul Turbo Pascal (cel mai rspndit pe PC-uri) integer are 65536 de elemente, de la cel notat -32768 la cel notat 32767. Elementele tipului integer sunt numite valori ntregi (sau mai precis integer values). Dac ai citit textul de mai sus cu atenie ai observat c ne-am ferit s spunem ca false este un element (valoare) boolean. Am spus false este o notaie (o reprezentare) a unui element boolean! De aici ncolo nu vom mai fi att de scrupuloi; dealtfel cele dou noiuni (element i reprezentare) se pot adesea interschimba fr ambiguitate.
valori *0 216). Tipul wchar_t este tipul unsigned short int predefinit. long