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

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

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

> Задачи на списки
Nastas'ka
сообщение 20.10.2005 16:48
Сообщение #1


Гость






Уже месяц не могу решить задачу. а сдать надо было давно, может кто-нидь поможет sad.gif
Текст задачи: В списке L заменить первое вхождение списка L1 на список L2. Решить задачу на однонаправленный список, на двунаправленный и кольцевой.Простым методом и рекурсивным. Помогите хотя бы простым методом на однонаправленный список, дальше может сама разберусь ;)
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
klem4
сообщение 20.10.2005 19:56
Сообщение #2


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


Вот решение, но может быть ошибка, так как сам делал задачу на списки первый раз в жизни ;) Так что кто увидит баг, кричите :yes:

Только я обозначения перепутал, в моей программа ищется первое вхождение L2 в L1 и заменяется на L


uses crt;
type
point = ^item;
item = record
number : integer;
next : point;
end;

var
L, L1, L2, temp : point;

procedure InitItem(var P : point);
var
first : point;
n,num : integer;

begin

write('n='); readln(n);

first := nil;

while(n>0) do begin

new(P);

P^.next := first;

write('Item[',n,']=');
readln(num);

P^.number := num;

first := P;

dec(n);

end;

end;

procedure PrintItem(P : point);
begin
while(p<>nil) do begin
writeln(p^.number);
p := p^.next;
end;
end;

function FindFirstP(a, b : point) : point;
var
res, aBack, bBack : point;
begin

res := nil;

aBack := a;
bBack := b;

while (a<>nil) and (b<>nil) and (res=nil) do begin

res := nil;

while (a<>nil) and (a^.number<>b^.number) do
a := a^.next;
aBack := a;

if (a<>nil) then begin

res := a;

while (a<>nil) and (b<>nil) and (a^.number=b^.number) do begin
a := a^.next;
b := b^.next;
end;

if (b<>nil) then begin
res := nil;
b := bBack;
a := aBack;
a := a^.next;
end
end;
end;

FindFirstP := res;

end;

procedure ReformItem(a, b, p : point);
begin
a := p;
while (a<>nil) and (b<> nil) do begin
a^.number := b^.number;
a := a^.next;
b := b^.next;
end;
end;

Begin

clrscr;

writeln('L1 : ');
InitItem(L1);
writeln;
writeln('L2 : ');
InitItem(L2);
writeln('L3 : ');
InitItem(L);
writeln;

temp := FindFirstP(L1, L2);
if temp = nil then
writeln('No')
else begin
writeln;
ReformItem(L1, L, temp);
PrintItem(L1);
end;

readln;
End.



Сообщение отредактировано: klem4 - 20.10.2005 20:07


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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


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

 



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