Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Параметры без типа



Формальный параметр без типа внутри процедуры или функции не имеет типа и его перед использованием следует преобразовать к конкретному типу с помощью автоопределенного преобразования. Параметр без типа передается только по ссылке. Внутри процедуры или функции должна быть определена маска, задающая вид интерпретации элементов фактического параметра, передаваемого в процедуру или функцию при вызове. Напомним, что маска – это тип. Размерность маски рекомендуется выбирать так, чтобы она была рассчитана на максимальное количество данных интерпретируемого типа, которое может разместиться в пределах сегмента. (Если размер маски превышает 65520 байт, на этапе компиляции выдается сообщение об ошибке). Тип фактического параметра может быть любым, но дополнительно в процедуру или функцию следует передавать истинную размерность фактического параметра.

Пример. Просуммировать N элементов одномерных числовых массивов произвольной размерности.

...  
Var { фактические параметры - }
Ar_Byte1: array[1..200] of byte; { интерпретируемые }
Ar_Byte2: array[1..2000] of byte; { области }
Ar_Int: array[1..500] of integer; { памяти }
   
Function Sum(var X; n: word): longint; { X – параметр без типа, n – размерность массива }
Type  
Xtype =array[0..65520] of byte; {Маска – одномерный массив типа Byte }
Var  
summa: longint; i: word;  
begin  
summa:=0;  
for i:=1 to n do  
{ XType(X)[i] – автоопределенное преобразование элемента массива- параметра X к типу элемента массива-маски Byte }  
summa:=summa + XType(X)[i]; { интерпретация элементов массива X через маску }
Sum:=summa;  
end;  
   
begin  
...  
writeln(Sum(Ar_Byte1, 200));  
writeln(Sum(Ar_Int, 500));  
writeln(Sum(Ar_Byte2, 2000));  
...  
         

В качестве первого параметра функции Sum можно использовать массив любого типа и любой размерности. В теле функции выполняется автоопределенное преобразование элемента массива-параметра X к типу элемента массива-маски Byte. Если бы в теле функции была определена маска другого типа, например, Word, преобразование выполнялось бы к этому типу.





Дата публикования: 2014-11-26; Прочитано: 317 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2025 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.03 с)...