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

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

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

> однонаправленный линейный список, удалить из списка строки с n-ой по k-ую.
сообщение
Сообщение #1


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

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

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



uses crt;
Type
next=^elem;
Elem=RECORD
EL:string;
Sled:next;
END;
VAR
Uk1:next;
Qp,N,K,Int:Integer;

Procedure VVOD(var p:next); {формирование однонаправленного линейного списка, подсчет количества строк в исходном файле, чтение списка в файл RES.OUT}
var
m:next;
F1:text;
BEGIN
Assign(F1,'DAN.inp');
Reset(f1);
Assign(output,'res.out');
rewrite(output);
Writeln('Дано: ');
New(m);
New(m^.sled);
p:=m;
Readln(f1, m^.el);
m^.sled:=nil;
Int:=1;
while not EOF(f1) do
begin
New(m^.sled);
m:=m^.sled;
Int:=Int+1;
Readln(f1, m^.el);
m^.sled:=nil;
End;
Close(f1);
m:=p;
While m<>NIL do
Begin
Writeln(m^.el);
m:=m^.sled;
End;
end;

procedure Cleaning(var uk:next); {процедура удаления из списка с N-ой по K-ую строки}
var pp,q,r:next;
D:integer;
Begin
writeln('ВСЕГО СТРОК в исходном файле: ',Int);
If (N>Int) or (K>Int) then
Begin
Writeln ('Запрашиваемых Вами строк нет, исходные данные не изменились');
exit; {выход из процедуры в случае ошибки пользователя}
end;
D:=1;
While (D>=N) and (D<=K) do BEGIN
If D=K then Begin {удаляем конечную строку}
pp:=uk;
q:=uk;
while pp^.sled<>NIL do
Begin
q:=pp;
pp:=pp^.sled;
End;
q^.Sled:=NiL;
Dispose(pp);
end;

If D=N then Begin {удаляем начальную строку}

pp:=uk;
uk:=uk^.sled;
Dispose(pp);
end;
D:=D+1;
pp:=pp^.sled; {указатель смещается на одну позицию, счетчик увеличивается}

While (D>=N) and (D<=K) do
Begin
q:=pp;
pp:=q^.sled;
dispose(q); {компилятор выдаёт ERROR 204}
pp:=pp^.sled;
D:=D+1;
end;

end;
END;

procedure vivod(var dr:next); {вывод отредактированного списка в файл RES.OUT}
var dt:next;
Begin
writeln('=======REZULTAT=======');
dt:=dr;
While dt<>NIL do
Begin
Writeln(dt^.el);
dt:=dt^.sled;
End;
close(output);
end;

BEGIN
clrscr;
Writeln('Введите номер начальной и конечной строки');
readln(N,K);
VVOD(Uk1);
Cleaning(Uk1);
vivod(Uk1);
END.



Сообщение отредактировано: Тёмный Эльф -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

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


Заключи код в теги, тогда посмотрим...


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


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

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

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


Цитата(Bokul @ 17.12.2006 2:43) *

Заключи код в теги, тогда посмотрим...

smile.gif ща исправим!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Michael_Rybak
*****

Группа: Пользователи
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

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


Цитата(Тёмный Эльф @ 17.12.2006 1:56) *

smile.gif ща исправим!


Честное слово, читать нереально с такой табуляцией smile.gif

Цитата
Если хочешь помощью, то уважай людей, от которых ты хочешь ее получить.

yes2.gif


2 Тёмный Эльф

Если надо удалить с N по K, то просто идем до N-1-го, и потом удаляем K-N+1 штук. Для удобства (чтобы не учитывать отдельно случай N=1) вставляем в начало списка дополнительный элемент. Типа такого:


...
var add, cur, t: next;
begin
New(add);
add^.sled := uk;
cur := add;
for i := 1 to n - 1 do
cur := cur^.sled;
for i := 1 to k - n + 1 do begin
t := cur^.sled^.sled;
Dispose(cur^.sled);
cur^.sled := t;
end;
uk := add^.sled;
Dispose(add);
end;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


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

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

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


Если надо удалить с N по K, то просто идем до N-1-го, и потом удаляем K-N+1 штук. 


Michael_Rybak !Спасибо! Так на самом деле удобнее. А я то мучался..

Сообщение отредактировано: Тёмный Эльф -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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


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

 





- Текстовая версия 28.03.2024 21:40
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name