Занятие 3. Pascal abc.net: Процедуры и функции (подпрограммы)

Работа с функциями и процедурами в pascal abc.net

Процедуры и функции

Отличие от стандартного Паскаля: значение присваивается в Result.

function Add(a,b:real):real;
begin
  Result:= a + b;
end;

Или:

function Add(a,b:real):real:= a + b;

Или же функция может выступать в качестве процедуры (нежелательный вариант):

function Add(a,b:real):= a + b;
begin
  print(Add(2,8));
end;

Пример: Вычислить S и P прямоугольника со сторонами a и b. Использовать кортеж и функцию в качестве процедуры.

Выполнение:

function SP(a,b: real):=(a*b,2*(a+b));
begin
 print(SP(2,3));
end;

пример функции в паскаль абц

Короткие процедуры:

procedure p:=write(1);

Пример: выводить минимальное из двух чисел

procedure p(a, b: real):= if a<b then
   print(a)
 else
   print(b);

Использование модуля

Функции и процедуры принято помещать в пользовательские модули.
Для модуля создается отдельный файл, например, MyUnit.pas, в котором прописывается код функции или процедуры:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Unit MyUnit;    {название модуля}
interface       {раздел служит для объявления используемых ниже функций и процедур}
    function MyFunc(x:real):real;
    procedure MyPr(x:real);
implementation  {реализация функций и процедур}
    function MyFunc(x:real):real;
      begin
        ...
      end;
   procedure MyPr(x:real);
      begin
        ...
      end;
end.

В файле с основной программой:

1
2
3
4
5
Uses MyUnit;
var ...
begin
  ...
end.
 

Тестирование процедур и функций

Все созданные процедуры принято тестировать. Для этого существует стандартная функция Assert:

function Add(a,b:integer):integer;
begin
  Result:= a + b;
end;
begin
Assert(Add(2,3)=(2+3), 'Тест не прошел');
print (Add(4,6));
end.

Первый параметр функции Assert должен быть истинным, второй параметр — сообщение об ошибке. Если первый параметр оказывается ложным (т.е. функция работает неверно), то будет сгенерированно исключение и выведено сообщение об ошибке из второго параметра.

Важно: Функция пишется вместе с системой тестов к функции

Обобщенные функции (Generic-функции)

Не всегда удобно, когда мы указываем конкретный тип аргументов функции или конкретный тип возвращаемого функцией значения.

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

Подпрограмма образуется из обобщенной подпрограммы подстановкой конкретных типов в качестве параметров.

Запись такой функции выглядит так:

function MyFunc<T>(a:T):T;
begin
...
end;

В данном примере и аргумент и значение функции имеют изначально неопределенный тип.

Еще пример с обобщенной функцией.

Решение задач

Пример: Описать обобщенную функцию IsitDigit(D), которая возвращает истину, если целое число D является цифрой (одноразрядное число, то есть D лежит в диапазоне 0–9). В основной программе вывести значение этой функции для N (N ≥ 0) данных чисел

Выполнение:

1
2
3
4
5
6
7
8
9
10
11
function IsitDigit<T>(d:T):boolean;
begin
var ch:=[0..9];
if d in ch then result:=true 
    else result:=false;
end;
begin
var n:=readInteger('введите число > 0');
assert (n>0,'число должно быть > 0');
print(IsitDigit(n));
end.

Пример: Описать функцию AddToRightDigit(I, N), которая возвращает целое число, полученное «дописыванием» к целому положительному числу N справа цифры I (I — входной параметр целого типа, лежащий в диапазоне 0–9, N — входной положительный параметр целого типа).

Выполнение:

1
2
3
4
5
6
7
8
9
10
function AddToRightDigit(i,n:integer):integer;
begin
  var str:=n.ToString+i;
  result:=str.ToInteger;
end;
begin
  var n :=readInteger ('введите число');
  var i :=readInteger('введите постфикс');
  print(AddToRightDigit(i,n))
end.

Задание 1: Описать функцию IfNine(I), которая возвращает целое число, полученное следующим образом: если среди цифр числа имеется цифра 9, то перед числом добавляется («дописывается») I (I — входной параметр целого типа).

Пример: Описать в краткой форме функцию АSred(X, Y), вычисляющую среднее арифметическое X и Y

Выполнение:

1
2
3
4
5
6
function ASred(x,y:real):=(x+y)/2;
begin
var x:= readReal('введите x');
var y:= readReal('введите y');
println('результат средн. арифм: ',ASred(x,y));
end.

Задание 2: Описать в краткой форме функцию GSred(X, Y), вычисляющую среднее геометрическое двух положительных вещественных чисел X и Y.

Поделитесь уроком с коллегами и друзьями:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*
*

Вставить формулу как
Блок
Строка
Дополнительные настройки
Цвет формулы
Цвет текста
#333333
Используйте LaTeX для набора формулы
Предпросмотр
\({}\)
Формула не набрана
Вставить