Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

ПРОЦЕДУРЫ И ФУНКЦИИ

Подпрограмма - автономная часть программы, с помощью которой можно многократно производить одни и те же вычисления в различных местах программы, с разными исходными данными.

Пятно 2: ФУНКЦИИ
 

Процедуры

Подпрограмма – многократно повторяющаяся часть программы, оформленная отдельно от основной программы.

Процедура – подпрограмма, которая может иметь несколько входящих и исходящих данных.

Функция - подпрограмма, которая может содержать несколько входных (и только) параметров, но результат получается только один. Результат функции обозначается тем же именем, которым и названа функция.

Преимущества использования процедур - уменьшение объем программы, сокращение времени на отладку.

Место расположения процедур в программах - между описанием переменных и началом программы (оператором Begin).

Последовательность выполнения программы

 

Описание процедуры

Заголовок процедуры

Procedure имя (список параметров);

Раздел описаний

label …;

Var …;

Раздел операторов процедуры

Begin

end; 

Описание функции

Заголовок процедуры

Function ИмяФ (список параметров): тип;

Раздел описаний

label …;

Var …;

Раздел операторов процедуры

Begin

ИмяФ:=…;

end; 

Глобальные и локальные переменные

Глобальные переменные – описанные в разделе описаний программы.

Локальные переменные – описанные в разделе описаний функций и процедур

Var a: integer; S: string; - глобальные переменные

Procedure New (f, g: Integer; k: string); - локальные переменные

НЕ нашли? Не то? Что вы ищете?

Begin

End;

BEGIN

END.

Глобальные переменные сохраняют своё значение, как в основной части программы, так и во всех её функциях и процедурах

Локальные переменные хранят своё значение только в функциях и процедурах

Формальные и фактические переменные

Формальные переменные – описываемые в подпрограмме.

Фактические переменные – переменные, передаваемые в формальные переменные при вызове подпрограммы или которые создаются в самой подпрограмме.

 

Виды формальных параметров

Формальные переменные делятся на:

* параметры – значения;

* параметры – переменные.

Параметры-значения – получают значения из программы и используются в процедурах и функциях.

Параметры-переменные – получают значения из программы, используются в процедурах и функциях, при завершении подпрограммы, значения таких параметров возвращаются в программу.

Чтобы Параметр-значение стал Параметром-переменной, надо при описании перед параметром поставить слово Var.

Пример:

Procedure stl (len: integer); - параметры-значения.

Procedure stl (Var n: integer); - параметры – переменные.

Procedure stl (len: integer; Var n: integer); - параметры-значения и параметры – переменные.

Вызов подпрограмм

Вызов процедуры происходит по имени с указанием фактических параметров, например:

stl (а, n);

Вызов функции происходит по имени с указанием фактических параметров, и должен указывать место, куда следует передать ответ. Функция может использоваться в операторах присваивания, условных операторах

·  K:= tan (а, n);

·  Writeln ( cos(3) );

·  if length(s) < 1 then writeln (‘Строка пустая');

Имена фактических параметров могут не совпадать с именами формальных параметров,

Тип фактической переменной должен соответствовать с типов формальной переменной.

Пример использования процедур:

Написать программу, которая выводит на экран строку, состоящую из заданного числа звездочек. Использовать процедуру.

Uses crt;

Var n: integer;

Procedure sterline (var len: integer);

Var i:integer;

Begin

For i:=1 to len do

Write (‘*’);

End;

Begin

Write(‘Введите количество звездочек’); Readln(n);

Sterline (n);

Readln;

End.

Пример использования функций:

Написать программу, которая с помощью функции сравнивает два целых числа и выводит результат сравнения в виде одного из знаков: >,<,=

Uses crt;

Var x1, x2: integer;

res: char;

Function Compare (a, b: integer): char;

Begin

If a>b then Compare:=’>’

else if a<b then Compare:=’<’

else Compare:=’=’;

End;

Begin

Writeln (‘Введите числа’);

Readln(x1, x2);

Res:=Compare(x1, x2);

Writeln(x1, res, x2);

Readln;

end.

Обработка массивов в подпрограммах

В подпрограмму можно передать не только отдельные переменные, но и массивы.

1)  ОПИСАНИЕ ПОДПРОГРАММ, ПРИНИМАЮЩИХ МАССИВ В КАЧЕСТВЕ ВХОДЯЩИХ ПАРАМЕТРОВ

