Шаг 98.
Бестиповые параметры

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

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

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

    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.

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




Предыдущий шаг Содержание Следующий шаг