Wie wandle ich in C# Dualzahlen in Dezimalzahlen um?
Hallo zusammen,
ich hab folgende Frage bzw folgendes Problem. Ich bin in meinem ersten Ausbildungsjahr als Informatiker und hatte die Aufgabe ein Programm zu schreiben, welches eine 3-Stellige Dualzahl in eine Dezimalzahl umwandelt:
Nun zur eigentlichen Frage. Ich muss nun einen Code erstellen, zur Umwandlung von Dual in Dezimal eine beliebig langen Dualzahl. Ich dachte da an Array's. Allerdings ist das bei mir weit entfernt (hab mich mal in einem Berufskolleg damit befasst) Da wir das in unserer Berufsschule noch nicht hatten tu ich mir schwer. Auch das Internet kann mir nicht wirklich helfen.
Meine Frage ist nun, ob mir jemand einen Tipp geben kann, wie ich das angehen muss? Also ob Array's nun das richtige sind oder ob es noch was anderes gäbe und wenn ja welche? Im Hinterkopf doch bitte behalten, dass ich am Anfang stehe und nur die Grundlagen besitze. Bei Vorschlägen werde ich mich jedoch in das ein oder andere Thema das kommt reinlesen, wenn dies nicht zu komplex ist für mich.
Bin gespannt auf eure Antworten und freu mich auf eure Antworten.
Danke schonmal im Vorhinein.
LG
4 Antworten
Du hast einen Rechtschreibfehler im Test (dreistellife). Kommt nicht gut an.
Ich dachte da an Array's. Allerdings ist das bei mir weit entfernt (hab mich mal in einem Berufskolleg damit befasst) Da wir das in unserer Berufsschule noch nicht hatten tu ich mir schwer
Dann kann ich dir nur raten, das schleunigst anzulernen. Arrays und Vektoren sind etwas so elementares, dass man das als Informatiker schon in den ersten Monaten können sollte
Lösungen....
- Es sollte glaube ich spezielle Funktionen dafür geben. Im Internet finde ich auf die Schnelle nur Convert.ToInt32(Binary_Number,2). Der Datentyp von Binary_Number müsste wohl ein String oder ein binary-Datentyp sein.
- Einfaches Horner-Schema. Du speicherst die Stellen der Zahl in ein Array und multiplizierst die Stelle mit *2^(Stelle der Zahl). Sprich Einerstelle -> 0, Zehnerstelle -> 1 etc.
jetzt hab ich nochmal eine Frage, wie schaffe ich es in ein Array die Eingabe zu speichern? Also was ich damit meine ist, wie ich das einzelne Zeichen des Strings (in dem fall eine 1 der Dualzahl) auf Array[0] zum Beispiel speicher.
Klar mit einer For-Schleife könnte ich jedes Zeichen einzeln ansteuern aber wie bekomme ich das auf die Position 0 des Array's? Ich bin bei den Internetbeispielen bzw Erklärungen nicht ganz durchgestiegen..
oh, das mit dem Rechtschreibfehler ist mir nicht aufgefallen ':D
ja ich weiß, dass ich mir das aneignen muss, aber da wir das noch nicht in der Beruffschule hatten, sondern bisher nur Strings dachte ich es gäbe vielleicht noch eine Andere Lösung mit Strings, nur bin ich da bisher noch nicht drauf gekommen. Hab mich auch mal mit Array's soweit es ging versucht, aber es fehlen mir noch die nötigen Kenntnisse wie ich die genau anwenden kann.
Das mit dem Horner-Schema hört sich garnicht schlecht an, das schau ich mir mal genauer an.
Vielen Dank!
Array ist vermutlich die Idee, die erwartet wird.
Aber das einfachste wird sein, die .NET-Bibliotheken die Umwandlung vornehmen zu lassen. Dazu liest du die Dualzahl als einen einzigen String aus und verwendest die Funktionensammlung "Convert": https://social.msdn.microsoft.com/Forums/vstudio/en-US/697f8202-7721-420a-b39e-5117da544bd4/how-to-convert-a-binary-string-to-decimal?forum=csharpgeneral
Ansonsten würde ich ein Tutorial zum Thema arrays durcharbeiten.
Oder du verwendest eine Schleife, in der du jeweils eine Ziffer eingeben lässt und führst jedesmal eine Multiplikation mit 2 durch. Im folgenden z. T. "Pseudocode":
int dezi = 0;
int anzahlDualziffern = EingabeInteger();
for (int i = 0; i < anzahlDualziffern; i++)
{
dezi = dezi * 2;
int dualziffer = EingabeDualziffer("{i+1}. Dualziffer eingeben: ");
if (dualziffer == 1)
{
dezi = dezi + 1;
}
}
vielen Danke für dein Link, ich bin gerade sprachlos wie einfach das war. Es ist nur ein blöder Befehl *facepalm*:
Console.WriteLine("Geben Sie Ihre Dualzahl mit höchstens 16 Stellen ein: ");
string eingabe = Console.ReadLine();
int bit= Convert.ToInt32(eingabe, 2);
Console.WriteLine(bit);
Nichts mit Array's, nichts Umständliches, einfach nur drei Zeilen wirklicher Code xD Ich konnte es echt nicht fassen aber es scheint zu funktionieren :D hab mal paar Beispiele gemacht und auch selber nachgerechnet. Es funktioniert..
Hallo!
Ich habe absolut keine Ahnung von C#...
(Ich arbeite mich gerade in Python ein und hatte "ganz viel früher" mal C gelernt.)
Allerdings kann ich recht gut "Suchmaschine"... (Startpage.com & Google.com)
https://www.google.com/search?q=c%23%20convert%20double%20float
Und das brachte folgendes zu Tage:
https://stackoverflow.com/questions/6640742/convert-double-to-float-without-infinity
https://www.homeandlearn.co.uk/csharp/csharp_s2p6.html
https://answers.unity.com/questions/291352/convert-double-to-float-or-int.html
https://docs.microsoft.com/de-de/dotnet/csharp/language-reference/keywords/float
Ich denke, damit könntest Du dem Ziel näher kommen.
Gruß
Martin
Ups, ich habe da "Double" gelesen, statt "Dual", also Binär... :-(
Also vergiss bitte den Blödsinn, den ich da oben geschrieben habe...
So... meinen bisherigen Text an dieser Stelle habe ich wieder komplett gelöscht und nun (hoffentlich) deutlich vereinfacht...
Ich hatte zunächst (aus meiner Erinnerung heraus) selber versucht das von Quotenbanane erwähnte "Horner-Schema" zusammen zu basteln. Ich kannte diese Bezeichnung dazu bisher noch nicht... (Danke für das Stichwort!!)
Dann habe ich noch einmal dazu gegoogelt:
https://www.google.com/search?q=c%23%20binär%20in%20dezimal%20umwandeln
https://trainyourprogrammer.de/csharp-189-zahlen-umwandeln-binaer-zu-dezimal.html
https://www.google.com/search?q=c%23%20horner%20schema
https://de.wikibooks.org/wiki/Algorithmensammlung:_Numerik:_Horner-Schema
https://stackoverflow.com/questions/8789842/horner-algorithm
Ich hoffe, jetzt stimmt es...
"...
Die Programmiersprache ist nur das trockene Brot.
Die Algorithmen sind die Butter darauf.
Und wenn das Programm funktioniert, hat man sich mit einen beliebigen Belag darauf verdient ... ;-)
Das "koffeinhaltige Heißgetränk" ist währenddessen beinahe ein Muß!
..."
Gruß
Martin
Vergiss es!
Ich habe "Double", anstatt "Dual" gelesen.
Damit ist meine Antwort völlig verkehrt.
Ich versuche mich gerade an einer Korrektur. Aber da ich kein C# kann, dauert das noch ein klein wenig...
Eine Optimallösung (wenn auch für Anfänger nicht ganz einfach zu verstehen) wäre diese:
- Beginne mit dem Dezimalwert 0.
- Gehe nun den String, der die Dualzahl enthält Zeichen für Zeichen durch.
- Führe einen Bit-Shift des Dezimalwertes um 1 nach links durch.
- Überprüfe für jedes Zeichen, ob es 0 (in dem Fall mache nichts weiter), 1 (in dem Fall führe ein "Oder-Gleich" mit der Dezimalzahl und 1 durch) oder aber irgendetwas anderes (in dem Fall gib einen Fehler aus und/oder wirf eine Exception und brich die Verarbeitung ab) ist.
In Pseudocode-Form:
dualzahl = input("Gib eine Dualzahl ein> ");
dezimalzahl = 0
for zeichen in dualzahl:
dezimalzahl <<= 1;
if zeichen == '0': continue
elif zeichen == '1': dezimalzahl |= 1
else: raise ValueError("{0} ist keine gültige Dualziffer.".format(zeichen))
print("Die Dezimalzahl lautet: {0}".format(dezimalzahl))
ahhh okay, das werde ich mal versuchen umzusetzen. Vielen Dank!
Vielen Dank, ich schau mal die Links durch