C#: Dualzahl in Dezimalzahl umwandeln

Diskutiere C#: Dualzahl in Dezimalzahl umwandeln im Lehrling und Studi Forum Forum im Bereich WEITERE ELEKTROTECHNISCHE BEREICHE; Hallo. Wir sollen eine Windows Forms Anwendung programmieren, in der man eine Dualzahl eingibt, den jeweiligen Button betätigt und dann die...

  1. #1 Elektrohauer, 01.05.2012
    Zuletzt bearbeitet: 01.05.2012
    Elektrohauer

    Elektrohauer Strippenstrolch

    Dabei seit:
    16.07.2008
    Beiträge:
    123
    Zustimmungen:
    0
    Hallo.

    Wir sollen eine Windows Forms Anwendung programmieren, in der man eine Dualzahl eingibt, den jeweiligen Button betätigt und dann die Dezimalzahl erhält.

    Als Hinweis ist folgendes gegeben:

    - 101 = 1 * 2^2 + 0 + 1 * 2^0 = 2 + 0 + 1 = 5
    - intz = Math.Pow (x,y)
    - strZeichen=strDual.Substring (Startindes,Zeichenanzahl)
    - Dualzahl --> string
    - Dezimalzahl --> int
    - for - Schleife verwenden


    Vielleicht kann mir jemand Helfen bzw. ein paar Hinweise geben, wie man so ein Programm realisieren kann.

    Hier ein Auszug aus meinem Programm:

    tbxDezimal.Clear();
    strDual = Convert.ToString(tbxDual.Text);
    intLänge = strDual.Length;

    for ( ; ; )
    {

    }
     
  2. Anzeige

  3. Damien

    Damien Lüsterklemmer

    Dabei seit:
    03.05.2008
    Beiträge:
    527
    Zustimmungen:
    49
    AW: C#: Dualzahl in Dezimalzahl umwandeln

    Hi!

    Der 1. Hinweis ist eigentlich auch der wichtigste.
    Du musst dir überlegen das du ja die Stellen der Binärzahl einzelnt durchgehend musst und dann nach dem Beispiel aus Tipp 1 zusammenrechnen musst.
    Du musst also deinen eingelesen Text in eine Integer Zahl umwandeln und danach in der For-Schleife die Stellen von rechts aus Isolieren und danach abschneiden. Solange bist du alle Stellen der Zahl durchgegangen bist.

    Da ich kein C# kann mal der Ablauf in Pseudo-Code:

    Schleife solange x ungleich 0, zähler erhöhen

    ergebnis=ergebnis+(x modulo 10)*(2 hoch zähler)
    x=x geteilt durch 10

    Also:
    Neues Ergebnis = Altes ergebnis + Letzte Stelle von x *(2 hoch Stellenwertigkeit)
    x = x ohne die letzte die Stelle (Die haben wir ja schon abgehandelt und deswegen kann die weg).

    Zahlenbeispiel:

    x=111

    1. Schleifenrunde:
    ergebnis= [0 + (x(111) modulo 10 = 1)*2 hoch 0] = 0 + 1 = 1
    x = 111 / 10 = 11

    2. Schleifenrunde:
    ergebnis = [1 + (x(11) modulo 10 = 1)*2 hoch 1] = 1+2 = 3
    x= 11/10 = 1
    3. Schleifenrunde:
    ergebnis = [3 + (x(1) modulo 10 = 1)*2 hoch 2] = 3+4 = 7
    x= 1/10 = 0

    Schleife steigt aus weil x = 0

    Gruß David

    :)
     
  4. #3 Elektrohauer, 01.05.2012
    Elektrohauer

    Elektrohauer Strippenstrolch

    Dabei seit:
    16.07.2008
    Beiträge:
    123
    Zustimmungen:
    0
    AW: C#: Dualzahl in Dezimalzahl umwandeln

    Du hast für alles x verwendet. Da blicke ich nicht durch. Sry.
     
  5. #4 Zelmani, 01.05.2012
    Zelmani

    Zelmani Lüsterklemmer

    Dabei seit:
    10.02.2011
    Beiträge:
    637
    Zustimmungen:
    10
    AW: C#: Dualzahl in Dezimalzahl umwandeln

    Hallo,

    das weitere Vorgehen hängt davon ab, ob die Binärzahl im Format Big-Endian or Little-Endian angegeben ist, also ob vorne das Bit mit dem höchsten Stellenwert oder mit dem niedrigsten Stellenwert steht. Aus dem Beispiel geht es nicht eindeutig hervor, aber wenn man es wie gewohnt von links nach rechts liest, ist es das Big-Endian-Format, bei dem das 1er-Bit ganz rechts steht. Deine Laufvariable ist also dem Exponent entgegengesetzt! Wenn i Deine Laufvariable darstellt, musst Du jetzt Zeichen für Zeichen durchmarschieren und den Ausdruck 2 ^ (intLänge-i) mit 1 oder 0 multiplizieren, je nachdem was an der aktuellen Stelle steht, und das Ergebnis jeweils aufaddieren:

    Beispiel: 10011

    intLänge = 5

    2 ^ (5-1) * 1 = 16
    2 ^ (5-2) * 0 = 0
    2 ^ (5-3) * 0 = 0
    2 ^ (5-4) * 1 = 2
    2 ^ (5-5) * 1 = 1
    -------------------
    16 + 0 + 0 + 1 + 1 = 19

    Statt des Operators ^ musst Du nun die Methode Math.Pow benutzen, und bei der Verwendung der Substring-Methode und der Konstruktion der Schleife musst Du beachten, ob die Zeichenfolgen-Indizierung in C# bei 0 oder bei 1 beginnt. Ist also gar nicht so schwer ;).

    Viel Erfolg,
    Bernd
     
  6. #5 Elektrohauer, 01.05.2012
    Elektrohauer

    Elektrohauer Strippenstrolch

    Dabei seit:
    16.07.2008
    Beiträge:
    123
    Zustimmungen:
    0
    AW: C#: Dualzahl in Dezimalzahl umwandeln

    tbxDezimal.Clear();
    intDual = Convert.ToInt32(tbxDual.Text);
    intLänge = strDual.Length;
    strZeichen = strDual.Substring(startIndex: 0, length: intLänge);
    intZ = Convert.ToInt32(strZeichen);


    for (intLänge; intLänge != 0 ; intLänge-- )
    {

    intDezimal = Math.Pow (2 ,intLänge);

    }

    Den Mist habe ich mir zusammengereimt. Langsam verzweifel ich an diesem Programm. Sitze hier schon drei Tage ohne Erfolg.

    Die gutgemeinten Hinweise kann ich leider nicht auf mein Programm übertragen. Mit Math.Pow und Substring habe ich vorher noch nie gearbeitet.
     
  7. #6 Zelmani, 01.05.2012
    Zelmani

    Zelmani Lüsterklemmer

    Dabei seit:
    10.02.2011
    Beiträge:
    637
    Zustimmungen:
    10
    AW: C#: Dualzahl in Dezimalzahl umwandeln

    Wenn str="abc" ist, dann gibt Dir str.Substring(0,1) das 'a' zurück, str.Substring(1,1) das 'b' usw. Das erste Argument ist die Startposition, das zweite die Lännge der zurückzugebenden Teilzeichenfolge, in Deinem Fall also immer 1. Und Math.Pow(2,3) entspricht 2^3 = 8. Du darfst aber nicht einfach fest mit Deiner Laufvariablen potenzieren, sondern musst auch berücksichtigen, ob an der jeweiligen Stelle der Binärzahl eine 0 oder 1 steht und die Potenz dann entsprechend mit 0 oder 1 multiplizieren.
     
  8. #7 Elektrohauer, 01.05.2012
    Elektrohauer

    Elektrohauer Strippenstrolch

    Dabei seit:
    16.07.2008
    Beiträge:
    123
    Zustimmungen:
    0
    AW: C#: Dualzahl in Dezimalzahl umwandeln

    Dann müsste ich mit if else arbeiten, um festzustellen ob der Wert 0 oer 1 ist?

    Wenn str.Substring(0,1), str.Substring(1,1) usw. ist, dann ist das doch für eine bestimmte Zeichenanzahl bestimmt oder kann ich das auch "gegen unendlich" laufen lassen? Also das ich auch eine Dualzahl mit 10 stellen eingeben kann?
     
  9. #8 Zelmani, 01.05.2012
    Zelmani

    Zelmani Lüsterklemmer

    Dabei seit:
    10.02.2011
    Beiträge:
    637
    Zustimmungen:
    10
    AW: C#: Dualzahl in Dezimalzahl umwandeln

    Genau. Wenn str.Substring(i, 1) = "1", dann Summe += die Zweier-Potenz der aktuellen Stelle. Andernfalls einfach weiter zur nächsten Stelle (das Multiplizieren mit 0 kann man sich natürlich sparen).

    Naja, nicht gegen unendlich. Aber die Länge der eingegebenen Dualzahl ist natürlich im Prinzip beliebig. Die findest Du ja mit intLänge = strDual.Length heraus.
     
  10. #9 Damien, 01.05.2012
    Zuletzt bearbeitet: 01.05.2012
    Damien

    Damien Lüsterklemmer

    Dabei seit:
    03.05.2008
    Beiträge:
    527
    Zustimmungen:
    49
    AW: C#: Dualzahl in Dezimalzahl umwandeln

    Weil es auch überall das 'x' ist. Es wird bei jeder Teilung durch 10 zwar geändert und wieder in sich selber geschrieben... Passt also das es immer nur 'x' ist.
    Am Anfang entspricht x deiner Eingebenen Binärzahl und mit jeden Schleifenschritt wird von x eine Stelle von rechts weggeschnitten.

    Mit der Methode kannst du dir auch die Längenüberprüfung der Binärzahl sparen weil die Abbruchbedingung x = 0 für alle Längen funktioniert.

    Vielleicht mal etwas übersichtlicher und mit deinen Variablennamen:

    intDual einlesen
    IntDual zu integer wandeln
    intDezimal=0 // Speicher für die Ausgabe

    for(int zaehler=0; x!=0;zaehler++)
    {
    intDezimal = intDezimal+(intDual % 10)*Math.Pow(2,zaehler); // aktueller Wert von intDezimal = vorherige Wert von intDezimal + (rechteste Stelle von intDual)*(2^zaehler)
    intDual=IntDual/10; // rechteste Stelle von intDual wegschneiden damit für die nächste Schleifenrunde die nächste Stelle benutzt wird.
    }

    Kein If, keine Längenvariable, keine Substring Funktion. Ganz simpel.
     
  11. #10 Zelmani, 01.05.2012
    Zelmani

    Zelmani Lüsterklemmer

    Dabei seit:
    10.02.2011
    Beiträge:
    637
    Zustimmungen:
    10
    AW: C#: Dualzahl in Dezimalzahl umwandeln

    Damiens Weg führt natürlich auch zum Ziel, ist aber meines Erachtens nicht unbedingt einfacher und entspricht vermutlich auch nicht dem geforderten Lösungsweg, wenn es bei der Aufgabe nebenbei darum geht, die Funktionsweise der Methode Substring zu begreifen...
     
Thema:

C#: Dualzahl in Dezimalzahl umwandeln

Die Seite wird geladen...

C#: Dualzahl in Dezimalzahl umwandeln - Ähnliche Themen

  1. Umwandlung von dezimalzahl in dualzahl

    Umwandlung von dezimalzahl in dualzahl: wie wandle ich 242 in eine dualzahl um?
  2. Binärzahlen dualzahlen! umrechnen !

    Binärzahlen dualzahlen! umrechnen !: Hallo SubTraktion Von Dualzahlen Brechne Sie Die Differen 9-12 Im Dualcode mit Hilfe Der Komplemtbildung und wandeln sie Das Ergebnis zürck...