Скачиваний:
154
Добавлен:
22.06.2014
Размер:
6.76 Кб
Скачать
Program Lab1;

uses crt;

{вЁЇ ®ЇЁблў ойЁ© ®б­®ў­лҐ Ї а ¬Ґвал ўҐаиЁ­л}
type RefPeak = ^TPeak;
TPeak = record
num: integer; {Ї®ап¤Є®ўл© ­®¬Ґа}
wgn_num: integer; {Ї®ап¤Є®ўл© ­®¬Ґа ЇаЁ ­ е®¦¤Ґ­ЁЁ ¬­®¦Ґбвў  дг­¤ ¬Ґ­в «м­ле жЁЄ«®ў Ја д }
new:boolean;
end;

{вЁЇ ®ЇЁблў ойЁ© бЇЁб®Є ўҐаиЁ­}
type RefNode = ^TNode;
TNode = record
peak: RefPeak; {ўҐаиЁ­ }
child: RefNode; {¤®зҐа­пп ўҐаиЁ­  (ў бЇЁбЄҐ Ї®в®¬Є®ў ЁбЇ®«м§гҐвбп Є Є ббл«Є  ­  б«Ґ¤го饣® Ї®в®¬Є )}
sibling: RefNode; {б«Ґ¤гой п ўҐаиЁ­  (ў бЇЁбЄҐ Ї®в®¬Є®ў ЁбЇ®«м§гҐвбп Є Є ббл«Є  ­  ўҐаиЁ­г)}
end;

{вЁЇ ®ЇЁблў ойЁ© бвнЄ ўҐаиЁ­}
type RefStack = ^TStack;
TStack = record
Node: RefNode;
Next: RefStack;
end;

