Duoniga seræo en Paskalo

   
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}


Duoniga seræo en ADA

   
---------    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][Instrukcio]