Чтобы передать массив в подпрограмму, необходимо, чтобы среди формальных переменных программы была переменная типа ARRAY.

Procedure WriteArrayI (a: array of integer);

Begin
end;

2)  ФУНКЦИЙ С ТИПОМ МАССИВ НЕ СУЩЕСТВУЕТ

Нельзя создавать функцию, тип которой – массив.

Пример НЕДОПУСТИМОЙ ФУНКЦИИ

Function ReadArray : array [1..20] of integer;;

Begin
end;

3)  ВЫЗОВ ПОДПРОГРАММЫ И ПЕРЕДАЧА В НЕЁ МАССИВА

Для вызова процедуры, имеющей среди формальных параметров – массив, достаточно написать её название и передать в качестве фактического параметра – переменную массива.

Var Mas : array [1..20] of integer;

Begin

WriteArrayI (Mas);

End.

4)  ОСОБЕННОСТИ ОБРАБОТКИ МАССИВА, ПОЛУЧЕННОГО ПОДПРОГРАММОЙ

А) Вне зависимости от того, какую индексацию имел массив в программе, в подпрограмме массив будет начинаться с индекса 0.

Значит обращаться к первому элементу массива А, следует так: А[0].

Обращаться ко второму элементу массива следует так: А[1] и т. д.

Б) Чтобы определить индекс последней переменной массива следует воспользоваться функцией High.

Индекс последней переменной массива = High(A)

В) Чтобы обработать все элементы массива, можно пользоваться циклом, для этого понадобиться дополнительная переменная – счётчик. Эту переменную следует описать после заголовка процедуры, до её начала,

Начальное значение счётчика обычно соответствует первому номеру индекса массива – 0. Последнее значение счётчика обычно соответствует последнему элементу массива – High(a)

Пример:

Разработать процедуру, выводящую значения массива на экран

Var Mas: array [1..3] of integer;

Procedure WriteArrayI (a: array of integer);

Var i: integer;

Begin

For i:= 0 to High(a) do

Write (a[i]);

End;

Begin

Mas[1]:=6;

Readln(Mas[2]);

Mas[3]:=Mas[1]*Mas[2];

WriteArrayI (Mas);

End.

НЕКОТОРЫЕ ПРИМЕРЫ ПОДПРОГРАММ

Разработать функцию удаления символов из строки.

Var m, n, l: integer;

s, w: string;

Function Ddd(s: string; m, n: integer): string;

Var g1, g2, w: string; l, k: integer;

Begin

L:=length(s);

G1:=’’;

For k:=1 to m-1 do

g1:=g1+s[k];

G2:=’’;

For k:= m+n to L do

g2:=g2+s[k];

Ddd:=g1+g2;

End;

Begin

Readln(s); Readln (m, n);

W:=Ddd (s, m, n);

Writeln (w);

Readln;

end.

Разработать процедуру, читающую значения массива с клавиатуры

Var Mas: array [1..3] of integer;

Procedure ReadArrayI (var a: array of integer);

Var i: integer;

Begin

For i:= 0 to High(a) do

Readln (a[i]);

End;

Begin

ReadArrayI (Mas);

End.

Модули

Чтобы заново не писать в каждой программе одни и те же подпрограммы, можно группировать написанные подпрограммы в Модули и подключать эти модули к тем программам, где нужно использовать созданные ранее подпрограммы.

