Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2021, 13:24   #1
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 624
По умолчанию Куча однотипных параметров, или массив-параметр неопределенной длины

Задача такая:
Нужно передать в процедуру несколько string'ов как параметры
Но так чтобы их количество могло меняться при разных вызовах процедуры

Чтобы это могла быть 1 строка, а могло быть несколько, а могло быть и 0
Kronos913 вне форума Ответить с цитированием
Старый 01.06.2021, 15:46   #2
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,546
По умолчанию

В общем случае - ничего сложного.

Код:
arrgstr : array[1..9] of string ;
.................
procedure proc(n:integer; strarg: array of string) ;
begin
  if n > 0 then
   ........
end ;

........
proc(2,argstr) ;
Ну а если строк действительно неопределённое количество (100500), да ещё и расположены в
разных местах... Странные хотелки требуют нестандартного решения, думаю я.

Последний раз редактировалось digitalis; 01.06.2021 в 16:54.
digitalis вне форума Ответить с цитированием
Старый 01.06.2021, 17:30   #3
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 624
По умолчанию

Ок, а как потом изнутри процедуры узнать границы массива?
Kronos913 вне форума Ответить с цитированием
Старый 01.06.2021, 20:20   #4
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,546
По умолчанию

Изнутри - никак, это же входной параметр. Мы говорим процедуре: "Вот тебе массив строк в количестве n, а что с ними делать - сама знаешь."
Или вопрос ставится так: передали ей адрес начала массива строк, а она по какому-то правилу должна понять - сколько из них нужных ? Ну так это вопрос к алгоритму, а не к его реализации. Можно, например, конечную строку сделать какой-то особенной, в которой есть то, чего нет в "рабочих" строках.
Не зная конкретной задачи - это сотрясение воздуха.
digitalis вне форума Ответить с цитированием
Старый 01.06.2021, 20:30   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Изнутри - никак, это же входной параметр.
Это не так. Ваш чуть переделанный пример:
Код:
var
  argstr: array[1..9] of string;
...
procedure proc(strarg: array of string);
var
  i: Integer;
begin
  for i := 0 to High(strarg) do
    ShowMessage(strarg[i]);
end;
...
proc(argstr);
Kronos913, почитайте про динамические и открытые массивы. То есть, в любом случае передавать именно массив строк, но в нем будет от 0 до сколько нужно строк.
Код:
proc(['1', '2']);
proc([]);
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 01.06.2021 в 20:37.
BDA вне форума Ответить с цитированием
Старый 02.06.2021, 02:58   #6
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,869
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Изнутри - никак, это же входной параметр.
Ну и что что входной? Если мы передаём в качестве параметра динамический массив, то у него самого есть всё что надо, чтобы определить его размер и количество элементов.
Но вам стоит освежить свою память. В вашей
Цитата:
Сообщение от digitalis Посмотреть сообщение
procedure proc(n:integer; strarg: array of string) ;
strarg это открытый массив, а не динамический.
northener вне форума Ответить с цитированием
Старый 02.06.2021, 11:14   #7
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,546
По умолчанию

Пожалуй, да...
Но у ТС не было слов про динамический.
digitalis вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как преобразовать ассоциативный массив ассоциативных массивов в ассоциативный массив вида [ключ] => 'параметр: значение' rustamcom2 PHP 1 15.06.2017 10:10
Передать строку как параметр или альтернатива Dozent Общие вопросы Delphi 5 14.09.2013 20:25
Необязательный параметр - массив _-Re@l-_ Общие вопросы Delphi 11 17.03.2011 09:30
Массив как параметр функции MovsesIV Общие вопросы C/C++ 2 02.12.2010 03:07
Массив неопределённой длины Влажимир Общие вопросы Delphi 2 01.04.2008 10:14