
- •Часть I
- •1.1 Простейшее консольное приложение. Основные понятия
- •Задачи.
- •1.2 Простые типы
- •Целые типы.
- •Задачи.
- •Символьные типы.
- •Логические типы
- •Задачи.
- •Перечислимый тип
- •Вещественные типы
- •Тип дата-время
- •1.3 Операторы Оператор присваивания
- •Составной оператор
- •Условный оператор if
- •Задачи.
- •Оператор выбора case
- •Задачи.
- •Операторы цикла
- •Задачи.
- •Задачи.
- •Задачи.
- •1.4 Процедуры и функции.
- •Процедуры.
- •Функции.
- •Вызов подпрограмм.
- •Локализация имён.
- •Параметры.
- •Задачи.
- •Перегрузка функций.
- •Процедурные типы.
- •1.5 Динамическая память и указатели
- •1.6 Массивы
- •Статические массивы
- •Задачи.
- •Задачи.
- •Задачи.
- •Задачи.
- •Динамические массивы
- •Параметры-массивы
- •1.7 Строки Строковые типы
- •Стандартные подпрограммы для строк.
- •Строковые выражения
- •Задачи.
- •Преобразование строк в числовые типы и обратно.
- •1.8 Множества
- •Задачи.
- •1.9 Записи
- •Задачи.
- •Литература.
- •Оглавление
Вызов подпрограмм.
Описание процедур и функций в основной программе занимает место в конце раздела описаний, до начала блока операторов. При вызове процедуры или функции её формальные параметры заменяются фактическими. Число и тип формальных и фактических параметров должны совпадать. При этом фактические параметры должны располагаться в том же порядке, что и формальные.
Пример 26. Рассмотрим пример применения процедуры degree для решения следующей задачи: Вычислить y8x5 3x4 2x3.
var x:integer; y, z:integer;
procedure degree( a, n:integer; var step:integer);
var i:integer;
begin
step1;
for i1 to n do stepstepa;
end;
begin
readln(x);
degree(x, 5, z); y8z;
degree(x, 4, z); yy – 3z;
degree(x, 3, z); yy 2z;
writeln(y);
readln
end.
Вызов процедуры – это оператор, состоящий из имени процедуры, за которым в круглых скобках записаны фактические параметры, которые передают свои значения соответствующим формальным параметрам.
1ый вызов xa 5n zstep
2ой вызов xa 4n zstep
3ий вызов xa 3n zstep
Вызов и выполнение функции производятся при вычислении значения указателя функции
<имя функции>(<список фактических параметров>),
который входит в некоторое выражение в вызывающей программе.
Пример 27. Описать функцию для вычисления n! (n13) и с её помощью вычислить
var n, k : integer; res : real;
function fact(n : integer) : integer;
var i, f : integer;
begin
f:=1;
for i:=1 to n do f:= f * i;
result:=f
end;
begin
readln(n);
res:=1;
for k:=1 to n do
res:=res + 1/fact(k);
writeln(res:8:3);
readln
end.
Локализация имён.
Имена переменных, описанные внутри подпрограммы, локализуются в ней, т.е. они как бы «невидимы» снаружи подпрограммы. Такие переменные называются локальными. Переменные, которые объявлены в основной программе, называются глобальными. Они доступны в любой части программы, в том числе и в любой подпрограмме.
Например, в последнем рассмотренном примере переменные x, y, z – глобальные, переменные a, n, step, i – локальные, они недоступны основной программе. Локальные переменные существуют только тогда, когда работает подпрограмма: появляются при её вызове и исчезают при завершении её работы.
Имена переменных, локализованных в подпрограмме, могут совпадать с ранее объявленными глобальными именами. В этом случае локальное имя «закрывает» глобальное и делает его недоступным в пределах данной подпрограммы. Рассмотрим пример:
var i:integer;
procedure P;
var i:integer;
begin writeln(i) end;
begin i7; P end.
Что напечатает эта программа? Всё, что угодно: значение локальной переменной i при входе в процедуру P не определено, хотя одноимённая глобальная переменная имеет значение 7. Локальная переменная «закроет» глобальную и на экран будет выведено произвольное значение, содержащееся в локальной переменной i. Если убрать описание var i:integer; из процедуры P, то на экран будет выведено значение глобальной переменной i, т.е. 7.