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

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

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

> Удаление элементов в списках
Tribunal
сообщение 26.04.2006 10:14
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

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


Мне нужно удалить из списка элементы, встречающиеся ровно 2 раза.

вот то,что у меня получилось,
но ,по-видимому, программа не удаляет нужные элементы.
подскажите,пожалуйста,почему...

Код
var
   temp:integer;
   k:byte;
   p,h:t_ptr;
begin
t:=first;
while t^.next<>nil do
begin
   k:=0;
   p:=t^.next;
   while p<>nil do
    begin
      if p^.inf=t^.inf then begin
                            inc(k);
                            if k=2 then temp:=p^.inf;
                            end;
      p:=p^.Next;
    end;
   if k=2 then begin
               h:=first;
               while h<>nil do
                begin
                  if h^.inf=temp then dispose(h);
                  h:=h^.next;
                end;
               end;
   t:=t^.next;
end;
t:=first;
while t<>nil do
  begin
    writeln(t^.inf);
    t:=t^.next;
  end;


Сообщение отредактировано: Tribunal - 26.04.2006 10:53


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Tribunal
сообщение 2.05.2006 14:59
Сообщение #2


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

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


ошибка invalid pointer operation.

вот на таких,например,списках возникает такая ошибка:
1 9 9 7 4 -3
6 9 9 7 -1 5 -4 -5
4 9 -9 -9 -5 0 1 8 5 1

правда,делаю я в Delphi.
то есть программа компилируется.
даже иногда правильно работает.
и когда я отменяю эту ошибку,она в первом случае удаляет только один элемент из пары,а во втором всю пару
(например,здесь 4 9 -9 -9 -5 0 1 8 5 1)

и при ошибке выполнение программы останавливается
на этом куске
p := first;
i := 1;
while p^.next <> nil do begin
if p^.next.inf = t^.inf then begin


и вот кусок программы,где я заполняю список:
var
n,i:byte;
begin
randomize;
read(n);
new(first);
first^.next:=nil;
first^.inf:=random(20)-10;
for i:=1 to n-1 do
begin
new(t);
t^.inf:=random(20)-10;
t^.next:=nil;
t^.next:=first;
first:=t;
end;
end;


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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


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

 



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