Upload
duncan-bernard
View
21
Download
0
Embed Size (px)
DESCRIPTION
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. - PowerPoint PPT Presentation
Citation preview
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)
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-se proiectare Top-Down.
Subprogramele sunt concepute independent de restul aplicaţiilor, acest lucru crescând portabilitatea programelor.
Elaborarea algoritmilor devine mai simplă şi mai uşor de înţeles
Subprogramele permit dezvoltarea rapidă a aplicaţiilor complexe, prin reutilizarea lor
>>
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
a) Antetul Subprogramului b) Corpul Subprogramului -> Partea Declarativa -> Partea Executiva
<antetul subprogramului> <declaratii proprii subprogramului> <instructiuni proprii subprogramului>
În funcţie de: 1) modalitatea de apel subprograme apelate ca: a) instructiuni – subprograme de tip procedură
b) operanzi – subprograme de tip funcţie
2) autorul subprogramului a) Subprograme de sistem (predefinite) b) Subprograme utilizator
Procedure P(lista_parametrilor_formali);Var lista_variabile_locale;Begin...End;
Apelul se face prin: P(lista_parametrilor_efectivi);
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));
Asemănări* Deosebiri*
- După structura lor:1. au aceeaşi structură: antet /
declaraţii locale/ bloc de instrucţiuni
2. lista parametrilor formali are aceeaşi structură
1. antetul funcţiei are în plus tipul funcţiei
2. funcţia trebuie să conţină cel puţin o instrucţiune prin care numelui funcţiei i se atribuie valoarea returnată
- La apel:1. Lista parametrilor actuali are
acelaşi rol, de a transmite valorile (pt. transmiterea prin valoare) sau variabilele (pt transmiterea prin adresă) către subprogramul apelat
1. apelul are semnificaţie diferită:a) în cazul funcţiilor, apelul este
înlocuit cu rezultatul funcţiei şi poate fi folosit ca o constantă
b) apelul de procedură este considerat o instrucţiune
se folosesc pentru 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 sunt comunicate de către modulul apelant (P), P SP
Parametri de ieşire: sunt rezulate obţinute de subprogram în urma prelucrării şi pe care le comunică modulului apelant. Modulul apelant le primeşte după ce subprogramul îşi termină execuţia: SP P
Parametri de intrare-ieşire: sunt date care participă la calculul datelor de ieşire şi sunt accesibile atât modulului apelant, cât şi modulului apelat. Valoare lor poate fi modificată atât de subprogram cât şi de modulul apelant: P SP
1. după locul în care sunt declaraţi:a)Formali – sunt parametri scrişi în antetul
subprogramului;b)Actuali – sunt parametri scrişi la apelul
subprogramului2. după modul de transmitere:a)Prin valoare – sunt parametri de intrare; modificarea
valorii lor nu se transmite în modulul apelantb)Prin adresă – sunt parametri de ieşire sau de intrare-
ieşire; modificările valorilor lor se păstrează în modulul apelant
Clasificarea parametrilor
1. 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;2. Parametri actuali corespunzători parametrilor
formali transmişi prin valoare pot fi:- variabile sau expresii de tipul declarat al
parametrului formal3. Parametri actuali transmişi prin adresă nu
pot fi decât variabile de tipul declarat al parametrului
Transferul parametrilor prin valoare
x a y b
x 2 y 3
parametri actuali regula de parametri formali corespondenţă
--------------------------------------------------------
--------------- suma (a,b);
--------------------------------------------------------------------------------------------- suma (2,3);
--------------------------------------------------------
--------------
---------------------------------------------------------------------------------- -- procedure
suma (x,y: integer) ; --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------
Transferul parametrilor prin adresă
x a y b
parametri actuali regula de parametri formali corespondenţă
---------------------------------------------------------------------------------- procedure schimbă
(var x,y: integer) ; -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-------------
Criterii pentru clasificarea variabilelor de memorie
Domeniul de vizibilitate
Reprezintă zona din program în care este permis accesul la
variabilă (textul programului)
-> variabile globale – tot progaramul-> variabile locale – doar subprogramul în care au fost declarate
Durata de viata Reprezinta perioada de timp in care variabilei i se aloca spatiu in memorie (la rularea programului)
-> variabile locale – durata de executie a blocului in care au fost declarate;
-> variabile cu durata statica – durata de executie a programului;
-> variabile dinamice –durata de alocare a memoriei in timpul executiei programului
În timpul rulării unui program memoria este împărţită în 4 zone 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)
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.
Se efectuează în ordinea inversă de la apel:1.Se elibereaza din stiva spatiul ocupat de
variabilele locale si de parametrii;2.Se extrage din stiva adresa de revenire in
modulul apelant;3.Se continua executia cu instructiunea de la
adresa extrasa din stiva.
1. Scrieţi o procedură care interschimbă valorile a două variabile a şi b transmise ca parametri.
2. 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.
3. 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.
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
Vreau să învăţ Ştiu ce înseamnă Pot utiliza