KONST fiasko=-1; {uzota en esceptotraktilo}
maks = 100; {maksimuma longo de la tabelo}
TIPO indico=1..maks;
æeno = PAKITA TABELO [1..20] EL signa;
ano = RIKORDO þlosilo:entjera; valoro:æeno FINO;
FUNKCIO seræo( VAR v: TABELO [sb..sp:indico] EL ano
; þ: entjera): entjera;
{ liveras la indicon en n-elementa vektoro v de ano kun þlosilo þ }
MARKO 9;
VAR sube, meze, supre: indico;
þm: entjera;
STARTO sube:=sb; supre:=sp;
DUM sube<=supre FARU STARTO
meze:=(sube+supre) DIV 2;
þm:=v[meze].þlosilo;
SE þ=þm TIAM STARTO seræo:=meze; AL 9 FINO;
SE þ<þm TIAM supre:=ant(meze) ALIE sube:=sek(meze);
FINO;
seræo:=fiasko;
9: FINO {de seræo}
--------- Unua biblioteka peco: ---------
PACKAGE tabeloj IS --------- interfaca paka¼o:
TYPE sxlosilo IS NEW INTEGER;
TYPE ano IS RECORD
sxlo: sxlosilo; valoro: STRING(1..20);
END RECORD;
TYPE vektoro IS ARRAY (POSITIVE RANGE <>) OF sxlosilo;
sercxoeraro: EXCEPTION;
END tabeloj;
--------- Dua biblioteka peco: ---------
WITH tabeloj; -- la "kunteksta sekcio" ebliganta atingi "tabeloj"n
USE tabeloj; -- de æi tie la objektoj de "tabeloj" uzeblas senprefikse
FUNCTION sercxo(v: vektoro; sx: sxlosilo) RETURN POSITIVE;
sube,meze,supre:POSITIVE; sx_m:sxlosilo; -- lokaj variabloj
BEGIN sube:=v'FIRST; supre:=v'LAST; -- la indiclimoj de v
WHILE sube<=supre LOOP
meze:=(sube+supre)/2; sx_m:=v(meze).sxlo;
IF sx=sx_m THEN RETURN meze; -- la bona elirejo
ELSIF sx<sx_m THEN supre:=meze-1;
ELSE sube:=meze+1;
END IF;
END LOOP;
RAISE sercxoeraro; -- escepta elirejo (kun esceptosignalo)
END sercxo;
![[Indekso]](bildoj/indekso.gif)
![[Instrukcio]](bildoj/kovrilo.gif)