На занятии будет объяснен алгоритм работы с функциями на Паскале, рассмотрены стандартные функции. Будут разобраны примеры использования функций с параметрами и без параметров.
Содержание:
- Стандартные функции языка Pascal
- Арифметические функции (основные)
- Функции преобразования типов
- Пользовательские функции Pascal
- Самостоятельная работа
Арифметические функции (основные)
Функция | Назначение | Тип результата |
---|---|---|
abs (x) | абсолютное значение аргумента | совпадает с типом аргумента |
sqr (x) | квадрат аргумента | совпадает с типом аргумента |
sqrt (x) | квадратный корень аргумента | вещественный |
cos (x) | косинус аргумента | вещественный |
sin (x) | синус аргумента | вещественный |
arctan (x) | арктангенс аргумента | вещественный |
exp (x) | ex | вещественный |
ln (x) | натуральный логарифм | вещественный |
int (x) | целая часть числа | вещественный |
frac (x) | дробная часть числа | вещественный |
Функции преобразования типов
round (x) | — округляет вещественное число до ближайшего целого. |
trunc (x) | — выдает целую часть вещественного числа, отбрасывая дробную. |
Пользовательские функции Pascal
Функция в Паскале — это подпрограмма, которая в отличие от процедуры всегда возвращает какое-либо значение. Для этого в теле функции её имени присваивается вычисленное значение — результат, который она возвращает.
- Функция – это подпрограмма, результатом работы которой является определенное значение.
- Функции используются для:
- выполнения одинаковых расчетов в различных местах программы;
- для создания общедоступных библиотек функций.
- Синтаксис:
- заголовок начинается служебным словом
function
- описание формальных параметров (тех, значения которых передаются из основной программы в функцию):
- параметры-переменные — параметры, значения которых становятся доступны и в основной программе (возвращаются в программу)
- тип возвращаемого функцией результата описывается в конце заголовка функции через двоеточие:
- Вызывается функция в теле основной программы, только если ее имя фигурирует в каком-либо выражении. В отличие от процедуры, которая вызывается отдельно.
- Внутри функции можно объявлять и использовать локальные переменные:
- значение, которое является результатом, записывается в переменную, имя которой совпадает с названием функции; объявлять ее НЕ НАДО:
Рассмотрим синтаксис:
var …;{объявление глобальных переменных} function название (параметры): тип результата; var…; {объявление локальных переменных} begin … {тело функции} название:=результат; {результат вычислений всегда присваивается функции} end; begin … {тело основной программы} end.
Пример: написать функцию, которая вычисляет наибольшее из заданных двух значений
Решение:
Вызов функции:
PascalABC.NET
:
Правила описания функции:
1. Мы должны написать тип значения, которое возвращает функция.
2. Переменная Result
хранит результат функции.
function f(x: real): real; begin Result := x * x + 1; end;
Вызов функции стоит в выражении:
// основная программа begin var x := 5; var r := Sqrt(x) + f(x); end.
Задача function 0. Написать функцию, которая вычисляет наибольшее из заданных трех значений. Функция с тремя параметрами.
✍ Пример результата:
Введите три числа: 4 1 6 наибольшее = 6
Пример: Написать функцию на Паскале, которая складывает два любых числа
✍ Пример результата:
первое число: 2 второе число: 5 сумма = 7
✍ Решение:
1 2 3 4 5 6 7 8 9 10 11 12 |
var x,y:integer; function f(a,b:integer):integer; begin f:= a+b; end; begin writeln('первое число:'); readln(x); writeln('второе число:'); readln(y); writeln('сумма= ',f(x,y)); end. |
В рассмотренном примере использования функции в Паскале: функция f
имеет два целочисленных параметра — a
и b
. Через двоеточие в заголовке функции (строка 2) указано, что значение, вычисляемое функцией, будет тоже целочисленным. В теле функции вычисляемая сумма присваивается имени функции. А в основной программе вызов функции осуществляется в качестве параметра оператора writeln
.
Таким образом, главное отличие функции от процедуры — это то, что функция производит какие-либо вычисления и выдает в программу результат в виде значения, в то время как процедура чаще всего выполняет какие-либо действия с результатом, например, выводит его на экран (функция этого делать не может).
Задача function 1. При помощи функции найти среднее арифметическое двух чисел (функция с двумя параметрами).
✍ Пример результата:
Введите два числа: 4 7 среднее арифметическое = 5,5
Пример: Составить программу с функцией для вычисления факториала числа.
Показать решение:
Pascal | PascalABC.NET | ||||
|
|
В рассмотренном примере функция имеет один параметр — a
. Вычисляемое функцией значение имеет целочисленный тип, это указывается в заголовке функции (строка 2). В теле функции в цикле for
вычисляется факториал числа. Результат вычисления присваивается имени функции (строка 9). В теле программы для вывода результата функции она вызывается в операторе writeln
(строка 14), который и выводит результат на экран.
PascalABC.NET
:
Короткое определение функции:
function Sq(x: real) := x * x + 1; begin var x := 10; var r := Sq(x) + Sq(2) end.
Короткая запись
Если тело функции состоит только из одного оператора, PascalABC.NET позволяет использовать при описании сокращенный синтаксис, без ключевых слов begin
и end
:
1 2 3 4 5 6 |
## function SumXY(x,y: real) := x + y; // основная программа begin Print (SumXY(9,2)); //11 end; |
Задача function 2. Составить функцию, которая определяет сумму всех чисел от 1 до N и привести пример ее использования. N — параметр функции.
Пример:
Введите число: 100 сумма = 5050
Задача function 3. Составить функцию, которая определяет, сколько зерен попросил положить на N-ую клетку изобретатель шахмат (на 1-ую – 1 зерно, на 2-ую – 2 зерна (в два раза больше предыдущего результата), на 3-ю – 4 зерна, на 4-ю – 8 зерен…). N
— параметр функции.
Пример:
Введите номер клетки: 28 На 28-ой клетке 134217728 зерен.
Задача function 4. Описать функцию IsDigit(A)
, которая возвращает истину, если целое число A
представляет цифру (то есть A
лежит в диапазоне 0–9). В основной программе вывести значение этой функции для N
(N ≥ 0) данных чисел.
Пример:
Введите N: 3 Введите число: 2 >>> true Введите число: 34 >>> false Введите число: 4 >>> true
Задача function 5. Вычисление степени числа с помощью функции на языке Паскаль.
Пример:
Введите число: 3 Введите степень числа: 2 Результат 3^2 = 9
Задача function 6. Описать функцию Calc(A, B, Operation)
вещественного типа, выполняющую над ненулевыми вещественными числами A
и B
одну из арифметических операций и возвращающую ее результат. Вид операции определяется целым параметром Operation
: 1
— вычитание, 2
— умножение, 3
— деление, остальные значения — сложение. С помощью Calc
выполнить для данных A
и B
операции, определяемые данными целыми N1
, N2
, N3
.
Пример:
Введите два числа: 5 7 Введите номер операции (1 — вычитание, 2 — умножение, 3 — деление, остальные значения — сложение): 2 Результат 5*7 = 35
* Из задачника М. Э. Абрамян (Proc22)
Самостоятельная работа
1 вариант: Описать функцию CircleS(R)
вещественного типа, находящую площадь круга радиуса R
(R
— вещественное). С помощью этой функции найти площади трех кругов с данными радиусами. Площадь круга радиуса R вычисляется по формуле S=π∗R2
. В качестве значения Пи использовать 3.14
.
* Из задачника М. Э. Абрамян (Proc18)
Пример:
Введите радиус: 5.2 Площадь круга = 16,328 ___ Введите радиус: 6.3 Площадь круга = 19,782 ___ Введите радиус: 7.1 Площадь круга = 22,294
2 вариант: Описать функцию TriangleP(a, h)
, находящую периметр равнобедренного треугольника по его основанию a
и высоте h
, проведенной к основанию (a
и h
— вещественные). С помощью этой функции найти периметры трех треугольников, для которых даны основания и высоты (периметр = сумме длин всех сторон). Для нахождения боковой стороны b
треугольника использовать теорему Пифагора: b2=(a/2)2+h2
.
* Из задачника М. Э. Абрамян (Proc20)
Пример:
Введите основание треугольника: 6 Введите высоту треугольника: 5 Периметр треугольника = 17,83095 ___ Введите основание треугольника: ... Введите высоту треугольника: ... Периметр треугольника = ... ___ Введите основание треугольника: ... Введите высоту треугольника: ... Периметр треугольника = ...
Потренируйтесь в решении задач по теме, щелкнув по пиктограмме:
Автор admin Просмотров 17.2к. Обновлено 26 сентября 2021
Дана следующая функция y=f(x):
y = 2x — 10, если x > 0
y = 0, если x = 0
y = 2 * |x| — 1, если x < 0Требуется найти значение функции по переданному x.
- Получить с клавиатуры значение x.
- Если x больше 0, то вычислить выражение 2*x-10, результат присвоить переменной y.
- Иначе если x равен 0, то присвоить y значение 0.
- Иначе присвоить y результат выражения 2*|x|-1.
- Иначе если x равен 0, то присвоить y значение 0.
- Вывести значение y на экран.
Pascal
Язык Си
Python
КуМир
Basic-256
Самый эффективный способ изучения любого языка программирования – практика. Поэтому начнем изучение языка Pascal с простого примера: табулирования функции, а также поиска экстремумов функции в заданном диапазоне.
Табулирование функции представляет собой вычисление значения функции для каждого соответствующего аргумента, заданного с определенным шагом, в четко установленных границах. Проще говоря в заданном диапазоне от крайнего левого значения шагаем до крайнего правого значения и в каждой точке шага вычисляем значение функции.
Экстре́мум (лат. extremum — крайний) в математике — максимальное или минимальное значение функции на заданном множестве.
Для примера возьмем функцию: y=2x+3 и диапазон от -3 до 3 включительно. Шаг возьмем равным 1.
Составим таблицу табулирования функции:
Как видно из таблицы экстремумы функции в заданном диапазоне: максимум = 9, минимум = -3
Теперь составим программу. Для начала дадим нашей программе имя.
Program tabulirovanie;
Далее объявляем переменные, которые будем использовать в программе. Для этого используется служебное слово VAR после которого перечисляются имена необходимых нам переменных через запятую. Потом ставим двоеточие и пишем какого типа будут эти переменные.
integer – если нам нужны целочисленные значения и real -если мы будем использовать вещественные числа. Для универсальности математических программ используют, как правило, тип real, поскольку в зависимости от вида функции значения редко бывают целочисленными.
var x, x1, x2, y, s, min, max : real;
где x1 и x2 – границы интервала, x – текущая координата по оси x, y – значение функции в точке x, max и min – экстремумы функции и s – шаг табулирования.
Для упрощения алгоритма вычисление значения функции y в точке x вынесем в отдельную подпрограмму. Для этого используем служебное слово function далее следует значение fun, которое будет возвращать результат расчета, произведенного в подпрограмме. В скобках указываем имя аргумента, которое передаем для расчета в подпрограмму. Все значения будут типа real, т.е. вещественные числа.
function fun(a: real): real;
begin
fun := 2 * a + 3;
end;
Теперь приступим к самой программе. Для обозначения определенного блока команд используется пара служебных слов begin…..end, которые всегда находятся в паре. У каждого begin должен быть в программе end.
begin
write(‘Введите начало диапазона : ‘); Readln(x1);
write(‘Введите конец диапазона : ‘); Readln(x2);
write(‘Введите шаг табулирования : ‘); Readln(s);
Для вывода текста на экран используется команда write / writeln. Разница между этими командами состоит в том, что после команды write курсор остается в конце строки, а после команды writeln курсор переводится в начало следующей строки.
Команда Read / Readln предназначена для ввода данных с клавиатуры в соответствующую переменную, указанную в скобках.
Печатаем шапку нашей таблицы табулирования.
writeln(‘ Х Y’);
Теперь нашей “рабочей” переменной x присваиваем значение начала диапазона, т.е. x1. Значениям экстремумов присваиваем значение функции в начальной точке.
x := x1; min := fun(x1); max := min;
Для табулирования нам надо будет повторять несколько одинаковых команд до тех пор, пока наше значение x не достигнет конца диапазона. Поэтому нам нужен цикл с условием: делать до тех пор пока x меньше либо равен правой границе диапазона, т.е. x2. Для этого используем цикл while <условие> do
while x <= x2 do
begin
Вычисляем значение функции в точке x.
y := fun(x);
Сравниваем полученное значение с переменными max и min. Если значение функции y больше значения переменной max, то заменяем значение переменной max на y. Аналогично проверяем минимум.
if y > max then max := y;
if y < min then min := y;
Выводим значения х и у на экран.
writeln(x:10:3, y:10:3);
Делаем шаг вправо, увеличиваем значение x на величину нашего шага s.
x := x + s;
Команды внутри цикла закончились, поэтому не забываем написать end.
end;
По окончании цикла выводим на экран значения экстремумов функции.
writeln(‘ Максимум функции: ‘, max:10:4);
writeln(‘ Минимум функции: ‘, min:10:4);
end.
Вот так будет выглядеть программа табулирования и результаты ее работы.
Ученик
(121),
на голосовании
6 лет назад
Голосование за лучший ответ
ewe 2e¶ CoЛнЫшКоcBeTиТоЧеНЬяРкО*
Высший разум
(278462)
6 лет назад
Заводите еще одну переменную, в которой будете хранить текущее минимальное значение.
Перед циклами его выставляете в какое-то большое значение, типа миллиона или миллиарда.
Внутри циклов после вычисления значения функции сравниваете это значение и текущее минимальное значение. Если значение функции меньше, то присваиваете текущему минимальному вычисленное значение.
А в конце, после циклов у вас и останется самое минимальное среди всех значений значение. Его вы и выведете пользователю.
Евгений СухаревУченик (121)
6 лет назад
Спасибо! Я думал про такой вариант. Так скорее всего и сделаю, просто немного смущает выставление минимума до большого числа, я думал есть более универсальный вариант.
Вспомогательные алгоритмы используют тогда, когда в программе необходимо выполнять одно и то же действие несколько раз.
Рассмотрим три вспомогательных алгоритма на языке программирования Pascal:
- функции;
- процедуры;
- рекурсии.
Функция — это подпрограмма, в результате работы которой выводится одна переменная (число или текст).
Обрати внимание!
Общий вид описания функции:
function F (x: тип): тип функции;
begin
F: (=) выражение;
end;
Функция описывается до начала описания основной программы.
Напишем программу, которая будет выбирать из двух введённых с клавиатуры значений наибольшее.
С помощью функции опишем алгоритм нахождения большего из двух чисел, а в блоке основной программы запросим ввод данных и воспользуемся уже готовой функцией. В результате работы программы будет выведена одна переменная.
Напишем программу, которая по координатам точек будет вычислять длины сторон квадрата. Найдём периметр квадрата.
Описание функции. Здесь мы указали координаты для первой и второй точек одной стороны, тип функции real, т. к. в формуле используется квадратный корень и значения могут получаться нецелыми.
В блоке подпрограммы описан алгоритм вычисления длины стороны по формуле, известной из геометрии.
Далее в теле основной программы мы задаём координаты для каждой стороны квадрата совместно с функцией. Вычисляем периметр.
Подумай! Как нужно изменить последнюю программу, чтобы она стала универсальной для любого квадрата? Попробуй написать такую программу.