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 Funktionsweise

    des 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 answer

    double 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.


Anmelden zum Antworten