program joonist2; { Sisestab tabelist graafina antud kahendpuu} { Joonistab selle kahendpuu} uses Crt, Graph, Graphs; const H=25; {horisontaalmastaap} HH=70; {joonise nihe paremale} V=40; {vertikaalmastaap} VV=80; {joonise nihe alla} var XX:integer; {paigutatava tipu X-koordinaat} {------------------------------------------------------------} procedure OMISTADA_TASEMED(puu:viit2; tase:integer); begin if puu<>nil then begin puu^.y := tase; OMISTADA_TASEMED(puu^.vasak, tase+1); OMISTADA_TASEMED(puu^.parem, tase+1); end end; {------------------------------------------------------------} procedure LEIDA_KOORDINAADID(puu:viit2); begin if puu<>nil then begin LEIDA_KOORDINAADID(puu^.vasak); puu^.y := puu^.y*V+VV; puu^.x := XX+HH; XX := XX + H; LEIDA_KOORDINAADID(puu^.parem); end end; {--------------------GRAAFIKA--------------------------------} var vanaexitproc:pointer; seade,laad, veakood:integer; MaxVarv:word; {$F+} procedure erilopp; {Ootamatu katkestuse korral} begin ExitProc := VanaExitProc; { Taastada katkestusprotseduuri aadress } CloseGraph; { Sulgeda graafikarezhiim } end; { erilopp } {$F-} procedure Minna_graafikasse; { Graafikarezhiimi algatamine } begin DirectVideo := False; {Keelata vahetu write/read} VanaExitProc := ExitProc;{ salvestada jooksva katkestusprots. aadress } ExitProc := @erilopp;{ seada oma katkestusprotseduur } Seade := Detect; { automaatne uuring } InitGraph(Seade, Laad, 'd:\tp\bgi'); Veakood := GraphResult; { salvestada vea kood } if Veakood <> grOK then { viga? } begin Writeln('Ei saa graafikasse: ', GraphErrorMsg(Veakood)); Halt(1); end; MaxVarv := GetMaxColor; { valge } { MaxX := GetMaxX; MaxY := GetMaxY;} {ekraani mootmed} end; { Minna_graafikasse } {------------------------------------------------------------} procedure JOONISTADA(puu:viit2); {kaib tipud labi eesjarjestuses ja joonistab nimed ning yhendused} var p:viit2; begin if puu <> nil then begin with puu^ do begin {tipu nimi} OutTextXY(x,y,nimi); readln; {jooned alluvatele puus} p := vasak; if p<>nil then Line(x,y+textheight('H'),(p^.x),(p^.y)); p := parem; if p<>nil then Line(x,y+textheight('H'),(p^.x),(p^.y)); joonistada(vasak); joonistada(parem); end; end; end; {------------------------PO~HIPROGRAMM---------------------------------} var juur:viit2; begin writeln('Naitefail on GR_DEMO0.PAS'); juur:=GR_PUU2(gr_in); {vt. moodul GRAPHS.PAS} XX := 0; clrscr; OMISTADA_TASEMED(juur^.vasak,1); LEIDA_KOORDINAADID(juur^.vasak); minna_graafikasse; SetTextStyle(DefaultFont, HorizDir, 1); SetTextJustify(CenterText, TopText); OuttextXY (GetMaxX div 2, GetMaxY-TextHeight('H')-5, 'Vajuta ENTER'); JOONISTADA(juur^.vasak); readln; closegraph; end.