210 likes | 411 Vues
Subprograme. Ce este un subprogram …. Este o secven ţă de instruc ţ iuni care rezolv ă o anumit ă sarcin ă . Un subprogram poate fi lansat î n execu ţ ie ori de c â te ori este nevoie.
E N D
Ce este un subprogram… • Este o secvenţă de instrucţiuni care rezolvă o anumită sarcină. • Un subprogram poate fi lansat în execuţie ori de câte ori este nevoie. • Un subprogram poate fi apelat din programul principal, din alt subprogram, sau chiar autoapelat (subprograme recursive)
De ce sunt utile subprogramele ?! • Pentru că uneori o secvenţă de instrucţiuni (o parte dintr-un algoritm) se repetă. • Rezolvarea unei anumite sarcini este necesarăîn mai multe programe, şi astfel se ajunge la reutilizarea codului sursă. • Orice problemă poate fi descompusăîn subprograme, metoda de proiectare numindu-seproiectare Top-Down.
Avantajelefolosiriisubprogramelor… • Subprogramelesuntconcepute independent de restulaplicaţiilor, acestlucrucrescândportabilitateaprogramelor. • Elaborarea algoritmilor devine mai simplă şi mai uşor de înţeles • Subprogramele permit dezvoltarea rapidă a aplicaţiilor complexe, prin reutilizarealor >>
Avantajelefolosiriisubprogramelor… • Datorită faptului că un program poate fi descompus în mai multe subprograme care pot fi concepute de mai mulţi programatori se favorizează lucrul în echipă, iar fiecare subprogram poate fi reutilizat de câte ori este nevoie . • O aplicaţie poate fi mai uşor modificată la nivelul subprogramului, decât în cadrul intregii aplicaţii
Alcatuire: • a) Antetul Subprogramului b) Corpul Subprogramului -> Partea Declarativa -> Partea Executiva <antetulsubprogramului> <declaratiipropriisubprogramului> <instructiuniproprii subprogramului>
Clasificarea subprogramelor: • În funcţie de: 1)modalitatea de apel subprogrameapelateca: a) instructiuni– subprograme de tip procedură b) operanzi – subprograme de tip funcţie 2) autorul subprogramului a) Subprograme de sistem (predefinite) b) Subprogrameutilizator
Identificaţi asemănările şi diferenţele între funcţii şi proceduri ! Identificarea componentelor subprogramelor… Function F(lista_parametrilor_formali): tip_rezultat; Var lista_variabile_locale; Begin ... F:=expresie; End; Apelul se face prin: v:=F(lista_parametrilor_actuali); write(F(lista_parametrilor_actuali)); Procedure P(lista_parametrilor_formali); Var lista_variabile_locale; Begin ... End; Apelul se face prin: P(lista_parametrilor_efectivi);
Parametri de comunicare se folosescpentru a realiza legăturaîntre module. După rolul lor în procesul de comunicare, se clasifică în: Parametri de intrare:sunt date care urmează să fie prelucrate de subprogram (SP) şi care îi suntcomunicate de cătremodululapelant (P),P SP Parametri de ieşire: suntrezulateobţinute de subprogram în urmaprelucrăriişi pe care le comunicămodululuiapelant. Modululapelant le primeşte dupăcesubprogramulîşi terminăexecuţia: SP P Parametri de intrare-ieşire: sunt date care participă la calcululdatelor de ieşire şi suntaccesibile atât modululuiapelant, cât şi modululuiapelat. Valoarelorpoate fi modificată atât de subprogram cât şi de modululapelant: P SP
Clasificarea parametrilor 1. după locul în care sunt declaraţi: • Formali– sunt parametri scrişi în antetul subprogramului; • Actuali– sunt parametri scrişi la apelul subprogramului 2. după modul de transmitere: • Prin valoare – sunt parametri de intrare; modificarea valorii lor nu se transmite în modulul apelant • Prin adresă – sunt parametri de ieşire sau de intrare-ieşire; modificările valorilor lor se păstrează în modulul apelant
Reguli de folosire a parametrilor • Parametri actuali (de la apel) trebuie să corespundă ca număr, tip de dată şi ordine cu parametri formali (scrişi în antet) Ex: function suma(a,b:integer):integer; • Parametri actuali corespunzători parametrilor formali transmişi prin valoare pot fi: • variabile sau expresii de tipul declarat al parametrului formal • Parametri actuali transmişi prin adresă nu pot fi decât variabile de tipul declarat al parametrului
----------------------------------------------------------------------- suma(a,b); --------------------------------------------------------------------------------------------- suma(2,3); ---------------------------------------------------------------------- • Transferulparametrilorprin valoare • x a • y b • x 2 • y 3 • parametriactualiregula deparametriformali • corespondenţă ------------------------------------------------------------------------------------ proceduresuma (x,y: integer) ;------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------- schimba(a,b); -------------------------------------------------------------------------------------------- schimba(2,3); -------------------------------------------------------------------- • Transferul parametrilor prin adresă • x a • y b • parametri actuali regula de parametri formali • corespondenţă ---------------------------------------------------------------------------------- procedureschimbă (var x,y: integer) ;------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Criteriipentruclasificareavariabilelor de memorie Domeniul de vizibilitate Reprezintăzona din program în care estepermisaccesul la variabilă (textul programului) Durata de viata Reprezintaperioada de timp in care variabilei i se alocaspatiu in memorie (la rularea programului) -> variabileglobale– tot progaramul -> variabile locale – doarsubprogramulîn care au fostdeclarate -> variabilelocale– durata de executie a blocului in care au fostdeclarate; -> variabile cu duratastatica– durata de executie a programului; -> variabiledinamice– durata de alocare a memoriei in timpulexecutieiprogramului
Utilizareastivei de cătreprograme În timpul rulării unui program memoria este împărţităîn 4zone astfel : • Zona de date – aici sunt memorate variabilele globale. • Zona stack (stiva sistemului de operare) – aici se lucrează pe durata întregului subprogram, se păstrează temporar informaţii despre subprogramul apelant. Aceste informaţii sunt introduse în stivă (zona stack) atunci când este apelat subprogramul. • Zona de cod – în aceasta zonă se codifica instrucţiunile programului principal. • Zona HEAP * – aici se memorează variabilele alocate dinamic, prin intermediul pointerilor (pointerii vor fi studiaţi într-un alt capitol)
Etapele executate la apelarea subprogramului sunt urmatoarele : • a) Se intrerupe executia modului apelant. b) Se pregateste stiva sistemului astfel : 1) se introduce adresa de revenire in modul apelant; 2) se introduc valorile parametrilor cu care a fost apelat subprogramul; 3) se rezerva spatiu pentru variabilele locale declarate in subprogram. c)Se lanseaza in executie codul executabil al subprogramului apelat.
Etapele executate la terminarea subprogramului : • Se efectuează în ordinea inversă de la apel: • Se elibereaza din stivaspatiul ocupat de variabilele locale si de parametrii; • Se extrage din stiva adresa de revenire in modulul apelant; • Se continua executia cu instructiunea de la adresa extrasa din stiva.
Aplicaţii • Scrieţi o procedură care interschimbă valorile a două variabile a şi b transmise ca parametri. • Se citesc două numere naturale a şi b. Stabiliţi dacă a şi b au aceeaşi sumă a cifrelor. În caz afirmativ, se va tipări suma cifrelor, iar în caz contrar, se vor tipări cele două numere împreună cu suma cifrelor în ordine crescătoare a sumei. În program veţi folosi o funcţie care returnează suma cifrelor unui număr transmis ca parametru de intrare. • Se citesc două numere naturale a şi b. Stabiliţi dacă a şi b au acelaşi produs al cifrelor. În caz afirmativ, se va tipări produsul cifrelor, iar în caz contrar, se vor tipări cele două numere împreună cu produsul cifrelor în ordine crescătoare a produsului. În program veţi folosi o funcţie care returnează produsul cifrelor unui număr transmis ca parametru de intrare.
Diagrama vreau/ştiu/pot • Aranjaţi noţiunile din listă în coloana corespunzătoare: • subprogram, procedură, funcţie, parametru formal, parametru actual, transmitere prin valoare, transmitere prin adresă, apel de funcţie, apel de procedură, variabilă globală, variabilă locală, domeniu de vizibilitate, durata de viaţă a variabilelor, zona stivei sistemului