Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Лабораторная работа. Для использования подпрограммы-процедуры необходимо сначала описать процедуру, а затем обращаться к ней (обращение к процедуре – отдельный оператор)

Функции

Процедуры

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

Для использования подпрограммы-процедуры необходимо сначала описать процедуру, а затем обращаться к ней (обращение к процедуре – отдельный оператор). Описание процедуры включает заголовок (имя) и тело процедуры. Заголовок состоит из зарезервированного слова procedure, имени процедуры и, заключенного в скобки, списка формальных параметров с указанием типа. Название «формальные» эти параметры получили в связи с тем, что в этом списке заданы только имена для обозначения исходных данных и результатов работы процедуры, а при вызове подпрограммы на их место будут поставлены конкретные значения. Тело процедуры – блок, по структуре аналогичный программе.

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

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

Общий вид описания процедуры:

Procedure <имя> (список формальных параметров, блок описания);

Const …; ù

… ý блок описания

Var ….; û

begin

<операторы>

end;

Подпрограмма-функция обрабатывает данные, переданные ей из главной программы, и затем возвращает полученный результат (в отличие от процедуры). Функция, определенная пользователем, состоит из заголовка и тела функции. Заголовок содержит зарезервированное слово Function, имя, список формальных параметров (заключенный в скобки) и тип возвращаемого функцией значения. Тело функции представляет собой локальный блок, по структуре сходный с программой. Общий вид описания функции:

Function <имя> (<параметры>): <тип результата>;

Const …; ù

… ý блок описания

Var ….; û

begin

<операторы>

end;

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

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

Program TR;

Var a, b, c, ha, hb, hc: real;

Function H_TR(a, b, c: real): real; { a, b, c - Стороны треугольника }

Var p, s: real;

Begin

If (a<0) or (b<0) or (c<0) Then begin

Writeln('Стороны треугольника >0?'); readln; Halt end;

 

If (a>(b+c)) or (b>(a+c)) or (c>(a+b)) Then begin

Writeln('a<(b+c), b<(a+c), c<(a+b)?'); readln; Halt end;

p:= (a+b+c)/2; { полупериметр }

s:= Sqrt(p*(p-a)*(p-b)*(p-c)); { площадь }

H_TR:= (2*s)/a; { Присвоение функции значения }

End;

Begin

Writeln('Введите значения сторон треугольника a,b,c'); Readln(a,b,c);

ha:= H_TR(a, b, c); hb:= H_TR(b, a, c); hc:= H_TR(c, b, a);

Writeln('Высоты треугольника:');

Writeln('ha=',ha:-10:4, 'hb=',hb:-10:4, 'hc=',hc:-10:4); Readln

End.

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

 

Пример 2: Перевод десятичного числа в двоичное

var a: longint;

function DEC_BIN(x:longint):string;

const digits:array [0..1] of char = ('0','1');

var res:string; d:0..1;

begin

res:='';

while (x<>0) do begin

d:=x mod 2; res:=digits[d]+res;

x:=x div 2;

end;

DEC_BIN:=res;

end;

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

readln(a);

writeln(DEC_BIN(a));

end.

 

Пример 3: Возведение целого числа в натуральную степень

var x,y:integer;

function Degree(a,b:integer):longint;

var r:longint;

begin

r:=1;

while b>0 do begin

r:=r*a;

b:=b-1;

end;

Degree:=r;

end;

begin

writeln('введите число и (через пробел) степень числа');

readln(x,y);

writeln(Degree(x,y)); { print x^y }

end.

 

Пример 4: Нахождения НОД и НОК двух чисел

var a,b:longint;

function NOD(x,y:longint):longint; { функция поиска наиб. общ. делителя }

begin

if x<>0 then NOD:=NOD(y mod x,x) else NOD:=y;

end;

function NOK(x,y:longint):longint; { функция поиска наим. общ. кратного }

begin

NOK:=(x div NOD(x,y)) * y;

end;

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

readln(a,b);

writeln('НОД этих чисел = ', NOD(a,b));

writeln('НОК этих чисел = ', NOK(a,b));

end.

 

Задания для работы.

№ варианта Задание
Вариант 1. Рассчитать площадь треугольника по известным координатам вершин с использованием формулы S= 0.5*abs(y1*(x3-x2)+ y2*(x1-x3) + y3*(x2-x1))
Вариант 2. Разработать функцию расчета площади треугольника по формуле Герона (значения сторон вычисляются внутри функции).
Вариант 3. Вывести на экран сообщения о типе треугольника: остроугольный, прямоугольный, тупоугольный (задаются координаты вершин). Для расчета углов использовать теорему косинусов: c_a:=(b*b + c*c - a*a)/(2*b*c); где c_a - косинус угла, противоположного стороне "a".
Вариант 4. Вычислить значение выражения у=а1х42х33х24х+а5, используя процедуру для ап.
Вариант 5. Упорядочить значения a, b, c по возрастанию, используя процедуру смены местами двух чисел.
Вариант 6. Подсчитать число сочетаний без повторений из n элементов по k элементов.
Вариант 7. Найти количество и сумму делителей числа.
Вариант 8. Найти НОД трех чисел с помощью алгоритма Евклида.
Вариант 9. Найти НОК четырех чисел.
Вариант 10. Заданы 3 одномерных массива А, В и С из n чисел. Вычислить среднее арифметическое наименьших элементов этих массивов.
Вариант 11. Вычислить среднее арифметическое действительных корней квадратных уравнений 2х2-3х+1=0 и 3х2+2х-1=0.

Тесты:

1. Процедуры и функции – это:

· операторы

· подпрограммы

· имена

· переменные

2. Рекурсивная функция – это:

· повторение выполнения функции или процедуры внутри себя

· оператор

· цикл

· метод определения функции или процедуры

3. Обращение к функции в программе имеет вид:

· <имя функции>(<список глобальных параметров>: тип параметров): тип значения;

· <оператор функции>;

· <имя функции>:= тип значения;

· <имя функции>;

4. Обращение к процедуре в программе имеет вид:

· <имя процедуры>(<список глобальных параметров>);

· <оператор процедуры>;

· <имя процедуры>:= тип значения;

· <имя процедуры>;

5. Определить результат вычисления функции akk(1,k); если задано ее описание:

function akk(m,n:integer):integer;

begin

if m=0

then akk:=n+1

else

if n=0

then akk:=akk(m-1,1)

else akk:=akk(m-1, akk(m,n-1));

end;

· 2*k

· k+3

· 2*k=3

· k+2

6. В некоторой программе описаны переменные:

var i:integer; r:real; c:char;

Какая из данных процедур или функций может быть вызвана из этой программы с помощью оператора c:=f(i, 5, r, 5*i, c, “r”);

· Function f(var a:integer; b:integer; var c:real; d:real; var e:char; g:char);

· Function f(var a:integer; b:integer; var c:real; d:real; var e:char; g:char):char;

· procedure f(var a:integer; b:integer; var c:real; d:real; var e:char; g:char);

  • Function f(var a:integer; var b:integer; var c:char; d:real; var e:char; g:char):char;
<== предыдущая лекция | следующая лекция ==>
Конкурсное производство. Мировое соглашение — процедура достижения договоренности между должником и кредиторами относительно отсрочки или рассрочки исполнения обязательств | Процесс гибели и размножения
Поделиться с друзьями:


Дата добавления: 2015-05-10; Просмотров: 344; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.02 сек.