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 FUNCTION
Ymmä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/