"Taschenrechner"



  • Also ich hab ne Aufgabe bekommen und werd irgendwie nicht damit fertig.^^
    Wir sollen einen Taschenrechner (ist eig eh nur n Rechner) programmieren.
    Ich habe 2 Edits (Zahl1, Zahl2)
    Ich möchte das ich in "Zahl1" die erste Zahl, und in "Zahl2" die zweite Zahl ist.
    Wenn man auf ein Button klickt werden die beiden Zahlen miteinander Addiert.
    Dies wollt ich machen indem ich einfach den Inhalt von "Zahl1->Text" und den von "Zahl1->Text" jeweils in nen Integer speicher und die dann addiere aba das geht ned weil man nich von Ansi-String auf Integer convertieren kann was kann ich ansonsten machen?

    thx für jede hilfe.



  • stryke schrieb:

    von Ansi-String auf Integer convertieren

    StrToInt ()



  • oder die AnsiString-Memberfunktion ToInt(). Nicht vergessen das ganze in einen try/catch-Block einzuschließen um Umwandlungsfehler abzufangen. Das kann man zwar auch mit StrToIntDef machen, da hat man aber keine schöne Möglichkeit Fehlumwandlungen abzufangen.



  • Da du anscheinend gerade beginnst deine Programmierkünste zu entfalten, hier noch mal etwas genauer:

    try
    {
    int iErgebnis;
    
    iErgebnis = StrToInt(Edit1->Text()) + StrToInt(Edit2->Text());
    
    ShowMessage(IntToStr(iErgebnis)); // da wir einen String und keinen Integer benötigen
    
    }
    catch(...) // wir fangen hier alle Fehler ab.
    {
    Application->MessageBox("Fehler!", "Fehler", 0);
    }
    

    - und * geht genau so. Wenn du die Zahlen durch einander teilen möchtest, wirst du iErgebnis als float definieren müssen. Integer sund ja nur ganze Zahlen.

    Noch viel Spaß...

    Mapp



  • Warum nicht gleich so?

    try
    {
        // Natürlich nur EINEN der Operatoren verwenden ;)
        double dErgebnis = Edit1->Text.ToDouble() +-*/ Edit2->Text.ToDouble();
        ShowMessage(dErgebnis);    // Umwandlung funktioniert automatisch
    }
    catch(...)
    {
        Application->MessageBox("Fehler!", "Fehler", MB_OK);
    }
    

    Dann sind wir nicht auf Integer beschränkt?
    Gruß,
    Christian

    PS: sinnvoll wäre es auch, bei einer Division die zweite Zahl auf 0 zu prüfen und eine spezielle Exception zu werfen, damit man eine konkrete Fehleranzeige einbauen kann, z.B. "Bitte nicht durch 0 dividieren!"



  • Der Code ist vllt. ein bisschen Anfänger freundlicher:

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    //Vereinbarung der Vaiabeln
    int Integer1;
    int Integer2;
    int Ergebnis;
    String Ausgabe;
    
    //Aus den Texten der Edits wird mit StrToInt eine Zahl gemacht,
    //die als Integer gespeichert werden kann.
    Integer1 = StrToInt(Zahl1->Text);
    Integer2 = StrToInt(Zahl2->Text);
    
    //Durchführung der Addition.
    Ergebnis = Integer1 + Integer2;
    
    //Umwandlung des Ergebnisses in einen Text: Hier wird mit IntToStr
    //die Zahl/Integer Ergebnis noch in einen Text umgewandelt,
    //den die MessageBox dann ausgeben kann.
    Ausgabe = IntToStr(Ergebnis);
    
    //Ausgabe des Ergebnisses.
    ShowMessage(Ausgabe);
    }
    

    Ich weiß, dass es ausführlicher kaum noch geht und dass die anderen Codes weitaus besser und effizienter sind. Doch dieser dürfte für einen Anfänger einleuchtender sein.
    Hoff ich jedenfalls 😉



  • Ist ja schön und gut, das ist mit Sicherheit für einen Anfänger besser nachzuvollziehen. Andererseits ist mein Code nicht so kompliziert, daß ein Anfänger das nicht mehr verstehen könnte ... glaube ich ... er ist halt ein bißchen zusammengezogen.

    Alles erstmal egal! Aber warum gehst Du wieder zurück nach int? Was spricht dagegen, den Taschenrechner von Anfang an für doubles zu implementieren?
    Wie Mapp schon sagte, muß das Ergebnis bei einer Division ohnehin eine Fließkommazahl sein.

    Viele Grüße,
    Christian



  • hee danke ich hätts eig auch mit der ersten erklärung verstanden aba danke für eure hilfe.

    das mit try{}catch{} haben wir eh schon gelernt ich wusste nur nicht wie man von string auf int convertiert.^^

    //edit:
    Ich hätte jetzt aba noch ne Frage.
    Ich möchte die Font vom Programm auf eine die ich Downgeloaded hab ändern.
    Wenn ich damit zu nen anderen Computer gehe und dieser hat nicht die Font ändet sich diese auf die default um. (ist eh logisch)
    Wie kann ich es machen das das Programm die Font aus dem Ordner ladet in dem sich das Programm befindet?



  • stryke schrieb:

    Ich hätte jetzt aba noch ne Frage.

    Bitte die Faustregel beachten: ein Thema pro Thread, ein Thread pro Thema. Danke!

    PS. Und in Zukunft bitte aussagekräftige Überschriften verwenden!


Anmelden zum Antworten