КАТЕГОРИИ: Архитектура-(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) |
П р о ц е д у р ы и ф у н к ц и и
Алгоритм решения задачи проектируется путем декомпозиции всей за- дачи в отдельные подзадачи. Обычно подзадачи реализуются в виде подп- рограмм. Подпрограмма - это последовательность операторов, которые опреде- лены и записаны только в одном месте программы, однако их можно вызвать для выполнения из одной или нескольких точек программы. Каж- дая подпрограмма определяется уникальным именем. В языке ПАСКАЛЬ су- ществуют два типа подпрограмм - процедуры и функции. Процедура и функция - это именованная последовательность описаний и операторов. При использовании процедур или функций ПАСКАЛЬ - прог- рамма должна содержать текст процедуры или функции и обращение к про- цедуре или функции. Тексты процедур и функций помещаются в раздел описаний процедур и функций. {} Процедура может содержать такие - же разделы описаний, что и ПАС- КАЛЬ - программа, а именно: разделы описания модулей, меток, конс- тант, типов, переменных, процедур и функций. {} ПЕРЕДАЧА ИМЕН ПРОЦЕДУР И ФУНКЦИЙ В КАЧЕСТВЕ ПАРАМЕТРОВ. Во многих задачах, особенно в задачах вычислительной математики, необходимо пе- редавать имена процедур и функций в качестве параметров. Для этого в TURBO PASCAL введен новый тип данных - процедурный или функциональ- ный, в зависимости от того, что описывается. Описание процедурных и функциональных типов производится в разделе описания типов: type FuncType = Function(z: Real): Real; ProcType = Procedure (a,b: Real; var x,y: Real);
Функциональный и процедурный тип определяется как заголовок проце- дуры и функции со списком формальных параметров, но без имени. Можно определить функциональный или процедурный тип без параметров, напри-
мер: type Proc = Procedure;
После объявления процедурного или функционального типа его можно использовать для описания формальных параметров - имен процедур и функций. Кроме того, необходимо написать те реальные процедуры или функции, имена которых будут передаваться как фактические параметры. Эти про- цедуры и функции должны компилироваться в режиме дальней адресации с ключом {$F+}.
Пример. Составить программу для вычисления определенного интеграла Tk
2t I= S--------------- dt sqrt(1-sin2t) tn по методу Симпсона. Вычисление подинтегральной функции реализовать с помощью функции, имя которой передается как параметр. Значение опре- деленного интеграла по формуле Симпсона вычисляется по формуле:
ISimps=2*h/3*(0.5*F(A)+2*F(A+h)+F(A+2*h)+2*F(A+3*h)+... +2*F(B-h)+0.5*F(B))
где A и B - нижняя и верхняя границы интервала интегрирования, N - число разбиений интервала интегрирования, h=(B-A)/N, причем N должно быть четным.
Program INTEGRAL; type Func= function(x: Real): Real; var I,TN,TK:Real; N:Integer; {$F+} Function Q(t: Real): Real; begin Q:=2*t/Sqrt(1-Sin(2*t)); end; {$F-} Procedure Simps(F:Func; a,b:Real; N:Integer; var INT:Real); var sum, h: Real; j:Integer; begin if Odd(N) then N:=N+1; h:=(b-a)/N; sum:=0.5*(F(a)+F(b)); for j:=1 to N-1 do sum:=sum+(j mod 2+1)*F(a+j*h); INT:=2*h*sum/3 end; begin WriteLn(' ВВЕДИ TN,TK,N'); Read(TN,TK,N); Simps(Q,TN,TK,N,I); WriteLn('I=',I:8:3) end.
Дата добавления: 2014-01-07; Просмотров: 231; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |