IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Задача на ссылочные типы данных, Не выходит решить...
Eskel
сообщение 23.12.2008 0:59
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 26
Пол: Мужской
Реальное имя: Илья

Репутация: -  0  +


Спасибо огромное форуму. Смог решить 2 задачи по вставке и удалению элемента при работе с динамической памятью. Вот только не пойму как решить с помощью описанных у вас процедур 2 задачи:

1)
type tip_elem=integer;
ukaz=^dinam;
dinam=record
ed:tip_elem;
next:ukaz;
end;
.
Удалить из списка Ukaz за каждым вхождением элемента Е один элемент отличный от Е (если он есть).

2) Певая часть условия совпадает... Удалить из списка Ukaz все нули
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 23.12.2008 18:32
Сообщение #2


Гость






А вот чтобы удалять нулевой элемент, надо принять во внимание 2 вещи: во-первых, если нули начинают список, то указатель на начало списка может измениться. А во-вторых, удалять текущий элемент надо гораздо более внимательно, чем "следующий". Итого, я бы сделал твои задачи в 2-х процедурах: сначала удалить элементы после E, а потом - вот это:

procedure del_zeroes(var root: ukaz);
var
r, t, pred: ukaz;
delete: boolean;
begin
while root^.ed = 0 do begin
t := root;
root := root^.next;
dispose(t);
end;

pred := root; r := root^.next;
while r <> nil do begin

delete := false;
if r^.ed = 0 then begin
t := r;
pred^.next := r^.next;
delete := true
end
else pred := r;

r := r^.next;
if delete then dispose(t);

end;
end;
Что непонятно - спрашивай...
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 21:19
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"