Wie wandle ich in C# Dualzahlen in Dezimalzahlen um?

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

  1. 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.
  2. 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.
Stoneblind 
Fragesteller
 21.06.2019, 15:14

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!

0
Stoneblind 
Fragesteller
 21.06.2019, 17:15

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

0

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;
    }
}
Woher ich das weiß:Berufserfahrung – Software-Entwickler
Stoneblind 
Fragesteller
 22.06.2019, 14:25

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

0

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/34090397/convert-double-to-float-by-cast-or-convert-tosingle/34090411

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

Stoneblind 
Fragesteller
 21.06.2019, 15:25

Vielen Dank, ich schau mal die Links durch

0
MartinusDerNerd  21.06.2019, 16:00
@Stoneblind

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

0
MartinusDerNerd  21.06.2019, 16:20

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

1

Eine Optimallösung (wenn auch für Anfänger nicht ganz einfach zu verstehen) wäre diese:

  1. Beginne mit dem Dezimalwert 0.
  2. Gehe nun den String, der die Dualzahl enthält Zeichen für Zeichen durch.
  3. Führe einen Bit-Shift des Dezimalwertes um 1 nach links durch.
  4. Ü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))
Stoneblind 
Fragesteller
 21.06.2019, 17:27

ahhh okay, das werde ich mal versuchen umzusetzen. Vielen Dank!

0