20

Subprograme

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

Page 1: Subprograme
Page 2: Subprograme

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)

Page 3: Subprograme

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.

Page 4: Subprograme

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

>>

Page 5: Subprograme

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

Page 6: Subprograme

a) Antetul Subprogramului b) Corpul Subprogramului -> Partea Declarativa -> Partea Executiva

<antetul subprogramului> <declaratii proprii subprogramului> <instructiuni proprii subprogramului>

Page 7: Subprograme

Î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

Page 8: Subprograme

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

Page 9: Subprograme

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

Page 10: Subprograme

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

Page 11: Subprograme

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

Page 12: Subprograme

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

Page 13: Subprograme

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

----------------------------

Page 14: Subprograme

Transferul parametrilor prin adresă

x a y b

parametri actuali regula de parametri formali corespondenţă

---------------------------------------------------------------------------------- procedure schimbă

(var x,y: integer) ; -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

-------------

Page 15: Subprograme

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

Page 16: Subprograme

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

Page 17: Subprograme

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.

Page 18: Subprograme

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.

Page 19: Subprograme

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.

Page 20: Subprograme

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