
![]() |
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
![]() ![]() |
![]() |
Ламер) |
![]()
Сообщение
#1
|
Гость ![]() |
Извесно что в некоторые паскалевские процедуре ор функции, можно вводить разные по типу вводные данные или большее количество. Подскажите как это организовать. Если нельзя средствами паскаль, то можно и на ассемблере.
![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Известно, что некоторые Паскаль-программы используют циклы (for в частности)... Твой вопрос сводится к тому, можно ли написать свой, новый вариант цикла (ну, например, For работающий с управляющей переменной типа Real).
Поймите уже (сколько раз говорилось - не перечесть): Write/WriteLn, Inc и Dec - не процедуры, а нечто вроде макросов. Цитата Если нельзя средствами паскаль, то можно и на ассемблере. Для того, чтобы можно было использовать это из Паскаля - все равно надо описать заголовок с использованием синтаксиса Паскаля. Попробуй... |
Boss |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 14 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Может как вариант сдесь имеется в виду "разные по типу" формальные параметры ПП?!
Procedure ...(Mas : array of ...); Если не ошибаюсь это называется открытый массив. |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Открытый массив не дает возможности передавать разные по типу параметры. Только одного типа. Кроме всего прочего, для того чтобы передать open array в подпрограмму, надо описать переменную соответствующего типа, т.е, ты не можешь сделать:
procedure p(arr: array of integer); А должен сделать: var a: array[1 .. 3] of integer;В чем выигрыш? |
Boss |
![]()
Сообщение
#5
|
Новичок ![]() Группа: Пользователи Сообщений: 14 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Цитата Открытый массив не дает возможности передавать разные по типу параметры. Правилино, но он дает возможность вводить в процедуру массив разной длины, а это большой "+", особенно когда нужно, к примеру, выполнить сортировку с заменой двух массивов разной длины... |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Блин... Ты прочти, что автор темы хочет... Мало ли, что можно делать средствами Паскаля. Можно, например, организовать передачу параметров так, как сделано в функции NewMenu в TurboVision, когда создание меню любой сложности записывается в вызове одной функции. Но это же не значит, что можно реализовать аналог C-шного
void f(int a, ... ) { и передавать в нее параметры можно // и так: (главное - знать, ЧТО передано, чтобы корректно обработать список параметров для чего обычно первым параметром используется форматная строка). А все дело в том, что в Паскале используется соглашение о вызовах StdCall, в отличие от С, где работает Cdecl... И Дельфийских параметров по умолчанию в Турбо-Паскале тоже нет, чтобы можно было хотя бы не указывать некоторые параметры при вызове... И Array of Const тоже нет... |
Ламер) |
![]()
Сообщение
#7
|
Гость ![]() |
volvo
Пожалуйста можешь написать подробнее о методе для С, а то я его забыл упамануть. |
Ламер) |
![]()
Сообщение
#8
|
Гость ![]() |
Да хотелось бы подробнее обьяснить, что я всетаки имел ввиду. Тогда дам пример.
Или вот так
Есть вообще много примеров, из стандартных функций. Мне же интересна реализация. Поскольку в данный момент я вынужден работать восновном на Паскале, то соответсвенно, мне интересна более всего реализация на данном языке. |
xds |
![]()
Сообщение
#9
|
![]() N337 ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата Есть вообще много примеров, из стандартных функций. Мне же интересна реализация. Реализация встроена в компилятор. Тебе подобное доступно только путем модификации исходников самого компилятора и его пересборки . Т. е., штатными средствами Паскаля невозможно описать процедуру (функцию) с произвольным числом и типами параметров. -------------------- The idiots are winning.
|
Гость |
![]()
Сообщение
#10
|
Гость ![]() |
Реализация встроена в компилятор. Тебе подобное доступно только путем модификации исходников самого компилятора и его пересборки . Т. е., штатными средствами Паскаля невозможно описать процедуру (функцию) с произвольным числом и типами параметров. Прочитай все, потом говори. |
мисс_граффити |
![]()
Сообщение
#11
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
Еще раз: на паскале так не сделаешь!
Если подойдут и другие языки - напиши конкретно, КАКИЕ! -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
Артемий |
![]()
Сообщение
#12
|
![]() Помощник капитана ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 601 Пол: Мужской Реальное имя: Артем Репутация: ![]() ![]() ![]() |
На счет C варианта,например со строкой,имитирует printf( с типом Int):
void small(char *cmessage, ...) { Напомню,что va_arg, va_start, va_end тоже макросы! (писал без компилятора,за мелочь не ругайте) зы и простите за код в теории! Сообщение отредактировано: Артемий - -------------------- Dum spiro spero!
|
![]() ![]() |
![]() |
Текстовая версия | 10.12.2023 12:05 |