Использование имени массива в качестве параметра

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
wgoganet
незнакомец
Сообщения: 1
Зарегистрирован: 23.06.2018 13:48:25

Использование имени массива в качестве параметра

Сообщение wgoganet »

Здравствуйте.
Есть два массива с кодами заглавных символов английского и украинского алфавитов и ComboBox с двумя Items (EN, UA), в дальнейшем, в зависимости от выбора алфавита с помощью функции GetSymbolFromCode соответствующие символы будут присваиваться к примеру Label.Caption

Код: Выделить всё

const en: array[1..26] of Integer = (65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90);
const ua: array[1..33] of integer = (192,193,194,195,165,196,197,170,198,199,200,178,175,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,220,222,223);

function TfrmMain.GetSymbolFromCode(aCode:Integer):String;
begin
 Result:= CP1251ToUTF8(chr(aCode));
end; 


Подскажите пожалуйста как в зависимости от выбора EN или UA передать имя массива в параметры процедуры или функции (на место aAlphabet).

Код: Выделить всё

aLabel.Caption:= GetSymbolFromCode(aAlphabet[i]); 

Спасибо.
MysticCoder
постоялец
Сообщения: 154
Зарегистрирован: 14.09.2013 00:20:28

Сообщение MysticCoder »

Код: Выделить всё

Case Language of
  ENGLISH: aLabel.Caption:= GetSymbolFromCode(en[i]);
  RUSSIAN: aLabel.Caption:= GetSymbolFromCode(ru[i]);
...
end;

либо

Код: Выделить всё

var
  mass : PIntegerArray; // или что то подобное
...
Case Language of
  ENGLISH: mass := @en;
  RUSSIAN: mass := @ru;
...
end;
...
  aLabel.Caption := GetSymbolFromCode(mass^[i]);
zub
долгожитель
Сообщения: 2890
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

>>Использование имени массива в качестве параметра
чтото тут звучит нетак... наверно передача массива как параметра функции?
никто не мешает определить новый тип и передавать массивы. но тут получится либо все массивы одной длинны, либо приводить типы и передавать внутрь длину массива отдельным параметром.

Код: Выделить всё

program Project1;
const
  maxletters=33;
type
  TMyArray=array[1..maxletters] of Integer;
const
  en: TMyArray = (65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,0,0,0,0,0,0,0);
  ua: TMyArray = (192,193,194,195,165,196,197,170,198,199,200,178,175,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,220,222,223);

procedure WriteArray(arr:TMyArray);
var
  i:integer;
begin
  for i:=1 to maxletters do
    writeln(arr[i]);
end;

begin
  WriteArray(en);
  WriteArray(ua);
  readln;
end.


с динамическими массивами все красивей, но тогда инициализация массива в рантайме:

Код: Выделить всё

program Project1;
const
  maxletters=33;
type
  TMyArray=array of Integer;
var
  en:TMyArray;
  ua:TMyArray;
procedure WriteArray(arr:TMyArray);
var
  i:integer;
begin
  for i:=low(arr) to high(arr) do
    writeln(arr[i]);
end;
begin
  en:=TMyArray.create(65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90);
  ua:=TMyArray.create(192,193,194,195,165,196,197,170,198,199,200,178,175,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,220,222,223);
  WriteArray(en);
  WriteArray(ua);
  setlength(en,0);
  setlength(ua,0);
  readln;
end.   
Ответить