{Zjisti,zda je podmobil s korenem i vyvazeny,
m udava hmotnost podmobilu}
FUNCTION Vyvazeny(VAR mb:Mobil; i:INTEGER;
VAR m:INTEGER):BOOLEAN;
VAR ml,mr: INTEGER;
vv: BOOLEAN;
BEGIN
WITH mb DO
IF xl[i]=0 THEN BEGIN
Vyvazeny:=TRUE;
m:=xr[i]
END
ELSE BEGIN
vv:=Vyvazeny(mb,il[i],ml);
vv:=vv AND Vyvazeny(mb,ir[i],mr);
m:=ml+mr;
vv:=vv AND (ml*xr[i]=mr*xl[i])
END
END;
{Nakresli snuru delky d, zacinajici na x,y}
PROCEDURE Snura(x,y,d: INTEGER);
VAR iy:INTEGER;
BEGIN
GOTOXY(x,y); WRITE('.');
FOR iy:=y+1 TO y+d-1 DO BEGIN
GOTOXY(x,iy);
WRITE('!');
END
END;
{Nakresli pricky}
PROCEDURE Lpricka(x,y,d: INTEGER);
VAR ix:INTEGER;
BEGIN
GOTOXY(x,y); WRITE('.');
FOR ix:=x-1 DOWNTO x-d+1 DO BEGIN
GOTOXY(ix,y);
WRITE('-');
END;
END;
PROCEDURE Rpricka(x,y,d: INTEGER);
VAR ix:INTEGER;
BEGIN
FOR ix:=x+1 TO x+d-1 DO BEGIN
GOTOXY(ix,y);
WRITE('-');
END;
END;
{Nakresli podmobil na pozici x,y}
PROCEDURE PisMobil(VAR mb:Mobil; i,x,y:INTEGER);
BEGIN
WITH mb DO BEGIN
Snura(x,y,s[i]);
IF (xl[i]=0) THEN BEGIN
GOTOXY(x,y+s[i]);
WRITE(xr[i]);
END
ELSE BEGIN
Lpricka(x,y+s[i],xl[i]);
PisMobil(mb,il[i],x-xl[i],y+s[i]);
Rpricka(x,y+s[i],xr[i]);
PisMobil(mb,ir[i],x+xr[i],y+s[i]);
END;
END;
END;
BEGIN
CLRSCR;
ASSIGN(vstup,'mobil1.txt');
RESET(vstup);
CtiMobil(mb1,vstup);
IF Vyvazeny(mb1,1,m1) THEN WRITELN('Mobil
je vyvazeny')
ELSE WRITELN('Mobil neni vyvazeny');
WRITELN('Celkova hmotnost mobilu je ',m1);
READLN;
CLRSCR;
PisMobil(mb1,1,35,2);
READLN;
END.