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