funkce ZX                                            TASWORD TWO
           DEFINOVÁNÍ UŽITEČNÝCH FUNKCÍ NA ZX SPECTRUM
           -------------------------------------------
               ( na SORD m.5 lze též v Basiku-D )
  Prevod uhlu (stupne - radiany - gradiany)
 001 DEF FN X(x,y) = x * ((y=1) * PI / 180 + (y=2) * 180 / PI +
                     (y=3) * 10 / 9 + (y=4) * 9 / 10 +  (y=5)  *
                     200 / PI + (y=6) * PI / 200
  "x" - uhel
  "y" - druh konverze (1 - 6)
          1 = stupne   ==> radiany   2 = radiany   ==> stupne
          3 = stupne   ==> gradiany  4 = gradiany  ==> stupne
          5 = radiany  ==> gradiany  6 = gradiany  ==> radiany
  Zarovnani cisla vpravo - funkce dava cislo ve stringu
 001 DEF FN X$(x) = "          "(1 TO 10 - LEN STR$ x) + STR$ x
  "x" - argument
  Zaokrouhlovani - funguje jako funkce ROUND (x,y)
 001 DEF FN X(x,y) = INT (x * 10 ^ y + 0.5) / 10 ^ y
  "x" - argument
  "y" - pozadavek zaokrouhleni na "y" desetinnych mist y=(-8,8)
  Prevod HH.MMSS do dekadickeho tvaru (FN X) a naopak (FN Y)
 001 DEF FN X(x) = INT x + INT ((x - INT x) * 100) / 60 +
                 ((x-INT x) * 100 - INT ((x - INT x) * 100))/36
 002 DEF FN Y(y) = INT y + INT ((y - INT y) * 60) / 100 +
                 ((y-INT y) * 100 - INT ((y - INT y) * 36))/100
  "x" - argument pro prevod z sedesatkove do desitkove soustavy
  "y" - argument pro prevod z desitkove do sedesatkove soustavy
  Zbytek deleni - funguje jako funkce MOD (x,y)
 001 DEF FN X(x,y) = (x/y - INT (x/y)) * y
  "x" - delenec
  "y" - delitel
  Hledani stringu ve stringu - funguje jako funkce INDEX (x$,y$)
 001 LET y = 0: FOR i = 1 TO (LEN x$ - LEN y$+1):
     IF x (i TO i + LEN y$ -1) <> y$ THEN NEXT i: RETURN
 002 LET y = i: RETURN
  "x$" - string, ve kterem se hleda
  "y$" - string s hledanou hodnotou
  "y"  - adresa byte, na ktere se oba stringy prekryvaji, nebo 0
  Vymena znaku - funguje jako funkce TRANSLATE (x$, y$, z$)
 001 FOR i = 1 TO LEN x$: FOR j = 1 TO LEN z$:
     If x$(i) = z$(j) THEN LET x$(i) = y$(j)
 002 NEXT j: NEXT i: RETURN
  "x$" - string, ve kterem se ma provest vymena znaku
  "y$" - string znaku slouzicich pro vymenu
  "z$" - string puvodnich znaku
  Kontrola obsahu stringu - funguje jako funkce VERIFY (x$, y$)
 001 LET y = 0: FOR i = 1 TO LEN x$: FOR j = 1 TO LEN y$:
     IF x$(i) = y$(j) THEN NEXT i: RETURN
 002 NEXT i: LET y = i: RETURN
  "x$" - string, jehoz obsah ma byt kontrolovan
  "y$" - string znaku pripustnych v x$
  "y"  - adresa byte, kde je nepripustny znak, nebo 0
  Trideni poli ve vnitrni pameti
 001 FOR i = n TO 2 STEP -1: LET t = 0: FOR j = 1 TO i - 1:
   ==> IF x(j) > x(j+1)  <== (trideni vzestupne)
   ==> IF x(j) < x(j+1)  <== (trideni sestupne)
  THEN LET t = x(j): LET x(j) = x(j+1): LET x(j+1) = t:LET t = 1
 002 NEXT j: IF t THEN NEXT i
 003 RETURN
  "x()"  - pole tridenych prvku
  "n"    - dimenze pole "x()"
  "t"    - pomocna promenna
  Vyhledavani cisel
 001 LET t = 0: FOR i = 1 TO n: FOR j = 1 TO o:
     IF NOT t THEN GOTO 005
   vyhledani "o" nejmensich cisel v poli "x" (trideni vzestupne)
 002 If x(i) > y(j) THEN GOTO 007
   vyhledani "o" nejvetsich cisel v poli "x" (trideni sestupne)
 002 IF x(i) < y(j) THEN GOTO 007
 003 IF x(i) = y(j) THEN GOTO 006
 004 FOR k = o-1 TO j STEP -1: LET y(k+1) = y(k): LET z(k+1)=
                                                 z(k): NEXT k
 005 LET t = 1: LET y(j) = x(j): LET z(j) = 0
 006 LET z(j) = z(j) + 1: GOTO 008
 007 NEXT j
 008 NEXT i: RETURN
  "x(n)" - nesetridene pole cisel
  "n"    - dimenze pole "x()"
  "y(o)" - vystupni pole obsahujici vybrana setridena cisla
  "z(o)" - vystupni pole obsahujici cetnosti vyskytu v poli "y"
  "o"    - dimenze pole "y()" a "z()"
----------------------------------------------------------------