Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Требования к отчету. Рекурсивная подпрограмма




Содержание работы

Begin

Рекурсивная подпрограмма

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

Простой пример рекурсивной функции – вычисление факториала:

Пример 3. Вариант функции, рекурсивно вычисляющей факториал.

functicon Factorial(m: Byte): Longint;

if (m=0) or (m=1) then Factorial:= 1

else Factorial:= m * Factorial(m-1);

end;

3.1 Реализовать следующую программу: Даны отрезки а, b, с. Если из этой тройки отрезков можно построить треугольник, то вычислить его площадь, в противном случае вывести на печать сообщение "нельзя построить треугольник".

Пример 1. Даны отрезки а, b, с. Если из этой тройки отрезков можно построить треугольник, то вычислить его площадь, в противном случае вывести на печать сообщение "нельзя построить треугольник".

Решение.

Program Square;

Var a,b,c,S: Real;

{процедура нахождения площади треугольника по формуле Герона}

Procedure Streug(x,y,z:Real;Var ss:Real);

Var p:Real;

Begin

p:=(x+y+z)/2;

ss:=sqrt(p*(p – x)*(p – y)*(p – z));

End;

Begin

Writeln('Введите длины 3-х отрезков');

Write('a='); Readln(a);

Write('b='); Readln(b);

Write('c='); Readln(c);

if (a>0) and (b>0) and (c>0) and (a+b>c) and (a+c>b) and (b+c>a){контроль ввода}

Then Begin

Streug(a,b,c,S); {вызов процедуры}

Writeln('Площадь S = ', S) {вывод результата}

End

Else Writeln('нельзя построить треугольник');

End.

 

3.2 Выполнить свой вариант задания на функции из приложения А и Б.

 

3.3 Составить программу вычисления числа сочетаний , используя предложенную в примере 3 рекурсивную функцию вычисления факториала числа.

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

Все необходимые данные должны передаваться подпрограммам в качестве параметров; все величины, используемые только внутри подпрограмм, должны быть описаны как локальные. Заполнение массивов следует производить с помощью датчика случайных чисел. Например, для заполнения матрицы случайными числами от -20 до 20 и вывода ее элементов на экран можно создать следующую функцию:

Procedure InMatr(Var x:TArray; row,col:Byte);

Var i,j:Byte; {Описание локальных переменных}

Begin {Формирование случайной матрицы и ее вывод на экран}

Randomize;

For i:=1 to row do Begin

For j:=1 to col do Begin

X[i,j]:=Random(41)-20; {x[i,j] формируется случайно}

Write(x[i,j]:7:2,' '); {X[i,j] выводится на экран}

End;

Writeln;

End;

End;

Тогда в основной программе вызов этой процедуры будет выглядеть следующим образом:

Program prog;

Type TArray=Array[1..10,1..10] of Real;

Var A: TArray; n,m: Byte;

{описание необходимых процедур и функций}

BEGIN {глобальный блок – основная программа}

Write('Введите число строк и столбцов матрицы А (не более 10) ');

Readln(n,m);

{вызов процедуры формирования и печати матрицы}

InMatr(A,n,m);

...

Процедура печати матрицы может выглядеть следующим образом:

Procedure Print(x:TArray; row,col:Byte);

Var i,j:Byte; {Описание локальных переменных}

Begin

For i:=1 to row do Begin

For j:=1 to col do Begin

Write(x[i,j]:7:2,' ');

End;

Writeln;

End;

End;

 

3.5 Сохранить все результаты в файлы и оформить отчет.

Отчет по работе должен содержать:

· название, цель, задачи работы;

· номер и условие своего варианта;

· текст (листинг) программ;

· полученные численные результаты;

· ответы на контрольные вопросы по указанию преподавателя.




Поделиться с друзьями:


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


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



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




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