- What you must know
- How it appears at the exam
- Solved example
- Typical mistakes
- Check yourself
- 4 more sections — in the subscription
What you must know
Funcție și procedură
O funcție întoarce o valoare și se folosește într-o expresie; o procedură face o acțiune și se apelează ca instrucțiune. În C++ ambele sunt funcții, iar procedura este o funcție cu tipul void.
| Pascal | C++ | |
|---|---|---|
| antet de funcție | function vrf(q: integer): boolean; | bool vrf(int q) |
| antet de procedură | procedure cifre(q : string); | void cifre(string q) |
| întoarcerea valorii | vrf := b; | return b; |
| apel de procedură | afisare; | afisare(); |
| apel de funcție | x := sir; | x = sir(); |
Antetul
Antetul este primul rând al subprogramului: cuvântul cheie, numele, lista parametrilor formali și, la funcție, tipul rezultatului. Când itemul cere „subliniați antetul”, subliniezi exact acest rând, nu tot subprogramul și nu apelul.
Parametri formali și parametri efectivi
Parametrii formali sunt numele din antet, de exemplu p și q din function medie (p, q: integer): real;. Parametrii efectivi sunt valorile trimise la apel, de exemplu medie(x[i], y[i]). Numărul și tipul lor trebuie să corespundă.
Variabile locale și globale
O variabilă declarată în interiorul subprogramului este locală: există doar cât timp el se execută și nu se vede din afară. O variabilă declarată înaintea subprogramelor este globală și poate fi folosită în toate.
Când un subprogram citește sau modifică o variabilă globală în loc să primească totul prin parametri, spunem că programul conține comunicare prin variabile globale. Itemii din teste cer tocmai recunoașterea acestei situații: dacă funcția schimbă un contor global, afirmația este adevărată.
Întoarcerea valorii în Pascal
Rezultatul se dă atribuindu-l numelui funcției: m := rez;. Dacă uiți această atribuire, funcția întoarce o valoare nedefinită, chiar dacă restul calculului este corect. În C++ rolul acesta îl are return.
Numărul de apeluri
Apelurile se numără acolo unde apar în execuție, nu în textul programului: un apel scris o singură dată, dar aflat într-un ciclu cu patru repetări, înseamnă patru apeluri.
Subprograme în problemele de calcul
La itemii cu metode numerice, funcția matematică se scrie ca subprogram separat și se apelează în ciclu:
function f(x : real) : real;
begin
f := sqr(x) / sqrt(x + 0.8) + 2;
end;Baremul dă un punct separat pentru scrierea corectă a acestei funcții și alt punct pentru apelul ei, deci merită scrisă chiar dacă restul programului nu este gata.
Funcții predefinitelength(s) dă numărul de caractere ale unui șir, ord și chr trec între caracter și cod, abs, sqr, sqrt, trunc fac calculul obișnuit. Ele se apelează la fel ca subprogramele proprii, dar nu se declară.
The rest of the lesson is in the subscription
The real ANCE items where the topic appears, the step-by-step solved example, the typical mistakes and the 7 check questions open with the subscription. “What you must know” stays free.
The diagnostic on real ANCE items stays free: 20 minutes — where you lose points, 10–15 more minutes — an estimated grade for each exam. All it takes is an account, no card.
A whole month is 299 lei: ≈ 10 lei per evening of work. No automatic renewal.
BAC · real profile · practice test no. 1 · 2026Nota10
Subprograme · 1 pts
Fie dat programul (Pascal, respectiv C++):
Limbajul Pascal
Program pr1;
var s, x: string;
i, n, k : integer;
label 1;
function sir: string;
var y : string;
begin
y :='';
for i := 1 to n do
1: if not((s[i]>'A') and
(s[i]<'Z')) then
begin
y := y + s[i];
k:= k + 1;
end;
sir := y;
end;
procedure cifre(q : string);
begin
i := 0;
while i < k do
begin
i := i + 1;
if (q[i]<'0') or (q[i]>'9')
then write(q[i]);
end;
end;
begin
s := 'EX5-274BC*82qwX';
n := length(s);
x := sir;
writeln( x );
cifre(x);
end.Limbajul C++
//Program pr1
#include <iostream>
#include <string>
using namespace std;
string s, x;
int i, n, k;
string sir() {
string y = "";
for (i = 0; i < n; i++)
E1: if (!(s[i]>='A' && s[i]<='Z')){
y = y + s[i];
k++;
}
return y;
}
void cifre(string q) {
i = 0;
while (i < k){
i++;
if (q[i]<'0' || q[i]>'9')
cout<<q[i];
}
}
int main() {
s = "EX5-274BAC*82qwX";
n = s.length();
x = sir();
cout << x << endl;
cifre(x);
return 0;
}