Kirjautuminen

Haku

Tehtävät

Koodit: VB6: Lukujärjestelmien muunnokset

Kirjoittaja: sooda

Kirjoitettu: 12.05.2004 – 12.05.2004

Tagit: matematiikka, koodi näytille, vinkki

Muuntaa kymmenlukujärjestelmästä mihin tahansa järjestelmään ja takaisin,kunhan on tarpeeksi pieni eli joku 100-lukujärjestelmä ei kelpaa, mutta kuka sellaista tarvii :D
Idean sain matikantunnilta kun käsiteltiin eri lukujärjestelmiä, ja soodasin sitten tunnilla tämän psionilleni ja nyt sitten porttasin vb:lle.

Lisätietoa saa https://www.ohjelmointiputka.net/oppaat/opas.php?tunnus=luvut

Function luvuksi(normaaliarvo As Long, kanta As Integer) As String

    ne = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    If normaaliarvo = 0 Then
        luku = "0"
    ElseIf normaaliarvo > 0 Then
        arvo = 1 'enemmän kuin 0 jotta päästään while-looppiin sisään
        i = normaaliarvo 'arvo josta lasketaan jakojäännöstä
        While arvo > 0
            arvo = i \ kanta 'laskeskellaan vähän
            jakojäännös = i - kanta * arvo 'jakojäännös on tärkeä osa tässä
            i = arvo
            palautus = Mid(ne, jakojäännös + 1, 1) + palautus 'palautusarvon kasvatus
        Wend
        luvuksi = palautus
    End If

End Function

Function takaisin(arvo As String, kanta As Integer) As Long

    ne = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    For i = 0 To Len(arvo) - 1 'käydään kaikki merkit läpi
        'katsotaan monesko se on ne-merkkijonossa eli napataan sen arvo
        luku = InStr(ne, UCase(Mid(arvo, Len(arvo) - i, 1))) - 1
        If luku = -1 Then Exit Function 'jos on väärä merkki niin mennään pois
        palautus = palautus + luku * kanta ^ i 'kasvatetaan yhteensäarvo-muuttujaa
    Next
    takaisin = palautus

End Function

Private Sub Form_Load()

    MsgBox luvuksi(takaisin("123", 10), 10) 'ulostaa 123
    MsgBox luvuksi(255, 16) 'ulostaa FF, sama kuin hex(255) koska hexa on 16lukujärjestelmä
    MsgBox takaisin("FF", 16) ' 255
    End

End Sub

Kommentit

hunajavohveli [13.05.2004 20:06:56]

#

Kätevä koodi. Näkyy toimivan kuin muissakin lukujärjestelmänmuunnosvinkeissä (mikä sanahirviö :D), paitsi että binäärien kakkosen tilalla on nyt muuttuja, jonka arvon voi vaihtaa miksi tahansa.

ajv [13.05.2004 21:33:19]

#

Asiaan liittyen: eikös negatiivisetkin luvut voi muuntaa muihin kantajärjestelmiin? Ainakin negatiiviset binääriluvut ovat mahdollisia esittää ns 2k-lukuina. Esim -10 dec = 10110 bin (2k-lukuna). Eli siis ensimmäinen ykkönen on negatiivinen ja siitä eteenpäin ykköset on positiivisia eli
10110 (2k) = -16+0+4+2+0 = -10. Eiköhän tuo päde myös muihin kantajärjestelmiin. Lisääppä tuo vielä siihen :P
Muuten hyvä koodi!

jrantala [14.05.2004 09:44:29]

#

arvo = i \ kanta 'laskeskellaan vähän

mikä toi \ o? ;CC

sooda [14.05.2004 09:58:11]

#

Ajv, sitten pitäisi olla kai joku maksimiluku mihin tota verrataan, koska takaisin käännettäessä ei tiedä onko negatiivinen vai ei. Voithan sen ite säätää :)

ja jrantala, lue https://www.ohjelmointiputka.net/oppaat/opas.php?tunnus=luvut sivulta se Desimaaliluvun muuttaminen binääriluvuksi .... Tässä vain jakaja on kanta-muuttuja, tuolla sivulla kannan tilalla on 2, koska siinä käsitellään 2-lukujärjestelmää eli binääriä. Kannattaa lukea koko toi sivu, tosi hyvä.

setä [14.05.2004 14:28:08]

#

Ootpa tosi mato soodaamaan ja tuo sun murrekin on ihan hauskaa. Taidat olla sekä kieli- että matikkanero! Vau !!

Kirjoita kommentti

Muista lukea kirjoitusohjeet.
Tietoa sivustosta