Как составить программу вычисления функции pascal

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

Содержание:

  • Стандартные функции языка 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
  • 1

  • описание формальных параметров (тех, значения которых передаются из основной программы в функцию):
  • формальные параметры в паскале

  • параметры-переменные — параметры, значения которых становятся доступны и в основной программе (возвращаются в программу)
  • параметры-переменные в паскале

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

  • Вызывается функция в теле основной программы, только если ее имя фигурирует в каком-либо выражении. В отличие от процедуры, которая вызывается отдельно.
  • Внутри функции можно объявлять и использовать локальные переменные:
  • локальные переменные в функции

  • значение, которое является результатом, записывается в переменную, имя которой совпадает с названием функции; объявлять ее НЕ НАДО:
  • результат функции

Рассмотрим синтаксис:

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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var x:integer;
function fact(a:integer):integer;
var i: integer;
begin
  if a<=1 then begin 
        fact:=1;exit;
  end;
  result:=2;
  for i:=3 to a do
     result:=result*i;
  fact:=result;
end;
begin
 writeln('число:');
 readln(x);
 writeln(fact(x));
end.
1
2
3
4
5
6
7
8
9
10
function Fact(n: integer): integer;
begin
  Result := 1;
  for var i:=1 to n do
    Result *= i
end;
begin
 var x:= readInteger('число:');
 println(x,'! = ',fact(x));
end.

В рассмотренном примере функция имеет один параметр — 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.

  1. Получить с клавиатуры значение x.
  2. Если x больше 0, то вычислить выражение 2*x-10, результат присвоить переменной y.
    1. Иначе если x равен 0, то присвоить y значение 0.
      1. Иначе присвоить y результат выражения 2*|x|-1.
  3. Вывести значение y на экран.

Pascal

Язык Си

Python

КуМир

Basic-256

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

Основным их
преимуществом является возможность многократного использования, более легкого и
удобного тестирования и отладки независимо от других модулей.

В Паскале
главная программа начинается с декларативной части, в которую, в частности,
входят и описания всех процедур и функций. Обычно, в Паскале декларативная
часть состоит из раздела определения констант, за которым следует раздел
объявления переменных, а затем все процедуры и функции. Главное правило – любой
объект должен быть описан до его первого использования.

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

program
summa_kv;

uses crt;

var e,
f:integer;

function powers
(n: integer) : integer; {объявление функции}

var i,
sum:integer;

begin

clrscr;

sum:=0;

for i:=1 to n do

sum:=sum +
sqr(i);

powers:= sum

end; {конец
функции}

begin {основная
программа}

write (‘Сколько
чисел нужно cложить?’);

readln (e);

f:= powers (e);
{вызов функции, значение е передается в n}

writeln (‘сумма
квадратов ‘,e,’ чисел’);

writeln (‘Число
членов = ‘,e,’. Сумма = ‘,f);

end. {конец
основной программы}

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

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

Например:
function powers (n:integer):real;

Здесь имя
функции – powers, у нее один формальный параметр – n, принадлежит типу integer.
Функция возвращает результат типа integer.

За заголовком
функции следует объявление локальных переменных подпрограммы.

Например: var i,
sum:integer;

Локальные
переменные, объявленные в подпрограмме, никак не связаны с объектами главной
программы, даже если у них одинаковые имена.

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

Процедуры
применяются, когда приходится решать задачи, в которых интересует не вычисление
какого-то конкретного значения, а выполнение некоторой совокупности действий,
например, отпечатать список чисел. Процедура обычно не возвращает в основную
программу никакого значения. А если и передает данные, то только через
глобальные переменные. Но существуют, так называемы, процедуры с параметрами, в
которые (и даже из которых) можно передавать данные. В этой теме будут
рассмотрены и примеры таких процедур. В Электронном задачнике даются задачи
именно на такие процедуры.

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

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

Пример:
procedure test (a: real; var b: integer);

где test –
заголовок процедуры, параметр – a типа real, параметр b типа integer.

Вызов процедуры
из главной программы представляет собой просто имя процедуры со списком
аргументов. Например: test (x,y). Процедуры вообще могут не иметь параметров.

Например, сумма
n первых натуральных чисел:

program primer;
// процедура без параметров

uses crt;

var a,k,sum :
integer;

procedure add; {объявление
процедуры}

begin

writeln(a ,’ чисел,
сумма ‘,sum);

end; {конец
процедуры}

begin {начало
основной программы}

clrscr;

writeln(‘последовательное
сложение натуральных чисел’);

write(‘сколько
первых натуральных чисел сложить? ‘);

readln(k);

sum:=0;

for a:=1 to k do

begin

sum:=sum+a;

add; {вызов процедуры}

end;

end.

Пример решения
задач из Электронного задачника:

Program Proc1;
// процедура с параметрами

uses crt;

var i: integer;

t ,c:real;

procedure
powerA3(a:real;var b:real); {формальные параметры процедуры}

begin

b:=power(a,3);
{a – число, с – степень}

end;

begin {основная
программа}

writeln(‘Вычисление
3-й степени числа:’);

for i:=1 to 5 do

begin

write(‘введите число
‘);

readln(t);

powerA3(t,c);
{фактические параметры процедуры}

writeln(3-я
степень числа:’,c:2:1);

end;

end.

Program Proc3;
// процедура с параметрами

uses crt;

var
a,b,c,d,Ar,Ge:real;

procedure
Mean(x,y:real;var AMean,GMean:real);

begin

AMean:=(x+y)/2;

GMean:=sqrt(x*y);

end;

begin

writeln(‘Введите
числа a,b,c,d’);

readln(a,b,c,d);

Mean(a,b,Ar,Ge);

writeln(‘ср-ар’,Ar:2:1,’ср-геом’,Ge:2:1);

Mean(a,c,Ar,Ge);

writeln(‘ср-ар’,Ar:2:1,’ср-геом’,Ge:2:1);

Mean(a,d,Ar,Ge);

writeln(‘ср-ар’,Ar:2:1,’ср-геом’,Ge:2:1);

end.

program Proc16;
// функция

uses crt;

var a, b:real;

function
sign(x:real):integer;

begin

if x<0 then
sign:=-1;

if x=0 then
sign:=0;

if x>0 then
sign:=1;

end;

begin

writeln (‘vv a i
b’);

readln (a,b);

writeln
(‘sign(a)+sign(b) = ‘,sign(a)+sign(b));

end.

program Proc17;
// функция

uses crt;

var a1,
b1,c1:real;

i:integer;

function
RootsCount(a,b,c:real):string;

var d:real;

begin

d:=sqr(b)-4*a*c;

if d<0 then
RootsCount:=’нет корней’;

if d=0 then RootsCount:=’один
корень’;

if d>0 then
RootsCount:=’два корня’;

end;

begin

for i:=1 to 3 do

begin

writeln (‘введи
коэффициенты квадратного уравнения a, b,c’);

readln
(a1,b1,c1);

writeln
(RootsCount(a1,b1,c1));

end;

end.

Наберите и
отладьте следующие программы, разберитесь в их работе:

1. Программа
“Неповторяющиеся случайные числа” с использованием массива и
процедуры без параметров.

uses crt;

var
a,b,c,d:integer;

q:array[1..15]
of integer;

procedure qw;

begin

for b:=1 to 5 do

begin

if a=b then
continue;

if q[a]=q[b]
then begin q[a]:=random(20); qw; end;

end;

end;

begin

clrscr;

for a:=1 to 5 do

q[a]:=random(20);

for a:=1 to 5 do

qw;

for a:=1 to 5 do

writeln (q[a]);

end.

2. Проверка
целого числа на четность (использование функции).

var m:integer;

function
Chet(n:integer):boolean; { Функция проверки целого числа на четность }

begin

if (n mod 2)= 0
then Chet:=TRUE else Chet:=FALSE;

end;

begin

writeln(‘Введите
целое число и нажмите Enter’);

writeln(‘Для
завершения введите 100’);

repeat

readln ( m );

if chet(m)

then writeln(
m,’ – четное число’)

else writeln(
m,’ – нечетное число ‘);

until m = 100;

end.

3. Вычисление
длины и площади окружности (использование процедуры с параметрами).

uses crt;

var t,l,s:real;
{глобальные переменные радиус, длина и площадь окружности}

procedure
SqLeOkr(r:real); {процедура, r формальный параметр процедуры}

begin

s:=pi*r*r; {r –
радиус, s – площадь круга, l – длина окружности}

l:=2*pi*r;

end;

begin {основная
программа}

writeln(‘Вычисление
длины окружности и площади круга:’);

write(‘Задайте
радиус и нажмите Enter ‘);

readln(t);

l:=0;

s:=0;

SqLeOkr(t);
{фактический параметр процедуры}

writeln(‘Радиус
окружности: ‘,t:3:1);

writeln(‘Длина
окружности: ‘,l:3:1,’,площадь: ‘,s:3:1);

end.

Упражнения

Выполните
задания с Proc2 по Proc15 по электронному задачнику (стр.37)
и с Proc18 по Proc22 по электронному задачнику (стр.39).
Открыть его можно в режиме Помощь – Электронный задачник РТ.

Функции в языке Турбо Паскаль

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

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

Function
<имя> (<список аргументов>): <тип
значения функции>; { заголовок }

<блок
описания локальных данных>

Begin
{ начало исполняемой части функции }

<тело
функции (исполняемая часть)>

End;
{ конец описания функции }

В теле функции
обязательно должна быть команда
присваивания вида:

<имя
функции> :=
<вычисленное
значение>;

которая и позволит
функции возвратить вычисленное значение.

Например, опишем
функцию вычисления среднего арифметического
двух целых чисел:

