1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
| Reople |
28.05.2005 19:52
Сообщение
#1
|
|
Группа: Пользователи Сообщений: 2 Пол: Мужской Репутация: 0 |
Доброго времени суток, знаток Turbo Pascal'я (если нет, то можешь дальше не читать).
У меня Есть 2 Вопроса по Turbo Pascal 7.0: 1) Это даже не вопрос, а факты о противоречии разных авторов об одних вещах, - вопрос касается <структуры> Множество <set of ...> Привожу Цитаты: a) <... Исходя из особенностей внутреннего представления множеств можно сделать два основных вывода: [...] - все операции над множествами выполняются значительно эффективней, чем над другими структурами данных> Рапаков Г. Г. (или как там), Ржеуцкая С. У. "Программирование на языке Pascal" Spb 2004. стр 282 б)<... Одна из причин редкого применения - очень низкая скорость выполнения операции с множествами.> Издательская группа BHV "Турбо Паскаль 7.0" Киев 1999г. стр 157 Исходя из внутреннего устройство множества в Tubo Pascal я склонен верит первому высказыванию, и смело переписал некоторые фрагменты одной своей программы с их помощью. However, работа с отдельными битами нам не разрешена (даже в asm'е мы логически складываем, умножаем отдельные БАЙТЫ, чтобы переключить нужный нам бит). У кого-нибудь есть размышления (а лучше конкретные факты в пользу одной из двух высказываний). p.S. Если кто-то посоветует сравнить книги по остальному содержанию, то он может дальше не читать 2) Вопрос второй касается распределения памяти. Вот фрагмент программы, которая корректно работает: Главный Pas файл. {=============================================}
{---------------------------------------------------------------------------------}
Вот таким способом я передал функцию в процедуры построения графика. Немного короче было бы передать функцию так procedure DrawShedule(... f: TFunk ...); а вызов DrawShedule(... f ...); Но об этом разговор дальше. Так программа рабочая, я вставляю текст в виртуальный метод в другой программе {==============================================}
Так Вот, Господа, приверженцы передачи имени процедуры с помощью типа в данном случае компилятор даже не захочет с вами общаться, Утверждая, Что то, что вы передаете в процедуру DrawShedule(... f ...) не указывает на область памяти, это про "f". Передавая указатель, как в данном случае я и написал, компилятор не может отследить этот факт и благополучно компилирует программу. Но, когда программа доходит до использования функции f - начинаются проблемы.... Они связанны с.....?? Это и есть мой вопрос. Мой рассуждения. У виртуального метода локальная функция хранится либо в стеке, либо в сегменте кода, поэтому компилятор не захочет передавать имя функции в качестве формального параметра, ведь он боится, что на этапе позднего связывания, он не сможет определить расположение функции. Рассуждения, как решить проблему: расположить код функции по конкретному адресу в памяти ( где-то тут $C000:0000 ) - Но как это реализовать? А еще может мои рассуждения просто чушь, Посему я и обратился к Вам! Тема покажет, какие тут программисты на форуме. p.s.s отдельная программа работает, как и при передаче имени функции, так и при передачи её адреса (как я написал). В виртуальном методе при передачи имени функции компилятор не захочет с вами иметь дело. А вот при передачи адреса он с вами будет дружить, он то будет, а вот процессор нет... Ну, ваши соображения, уважаемые пользователи форума! Не Забывайте я задал 2 вопроса Сообщение отредактировано: Oleg_Z - 29.05.2005 20:12 |
![]() ![]() |
| hiv |
1.06.2005 13:50
Сообщение
#2
|
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 660 Пол: Мужской Реальное имя: Михаил Репутация: 11 |
Вот и все! Замени свой код:
Procedure TMass.Job;на этот: Const rBuf: real = 15;Т.Е. определение твоей ф-ции F(x) ограничивалось пространством процедуры TMass.Job, а ты пытался ее вызвать вообще из другого места программы, вот стек и сбоил. Я ее вынес - и все заработало! -------------------- Никогда не жадничай. Свои проблемы с любовью дари людям!
|
Reople Для Тех Кто Реально разбирается в "turbo Pascal" 28.05.2005 19:52
volvo
Полностью согласен... Неоднократно убеждался в эт... 28.05.2005 20:28
-reople- Во-первых, выражаю вам благодарность Volvo за сооб... 29.05.2005 20:00
volvo
Ну, в таком случае - вот ответ на второй вопрос:
... 30.05.2005 0:02
-reople- thx Oleg_Z. И вправду красиво получилось..... и чт... 29.05.2005 23:06
Romtek Я так и не понял в чём проблема. Не получается выз... 29.05.2005 23:59
AlienEmperor 2 Reople: вот сейчас все брошу и буду над Вашими п... 30.05.2005 15:00
-Reople- Volvo ты самый ЛУЧШИЙ! БОЛЬШОЕ спасибо за реал... 30.05.2005 15:38
Guest На чем писать руководство скажет на том и будешь, ... 30.05.2005 15:41
-reople- последнее сообщение моё. про <руководство и С++... 30.05.2005 15:41
Romtek Вот состряпал пример, надеюсь поможет (с указателе... 30.05.2005 19:08
-reople- Romtek, thx - но это не поможет, это мы и сами уме... 30.05.2005 21:02
volvo
:no: Не думай об этом... Для тебя то, что функци... 30.05.2005 21:36
Romtek Приведи всё же пример, гость -reople-.
На примере... 30.05.2005 21:30
Reople Ладно. ВОт шаблон (уреза вроде все, а проблему ост... 31.05.2005 8:38
-reople- Значит мне удалось выяснит следующие:
1) Функция ... 31.05.2005 21:18
-reople- Народ просил исходники - я дал их.
Кажется, после ... 1.06.2005 13:09
-reople- :) Молодец Hiv, долго думал? - наверно нет.
Пока... 1.06.2005 14:56
hiv Если по человечески - то если начал писать в ООП, ... 1.06.2005 15:08
-reople- сделал методом - не помогает.
Может у тебя получи... 1.06.2005 15:58
-reople- Ну что, народ, сдались? Volvo и ты тоже? :huh: 1.06.2005 17:39![]() ![]() |
|
Текстовая версия | 8.12.2025 17:07 |