Taschenrechner



  • csa197 schrieb:

    Ich übergebe doch keinen char oder....

    Du übergibst beim Aufruf der Funktion die Variable rechnung. Und die ist vom Typ char.



  • Da deine Frage immer wieder vorkommt, hier mal ein Ansatz, wie es prinzipiell funktionen kann, Division durch 0, Überläufe usw. sowie Eingabeprüfungen der double-Werte fehlen noch:

    #include <stdio.h>
    #include <stdlib.h>
    
    double funktionadd(void);
    double funktionsub(void);
    double funktionmul(void);
    double funktiondiv(void);
    
    int main()
    {
        char wahl;
        double ergebnis;
    
        do
        {
            printf ("======== W I L L K O M M E N ========");
            printf ("Sie haben folgende Funktionen zur Verfügung:\n\n");
            printf ("1...Addition\n 2...Subtraktion\n 3...Multiplikation\n 4...Division\n 5...Potenz\n 6...Zifferndarstellung umrechnen\n 7...Quersumme berechnen\n 8...Quersumme berechnen (endrekursiv)\n 0...Beenden\n");
            printf ("\n Ihre Wahl:");
            wahl=getchar(); while(wahl!='\n' && getchar()!='\n');
    
            switch (wahl)
            {
            case '1':
                    ergebnis=funktionadd ();
                    printf ("\n Ergebnis:%f\n\n", ergebnis);
                    break;
            case '2':
                    ergebnis=funktionsub ();
                    printf ("\n Ergebnis:%f\n\n", ergebnis);
                    break;
            case '3':
                    ergebnis=funktionmul ();
                    printf ("\n Ergebnis:%f\n\n", ergebnis);
                    break;
            case '4':
                    ergebnis=funktiondiv ();
                    printf ("\n Ergebnis:%f\n\n", ergebnis);
                    break;
            case '0': break;
    
            default:
                    puts ("\nFalsche Eingabe");
            }
        } while( wahl!='0' );
    }
    
    double funktionadd ()
    {
        double zahl1,zahl2,ergebniss;
        printf ("\n Sie haben Addition gewählt:\n Geben Sie die erste Zahl ein:");
        scanf("%lf",&zahl1);while( getchar()!='\n');
        printf("\nGeben sie bitte Zahl2 ein : ");
        scanf("%lf",&zahl2);while( getchar()!='\n');
        ergebniss=zahl1+zahl2;
        return ergebniss;
    }
    
    double funktionsub ()
    {
        double zahl1,zahl2,ergebniss;
        printf ("\n Sie haben Subtraktion gewählt:\n Geben Sie die erste Zahl ein:");
        scanf("%lf",&zahl1);while( getchar()!='\n');
        printf("\nGeben sie bitte Zahl2 ein : ");
        scanf("%lf",&zahl2);while( getchar()!='\n');
        ergebniss=zahl1-zahl2;
        return ergebniss;
    }
    
    double funktionmul ()
    {
        double zahl1,zahl2,ergebniss;
        printf ("\n Sie haben Multiplikation gewählt:\n Geben Sie die erste Zahl ein:");
        scanf("%lf",&zahl1);while( getchar()!='\n');
        printf("\nGeben sie bitte Zahl2 ein : ");
        scanf("%lf",&zahl2);while( getchar()!='\n');
        ergebniss=zahl1*zahl2;
        return ergebniss;
    }
    
    double funktiondiv ()
    {
        double zahl1,zahl2,ergebniss;
        printf ("\n Sie haben Division gewählt:\n Geben Sie die erste Zahl ein:");
        scanf("%lf",&zahl1);while( getchar()!='\n');
        printf("\nGeben sie bitte Zahl2 ein : ");
        scanf("%lf",&zahl2);while( getchar()!='\n');
        ergebniss=zahl1/zahl2;
        return ergebniss;
    }
    


  • Ich persönlich würde ja dieses ewige Gefrage nach Zahl1 und Zahl2 aus den Funktionen auslagern.
    Denn eine Berechnungsfunktion sollte sich nicht um Ein-/Ausgabe kümmern.



  • hier mal eine sexy variante, für postfix notation oder wie das heißt 😉

    also die eingabe um (11+22)*33 zu berechnen schaut so aus 11 22 + 33 *

    #include <stdio.h>
    #include <ctype.h>
    
    int main(int argv, char **argc){
     char c;
     double a,b;
     scanf("%lf",&a);
     while(1){
      scanf("%lf",&b);
      while(isspace(c = getchar()) && c != EOF);
      switch(c){
       case '+': a+=b; break;
       case '-': a-=b; break;
       case '*': a*=b; break;
       case '/': a/=b; break;
       default:
        printf("\nunexpected operator:%c\n", c);
       return 0;
      }
      while(isspace(c = getchar()) && c != EOF && c!= '\n');
      switch(c){
       case '\n':
        printf("= %f\n", a);
        scanf("%lf",&a);
       break;
       default:
        printf("%f",a);
       return 0;
      }
     }
    }
    

    viel spaß damit und den versteckten bugs 🤡



  • das "&& c != EOF" könnt raus, glaub ich 😕



  • Danke mal so weit!
    Hab jetzt mal euren verbesserten code verwendet und die rekursion zur quersummenberechnung mit in das script genommen.....
    Die funzt bei mir wenn ich sie eigenständig verwende bringt im programm aber nur 0 zurück.....was hast es da wieder???
    Bei der Multiplikation soll ich mit + rechnen und das * weglassen...

    Hier der Code:

    #include <stdio.h>
    #include <stdlib.h>
    
    double funktionadd(void);
    double funktionsub(void);
    double funktionmul(void);
    double funktiondiv(void);
    
    int main()
    {
        char wahl;
        double ergebnis;
    
        do
        {
            printf ("======== W I L L K O M M E N ========");
            printf ("Sie haben folgende Funktionen zur Verfügung:\n\n");
            printf ("1...Addition\n 2...Subtraktion\n 3...Multiplikation\n 4...Division\n 5...Potenz\n 6...Zifferndarstellung umrechnen\n 7...Quersumme berechnen\n 8...Quersumme berechnen (endrekursiv)\n 0...Beenden\n");
            printf ("\n Ihre Wahl:");
            wahl=getchar(); while(wahl!='\n' && getchar()!='\n');
    
            switch (wahl)
            {
            case '1':
                    ergebnis=funktionadd ();
                    printf ("\n Ergebnis:%f\n\n", ergebnis);
                    break;
            case '2':
                    ergebnis=funktionsub ();
                    printf ("\n Ergebnis:%f\n\n", ergebnis);
                    break;
            case '3':
                    ergebnis=funktionmul ();
                    printf ("\n Ergebnis:%f\n\n", ergebnis);
                    break;
            case '4':
                    ergebnis=funktiondiv ();
                    printf ("\n Ergebnis:%f\n\n", ergebnis);
                    break;
            case '0': break;
    
            default:
                    puts ("\nFalsche Eingabe");
            }
        } while( wahl!='0' );
    }
    
    double funktionadd ()
    {
        double zahl1,zahl2,ergebniss;
        printf ("\n Sie haben Addition gewählt:\n Geben Sie die erste Zahl ein:");
        scanf("%lf",&zahl1);while( getchar()!='\n');
        printf("\nGeben sie bitte Zahl2 ein : ");
        scanf("%lf",&zahl2);while( getchar()!='\n');
        ergebniss=zahl1+zahl2;
        return ergebniss;
    }
    
    double funktionsub ()
    {
        double zahl1,zahl2,ergebniss;
        printf ("\n Sie haben Subtraktion gewählt:\n Geben Sie die erste Zahl ein:");
        scanf("%lf",&zahl1);while( getchar()!='\n');
        printf("\nGeben sie bitte Zahl2 ein : ");
        scanf("%lf",&zahl2);while( getchar()!='\n');
        ergebniss=zahl1-zahl2;
        return ergebniss;
    }
    
    double funktionmul ()
    {
        double zahl1,zahl2,ergebniss;
        printf ("\n Sie haben Multiplikation gewählt:\n Geben Sie die erste Zahl ein:");
        scanf("%lf",&zahl1);while( getchar()!='\n');
        printf("\nGeben sie bitte Zahl2 ein : ");
        scanf("%lf",&zahl2);while( getchar()!='\n');
        ergebniss=zahl1*zahl2;
        return ergebniss;
    }
    
    double funktiondiv ()
    {
        double zahl1,zahl2,ergebniss;
        printf ("\n Sie haben Division gewählt:\n Geben Sie die erste Zahl ein:");
        scanf("%lf",&zahl1);while( getchar()!='\n');
        printf("\nGeben sie bitte Zahl2 ein : ");
        scanf("%lf",&zahl2);while( getchar()!='\n');
        ergebniss=zahl1/zahl2;
        return ergebniss;
    }
    
    int funktionquer1 (int quer1)
    {
        int ergebniss;
        char feld[20];
        int erg=0;
        int n;
        int x;
        printf("Bitte Geben Sie eine beliebige Zahl ein\n");
        scanf ("%i", &feld);
        gets(feld);
            for(n=0; n<strlen(feld);n++)
            {
                x=feld[n] - '0';
    
                erg=erg+x ;
            }
    
        ergebniss=erg;
    return ergebniss;
    }
    


  • char feld[20];
    scanf ("%i", &feld);
    

    Nur ein kleiner Tipp: Das %i ist hier nicht richtig 😉



  • BasicMan01 schrieb:

    char feld[20];
    scanf ("%i", &feld);
    

    Nur ein kleiner Tipp: Das %i ist hier nicht richtig 😉

    Das & ist hier auch fehl am Platz. ⚠



  • Das & muss man nicht da hinschreiben, man kann es aber durchaus tun. Zwar ist der Typ von &feld nicht char*, sondern char(*)[20], aber bei der Übergabe an eine Ellipse verschwindet dieser Unterschied.



  • int Qsumr(int a)   //Qsumr = rekursive Methode zum Ausrechnen der Quersumme
         {                  // a = die zu berechnene Nummer, K = Quersumme
    
           while (a > 0) 
           {
               K += a % 10; 
               a /= 10;
               return(K);
           }
           return(K);
        }
    

    ist aber untested... :p

    hoffentlich stimmts 😮


Anmelden zum Antworten