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 Sub
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.
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 !!