На этом шаге мы рассмотрим использование безтиповых параметров .
Бестиповые параметры могут передаваться только по адресу, то есть как параметры-переменные или как параметры-константы. Главной особенностью бестиповых параметров является отсутствие указания типа параметра в заголовке процедуры.
Заголовок процедуры с описанными бестиповыми параметрами при различных способах передачи имеет такой вид:
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.
Со следующего шага мы начнем знакомиться с открытыми параметрами-массивами.