Skip to content

Instantly share code, notes, and snippets.

@4lex1v
Created October 5, 2012 22:00
Show Gist options
  • Save 4lex1v/3842680 to your computer and use it in GitHub Desktop.
Save 4lex1v/3842680 to your computer and use it in GitHub Desktop.
2 задача 5 вариант
{модуль}
unit LinkedList;
interface
type
pt =^ elem;
elem = record
line: string;
index: integer;
prev: pt;
next: pt;
end;
procedure put(var ll: pt; entry: string);
function get(ll: pt; index: integer): pt;
procedure printForward(var ll: pt);
procedure printBack(var ll: pt);
procedure move(var ll: pt; from: integer; upto: integer; after: integer);
implementation
procedure put(var ll: pt; entry: string);
var
p, q: pt;
counter: integer;
begin
new(q);
q^.line := entry;
q^.index := 1;
q^.prev := nil;
q^.next := nil;
if ll = nil then
ll := q
else
begin
p := ll;
counter := 1;
while p^.next <> nil do begin
counter := counter + 1;
p^.next^.prev := p;
p := p^.next;
p^.index := counter;
end;
q^.prev := p;
p^.next := q;
q^.index := counter + 1;
end;
end;
function get(ll: pt; index: integer): pt;
begin
while ll <> nil do begin
if ll^.index = index then begin
get := ll;
break;
end;
if ll^.next = nil then
get := ll;
ll := ll^.next;
end;
end;
procedure printForward(var ll: pt);
begin
if ll <> nil then
begin
writeln(ll^.index, ' ', ll^.line);
printForward(ll^.next);
end;
end;
procedure printBack(var ll: pt);
begin
if ll <> nil then begin
printBack(ll^.next);
writeln(ll^.line);
end;
end;
procedure move(var ll: pt; from: integer; upto: integer; after: integer);
var
nb, kb, k: pt;
begin
nb := get(ll, from);
kb := get(ll, upto);
k := get(ll, after);
nb^.prev^.next := kb^.next;
kb^.next := k^.next;
k^.next := nb;
end;
end.
{программа}
program zadan_2;
uses LinkedList;
var
file1: textfile;
llist: pt;
str: string;
nb, kb, k: integer;
begin
assign(file1, 'inp.txt');
reset(file1);
repeat
readln(file1, str);
put(llist, str);
until(EOF(file1));
write('From line(_ > 1): '); read(nb);
kb := nb-1;
while kb < nb do begin
write('To line(_ > ', nb, '): ');
read(kb);
end;
k := nb;
while (k >= nb) and (k <= kb) do begin
write('After line(_ < ', nb, ' and _ > ', kb, '): ');
read(k);
end;
move(llist, nb, kb, k);
printForward(llist);
end.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment