Kirjautuminen

Haku

Tehtävät

Koodit: QB: Luku kirjoitettuna

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

Kommentit

Pekka [25.07.2002 13:15:15]

#

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ä.

(nimetön) [14.08.2002 19:15:33]

#

Tosi hyvin tiivistetty!

JJKulmo [26.05.2004 20:22:39]

#

Kolmebiljoonaanollakymmentäkolme
Hahaa! ;P

markus90 [31.10.2004 16:15:11]

#

Ihan hyvähän tuo on.

Juhko [12.10.2006 18:50:51]

#

Kuinka kauan sä Antti oot koodannu? o_O

E.K.Virtanen [11.09.2024 17:40:29]

#

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/

Kirjoita kommentti

Muista lukea kirjoitusohjeet.
Tietoa sivustosta