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

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

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

 
 Ответить  Открыть новую тему 
> Двусвязный Кольцевой список (ещё один мааааленький вопрос)
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 15
Пол: Женский

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


У меня осталось уже очень мало времени, так что придётся задать ещё вопрос. Насчёт удаления узла. Вот эта процедура делает всё хорошо и правильно (удаляет к-ый элемент) во всех случаях, кроме одного. Естественно, когда к=1. Так как к-1 получается 0. Так вот как же мне оговорить этот случай?

Procedure DeleteNode(var p:Dlist);
var q:dlist;
i,k:integer;
begin
i:=1;
writeln ('vvedite k:');
readln (k);
if p=nil then writeln ('spisok pust')
else
begin
q:=p^.next;

while (q<>p) and (i<>k-1) do
begin
q:=q^.next;
inc(i);
end;
if i<>k-1 then
writeln ('uzel ne naiden')
else
if q^.next=q then
begin
p:=nil;
dispose(q);
end
else
begin
if q=p then
p:=p^.next;
q^.prev^.next:=q^.next;
q^.next^.prev:=q^.prev;
dispose (q);
end;
end;
end;


Сообщение отредактировано: volvo -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Опять же - зачем запрашивать номер элемента для удаления, если список пуст? Это достаточно сделать после проверки на пустоту...

procedure DeleteNode(var p:Dlist);
var
q: dlist;
i, k: integer;
begin
if p = nil then writeln ('spisok pust')
else begin

i := 1;
writeln ('vvedite k:');
readln (k);

if k > 1 then begin

q := p^.next;
while (q <> p) and (i<>k-1) do begin
q := q^.next;
inc(i);
end;

end
else begin { k = 1 }
i := 0; q := p;
end;

if i <> k-1 then writeln ('uzel ne naiden')
else
if q^.next = q then begin
p := nil;
dispose(q);
end
else begin
if q = p then p := p^.next;

q^.prev^.next := q^.next;
q^.next^.prev := q^.prev;
dispose (q);
end;
end;
end;

Оно?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

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

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


1. Помойму правельнее для списка говорить ЭЛЕМЕНТ, а для дерева УЗЕЛ....
2.ИЗ того что ты написал, я сперва понял, что тебе надо удалить k-1элемент, то тебе надо вот это добавить:

.....
IF k=1 then
begin
writeln('Вы выбрали 1 элемент. Не возможно удалить элемент перед ним стоящий');
readkey;
exit;
end;
.....



А прочитав ещё раз, понял что тебе надо k-тый. В случае удаления K-того, когда он равен 1(вводишь это число на запрос) происходит удаление элемента из начала списка и ничего для этого оговариваться не должно.
Так что ты с условием-то определись....

Сообщение отредактировано: Renbo -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Новичок
*

Группа: Пользователи
Сообщений: 15
Пол: Женский

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


Renbo, k-ый надо было удалить. Нас учат говорить "узел".

И Volvo, да! именно то, что нужно. Спасибо тебе ещё раз. Ты мне сегодня очень помог. Осталось мне доделать самую малость и можно получать зачёт по инфе. А на сегодня хватит. good.gif

Токо вот он почему-то очень странно реагирует на удаление последнего узла, включенного процедурой, кот. ты перед этим сделал (включение узла вслед за к-ым). Его зацикливает. Что бы это значило... unsure.gif

Сообщение отредактировано: Everveit -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 27.09.2020 11:45
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name