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

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

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

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

Сообщение wgoganet » 23.06.2018 15:16:43

Здравствуйте.
Есть два массива с кодами заглавных символов английского и украинского алфавитов и 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]);

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

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

Сообщение MysticCoder » 24.06.2018 05:39:23

Код: Выделить всё
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]);
MysticCoder
постоялец
 
Сообщения: 141
Зарегистрирован: 14.09.2013 00:20:28

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

Сообщение zub » 24.06.2018 12:48:03

>>Использование имени массива в качестве параметра
чтото тут звучит нетак... наверно передача массива как параметра функции?
никто не мешает определить новый тип и передавать массивы. но тут получится либо все массивы одной длинны, либо приводить типы и передавать внутрь длину массива отдельным параметром.
Код: Выделить всё
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.   
zub
долгожитель
 
Сообщения: 2463
Зарегистрирован: 14.11.2005 23:51:26


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9

Рейтинг@Mail.ru