M5 L1 Info Subprograme

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

  1. Funcții
    • Returnează o valoare.
    • Exemple: int suma(int a, int b), double calculMedia(double a, double b)
  2. 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:

  1. Ce este un subprogram?
  2. În funcția următoare care sunt parametri formali și care sunt efectivi.
    • int suma(int a, int b)
    • suma(5, 3);
  3. De câte ori poate fi apelată o funcție în programul principal?
  4. O funcție poate fi descrisă (definită) în programul principal?
  5. O funcție poate fi descrisă (definită) în interiorul altei funcții?
  6. Declararea funcției este identică cu definirea funcției?