![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Eskel |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 26 Пол: Мужской Реальное имя: Илья Репутация: ![]() ![]() ![]() |
Спасибо огромное форуму. Смог решить 2 задачи по вставке и удалению элемента при работе с динамической памятью. Вот только не пойму как решить с помощью описанных у вас процедур 2 задачи:
1) type tip_elem=integer;. Удалить из списка Ukaz за каждым вхождением элемента Е один элемент отличный от Е (если он есть). 2) Певая часть условия совпадает... Удалить из списка Ukaz все нули |
Lapp |
![]()
Сообщение
#2
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
1)
type tip_elem=integer;Удалить из списка Ukaz за каждым вхождением элемента Е один элемент отличный от Е (если он есть). 2) Певая часть условия совпадает... Удалить из списка Ukaz все нули Насколько я понял, тебя затрудняет удаление элементов из списка. В этом нет ничего сложного, нужно просто завести буферный указатель и положить в него значение указателя из удаляемого элемента. Затем освободить память (либо Dispose, либо FreeMem - в зависимости, как брал), занимаемую удаляемым элментом и присвоить указателю на него значение, сохраненное в буфере. А нахождение кандидата на удаление - это вряд ли сложно. Или тоже объяснить? -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
volvo |
![]()
Сообщение
#3
|
Гость ![]() |
while r <> nil do beginR - корень списка... Кстати, на будущее, Eskel, показывай, как заполняешь список, если уж говоришь, что реализовал... А теперь у меня к тебе просьба: прокомментируй мою программу, пожалуйста, чтобы было ясно, понял ты ее или нет... |
Eskel |
![]()
Сообщение
#4
|
Новичок ![]() Группа: Пользователи Сообщений: 26 Пол: Мужской Реальное имя: Илья Репутация: ![]() ![]() ![]() |
Цитата А теперь у меня к тебе просьба: прокомментируй мою программу, пожалуйста, чтобы было ясно, понял ты ее или нет... Ну если комментировать пошагово: Делаем цикл по элементам списка. Сравниваем текущую фактическую часть с вводимым значением с клавы. Ну понятно, если равно, то надо найти число отлично от Е, то тогда t присваиваем знач ссылки r.(t видимо тоже ukaz) и меняем ссылку r на ссылку t. Освобождаем память. Ну и для продолжения цикла стандартно r := r^.next; ... Еще лучше я разберусь, когда сейчас попробую осуществить это все в проге. Заполнял я список так... begin |
Eskel |
![]()
Сообщение
#5
|
Новичок ![]() Группа: Пользователи Сообщений: 26 Пол: Мужской Реальное имя: Илья Репутация: ![]() ![]() ![]() |
Lapp, Как находить кандидата я разобрался с помощью вашей справки. Благодарю
![]() Но тут просто их много и я путаюсь... |
Eskel |
![]()
Сообщение
#6
|
Новичок ![]() Группа: Пользователи Сообщений: 26 Пол: Мужской Реальное имя: Илья Репутация: ![]() ![]() ![]() |
program dina; ![]() |
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
Внутри Obr кто инициализировать R будет? У тебя ж там мусор...
|
Eskel |
![]()
Сообщение
#8
|
Новичок ![]() Группа: Пользователи Сообщений: 26 Пол: Мужской Реальное имя: Илья Репутация: ![]() ![]() ![]() |
То есть R входящий параметр?(может я неправильно назвал). Подскажите, плиз, как эту процедуру правильно завернуть...
|
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
Ты ж все написал, только чуть-чуть поправить:
procedure obr(e:tip_elem; r:ukazat); { <--- указатель на первый элемент изменяться не может } Сообщение отредактировано: volvo - 23.12.2008 13:10 |
Eskel |
![]()
Сообщение
#10
|
Новичок ![]() Группа: Пользователи Сообщений: 26 Пол: Мужской Реальное имя: Илья Репутация: ![]() ![]() ![]() |
Спасибо! А чтобы удалять текущий элемент надо делать как у вас с помощью поиска ссылки на текущий элемент? или можно также в одной процедуре?
procedure obr(r:ukazat); |
volvo |
![]()
Сообщение
#11
|
Гость ![]() |
А вот чтобы удалять нулевой элемент, надо принять во внимание 2 вещи: во-первых, если нули начинают список, то указатель на начало списка может измениться. А во-вторых, удалять текущий элемент надо гораздо более внимательно, чем "следующий". Итого, я бы сделал твои задачи в 2-х процедурах: сначала удалить элементы после E, а потом - вот это:
procedure del_zeroes(var root: ukaz);Что непонятно - спрашивай... |
Eskel |
![]()
Сообщение
#12
|
Новичок ![]() Группа: Пользователи Сообщений: 26 Пол: Мужской Реальное имя: Илья Репутация: ![]() ![]() ![]() |
Спасибо огромное! Тема первая тяжелая в паскале... Я постараюсь разобраться
|
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 13:42 |