![]() |
Модераторы: volvo877, Snowy, MetalFan |
![]() ![]() ![]() |
|
Anark1 |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 622 Регистрация: 15.12.2006 Где: RF -> Moscow Репутация: нет Всего: 11 |
Собственно сабж. Условия подзадачи такие : даны числа произвольной системы счисления (2-36), они хранятся в двусвязных списках. Реализуется вычитание одного из другого - алгоритм столбик. Также заведомо из одного можно вычесть другое.
Структура списка:
Стоит заметить, что списки заполняются правильно (проверял дебаггом и выводом в обе стороны). Но если что вот сам ввод:
А теперь самое главное. Бьюсь головой об стену, не понимаю как такое в принципе возможно. Вот код процедуры вычитания
Все работает, если вычитание происходит без заема разряда. А вот если нужно выполнить например 123-45, то начинается проблема. В дебаггере это выглядит так : первый символ получается правильным, потом занимаем у следующего элемента, переходим назад, а когда опять возвращаемся к элементу у которого занимали, то там оказывается непонятно что. Строка 26, там где <<<!!!>>. То есть грубо говоря, если Ptr^.Value=5, то после Ptr:=Ptr^.Next; Ptr:=Ptr^.Prev получаем Ptr^.Value<>5. Причем этот указатель изменяется самопроизвольно - я замечал, что он ни с того ни с сего меняет значение когда компилятор проходит строку 25. Более того, там оказывается какой-то мусор, значения вроде 139, хотя тип Byte и вообще непонятно как такое возможно. Что я уже только не попробовал. Ошибка какая-то глупая... Очень прошу помощи, заранее благодарен |
||||||
|
|||||||
volvo877 |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2073 Регистрация: 15.11.2004 Репутация: 2 Всего: 116 |
1) некорректно заполняешь список (хоть и утверждаешь, что все в порядке)... Вот так будет корректно:
2) вот из первого вытекает как раз второе: если при
|
||||||
|
|||||||
Anark1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 622 Регистрация: 15.12.2006 Где: RF -> Moscow Репутация: нет Всего: 11 |
volvo877, именно так. Вчера через два часа после того как запостил, нашел ошибку. Но сил уже заходить на форум не было. Но все равно спасибо за внимание.
![]() По поводу списка - это не обязательно, если есть счетчик count. Разве в целях аккуратности. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi" | |
|
Запрещается! 1. Обсуждать и делится взломанными компонентами или программным обеспечением 2. Публиковать ссылки на варез 3. Оффтопить
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |