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()"----------------------------------------------------------------