Kirjoittaja: Antti Laaksonen
Kirjoitettu: 02.02.2002 – 02.02.2002
Tagit: koodi näytille, vinkki
Tämä QBasic-ohjelma muuntaa numeroilla annetun luvun kirjoitettuun muotoon, esimerkiksi:
123 -> satakaksikymmentäkolme
Ohjelma tuntee kaikki luvut nollasta 99999999999999999 asti, minkä pitäisi riittää aika pitkälle.
DECLARE FUNCTION SKY$ (merkit AS STRING)
COMMON SHARED luvut() AS STRING
DIM luvut(0 TO 24) AS STRING
FOR i = 0 TO 24
READ luvut(i)
NEXT
CLS
INPUT "Anna luku: ", luku$
IF LEN(luku$) > 18 THEN PRINT "Liian suuri luku!": END
IF LEN(luku$) MOD 3 <> 0 THEN
luku$ = LEFT$("00", 3 - (LEN(luku$) MOD 3)) + luku$
END IF
FOR i = 1 TO LEN(luku$) / 3
v$ = SKY$(MID$(luku$, LEN(luku$) - i * 3 + 1, 3))
IF i > 1 AND v$ = luvut(1) THEN
v$ = luvut(13 + (i - 1) * 2) + " "
ELSEIF i > 1 AND v$ <> "" THEN
v$ = v$ + luvut(14 + (i - 1) * 2) + " "
END IF
t$ = v$ + t$
NEXT
IF t$ = "" THEN t$ = luvut(0)
PRINT t$
DATA nolla, yksi, kaksi, kolme, neljä, viisi, kuusi, seitsemän
DATA kahdeksan, yhdeksän, kymmenen, toista, kymmentä, sata
DATA sataa, tuhat, tuhatta, miljoona, miljoonaa, miljardi, miljardia
DATA biljoona, biljoonaa, triljoona, triljoonaa
FUNCTION SKY$ (merkit AS STRING)
DIM tulos AS STRING
IF MID$(merkit, 2, 1) = "0" THEN
IF RIGHT$(merkit, 1) <> "0" THEN
tulos = luvut(VAL(RIGHT$(merkit, 1))) + tulos
END IF
ELSEIF MID$(merkit, 2, 1) = "1" THEN
IF RIGHT$(merkit, 1) = "0" THEN
tulos = luvut(10) + tulos
ELSE
tulos = luvut(VAL(RIGHT$(merkit, 1))) + luvut(11) + tulos
END IF
ELSE
IF RIGHT$(merkit, 1) = "0" THEN
tulos = luvut(VAL(MID$(merkit, 2, 1))) + luvut(12) + tulos
ELSE
tulos = luvut(VAL(MID$(merkit, 2, 1))) + luvut(12) + luvut(VAL(RIGHT$(merkit, 1))) + tulos
END IF
END IF
IF LEFT$(merkit, 1) = "1" THEN
tulos = luvut(13) + tulos
ELSEIF LEFT$(merkit, 1) <> "0" THEN
tulos = luvut(VAL(LEFT$(merkit, 1))) + luvut(14) + tulos
END IF
SKY$ = tulos
END FUNCTIONYmmärrän kyl että sitä vois olla vähän hankala korjata mut tossa saa hauskoja lukuja sillai et kirjottaa vaikka "1 2" tai miten vaan mut kuitenki sillai et sielä on välilyönti niitten lukujen välissä.
Tosi hyvin tiivistetty!
Kolmebiljoonaanollakymmentäkolme
Hahaa! ;P
Ihan hyvähän tuo on.
Kuinka kauan sä Antti oot koodannu? o_O
Näitä QB koodeja on aina niin hieno lukea vuosien jälkeen. Väänsin tästä nodejs version, olkaa hyvä.
https://codeforum.org/threads/number-to-words-qb-nodejs-conversion.7601/