ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Параметры - процедуры и параметры - функции
Используя такие параметры, можно передавать подпрограмме при вызове различные процедуры или функции, которые будут использоваться подпрограммой для вычислений. Параметр процедурного типа - это параметр-значение. Таким параметрам в заголовке подпрограммы должен приписываться процедурный тип. Задание процедурного типа - это просто заголовок процедуры (функции), из которого изъято имя процедуры (функции).
Например: Type func = function (x: real): real; proc = procedure (x: real; Var y: real); В этом примере тип func описывает функцию одной вещественной переменной, имеющую вещественный результат; тип proc определяет процедуру с двумя вещественными параметрами, первый параметр - значение, второй - переменная. При обращении к подпрограммам, имеющим параметры процедурного типа, на место таких параметров подставляются имена подпрограмм, соответствующих описанным типам. Эти подпрограммы не должны быть стандартными и должны компилироваться с использованием дальней модели памяти. Т.е. перед текстом подпрограмм должна стоять директива компилятору {$F+}, а в конце директива - {$F-}.
Рассмотрим пример программы, в состав которой входит процедура приближенного решения нелинейного уравнения методом половинного деления. Решить приближенно уравнение - значит найти на оси х отрезок заданной длины, на котором находится корень. Метод состоит в том, что исходный отрезок (известно, что на нем есть корень) делится пополам и выбирается для дальнейшего рассмотрения половина, содержащая корень. Процесс деления продолжается до тех пор пока длина отрезка не станет меньше требуемой точности. Program uravn; type ur = function(x:real):real; var a,b,x_cor:real; rez:boolean; { процедура решения уравнения } procedure cor(g:ur;lgr,rgr,eps:real;var x:real; var pr:boolean); { входные параметры: g - имя функции, задающей вид уравнения; lgr, rgr - границы отрезка; eps -точность; выходные параметры: х -середина отрезка, содержащего корень; pr -признак, принимающий значение true, если корень найден и - значение false, если корня на отрезке нет } Begin { проверка, есть ли корень на заданном отрезке } if g(lgr) * g(rgr) > 0 then pr:=false Else Begin pr:=true; Repeat x:=(lgr + rgr)/2; { выбор половины отрезка, при помощи изменения значения левой илиправой границы } if g(lgr) * g(x) > 0 then lgr:=x else rgr:=x; until abs(lgr - rgr) <= eps; x:=(lgr + rgr)/2; End end;{ конец процедуры } {$F+} { функция, задающая уравнение } function f(x:real):real; Begin f:=sin(x) - 0.5 end;{ конец функции } {$F-} Begin a:=0; b:=pi/2; { вызов процедуры решения уравнения } Не нашли, что искали? Воспользуйтесь поиском:
|