probleme mit funktionswerten
-
Hallo, bin neu hier Und habe auch gleich das erste Problem
Die Lösung einer Aufgabe für die Schule, die benotetet wird, ist dieses Programm, welches
Mittelwerte berechnen soll.
Ich erkläre jetzt einfach mal wie ich mir die Funktionsweisedes Programmes gedacht habe und sage dann was nicht klappt :D.
Die Funktion int_main wird als erstes ausgeführt. Sie ruft die Funktion get_value auf. Die
Funktion get_value hat die aufgabe den variablen a und b einen wert von der tastatur
zuzuweisen. Sie "returnt" dann auch genau diese Werte. Wieder an die Funktion int_main.
Int_main prüft dann ob die variablen a und b gleich 0 oder negativ sind. Sind sie null oder
negativ bekommt der anwender die möglichkeit die werte für die variablen a und b
nocheinmal neu einzugeben. Tut er das, wird die Funktion get_value einfach nochmal
aufgerufen und die Werte werdne nochmals auf 0 oder negativ geprüft. Gibt der
Anwender die Werte nicht erneut ein, wird der variable für bool variable für "null" und
"negativ" der entsprechende Wert zugeordnet und die Funktion get_mean wird
aufgerufen. Die Funktion get_mean weisst den varaiblen a und b dann die Werte zu, die in
der Funktion get_value von der tastatur abgegriffen wurden. Je nach dem welche Werte
die bool Varaiblen für "null" und "negativ" haben, werden die Ergebnisse berechnet. Wenn
"a" zum Beispiel negativ ist und "b" positiv, dann soll der geometrische Mittelwert nicht
berechnet werden, da -a * b negativ ist und komplexe Wurzel nicht berechnet werden
sollen.
So soll das ganze klappen. Die Vorgabe war eben KEINE globalen varaiblen zu benutzten
und die Berechnung des Mittelwertes in einer gesonderten Funktion zu vollziehen. Die
Wertezuweisung von der Tastatur ist auch in einer gesonderten Funktion, damit ich die
Zuweisung beliebig oft aufrufen kann, falls ein wert eben null oder negativ ist.
Nun zu den Problemen:
1. Nachdem ich den ersten Wert eingegeben habe und Enter drücke um Wert 2
einzugeben, kommt die Windows-Fehlermeldung "*.exe funktioneirt nicht mehr".
2. Ich bin mir sicher dass die Argumente mit denen ich die Funktionen aufrufe bzw.
Return-Werte von Funktionen beziehe falsch sind. Ich weiss nur nicht wie sie richtige
wären.
Schonmal rießen Dank für die Hilfe!
Hier der Quellcode:
// mean_values.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//#include "stdafx.h"
#include <math.h>bool itv_neg; // bool variable for case that a or b is negativ
bool itv_zero; // bool variable for case that a and/or b are zero
bool input_user; // varaible for user answerdouble get_value(double a_2, double b_2)
{
printf("Bitte geben sie den 1. Wert ein");
scanf_s("%d", a_2);
printf("Bitte geben sie den 2. Wert ein");
scanf_s("%d", b_2);return (a_2, b_2);
}void get_mean(double a_1, double b_1)
{
double art_mean, geo_mean, hrm_mean, hrm_mean_mi;a_1 = get_value(a_1, 0);
b_1 = get_value(b_1, 0);if ((itv_zero = false) && (itv_neg = false))
{
art_mean = ( (a_1 + b_1) / 2);
geo_mean = (sqrt(a_1 * b_1) );
hrm_mean = (2 / ( (1/a_1) + (1/b_1) ));
hrm_mean_mi = (1 / hrm_mean);
}
else if( (itv_zero = false) && (itv_neg = true))
{
art_mean = ( (a_1 + b_1) / 2);
//geo_mean = (sqrt(a_1 * b_1) );
hrm_mean = (2 / ( (1/a_1) + (1/b_1) ));
hrm_mean_mi = (1 / hrm_mean);
}
else if ((itv_zero = true) && (itv_neg = false))
{
art_mean = ( (a_1 + b_1) / 2);
geo_mean = (sqrt(a_1 * b_1) );
//hrm_mean = (2 / ( (1/a_1) + (1/b_1) ));
//hrm_mean_mi = (1 / hrm_mean);
}
else if ((itv_zero = true) && (itv_neg = true))
{
art_mean = ( (a_1 + b_1) / 2);
//geo_mean = (sqrt(a_1 * b_1) );
//hrm_mean = (2 / ( (1/a_1) + (1/b_1) ));
//hrm_mean_mi = (1 / hrm_mean);
}//Werte ausgeben PRINTF() ...
}int main()
{
double a_0, b_0;get_value(a_0, b_0);
if (( (get_value(a_0, 0) > 0) && (get_value(b_0, 0) < 0) ) || ( (get_value(a_0, 0) < 0) && (get_value(b_0, 0) > 0) )) // -a und +b oder +a und -b = sgn(-)
{
printf("Einer der Werte ist negativ, die wurzel kann deshalb nicht berechnet werden. Möchten sich die Eingabe wiederholen? Y/N");
scanf("%b", input_user);if (input_user = 'Y')
{
get_value(a_0, b_0);
}
else if (input_user = 'N')
{
get_mean(a_0, b_0);
itv_neg = true;
}
}else if (( (get_value(a_0, 0) > 0) && (get_value(b_0, 0) > 0) ) || ( (get_value(a_0, 0) < 0) && (get_value(b_0, 0) < 0) )) // -a und -b oder +a und +b = sgn(+)
{
itv_neg = false;
}else if (( (get_value(a_0, 0) == 0) || (get_value(b_0, 0) == 0) )) // a = 0 und/oder b = 0
{
printf("indestens einer der Werte ist Null. Das harmonsche Mittel kann somit nciht berechnet werden. Möchten sich die Eingabe wiederholen? Y/N");
scanf("%b", input_user);if (input_user = 'Y')
{
get_value(a_0, b_0);
}
else if (input_user = 'N')
{
get_mean(a_0, b_0);
itv_zero = true;
}
}else if (( (get_value(a_0, 0) != 0) && (get_value(b_0, 0) == 0) ) || ( (get_value(a_0, 0) == 0) && (get_value(b_0, 0) != 0) ) || ( (get_value(a_0, 0) != 0) && (get_value(b_0, 0) != 0) )) // (a = 0 und b <> 0) oder (a <> 0 und b = 0) oder (a<>0 und b <> 0)
{
itv_zero = false;
}return (itv_neg, itv_zero);
}
-
Ich rate Dir, einfach mal Deine Anwendung zu *debuggen*. Dafür drückst Du anstelle von F5 (ausführen) einfach "F10"... und dann gehst Du jeden Befehl durch und schaust, was für ein Problem Du hast. Auch kannst Du mit der Maus über Variablen gehen und siehst deren Inhalt...
Auch siehst Du danngenau *wo* Deine Anwendung abstürzt.