Функции в pascal abc net

Функции в pascal abc net

Функция Abs в Паскале возвращает абсолютное значение переменной. Результат, возвращаемый функцией Abs, имеет тот же тип данных, что и аргумент — параметр, передаваемый в функцию. Этот параметр может иметь любой числовой тип данных.

Синтаксис функции Abs для целых чисел:

function Abs(L : LongInt) : LongInt;

function Abs(I : Int64) : Int64;

Последний вариант возможен только для FreePascal и Lazarus, так как в классическом Паскале нет типа данных Int64.

Синтаксис функции Abs для вещественных чисел:

function Abs(D : ValReal) : ValReal;

ValReal — это вещественный тип данных с наибольшим доступным значением в данной операционной системе. Фактически это псевдоним (алиас) одного из типов Extended или Double.

А теперь пример использования:

Здесь мы сначала объявляем переменную с начальным значением равным -100 (отрицательное число).

А в программе используем функцию Abs и в результате переменная у будет равна 100 (положительное число).

Что вычисляет функция Abs

Вообще Abs — это сокращение от Absolute. Как нетрудно догадаться, переводится это слово как “абсолютный, чистый, несомненный”.

Вы должны помнить из школьного курса математики, что абсолютное число, то есть абсолютная величина или модуль числа х — это неотрицательное число, определение которого зависит от типа числа х.

В математике модуль числа х обозначается так: |x|.

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

Таким образом, можно сказать, что функция Abs(х) вычисляет модуль числа х. То есть Abs(х) в Паскале — это то же самое, что |x| в математике.

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

Здесь мы передаём в функцию целое число, которое может быть как отрицательным, так и положительным. В функции мы проверяем значение этого числа. Если число отрицательное, то мы умножаем его на -1, и таким образом получаем положительное число. Если число положительное, то мы ничего не делаем — просто возвращаем полученное через параметр iNum число.

Читайте также:  Как пользоваться movavi видеоредактор

Как видите, алгоритм довольно простой.

Правда, наша функция может работать только с целыми числами. Но это уже мелочи.

лабораторные работы и задачи по программированию и информатике, егэ по информатике

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

Отличие от стандартного Паскаля: значение присваивается в 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;

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

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

procedure p(a, b: real):= if a Использование модуля

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

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.

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

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-функции)

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

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

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

Читайте также:  После обновления ios не работает камера

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

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

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

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

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

function IsitDigit (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.

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.

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

Параметры процедур и функций

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

Если формальный параметр описан с предваряющим ключевым словом var или const, то его называют параметром-переменной и говорят, что он передается по ссылке. Если же параметр описан без слов var или const, то его называют параметром-значением и говорят, что он передается по значению. Слово ссылка используется в PascalABC.NET также в другом значении — для ссылочных типов.

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

Например, пусть имеется следующее описание процедуры:

procedure PrintSquare(i: integer);

begin

Тогда при вызове PrintSquare(5*a-b) значение 5*a-b будет вычислено и присвоено переменной i, после чего выполнится тело процедуры.Если параметр передается по ссылке, то при вызове подпрограммы фактический параметр заменяет собой в теле процедуры соответствующий ему формальный параметр. В итоге любые изменения формального параметра-переменной внутри процедуры приводят к соответствующим изменениям фактического параметра. Фактические параметры-переменные должны быть переменными, а их типы должны быть эквивалентны типам соответствующих формальных параметров.

Читайте также:  Газ во время второй мировой

Например, если описана процедура

procedure Mult2(var a: integer);

begin

то после вызова Mult2(d) значение d увеличится в 2 раза.В качестве фактического параметра-значения можно указывать любое выражение, тип которого совпадает с типом формального параметра или неявно к нему приводится. В качестве фактического параметра-переменной можно указывать только переменную, тип которой в точности совпадает с типом формального параметра.

При передаче параметра по ссылке в подпрограмму передается адрес фактического параметра. Поэтому если параметр занимает много памяти (массив, запись, строка), то обычно он также передается по ссылке. В результате в процедуру передается не сам параметр, а его адрес, что экономит память и время работы. При этом если параметр меняется внутри подпрограммы, то он передается с ключевым словом var, если не меняется — с ключевым словом const:

type

Person = record

end;procedure Print(const p: Person);

begin

end;

procedure IncAge(var p: Person);

begin

end;

Отметим особенности передачи динамических массивов в качестве параметров подпрограмм.

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

procedure p(a: array of integer);

begin

end;

var b: array of integer := (1,1);

begin

end.

будет выведено 2. Передавать динамические массивы по ссылке имеет смысл только в случае если память под динамический массив перераспределяется внутри подпрограммы:

procedure q(var a: array of integer);

Ссылка на основную публикацию
Фото с листком для вк
Сигна в ВК – это просто фотография человека с листком бумаги, на котором обычно написано чье-то имя. Часто надписи делают...
Установка виндовс зависла на начало установки
Если вы решили переустановить или установить операционную систему, но начало установки Windows 7 зависает, то в этой статье, думаю, вы...
Установка драйвера принтера отказ
Нередки ситуации, когда не устанавливается принтер, хотя система видит, что к компьютеру подсоединилось новое оборудование. Решение такой задачи требует серьезного...
Фото спортивных мужчин 40 лет
17. Джерард Батлер, 48 лет (kinopoisk) «Законопослушный гражданин» Джерард Батлер когда-то работал официантом, демонстратором игрушек и даже юристом. Он также...
Adblock detector