![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() ![]() |
![]() |
krox |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Мужской Репутация: ![]() ![]() ![]() |
Задание следующее...
Элементы двунаправленного списка имеют следующую структуру: Шифр детали Наименование Цена Вес Указатель предыдущего Указатель последующего Удалить элемент с заданным номером К от начала списка. задание выполнил используя пример однонаправленого списка... помогите/объясните как сделать задание с двунаправлеными списками... вот код unit Unit1; в этом коде однонаправленый список... нужен двунаправленый по заданию... в прикреплёном архиве все файлы проекта... Прикрепленные файлы ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Во-первых, у тебя Дельфи, а для Дельфи есть соответствующий раздел...
Во вторых, то, что ты делаешь - не выдерживает никакой критики: описал бы список как класс, было бы гораздо лучше, зачем усложнять себе жизнь работой с глобальными переменными? Зачем объединять указатели sled/pred и данные? Не надо этого делать... как только тебе понадобится сохранить содержимое списка в файл, ты поймешь, о чем я... Все проще гораздо: type Для удаления элемента из двухсвязного списка пользуемся procedure tlist.remove_item(p: ptitem); // <--- сюда передается адрес элемента, который надо удалить, находится этот адрес - простым циклом с увеличением счетчика элементов, как у тебя и было сделано для списка односвязного... P.S. Если пользуешься Дельфи 2009, то можно сделать еще красивее... |
krox |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Мужской Репутация: ![]() ![]() ![]() |
хм...
получается, что вначале надо изменить процедуру добавления... где в этот код воткнуть указатель на предыдущий элемент.... procedure TForm1.Button1Click(Sender: TObject); менять тип рекорд не буду... записи(списки) сохранять в файл не надо... и как изменить procedure tlist.remove_item(p: ptitem); // <--- сюда передается адрес элемента, который надо удалить не пользуясь классами а массивом записей TElem= record |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Цитата менять тип рекорд не буду... записи(списки) сохранять в файл не надо... Ну, как знаешь... А я подсказывать тебе, как некорректно написать программу, не буду... Пишешь на Дельфи - так и используй Дельфи (а вместе с ним - классы, свойства, и все преимущества ООП), а не загоняй себя искусственными ограничениями в возможности Турбо Паскаля версии 4.0 в красивой оболочке...Цитата не пользуясь классами а массивом записей TElem= record Ну-ну... Ты еще опиши:var myList: array[1 .. 10000] of TElem, и считай, что создал список... Где ты массив записей-то нашел? |
krox |
![]()
Сообщение
#5
|
Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Мужской Репутация: ![]() ![]() ![]() |
вся проблема в том, что ООП ещё не проходили.... иначе бы конечно его использовал... а так даже н знаю как классы использовать(((
|
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Записи и процедуры/функции знаешь, как использовать? Вот так я бы делал это задание (при запрете использования классов):
![]() Все остальные файлы проекта не меняются... Не забудь потом удалить список, кстати... Хотя очень интересно получается... ООП еще не проходили, а то что и TForm и TEdit и TButton - это все классы - на это что, наплевать? |
krox |
![]()
Сообщение
#7
|
Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Мужской Репутация: ![]() ![]() ![]() |
спасибо тебе, volvo... сёдня был на паре... показал то что вчера сделал... преподша помогла добавление двунаправленого списка сделать и заодно объяснила что к чему... ей главное чтобы научились в данном случае использовать двунаправленые/однонаправленые списки...
но к сожалению, при всём моём желании я не смогу использовать твой код, т.к. преподша поймёт что делал не сам... да и за сегоднешнюю пару уже получил объяснения как и что сделать) ещё раз спасибо за затраченное на меня время) |
мисс_граффити |
![]()
Сообщение
#8
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
Цитата Хотя очень интересно получается... ООП еще не проходили, а то что и TForm и TEdit и TButton - это все классы - на это что, наплевать? Нас так же учили... Программирование на языках высокого уровня (конкретно - на Делфи) - 1 семестр. ООП - четвертый. Типа воспринимайте кнопки и формы как данность )) -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
krox |
![]()
Сообщение
#9
|
Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Мужской Репутация: ![]() ![]() ![]() |
Препод сказал ещё сортировку по любому ключу прилепить и просмотр в обратную стророну сделать....
на сортировке возникла проблема... исходник в нэте нашёл, исправил под себя и при нажатии на кнопку сортировки вылетает с ошибкой
на втором WHILE происходит ошибка.... ![]() - файл с проектом на делфи7 только не надо отдельные функции и процедуры дописывать) весь код должен быть на одной кнопке нид хелп с сортировкой) Сообщение отредактировано: krox - 25.10.2008 14:43 |
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
Цитата только не надо отдельные функции и процедуры дописывать) весь код должен быть на одной кнопке По-моему, ты недооцениваешь преимущества Паскаля/Дельфи... Условия соблюдены (весь код - на одной кнопке) :procedure TForm1.Button7Click(Sender: TObject);Об алгоритме (а именно - это сортировка списка вставками) можно прочитать у Роберта Сэджвика (Robert Sedgewick) |
krox |
![]()
Сообщение
#11
|
Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Мужской Репутация: ![]() ![]() ![]() |
спасибо) работает) очень грамотный и тонкий наёп с твоей стороны) очень долго ржал)
ООП будет в следющем семестре... на языке Java вот там и научусь использовать классы, методы и т.д) сколько читаю про программирование, везде пишут, что функции и процедуры лучше и эффективнее использовать, но в данный момент нам препод ставит задачу по написанию проги так как она нас учила) кста, очень глЮпый вопрос, а где тут двунаправленость?) и ещё возник вопрос else insert_sort := insert(l, insert_sort(l^.sled)); это рекурсия? Сообщение отредактировано: krox - 25.10.2008 17:12 |
volvo |
![]()
Сообщение
#12
|
Гость ![]() |
Цитата очень глЮпый вопрос, а где тут двунаправленость?) Точно там же, где и предложенное мной выше разделение на данные/указатели... Ты ж этого не сделал?Если б ты все-таки отделил данные от указателей pred/sled, то можно было бы элементарно отсортировать список без рекурсии, например так: procedure TForm1.Button7Click(Sender: TObject);, но поскольку ты пошел "другим путем" (С) - этот номер не пройдет... Кстати, проверь работу сортировки как следует... По-моему для двунаправленного списка она отрабатывает не совсем корректно: если ты захочешь после сортировки пробежать по списку в обратном направлении, тебя может ждать сюрприз... |
krox |
![]()
Сообщение
#13
|
Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Мужской Репутация: ![]() ![]() ![]() |
я немного не врубился... если используем рекурсию в коде, то при сортировке двунаправленого списка разве не нужна ссылка на предыдущий элемент в этом коде?
procedure TForm1.Button7Click(Sender: TObject); у нас не спрашива.т разделение на данные и указатели, точнее, так не надо делать... препод ничего насчёт этого не говорил... в коде выше как двунаправленость засунуть?) |
volvo |
![]()
Сообщение
#14
|
Гость ![]() |
Цитата в коде выше как двунаправленость засунуть?) Как хочешь так и засовывай... Заодно засунь трехнаправленность... Можешь и четырех, от этого ничего не изменится. Это - алгоритм сортировки ОДНОсвязного списка. Точка. Понимаешь, в чем дело, или нет? НЕ ЗНАЕТ этот код о том, что есть ссылка на предыдущий элемент. Не знает, и знать не хочет... "Меньше знаешь - лучше спишь" (С) помнишь? Вот и функция insert_sort() так же себя ведет. Зачем ей лишняя информация о том, что еще там ты намутил в списке? Она знает, что есть элемент списка, и одно из его полей - это указатель на следующий элемент. Все. Больше - ничего. Используя только эти данные функция прекрасно сортирует список. Только после сортировки проходить по списку придется от head к last, а не наоборот...Цитата точнее, так не надо делать... препод ничего насчёт этого не говорил... Мне как-то все равно, что там говорит твой "препод". Понимаешь? Задание дано тебе, вот и решай его сам с извращениями, если не хочешь слушать, как решить БЕЗ них... |
krox |
![]()
Сообщение
#15
|
Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Мужской Репутация: ![]() ![]() ![]() |
попытаюсь объяснить преподу эту точку зрения...
хочу слушать тебя и слушаю, а так же хочу разобраться в этой теме... фигово её объяснили да и то на примере однонаправленного списка( сделаю как ты посоветуешь) |
krox |
![]()
Сообщение
#16
|
Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Мужской Репутация: ![]() ![]() ![]() |
можешь ещё с выводом элементов в обратном порядке помочь?
а то я написал
и нифига не работает(((( |
krox |
![]()
Сообщение
#17
|
Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Мужской Репутация: ![]() ![]() ![]() |
наконец-то нашёл двунаправленое удаление элементов и двунаправленое добавление...
в задании нужно по вводимому номеру удалить элемент, в коде приведённом ниже, он почему-то всё время верхний элемент удаляет... объясните плз, что добавить/убрать, чтобы удалял элемент по номеру? procedure TForm1.Button2Click(Sender: TObject); |
![]() ![]() |
![]() |
Текстовая версия | 18.06.2025 20:44 |