Sunteți pe pagina 1din 12

1.Disciplina Algoritmica i programarea procedural.

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.

2.Forme de prezentare a algoritmilor. Exemple


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 Descrierea in practica a algoritmilor in limbaj natural sau cu ajutorul schemelor logice prezinta unele dezavataje. Astfel, prima este prea detaliata pentru gustul programatorilor si de aceea nu este acceptata decat in cazuri speciale, in care trebuie sa sustina in fata unor nespecialisti in informatica, solutia adoptata. Practica acceptata si alte metode de descriere, dintre care in ultima vreme s-au impus limbajele de prezentare a algoritmilor, numite si pseudocod.
In pseudocod subprogramele au urmatoarea forma generala: ANTET Secventa de instructiuni END ANTET poate fi de forma: PROGRAM nume_program PROCEDURE nume_procedura FUNCTIE nume_functie Apelul subprogramelor se face prin referirea de forma: Nume ( lista_parametrii ) sau prin intermediul unui cuvant cheie cum ar fi cuvantul CALL:

* * *

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.Simboluri grafice pentru operaiuni. Schema logic a algoritmului


Una din cele mai rspndite metode de reprezentare a algoritmilor este o metod de reprezentare grafic : metoda SCHEMELOR LOGICE . Simbolurile grafice folosite sunt : 1. Blocurile terminale - pun n eviden nceputul respectiv sfritul unui algoritm .

2. Bloc de intrare/ieire- pune n eviden D.I. , respectiv D.E. ale algoritmului .

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 .

4. Structura programului i structura funciei n limbajul C


In general, un program este un sir de instructiuni. In C/C++ programul este o functie numita main. Efectul instructiunillor din C/C++ este stabilit intr-un fisier numit stdio.h (h vine de la header). Acest fisier este incarcat implicit pentru a asigura buna functionare a programului. Daca dorim sa folosim instructiuni mai complexe (gen cin, cout) trebuie sa specificam si headerul care explica functionarea acestor instructiuni (iostream.h). De asemenea, trebuie sa stabilim ce variabile folosim, pentru a le putea aloca spatiu si a le da valori. Spre deosebire de alte limbaje, in C/C++ declararea variabilelor folosite poate fi facuta si pe parcursul executiei programului. Structura unui program C/C++ este urmatoarea

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

5.Algoritmi cu structur liniar i ramificat


Fie K un corp comutativ. Un algoritm liniar este un ansamblu format din: 1) 2) 3) o multime de nedeterminate a1,...,an ce nu apartin lui K, numite intrari; o multime finita de (nume de) variabile, distincte de intrari si de elementele lui K; o secventa finita de pasi de forma abc, unde: -

; a este o variabila care nu a aparut n pasii precedenti; ) n pasii

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

6.Algoritmi cu structur ciclic. Ciclu precondiionat i postcondiionat


Problemele rezolvate cu ajutorul SC necesit parcurgerea repetat a unor grupuri de instruciuni de calcul i de decizie. Pentru o programare mai convenabil n limbajele de programare s-au definit structurile repetitive n toate limbajele de programare sunt definite trei structuri tip pentru secvena repetitiv(fig.4a,4b i 4c): structura cu, contorizare; structura cu test iniial (anterior); structura cu test final (posterior).

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

7.Algoritmi cu structura ciclic. Ciclu cu contor i cu eveniment


Aceast structur este avantajoas pentru rezolvarea problemelor n care se cunoate cu exactitate numrul de parcurgeri (pai) repetate ale instruciunilor din corpul ciclului. Se pot defini structuri repetitive controlate de un singur contor( bucl simpl) sau de dou sau mai multe contoare(cicluri suprapuse).Structurile cu contorizare sunt folosite n special n problemele care prelucreaz tablouri de date. n figura 5 este reprezentat structura repetitiv cu contorizare simpl.

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

8.Variabile i clasificarea lor. Declararea i iniializarea variabilelor


