русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Нетипизованные параметры подпрограмм


Дата добавления: 2015-06-12; просмотров: 568; Нарушение авторских прав


 

Нетипизованные параметры-переменные позволяют создавать гибкие подпрограммы для обработки параметров любого типа. В теле подпрограммы нетипизованный параметр обязательно приводится к подходящему для его обработки типу как переменная, но равенство размеров типов не требуется.

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

 

Function Equal(var a,b; size:word):boolean;

type bytes=array[1..65520] of byte; {тип - массив байтов максимального размера}

var i:word;

begin i:=1;

while (i<=size) and (bytes(a)[i]=bytes(b)[i]) do

i:=i+1;

Equal:=i>size

end.

 

В подпрограммах обработки двумерных массивов (матриц) разных размеров, но с одним и тем же базовым типом нетипизованный параметр-матрица приводится к типу одномерный массив. Для этого нужно использовать формулу для определения k - номера элемента в одномерном массиве, который в двумерном массиве имеет индексы i и j (i - номер строки, j - номер столбца матрицы).

k=(i-1)n+j, где n - число элементов в строке.

 

Пример 3. Описание процедуры обмена строк с номерами r1 и r2 матрицы a (n - длина строки):

Procedure Rows_Swap(var a; n, r1, r2:word);

var i, k1, k2:word;

t:real;

begin

for i:=1 to n do

begin

k1:=(r1-1)*n+i;

k2:=(r2-1)*n+i;

t:=t_max_vect(a)[k1];

t_max_vect(a)[k1]:=t_max_vect(a)[k2];

t_max_vect(a)[k2]:=t

end

end;

 

28. ПРОЦЕДУРНЫЕ И ФУНКЦИОНАЛЬНЫЕ ТИПЫ

 

TP позволяет рассматривать процедуры и функции как объекты, которые могут быть присвоены переменным или переданы в качестве параметра подпрограммам. Такие переменные должны иметь процедурный или функциональный тип. Далее будем называть любой из этих типов процедурным. Описание процедурного типа представляет собой описание заголовка подпрограммы, но без указания имени подпрограммы, например:



 

Type proс=procedure; {тип используется для процедур без параметров }

swap_proс =procedure(var a,b:real);

math_func =function(x:real):real;

Имена параметров играют только иллюстративную роль. Можно описывать переменные процедурных типов, компоненты структурированных типов могут иметь процедурные типы. Например,

Var f:math_func;

f_arr: array[1..3] of math_func;

psw: swap_proс;

p_sort2: procedure (var x, y:real);

Для совместимости по присваиванию процедурных типов необходимо, чтобы подпрограммы имели одинаковое количество параметров, соответствующие параметры имели тождественные типы и типы возвращаемых функциями значений были одинаковыми. Процедурный тип по сути является ссылочным типом, его значениями являются адреса кодов подпрограмм. Переменной процедурного типа может быть присвоено значение уже инициализированной другой переменной или имя подпрограммы. Имя подпрограммы рассматривается как константа процедурного типа. Для обеспечения совместимости по присваиванию процедура или функция, если ее нужно присвоить переменной или передать в качестве параметра подпрограмме, должна удовлетворять следующим условиям:

1) компилироваться с дальним типом вызова ( {$F+} );

2) не должна быть вложенной;

3) не должна быть стандартной;

4) не должна быть процедурой прерывания или типа inline.

 

Для обеспечения первого условия перед описанием подпрограммы или подпрограмм можно указать директиву компилятора {$F+}, а после описания - {$F-} (пример 1), или после заголовка подпрограммы указать директиву FAR (пример 2).

Если стандартную подпрограмму нужно передать в качестве параметра или присвоить переменной, то требуется создать некоторую «надстройку» (пример 2).

 

 
 

 

 


Пример 3. Программа нахождения корней трех уравнений на промежутке [a,b] с точностью e:

Type t_math_func=function (x:real):real;

var f: array[1..3] of t_math_func;

a,b,eps:real;

i:byte;

function root(a, b, eps: real; f:t_math_func):real;

{функция нахождения корня уравнения f(x)=0 методом половинного деления}

var c: real;

begin

while abs(b-a)> eps do

begin

c:=(a+b)/2;

if f(a)*f(c)<0 then b:=c else a:=c;

end;

root:=(a+b)/2

end;

{$F+}

function f1(x: real): real;

begin f1:=sin(x) -0.1

end;

function f2(x: real): real;

begin f2:= sin(x)/cos(x)+0.1

end;

function f3(x: real): real;

begin f3:= exp(x) -1/2

end;

{$F-}

Begin write(‘Введите промежуток и точность’);

read(a,b,eps);

f[1]:=f1; f[2]:=f2; f[3]:=f3;

for i:=1 to 3 do

writeln(‘Уравнение ‘, i, ‘: x=’, root(a, b, eps, f[i]))

end.

 

29. МОДУЛИ В TP

 

TP содержит библиотеку подпрограмм, которая хранится в файле turbo.tpl. Все подпрограммы разбиты на несколько групп, называемых модулями. В каждом модуле содержатся описания констант, типов, переменных, процедур и функций. Один из модулей, модуль Graph, находится в отдельном файле Graph.tpu.

 



<== предыдущая лекция | следующая лекция ==>
Приведение типов выражений | Основные модули TP


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

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