![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
ikorstenxl |
![]() ![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 4 Пол: Мужской Реальное имя: Vladislav Репутация: ![]() ![]() ![]() |
ПОМОГИТЕ ПОЖАЛУЙСТА ДОДЕЛАТЬ ПРОГРАММУ.
Вот собственно код : Program Kursach; Как вы могли понять программа добавляет новый элемент в кольцевой двусвязный список, выводит на экран список,и чистит его при выходе из программы. еще есть процедура которая удаляет элементы по условию : 1) if tmp^.data < 0 then - то бишь отрицательный элемент списка, а должно быть два условия : 1)... 2) if tmp^.prev^.data = tmp^.next^.data then - отрицательный элемент который находить между двумя одинаковыми (1 -2 1 - удалить -2). только вот дело в том что программа ,если только с первым условием , удаляет все отрицательные элементы, а если с двумя условиями то просто не удаляет ни чего. подскажите пожалуйста что мне исправить что бы оно делало все правильно. |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Только вот дело-то в том, что когда отработает первое условие, второе уже НИКОГДА не выполнится. Согласись, сложно найти отрицательный элемент, окруженный двумя одинаковыми, после того, как удалил все отрицательные... Что-то не то с условиями. Пока не внесешь ясность - даже программу смотреть не хочется, потому как не знаешь, что в результате-то требуется.
На данный момент совет один - убрать вообще второе условие. Оно лишнее. |
ikorstenxl |
![]()
Сообщение
#3
|
Группа: Пользователи Сообщений: 4 Пол: Мужской Реальное имя: Vladislav Репутация: ![]() ![]() ![]() |
суть в том что бы удалить за раз все отрицательные элементы которые находяться между одинаковыми :
1 , 2 , -3 , 2 , 4 , 5 , 4 , 6 , -7 , 6 --------- 1 , 2 , 2 , 4 , 5 , 4 , 6 , 6 |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Так вот ты для начала список правильно создай (у тебя ж заполняются только указатели next, а prev-ы остаются нетронутыми, потом, при попытке обращения к ним, будут проблемы в виде неправильной работы на старых компиляторах и вылета программы на новых).
Когда исправишь создание списка (как - можно посмотреть на этом форуме, здесь была Everveit, которая задавала несколько вопросов по двухсвязным кольцевым спискам, и получила на них ответы; можно - начертить список на бумаге, и разобраться, как меняются все указатели при добавлении нового элемента. Это - предпочтительный вариант), тогда вот такая процедура будет работать: function RemoveItem(var first: List; p: List): List; Кстати, печать списка можно сделать гораздо красивее: procedure Print(first: List);Заметь, никаких отдельных печатаний первого элемента. Он - такой же, как и все остальные, и незачем его выделять, и работать с ним по-другому |
ikorstenxl |
![]()
Сообщение
#5
|
Группа: Пользователи Сообщений: 4 Пол: Мужской Реальное имя: Vladislav Репутация: ![]() ![]() ![]() |
уважаемый volvo, спасибо большое за совет, я разобрался и в итоге написал новую процедуру для создания списка и теперь функция для удаления элемента ,которую написали вы, и она работает - УРА!
но я все же что то напутал в создании списка, почему то постоянно первый элемент списка всегда присваевает ноль и я чет не могу сообразить почему, вот так выглядит процедура :
не могли бы вы глянуть что я не так написал? спасибо Добавлено через 4 мин. я на всякий пожарный еще прикрепил всю программу Сообщение отредактировано: ikorstenxl - 26.05.2010 12:07 Прикрепленные файлы ![]() |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Вот именно потому, что ты не работаешь с полем Prev (ну объясни мне, зачем бежать по всему списку от First вперед, если можно одним движением назад получить тот же указатель?), оно и заполняется некорректно. Смотри:
procedure AddElem(var first: List; value: TInf); Еще раз: берешь несколько листов бумаги и карандаш, чертишь на них списки и меняешь связи, пока не поймешь и не будет от зубов отлетать, что и как и почему именно в этом порядке (сменишь порядок пунктов 1, 2, 3 - будут проблемы)... Иначе так и будешь путаться в кольцевых списках. |
ikorstenxl |
![]()
Сообщение
#7
|
Группа: Пользователи Сообщений: 4 Пол: Мужской Реальное имя: Vladislav Репутация: ![]() ![]() ![]() |
большое спасибо, сижу разбираюсь.
|
![]() ![]() |
![]() |
Текстовая версия | 19.07.2025 18:25 |