http://www.adaconcept.com/programs/keresesek_csomag_teszt.adb
--Rotter Gyorgy
--egy fajl sorai kozul kivalasztjuk az ABC szerint legelso, nagybetuvel kezdodo sort
--A Keresesek_Csomag generikus csomag es generikus eljarasanak hasznalatat bemutato program
with Ada.Text_IO;
with Ada.Strings.Unbounded; --| Unbounded stringek kezelesehez csomag
with Ada.Strings.Unbounded.Text_IO; --|
with Keresesek_Csomag;
Use Ada.Text_IO;
use Ada.Strings.Unbounded; --| use-oljuk is
use Ada.Strings.Unbounded.Text_IO; --|
procedure Keresesek_Csomag_teszt is
szavakszama:constant:=10; --a szavak tomb merete
type szoveg is new Unbounded_String; --a sajat Unbounded_String-tipusunk
type SzavakTomb is array(positive range <>) of szoveg; --megszoritatlan indexhataru, pozitiv indexu, szoveg-eket tartalmazo tomb tipus
szavak:SzavakTomb(1..szavakszama); --szavak tomb (deklaralaskor megadjuk a konkret indexhatarokat)
function ABCbenElorebbVan(A:szoveg;B:szoveg) return boolean; --| fv. bejelentesek (hogy atlathatobb legyen a kod)
function ElsoBetuNagy(sz:szoveg) return boolean; --|
package Keresesek is new Keresesek_Csomag( ElemTipus => szoveg,"<" => ABCbenElorebbVan); --A Keresesek generikus csomag peldanyositasa
--majd az ebben a csomagban levo FeltetelesMaximumKeresesTombon generikus eljaras peldanyositasa...
--gondoljuk at, miert ezeket a parametereket adjuk meg
procedure NevsorbanAzElsoMegkeresese is new Keresesek.FeltetelesMaximumKeresesTombon(IndexTipus => positive,
TombTipus => SzavakTomb,
Feltetel => ElsoBetuNagy);
------------------------------------[a foprogramban hasznalando eljarasok bejelentese]---------------------------------------------
procedure SzavakBeolvasasaFajlbol(t:in out SzavakTomb);
procedure SzavakKiirasa(t:SzavakTomb;eredmenypoz:positive); --a t tomb eredmenypoz-adik elemet bezarojelezzuk, es ugy irjuk ki
--------------------------------[metodusok]-------------------------------
function ABCbenElorebbVan(A:szoveg;B:szoveg) return boolean is
begin
return A>B;
end ABCbenElorebbVan;
function ElsoBetuNagy(sz:szoveg) return boolean is
vissza:boolean;
begin
if Element(sz,1) in 'A'..'Z' then vissza:=true; --ilyet is lehet...
else vissza:=false;
end if;
return vissza;
end ElsoBetuNagy;
---------------------------------------------------------------------------
procedure SzavakBeolvasasaFajlbol(t:in out SzavakTomb) is
maxhossz:constant := 255; --egy olvashato sor maximalis hossza
akt:positive; --a t tomb mutatoja
fajl:file_type;
sor:string(1..maxhossz); --stringnel (karaktertomb!!!) is megmondjuk a konkret indexhatarokat (megszoritjuk)
sor_hossz:natural; --a kiolvasott sor hossza (a sor "tomb" mutatoja...)
begin
open(fajl,in_file,"szavak.txt"); --megnyitjuk a "szavak.txt" fajl-t olvasasra
if not is_open(fajl) then put_line("nincs megnyitva a fajl");
else
put_line("A fajl (szavak.txt) tartalma: ");
--feltoltjuk a t tombot a fajl soraival
akt:=t'first;
while not end_of_file(fajl) loop
get_line(fajl,sor,sor_hossz);
Append(t(akt),sor(1..sor_hossz));
akt:=akt+1;
-- put(sor(1..sor_hossz)); --| tesztelest segito kommentek (ezekkel is jelezzuk, hogy gondolkodtunk...)
-- new_line; --|
end loop;
--a tomb uresen maradt elemeit " "-re allitjuk
while akt<=szavakszama loop
Append(t(akt)," ");
akt:=akt+1;
end loop;
end if;
end SzavakBeolvasasaFajlbol;
procedure SzavakKiirasa(t:SzavakTomb;eredmenypoz:positive) is
begin
new_line;
for i in T'range loop
if i=eredmenypoz then put("[ "); else put(" "); end if;
put(To_String(t(i)));
if i=eredmenypoz then put(" ]"); else put(" "); end if;
new_line;
end loop;
new_line;
end SzavakKiirasa;
begin
Ada.Text_IO.Put_Line("Program indul");
SzavakBeolvasasaFajlbol(szavak);
declare
volt:boolean;
nevsorbanazelso:szoveg;
poz:positive;
begin
NevsorbanAzElsoMegkeresese(szavak,volt,nevsorbanazelso,poz);
--put_line(To_String(nevsorbanazelso)); --| szinten teszteles segito kommentek
--put(positive'image(poz)); --|
SzavakKiirasa(szavak,poz);
end;
Ada.Text_IO.Put_Line("Program vege");
end Keresesek_Csomag_teszt;