problem mit dem modulo in einer Funktion



  • Hi,
    habe einen taschenrechner programmiert mit Hilfe von Funktionen, dieser läuft auch, bis zu dem Punkt an dem ich die Rechenoperation (%) modulo einsetze. hier nun mein Quelltext:
    float summe(float zahl1, float zahl2)
    {
    float ergebniss;
    ergebniss=zahl1+zahl2;
    return (ergebniss);
    }

    float minus(float zahl1, float zahl2)
    {
    float ergebniss;
    ergebniss=zahl1-zahl2;
    return (ergebniss);
    }

    float multiplikation(float zahl1, float zahl2)
    {
    float ergebniss;
    ergebniss=zahl1*zahl2;
    return (ergebniss);
    }

    float dividieren(float zahl1, float zahl2)
    {
    float ergebniss;
    ergebniss=zahl1/zahl2;
    return (ergebniss);
    }

    float modulo(float zahl1, float zahl2)
    {
    float ergebniss;
    ergebniss=zahl1%zahl2; // Hier scheint der Fehler zu sein Oo
    return (ergebniss);
    }

    #pragma argsused
    int main(int argc, char* argv[])
    {
    int zahl1;
    char oper;
    int zahl2;
    int ergebniss;

    printf("Zahl 1: \t");
    cin>>zahl1;
    printf("Wähle einen Operator? (+) (-) (*) (/) (%) \t");
    cin>>oper;

    switch(oper)
    {
    case '+': printf("Zahl 2: \t");
    cin>>zahl2;
    ergebniss=summe(zahl1,zahl2);
    printf("Ergebniss: %i \n", ergebniss);
    break;

    case '-': printf("Zahl 2: \t");
    cin>>zahl2;
    ergebniss=minus(zahl1,zahl2);
    printf("Ergebniss: %i \n", ergebniss);
    break;

    case '*': printf("Zahl 2: \t");
    cin>>zahl2;
    ergebniss=multiplikation(zahl1,zahl2);
    printf("Ergebniss: %i \n", ergebniss);
    break;

    case '/': printf("Zahl 2: \t");
    cin>>zahl2;
    ergebniss=dividieren(zahl1,zahl2);
    printf("Ergebniss: %i \n", ergebniss);
    break;
    case '%': printf("Zahl 2: \t");
    cin>>zahl2;
    ergebniss=modulo(zahl1,zahl2);
    printf("Ergebniss: %i \n",ergebniss);
    break;

    default : printf("Sie sollen einen Operator wählen.");
    break;
    }
    getchar();
    return 0;

    Bitte um Hilfe,der Compiler gibt mir immer aus: E2060 Unzulässige Verwendung einer Fließkommazahl !!! Wär echt nett wenn mir jemand hilft danke !



  • Modulo gibt doch den Rest aus wenn man zwei ganzzahlige Werte teilt. Wenn man mit Kommazahlen arbeitet gibts keinen Rest!

    => falls wirklich erwünscht erst umwandeln.

    Grüße,

    der Ewigsuchende



  • Der Modulo-Operator ist nur für Ganzzahlen definiert, da er ja den Rest einer Ganzzahlendivision zurückgibt. D.h.

    5 % 2 = 1; denn die 2 geht zweimal in die 5; Rest 1.
    

    Da eine Gleitpunkt-Division den Rest mitteilt (5 / 2 == 2,5), ist der Modulo-Operator - wie bereits erwähnt - nicht dafür definiert.

    Caipi


Anmelden zum Antworten