Регистрация
29 Май 2013
Сообщения
75
Репутация
0
Спасибо
0
Монет
0
Не надо писать гадости, просто ответьте если ли такая возможность. Вопрос странный, и скорее всего такое реализовать не возможно, но мне просто интересно. Допустим есть процедура с 11 параметрами (procedure setArray(var arr : TArray; a1,a2,...a10 : integer)) и чтобы не писать arr[1] := a1; arr[2] := a2; и т. д. можно ли написать через цикл что-то вроде for i := ...do arr := a{!!!} а в месте {!!!} написать при помощи каких-то спец символов или еще какими-либо махинациями переменную i которая будет относится как бы к коду программы и также изменятся т. к. это счетчик? Я понимаю что написать 10 строк не так уж и сложно, но мне все же любопытно.
 
Можно, если использовать динамически выделенную память. Это довольно легко. Можно передать в подпрограмму адрес на начало массива, а в программе устроить цикл и при каждой итерации цикла увеличивать адрес на 1 и присваивать значение ячейки памяти вашему массиву в подпрограмме. Но для этой темы вам нужно изучить тему указателей и динамической памяти
 
1 а в процедуру передавать не параметры а массив религия не позволяет ? 2 в других языках можно получить количество аргументов и сами их в виде массива с помощью какой нибудь func_get_args() погугли может найдешь то же самое в делфях 3 нормальный йазык учить не судьба?
 
Можно, через легкий мухлеж с указателем стека. Но с листа я это дело не напишу (тем более, что тут понадобится ассемблерная вставка), к тому же такие фокусы крайне чреваты в смысле общей стабильности работы программы. Другой вариант - передавать твои переменные через array of const (смотри сырцы функции Format).
 
Думаю нельзя. Но здесь переменные a1, a2... уже предполагают, что проще ввести переменную массив. Еще как вариант сослаться по адресу переменной a, так как все эти переменные будут переданы через стек, то смещая адрес гарантированно получим следующую, но мне проще написать 10 строк кода, чем играться адресами стека. Усе, свое мнение сказал и ушел спать! Удачи!
 
Назад
Сверху