program szovegminta; {$F+} uses crt; Const hatterszin:byte=blue; betuszin:byte=white; mintaszin:byte=cyan; uressor=' '; sorhossz:byte=80; szovegelsosor=8; szovegutolsosor=14; Const szoveg1:string='Ez a program kl”nb”z‹ m˘dszerekkel keresi meg, '; szoveg2:string='hogy egy adott sz”vegminta megtal lhat˘-e a sz”vegben.'; szoveg3:string='A m˘dszerek az egyszerű ”sszehasonlĄt s, az eltol si '; szoveg4:string='vektor ‚s a Bayer-Moore m˘dszer. A sz”veg egy string'; szoveg5:string='ben van, az egyszerűbb kezelhet‹s‚g miatt.'; {a sz”veg megad sa k‚perny‹soronk‚nt, jobb olvashat˘s g miatt} maxminta=10; {minta max. hossza} TYpe TeltolasVektor=array[1..maxminta] of byte; Funk=function(szoveg,minta:string;var pozicio:integer;var eltolas:TeltolasVektor):boolean; Var szoveg,minta:string; c:char; eltolas:TeltolasVektor; procedure inverz; {inverz szint be llĄtja} begin TextColor(hatterszin); TextBackGround(betuszin); end; procedure normal; {norm l szĄnt be llĄt} begin TextColor(betuszin); TextBackGround(hatterszin); end; procedure mintaki(minta:string;i:integer;var c:char); var kepsor,szovsor,szovoszlop:integer; mintah,kifer,maradek:byte; begin kepsor:=9; {a k‚perny‹ sora} while kepsor<= 18 do {sorok k”z”tt t”r”l} begin gotoxy(1,kepsor); write(' ':sorhossz); kepsor:=kepsor+3; end; szovsor:=((i-1) div sorhossz); {h nyadik sorban van} szovoszlop:=i-szovsor*sorhossz; {soron bell hol} if (szovoszlop+length(minta)-1)>sorhossz {t”rdelni kellene a mint t} then begin kifer:=sorhossz-szovoszlop+1; gotoxy(szovoszlop,szovsor*3+9); {a sorok k”z‚ Ąrja a mint t} write(copy(minta,1,kifer)); maradek:=length(minta)-kifer; gotoxy(1,(szovsor+1)*3+9); write(copy(minta,kifer+1,maradek)); end else begin gotoxy(szovoszlop,szovsor*3+9); {a sorok k”z‚ Ąrja a mint t} write(minta); end; TextColor(betuszin); c:=readkey; end; function egyszeruenegyezik_e(szoveg,minta:string;var pozicio:integer;var eltolas:TEltolasVektor):boolean; var j:integer; begin j:=1; while (j<=length(minta)) and (minta[j]=szoveg[pozicio+j-1]) do inc(j); egyszeruenegyezik_e:=(j>length(minta)); pozicio:=pozicio+1; end; function elorolegyezik_e(szoveg,minta:string;var pozicio:integer;var eltolas:TEltolasVektor):boolean; var j:integer; begin end; procedure osszehasonlitas(szoveg,minta:string;egyezik_e:funk;var c:char;var eltolas:TEltolasVektor); Var pozicio,szoveghossz:integer; {soron belli hely, ahova illesztjk a minta elej‚t} begin pozicio:=1; szoveghossz:=length(szoveg); TextColor(mintaszin); mintaki(minta,pozicio,c); while (pozicio+length(minta)<=szoveghossz) and not egyezik_e(szoveg,minta,pozicio,eltolas) and (c<>#27) do begin TextColor(mintaszin); mintaki(minta,pozicio,c); end; if egyezik_e(szoveg,minta,pozicio,eltolas) then begin textcolor(red); mintaki(minta,pozicio,c); readln; TextColor(mintaszin); end; end; procedure kepaljatorles; var i:integer; begin for i:=21 to 23 do begin gotoxy(1,i); write(' ':79); end; end; procedure mintabe(var minta:string); begin repeat gotoxy(1,22); write(uressor:30); {sort”rl‚s} gotoxy(1,22); write('K‚rem a keresett mint t: '); readln(minta); gotoxy(1,24); {cursor az als˘ sorban} until (length(minta)<=maxminta) and (minta<>''); end; procedure eltolasivektorbe(minta:string;var eltolas:TeltolasVektor); var i:integer; begin gotoxy(1,23); write('K‚rem az eltol si vektort, elemenk‚nt megadva!'); for i:=1 to length(minta) do begin gotoxy(46,23); write(' '); gotoxy(46,23); write(i:3,'. elem:');readln(eltolas[i]); {NINCS ellen‹rizve!!} end; end; begin szoveg:=szoveg1+szoveg2+szoveg3+szoveg4+szoveg5; {a max 255 hosszŁ sz”veg, sorhossz csak 128!} normal; ClrScr; inverz; writeln(uressor:sorhossz); writeln(uressor:sorhossz); writeln(uressor:sorhossz); gotoxy(1,2); writeln(' A program mint t keres az al bbi sz”vegben: ' ); normal; gotoxy(1,5);writeln('A szoveg:'+uressor:sorhossz) ; gotoxy(1,8);writeln(copy(szoveg,1,sorhossz )); gotoxy(1,11);writeln(copy(szoveg,81,sorhossz )); gotoxy(1,14);writeln(copy(szoveg,161,sorhossz )); gotoxy(1,17);writeln(copy(szoveg,241,sorhossz )); gotoxy(1,20);writeln('*************************************************':65); inverz; gotoxy(1,24);write(' ESC - kil‚p‚s, F2 - egyszerű, F3 - el‹lr‹l, F4 - h tulr˘l, F5 - Bayer-Moore '); normal; repeat c:=readkey; case c of #60 : begin {F2 - egyszerű illeszt‚s} kepaljatorles; mintabe(minta); osszehasonlitas(szoveg,minta,egyszeruenegyezik_e,c,eltolas); {a mint t kiĄrja a sz”veg al } end; #61 : begin {F3 - minta illeszt‚s el‹lr‹l} kepaljatorles; mintabe(minta); eltolasivektorbe(minta,eltolas); osszehasonlitas(szoveg,minta,elorolegyezik_e,c,eltolas); {a mint t kiĄrja a sz”veg al } end; #62 : begin {F4 - minta illeszt‚se h tulr˘l} end; #63 : begin {F5 - Bayer-Moore m˘dszer} end; end; until c=#27; end.