КАТЕГОРИИ: Архитектура-(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) |
Общие сведения. Цель работы: научиться создавать и вызывать в Паскаль-программах процедуры и функции, уметь использовать рекурсивные функции
Лабораторная работа №4 Цель работы: научиться создавать и вызывать в Паскаль-программах процедуры и функции, уметь использовать рекурсивные функции. Процедуры и функции являются «строительными блоками» для программ и обеспечивают их модульность, а потому представляют собой важнейшее средство увеличения эффективности программирования. Перед выполнением работы необходимо ознакомиться с правилами оформления и вызова процедур и функций в языке программирования Паскаль. Пример 1. Вычислить значения функции f(x)=2 cos x+3, при x ={1; 4; 7,5; 20}. Вывести результаты в два столбца: в первом - значения x, во втором - значения f(x). Вычисления провести двумя способами: с помощью функции и процедуры. Решение. Аргумент и результат функции – действительные числа, поэтому используем тип Real. В теле функции будет только оператор присваивания – для вычисления значения выражения. Процедура отличается строкой заголовка, - для передачи в основную программу результатов вычислений добавим параметр-переменную fx. Чтобы вывести результаты в виде таблицы, используем форматный вывод. program proc_1; function f (x: Real):Real; begin f:=2*cos(x)+3 end; procedure proc_f (x: Real; var fx: real); begin fx:=2*cos(x)+3 end; var x, fx: real; begin Writeln('с использованием процедуры:'); Writeln(' x f(x)'); x:=1; proc_f (x,fx); Writeln (x:6:2, fx:6:2); x:=4; proc_f (x,fx); Writeln (x:6:2, fx:6:2); x:=7.5; proc_f (x,fx); Writeln (x:6:2, fx:6:2); x:=20; proc_f (x,fx); Writeln (x:6:2, fx:6:2); Readln; Writeln('с использованием функции:'); Writeln(' x f(x)'); Writeln(1:6, f (1):6:2); Writeln(4:6, f (4):6:2); Writeln(7.5:6:2, f (7.5):6:2); Writeln(20:6, f (20):6:2); Readln; end. Пример 2. Создать рекурсивную функцию поиска i-го члена последовательности, заданной рекуррентной формулой A1=const1, A2=const2, Ai=3Ai-2-Ai-1.Вывести через пробел значения рекурсивной функции при значениях аргумента от 1 до 10 включительно. Решение. По условию задачи аргумент может принимать только целые значения, поэтому функция имеет параметр-значение типа Integer. Выход из рекурсии в данном случае осуществляется при двух значениях аргумента (при i =1, i =2), поэтому в рекурсивной функции необходимы два вложенных условных оператора или же оператор выбора case. В приведенном примере использованы операторы if, но попробуйте самостоятельно записать решение с помощью оператора выбора. В основной программе значения аргумента - целые последовательные числа, поэтому следует воспользоваться оператором цикла с параметром for. program proc_2; function A (i: Integer): Integer; begin if i=1 then A:=1 else if i=2 then A:=3 else А:=3*A(i-2)-A(i-1) end; var i: Integer; begin for i:=1 to 10 do Write (A(i),' '); Readln end. Варианты заданий Задание 1. Составить программу для решения задачи с применением функции и процедуры пользователя. a) В правильном треугольнике проведена средняя линия. Найти площадь образовавшейся трапеции, дважды используя функцию вычисления площади правильного треугольникапо формуле: b) Для правильного треугольника со стороной а построены вписанная и описанная окружности. Найти площадь образовавшегося кольца, используя функцию вычисления площади круга S=πR2. Для нахождения радиусов окружностей воспользуйтесь формулами: , c) Тариф предусматривает оплату телефонных разговоров следующим образом: при продолжительности разговора меньше P минут стоимость одной минуты составляет S1 копеек, в противном случае – S2 коп/мин (S1, S2, P - константы). Используя функцию вычисления стоимости одного разговора, найти суммарную стоимость трех звонков известной продолжительности. d) На товар дважды была сделана скидка – на p1, а затем на p2 процентов. Первоначальная стоимость товара составляла S рублей. Используя функцию вычисления стоимости товара с учетом скидки на P процентов, найти стоимость товара после двойной скидки. Задание 2. Вывести значения рекурсивной функции при значениях аргумента от 1 до 10 включительно. a) Найти член последовательности, заданной формулой: Di=7+Di-1 при i>1, где D1 определяется пользователем. b) Найти член последовательности, заданной формулой: Ai=Ai-1-Ai-2 при i>2. Значения первого и второго членов последовательности вводятся пользователем. c) Найти член последовательности, заданной следующим образом: d) Найти член последовательности, заданной формулой Bi=4·Bi-1, при i>1. Значения первого члена последовательности вводится пользователем. Дополнительные задания 1. Для чисел a, b, c найти значение выражения min(a,ab)+min(a,ac)+1 с использованием функции вычисления минимального из двух чисел.
2. Дан квадрат со стороной а, диагональ этого квадрата является стороной второго квадрата, диагональ второго квадрата – стороной третьего. Найти длину стороны третьего квадрата, используя функцию вычисления длины диагонали квадрата по его стороне: Контрольные вопросы 1. В чем состоит принципиальное отличие процедур от функций? 2. Чем отличается вызов функции от вызова процедуры? 3. Какой переменной присваивается значение в процедуре и в функции? 4. Какие переменные в языке Паскаль называются локальными, а какие глобальными? 5. Какие процедуры и функции называют рекурсивными? 6. Как отличить «обычную» функцию от рекурсивной? 7. Если значения процедуры и функции являются операндами некоторого выражения, то которую из них можно вставить «непосредственно» в это выражение?
Дата добавления: 2014-12-16; Просмотров: 676; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |