Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

передача в процедуру массива   Найти похожие ветки 

 
webpauk ©   (2012-04-05 12:53) [0]

type
 TStrArr: array[1..5] of String;

procedure DoSome(Value: TStrArr);
begin
 ...
end;

procedure MyProc;
begin
 DoSome(["Й", "Ц", "У", "К", "Е"]); - выдает ошибку
end;

Подскажите как правильно передать в функцию массив


 
Плохиш ©   (2012-04-05 12:55) [1]


> procedure DoSome(Value: TStrArr);

Описан параметр типа статического массива

>  DoSome(["Й", "Ц", "У", "К", "Е"]); - выдает ошибку
>

Предаётся открытый массив.
Правильно ошибку выдаёт.


 
webpauk ©   (2012-04-05 12:57) [2]


> Подскажите как правильно передать в функцию массив


 
begin...end ©   (2012-04-05 12:59) [3]

procedure DoSome(Arr: array of string);
var
 I: Integer;
begin
 for I := 0 to High(Arr) do
   ShowMessage(Arr[I])
end

procedure MyProc;
begin
 DoSome(["Й", "Ц", "У", "К", "Е"])
end

См. в справке: Open array parameters, Open array constructors.


 
webpauk ©   (2012-04-05 13:12) [4]


> begin...end ©   (05.04.12 12:59) [3]


абсолютно неподходящий вариант.
нужен именно мой вариант реализации procedure DoSome(Value: TStrArr);

как передать данные?


 
begin...end ©   (2012-04-05 13:18) [5]

> webpauk ©   (05.04.12 13:12) [4]

type
 TStrArr = array [1..5] of string;

procedure DoSome(Arr: array of string);
var
I: Integer;
begin
for I := Low(Arr) to High(Arr) do
  ShowMessage(Arr[I])
end;

var
 A: TStrArr;
begin
 A[1] := "Что,";
 A[2] := "и";
 A[3] := "так";
 A[4] := "не";
 A[5] := "подходит?";
 DoSome(A)
end


 
CRLF   (2012-04-05 13:18) [6]

type
TStrArr: array[1..5] of String;

procedure DoSome(Value: TStrArr);
begin
...
end;

procedure MyProc;
var
 StrArr: TStrArr;
begin
StrArr[1] := "Й";
StrArr[2] := "Ц";
StrArr[3] := "У";
StrArr[4] := "К";
StrArr[5] := "Е";
DoSome(StrArr); - не выдает ошибку
end;

P.S. Вообще-то общепринятый отступ -- два пробела.


 
webpauk ©   (2012-04-05 13:19) [7]


> begin...end ©   (05.04.12 13:18) [5]

криво... жаль. теряется изящность


 
begin...end ©   (2012-04-05 13:19) [8]

> procedure DoSome(Arr: array of string)
procedure DoSome(Arr: TStrArr)


 
webpauk ©   (2012-04-05 13:27) [9]

придется дописывать функцию:
function SetStrArr(const cArr: array of String): TStrArr;


 
Anatoly Podgoretsky ©   (2012-04-05 13:27) [10]

Тогда так
procedure DoSome(const Arr: array of const);


 
begin...end ©   (2012-04-05 13:30) [11]

> webpauk ©   (05.04.12 13:19) [7]

Я так и не понял, элементы массива заранее (до выполнения программы) известны или нет. Если известны, то чем не устраивают открытые массивы? Хотя можно и без них:

const
 Arr: TStrArr = ("Ох,", "тяжёлая", "это", "работа", "...");
begin
  DoSome(Arr)
end

А если элементы формируются уже на этапе выполнения программы, тогда о каком более изящном решении может идти речь?


 
webpauk ©   (2012-04-05 13:45) [12]


> begin...end ©   (05.04.12 13:30) [11]

элементы неизвестны... просто в качестве примера передал "йцуке"


 
toropoff   (2012-04-05 16:49) [13]

если готовый код нехочется переписывать то делайте типа:

  function my(val: array of String): TStrArr;
  var
    i: Integer;
  begin
    for i := 0 to high(val) do result[i]:= val[i];

  end;
 
  ...

  DoSome( my( ["Й", "Ц", "У", "К", "Е"] ) );


 
Медвежонок Пятачок ©   (2012-04-05 16:55) [14]

procedure DoSome(Value: string);
begin
for i := 1 to length(value) do
end;

procedure MyProc;
begin
DoSome("ЙЦУКЕН");
end;


 
CRLF   (2012-04-05 17:21) [15]


> Медвежонок Пятачок ©   (05.04.12 16:55) [14]

фигня. у него только в примере строки односимвольные. и научитесь уже строки передавать как const. и массивы тоже.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.123 c
15-1348428441
AV
2012-09-23 23:27
2013.03.22
Помогите перевести на английский :)


15-1346952057
Artem
2012-09-06 21:20
2013.03.22
Как сделать видео-ролик dos-игрушки?


15-1345632073
Rouse_
2012-08-22 14:41
2013.03.22
Семинар "RAD Studio XE3"


4-1260947297
zvm
2009-12-16 10:08
2013.03.22
чтение конкретного LBA на винте


15-1344013780
alexdn
2012-08-03 21:09
2013.03.22
Curiosity





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский