tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
7
ZUGRIFFE
1219
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    gibbs Tutorials.de Gastzugang
    Hallo und schon mal ein großes Dankeschön an alle die mir weiterhelfen,

    folgendes Problem:
    Es soll ein VB-Programm erstellt werden, mit dem eine eingegebene Dezimalzahl in die zugehörige positive und negative Dualdarstellung umgewandelt wird. Eingabe mit Textfeld 1, Ausgabe positive Dualzahl in Textfeld 2, Ausgabe negative Dualzahl in Textfeld3. Zunächst soll die positive Dualzahl berechnet werden und als einzelne Bits in einer Reihung (Array) abgespeichert werden. Anschließend soll die neg. Dualzahl berechnet werden. Außer der "Val"-Funktion keine VB-Standardfunktionen erlaubt. Möglichst einfach ohne Unterprogramme.

    Wie man prinzipiell Dez. in Dual umwandelt weiß ich schon, bloß haperts bei mir mit der Umsetzung im Algorithmus.

    Kann mir jemand weiterhelfen?
     

  2. #2
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Zitat Zitat von gibbs Beitrag anzeigen
    Wie man prinzipiell Dez. in Dual umwandelt weiß ich schon, bloß haperts bei mir mit der Umsetzung im Algorithmus.

    Kann mir jemand weiterhelfen?
    VB kann ich gut. Doch Dualzahl? Meine letzte Mathematikstunde ist 10 Jahre her und solches Zeug ist mir nicht mehr geläufig...
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  3. #3
    gibbs Tutorials.de Gastzugang
    z.B. 334 --> 334:2 = 167 Rest 0 --> 0
    167:2 = 83 Rest 0,5 --> 1
    83:2 = 41 Rest 0,5 --> 1
    41:2 = 20 Rest 0,5 --> 1
    20:2 = 10 Rest 0 --> 0
    10 : 2 = 5 Rest 0 --> 0
    5 : 2 = 2 Rest 0,5 --> 1
    2 : 2 = 1 Rest 0 --> 0
    1 : 2 = 0 Rest 0,5 --> 1

    --> da 16 Bit Dualzahl = 0000000101001110 (Schweibweise hier von unten nach oben bzw. li nach re)

    zugehörige negative Dualzahl durch Bildung des Zweierkomplements, d.h. zunächst Einserkomplement (indem jeweils 0 und 1 der pos. Dualzahl vertauscht werden) und anschließend Addition von 1.

    --> 1111111010110011
     

  4. #4
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Hab da mal auf die schnelle was zusammengeklotzt. Nicht das es grad die schönste Version ist, jedoch hast du verschiedene Dinge drin die du brauchen kannst.

    Das plus 1 beim negativen Wert hab ich nicht verstanden. Das musst du selber noch einbauen

    Code vb:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    
    Public Sub testDual(myNumber As Long)
        Debug.Print dual(myNumber)
        Debug.Print negativeDual(myNumber)
    End Sub
     
    Private Function dual(ByVal myNumber As Long) As String
        Dim rest As String
        
        'Rest bei Division durch 2 berechnen
        rest = CStr(myNumber Mod 2)
        'Abgerundete division durch 2
        myNumber = Fix(myNumber / 2)
        'Falls die nummer grösser als 0 ist, das selbe nochmals und das resultat vor den rest setzen
        If myNumber > 0 Then rest = CStr(dual(myNumber)) & rest
        'Ausgabe auf 16 Stellen formatieren
        dual = Format(rest, "000000000000000")
    End Function
     
    Private Function negativeDual(myNumber As Long) As String
        Dim duals As String
        
        'dual berechnen
        duals = dual(myNumber)
        'die einzelnen Stellen wechslen: abs(1-1) => 0, abs(0-1) => 1
        For i = 1 To Len(duals)
            Mid(duals, i, 1) = Abs(Mid(duals, i, 1) - 1)
        Next
        'TODO: irgendwo noch das komische +1 das ich nicht verstanden habe einabauen
        negativeDual = duals
    End Function
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  5. #5
    gibbs Tutorials.de Gastzugang
    Wow, sieht echt professionel aus, Danke erstmal

    Bloß sagen mir leider einige Funktionen bzw. Ausdrücke gar nichts. Hab ich auch nie eklärt bekommen und ist somit für Problem irrelevant. Laut Problemstellung darf außer der Val-Funktion (gibt numerischen Wert in einer Zeichenfolge am Anfang enthaltener Zahlen zurück) auch nichts verwendet werden.

    PS: + 1 muss man noch von re nach li dazurechnen, wie einfache Addition, bloß binär halt
     

  6. #6
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Nur mit val lösen? Wow, das wird lustig:
    http://www.vbarchiv.net/commands/Val.php

    Nachtrag:

    Hab noch eine andere Lösung gefunden
    http://www.vbarchiv.net/tipps/tipp_5...en-binaer.html
    Geändert von Yaslaw (25.01.10 um 15:27 Uhr)
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  7. #7
    gibbs Tutorials.de Gastzugang
    ... und soweit bin ich in den letzen paar Minuten gekommen

    Option Explicit

    Private Sub Command1_Click()

    Dim dez As Integer
    Dim erg As Integer
    Dim i As Integer
    Dim bin_pos, bin_neg As Integer

    dez = Val(Text1.Text)

    If dez >= 2 ^ 16 Then
    MsgBox ("Zahl ist größer als 16 Bit")
    Exit Sub
    End If

    Do
    (hier müsste doch der eigtl. Algorithmus rein)
    Loop Until

    Text2.Text = bin_pos
    Text2.Text = bin_neg

    End Sub
    Geändert von gibbs (25.01.10 um 16:24 Uhr)
     

  8. #8
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Kannst den do-while Teil aus dem mir gepostetet weiteren Besipiel nehmen

    http://www.vbarchiv.net/tipps/tipp_5...en-binaer.html

    Deine Integer solltest du durch Long ersetzen. Sonst wird nix mit 16 Ziffern.
    Die Ausgabe Formatieren, damit es auch führende 0 gibt.

    Code vb:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    
    Private Sub Command1_Click()
     
        Dim dez As Long
        Dim i As Integer
        Dim bin_pos, bin_neg As Long
        
        dez = Val(Text1.Text)
        
        If dez >= 2 ^ 16 Then
        MsgBox ("Zahl ist größer als 16 Bit")
        Exit Sub
        End If
        
        Do
            If dez Mod 2 = 0 Then
                bin_pos = "0" & bin_pos
                bin_neg = "1" & bin_neg
            Else
                bin_pos = "1" & bin_pos
                bin_neg = "0" & bin_neg
            End If
            dez = dez \ 2
        Loop Until
        'TODO: irgendwie noch das +1
        Text2.Text = Format(bin_pos, "0000000000000000")
        Text2.Text = Format(bin_neg, "0000000000000000")
     
    End Sub

    Nachtrag: Das Format kann man ggf auch im Formularfeld machen
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

Ähnliche Themen

  1. Antworten: 5
    Letzter Beitrag: 02.12.10, 19:49
  2. Dezimalzahlen
    Von q1q im Forum Javascript & Ajax
    Antworten: 4
    Letzter Beitrag: 20.04.10, 21:04
  3. Mit Dezimalzahlen rechnen
    Von weedo im Forum PHP
    Antworten: 6
    Letzter Beitrag: 12.10.08, 12:58
  4. JTable Dezimalzahlen eingeben
    Von EdiGraef im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 3
    Letzter Beitrag: 08.07.04, 11:31
  5. Dezimalzahlen Ausgabe
    Von Dimka im Forum C/C++
    Antworten: 7
    Letzter Beitrag: 21.05.04, 12:10