La dormema frizisto en Modula

   
MODULO Bufro[1];
   EKSPORTO deponu, elprenu;
   IMPORTO atendu, evento, okazigu, pretigu, subtipo;
   KONST lon = 256;                    (* la bufrolongo *)
   VAR n: [0..lon];   (* la nombro de deponitaj datumoj *)
       neplena, nemalplena: evento;
       al, de: [0..lon-1];        (* la pozicimontriloj *)
       buf: TABELO [0..lon-1] EL subtipo;

   PROCEDURO deponu(x: subtipo);
     STARTO n := n+1;
        SE n>lon TIAM atendu(neplena) FINO;
        buf[en] := x;  en := (en+1) MOD lon;
        SE n<=0 TIAM okazigu(nemalplena) FINO;
     FINO deponu;

   PROCEDURO elprenu(VAR x:subtipo);
     STARTO n:=n-1;
        SE n<0 TIAM atendu(nemalplena) FINO;
        x:=buf[de];  de := (de+1) MOD lon;
        SE n>=lon TIAM okazigu(neplena) FINO;
     FINO elprenu;

STARTO (* la komencvalorizoj: *)
   n:=0; en:=0; de:=0; pretigu(neplena); pretigu(nemalplena);
FINO Bufro.


Senkondiĉa iteracio kun reven'ordonoj

   PROCEDURO prima(VAR n:entjera): Bulea; (*ĉu n estas primo?*)
      VAR divizoro: entjera;
   STARTO
      SE n MOD 2 = 0 TIAM REEN n=2 FINO;
      divizoro:=3;
      MAŜO      (* --- komenciĝas senkondiĉa iteracio --- *)
         SE divizoro*divizoro>n TIAM REEN vero FINO;
         SE n MOD divizoro = 0 TIAM REEN falso FINO;
         divizoro := divizoro+2
      FINO      (* --- de senkondiĉa iteracio *)
   FINO


[Indekso][Instrukcio]