Notiuni introductive. Definire si apel

Subprogramele sunt părţi ale unui program, identificabile prin nume, care se pot activa la cerere prin intermediul acestor nume. Prezenţa subprogramelor implică funcţionarea în strânsă legătură a două noţiuni: definiţia unui subprogram şi apelul unui subprogram.

Definiţia unui subprogram reprezintă de fapt descrierea unui proces de calcul cu ajutorul variabilelor virtuale (parametri formali) iar apelul unui subprogram nu este altceva decât execuţia procesului de calcul pentru cazuri concrete (cu ajutorul parametrilor reali, (efectivi, actuali) ).

Deoarece determinarea maximului dintre două valori poate fi modelată matematic ca o funcţie şi descrierea subprogramului are o structură asemănătoare cu cea a funcţiei:

int Maxim (int p, int q)

{

if (p>q)

return p;

else

return q;

}

Astfel pentru exemplul considerat, secţiunea de program care calculează maximul dintre trei valori, poate fi rescrisă astfel:

max=Maxim(10,20);

max=Maxim(max,30);

1. Definiţia unei funcţii are forma generală:

tip_returnat nume_funcţie (lista parametrilor formali)

{

instrucţiune; // corpul funcţiei

}

Unde:

    • tip_returnat: reprezintă tipul rezultatului calculat şi returnat de funcţie şi poate fi: int, char, char*, long, float, void, etc. În cazul în care tipul rezultatului este diferit de void, corpul funcţiei trebuie să conţină cel puţin o instrucţiune return. Înstrucţiunea return va specifica valoarea calculată şi returnată de funcţie care trebuie să fie de acelaşi tip ca şi tip_returnat

    • nume_funcţie: reprezintă numele dat funcţiei de către cel ce o defineşte, pentru a o putea apela. Contine doar literele mari si mici ale alfabetului englez, cifrele sistemului zecimal, caracterul ’_’, cu conditia ca primul caracter sa nu fie cifra.

    • lista parametrilor formali: reprezintă o listă de declaraţii de variabile separate prin virgulă. Această listă poate să fie şi vidă. Parametri din lista sunt separati prin caracterul virgula. Pentru fiecare parametru format trebuie precizate urmatoarele trei aspecte:

      • tipul parametrului

      • numele lui

      • modul de transfer (valoare sau referinta)

    • instrucţiune:este o instrucţiune vidă sau o instrucţiune simplă sau o instrucţiune compusă.

Un subprogram (funcţie) are o definiţie şi atâtea apeluri câte sunt necesare.

2. Apelul unei funcţii . Revenirea dintr-o funcţie

2.1 Apelul unei funcţii care nu returnează o valoare are urmatoarea forma generala:

nume_funcţie (lista parametrilor efectivi);

unde notiunea de parametru efectiv = parametru actual = parametru real = parametru de apel, iar lista parametrilor efectivi poate sa fie vidă, o expresie sau mai multe despărţite prin virgulă.

2.2 Apelul unei funcţii care returnează o valoare

poate fi apelată fie printr-o instrucţiune de apel simplă (cazul funcţiilor care nu returnează valori) şi în plus poate fi apelată ca operand al unei expresii, sau valoarea returnata de aceasta poate fi afisata. În cazul în care funcţia se apelază print-o instrucţiune de apel simplă, rezultatul funcţiei se pierde. Când funcţia se apelează ca operand, valoarea returnată va fi utilizată în expresie.

La apelul unei funcţii, valorile parametrilor efectivi se atribuie parametrilor formali corespunzători. În cazul în care unul din tipul unui paramatru efectiv diferă de tipul parametrului formal corespunzător, parametrul efectiv va fi convertit spre parametru formal (dacă este posibil, altfel compilatorul generează eroare). În momentul în care se întâlneşte un apel de funcţie, controlul execuţiei programul este transferat primei instrucţiuni din funcţie, urmând a se executa secvenţial instrucţiunile funcţiei.

2.3 Revenirea din apelul unei funcţii

se face în unul din următoarele cazuri:

    • după execuţia ultimei instrucţiuni din corpul funcţiei

    • la întâlnirea unei instrucţiuni return (instructiunea return are urmatarele forme: return; sau return expreie )

