Sunteți pe pagina 1din 6

Lucrarea nr.

1 Programarea calculatoarelor/Subprogramele
Programarea calculatoarelor

Subprogramele
Acum se concepe dezvoltarea unei aplicaii numai folosind subprograme. Un subprogram este o entitate de sine stttoare, care concentreaz o prelucrare cu caracter repetitiv. Nu se scriu subprograme pentru prelucrri care nu vor mai fi realizate i cu alte prilejuri. Subprogramul are un nume sugestiv, uor de manevrat, fr a fi definite mai multe subprograme diferite ca prelucrare cu nume avnd coeficient de similitudine peste un prag considerat limit superioar. Spre exemplificare, se consider urmtoarea list de subprograme: read_file() subprogram care citete un articol dintr-un fiier; update_file() subprogram pentru actualizarea unui fiier; write_file() subprogram pentru scrierea unui articol ntr-un fiier; addmat() subprogram care adun dou matrice; prodmat() subprogram care nmulete dou matrice; copymat() subprogram pentru copierea unei matrice ntr-o alt matrice; initmat() subprogram care iniializeaz o matrice cu o constant; sort_file() subprogram pentru sortarea fiierelor; sort_vect() subprogram pentru sortarea elementelor unui vector; concat_vect() subprogram care concateneaz doi vectori; concat_lists() subprogram care concateneaz dou liste simple; concat_listd() subprogram pentru concatenarea dou liste duble; concat_nlists() subprogram pentru concatenarea a n liste simple; concat_nlistd() subprogram care concateneaz n liste duble; concat_nvect() subprogram care concateneaz n vectori.

Analiza comparat a complexitii entitilor text generate prin tehnici de programare

Subprogramele conin n construciile lor: liste de parametri formali n care se regsesc operanzii care fac obiectul prelucrrii, operanzii ce conin rezultatele i variabile ce conin informaii privind modul n care s-au efectuat prelucrrile; listele fixe de parametri au aceeai structur i lungime, indiferent de numrul apelurilor; listele variabile au att tipuri diferite de parametrii, ct i numr variabil;

Botnaras Ion

Pa

Lucrarea nr. 1 Programarea calculatoarelor/Subprogramele instruciuni care asigur revenirea n programul apelator, return; este preferabil s se construiasc subprograme care conin o singur instruciune return, folosind fie compuneri de expresii, fie o variabil de control utilizat ulterior; instruciuni repetitive pentru a asigura traversarea structurilor de date omogene (masiv, list, arbore, fiier), dac pentru evaluarea de expresii acest lucru este necesar; instruciuni de iniializare pentru variabile care i modific coninutul n vederea returnrii de rezultate care vor fi utilizate n programul apelator; programul apelator este i el tot un subprogram; int main() este, de asemenea, un subprogram, aa cum ntr-un arbore binar, rdcina este tot un nod; un tip de rezultat care se returneaz; n cazul n care lista rezultatelor returnate este vid, tipul subprogramului este void.

Forma general a unui subprogram este:


