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

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

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

> однонаправленный линейный список, удалить из списка строки с n-ой по k-ую.
Тёмный Эльф
сообщение 17.12.2006 2:33
Сообщение #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.



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


Гуру
*****

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

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


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


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


Гуру
*****

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

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


И что ты считаешь, что при появлении горизонтальной прокрутки читабельность кода увеличивается? blink.gif


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


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

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

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


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

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

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


Гуру
*****

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

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


Во-первых следующий раз не отформатированный код я читать не буду. Если хочешь помощью, то уважай людей, от которых ты хочешь ее получить.

Во-вторых приведи полный исходник.

Вот, что я имею ввиду под словом "форматирования":

uses crt;
Type
next=^elem;
Elem=RECORD
EL:string;
Sled:next;
END;

VAR Uk1:next;
procedure Cleaning(var uk:next);
var pp,q:next;
D:integer;
Begin
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);
pp:=pp^.sled;
D:=D+1;
end;
end;
END




Сообщение отредактировано: Bokul - 17.12.2006 3:58


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


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 
 К началу страницы 
+ Ответить 
Тёмный Эльф
сообщение 17.12.2006 12:01
Сообщение #7


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

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

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


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


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

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

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

 



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