Как передать в функцию переменную любого типа?, как сделать что-то типа readln или writeln, передавая в параметре любу |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Как передать в функцию переменную любого типа?, как сделать что-то типа readln или writeln, передавая в параметре любу |
kramolnic |
15.03.2007 22:20
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 24 Пол: Мужской Реальное имя: Алексей Репутация: 0 |
Возникла необходимость написать процедурку, которая будет выводить текст с форматированием относительно окна (по центру, справа, слева и т.п...)... Стандартная процедура ReadLn или WriteLn да и куча им подобных может принимать в качестве параметра переменную любого типа и работать с ней.. можно распечатать и String и Integer... а как объявить свою процедуру, чтобы она могла делать так же?? то есть как не привязывать параметр к определенному типу??
P.S. параметр должен передаваться по ссылке (со словом var). |
volvo |
15.03.2007 22:30
Сообщение
#2
|
Гость |
Цитата Стандартная процедура ReadLn или WriteLn Ошибка... ReadLn/WriteLn - это макросы, ничего общего с процедурами не имеющие... А чтобы передать любой параметр, передавай его вообще без типа:Procedure p(Var X); (только тогда ты должен будешь привести внутри процедуры переменную X к нужному типу)... Вообще, разговор получается беспредметный. Приведи пример, ЧТО именно ты хочешь делать в процедуре, и КАК вызывать ее, посмотрим, что для этого можно сделать... Общий случай здесь не пойдет... |
kramolnic |
15.03.2007 22:38
Сообщение
#3
|
Новичок Группа: Пользователи Сообщений: 24 Пол: Мужской Реальное имя: Алексей Репутация: 0 |
Ошибка... ReadLn/WriteLn - это макросы, ничего общего с процедурами не имеющие... А чтобы передать любой параметр, передавай его вообще без типа: О как! а я то думал, что процедура, объявленная где нить в дебрях паскаля... ну скажем, хочу я вывести число по центру, а ниже строку, юзая свою процедуру или что там... Вызываем это дело, например, так...: Код var вот как эту WriteCenter описать, чтобы она обе переменные нормально приняла (тип-то разный), вычислила координаты X, Y, куда выводить строку (видимо, все равно придется к Stringу привести, чтобы число символов посчитать), сделала GoToXY и потом Write(param), где param - параметр, передаваемый процедуре...k: integer; s: string; begin k:= 2345; s:= 'This is my text'; WriteCenter(k); writeln(''); WriteCenter(s); end; Сообщение отредактировано: kramolnic - 15.03.2007 22:40 |
volvo |
15.03.2007 23:27
Сообщение
#4
|
Гость |
Извращение конечно еще то, но все-таки... (если уверен, что хочешь это видеть - нажми мышкой на спойлер, не открываю сразу, может у кого-то будут еще варианты)
Спойлер (Показать/Скрыть)
|
мисс_граффити |
16.03.2007 0:17
Сообщение
#5
|
просто человек Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: 55 |
Цитата Возникла необходимость написать процедурку Возникла для сугубо практических целей? Или должно быть написано именно на паскале? -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
kramolnic |
16.03.2007 0:41
Сообщение
#6
|
Новичок Группа: Пользователи Сообщений: 24 Пол: Мужской Реальное имя: Алексей Репутация: 0 |
Возникла для сугубо практических целей? Или должно быть написано именно на паскале? Именно для практических целей... и именно на Паскале. Но на самом деле было больше интересно, как это в паскале реализуется такая вещь. Я-то думал, что read и write процедурами являются. Думаю, проще просто текстовое значение в качестве параметра принимать и его выводить. Придется только преобразовывать типы в String... эх... прям как в старые добрые времена в Delphi там достали эти преобразования, так теперь еще и здесь... |
мисс_граффити |
16.03.2007 0:56
Сообщение
#7
|
просто человек Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: 55 |
Ясно. Я просто хотела предложить посмотреть в сторону java... Там это несложно реализовать.
*задумалась, считать ли это свое сообщение нарушением правил. -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
volvo |
16.03.2007 1:16
Сообщение
#8
|
Гость |
Цитата на самом деле было больше интересно, как это в паскале реализуется такая вещь. На самом то деле в Паскале такое реализуется ГОРАЗДО проще, чем ты можешь себе предстаить, только вот почему-то у многих выработался рефлекс: как только видят в программе слово Object - дальше программа не читается... А зря... Смотри:typeЧто, ЭТО не Паскаль? Почему же вы выбрасываете из языка ее самую мощную часть? |
Bokul |
16.03.2007 1:22
Сообщение
#9
|
Гуру Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация: 11 |
Вопрос: для чего при наследовании ты используешь inherited, вместо простого перекрытия?
Сообщение отредактировано: Bokul - 16.03.2007 1:31 -------------------- Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее. |
volvo |
16.03.2007 1:35
Сообщение
#10
|
Гость |
Привычка... Я всегда инициализирую всю цепочку (третий инициализируется вторым, который в свою очередь инициализируется первым)... Возможно, мне понадобится добавить еще один тип МЕЖДУ уже описанными (скажем, перед Tstring), тогда Inherited спасает меня от лазания по коду, как если бы я написал:
constructor Tstring.create(s: string);а представляешь, если у тебя иерархия из десятка уровней, и нескольких десятков классов? Где-то надо менять, где-то не надо... Веселуха... |
Текстовая версия | 28.04.2024 18:27 |