Exemplu 1:

#include <iostream>

using namespace std;

void f1()

{ cout << "abc";}

int main ()

{f1();

return 0;

Functia f1 este o functie cu rezultat void, care nu are parametri formali. In urma executiei programului se va afisa:

abc

}

Exemplu 2:

#include <iostream>

using namespace std;

void f2(int k)

{ for (int i=1; i<=k ; i++)

cout << "abc"<< " ";

}

int main ()

{f2(3);

return 0;

}

Functia f2 este o functie cu rezultat void, care are un singur parametru formal K. In urma executiei programului. Functia f2 este apelata pentru valoarea 3, valoare care va fi preluata de parametrul formal k si se va afisa:

abc abc abc

Exemplu 3:

# include <iostream>

# include <cmath>

using namespace std;

int prim (int x)

{ int nr_div=0;

for (int i=2; i<=sqrt(x); i++)

if (x%i==0)

nr_div++;

if (nr_div==0)

return(1);

else

return(0);

}

int main ()

{ int N;

cout << "N="; cin >> N;

if (prim(N))

cout << "PRIM";

else

cout << "NU E PRIM";

return 0;}

Functia prim este o functie cu rezultat de tip int, care are un singur parametru formal x, care reprezinta numarul de verificat. Functia va returna valoarea 1 daca numarul x nu are divizori proprii, deci este numar prim, sau 0 atunci cand numarul x are cel putin un divizor propriu. Functia este apelata din cadrul unei expresii in instructiunea if. Dupa executia functiei numele ei va fi inlocuit de valoarea returnata.

Exemplu 4:

# include <iostream>

# include <cmath>

using namespace std;

int prim (int x)

{ int nr_div=0;

for (int i=2; i<=sqrt(x); i++)

if (x%i==0)

return 0 ;

return 1;

}

int main ()

{ int N;

cout << "N="; cin >> N;

if (prim(N))

cout << "PRIM";

else

cout << "NU E PRIM";

return 0;}

Functia prim este o functie cu rezultat de tip int, care are un singur parametru formal x, care reprezinta numarul de verificat. Functia va returna valoarea 1 daca numarul x nu are divizori proprii, deci este numar prim, sau 0 atunci cand numarul x are cel putin un divizor propriu.In momentul in care se identifica primul divizor se va executa instructiunea return 0, functia isi va incheia executia.Dupa terminarea executiei instructiunii for, numarul x nu are divizori proprii si va returna 1. Functia este apelata din cadrul unei expresii in instructiunea if. Dupa executia functiei numele ei va fi inlocuit de valoarea returnata.

RESTRUCTURARE:

1. Definiţie. Clasificare

Subprogramele sunt părţi ale unui program, identificabile prin nume, care se pot activa la cerere prin intermediul acestor nume. Prezenţa subprogramelor implică funcţionarea în strânsă legătură a două noţiuni: definiţia unui subprogram şi apelul unui subprogram. Definiţia unui subprogram reprezintă de fapt descrierea unui proces de calcul cu ajutorul variabilelor virtuale (parametri formali) iar apelul unui subprogram nu este altceva decât execuţia procesului de calcul pentru cazuri concrete (cu ajutorul parametrilor reali, (efectivi, actuali) ).

Avantaje

- evitarea scrierii repetate a aceluiaşi set de instrucţiuni

- creșterea eficienţei, prin reutilizarea subprogramelor (biblioteci de subprograme)

•Rol

•apelator, apelat, programul principal

•Construcţie şi utilizare

•funcţii, proceduri

•Localizare

•interne, externe

•Aria de folosire

•standard, ale utilizatorului

Picture

2. Construcţie şi apel

Forma generală

antet

corp

Antet

tip_rez nume ([lista parametrilor formali])

Lista parametrilor formali

declaratie1, declaratie 2 …

tip1 nume1, tip2 nume2 …

Corp

o instrucţiune compusă { … }

Instrucţiunea return

Rol

Forma generală return expresie;;

Picture
Picture
Picture
Picture

Ce se întâmplă?

Picture