Variabilele sunt locaii de memorie n care sunt memorate valorile. Fiecare are un nume, un tip i o valoare. nainte de a utilize o variabil, aceasta trebuie declarat. Dup ce aceasta a fost declarat, i se poate ataa o valoare. Java opereaz cu trei tipuri de variabile: variabile de instan, variabile de clas i variabile locale. Variabilele de instan sunt utilizate pentru definirea atributelor unor obiecte particulare. Variabilele de clas sunt similare variabilelor de instan, cu observaia c acestea se aplic tuturor claselor de instane, fr a avea valori diferite de la obiect la obiect. Variabilele locale sunt declarate i utilizate n interiorul definiiei metodei, spre exemplu pentru numrarea unor cicluri, unor variabile temporare sau memorarea unor variabile utilizate numai n interiorul definiiei metodei.Odat ce metoda i termin execuia, respectivele variabile i nceteaz existena. Variabilele locale sunt utilizate pentru stocarea informaiilor necesare unei singure metode, n timp ce variabilele de instan vor memora datele necesare mai multor metode din cadrul unui obiect. Prin urmare declararea variabilelor fiind aproximativ identic, diferena dintre variabilele de clas, variabilele de instan i variabilele locale se datoreaz numai duratei de existen a acestora. Declararea Variabilelor Pentru a utiliza o variabil n Java, va trebui ca aceasta s fie iniial declarat. Declararea unei variabile const n declararea tipului acesteia i apoi a numelui variabilei: int varstaMea; String numeleMeu;

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

9.Structura de date i tipul de date. Tipuri de date predefinite


n informatic, o structur de date este o metod sistematic de stocare a informaiilor i datelor ntr-un calculator, n aa fel nct ele s poat fi folosite n mod eficient. Deseori o alegere bine fcut a structurii de date va permite i implementarea unui algoritm eficient. Structura de date aleas este derivat de multe ori dintr-un tip de dat abstract. O structur de date bine conceput permite efectuarea unei varieti de operaii de

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.

10.Tipuri de date de baz. Modificatori de tip


1.3 Modificatori de tip Modificatorii de tip schimb domeniul de valori pe care le poate lua o variabil de tip int sau char. Aceti modificatori sunt: unsigned. La utilizarea acestui modificator, valorile variabilelor sunt pozitive. Toi biii sunt bii ai numrului. De exemplu, tipul unsigned int are domeniul de valori *0 231), iar tipul unsigned char are domeniul de valori *0 28) , signed. Valorile variabilelor sunt numere cu semn. Primul bit este bit de semn, 6 short. Acest modificator se aplic tipului int. De exemplu, tipul short int are domeniul de valori [-215 215), iar tipul unsigned short int are domeniul de

valori *0 216). Tipul wchar_t este tipul unsigned short int predefinit. long

11.Tipuri de date derivate. Tablouri i pointeri


Programul si datele sale sunt pastrate in memoria RAM ( Random Access Memory ) a calculatorului. Definitie: Un pointer este o variabila care pastreaza adresa unei date, nu valoarea datei. Un pointer poate fi utilizat pentru referirea diferitelor date si structuri de date. Schimband adresa memorata in pointer, pot fi manipulate informatii situate la diferite locatii de memorie. Pointerii permit de asemenea crearea de noi variabile in timpul executiei programului, prin alocare dinamica. In declaratia unei variabile pointer se foloseste operatorul de indirectare *: tip_referit * var_pointer; //* este operator de indirectare Initializarea cu adresa unei variabile: tip_referit var,* var_pointer; var_pointer=&var; Valoarea de la adresa indicata de pointer: *var_pointer// este de tip_referit Spatiul ocupat de o variabila pointer: sizeof(var_pointer) // valoarea expresiei este 2 ( in modelul small ), oricare ar fi tip_referit // expresile de mai jos conduc la aceeasi valoare 2 sizeof(&var) sizeof(tip_referit *)

12.Instruciunea condiionat if-else

S-ar putea să vă placă și