ERLEDIGT
NEIN
NEIN
ANTWORTEN
7
7
ZUGRIFFE
1219
1219
EMPFEHLEN
-
24.01.10 16:05 #1gibbs 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?
-
---------------------------------------------------------------------------------------------------
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
-
25.01.10 13:39 #3gibbs 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
-
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
-
25.01.10 15:22 #5gibbs 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
-
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.htmlGeä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
-
25.01.10 16:21 #7gibbs 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 SubGeändert von gibbs (25.01.10 um 16:24 Uhr)
-
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
-
C-Programm zur Umrechnung von Dualzahlen in Dezimalzahlen
Von ch275 im Forum C/C++Antworten: 5Letzter Beitrag: 02.12.10, 19:49 -
Dezimalzahlen
Von q1q im Forum Javascript & AjaxAntworten: 4Letzter Beitrag: 20.04.10, 21:04 -
Mit Dezimalzahlen rechnen
Von weedo im Forum PHPAntworten: 6Letzter Beitrag: 12.10.08, 12:58 -
JTable Dezimalzahlen eingeben
Von EdiGraef im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 3Letzter Beitrag: 08.07.04, 11:31 -
Dezimalzahlen Ausgabe
Von Dimka im Forum C/C++Antworten: 7Letzter Beitrag: 21.05.04, 12:10





Zitieren


Login





