Zahlenbasen

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Ryke.

    Zahlenbasen

    Hi

    In Anlehnung an diesen Thread hab ich eine Frage:

    Ich habe mir ein kleines Programm gebastelt, bei dem ich 1 Zahl eingebe und das Programm gibt sie mir dann in allen möglichen Zahlensystemen wieder aus. Angefangen habe ich mit Binär und Hexadezimal, dann wurde ich ein bisschen größenwahnsinnig und habe noch (der Vollständigkeit halber) Dezimal und Oktal hinzugefügt. Geplant waren auch die anderen Systeme mit den Basen 3, 4, 5, 6, 7, 9, 11, 12, 13, 14 und 15, klappt aber nicht.

    Kann VB das nicht oder mach ich was falsch?

    Code:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Math
    2. Public Class Form1
    3. Public dbl As Double
    4. Public hlf As Double
    5. Public sqr As Double
    6. Public rt As Double
    7. 'Base 2 bis 16 deklariert in Zeilensparender Form
    8. Public base2, base8, base10, base16 As String
    9. 'Nicht funktionierende
    10. 'Public base2, base3, base4, base5, base6 As String
    11. 'Public base7, base8, base9, base10, base11, base12 As String
    12. 'Public base13, base14, base15, base16 As String
    13. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    14. 'Labels erst jetzt leeren, damit sie auf der Form nicht "unsichtbar" sind
    15. lbl_dbl.Text = ""
    16. lbl_hlf.Text = ""
    17. lbl_sqr.Text = ""
    18. lbl_rt.Text = ""
    19. lbl_2.Text = ""
    20. lbl_3.Text = ""
    21. lbl_4.Text = ""
    22. lbl_5.Text = ""
    23. lbl_6.Text = ""
    24. lbl_7.Text = ""
    25. lbl_8.Text = ""
    26. lbl_9.Text = ""
    27. lbl_10.Text = ""
    28. lbl_11.Text = ""
    29. lbl_12.Text = ""
    30. lbl_13.Text = ""
    31. lbl_14.Text = ""
    32. lbl_15.Text = ""
    33. lbl_16.Text = ""
    34. End Sub
    35. Private Sub num_input_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles num_input.ValueChanged
    36. Try
    37. 'Funktionieren
    38. dbl = num_input.Value * 2
    39. hlf = num_input.Value / 2
    40. sqr = num_input.Value ^ 2
    41. rt = Sqrt(num_input.Value)
    42. base2 = Convert.ToString(CInt(num_input.Value), 2)
    43. base8 = Convert.ToString(CInt(num_input.Value), 8)
    44. base10 = Convert.ToString(CInt(num_input.Value), 10)
    45. base16 = Convert.ToString(CInt(num_input.Value), 16)
    46. 'Funktionieren nicht
    47. 'base3 = Convert.ToString(CInt(num_input.Value), 3)
    48. 'base4 = Convert.ToString(CInt(num_input.Value), 4)
    49. 'base5 = Convert.ToString(CInt(num_input.Value), 5)
    50. 'base6 = Convert.ToString(CInt(num_input.Value), 6)
    51. 'base7 = Convert.ToString(CInt(num_input.Value), 7)
    52. 'base9 = Convert.ToString(CInt(num_input.Value), 9)
    53. 'base11 = Convert.ToString(CInt(num_input.Value), 11)
    54. 'base12 = Convert.ToString(CInt(num_input.Value), 12)
    55. 'base13 = Convert.ToString(CInt(num_input.Value), 13)
    56. 'base14 = Convert.ToString(CInt(num_input.Value), 14)
    57. 'base15 = Convert.ToString(CInt(num_input.Value), 15)
    58. Catch ex As Exception
    59. MsgBox(ex.Message)
    60. End Try
    61. num_out()
    62. End Sub
    63. Sub num_out()
    64. 'Funktionieren
    65. lbl_dbl.Text = CStr(dbl)
    66. lbl_hlf.Text = CStr(hlf)
    67. lbl_sqr.Text = CStr(sqr)
    68. lbl_rt.Text = CStr(rt)
    69. lbl_2.Text = CStr(base2)
    70. lbl_8.Text = base8
    71. lbl_10.Text = base10
    72. lbl_16.Text = base16
    73. 'Funktionieren nicht
    74. 'lbl_3.Text = base3
    75. 'lbl_4.Text = base4
    76. 'lbl_5.Text = base5
    77. 'lbl_6.Text = base6
    78. 'lbl_7.Text = base7
    79. 'lbl_9.Text = base9
    80. 'lbl_11.Text = base11
    81. 'lbl_12.Text = base12
    82. 'lbl_13.Text = base13
    83. 'lbl_14.Text = base14
    84. 'lbl_15.Text = base15
    85. End Sub
    86. End Class


    VG
    Eine Pizza auf einer Pizza sind 2 Pizzen

    Eine Lasagne auf einer Lasagne ergibt 1 große Lasagne

    VB.NET-Quellcode

    1. base16 = Convert.ToString(CInt(num_input.Value), 16)


    Das gibt mir die Variable vom NumericUpDown ganz einfach als hexadezimale Zahl aus, ohne das ich da rechnen muss... 16 ist da die Basis, aber das geht nur mit den Basen 2, 8, 10 und 16. Das finde ich so seltsam
    Eine Pizza auf einer Pizza sind 2 Pizzen

    Eine Lasagne auf einer Lasagne ergibt 1 große Lasagne
    Ja die 4 Systeme kenn ich. Hab sogar das handschriftliche Umrechnen zwischen Binär - Dezimal - Hexadezimal gelernt -.-

    Ok, schade... Ich hab einen Umrechner im Internet gefunden, laut dem die Zahl 34 bei der Basis 3 = 1021 ist. Ich verstehe nicht so ganz, wie man darauf kommt. Klar die Zahlen können keine 4 oder größer beinhalten, trotzdem ist mir nicht ganz schlüssig, wie die Zahlen errechnet werden.
    Eine Pizza auf einer Pizza sind 2 Pizzen

    Eine Lasagne auf einer Lasagne ergibt 1 große Lasagne

    Ryke schrieb:

    Hab sogar das handschriftliche Umrechnen zwischen Binär - Dezimal - Hexadezimal gelernt -.-

    Aber mur auswändig und nicht verstanden? Denn im Prinzip ist das ja trivial:

    VB.NET-Quellcode

    1. Public Function umrechne(i As Integer, base As Integer) As String
    2. Dim numbers As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    3. Dim sb As New System.Text.StringBuilder
    4. While i > 0
    5. Dim c = i Mod base
    6. sb.Append(numbers(c))
    7. i \= base
    8. End While
    9. Return sb.ToString
    10. End Function
    11. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    12. Debug.Print(umrechne(34, 3))
    13. Debug.Print(umrechne(1234567, 29))
    14. End Sub