Subprogramele sunt secvențe de cod reutilizabile, definite separat față de programul principal, care îndeplinesc o anumită sarcină. Ele pot fi apelate ori de câte ori este nevoie în program, evitând astfel repetarea codului.
Tipuri de subprograme
- Funcții
- Returnează o valoare.
- Exemple:
int suma(int a, int b),double calculMedia(double a, double b)
- Proceduri (sau funcții „void” în C/C++)
- Nu returnează nimic, doar execută o acțiune.
- Exemplu:
void afiseazaSalut()
#include <iostream>
using namespace std;
int suma(int a, int b) {
return a + b;
}
void afiseazaSalut() {
cout << "Salut!" << endl;
}
int main() {
afiseazaSalut();
int rezultat = suma(5, 3);
cout << "Suma este: " << rezultat << endl;
return 0;
}
Temă1:
Să se modifice programul de mai sus astfel încât să se creeze subprogramul double calculMedia(double a, double b) care să se apeleze în programul principal.
De ce folosim subprograme?
- Reutilizarea codului: nu mai scrii de fiecare dată aceeași logică.
- Claritatea și organizarea: codul e mai ușor de citit și întreținut.
- Testare mai ușoară: poți testa subprograme individual.
- Modularitate: programul e împărțit în bucăți mai mici, independente.
Alte concepte legate de subprograme
- Parametri – valori transmise în subprogram (de intrare).
- Parametri formali (în subprogramul suma avem parametri formali int a, int b;
- Parametri efectivi (în programul principal la apelarea subprogramului suma avem parametri efectivi 3,5.
- Valori returnate – rezultate transmise înapoi programului principal.
- În subprogramul suma se returnează valoarea a+b în numele funcției sub forma unui număr întreg deoarece funcția este de tip întreg.
- La apelul funcției suma din programul principal se execută funcția suma și rezultatul execuției se atribuie variabilei rezultat care este și ea tot de tip întreg(număr întreg).
- Recursivitate – un subprogram care se apelează pe sine (nu face obiectul prezentării de față deoarece este dedicat clasei a XI-a).
Am spus la început că subprogramele sunt secvențe de cod reutilizabile. Asta înseamnă că o funcție ce este descrisă în afara programului principal poate fi apelată ori de câte ori dorim în programul principal. O funcție nu poate fi descrisă în programul principal adică în interiorul funcției main(). O funcție nu poate fi descrisă în interiorul altei funcții.
Să scriem un program în care să creăm o funcție care calculează pătratul unui număr și să o apelăm de mai multe ori în main() cu diferite valori.
#include <iostream>
using namespace std;
// Subprogram care calculează pătratul unui număr
int patrat(int x) {
return x * x;
}
int main() {
// Reutilizarea funcției patrat
cout << "Patratul lui 2 este: " << patrat(2) << endl;
cout << "Patratul lui 5 este: " << patrat(5) << endl;
cout << "Patratul lui -3 este: " << patrat(-3) << endl;
// Poate fi folosit și într-o buclă:
for (int i = 1; i <= 5; ++i) {
cout << "Patratul lui " << i << " este: " << patrat(i) << endl;
}
return 0;
}
Ce demonstrează acest program?
- Funcția
patrat()este definită o singură dată. - Este apelată de mai multe ori cu argumente diferite.
- Este reutilizată atât individual (cu
cout), cât și într-o buclă.
Temă2:
Să se creeze un program simplu care reutilizează o funcție.
Definirea sau declararea unei funcții:
În C++, o funcție poate fi descrisă (definită) sau declarată în mai multe locuri, în funcție de organizarea codului.
1. Unde poate fi definită o funcție?
O definiție de funcție înseamnă să scrii întregul corp al funcției (adică blocul de cod care îi spune ce să facă).
Variante:
a) Înainte de main()
Este cea mai comună practică în programele simple:
#include <iostream>
using namespace std;
int suma(int a, int b) {
return a + b;
}
int main() {
cout << suma(2, 3);
return 0;
}
b) După main() – cu declarație prealabilă
Se numește și „prototip” de funcție. E util mai ales când vrei să-ți structurezi codul logic, punând main() mai sus.
#include <iostream>
using namespace std;
// Declararea funcției (prototip)
int suma(int, int);
int main() {
cout << suma(2, 3);
return 0;
}
// Definirea funcției (după main)
int suma(int a, int b) {
return a + b;
}
Întrebări:
- Ce este un subprogram?
- În funcția următoare care sunt parametri formali și care sunt efectivi.
int suma(int a, int b)suma(5, 3);
- De câte ori poate fi apelată o funcție în programul principal?
- O funcție poate fi descrisă (definită) în programul principal?
- O funcție poate fi descrisă (definită) în interiorul altei funcții?
- Declararea funcției este identică cu definirea funcției?
