Помощь - Поиск - Пользователи - Календарь
Полная версия: Установка указателя на I-й элемент списка
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
CKA
Помогите у меня трабла
Надо написать процедуру добавляющую после i-й строки (список состоит из строк) списка l, копию j-й строки

Написал вот что

procedure add(var q:link; i,j:integer);
var
p1,p,t,t1,r:link;
h:integer;
s1:string;
begin
t:=q;
t1:=q;
h:=1;
new(p1);
while t1<>nil do
begin
if h=j then begin s1:=t1^.info; p1^.info:=t1^.info; p1^.next:=nil; end;
t1:=t1^.next;
h:=h+1;
end;
h:=1;
new( r );
r^.info:=s1;
r^.next:=t^.next;
t^.next:=r;
p:=t;
while p<>nil do
begin
writeln(p^.info);
p:=p^.next;
end;
end;


но он добавляет все время копию j-й строки после первого элемента
Хелп, хелп, хелп

Тегами будем пользоваться?
volvo
Цитата(CKA @ 28.04.05 11:38)
Надо написать процедуру добавляющую после i-й строки (список состоит из строк) списка l, копию j-й строки


я бы делал так:

{ указатель на n -ый элемент списка }
function find_n(list: spis; n: integer): link;
begin
while (list <> nil) and (n > 1) do begin
list := list^.next; dec(n);
end;
find_n := list
end;

procedure add(var q: link; i, j: integer);
var
add_after, add_what: link;
T: link;
begin
{ находим адреса i и j элементов списка }
add_after := find_n(q, i);
add_what := find_n(q, j);

if (add_after = nil) of (add_what = nil) then begin
writeln('Один из индексов за пределами списка'); exit
end;

{ генерируем новый элемент }
new(T);
T^.info := add_what^.info;
{ и переустанавливаем связи }
T^.next := add_after^.next;
add_after^.next := T;
end;


Вот и все smile.gif
CKA
все уже сам справился
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.