
- •Язык 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 Несколько рекомендаций по использованию процедур и функций
§ 33 Процедуры с параметрами-переменными
Часто в при написании процедур возникает необходимость передать некоторые результаты во ВНЕ, например, в основную программу. В этом случае используют процедуры с параметрами-переменными. Параметры-переменные используются для определения результатов выполнения процедуры и в списке формальных параметров перечисляются после слова VAR.
Описание процедуры с параметрами-переменными начинается с такого заголовка:
P
rocedure
(список параметров-значений; VAR
список параметров-переменных);
Var
Описание локальных переменных
Begin
……………
………………
End;
Например,
Procedure EXAM(m,n:INTEGER;VAR y:Real);
Procedure XAM(VAR y,t:Real);
Procedure AM(VAR y:Real; L:Integer);
Переменные, описанные в процедуре после слова VAR, называются параметрами-переменными. С их помощью в процедуру можно и передавать исходные данные в процедуру (как через параметры-значения), так и возвращать результаты в вызывающую программу( чего нельзя делать через параметры-значения).
П
ример.
PROCEDURE Line(a,b:Real;VAR c:real);
Begin
C:=a/b;
End;
В основной программе должны быть описаны переменные:
Var T,A:Real;
И вызов процедуры может быть таким:
Line(5,3,T);
Line(4+2,7,А);
Line(T,A,T);
Можно вызывать Line (5+A,6+B,T);
Н
ЕЛЬЗЯ:
Line(5,6,A+B);
Запомните!!! При передаче информации в процедуру в качестве параметра-значения может быть любое выражение. В качестве параметра-переменной может быть только переменная.
Задача. Треугольник задан координатами своих вершин. Определить сумму длин его сторон. Вычисление длины стороны оформить процедурой.
Что передавать в процедуру? - координаты двух точек (4 числа).
Что передавать в программу? - длину стороны (1 число).
VAR
X1,X2,X3,Y1,Y2,Y3:REAL;
way,way1,way2:real;
PROCEDURE RASS(X_ONE,Y_ONE,X_TWO,Y_TWO:REAL;VAR R:REAL);
BEGIN
R:=SQRT(SQR(X_ONE-X_TWO)+SQR(Y_ONE-Y_TWO));
END;
begin
readln (x1,y1,x2,y2,x3,y3);
rass(x1,y1,x2,y2,way);
rass(x2,y2,x3,y3,way1);
rass(x1,y1,x3,y3,way2);
write(way+way1+way2);
end.
Задание § 33
Написать программу, определяющую является ли слово полиндромом. Программа должна включать две процедуры:
одна из которых удаляет из строк пробелы, а вторая записывает строку в обратном порядке.
§ 33 Функции, определенные пользователем
Функция - частный случай процедуры, когда у нее всего ОДИН параметр для передачи информации во вне. Его будем называть выходным параметром.
Имя выходного параметра это ИМЯ функции, поэтому необходимо указать его тип.
Описание функции :
Function <ИМЯ> (...;...):<тип>;
begin
.........
<ИМЯ>:=< выражение>;
end;
Вызов функции осуществляется по имени и только в выражениях.
Задача. Вычислить выражение, определив вычисление факториала с помощью функции.
max(a,c)+max(b,c)
------------------
max(a,c)
Решение.
VAR a,b,c:real;
function max(a,b:real):real;
begin
if a>b then max:=a else max:=b;
end;
BEGIN
readln (a,b,c);
writeln((max(a,c)+max(b,c))/max(a,c));
END.
Предупреждение!!! Избегайте рекурсий, т.е. вызова в теле функции самой себя. Они могут "завесить" программу.
Например, нельзя записать в нашей функции max write (max);
Или для функции убирающей из строки пробелы нельзя так:
function delspace(in:string):string;
var i:integer;
delspace:='' ;
for i:=1 to length(in) do
if in[i] <> ' ' then delspace:=delspace+in[i];!!!
end;
Как этого избежать? Завести новую переменную.
В языке мы уже встречались со стандартными функциями:
ABS(X), SQR(X),SIN(X),RANDOM(X),…,
Функциями для построения графических изображений, функциями работы со строками,…
Задания к § 33
1.Треугольник задан координатами своих вершин. Определить сумму длин его сторон. Вычисление длины стороны оформить в виде функции.
2. Написать функцию для вычисления факториала и вычислить
a!в!
-------
(а+в)!