Извесно что в некоторые паскалевские процедуре ор функции, можно вводить разные по типу вводные данные или большее количество. Подскажите как это организовать. Если нельзя средствами паскаль, то можно и на ассемблере.
volvo
18.11.2007 3:35
Известно, что некоторые Паскаль-программы используют циклы (for в частности)... Твой вопрос сводится к тому, можно ли написать свой, новый вариант цикла (ну, например, For работающий с управляющей переменной типа Real).
Поймите уже (сколько раз говорилось - не перечесть): Write/WriteLn, Inc и Dec - не процедуры, а нечто вроде макросов.
Цитата
Если нельзя средствами паскаль, то можно и на ассемблере.
Для того, чтобы можно было использовать это из Паскаля - все равно надо описать заголовок с использованием синтаксиса Паскаля. Попробуй...
Boss
18.11.2007 3:50
Может как вариант сдесь имеется в виду "разные по типу" формальные параметры ПП?!
Procedure ...(Mas : array of ...); for i := 0 to High(Mas) do...
Если не ошибаюсь это называется открытый массив.
volvo
18.11.2007 4:24
Открытый массив не дает возможности передавать разные по типу параметры. Только одного типа. Кроме всего прочего, для того чтобы передать open array в подпрограмму, надо описать переменную соответствующего типа, т.е, ты не можешь сделать:
procedure p(arr: array of integer); begin ... end;
... p(1, 2, 3); p(1, 2); ...
А должен сделать:
var a: array[1 .. 3] of integer; ... { заполнить массив A } p(a);
В чем выигрыш?
Boss
18.11.2007 6:02
Цитата
Открытый массив не дает возможности передавать разные по типу параметры.
Правилино, но он дает возможность вводить в процедуру массив разной длины, а это большой "+", особенно когда нужно, к примеру, выполнить сортировку с заменой двух массивов разной длины...
volvo
18.11.2007 6:20
Блин... Ты прочти, что автор темы хочет... Мало ли, что можно делать средствами Паскаля. Можно, например, организовать передачу параметров так, как сделано в функции NewMenu в TurboVision, когда создание меню любой сложности записывается в вызове одной функции. Но это же не значит, что можно реализовать аналог C-шного
void f(int a, ... ) { /* собственно, что угодно */ }
и передавать в нее параметры можно
// и так: f(1, 2, 4); // и вот так: f(1, "a", 1.1, 10, "hello, world");
(главное - знать, ЧТО передано, чтобы корректно обработать список параметров для чего обычно первым параметром используется форматная строка). А все дело в том, что в Паскале используется соглашение о вызовах StdCall, в отличие от С, где работает Cdecl...
И Дельфийских параметров по умолчанию в Турбо-Паскале тоже нет, чтобы можно было хотя бы не указывать некоторые параметры при вызове... И Array of Const тоже нет...
Ламер)
18.11.2007 6:54
volvo Пожалуйста можешь написать подробнее о методе для С, а то я его забыл упамануть.
Ламер)
18.11.2007 7:20
Да хотелось бы подробнее обьяснить, что я всетаки имел ввиду. Тогда дам пример.
Есть вообще много примеров, из стандартных функций. Мне же интересна реализация. Поскольку в данный момент я вынужден работать восновном на Паскале, то соответсвенно, мне интересна более всего реализация на данном языке.
xds
18.11.2007 11:13
Цитата
Есть вообще много примеров, из стандартных функций. Мне же интересна реализация.
Реализация встроена в компилятор. Тебе подобное доступно только путем модификации исходников самого компилятора и его пересборки . Т. е., штатными средствами Паскаля невозможно описать процедуру (функцию) с произвольным числом и типами параметров.
Гость
18.11.2007 18:34
Цитата(xds @ 18.11.2007 7:13)
Реализация встроена в компилятор. Тебе подобное доступно только путем модификации исходников самого компилятора и его пересборки . Т. е., штатными средствами Паскаля невозможно описать процедуру (функцию) с произвольным числом и типами параметров.
Прочитай все, потом говори.
мисс_граффити
18.11.2007 19:34
Еще раз: на паскале так не сделаешь! Если подойдут и другие языки - напиши конкретно, КАКИЕ!
Артемий
19.11.2007 18:37
На счет C варианта,например со строкой,имитирует printf( с типом Int):
void small(char *cmessage, ...) { int numper = 0; va_list ell; int dformat = 'd'; char *pchar;