Так, например, можно создать модуль, содержащий в себе множество функций и процедур по работе с массивами. После этого, каждый раз как программисту понадобиться работать с массивами, ему достаточно подключить созданный модуль к своей программе и пользоваться встроенными в него функциями и процедурами.

Модуль (библиотека) – файл с программным кодом (представленным, как правило, функциями и процедурами).

Последовательность создания модуля

 

Где надо писать текст модуля?

Файл модуля пишется в том же окне, где и все программы на Паскале (можно написать модуль и в текстовом редакторе «Блокнот», но тогда вы не сможете проверить модуль на ошибки).

Как откомпилировать модуль?

Когда текст модуля открыт в Паскале, нажать F9.

Где найти откомпилированный файл модуля?

После компиляции в той же папке где сохранён текст модуля появляется файл с расширением TPU. Это и есть файл модуля.

Куда нужно поместить файл модуля, чтобы его можно было подключать к программам?

Файл модуля размещают в каталоге, который указан в меню Паскаля Option à Directories à Unit Directories

СТРУКТУРА МОДУЛЯ

Unit имя;

Interface {меню модуля}

Uses

Const

Type

Var

Procedure

Function

Implementation {раздел описания модуля}

Uses

Label

Const

Type

Var

Procedure

Function

Begin {раздел запуска модуля}

End.

Раздел UNIT

Содержит имя модуля. Имя модуля не должно превышать 8 символов и должно совпадать с именем файла модуля.

Раздел INTERFACE

Меню модуля. Содержит модули, константы, типы, переменные, заголовки процедур и функций, доступные из программы, к которым будет подключаться модуль.

Раздел IMPLEMENTATION

Раздел описания модуля. Содержит все используемые модулем константы, типы, переменные, процедуры и функции. Если что-то описано в разделе Implementation, но не представлено в разделе Interface (меню), то такая подпрограмма является локальной и доступна только внутри модуля.

Раздел Инициализации модуля

Может отсутствовать (тогда от него остаётся лишь « End. »). В разделе содержаться команды, которые выполняются при включении модуля. Таким образом, программа, к которой подключается модель, вначале выполняет команды из этого раздела и потом начинает выполнять собственные команды.

ПРИМЕР: Напишем текст модуля, для работы с прямоугольным треугольником

Unit RTrian;

Interface

Function Hypotenuse (c1, c2: real): real;

Function Cathetus (c1, Hip: real): real;

Function SRTriangle (c1,c2: real): real;

Function HRTriangle(c1, c2: real): real;

Implementation

Function Hypotenuse (c1, c2: real): real;

Begin Hypotenuse:=SQRT(c1*c1+c2*c2); End;

Function Cathetus (c1, Hip: real): real;

Begin Cathetus:=SQRT(Hip*Hip – c1*c1) End;

Function SRTriangle (c1, c2: real): real;

Begin SRTriangle:=c1*c2/2; End;

Function HRTriangle(c1, c2: real): real;

Begin HRTriangle:=c1*c2/Hypotenuse(c1,c2); End;

End.

Сохраним созданный файл на диске под именем “RTrian. pas”. Нажмём F9. В папке, где был сохранён текст модуля, найдём файл «RTrian. tpu» - это наш модуль. Если перенесём модуль «RTrian. tpu» в папку, указанную в разделе Option à Directories à Unit Directories, то можно использовать модуль в любых программах.

Программа рассчитывает высоту прямоугольного треугольника, опущенную на гипотенузу, на основе величины одного из катетов и гипотенузы.

Uses crt, RTrian; {подключаем модуль}

Var a, b, Hipot, h :real;

Begin

Clrscr; Readln (a, Hipot); {читаем катет и гипотенузу}

b:= Cathetus (a, Hipot); {находим второй катет, пользуясь нашим модулем}

h:= HRTriangle(a,b); {находим высоту, пользуясь нашим модулем}

Writeln (‘Высота = ‘, h);

Readkey;

End.