Помогите переписать этот исходник с модулы-2 (практически паскаль) на СИ
В паскале я не разбираюсь, поэтому некоторые конструкции отсюда непоняты. Record полагаю структура в си...могу и ошибаться.
ПРограмма строит идеально-сбалансированное дерево и выводит его на экран, инфу берет из файла (в конце я написал)
Код:
MODULE BuildTree
FROM InOut IMPORT OpenInput, CloseInput
ReadInt, WriteInt, WriteString, WriteLn;
FROM Storage IMPORT ALLOCATE;
TYPE Ptr = POINTER TO Node;
Node = RECORD key: INTEGER;
left, right: Ptr
END
VAR n: INTEGER; root: Ptr;
PROCEDURE tree(n: INTEGER): Ptr;
VAR newnode: Ptr;
x, nl, nr: INTEGER;
BEGIN (* построение идеально сбалансированного дерева с n-вершинами *)
IF n = 0 THEN newnode := NIL
ELSE nl := n DIV 2; nr := n-nl-1;
ReadInt(x); ALLOCATE(newnode, SIZE(Node));
WITH newnode^ DO
key := x; left := tree(nl); right := tree(nr);
END
END
RETURN newnode
END tree;
PROCEDURE PrintTree(t: Ptr; h: INTEGER);
VAR i: INTEGER;
BEGIN (* печать дерева t с отступом h *)
IF t # NIL THEN
WITH t^ DO
PrintTree(left, h+1);
FOR i := 1 TO h DO WriteString(" ") END;
WriteInt(key, 6); WriteLn;
PrintTree(right, h+1);
END
END
END PrintTree;
BEGIN (* первое целое - число вершин *)
OpenInput("TEXT"); ReadInt(n);
root := tree(n);
PrintTree(root, 0); CloseInput
END BuildTree.
В паскале я не разбираюсь, поэтому некоторые конструкции отсюда непоняты. Record полагаю структура в си...могу и ошибаться.
ПРограмма строит идеально-сбалансированное дерево и выводит его на экран, инфу берет из файла (в конце я написал)
Код:
MODULE BuildTree
FROM InOut IMPORT OpenInput, CloseInput
ReadInt, WriteInt, WriteString, WriteLn;
FROM Storage IMPORT ALLOCATE;
TYPE Ptr = POINTER TO Node;
Node = RECORD key: INTEGER;
left, right: Ptr
END
VAR n: INTEGER; root: Ptr;
PROCEDURE tree(n: INTEGER): Ptr;
VAR newnode: Ptr;
x, nl, nr: INTEGER;
BEGIN (* построение идеально сбалансированного дерева с n-вершинами *)
IF n = 0 THEN newnode := NIL
ELSE nl := n DIV 2; nr := n-nl-1;
ReadInt(x); ALLOCATE(newnode, SIZE(Node));
WITH newnode^ DO
key := x; left := tree(nl); right := tree(nr);
END
END
RETURN newnode
END tree;
PROCEDURE PrintTree(t: Ptr; h: INTEGER);
VAR i: INTEGER;
BEGIN (* печать дерева t с отступом h *)
IF t # NIL THEN
WITH t^ DO
PrintTree(left, h+1);
FOR i := 1 TO h DO WriteString(" ") END;
WriteInt(key, 6); WriteLn;
PrintTree(right, h+1);
END
END
END PrintTree;
BEGIN (* первое целое - число вершин *)
OpenInput("TEXT"); ReadInt(n);
root := tree(n);
PrintTree(root, 0); CloseInput
END BuildTree.