Autor Beitrag
ThomAlex
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 58

Windows 7
C# (VS08) Games via XNA (privat) oder WinForms (Schule)
BeitragVerfasst: Do 12.11.09 21:01 
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)

ausblenden volle Höhe 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 81

Windows 7 Professional
C# (Visual Studio 2008 Professional), Java (NetBeans IDE 6.7)
BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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 ;-)

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
ThomAlex Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 58

Windows 7
C# (VS08) Games via XNA (privat) oder WinForms (Schule)
BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 14.11.09 18:38 
Die Frage wurde (nach einem Schiebeposting in diesem Thread) hier 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.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Dieses Thema ist gesperrt, Du kannst keine Beiträge editieren oder beantworten.

Das Thema wurde von einem Team-Mitglied geschlossen. Wenn du mit der Schließung des Themas nicht einverstanden bist, kontaktiere bitte das Team.