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

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

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

> ОДнонаправленные линейные списки, удалить из файла 1 слова, встречающиеся в файле 2
Тёмный Эльф
сообщение 22.12.2006 0:33
Сообщение #1


Влюблённый псих
***

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

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


Текст программы приведен ниже. Не могу понять, в чем моя ошибка. Вроде бы первая процедура составляет список1 из первого файла, вторая процедура составляет список2 из второго файла, третья процедура собственно проверяет есть ли в списке 1 слова из списка 2 и если есть, удаляет их. А четвёртая процедура выводит изменённый список 1 в выходной файл.
Если кто заметил ошибку, подскажите пожалуйста где она, может я не правильно передаю параметры при заходе в третью процедуру?


Type
next=^elem;
Elem=RECORD
EL:string;
Sled:next;
END;
VAR
head,head2:next;

Procedure p1(var p:next);
var
m:next;
F1:text;
BEGIN
Assign(f1,'dan.inp');
Reset(f1);
Assign(output,'res.out');
Rewrite(output);
New(m);
New(m^.sled);
p:=m;
Readln(f1, m^.el);
m^.sled:=nil;
while not EOF(f1) do
begin
New(m^.sled);
m:=m^.sled;
Readln(f1, m^.el);
m^.sled:=nil;
End;
Close(f1);
end;

Procedure p2(var p:next);
var
m:next;
F1:text;
BEGIN
Assign(f1,'dan1.inp');
Reset(f1);
New(m);
New(m^.sled);
p:=m;
Readln(f1, m^.el);
m^.sled:=nil;
while not EOF(f1) do
begin
New(m^.sled);
m:=m^.sled;
Readln(f1, m^.el);
m^.sled:=nil;
End;
Close(f1);
end;

procedure p3(var uk,d2:next);
var pp,df,q:next;
Begin
pp:=uk;
While pp^.sled<>NIL do
BEGIN
df:=d2;
While df^.sled<>NIL do
Begin
If pp=df then
Begin
q:=pp^.sled^.sled;
Dispose(pp^.sled);
pp^.sled:=q;
end;
df:=df^.sled;
end;
pp:=pp^.sled;
end;
END;

procedure p4(var dr:next);
var dt:next;
Begin
writeln('=======REZULTAT=======');
dt:=dr;
While dt<>NIL do
Begin
Writeln(dt^.el);
dt:=dt^.sled;
End;
close(output);
end;

BEGIN
p1(head);
p2(head2);
p3(head,head2);
p4(head);
END.

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


Гость






"Последний элемент" - это тот, PP, для которого PP^.sled = nil? Так правильно, что ошибка:

        q:=pp^.sled; { q = nil }
pp^.el := q^.el; { Здесь вообще что-то невообразимое - pp^.el := nil^.el ??? }
pp^.sled := q^.sled; { переход по нулевому указателю ... }
Dispose(q); { Вызов Dispose(nil) ... }

Любой из этих операторов по отдельности завершит программу аварийно, а уж все вместе... wacko.gif

Добавляй условие - все это надо делать ТОЛЬКО если q <> nil ... Вот уже четвертая ошибка smile.gif
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Тёмный Эльф   ОДнонаправленные линейные списки   22.12.2006 0:33
volvo   Сразу вопрос на засыпку: в чем, собственно, разниц...   22.12.2006 0:41
Тёмный Эльф   Да, я так для начала и сделал. Но если честно моро...   22.12.2006 1:05
volvo   If pp=df then... Вот кстати об этом условии я и хо...   22.12.2006 1:09
Тёмный Эльф   А ведь и правда! Здесь я сглупил! Теперь ...   22.12.2006 1:14
volvo   :yes2: Во-первых, ты не идешь до конца списка, а ...   22.12.2006 1:33
Тёмный Эльф   Точняк! Впредь буду более внимателен. Спасиб...   22.12.2006 1:43
Тёмный Эльф   А кстати, программа почему-то не хочет удалять пос...   22.12.2006 2:03
volvo   "Последний элемент" - это тот, PP, для к...   22.12.2006 2:15
Тёмный Эльф   Не знаю..не идет.. Может пустить счетчик? И пото...   22.12.2006 3:17
volvo   Так тоже не идет? procedure p3(var uk,d2:next); va...   22.12.2006 3:46
Тёмный Эльф   :nea: Ну да. Он все-равно в этом мест...   22.12.2006 4:01
volvo   "Не верю !!!" (С) ... Толь...   22.12.2006 4:20
Тёмный Эльф   Ну я бы не стал врать! На самом деле не шло...   22.12.2006 4:32


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

 



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