![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
habi |
![]() ![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 44 Пол: Мужской Реальное имя: Артём Репутация: ![]() ![]() ![]() |
Вот код, работает, сортирует окна, по увеличению гипотенузы(расстояния от нижнего правого угла до верхнего левого экрана) Но при повторном вызове Invalid floating point operation процедура vivod лишь прорисовывает окна в одинарной рамке, а если конец списка, то в двойной. Помогите исправить ошибку. Рад буду услышать совет по оптимизации или другой алгоритм. Сообщение отредактировано: habi - 28.05.2008 17:37 |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата Помогите исправить ошибку. Угу... Как ты думаешь, очень интересно кому-то придумывать, что там у тебя за структура, что за список, какие поля и каких типов присутствуют в нем, если даже автор не потрудился создать простейшую законченную программу, которая показывает эффект? (тем более, что работа ведется с ГЛОБАЛЬНЫМИ переменными, которые могут меняться совершенно непредсказуемо между вызовами процедуры)Добавлено через 1 мин. P.S. Кстати, движок этого форума позволяет не только вставлять код внутрь поста, но и добавлять файлы как аттач... Сообщение отредактировано: volvo - 27.05.2008 23:27 |
habi |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 44 Пол: Мужской Реальное имя: Артём Репутация: ![]() ![]() ![]() |
Программа работает, и сортирует, но при повторном вызове происходит нечто странное =) Я думаю что всё рисуется вновь в последнем окн
Тыкаем ентер, потом ф7 Сообщение отредактировано: habi - 27.05.2008 23:54 |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
1. В процедуре сортировки у тебя идет попытка обращения к неинициализированному указателю, ибо память под CCC^ ты не выделяешь нигде... Как оно у тебя работало, и КУДА записывало информацию - никому не ведомо
![]() k1:=sqr(round(tek^.x2/2)+tek^.x1);+ ниже (после обмена) не забудь удалить, иначе получишь утечку... 2. Внутри For-цикла запрещено менять параметр (если уж так надо - пользуйся While-ом), а ты меняешь, там же, в процедуре Sortirovka: tek:=tek^.next;- результат может быть непредсказуем... Я для теста поменял на While... 3. Если б ты сразу отделил информационное поле от next/prev, т.е., делал как-нибудь так: type, то вместо поэлементного копирования полей мог бы записать: CCC^.info := tmp^.info;, да и вообще можно было бы обойтись без выделения памяти под CCC, достаточно было бы описать статически структуру типа InfoType. Так что выбирай, или оставляешь все, как есть, или делаешь, как лучше ![]() Сообщение отредактировано: volvo - 28.05.2008 8:01 |
habi |
![]()
Сообщение
#5
|
Новичок ![]() Группа: Пользователи Сообщений: 44 Пол: Мужской Реальное имя: Артём Репутация: ![]() ![]() ![]() |
Вот пришёл с универа, проделал, то что ты написал =)
Но список first некорректно заполняется, незнаю почему. Ну и ряд других функция перестали корректно работать, может я неправильно обращаюсь? tek^.info.x1.... Также вопрос, загонять ли в констаты часто повторяемые фразы? "сохранить файл? д\н" =) Ну и ещё что-то изменять надо? Сообщение отредактировано: habi - 28.05.2008 18:38 |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
У тебя практически одно и то же делается дважды. Первый раз - со Словами, второй - с Окнами. И там и там создается список (только в первом случае он односвязный, а во втором - двухсвязный, но что тебе мешает сделать и в первом случае поле Prev, но не использовать его?)
Классическая задача на многократное использование кода (а не так как у тебя сейчас - отдельно - код для WordList, отдельно - для списка Wind). Поскольку задача решается тобой в процедурном стиле (а не ООП) - то могу предложить использование директивы {$i filename} для написания более компактной программы... Ее будет гораздо проще поддерживать... В том, что есть у тебя сейчас разбираться очень сложно... Если интересно - покажу, как это делается... |
habi |
![]()
Сообщение
#7
|
Новичок ![]() Группа: Пользователи Сообщений: 44 Пол: Мужской Реальное имя: Артём Репутация: ![]() ![]() ![]() |
Так ты не ответил на мой вопрос, я правильно обращаюсь к переменным?
Почему first теряется? Если интересно, могу рассказать, что делает каждая процедура. Сообщение отредактировано: habi - 28.05.2008 19:17 |
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Цитата я правильно обращаюсь к переменным? Мне неинтересно разбираться в дебрях кода. Вчера ты привел программу, которая была значительно меньше, я ее посмотрел. Сегодня - программа огромна и нечитабельна... Хочешь - разбирайся в таком коде, тут я тебе не помощник... |
habi |
![]()
Сообщение
#9
|
Новичок ![]() Группа: Пользователи Сообщений: 44 Пол: Мужской Реальное имя: Артём Репутация: ![]() ![]() ![]() |
вопрос по другому:
type Я создал такой список. Как правильно обращаться к ячейкам х1,у1.....? Tek^.Info.X1...? А насчёт obj готов почитать. Может и переделаю. Сообщение отредактировано: habi - 28.05.2008 19:59 |
habi |
![]()
Сообщение
#10
|
Новичок ![]() Группа: Пользователи Сообщений: 44 Пол: Мужской Реальное имя: Артём Репутация: ![]() ![]() ![]() |
Помогите разобраться в выводе окон.
Теряется видимо где-то указатель.Хотя ватч везде показывает участок памяти. В режиме сразу_все_окна, переход осуществляется между первым и предпоследним, а режиме последовательно, всё корректно. Прикрепленные файлы ![]() |
volvo |
![]()
Сообщение
#11
|
Гость ![]() |
А теперь сравни свой код вот с этим:
![]() Что легче читать? А сопровождать? ![]() |
habi |
![]()
Сообщение
#12
|
Новичок ![]() Группа: Пользователи Сообщений: 44 Пол: Мужской Реальное имя: Артём Репутация: ![]() ![]() ![]() |
М =) здорово =) Вот ещё бы всё остальное переделать. за ночь =)
Выложи плз свой TURBO.TPU а то у меня дизион бай 0, ошибка. А с помощью тпумовер не патчит. upd сортировка работает =) Сообщение отредактировано: habi - 28.05.2008 23:12 |
volvo |
![]()
Сообщение
#13
|
Гость ![]() |
Цитата Выложи плз свой TURBO.TPU Ты про Turbo.TPL?Прикрепленные файлы ![]() |
habi |
![]()
Сообщение
#14
|
Новичок ![]() Группа: Пользователи Сообщений: 44 Пол: Мужской Реальное имя: Артём Репутация: ![]() ![]() ![]() |
Спасибо, не смог разобраться , как обращаться и записывать в инфотип
Как понятно из кода, нужно окна в нижний левый угол вогнать. [upd]сдам курсовую и переделаю старый вариант =) потомучто за 1 ночь не верну все нужные функции.алгоритм обращения к инфотипу не понял Сообщение отредактировано: habi - 29.05.2008 0:13 |
volvo |
![]()
Сообщение
#15
|
Гость ![]() |
Чуть-чуть не так:
procedure MoveToLeft; |
habi |
![]()
Сообщение
#16
|
Новичок ![]() Группа: Пользователи Сообщений: 44 Пол: Мужской Реальное имя: Артём Репутация: ![]() ![]() ![]() |
Хм окна остаются на тех же местах.
Заново всё выводится со старыми координатами. Сообщение отредактировано: habi - 29.05.2008 0:26 |
volvo |
![]()
Сообщение
#17
|
Гость ![]() |
С чего бы?
p := first; сразу после SortList, и никаких старых координат, все сброшено в левый нижний угол... Сделаешь X1 := 1; Y1 := 1 - все будет в левом верхнем... |
habi |
![]()
Сообщение
#18
|
Новичок ![]() Группа: Пользователи Сообщений: 44 Пол: Мужской Реальное имя: Артём Репутация: ![]() ![]() ![]() |
В том коде не была использована процедура show.
p.s. в icq не сидишЬ? =) если нарушил правила форума, то извиняюсь Сообщение отредактировано: habi - 29.05.2008 1:10 |
![]() ![]() |
![]() |
Текстовая версия | 18.07.2025 14:02 |