{$F+} var oldExitProc: pointer; procedure MojeCHYBA; begin ErrorAddr := NIL; ExitCode := 210; ExitProc := oldExitProc; writeln( '...(nic se nestalo)...' ) end; var i: integer; begin oldExitProc := ExitProc; ExitProc := @MojeCHYBA; writeln( 'Pozor, ted vydelim NULOU! :' ); readln; i := 0; i := 1 div i end. const N = 8; PRAZDNE = -1; var S: array[0..N+1,0..N+1] of integer; sx, sy, cx, cy: integer; procedure Vytiskni; var x,y: integer; begin for y:=1 to N do begin for x := 1 to N do if S[x,y]=-1 then write( ' .' ) else write( S[x,y]: 3 ); writeln end; readln end; procedure Nacti; var x,y: integer; begin sx := 8; sy := 5; cx := 8; cy := 1; for y:=1 to N do for x:=1 to N do S[x,y] := PRAZDNE end; type TPRIDEJ = procedure(x,y: integer); TVYBER = procedure( var x,y: integer ); TJePRAZDNY = function: boolean; const MAX = 100; var P: array[1..MAX] of record x,y: integer end; zac, kon, pocet: integer; {$F+} procedure PridejDoFronty( x,y: integer ); begin { ToDo: kontrooa preteceni pole! } kon := 1 + kon mod MAX; P[ kon ].x := x; P[ kon ].y := y; Inc( pocet ) end; procedure VyberZFronty( var x,y: integer ); begin x := P[ zac ].x; y := P[ zac ].y; zac := 1 + zac mod MAX; Dec( pocet ) end; function JePrazdnaFronta: boolean; begin JePrazdnaFronta := pocet=0 end; procedure PridejDoZasobniku( x,y: integer ); begin PridejDoFronty( x,y ) end; procedure VyberZeZasobniku( var x,y: integer ); begin x := P[ kon ].x; y := P[ kon ].y; Dec( kon ); Dec( pocet ) end; function JePrazdnyZasobnik: boolean; begin JePrazdnyZasobnik := pocet=0 end; procedure Hledej( Pridej: TPRIDEJ; Vyber: TVYBER; JePrazdny: TJePRAZDNY ); var x,y, xx,yy: integer; begin Pridej( sx,sy ); S[sx,sy] := 0; if (sx=cx) and (sy=cy) then begin writeln( 'KONEC: ', 0 ); readln; halt(0) end; while not JePrazdny do begin Vytiskni; Vyber( x,y ); for xx:=x-1 to x+1 do for yy:=y-1 to y+1 do if S[xx,yy] = PRAZDNE then begin S[xx,yy] := S[x,y] + 1; Pridej( xx,yy ); if (xx=cx) and (yy=cy) then begin writeln( 'KONEC: ', S[xx,yy] ); readln; halt(0) end; end end; writeln( 'cesta neexistuje' ); readln end; begin kon := 0; zac := 1; pocet := 0; Nacti; { Hledej( PridejDoFronty, VyberZFronty, JePrazdnaFronta ) {} Hledej( PridejDoZasobniku, VyberZeZasobniku, JePrazdnyZasobnik ) {} end. program p190107; type Funkce = function(x: real): real; procedure VytiskniTabulku( f: Funkce ); var i: integer; begin for i:=0 to 10 do writeln( i:5,': ', F(i) ) end; {$F+} function Sinus( x: real ): real; begin Sinus := sin(x) end; {$F-} begin VytiskniTabulku( Sinus ) end.