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

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

·        Служебное слово 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(N1, N2);

 

{ Спрашиваем - Выйти?  }

    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.

 

 

На дом