tip_rezultat nume_subprogram( list_parametrii_formali ) { definiri variabile locale subprogramului instruciuni de prelucrare return ( expresie )

Este de dorit ca subprogramele s fie nzestrate cu un grad nalt de generalitate pentru a permite refolosirea lor ori de cte ori e nevoie. Testarea sistematic a subprogramelor le d un nivel de corectitudine care genereaz ncrederea utilizatorilor n a le ncorpora n programele proprii. Exist mai muli termeni care desemneaz acelai lucru: proceduri, subprograme, funcii; sunt concepte prin care, de regul, se nelege o construcie independent n raport cu un context, care se refer i care permite efectuarea de prelucrri ale cror efecte sunt utilizate ulterior.
Programarea calculatoarelor

Pentru evaluare expresiei:


n

=x
i=1

se scriu mai multe forme de subprograme, care difer dup cum sunt transmii parametrii. n textul surs:
int suma ( int x[], int n ) { int s, i; for ( s = 0, i = 0; i < n ; i++ ) { s += x[i]; } return s; }

Botnaras Ion

Pa

Lucrarea nr. 1 Programarea calculatoarelor/Subprogramele subprogramul returneaz rezultatul. n textul:


void suma ( int x[], int n, int* ps ) { int i; *ps = 0; for ( i = 0; i < n; i++ ) { *ps += x[i];

rezultatul se regsete n zona de memorie a crei adres se afl n variabila pointer ps. Faptul c lista de parametri include o mare diversitate de tipuri de date, inclusiv pointeri spre funcii, subprogramele devin cu grad de generalitate foarte mare. n loc s se scrie, de exemplu, dou subprograme pentru a gsi elementul minim, respectiv elementul maxim dintr-un ir, se va scrie un singur subprogram ce are n lista de parametri o funcie ce returneaz evaluri diferite de expresii condiionale, care vor determina aciuni diferite n cadrul subprogramului. Subprogramele trebuie s fie generale att prin dimensiunea problemelor de rezolvat, ct mai ales prin cuprinderea a ct mai multor cazuri care definesc clasa de probleme rezolvat. n programarea orientat obiect problematica tipului de rezultate returnate i a tipurilor de variabile din lista de parametrii se soluioneaz prin construcii de tip template. Limbajele de programare dispun de numeroase modaliti de transmitere a parametrilor, dintre care transmiterea prin valoare,
Analiza comparat a complexitii entitilor text generate prin tehnici de programare

transmiterea prin adrese i transmiterea prin referin, sunt cele mai frecvent ntlnite. Este rezonabil cunoaterea n detaliu a acestor mecanisme pentru a nelege efectele. Dac n cazul transmiterii prin valoare operarea pe variabilele asociate parametrilor subprogramului este local n raport cu domeniul definit de subprogram, n celelalte cazuri aceste operaii conduc la modificarea coninutului zonelor de memorie asociate parametrilor formali, la nivelul subprogramului apelator. Subprogramele nu conin operaii de intrare/ieire, pentru a li se asigura un nalt grad de generalitate i mentenabilitate. Ele primesc datele de intrare prin intermediul listei de parametrii i ofer rezultate fie prin parametrii din list, fie prin valoarea returnat de subprogram, fie prin amndou modalitile.

1.5 Instruciunea GOTO


Aceast instruciune a fost mrul discordiei de-a lungul timpului pentru programatori. Ea nseamn salt necondiionat spre o

Botnaras Ion

Pa

Lucrarea nr. 1 Programarea calculatoarelor/Subprogramele instruciune a crei etichet este specificat. Salturile napoi revin la situaiile n care eticheta e1 spre care se efectueaz saltul necondiionat precede instruciunea GOTO.oi Salturile nainte revin situaiilor n care etichetele e2 i e3 ale instruciunilor spre care se efectueaz saltul urmeaz instruciunilor GOTO, figura 1.5.

Botnaras Ion

Pa

Programarea calculatoarelor

Figura 1.5 Instruciune salt nainte Dac se asociaz un graf unui program i se include ntr-o matrice instruciunile precedente i instruciunile urmtoare, n cazul unei structuri liniare, figura 1.6, matricea include asteriscuri numai deasupra diagonalei principale:
o-o I2 -o

I. Figura 1.6

I4

Structur liniar Figura 1.7 Matricea de preceden a instruciunilor n cazul includerii n program a instruciunilor de salt necondiionat, matricea precedenelor devine mult mai complex. Pentru programul al crui graf este dat n figura 1.8, rezult matricea de preceden, din figura 1.9.

Analiza comparat a complexitii entitilor text generate prin tehnici de programare

Figura 1.9 Matricea de preceden asociat programului cu salturi mixte Programarea modular exclude apariia instruciunii GOTO, dei la nivelurile de programare n limbaj de asamblare este evident c nici o structur de control nu se implementeaz fr a folosi aceast instruciune. Sunt situaii n care optimizarea programelor impune o alt abordare care s elimine salturile necondiionate ntre componente aflate n segmente diferite. Programarea calculatoarelor se definete ca meserie ce folosete resurse, iar eficiena sa este cu att mai mare cu ct procesul de alocare i nivelare a acestor resurse este mai aproape de nivelul optim. Limbajele, subprogramele, instruciunile, tehnicile de programare sunt resurse, nivelarea i alocarea lor o efectueaz programatorul.

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