nan Ausgabe bei Berechnung einer Fläche
-
Hallo Zusammen. Ich bin recht neu im Gebiet und bräuchte eure Unterschützung.
Für eine Aufgabenstellung Flächenberechnung eines Dreiecke mit dem Satz des Heron bekomme ich in meinem Programmcode nur die Endausgabe nan. Nach erfolgloser Suche komm ich nun nicht weiter.
Mir ist aufgefallen, wenn ich meine Variablen feste Werte zuweise bekomme ich eine berechnete Ausgabe. Wo liegt mein Fehler Danke für eure Hilfe.#include <iostream>
#include <cmath>
using namespace std;int main()
{float a;
float b;
float c;
float s = (a + b + c) / 2;
float flaeche;
// float flaeche2;cout << "Bitte gib Seite a ein" << endl;
cin >> a;cout << "Bitte gib Seite b ein" << endl;
cin >> b;cout << "Bitte gib Seite c ein" << endl;
cin >> c;if (a + b > c)
{flaeche = sqrt (s * (s - a) * (s - b) * (s-c));
// Möglichkeit 2
// flaeche2 = sqrt (flaeche);cout << flaeche << endl;
}
else
{
cout << "falsche Maße" << endl;
}
system("PAUSE");
return EXIT_SUCCESS;
}
-
@steven-w sagte in nan Ausgabe bei Berechnung einer Fläche:
int main()
{
float a;
float b;
float c;
float s = (a + b + c) / 2;Weder
a
,b
nochc
haben einen definierten Wert. Du darfst hier noch nicht mit diesen Variablen rechnen (das ist undefiniertes Verhalten).
Der Wert vons
wird IN DIESER ZEILE berechnet, also BEVOR du den Benutzer die Werte eingeben lässt. Diese Zuweisung passiert an dieser Stelle EINMALIG und hängt nicht davon ab, was später ina
,b
oderc
steht.TLDR: Verschiebe die Zuweisung von s soweit nach hinten, dass dort schon gültige Werte in
a
,b
undc
stehen.WICHTIGER Ratschlag: AKTIVIERE COMPILERWARNUNGEN! (in all-Caps, weil so wichtig). Dann sagt dir dein Compiler sowas wie
warning: variable 'a' is uninitialized when used here [-Wuninitialized] float s = (a + b + c) / 2; ^
-
float s = (a + b + c) / 2;
berechnest du zu früh - lass dir den Wert vons
mal ausgeben (dies ist dann übrigens UB, d.h. es kann jeder mögliche Wert herauskommen).Erst nach der Eingabe von den 3 Werten kannst du
s
berechnen lassen.
-
Super danke für eure Hilfe, es hat funktioniert und ich habs verstanden.
-
@wob sagte in nan Ausgabe bei Berechnung einer Fläche:
WICHTIGER Ratschlag: AKTIVIERE COMPILERWARNUNGEN!
Und beachte die Warnungen und beseitige deren Ursache.
Wenn du den Grund der Warnung (noch) nicht verstehst, kannst du gerne im Forum fragen.
-
Könnt ihr mir sagen, wo ich in codeblocks compilerwarnungen aktiviere?
-
@steven-w sagte in nan Ausgabe bei Berechnung einer Fläche:
Könnt ihr mir sagen, wo ich in codeblocks compilerwarnungen aktiviere?
Menüpunkt "Project"->"Build Options"
Reiter "Compiler Settings" und da "Compiler Flags" im Bereich "Warnings" (etwas runter scrollen)Wie der Schalter konkret heißt, hängt vom Compiler ab -Code::Blocks kann mit vielen Compilern umgehen.
Beim gcc wäre das -Wall (war bei Neuinstallation und neuem Projekt schon ausgewählt)
-Wextra und -Wpedantic kannst du auch nehmen - das gibt noch mehr Warnungen, denn -Wall hat doch nicht alle.Weiter unten kannst du auch die Optimierungsstufe einstellen, weiter oben den Sprachstandard.