var
FirstNode, CursorNode: RefNode;{б«г¦ҐЎ­л© ЇҐаҐ¬Ґ­­лҐ}
StNode: RefStack;{бвнЄ}
iter: integer; {­®¬Ґа ЁвҐа жЁЁ ЇаЁ Ї®бв஥­ЁЁ ¬­®¦Ґбвў  дг­¤ ¬Ґ­в «м­ле жЁЄ«®ў}
cycle: integer; {Џ®ап¤Є®ўл© ­®¬Ґа дг­¤ ¬Ґ­в «м­®Ј® жЁЄ« }
i: integer;{б«г¦ҐЎ­л© ЇҐаҐ¬Ґ­­лҐ}
memBorrow: longint;{б«г¦ҐЎ­л© ЇҐаҐ¬Ґ­­лҐ}
fin: text; {// ўе®¤­®© д ©«}
fout: text; {// ўл室­®© д ©«}

{ђ Ў®в  б® бвнЄ®¬ ўҐаиЁ­}
{¤®Ў ў«Ґ­ЁҐ ў бвнЄ ­®ў®Ј® н«Ґ¬Ґ­в }
procedure addStack(var Stack: RefStack; Node: RefNode);
var
tmpStack: RefStack;
begin
new(tmpStack);
tmpStack^.Node := Node;
tmpStack^.Next := Stack;
Stack := tmpStack;
end;

{Ё§ў«ҐзҐ­ЁҐ Ё§ бвнЄ  ўҐае­ҐЈ® н«Ґ¬Ґ­в }
procedure decStack(var Stack: RefStack);
var
tmpStack: RefStack;
begin
if Stack^.Next <> nil then begin
tmpStack := Stack;
Stack := Stack^.Next;
dispose(tmpStack)
end else Stack^.Node := nil;
end;

{Їа®жҐ¤гал ¤«п а Ў®вл б® бЇЁбЄ®¬ Ё­жЁ¤Ґ­в­®бвЁ}

{дг­ЄжЁп б®§¤ ­Ёп ­®ў®© ўҐаиЁ­л}
function createNode(Num: integer): RefNode;
var
tmpNode: RefNode;
begin
new(tmpNode);
new(tmpNode^.peak);
tmpNode^.peak^.num := Num;
tmpNode^.peak^.wgn_num := 0;
tmpNode^.peak^.new := false;
new(tmpNode^.child);
tmpNode^.child^.Peak := nil;
tmpNode^.child^.sibling := nil;
tmpNode^.sibling := nil;
createNode := tmpNode;
end;

{Їа®жҐ¤га  ®бў®Ў®¦¤Ґ­Ёп Ї ¬пвЁ § ­пв®© ўҐаиЁ­®©}
procedure disposeNode(var Node: RefNode);
var
tmpPeak: RefPeak;
tmpNode: RefNode;

{Їа®жҐ¤га  ®бў®Ў®¦¤Ґ­Ёп Ї ¬пвЁ § ­пв®© Ї®в®¬Є ¬Ё}
procedure disposeChild(var Node: RefNode);
var
tmpPeak: RefPeak;
tmpNode: RefNode;
begin
if Node^.Peak <> nil then
disposeChild(Node^.child);
tmpPeak := Node^.Peak;
tmpNode := Node^.sibling;
dispose(Node);
end;

begin
if Node^.sibling <> nil then
disposeNode(Node^.sibling);
tmpPeak := Node^.peak;
tmpNode := Node^.child;
dispose(Node);
dispose(tmpPeak);
disposeChild(tmpNode);
end;

{дг­ЄжЁп Ї®ЁбЄ  ўҐаиЁ­л Ї® ­®¬Ґаг}
function getNode(FirstNode: RefNode; Num: integer): RefNode;
var
CursorNode: RefNode;
begin
CursorNode := FirstNode;
while CursorNode <> nil do begin
if CursorNode^.peak^.num = Num then begin
getNode := CursorNode;
exit;
end;
CursorNode := CursorNode^.sibling
end;
end;

{Їа®жҐ¤га  бўп§лў ­Ёп ўҐаиЁ­}
procedure unitedNode(var FirstNode: RefNode; Num1,Num2: integer; ret: boolean);
var
tmpNode1, tmpNode2: RefNode;

{Їа®жҐ¤га  бўп§лў ­Ёп ўҐаиЁ­}
procedure united(Node1, Node2: RefNode);
var
tmpNode, tmpSort, tmpSort1, tmpChild: RefNode;
tmpPeak: RefPeak;
begin
{б®§¤ ­ЁҐ ¤®зҐа­ҐЈ® г§«  Ё бўп§лў ­ЁҐ c ҐЈ® Ї®¬®ймо ¤ўге ўҐаиЁ­}
tmpNode := createNode(0);
tmpPeak := tmpNode^.Peak;
tmpNode^.Peak := Node2^.peak;
tmpNode^.sibling := Node2;
tmpChild := tmpNode^.child;
tmpNode^.child := Node1^.child;
Node1^.child := tmpNode;
{®бў®Ў®¦¤Ґ­ЁҐ Ї ¬пвЁ}
dispose(tmpChild);
dispose(tmpPeak);
end;

begin
{Ї®ЁбЄ г§«®ў}
tmpNode1 := getNode(FirstNode, Num1);
tmpNode2 := getNode(FirstNode, Num2);
{б®§¤ ­ЁҐ ॡа }
united(tmpNode1, tmpNode2);
if ret then united(tmpNode2, tmpNode1);
end;

procedure readFile;
var str,temp:string;
i,si,pos:integer;
fin:text;

function strToInt(_str:string):integer;
var i,code:integer;
begin
Val(_str, i, code);
if code <> 0 then begin
Writeln('Error reading file.');
readln;
end;
strToInt := i;
end;

begin
Assign(fin, 'lb.in');
Reset(fin);
readln(fin,str);

i := strToInt(str);

if i > 101 then begin
writeln('Chitai zadanie');
readln;
exit;
end;
cursorNode := createNode(0);
firstNode := CursorNode;

for pos := 1 to i-1 do begin
CursorNode^.sibling := createNode(pos);
writeln(CursorNode^.peak^.Num);
CursorNode := CursorNode^.sibling;
end;

pos := 0;

{ while (not EOF(fin))and(pos<i-1) do begin}
unitedNode(firstNode,0,3,false);
unitedNode(firstNode,0,4,false);
unitedNode(firstNode,1,2,false);
unitedNode(firstNode,1,4,false);
unitedNode(firstNode,2,1,false);
unitedNode(firstNode,2,5,false);
unitedNode(firstNode,3,0,false);
unitedNode(firstNode,3,4,false);
unitedNode(firstNode,3,6,false);
unitedNode(firstNode,4,0,false);
unitedNode(firstNode,4,1,false);
unitedNode(firstNode,4,5,false);
unitedNode(firstNode,4,7,false);
unitedNode(firstNode,4,3,false);
unitedNode(firstNode,5,2,false);
unitedNode(firstNode,5,4,false);
unitedNode(firstNode,5,8,false);
unitedNode(firstNode,6,3,false);
unitedNode(firstNode,6,7,false);
unitedNode(firstNode,7,4,false);
unitedNode(firstNode,7,8,false);
unitedNode(firstNode,7,9,false);
unitedNode(firstNode,7,6,false);
unitedNode(firstNode,8,5,false);
unitedNode(firstNode,8,7,false);
unitedNode(firstNode,8,9,false);
unitedNode(firstNode,9,7,false);
unitedNode(firstNode,9,8,false);
{ inc(pos);
end;}
readln;

close(fin);

end;

{Їа®жҐ¤га  ЇҐз вЁ бЇЁбЄ  Ё­жЁ¤Ґ­в­ле ўҐаиЁ­}
procedure printIncedent(FirstNode: RefNode);
var
CursorNode, CursorChild: RefNode;
begin
CursorNode := FirstNode;
while CursorNode <> nil do begin
write(CursorNode^.peak^.num);
CursorChild := CursorNode^.child;
while CursorChild^.Peak <> nil do begin
write('->',CursorChild^.peak^.num);
CursorChild := CursorChild^.child;
end;
CursorNode := CursorNode^.sibling;
writeln;
end;
end;


procedure wayFind(_Node: refNode);
var stack: refStack;
begin
_node^.peak^.new := true;
addStack(_node)

End;

begin
clrscr;
readfile;
printIncedent(firstNode);
disposeNode(firstNode);
writeln('ready');
readln;

{ §¤Ґбм: з⥭ЁҐ ¤ ­­ле Ё§ д ©«  fin}


{ §¤Ґбм: аҐиҐ­ЁҐ Ї®бв ў«Ґ­­®© § ¤ зЁ}

{ Assign(fout, 'test.out');
ReWrite(fin); }

{ §¤Ґбм: § ЇЁбм १г«мв в®ў аҐиҐ­Ёп ў д ©« fout}

{ Close(fout);}
end.
Соседние файлы в папке КЛП 2012 февраль. Основы алгоритмизации и языки программирования. Сафьянова