Комбинированное занятие

Download Report

Transcript Комбинированное занятие

Функции в Turbo Pascal
Шутилина Л.А.
[email protected]
В Паскале помимо процедур можно использовать
функции. Их еще называют функции пользователя ( в
отличие от стандартных функций, таких как sin, random и
др.) Обращение к функции приводит к вычислению ее
значения – объекта типа real, integer или char.
Function Имя(параметры):тип результата;
var список локальных переменных
begin
Команды
Имя:=выражение;
end;
Вызов функции пользователя осуществляется так же, как и
стандартных функций в Паскале, т.е. их значения могут
присваиваться переменным, входить в состав выражений.
Рассмотрим пример:
B
Составить программу для
вычисления площади
выпуклого
четырехугольника, заданного A
длинами его сторон и
диагональю.
s 
C
D
p ( p  a )( p  b)( p  c ) ,
Диагональ делит
a, b, c  длиныст орон ,
четырехугольник на два
abc
p

треугольника, к
2
которым применима
формула Герона:
program Function_of_user;
uses Crt;
var AB,BC,CD,DA,AC,S1,S2,S:real;
Function f(a,b,c:real):real;
var p:real;
begin
p:=(a+b+c)/2;
F:=Sqrt(p*(p-a)*(p-b)*(p-c));
end;
begin
readln (AB,BC,CD,DA,AC);
S1:=f(AB,BC,AC);
S2:=f(CD,DA,AC);
s:=S1+S2;
writeln (S:8:2);
Writeln (f(AB,BC,AC)+ f(CD,DA,AC):8:2);
readln;
end.
Вызов функции
Для многих программ не важно, что
изберет
программист
для
их
реализации: процедуру или функцию,
но есть определенные правила, которые
дают четкие отличия процедур и
функций
Сравнение процедур и функций.
Процедуры
Функции
1
Может
иметь
несколько Имеет только один результат,
результатов или выполнять тип
которого
указывается
некоторое действие
отдельно
при
объявлении
функции.
2
Результатами
могут быть Результат может быть только
значения
любого
типа значением типа real, integer
массивы, строки, числа и или char.
т.д.
3
Команда вызова процедуры
–
отдельная
команда,
которая
употребляется
самостоятельно
4
Обращение к функции может
использоваться
только
как
компонент
выражения
соответствующего типа.
В теле функции должен быть
хотя
бы
один
оператор
присваивания, в левой части
которого
указано
имя
функции.
Пример задачи 1
Написать программу вывода на экран компьютера
таблицы тригонометрических функций sin x, cos
x. tg x. Для вычисления функции tg x
использовать функцию пользователя, а для
вывода таблицы – процедуру.
Мы с вами знаем много стандартных функций ЯП
Паскаль. К ним относятся и функции sin x и cos x.
А для вычисления такой распространенной
функции, как тангенс, стандартной функции в
Паскале нет. Поэтому мы напишем ее
самостоятельно.
Program Table_of_function;
uses CRT;
begin
var x, nx,kx: integer;
clrscr;
function Tg(kx:integer):real;
begin
writeln ('Zadayte diapason
if cos(kx)<> 0 then
dlja x: nx, kx');
Tg:=sin(kx)/cos(kx)
Readln (nx, kx);
else Tg:=-100;
{*** zagolovok tablizy***}
end;
writeln ('x sinx cosx tgx');
procedure output(a:integer;b,c,d:real);
for x:=nx to kx do
var i:integer;
begin
output(x,sin(x),cos(x),tg(x));
for i:=1 to 35 do
readln;
write('_');
writeln;
end.
writeln (a:8,b:8:2,c:8:2,d:8:2);
end;
Из данного примера видно, что стандартные
функции и функции пользователя в программе
используются совершенно одинаково.
Для вывода информации на экран
компьютера мы использовали процедуру, т.к.
функция не может производить подобные
действия – вывод чего-то на экран компьютера. В
описании процедуры использованы 4 параметра
– значения.
Поэтому в качестве фактических параметров
при вызове процедуры мы можем использовать
имена переменных, выражения (в виде функций)
и константы. Параметров–значений в этой
процедуре нет, т.к. она ничего не вычисляет.
Пример задачи 2
Написать программу, которая определяет,
является ли билет «Счастливым», т.е. сумма
правых трех цифр числа должна быть равна
сумме левых трех цифр. Для написания этой
программы нам надо вспомнить операции DIV
целая часть от деления и MOD остаток от
деления.
20 div 7 =2
20 mod 7 =6
123 div 10 = 12
123 mod 100 = 23
Program Bilet;
uses Crt;
var Nomer: longint;
lev,prav:integer;
function
summa(x:integer):integer;
var i,j,k:integer;
Begin
i:=x div 100;
j:=x div 10 mod 10;
k:=x mod 10;
summa:=i+j+k;
end;
begin
clrscr;
writeln (‘ Zadayte nomer bileta-);
writeln (‘celoe 6-zn chislo');
readln (nomer);
lev:= nomer div 1000;
prav:= nomer mod 1000;
if summa(lev)=summa(prav) Then
writeln ('Yes‘) else writeln ('No');
readln;
end.
Пример задачи 3
Написать программу для вычисления значения
функции
f(0.8,a)+f(a,b)-f(2a-1,ab),
где a, b действительные числа и
x2  y 2
f ( x, y)  2
2
x  2 xy  y  6
Program F_X_Y;
uses CRT;
var a,b,z: real;
function f(x,y:real):real;
begin
f:= (sqr(x)-sqr(y))/(sqr(x)-2*x*y+sqr(y)+6);
end;
begin
clrscr;
writeln ('Zadayte a,b');
readln(a,b);
z:=f(0.8,a)+f(a,b)-f(2*a-1,a*b);
writeln(z:8:2);
readln;
end.
При а=1 и в=2 ответ –0,06
При а=2, в=3 ответ –0,15
Задачи для самостоятельного решения
Даны отрезки a,b,c и d. Для каждой тройки этих
отрезков, из которых можно построить
треугольник, определить периметр этого
треугольника. Использовать функцию, которая
будет определять, существует ли треугольник с
данными сторонами x,y,z, если да, то
высчитывает его периметр, если нет, то выводит
значение 0 и процедуру вывода ответов на экран
ПК.
Написать программу с использованием функции,
которая переворачивает заданное целое 4-значное
число «задом наперед».