![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Есть массивы константы:
WaitModem:array[0..1]of string=('Нет','Есть'); SyncTx:=array[0..2]of string=('Отсутствует','Внутренняя','Внешняя'); И т.п. Как передать в подпрограмму такой массив, если у них различная длина? Подпрограмма должна делать примерно следующее: возвращает строку по нужному индексу: Result:=NameArray[n]; //например - Внутренняя Решение с открытыми массивами работает, но овчинка выделки не стоит. Надо каждый раз задавать длину массива, инициализировать и т.п. В итоге, куча "лишнего" текста... По длине получается, выгоднее иметь кучу специализированных подпрограмм. |
#2
|
||||
|
||||
![]() Цитата:
Код:
const WaitModem:array[0..1]of string=('Нет','Есть'); function Func(A: array of String; Index: Integer): String; begin Result:=A[Index]; end; procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage(Func(WaitModem, 1)); end; |
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
Stal12 (07.09.2012)
|
#3
|
||||
|
||||
![]() Одно НО - пригодилась бы проверка на выход за границы массива. Иначе пользователь обязательно добьется использования Func(WaitModem, 2). Когда все массивы разной длины, такое вполне может произойти.
jmp $ ; Happy End! The Cake Is A Lie. |
#4
|
||||
|
||||
![]() Цитата:
![]() Код:
function Func(A: array of String; Index: Integer): String; begin if (Index >= Low(A)) and (Index <= High(A)) then begin Result := A[Index]; end else begin raise Exception.Create('Выход за пределы диапазона'); end; end; |