Falsche Ergebnisse beim Programm



  • noch zwei weitere Anregungen:
    - Du solltest vllt abprüfen, dass genau ein Feld mit einem Fragezeichen versehen wurde
    - Application->MessageBox aus diesen if-Kaskaden rausnehmen und am Ende einmal aufrufen falls die Ausgabeart sich mal ändert.



  • @akari

    Ich habe deinen Vorschlag ausprobiert und es funktioniert!! Danke!! Doch auch hier die Frage. Wie kann ich z.B. 0.5 eingeben? Wahrscheinlich irgendwie mit float!!! Doch bei mir kommt dann nur die eben schon gesagte Fehlermeldung! Kann ich denn auch anstatt 0 ein Fragezeichen eingeben, damit deutlicher wird, welche Variabel gesucht ist??

    Vielen Dank

    lg, freakC++



  • Hallo

    Ja 0.5 geht nur mit float/double.

    Welche Fehlermeldung du meinst weiß ich nicht, vermutlich weil du noch StrToFloat und StrToFloat einsetzen must.
    Sicher kannst du in ein Textfeld auch "?" eingeben. Aber mach dir klar das in int oder float eben nur Zahlen stehen können, aber keine Zeichen. Deshalb mein Vorgehen, 0 als Leeren Wert anzusehen.

    bis bald
    akari



  • Ich habe jetzt alles durch Float ersetzt, doch leider passiert nun gar nichts mehr, wenn ich auf OK klicke! Warum? Wenn ich nun in das Feld für die Potenz beispielsweise 0.5 eingeben, dann erscheint wieder die Meldung "0.5 ist kein gültiger Gleitkommawert"

    Hier ist der "aktuelle" Quelltext:

    void __fastcall TForm1::Button7Click(TObject *Sender)
    {
       GM1 = StrToFloat (Edit3->Text); // Damit du nicht Probleme bekommst wenn Umwandlung nicht möglich, zum Beispiel bei "?"
       V1 = StrToFloat (Edit4->Text);
       R1 = StrToFloat (Edit5->Text);
       POT1 = StrToFloat (Edit6->Text);
    
       if (GM1 = 0) // GM ist 0, also soll es berechnet werden
       {
        String Ergebnis1 = V1 * pow(R1, POT1);
        Application->MessageBox (Ergebnis1.c_str (), "", 0);
       }
    }
    

    Vielen Dank
    lg, freakC++



  • Hallo,

    das liegt daran, dass der Dezimal-Separator im deutschen System ein "Komma" und kein "Punkt" ist. 0.5 ist daher nicht 0,5 <- versuch es damit

    LG
    Stefan



  • Das habe ich schon! Dadurch lässt sich das Problem leider nicht lösen!! Wenn ich auf OK passiert immer noch gar nichts und ich kann immer noch nicht 0.5 eingeben!!

    Außerdem gibt es immer eine C++ Warnung. Sie lautet:

    [C++ Warnung] Unit1.cpp(243): W8060 Möglicherweise inkorrekte Zuweisung

    Vielen Dank
    freakC++



  • Hallo

    Liest du eigentlich auch was wir schreiben?! Oder was dir der Kompiler mit der Warnung sagen will? 😡

    Du bringst Zuweisung (ein 🙂 und Vergleich (zwei ==) durcheinander.

    Das ist ein Vergleich!

    if (GM1 == 0)
    

    Desweiteren kann man Fließkommatypen wie float und double nicht so einfach auf Gleichheit testen. Da solltest du dir besser eine andere Bedingung überlegen, zum Beispiel das angesprochende Fragezeichen

    if (Edit1->Text == "?")
    

    bis bald
    akari



  • Oh, sry!!! Da habe ich wohl etwas übersehen!! Ich wollte gerne deinen Vorschlag übernehmen wie du es im dritten Beitrag gesagt hast. Kann man dabei nicht irgendwie auch Dezimalzaheln vereinbaren!!! Oder führt kein anderer Weg vorbei, den Befehl ganz anders aufzubauen??

    Vielen Dank
    freakC++



  • Ahrg. <Geräusch eines (mehrfach) auf den Tisch schlagenden Kopfes>.

    Ich denke jeder weitere Hilfe ist sinnlos... Beweg Deinen Arsch, schalte Dein Hirn ein und wirf mal einen Blick in die Hilfe.



  • Hallo

    freakC++ schrieb:

    Oh, sry!!! Da habe ich wohl etwas übersehen!! Ich wollte gerne deinen Vorschlag übernehmen wie du es im dritten Beitrag gesagt hast.

    Da war ja auch noch von Integern die Rede, nicht von Fließkommazahlen.

    Kann man dabei nicht irgendwie auch Dezimalzaheln vereinbaren!!! Oder führt kein anderer Weg vorbei, den Befehl ganz anders aufzubauen??

    Vergleiche für Fließkommazahlen lassen sich nur sinnvoll mit einer Epsilon-Betrachtung durchführen, d.h. es wird ggeprüft ob der Wert A nah genug an Wert B liegt. In C++ sieht das zum Beispiel so aus :

    float a = ...;
    float b = ...;
    float eps = 0.001; // Genauigkeit drei Stellen nach dem Komma
    if (fabs(a - b) < eps)
    {
      // a und b sind ausreichend nahe beieinander
    }
    

    Für den Sonderfall der Prüfung auf 0 kann man das ganze verkürzen :

    float a = ...;
    float eps = 0.001; // Genauigkeit drei Stellen nach dem Komma
    if (fabs(a) < eps)
    {
      // a is ausreichend nahe an 0
    }
    

    bis bald
    akari


Anmelden zum Antworten