uses graph; type irany=byte; {elvileg 9-ig, nehany kivetellel - ld. lentebb} type PontTip=record x,y:integer; szin:byte; szomszed:irany; end; var csucsokelfogytak, hiba:boolean; kepernyovege:boolean; p,akt:PontTip; procedure PONT(honnan:PontTip; merre:irany; var uj:PontTip); {honnan, honnan_irany, hova} begin uj.x:=honnan.x; uj.y:=honnan.y; {a kepernyon "beallitjuk a kurzort"} case merre of 1: begin uj.x:=honnan.x-1; uj.y:=honnan.y+1; end; {balra-le} 2: begin uj.y:=honnan.y+1; end; {le} 3: begin uj.x:=honnan.x+1; uj.y:=honnan.y+1; end; {jobbra-le} 6: begin uj.x:=honnan.x+1; end; {jobbra} end; {4,7..9 nyilvan nem lehetnek, mert balfentrol indulunk, es jobbra megyunk} end; procedure kov(pixel:PontTip); {alapbol: kepernyovege:=false;} var x,y:integer; begin x:=pixel.x; y:=pixel.y; {ertekek be} if y<>GetMaxY then if x<>GetMaxX then inc(x) {normal pont} else begin x:=0; inc(y); end {sorvege} else if x<>GetMaxX then inc(x) {oszlopvege} else begin kepernyovege:=true; x:=0; y:=0; end; {kepernyo vege} pixel.x:=x; pixel.y:=y; {ertekek ki} end; procedure kovetkezo(var p:PontTip); begin {vhogy ki kellene venni az alakzat kov. pontjat} if p.x=maxint {barmi, a lenyeg, hogy normal pont ne lehessen} then csucsokelfogytak:=true; end; procedure csucskereses(const p:PontTip; var akt:PontTip {esetleg ki: hol talata meg}); {1. lepes - a balfelso csucs keresese} {p: amelyik pontot keresi, akt: ahol eppen tart} begin repeat kov(akt); {pixelrol pixelre megy} until (akt.szin=p.szin); {megtalalta} end; procedure tobbipontkeres(var akt,p:PontTip); {2. lepes - alakzatkereses} {...az elso megtalalt csucstol folytatja} {alapbol: csucsokelfogytak:=false; hiba:=false;} begin PONT(p,p.szomszed,akt); {a "valosagban" alljunk oda, ahol "aminek" kellene lennie} if (akt.szin=p.szin) {ahol tartunk a keresesben=az eppen keresendo pont} then begin kovetkezo(p); {vegye az alakzat kov. pontjat} if not(csucsokelfogytak) then tobbipontkeres(akt,p); end else hiba:=true; outtext('Volt hiba?'); if hiba then outtext('Igen') else outtext('Nem'); end; begin akt.x:=0; akt.y:=0; {kiolvassuk az elso P-t} csucskereses(p,akt); tobbipontkeres(akt,p); end.