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

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

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

> Сложение элементов 2 списков
Tribunal
сообщение 9.05.2006 11:47
Сообщение #1


Бывалый
***

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

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


мне нужно произвести сложение
2 списков поэлементно...

вот то,что я делаю,но при выполнении собственно сложения выдается ошибка

read(n);
randomize;

new(first);{создание первого списка}
first^.next:=nil;
first^.inf:=random(10)-1;
for i:=1 to n-1 do
begin
new(p1);
p1^.inf:=random(10)-1;
p1^.next:=nil;
p1^.next:=first;
first:=p1;
end;
t:=p1;
while t<>nil do
begin
writeln(t^.inf);
t:=t^.next;
end;

new(first);{создание второго списка}
first^.next:=nil;
first^.inf:=random(10)-1;
for i:=1 to n-1 do
begin
new(p2);
p2^.inf:=random(10)-1;
p2^.next:=nil;
p2^.next:=first;
first:=p2;
end;
t:=p2;
while t<>nil do
begin
writeln(t^.inf);
t:=t^.next;
end;

new(first);{выполнение сложения}
first^.next:=nil;
first^.inf:=p1^.inf+p2^.inf;
p1:=p1^.next;
p2:=p2^.next;
while p1<>nil do
while p2<>nil do
begin
new(p3);
p3^.inf:=p1^.inf+p2^.inf;
p3^.next:=nil;
p3^.next:=first;
first:=p3;
p1:=p1^.next;
p2:=p2^.next;
end;

t:=p3;
while t<>nil do
begin
writeln(t^.inf);
t:=t^.next;
end;


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

Сообщение отредактировано: volvo - 2.11.2006 19:05


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


Гость






Ну, поскольку у тебя списки P1 и P2 одинаковой длины, то достаточно будет сделать так:

if (p1<>nil) and (p2<>nil) then begin

new(first); { выполнение сложения }
first^.next:=nil;
first^.inf := p1^.inf + p2^.inf; { Ошибка была тут: P3 еще не инициализирован... }
p1:=p1^.next; p2:=p2^.next;
while p1<>nil do begin { второе условие проверять необязательно }
new(p3);
p3^.inf:=p1^.inf+p2^.inf;
p3^.next:=nil;
p3^.next:=first;
first:=p3;
p1:=p1^.next; p2:=p2^.next;
end;

end;
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Tribunal   Сложение элементов 2 списков   9.05.2006 11:47
Tribunal   всё)эту глупую ошибку нашла... а почему получается...   9.05.2006 11:59
volvo   Ну, поскольку у тебя списки P1 и P2 одинаковой дли...   9.05.2006 12:02
Tribunal   а результирующий список выводится в обратном поряд...   9.05.2006 12:07
volvo   а результирующий список выводится в обратном поряд...   9.05.2006 12:10
Tribunal   но факт в том,что они создаются в разных порядках....   9.05.2006 12:22
volvo   а в прямом порядке это как? Вот так: type plist ...   9.05.2006 12:41
Tribunal   так получается,что в тот момент,когда мы обращаемс...   9.05.2006 12:35
Tribunal   и всё же мне непонятно,почему последний список пол...   9.05.2006 13:27
volvo   Нет... Ты не должна ЭТО делать ТОЛЬКО в последнем ...   9.05.2006 13:59
Tribunal   у меня вот есть такая процедура создания списка с ...   9.05.2006 14:00
Tribunal   кстати... а покажите,пожалуйста,как инверитировать...   9.05.2006 14:39
volvo   var p, p1: plist; pt, prv, first, last: plist;...   9.05.2006 14:58
Tribunal   не могу понять многие моменты в инвертировании спи...   10.05.2006 12:14


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

 



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