Составление своих процедур |
Создаваемая процедура в Паскале имеет следующие элементы:
· Служебное слово Procedure ;
· Собственное имя, по которому она будет использоваться в программе. Оно идет после служебного слова Procedure
· Параметры, передаваемые программе (необязательно).
· Свои разделы var , const , label (необязательно).
· Собственный раздел begin - end , причем end - это конец подпрограммы. После него всегда ставиться точка с запятой: ";"
· Внутри этой конструкции - любые элементы языка: циклы, сравнения, дополнительные блоки begin - end .
Примера ради давайте напишем указанную выше программу (сложение двух чисел). Действовать будет по следующему принципу:
1. До основной программы составим процедуру, в качестве параметров которой будет передаваться два числа. В этой процедуре будет:
1. Числа, переданные как параметры складываются друг с другом;
2. Получившееся значение выводиться на экран;
2. Сделаем цикл repeat - until . Внутри след. действия:
1. Запрашиваем 1-е число;
2. Запрашиваем 2-е число;
3. Вызываем нашу процедуру, передав ей в качестве параметров эти два числа;
4. Спрашиваем - повторить?
3. Цикл повторяется, пока ответ "ДА".
Вот такая вот простая программка. Исходный код :
Program P1;
uses Crt;
Procedure Add(a, b: Integer);
var
C: Integer;
begin
C := A + B;
Write(C);
end;
var
N1, N2: Integer;
C: Char;
begin
repeat
{ Очищаем экран }
ClrScr ;
{ Читаем переменные }
Write('Введите число N1: ');
Readln(N1);
Write(' Введите число N2: ');
Readln(N2);
Writeln;
{ Вызываем нашу процедуру }
Add ( N 1, N 2);
{ Спрашиваем - Выйти? }
Writeln;
Write ('Выйти? (Y/N): ');
Readln(C);
until UpCase(C) = 'Y';
end.
Теперь давайте разберемся, как создается процедура.
В первую очередь, посморите на служебное слово Procedure . Это и есть подпрограмма, являющаяся в нашем случае процедурой (помните, есть еще функции). Дальше идет имя процедуры - Add , по этому имени мы обращаемся к ней в программе.
Следующий шаг - определение параметров, передаваемых процедуре. Они указываются в скобках сразу после имени, причем в следующем формате:
список_переменных: тип
В этой конструкции имеются некоторые особенности, которые я перечислю:
1. Список переменных-параметров может отсутствовать - в том случае, если подпрограмме они не требуется:
Procedure Add;
2. Параметров может быть сколько угодно, причем любых типов. Тогда они разбиваются на группы по отдельным типам и разделяются точкой с запятой:
Procedure Add(A,B: Integer; C: Word; B: Boolean; S: String);
После того, как вы описали имя процедуры и список ее параметров, можно начинать создание самой процедуры. При этом не забывайте - процедура это маленькая программа, по своим свойствам не отличающаяся от основной. В приведенном примере вы видите, что она имеет свой раздел var , свою конструкцию begin - end . Итак, подведя итоги составим шаблон оформления процедуры, которым вы можете пользоваться, пока не запомните ее синтаксис.
Оформление процедуры
Procedure имя_процедуры (список_параметров: тип);
const
список_констант_процедуры;
var
список_переменных_процедуры: тип;
begin
... тело_процедуры ...
end;
Как видите, все очень просто. Теперь давайте посмортим, как можно написать функцию. Для этого модифицируем нашу программу и поставим задачу следующим образом:
Написать функцию, возвращающую от своей работы сумму двух элементов. Вс остальные условия те же. Начнем?
Составление функций |
При написании функции прежде всего стоит вспомнить ее назначение - возвращение от своей работы каких-либо значений. В наше случае - это будет сумма двух чисел, передаваемых как параметры. Что касается параметров - здесь все свойства те же, что и у процедур. Основное отличие функций от процедур - это служебное слово Function , которое идет вместо слова Procedure и возвращение функцией значения.
Последнее реализуется путем простого присваивания какого-нибудь значения самому имени функции. Модифицируем написанную выше программу :
Program P2;
uses Crt;
Function Add(a, b: Integer): Integer;
var
C: Integer;
begin
Add := A + B;
end;
var
N1, N2: Integer;
C: Char;
begin
repeat
{ Очищаем экран }
ClrScr ;
{ Читаем переменные }
Write('Введите число N1: ');
Readln(N1);
Write(' Введите число N2: ');
Readln(N2);
Writeln;
{ Вызываем нашу процедуру }
Write(Add(N1, N2));
{ Спрашиваем - Выйти? }
Writeln;
Write ('Выйти? (Y/N): ');
Readln(C);
until UpCase(C) = 'Y';
end.
Обратите внимание на три главных момента в использовании функций.
1. Функция при описании должна получать свой тип, то есть указывается тип возвращаемого ей значения. Это значит, что если мы задали функции тип Integer , то ей может быть присвоено только целое число, кроме того - при использовании функции в программе мы можем использовать ее только в ситуациях, позволяющих манипулировать с типом Integer .
2. Возвращаемое значение задается простым присваиванием значения имени функции внутри ее.
3. Как и стандартные функции Паскаля, собственные могут быть использованы внутри процедур:
Write(Add(N1, N2)); - печатаем значение, возвращаемое функцией Add;
Так и внутри стандартных конструкций:
If Add(N1, N2) > 100 then Write(' Сумма больше 100!');
Это самые основные моменты в использовании функций. К сожалению, на этом основном материале мне приходиться заканчивать этот выпуск, так как он и без того получился довольно большим. Следующий выпуск планируется Практическим, я постараюсь выпустить его как можно быстрее и опубликовать в нем решения интересных задач, использующих процедуры и функции, а также уточнить некоторые детали, такие как рекурсивность и т.п.
Процедуры и функции языка программирования Паскаль. (еще раз).
Понятие программы впервые было описано Маврисом Уилксом и непосредственно было связано с использованием ЭВМ EDSAC , созданной в Кембриджском университете. Этот компьютер считается первой в мире вычислительной машиной работающей по программе, хранящейся в памяти. Введение подпрограмм было очень важным шагом на пути развития программирования, поскольку позволяло создавать большие программы по частям.
В языке Паскаль существуют два типа подпрограмм – процедуры и функции.
Процедуры и функции дают возможность снабдить последовательность операторов именем и обращаться затем к ней по имени. Стандартные функции и процедуры вызываются с помощью их имени и хранятся в библиотеке Паскаля в виде отдельных модулей.
В Паскале имеется много стандартных процедур ( read , readln , write , ord , chr и др). стандартными они называются потому что созданы были вместе с Паскалем. Однако не всегда стандартные процедуры удовлетворяют программиста, и тогда приходится разрабатывать свои, нестандартные процедуры и функции.
Функция отличается от процедуры тем что результат ее работы возвращается в виде этой функции и следовательно вызов функции может использоваться наряду с другими операндами в выражениях.
Процедуры.
Может случится что некоторая последовательность действий должна появиться в решении несколько раз. Для этого эту последовательность описывают отдельно и обращаются к ней заранее объявив процедурой.
Процедурой в Паскале называется особым образом оформленный фрагмент программы, имеющий собственное имя. Упоминание этого имени приводит к активизации процедуры и называется ее вызовом. Сразу после активизации процедуры начинают выполняться входящие в нее операторы. После выполнения последнего из них управление передается основной программе.
Для обмена информацией между основной программой и процедурой используются один или несколько параметров вызова.
Описание процедуры помещается в разделе описаний и внешне выглядит как программа, но вместо заголовка программы используется заголовок процедуры.
Определение процедур и функций осуществляется после описания переменных и перед первым словом begin программы т.е. в последнюю очередь.
Рассмотрим задачу: составить программу для сложения двух чисел, и красивого вывода их и результата на монитор.
program goodprint; красивый вывод информации
var num1,num2,total:real;
procedure drawline; процедура
const
length=10;
var
i:integer;
begin
for i:=1 to length do write('-');
writeln
end ;
тело программмы
begin
write ('введите два числа==>');
readln(num1,num2);
writeln(num1:1:3,num2:1:3);
drawline; вызов процедуры
writeln(num1:10:3);
writeln(num2:10:3);
drawline;вызов процедуры
total:=num1+num2;
writeln(total:10:3);
drawline;вызов процедуры
end .
После запуска программы вводим два числа, например 1234.56 и 987654.321. программа выдаст результат. Если мы хотим при выводе информации заменить символы ----------------- заменить на _*_*__*_*_*_* то необходимо изменить процедуру:
procedure drawline; процедура
const
length=10;
var
i:integer;
begin
for i:=1 to length do write('_*');
writeln
end ;
таким образом основная программа останется прежней, и с измененной процедурой примет вид:
program goodprint ;красивый вывод информации
var
num1,num2,total:real;
procedure drawline; процедура
const
length=10;
var
i:integer;
begin
for i:=1 to length do
write('_*');
writeln end;
тело программмы
begin
write ('введите два числа==>');
readln(num1,num2);
writeln(num1:1:3,num2:1:3);
drawline;вызов процедуры
writeln(num1:10:3);
writeln(num2:10:3);
drawline;вызов процедуры
total:=num1+num2;
writeln(total:10:3);
drawline;вызов процедуры
end.