Falsche Ergebnisse beim Programm
-
Ja, da habt ihr recht. Mir fehlen noch einige Grundlagen, doch arbeite ich bereits dran. Wie ich schon gesagt habe, bin ich ein noch relativ neuer C++ Programmier. Doch möchte ich unbedingt dieses Programm programmieren. Ich denke: Übung macht den Meister, vor allem wenn ich Leute kenne, die mir meine Fehler verbessern und auch erklären. Ich hoffe, dass ich euch nicht nerve, denn wahrscheinlich ist das alles "Kinderkram". Aber ich denke, dass es dafür ja Foren gibt, oder?!
Nun klappt fast alles! Doch kann ich leider nur ganze Zahlen eingeben! Ich dachte es liegt daran, da ich alles mit int vereinbart habe bzw in int umgewandelt. Also hab ich alles durch float ausgetauscht, doch der Fehler bleibt! Klicke ich auf OK, dann kommt die Meldung "0.5 ist kein gültiger Gleitkommawert"!
-
@Nanyuki: Bei den verschiedenen Edit-Nummern habe ich versehentlich falsch den Code abgeschrieben: Sorry!!
-
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.
-
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