Бестиповые параметры

   
На этом шаге мы рассмотрим использование безтиповых параметров .

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

   
Заголовок процедуры с описанными бестиповыми параметрами при различных способах передачи имеет такой вид:

    procedure MyProc (var Par1, Par2; const Par3, Par4);

   
Однако следует помнить, что вследствие отсутствия типа, нельзя использовать бестиповые формальные параметры так же, как и типизированные. Перед
использованием требуется выполнить приведение формального бестипового параметра к какому-либо типу.

   
Бестиповые параметры более гибки в работе, чем типизированные, но ответственность за их корректное применение возлагается на программиста, так как компилятор
не может проверить совместимость типов.

   
В качестве примера рассмотрим универсальную процедуру SortVector для сортировки одномерных массивов произвольной длины, элементы которого могут
быть любого типа, являющегося поддиапазоном типа Byte. При этом каждый сортируемый массив занимает в памяти ровно столько места, сколько ему требуется..

   
Более того, процедура SortVector может с успехом использоваться для сортировки массивов типа Char, так как коды символов ASCII не выходят за пределы значений типа Byte:

const
  l =  7;
  m = 10;
  n = 15;
type
  MaxVect = array [1..MaxInt] of Byte;
  TVeсtorByte = array [1..l] of Byte;
  TVector100  = array [1..m] of 1..100;
  TVectorChar = array [1..n] of Char;
var
  ByteVector : TVectorByte;
  Vector100  : TVector100;
  CharVector : TVectorChar;
  i : Word;
procedure SortVector (var Vector; Len : Word ); 
var
  Min  : Byte;
  Imin : Word;
  i,j  : Word; 
begin
  for i := 1 to Len-1 do 
  begin
    Min  := MaxVect (Vector) [i] ; {Приведение параметра}
                                   {Vector к типу МахVect} 
    Imin := i; 
    for j := i+1 to Len do
      if MaxVect(Vector) [j]   < Min   then 
      begin
        Min := MaxVect (Vector) [j] ; 
        Imin :=  j 
      end;
    MaxVect (Vector)[Imin]  := MaxVect (Vector)[i]
    MaxVect (Vector)[i]  := Min;	
  end;
end;
{----------------------------------------------}
begin
  .   .   .   .
  SortVector (ByteVector, l ); 
  SortVector (Vector100, m ); 
  SortVector (CharVector, n );
  .   .   .   .
end.

   
Со следующего шага мы начнем знакомиться с открытыми параметрами-массивами.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий