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.
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 SubKä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.
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!
arvo = i \ kanta 'laskeskellaan vähän
mikä toi \ o? ;CC
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.
Ootpa tosi mato soodaamaan ja tuo sun murrekin on ihan hauskaa. Taidat olla sekä kieli- että matikkanero! Vau !!