С Новым годом! Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/25: Рейтинг темы: голосов - 25, средняя оценка - 4.60
238 / 49 / 6
Регистрация: 10.06.2012
Сообщений: 268
Записей в блоге: 1

Функция с неопределенным количеством аргументов

15.02.2014, 20:21. Показов 4706. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!

Каким образом можно в Delphi создать функцию с заранее неизвестным количеством аргументов? В качестве примера, например, чтобы возвращала сумму переданных ей аргументов. В С++, насколько я знаю, для этой цели используются указатели. Есть ли что-то подобное в Delphi?


Delphi
1
2
3
4
function summ (a,b,... : integer) : integer;
begin
    result:=a+b+...;
end;
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.02.2014, 20:21
Ответы с готовыми решениями:

Функция блокировки интерфейса без аргументов
Вынес команды блокировки интерфейса в отдельную функцию: function LockInterface():boolean; begin B_Start.Enabled:=false; //... ...

Функция с неограниченным количеством параметров
Здравствуйте. Знаю, что в pascal такое, вроде, невозможно. В Lazarus должно быть возможно. Хочу создать функцию, принимающую на вход...

Функция с переменным количеством аргументов
Написал вот такой хелловорлд, использующий функцию с переменным количеством аргументов. Вывод неадекватный. Где я туплю? #include...

1
 Аватар для Mawrat
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
15.02.2014, 21:19
Для передачи в процедуру любого количества параметров в Delphi можно использовать параметр типа открытый массив или открытый вариантный массив.
Если все параметры будут одного типа, тогда можно применить параметр открытый массив:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//Подсчёт суммы целочисленных аргументов.
function Sum(const aArr : array of Integer) : Integer;
var
  i : Integer;
begin
  Result := 0;
  for i := 0 to High(aArr) do
    Result := Result + aArr[i];
end;
 
//Пример вызова.
procedure TForm1.Button1Click(Sender: TObject);
var
  N : Integer;
begin
  N := Sum([1, 2, 3]);
  ShowMessage(IntToStr(N));
end;
Если параметры могут быть разных типов, тогда следует применить параметр типа открытый вариантный массив:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
type
  TData = record
    N : Integer;
    S : String;
  end;
 
{Функция подсчитывает сумму целочисленных аргументов и объединяет строковые
аргументы в одну строку.}
function Calc(const aArr : array of const) : TData;
var
  i : Integer;
begin
  Result.N := 0;
  Result.S := '';
  for i := 0 to High(aArr) do
    case aArr[i].VType of
      vtInteger    : Result.N := Result.N + aArr[i].VInteger;
      vtAnsiString : Result.S := Result.S + aArr[i].VPChar;
    end;
end;
 
//Пример вызова.
procedure TForm1.Button1Click(Sender: TObject);
var
  Data : TData;
begin
  Data := Calc([1, 2, 'ABCD', 3, 'EFGH', 4]);
  ShowMessage('Data.N = ' + IntToStr(Data.N) + #13#10'Data.S = ' + Data.S);
end;
3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.02.2014, 21:19
Помогаю со студенческими работами здесь

Функция с переменным количеством аргументов
Не могу понять как это работает. Подскажите пож-ста. Имеется функция, нужно указывая с textbox цифры через запятую или просто в строку,...

Функция с неограниченным количеством аргументов
Вообщем проблема: написал функцию неограниченным количеством аргументов под виндой (компилятор mingw) все работает как часы, но под unix...

Функция с переменным количеством аргументов
Добрый день! Имеется код: void show_it(int a, ...) { int* pa = &a; int i=0; while(i!=6) { ...

Функция с переменным количеством аргументов вызывает out of memory
property(string & name_c, short nesting_c, string & level1, ...) { nesting=nesting_c; name=name_c; va_list p; ...

Функции с неопределенным количеством параметров
Суть задачи:вводим 2х мерный массив предложений и отдельно слово, функцией с неопределенным количеством параметров в 1 предложение...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru