Главная страница
    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.064 c
2-1339941974
ankazh
2012-06-17 18:06
2013.03.22
ShowModal


3-1287641897
dmitry1208197320
2010-10-21 10:18
2013.03.22
Правильность ввода поля при переходе к другой записи


15-1330351343
Тенерман
2012-02-27 18:02
2013.03.22
Данные -> TShiftState.


15-1332606036
alexdn
2012-03-24 20:20
2013.03.22
Вордпресс


15-1338131036
ProgRAMmer Dimonych
2012-05-27 19:03
2013.03.22
HP Photosmart B110b и чёрный картридж





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский