mikrocontroller.net

Forum: PC-Programmierung Hilfe zu Programm Rechner


Autor: Hsch (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe mir mal in C# einen kleinen Taschenrechner programmiert.
Allerdings klappt es noch nicht so wie bei dem Windows Rechner, dass
ich zur Laufzeit die Zahl im Textbox in Dezimal bzw. Binärumwandeln
kann. Ich habe eine RadioButton mit dem ich die Zahl in der TextBox in
eine Dezimalzahl bzw Binärwert umwandeln kann. Ich möchte mein Programm
so haben, dass wenn ich einen RadioButton aktiviere, dass der Wert in
der TextBox dementsprechen umgewandelt wird.

Autor: Thomas L. (tom)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo :)

Nunja - ich kann dir zu einem raten (ich habs mir nicht genauer
angesehen). Lasse im Hintergrund immer eine Zahl (von mir aus Double)
mitlaufen, die sagt, welcher Wert gerade im Feld steht.

Die Ausgabe nach Tastendruck oder eben auch nach Ändern des
Darstellungsmodus kannst du einfach mittels:

string x = zahl.ToString("X"); für hexadezimalen Output


hier findest du mögliche format - strings:
http://alexonasp.net/samples/stringformatting/

Autor: Hsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Thomas.

Hmm meinst du damit wird es gehen.
Was meinst du damit:

Nunja - ich kann dir zu einem raten (ich habs mir nicht genauer
angesehen). Lasse im Hintergrund immer eine Zahl (von mir aus Double)
mitlaufen, die sagt, welcher Wert gerade im Feld steht.

Autor: Thomas L. (tom)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habs mir ehrlich gesagt nicht genau angesehen ...

Was ich mit dem Absatz sagen wollte:
Es wäre eine Möglichkeit, die internen Daten von den angezeigten zu
trennen, so musst du nicht dauernd unterscheiden, was denn nun gerade
angezeigt wird :)

Wenn du konkrete Fragen hast -> Mail an somnaticuser@hotmail.com :)

Autor: Hsch (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Also mit meinem Rechner bin ich noch nicht weitergekommen.
Wie gesagt der Rechner sollte sich so verhalten wie der von Windows.
Ich kann ohne Probleme einen Binärwert in Hex oder Dezimal umwandeln
und umgekehrt. Nur wenn ich zum Beispiel Dez angewählt habe und gebe
anschließend eine Zahl ein und diese soll dann in Bin während der
Programmlaufzeit umgewandelt werden, dann funzt das nicht.

Im Anhang befindet sich die C# Datei.

Was müsste ich in meinem Programm andern damit die so funktioniert?

Autor: Thomas L. (tom)
Datum:
Angehängte Dateien:
  • tr.zip (60 KB, 15 Downloads)

Bewertung
0 lesenswert
nicht lesenswert
Hallo Hsch

Ich habe dir schnell eine Beispiel - Applikation geschrieben. Sie ist
sicher nicht perfekt - mir fallen da auf der Stelle ein paar Dinge ein
die man besser machen sollte, z.b. das Initialisieren der Buttons usw.
- aber sie funktioniert. Ausserdem kann sie noch nicht rechnen, aber
auch das sollte nicht allzuschwer sein zu implementieren (alten Wert
bei Buttonklick speichern, display rücksetzen, neuen Wert speichern und
bei klick auf den nächsten *,+,/,- oder = button den alten mit dem neuen
mit der entsprechenden Operation verknüpfen.

Sieh dir das mal an. Das Prinzip ist das, welches ich pben geschrieben
habe. Im Hintergrund läuft andauernd ein Integer mit, welcher den
aktuellen Wert speichert. Dieser wird nun je nach eingestelltem Modus
in einen String derjenigen Repräsentation umgewandelt
(Convert.ToString(int i, int basis)) und dann in der textBox
dargestellt.

Viel Spass :)

Autor: Hsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Thomas,

erstmal recht herzlichen Dank für deine Unterstützung.
Ich habe mir mal den Code angeschaut.
Leider kann ich das Projekt nicht öffnen, da ich
nur die Version 7.1 von Microsoft Visual Studio .NET habe.
Wie kann ich trotz all dem das Projekt mit meiner
Entwicklungsumgebung öffnen?

Autor: ToM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
lade dir von Microsoft.com die Visual Studio 2005 C# Express Edition
herunter.
Ist gratis ..

Autor: Hsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Gibt es in C# eine Funktion mit der man, wenn man einen Button drückt,
z.B. voher war in der Integer Variable "678", eine Stelle
löschen/streichen kann? So dass die Integer Variable nur noch "67"
enthält?

Autor: ToM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
2 Möglichkeiten:
* durch 10 dividieren und dann Math.Floor darauf aufrufen (das liefert
das ganzzahlige Ergebnis).

* In einen String Konvertieren und dann den Substring nehmen von der
ersten bis zur vorletzten Stelle. Dann wieder in einen Int Parsen
(Int32.Parse())

Autor: Hsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok super ! Das werd ich mal versuchen.

Die nachfolgenden Funktion Funktion ohne Problem.
Jetzt möchte ich aber nicht einen Int Wert in einen String umwandeln,
sonder einen Double Wert(Kommazahl) in einen String. Wie könnte ich
dies realisieren? Die benötige ich weil ich möchte mit dem Rechner auch
Kommazahlen eingeben können.

public int MakeIntFromString(string s, int basis)
    {
      try
      {
        return Convert.ToInt32(s, basis);
      }
      catch
      {
        return 0;
      }
    }

    public string MakeStringFromInt(int i, int basis)
    {
      try
      {
        return Convert.ToString(i, basis);
      }
      catch
      {
        return "";
      }
    }

Autor: ToM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
genau gleich ...

double d = 2.4;
return Convert.ToString(d);

die frage ist jetzt halt was du anzeigen lassen willst wenn man auf hex
umschaltet ... beispielsweise machts der Windows Rechner so, dass er
einfach auf die nächste Ganzzahl kürzt.

Autor: Hsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja das funktioniert auch prima. Nur lese ich meine Zahlen mit diese
Funktion ein. Mit Int Werten funktioniert es super, nur mit den
Kommazahlen, da weiss ich nicht wie man dies damit lösen könnte.


private void buttonPressed(char c)
{
 // A button has been pressed ...
 if (Dez_radioButton.Checked)
 {
  string s = MakeStringFromInt(curValue, 10);
  s += c;
  curValue = MakeIntFromString(s);
  textBox1.Text = MakeStringFromInt(curValue, 10);
 }
 else if (Bin_radioButton.Checked)
 {
  string s = MakeStringFromInt(curValue, 2);
  s += c;
  curValue = MakeIntFromString(s);
  textBox1.Text = MakeStringFromInt(curValue, 2);
 }
 else if (Hex_radioButton.Checked)
 {
  string s = MakeStringFromInt(curValue, 16);
  s += c;
  curValue = MakeIntFromString(s);
  textBox1.Text = MakeStringFromInt(curValue, 16);
 }
}

Autor: ToM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
du könntest es so machen, dass die Variable die im Hintergrund mitläuft
ein double und kein int ist ...

beim Umschalten wird dann zuerst der Double in einen Int umgewandelt
und dann entsprechend dargestellt ..

Autor: Hsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Tom,

so ich habe mir nun mal die Gratis Version Visual Studio 2005 C#
Express Edition heruntergeladen. Die Datei ist ja nur ungefähr 3MB
groß.
Das Programm müsste doch sehr viel großer sein oder? Fehlen da noch
einige Dinge? Ist diese version ohne einschränkungen?

Autor: Hsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich komme nochmal auf das andere Problem zurück.
Und zwar müsste ich dann die Variable curValue in eine double
umändern.

Wie müsste ich dann dies in diese Funktion unterbringen?

private void buttonPressed(char c)
{
 // A button has been pressed ...
 if (Dez_radioButton.Checked)
 {
  string s = MakeStringFromInt(curValue, 10);
  s += c;
  curValue = MakeIntFromString(s);
  textBox1.Text = MakeStringFromInt(curValue, 10);
 }
 else if (Bin_radioButton.Checked)
 {
  string s = MakeStringFromInt(curValue, 2);
  s += c;
  curValue = MakeIntFromString(s);
  textBox1.Text = MakeStringFromInt(curValue, 2);
 }
 else if (Hex_radioButton.Checked)
 {
  string s = MakeStringFromInt(curValue, 16);
  s += c;
  curValue = MakeIntFromString(s);
  textBox1.Text = MakeStringFromInt(curValue, 16);
 }
}

Autor: Hsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das mit den Kommazahlen will einfach nicht funktionieren.

private void button12_Click(object sender, System.EventArgs e)
{
 buttonPressed('.');
}

Wenn ich den Button (button12) drücke, dann soll das Komma mit
eingefügt werden. Aber es klappt über haupt nicht.

Autor: Hsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kann da machen was ich will, ich bekomme kappier es nicht warum dies
nicht so geht. Ich verweifle noch!

Autor: Hsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja und noch was, wenn ich dies so mache wie Tom beschrieben hat, das
geht doch nicht. Weil wenn ich eine Kommazahl dann in eine Int umwandle
dann ist es ja gar keine Kommazahl. Das verstehe ich überhaupt nicht.
Ich brächte nur mal eine ANregung wie genau ich die Funktion
private void buttonPressed(char c) abändern muss!

Autor: ToM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Funktion Button Pressed, musst du gar nicht ändern - ich kann mir
diese Woche den Source Code nicht ansehen, erst nächste Woche wieder.

Im Prinzip basiert alles darauf, dass das Programm nicht das anzeigt,
was es intern speichert (angezeigt wird ein String, gespeichert ein
Double - in der alten Version halt noch ein Int).

Je nachdem was du machen willst, musst du den String dementsprechend
darstellen lassen.

Kann es sein, dass du noch nicht allzuviel Programmiererfahrung hast -
denn hier gehts ja gerade um die kompletten Basics.

Autor: Hsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
private void button12_Click(object sender, System.EventArgs e)
{
 buttonPressed('.');
}

Wenn ich diese Funktion ausführe indem ich den button12 drücke, dann
sollte doch das eigentlich funktionieren. Und zwar wird dann die
Funktion buttonPressed ausgeführt. Und dieser Funktion wird dann dieses
Zeichen '.' übergeben. Daraufhin müsste doch dann ein Komme im String
vorhanden sein oder ?
Oder müsste ich in der Funktion buttonPressed diesen Eintrag abändern

String s = MakeStringFromInt(curValue, 10);

Autor: ToM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du könntest das Ganze schrittweise debuggen, dann siehst du sofort, wo
der . verloren geht.

Autor: Hsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

endlich habe ich mein großes Problem gelöst bekommen.
Jetzt funzt alles mal soweit.
Allerdings bei der Verwendung von Hex gibt es noch ein kleines Problem.
Wenn ich z.B. den Button für den Buchstaben "a" drücke,
denn soll die Funktion buttonPressed diese auch verarbeiten.
Wenn ich dann auf Dez umstelle erscheint in der TextBox1 "0".
Wahrscheinlich geht der Buchstabe "a" hier curDoubleValue =
System.Convert.ToDouble(curStringValue); verloren.

private void bB_Click(object sender, System.EventArgs e)
{
 buttonPressed('b');
}

private void buttonPressed(char c)
{
 try
 {
  string s = curStringValue + c;
  curStringValue +=c;
  textBox1.Text = curStringValue;

  curDoubleValue = System.Convert.ToDouble(curStringValue);
  curIntValue = System.Convert.ToInt32(curDoubleValue);
 }
 catch
 {
 }
 i = false;
}

Autor: ToM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich schätze eher dass eine Exception auftritt, die zwar abgefangen, aber
nicht behandelt wird.

Das Problem ist:

Es steht dort:
du tippst ein: a

der string ist dann "a".

Ein ToDouble von "a" gibt es nicht. -> Exception

Wenn du im Hex oder Binary Modus auch Kommazahlen willst, erfordert das
einiges an Zusatzaufwand - nicht umsonst ist es im Windows Rechner nicht
möglich :) - Klar - es geht, aber ist es dir das wert ?

Autor: Hsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi ToM,

ja wie würdest du dieses Problem angehen? Also bei String do Double
gibt es jetzt Probleme mit dem umwandeln von "a" "b" usw.

Autor: ToM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Keine Ahnung - Überleg dir halt mal wie ein Double als String im
Hexadezimalen Format aussehen müsste.
Trennen beim Kommapunkt ?

Autor: Hsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich habe da noch ein Problem und zwar komme ich da nicht weiter beim
umwandeln.
Wenn ich zwei mal den Button A drücke, dann soll dieser Wert in Dezimal
umgewandelt werden. Wie konnte ich dies in C# realisieren?

Autor: Hsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da ich die Funktion "buttonPressed(char c)" verwende, werden erstmal
alle Wert in dieser Funktion gesammelt. Wie könnte ich dann eine Hex
Zahl z.B. AA hex in einen Integer bzw. Double Wert
umweandeln/verarbeiten?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.