Function
middle (a, b : integer) : real;

Begin

Middle
:= ( a + b ) / 2

End;

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

Примеры решаемых задач

Пример 1.
Составить программу, которая вычислит
значение выражения

am+bn+(ab)m+n.

Вычисление степени
числа оформить в виде подпрограммы.

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

Программа:

program
calc_proc;

uses
crt;

var
a, b, m, n, s1, s2, s3, s : integer;

procedure
stepen (x, y : integer; var z : integer);

{процедура
возводит число x
в степень y,
результат записывает в z}

{т.е.
в процедуре описано правило вычисления
z=xy}

var
i
: integer;
{ локальная переменная для организации
цикла }

begin

z
:= 1;

for
i := 1 to y do z := z * x

end;

begin

clrscr;

write(‘Введите
a, b, m, n ’);

readln(a,
b, m, n);

{
три раза вызываем процедуру stepen
для вычисления трех слагаемых }

stepen(a,
m, s1); { вычислили
s1
как
am
}

stepen(b,
n, s2); { вычислили
s2
как
bn
}

stepen(a-b,
m+n, s3); { вычислили
s3
как
(a-b)m+n
}

s
:= s1
+ s2
+ s3;
{ вычислили сумму трех слагаемых }

writeln(‘Значение
выражения ’, s);

readln

end.

program
calc_func;

uses
crt;

var
a, b, m, n, s : integer;

function
stepen (x, y : integer) : integer;

{
функция возводит число x
в степень y
}

{
т.е. описано правило вычисления stepen
=
xy
}

var
i
,z
: integer;
{локальные переменные:
i
для организации цикла, z
для вычисления произведения }

begin

z
:= 1;

for
i := 1 to y do z := z * x;

stepen
:= z
{ присвоили имени функции вычисленное
значение }

end;

begin

clrscr;

write(‘Введите
a, b, m, n ’);

readln(a,
b, m, n);

{
три раза вызываем функцию stepen
для вычисления трех слагаемых }

s
:= stepen(a, m) + stepen(b, n) + stepen(a-b, m+n, s3);

writeln(‘Значение
выражения ’, s);

readln

end.

Контрольные задания

  1. Составить программу,
    которая вычислит площадь треугольника,
    заданного координатами своих вершин.
    Использовать формулу Герона. Вычисление
    расстояния между двумя точками оформить
    в виде процедуры или функции.

  2. Составить программу
    определения НОД трех чисел (по алгоритму
    Евклида) с использованием процедуры
    нахождения НОД двух чисел (по алгоритму
    Евклида).

  3. Составить программу,
    проверяющую гипотезу Гольдбаха. Она
    состоит в том, что любое четное число,
    большее 2, можно представить в виде
    суммы двух простых слагаемых. Программа
    должна вводить четное положительное
    число и выводить все его возможные
    представления в виде суммы двух простых
    слагаемых. Для определения, является
    ли число простым, использовать
    подпрограмму.

  4. Составить программу,
    которая изображает на экране:

    1. лес

    2. аллею

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

  1. «Диаграммы».
    Составить программу, которая вводит N
    числовых данных и интерпретирует их в
    виде столбиковой, круговой, линейной
    диаграмм. Программа должна в
    алфавитно-цифровом режиме предоставлять
    пользователю меню – список видов
    диаграмм, позволять выбрать (например,
    ввести номер) нужной диаграммы, после
    чего в графическом режиме построить
    нужную диаграмму. Каждый из режимов
    работы программы (ввод данных, построение
    каждого вида диаграмм) оформить в виде
    отдельной процедуры.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

“результат работы кода в виде скриншота окна программы с отображением кода и полученного результата.” – это уже немного загнул(а) препод. Ибо в Turbo Pascal это невозможно, т.к. программа выполняется в отдельном окне, текст кода выполняющаяся программа закрывает. Вот в Pascal ABC, например – да, возможно, но Pascal ABC – не полноценный Pascal, а несколько урезанный (более того, даже не совсем Pascal, а сильно переработанный C#, если мне память не изменяет).

Ладно, не будем придираться к заданию, тем более, что смысл понятен, да и толку от этих придирок чуть. Вот код программы:

 Program F1; 
uses crt;
var x: real;
begin
clrscr;
writeln ('Введите с клавиатуры значение переменной x (число), после чего нажмите клавишу Enter. При вводе дробных значений, целую часть от дробной отделяйте точкой, а не запятой.');
write ('x=');
readln (x);
writeln ('Ответ: y(', x, ') = ', 3-7.5*x+sqr (x)-((sqr (x)+2*x-8)/3));
write ('Программа завершена. Для выхода нажмите клавишу Enter');
readkey;
end.

А вот блок-схема (вместо “y=” в прямоугольник перепишите формулу из задания вместе с этой дробью (дополните, т.е. y=3-7,5x…)- просто иначе может слишком мелким текст у меня получиться, трудночитаемым):

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