Entwickler-Ecke

Sonstiges (.NET) - Umwandlung von Binärzahlen in Dezimalzahlen


ThomAlex - Do 12.11.09 21:01
Titel: Umwandlung von Binärzahlen in Dezimalzahlen
Hallo zusammen,

Wir haben gerade in der Schule mit Schleifen angefangen und als Aufgabe habe ich in eine Textbox eine Binärzahl vom User eingeben zu lassen, die in einem Label als Dezimalzahl umgewandelt angezeigt werden soll. Mein Code funktioniert, wollte nur nachfragen ob ihr eine elegantere Lösung für mich habt (wundert euch nicht über die überflüssigen Kommentare - der Lehrer möchte es so)


C#-Quelltext
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:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace binToDez
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        //Für die Schleife zugängliche Variablen

        //Darin wird das Zwischenergebnis in der Schleife gespeichert
        public double binärZwischenSumme;

        //der Exponent für das Potenzieren in der Schleife
        public int exponent;

        private void btnBinToDez_Click(object sender, EventArgs e)
        {
            //um bei neuem ButtonKlick neue richtige Ergebnisse zu liefern werden
            //der Exponent und das Ergebnis auf 0 gesetzt (vglbar mit Items.Clear)
            exponent = 0;
            binärZwischenSumme = 0;

            //macht das Label (durch ButtonKlick) sichtbar
            lblAusgabe.Visible = true;

            //die laenge der Eingabe von der Textbox (bsp.: "hallo" hat die laenge 5)
            int laenge = Convert.ToInt32(txtEingabe.Text.Length);

            //zählerschleife:
            //1. Laufvariable mit Startwert: Index von der Eingabe
            //2. Bedingung: Index groesser gleich 0 
            //3. Dekrementierung der Laufvariable
            for (int index = laenge - 1; index >= 0; index--)
            {
                //bsp: 1.Durchlauf: Wenn die letzte Binärziffer 1 ist...
                //     2.Durchlauf: Wenn die vorletzte Binärziffer 1 ist...
                // bis zur ersten Binärziffer
                if (Convert.ToInt32(Convert.ToString(txtEingabe.Text[index])) == 1)
                {
                    //...dann soll dann soll das Ergebnis der Potenz aufaddiert werden
                    binärZwischenSumme += Math.Pow(2, exponent);
                }//die Rechnung mit 0 ist nicht nötig, da es 0 ergibt und beim aufaddieren nichts verändert wird

                //im Label die Zwischensummen ausgeben, der User wird aufgrund der Geschwindigkeit nur die letzte ZwischenSumme sehen, was auch Ziel ist
                lblAusgabe.Text = Convert.ToString(binärZwischenSumme);
                //Inkrementierung des Exponenten von  0 bis (laenge - 1)
                exponent++;
            }
        }
    }
}


Danke für die Hilfe >>> MFG

Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt
Moderiert von user profile iconChristian S.: Topic aus WinForms verschoben am Sa 14.11.2009 um 17:39


JasonDelife - Do 12.11.09 22:17

Ein paar Ideen:
1. Benne auch die Form richtig.
2. Convert ist veraltet*. Nutze int.Parse(string) und die Instanzmethode ToString().
3. string.Length ist schon ein int und muss nicht extra konvertiert werden.
4. Vermeide Umlaute und Sonderzeichen in Variablennamen.
5. binärZwischenSumme und exponent sollten auf keine Fall public sein! Hier solltest du sie sogar in der Methode deklarieren.

*Es sei denn, du willst strings mit einer Basis ungleich 10 parsen. (Aber das sollst du hier ja selbst lösen.)

Grüße, JasonDelife.


Christian S. - Do 12.11.09 22:21

user profile iconJasonDelife hat folgendes geschrieben Zum zitierten Posting springen:
2. Convert ist veraltet*. Nutze int.Parse(string)
Auch immer einen Blick wert ist TryParse, weil es nicht mit Exceptions um sich wirft, wenn's die Eingabe nicht mag ;-)


ThomAlex - Sa 14.11.09 14:58

ok Vielen Dank

Wüsste jemand wie man dies umgekehrt umsetzt? Also eine Dezimalzahl wird eingegeben und diese soll in Binärcode umgewandelt ausgegeben werden. Bestimmt gibt es dafür eine Methode, aber ich möchte das auch so hinbekommen wie vorhin. Danke schonmal

MFG =)


Christian S. - Sa 14.11.09 18:38

Die Frage wurde (nach einem Schiebeposting in diesem Thread) hier [http://www.c-sharp-forum.de/viewtopic.php?t=95947] erneut gestellt.

Eigentlich eine Umgehung des Schiebeposting-Verbots, aber da es sinnvoll ist, die Frage in einem neuen Thread, lasse ich es mal durchgehen. Ich mache hier aber dicht, damit die Frage nicht an zwei Orten diskutiert wird.