- •Язык Pascal в популярном изложении
- •§ 1 Постоянные и переменные величины
- •§ 2 Арифметические действия. Элементарные функции
- •§ 3 Арифметические выражения. Скобки
- •§ 4 Вычисление значения арифметического выражения. Команда присваивания
- •§ 5 Типы числовых данных
- •§ 6 Описание числовых переменных
- •§ 7 Обобщение по вещественному типу данных
- •§ 8 Обобщение по целому типу данных
- •§ 9 Простая программа. Команда Writeln
- •§ 10 Исполнение программы. И снова о команде Writeln
- •§ 11 Исполнение программы (продолжение). Сообщения об ошибках
- •§ 12 Учимся самостоятельно писать программы и отлаживать их на компьютере
- •§ 13 Строка символов в команде Writeln
- •§ 14 Ввод исходных данных. Команда Readln
- •§ 15 Отношения между величинами
- •§ 16 Разветвляющиеся алгоритмы. Полное ветвление
- •§ 17 Разветвляющиеся алгоритмы. Неполное ветвление
- •§ 18 Давайте попробуем разработать программу - тест
- •§ 19 Команда множественного выбора case
- •§ 20 Графика в паскаЛе
- •§ 21 Цикл пока в языке Паскаль
- •§ 22 Цикл для каждого в языке Паскаль
- •§ 23 Работа цикла для каждого (for)
- •§ 24 Модификация цикла для каждого
- •§ 25 Некоторые специальные процедуры и функции, используемые в языке
- •§ 26 Разработка мультика
- •§ 27 Строковый тип данных
- •§ 28 Строковые процедуры и функции
- •§ 29 Массивы, размерность, длина, описание массивов
- •§ 30 Процедуры в языке Паскаль
- •1) Процедуры без параметров;
- •§ 31 Процедуры без параметров
- •§ 32 Процедура с параметрами-значениями
- •§ 33 Процедуры с параметрами-переменными
- •§ 33 Функции, определенные пользователем
- •§ 34 Несколько рекомендаций по использованию процедур и функций
§ 32 Процедура с параметрами-значениями
При написании процедур иногда возникает необходимость передачи некоторой информации в процедуру. Например, в предыдущей задаче хотелось бы указать процедуре, какого цвета хотим нарисовать самолет, или длину крыла. Передача данных в процедуру осуществляется с помощью параметров-значений.
Параметром называется переменная, которой присваивается некоторое значение. Различают формальные параметры - параметры, определенные в заголовке процедуры, и фактические параметры - выражения, задающие конкретные значения при обращении к процедуре. При вызове процедуры ее формальные значения замещаются фактическими, переданными из программы, в которой осуществляется вызов.
Описание процедуры с параметрами-значениями выглядит так:
PROCEDURE <имя_процедуры>(список формальных параметров-значений);
Var
Описание локальных переменных, констант и т.д.
BEGIN
..........;
..........;
END;
Например, заголовок процедуры с параметрами-значениями может выглядеть так:
Procedure NNN(x,y:integer);
Procedure Klin(x,y:integer;j:real);
Procedure Hj(lin:real;k:real;b:boolean);
Список формальных параметров-значений выглядит как обычное описание
переменных (правда, отсутствует слово Var).
Вызов процедуры:
<имя_процедуры>(список фактических параметров-значений);
Примеры вызова процедур, заголовки которых записаны выше:
NNN(5,3);
NNN(l,m);{значения l,m должны быть integer и определены заранее}
Klin(7,12,5.3);
Klin(а+3,12,j);
При вызове процедур с параметрами-значениями:
- число фактических параметров-значений должно совпадать с числом формальных параметров-значений;
- следует соблюдать порядок передачи данных;
- следует соблюдать соответствие типов данных формальных и фактических параметров-значений.
Задача 1. Написать процедуру рисования креста по известным координатам его центра и цвету.
Procedure Krest(x,y,col:integer);
{Здесь:
х-столбик,в котором находится центр креста
у-строка, в которой находится центр креста
сol-цвет креста}
Var
i:integer;
Begin
textcolor(col);
gotoxy(x-2,y); write('*****');
for i:=y-2 to y+2 do begin
gotoxy(x,y);write('*');
end;
End;
Задача 2 Нарисовать крест красного цвета с координатами центра в 5 столбике, 7 строке.
Для этого в основной программе должен быть такой вызов процедуры с параметрами значениями
Krest(5,7,4);
5 – столбик, в котором находится центр креста
7 - строка, в которой находится центр креста
4-цвет креста
Задача 3. Нарисовать крест, для которого должны запрашиваться координаты и центра и цвет с клавиатуры.
Для этого в основной программе должно быть, например, так:
Write('Введите координаты центра ');
Readln(stolb,stroca);
Write('Введите цвет креста ');Readln(col);
Krest(stolb,stroca,col);
А теперь посмотрите, как будет выглядеть программа для решения задач 2 и 3 полностью:
Uses CRT;
VAR
stolb, stroca, col:integer; {описание переменных,использованных в основной программе}
{Описание процедуры}
Procedure Krest(x,y,col:integer);
Var
i:integer;
Begin
textcolor(col);
gotoxy(x-2,y); write('*****');
for i:=y-2 to y+2 do begin
gotoxy(x,y);write('*');
end;
End;
{Основная программа}
BEGIN
Krest(5,7,4);
Write('Введите координаты центра ');
Readln(stolb,stroca);
Write('Введите цвет креста ');Readln(col);
Krest(stolb,stroca,col);
END.
Еще раз обратим внимание на то, что
порядок следования фактических параметров и параметров-значений в заголовке процедуры очень важен, поскольку определяет, какому формальному параметру будет присвоено то или иное фактическое значение
должно быть соответствие типов формальных и фактических параметров.
переменные могут описываться, как в разделе описания основной программы, тогда они называются глобальными, или в процедуре, тогда они называются локальными.
ЗНАЙ!!!
глобальная переменная известна во всех вложенных процедурах
локальная переменная НЕизвестна ни в каких внешних процедурах;
одноименные переменные, описанные в разных процедурах, - это РАЗНЫЕ переменные.
Задания к § 32
1. Написать процедуры рисования горизонтальной линии, вертикальной линии и диагонали.
2. Используя написанные процедуры нарисовать по заказу преподавателя какую-нибудь картинку, например, зеленый дом с красной крышей, черный корабль с синим парусом, куб и т.д.
3. Усовершенствовать процедуры так, чтобы можно было заказывать символ, которым рисуются линии.
