- Что нужно знать
- Как это бывает на экзамене
- Разбор примера
- Типичные ошибки
- Проверь себя
- Ещё 4 раздела — в подписке
Что нужно знать
Функция и процедура
Функция возвращает значение и используется в выражении; процедура выполняет действие и вызывается как инструкция. В C++ и то и другое — функции, а процедура это функция с типом void.
| Паскаль | C++ | |
|---|---|---|
| заголовок функции | function vrf(q: integer): boolean; | bool vrf(int q) |
| заголовок процедуры | procedure cifre(q : string); | void cifre(string q) |
| возврат значения | vrf := b; | return b; |
| вызов процедуры | afisare; | afisare(); |
| вызов функции | x := sir; | x = sir(); |
Заголовок
Заголовок — это первая строка подпрограммы: ключевое слово, имя, список формальных параметров и, у функции, тип результата. Когда задание требует подчеркнуть заголовок, подчеркиваешь именно эту строку, а не всю подпрограмму и не вызов.
Формальные и фактические параметры
Формальные параметры — имена из заголовка, например p и q в function medie (p, q: integer): real;. Фактические параметры — значения, переданные при вызове, например medie(x[i], y[i]). Их количество и типы должны совпадать.
Локальные и глобальные переменные
Переменная, описанная внутри подпрограммы, локальная: она существует, только пока подпрограмма работает, и снаружи не видна. Переменная, описанная до подпрограмм, глобальная и доступна во всех.
Если подпрограмма читает или меняет глобальную переменную вместо того, чтобы получать все через параметры, говорят, что программа содержит связь через глобальные переменные. Задания как раз требуют узнать эту ситуацию: если функция меняет глобальный счетчик, утверждение истинно.
Возврат значения в Паскале
Результат задается присваиванием имени функции: m := rez;. Если забыть это присваивание, функция вернет неопределенное значение, каким бы верным ни был расчет внутри. В C++ ту же роль играет return.
Число вызовов
Вызовы считаются там, где они происходят при выполнении, а не в тексте программы: вызов, записанный один раз, но стоящий в цикле с четырьмя повторениями, означает четыре вызова.
Подпрограммы в вычислительных задачах
В заданиях с численными методами математическая функция пишется отдельной подпрограммой и вызывается в цикле:
function f(x : real) : real;
begin
f := sqr(x) / sqrt(x + 0.8) + 2;
end;Барем дает отдельный балл за верную запись этой функции и еще один за ее вызов, поэтому писать ее стоит, даже если остальная программа не готова.
Стандартные функцииlength(s) дает число символов строки, ord и chr переводят между символом и кодом, abs, sqr, sqrt, trunc считают обычным образом. Они вызываются так же, как собственные подпрограммы, но не описываются.
Остальное в уроке — в подписке
Настоящие задания ANCE по этой теме, разбор примера шаг за шагом, типичные ошибки и 7 вопросов для самопроверки — в подписке. «Что нужно знать» остаётся бесплатным.
Диагностика на настоящих заданиях ANCE остаётся бесплатной: 20 минут — где теряешь баллы, ещё 10–15 минут — ориентировочная оценка по каждому экзамену. Нужен только аккаунт, без карты.
Целый месяц — 299 лей: ≈ 10 лей за вечер занятий. Без автопродления.
BAC · реальный профиль · тренировочный тест № 1 · 2026Nota10
Подпрограммы · 1 б.
Дана программа на Паскале:
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.Дана программа на 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;
}