Составление своих процедур

Создаваемая процедура в Паскале имеет следующие элементы:

· Служебное слово 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.