Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Блок схема программы, содержащей подпрограммуСодержание книги
Похожие статьи вашей тематики
Поиск на нашем сайте
Проследим соотношение между формальными и фактическими параметрами. Правило соответствия между формальными и фактическими параметрами хорошо демонстрируется на схеме (рис. 6.1) для вычисления S1. процедура основная программа Формальные параметры фактические параметры
Рис. 6.1 Программа, содержащая процедуру, имеет вид. Program DemoProc; Var AB,BC,CD,DA,DB,S,S1,S2:real;{глобальные парам.} Procedure Surface(a,b,c:real;Var s:real); {локальные параметры} Var p:real; Begin p:=(a+b+c)/2; s:=sqrt(p*(p-a)*(p-b)*(p-c)); End; {Основная программа} Begin Writeln('Введи длины сторон и диагональ четырехугольника-'); Readln(AB,BC,CD,DA,DB); Surface(BC,CD,DB,S2); {вызов процедуры} Surface(AB,DB,DA,S1); {вызов процедуры} S:=S1+S2; Writeln('S=',S:6:2); End. Функция пользователя Другой вид подпрограммы пользователя – это функция (Function ). Функция оформляется аналогично процедуре, за исключением заголовка. Формат заголовка подпрограммы Function: Function<имя>(<список описаний формальных параметров>):<тип>; Отличительные особенностиподпрограммы Function: – имея несколько входных параметров, функция имеет один выходной параметр; – этот параметр обозначается именем функции и передается в основную программу в качестве операнда в выражении. Вызывается функция по ее имени с указанием фактических параметров (как стандартная функция). Пример 6.3. Используя подпрограмму Function, вычислить значение функции y=y(x) для любого вводимого значения х. Program D_Funct; Var x,y,z: real {глобальные параметры} Function F(t: real): real; Var w: real; {локальный параметр} Begin If Abs(t)<=1 then w:=Sqrt(1-Sqr(t)) else w:=Sqr(Cos(t)); F:=w; End; {основная программа} Begin Write('введи x='); Readln(x); y:=F(x); Writeln(x:6:2,y:8:3); z:=x+1.5; y:=F(z); Writeln(z:6:2,y:8:3); End. Обратите внимание на следующие два пункта. В разделе операторов подпрограммы должен находиться оператор, присваивающий имени функции какое-либо значение (F:=w;). В основной программе вызов подпрограммы Function происходит дважды. Первый раз для значения параметра х, вводимого с пульта, второй - для параметра z:=x+1.5. Проверьте себя, что будет напечатано на экране, если добавить строку y :=F(-1); Writeln(y).
Рекурсивные программы В математике рекурсивным называется определение любого понятия через самого себя. Классическим примером является определение факториала целого числа, большего или равного нулю. Здесь функция факториал определена через факториал, т.е.:
Пример 6.4. Определить факториала целого числа n. Для вычисления приведенной выше рекурсивной формулы используем подпрограмму-функцию Fakt.
Program D_Recurc; Var n,f: nteger; Function Fakt(m:integer):integer; Var w:real; Begin If m=1 then Fakt:=1 {проверка условия завершения рекурсии} else Fakt:=m*Fakt(m-1); {рекурсивное вычисление n!} End; {основная прграмма} Begin Write('введи n='); Readln(n); f:=Fakt(n); Writeln('n!=',f:3); End. Пусть в основной программе вычисляется 3!, для этого используется оператор f:=Fakt(3). При вычислении функции с параметром 3 произойдет повторное обращение к функции Fakt(2). Это обращение потребует вычисления Fakt(1). При вычислении Fakt(0) получим числовой результат – 1. Затем цепочка вычислений раскрутится в обратном порядке: Fakt(1)=1* Fakt(0)=1 Fakt(2)=2* Fakt(1)=2 Fakt(3)=3* Fakt(2)=6 С точки зрения программистской эстетики использование рекурсивных функций – красивый прием, однако не всегда рациональный с точки зрения затрачиваемого времени. Рассмотренную задачу вычисления n! можно решить и так: F:=1; For I:=1 to n do F:=F *I; Такой вариант программы будет работать быстрее, чем рекурсивный. Контрольные вопросы и задания 1. Что понимается под структурным программированием? Зачем оно применяется? 2. Что называется подпрограммой? 3. Стандартные подпрограммы, примеры их использования. 4. Подпрограммы пользователя. Формальные и фактические параметры, их взаимосвязь. 5. Что такое локальные и глобальные параметры. 6. Подпрограммы Function, Procedure, в чем отличие и сходство между ними. 7. Что такое входные и выходные параметры? 8. Что такое рекурсия? 9. Составьте подпрограмму для вычисления площади круга радиусом R. Используя эту подпрограмму, запишите программу для вычисления площади кольца, ограниченного окружностями с радиусами R 1 и R 2. 10. Вычислить сумму 1!+2!+3!+…+n!, используя подпрограмму Function для вычисления факториала числа k!.
Лекция 7.
|
|||||||
Последнее изменение этой страницы: 2016-09-20; просмотров: 900; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.222.184.207 (0.009 с.) |