Процедура и функция - это именованная последовательность описаний и операторов. При использовании процедур или функций ПАСКАЛЬ - программа должна содержать текст процедуры или функции и обращение к процедуре или функции. Тексты процедур и функций помещаются в раздел описаний процедур и функций (Implementation).
procedure имя_процедуры(параметры: тип);
begin
тело процедуры;
end;
function имя_функции(параметры:тип): тип_возвращаемого значения;
begin
тело_функции;
end;
Процедура может содержать такие - же разделы описаний, что и ПАСКАЛЬ - программа, а именно: разделы описания модулей, меток, констант, типов, переменных, процедур и функций.
Во многих задачах необходимо передавать имена процедур и функций в качестве параметров. Для этого в PASCAL введен новый тип данных - процедурный или функциональный, в зависимости от того, что описывается.
Описание процедурных и функциональных типов производится в разделе описания типов:
Type
Function М1 (z: Real): Real;
ProcedureV_2 (a,b: Real);
Или в разделе описания переменных:
|
|
Var
Function М1 (z: Real): Real;
ProcedureV_2 (a,b: Real);
Функциональный и процедурный тип определяется как заголовок процедуры или функции со списком формальных параметров - (z: Real): Real; (a,b: Real);
После объявления переменных процедурного типа, необходимо написать в исполняемой части программы (implementation) реальные процедуры или функции, к именам которых будут обращаться.
Например:
Procedure V1 (a,d: real);
Begin
Оператор 1
…………….
Оператор N
End;
Для того, чтобы обратиться к данной процедуре, необходимо, в качестве оператора в программе, задать ее имя со списком фактических параметров. Например:
Begin
Оператор 1
…………….
Оператор N
V1 (x,y); // обращение к процедуре
End;
Здесь XY – Фактические параметры, которые заместят формальные параметры в процедуре Procedure V1 (a,d: real);
БАЗОВЫЕ КОНСТРУКЦИИ ЯЗЫКА
Структурированная программа (или подпрограмма) - это программа, составленная из фиксированного множества базовых конструкций. Рассмотрим основные определения и способы образования этих конструкций в схемах алгоритмов.
Из операций, развилок и слияний строятся базовые конструкции: следование, ветвление, цикл. Применяя только эти три конструкции, можно реализовать алгоритм решения любой задачи.
Ø Конструкция, представляющая собой последовательное выполнение двух или более операций, называется следованием.
Ø Конструкция, состоящая из развилки, двух операций и слияния, называется ветвлением. Одна из операций может отсутствовать.
Ø Конструкция, имеющая линии управления, ведущие к предыдущим операциям или развилкам, называется циклом.
Конструкции следование, ветвление и цикл можно представить как операции, так как они имеют единственный вход и единственный выход. Произвольную последовательность операций можно представить как одну операцию.
|
|
Операция может быть реализована любым оператором языка ПАСКАЛЬ (простым или составным), либо группой операторов, за исключением оператора безусловного перехода GOTO.
В языке ПАСКАЛЬ шесть базовых конструкций, это:
· следование;
· ветвление;
· цикл с предусловием;
· цикл с постусловием;
· цикл с параметром;
· вариант.
УСЛОВНЫЙ ОПЕРАТОР
if < булевское выражение> then оператор_1
else оператор_2;
оператор_3;
Перед else, после оператора_1, точка с запятой не ставится!!!
Условный оператор в короткой форме работает по правилу: если <булевское выражение> истинно, то выполняется оператор_1, далее выполняется оператор_3, следующий за условным оператором. Если <булевское выражение> ложно, то будет выполняться оператор_2, следующий за этим условным оператором.
Пример 1 (простое сравнение):
IF a>b then c:=a - b
Else c:=a + b;
D:=D + c;
В данном примере сравниваются две величины а и b. Если а > b истина (булевское выражение true), будет выполняться оператор c:=a - b, а затем D:=D+c;
Если а > b ложь (булевское выражение false), будет выполняться оператор c:=a + b, а затем D:=D+c;
Пример 2 (сравнение с логическим и - and ):
IF (dx>0) and (dy<0) then showmessage(‘четвертая четверть’)
Else showmessage(‘это не четвертая четверть’);
В данном примере сравнивается результат проверки двух выражений (dx>0) и (dy<0). Если оба выражения соответствуют истине, то на экране появится сообщение - ‘четвертая четверть’.
Если результат проверки одного или обоих выражений ложь, на экране появится сообщение - ‘это не четвертая четверть’
В данном примере ShowMessage - стандартная функция динамической библиотеки Dialogs дельфи, которая выводит на экран панель с сообщением, которое заключено в скобки.
Пример 3 (сравнение с логическим или - OR ):
IF (dx>0) or (dy<0) then showmessage(‘условие выполнено’)
Else showmessage(‘это условие не выполнено’);
В данном примере сравнивается результат проверки двух выражений (dx>0) или (dy<0). Если одно из выражений соответствует истине, то на экране появится сообщение - ‘условие выполнено’.
Если результат проверки обоих выражений ложь, на экране появится сообщение - ‘это условие не выполнено’
ЦИКЛ С ПРЕДУСЛОВИЕМ
while < выражение > do оператор;
Если операторов несколько, то они заключаются в конструкцию begin (начало) - end (конец).
while < выражение > do begin
оператор_1;
оператор_2;
end; // конец цикла
оператор_3;
Данная конструкция предполагает сначала проверку условия, а затем выполнение операторов. Если, при обращении к циклу, проверка условия будет ложь (false), то будет выполняться оператор, следующий за окончанием цикла - оператор_3;
.
Пример (чтение текстового файла с диска):
I:=0;
Whilenot eof (t) do begin
Readln (t, x,y);
X1[i]:=x;
Y1[i]:=y;
i:=i+1;
End;
В данном примере логическим условием является выражение while not eof(t), которое означает “пока нет конца файла t , выполнить (do begin) операторы, стоящие перед End; после чего вернуться на начало цикла whilenot eof(t). Чтение будет продолжаться до тех пор, пока не будет достигнут конец файла eof(t), т.е. выражение not eof(t) станет ложью – false.
// eof - признак конца файла, прописывается автоматически в конце текстового файла, аббревиатура от end of file - конец файла. t - файловая переменная, которая содержит имя рабочего файла и путь к нему. Readln - оператор паскаля, читающий строку файла до конца, с "переводом каретки" на новую строку. //
ЦИКЛ С ПОСТУСЛОВИЕМ:
Repeat
оператор;
until < выражение >;
В отличие от цикла с предусловием, представленная конструкция выполнится хотя бы один раз. Проверка условия выполняется после выполнения оператора.
|
|
ЦИКЛ С ПАРАМЕТРОМ:
For i: = параметр_1 to параметр_2 do оператор;
For i:= параметр_1 downto параметр_2 do оператор;
Если в цикле несколько операторов, то они заключаются в конструкцию begin … end;
For i: = параметр_1 to параметр_2 do
Begin
оператор_1;
оператор_2;
end;
Здесь i - переменная цикла, которая вначале работы принимает значение параметр_1. После отработки тела цикла (оператор_1; оператор_2;) i - переменная цикла, принимает значение i:=i+1( если после параметра_1 стоит to), т.е. увеличивается на единицу.
Если стоит downto, то переменная цикла, принимает значение i:=i -1 после чего выполняется неявная проверка на превышение параметра_2 – if i > параметра_2 то цикл завершается ( если после параметра_1 стоит to) и наоборот, if i < параметра_2 то цикл завершается - если стоит downto.
Пример: Найти факториал числа 10.
P_f:=1;
For j:=1 to 10 do P_f:= P_f * j;
В ПАСКАЛЬ определена стандартная процедура Break, которая выполняет безусловный выход из цикла, даже если параметр_2 не достигнут.
Пример 2 Определить номер элемента массива mas, состоящего из 100 элементов целого типа, величина которого превышает заданное значение max_1.
For j:=1 to 100 do begin
If mas[j]>max_1 then begin
ShowMessage(inttostr(j));
Break;
End; // if
End; // for
inttostr(j) - функция Дельфи - преобразует целочисленную переменную j в строку.
ОПЕРАТОР ВАРИАНТА
case < выражение > of
если выражение _1: оператор_1;
если выражение _2: оператор_2;
...
если выражение _N: оператор_N
Else
оператор_N+1;
end;
Данный оператор позволяет программисту, в зависимости от условия, выбирать вариант действия в программе.
Рассмотрим пример работы программы «калькулятор» При нажатии на кнопки дейсвия +, -, * и т.д. необходимо выбрать соответствующие операции с исходными данными.
Предположим, нажали на кнопку «*» - умножить. При этом, “условие” получило значение=3.
N:=3;
………
………
Case N of
1: c:=a+b;
2: c:=a-b;
3: c:=a*b;
4: c:=a/b;
End
Else ShowMessage(‘Такого условия нет’);
|
|
В нашем примере N=3, выполнится оператор с вариантом 3: c:=a*b; Если вариант отсутствует, выполнится оператор стоящий после Else - ShowMessage(‘Такого условия нет’); На экране появится сообщение ‘Такого условия нет’