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

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

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

> Установка указателя на I-й элемент списка
CKA
сообщение 28.04.2005 11:38
Сообщение #1


Гость






Помогите у меня трабла
Надо написать процедуру добавляющую после 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 - 28.04.2005 11:47
 К началу страницы 
+ Ответить 
 
Closed Topic Открыть новую тему 
Ответов
volvo
сообщение 28.04.2005 12:00
Сообщение #2


Гость






Цитата(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
 К началу страницы 
+ Ответить 

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


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

 



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