Taschenrechner



  • Hallo,

    bin ganz neu hier und auch in C bin ich neu. Hab jetzt einen Taschenrechner Programmiert. Funktioniert auch alles. Nun wollt ich gerne noch, dass, wenn ich ne Fakultät berechne ich nicht zwei Zahlen eingeben muss.
    Ich möchte z.B.: "5!" eingeben und er rechnet mir das ergebnis aus.

    Hoffe ihr könnt mir einen Tip geben.

    MFG Stefan

    include <stdio.h>
    
    float add (float x, float y)
       {
          return (y + x);
       }
    
    float sub (float x, float y)
       {
          return (y - x);
       }
    
    float mul (float x, float y)
       {
          return (y * x);
       }
    
    float div (float x, float y)
       {
          return (y / x);
       }
    
    /* Hier wird die Fakultät berechnet */
    
    float fak (float x, float f, float i)
       {
    		f=1;
    		for (i=1;i<=x;i++)
    		{
    			f=f*i;
    		}
          return (f);
    	}
    
    /*Bis hier*/
    
    	void main()
    
    	{
    		float x,y,i,f,erg;
    		char a;
    
    			printf ("Geben Sie eine Rechenaufgabe ein\n");
    			scanf ("%d %c %d",&x,&a,&y);
    
    			if (a == '+') erg = add (x, y);
    			else if(a == '-') erg = sub (x, y);
    			else if(a == '*') erg = mul (x, y);
    			else if(a == '/') erg = div (x, y);
    			else if(a == '!') erg = fak (x,i,f);
    
    			printf ("Das ergebnis lautet: %d\n",erg);
    
    	}
    


  • Wieso übergibst du fak 3 Parameter??????????
    f setzt du sowieso auf 1, da ist es unsinnig, sich extra eine Zahl für f übergeben zu lassen. Bei i ist es dasselbe. Jetzt zu deiner Frage:
    Du könntest die ganze Zeile in einen String einlesen und dir den/die Operator(en) raussuchen. Dann kannst du auch gleich längere Aufgaben ausrechnen lassen. Mit scanf kann ich dir nicht weiterhelfen, weil ich eigentlich C++ programmiere.



  • Stefanneu schrieb:

    Hallo,

    bin ganz neu hier und auch in C bin ich neu. Hab jetzt einen Taschenrechner Programmiert. Funktioniert auch alles. Nun wollt ich gerne noch, dass, wenn ich ne Fakultät berechne ich nicht zwei Zahlen eingeben muss.
    Ich möchte z.B.: "5!" eingeben und er rechnet mir das ergebnis aus.

    scanf("%g %c", &x, &a);
    if (c == '!') fak(x); else scanf("%g", &y);
    

    Dein Programmierstil ist übrigens etwas eigenwillig. Die Fakultät hängt nur von einer Variablen ab, bekommt aber drei, scanf liest floats nicht mit "%d", printf gibt sie nicht mit "%d" aus und void main sollte man durch int main ersetzten. Die Funktionen für die Grundrechenarten tragen bei mir außerdem zur Verwirrung bei. Wenn ich "29 - 7" eingebe, dann möchte ich nicht als Ergebnis -22 rausbekommen ...



  • Hi, versuche es mal so.

    #include <stdio.h>
    
    float addition(float u, float v);
    float subtraktion(float u, float v);
    float multiplikation(float u, float v);
    float division(float u, float v);
    
    int main()
    {
        float x = 0.0;
        float y = 0.0;
        unsigned char c = 0;
    
        printf("----------------------------------------\n");
        printf("SIMPCALC                            v1.2\n");
        printf("----------------------------------------\n");
        printf("Start: 'Enter'\n");
        printf("Ende:  'n'\n");
    
        while((getchar(c)) != 'n')
        {
            printf("Bitte die Zahl 1 eingeben: ");
            scanf("%f", &x);
            printf("Bitte die Zahl 2 eingeben: ");
            scanf("%f", &y);
    
            printf("\n........................................\n\n");
    
            printf(" %.3f + %.3f = %15.3f\n", x, y, addition(x, y));
            printf(" %.3f - %.3f = %15.3f\n", x, y, subtraktion(x, y));
            printf(" %.3f * %.3f = %15.3f\n", x, y, multiplikation(x, y));
    
            if(y == 0)
            {
                printf("Division durch NULL nicht erlaubt.\n\n");
            }
            else
            {
                printf(" %.3f / %.3f = %15.3f\n", x, y, division(x, y));
            }
    
            printf("\n........................................\n\n");
    
            printf("Nochmal?\n");
            printf("Start: 'Enter'\n");
            printf("Ende:  'n'\n");
            getchar(c);
        }
    
        return 0;
    }
    
    float addition(float u, float v)
    {
        float ergebnis = 0.0;
        return (u + v);
    }
    
    float subtraktion(float u, float v)
    {
        float ergebnis = 0.0;
        return (u - v);
    }
    
    float multiplikation(float u, float v)
    {
        float ergebnis = 0.0;
        return (u * v);
    }
    
    float division(float u, float v)
    {
        float ergebnis = 0.0;
        return (u / v);
    }
    


  • Ui ja das mit %d ist schon klar hab ich mich vertippt. Und das mit den Grundrechenarten: Da hab ich x und y vertauscht.

    Aber wie komm ich damit weiter??

    scanf("%g %c", &x, &a); 
    if (c == '!') fak(x); else scanf("%g", &y);
    

    Ich habe doch schon einmal scanf möchte doch nicht für die Fakultät ne neue abfrage.

    Geht das nicht irgendwie anders???

    Aber danke schonmal für die Antworten.



  • Habe hier mal eine Rekursion für die Fakultät. Ist zwar aus C++, sollte denke ich aber auch unter C laufen.

    long rekfakul(long x)
    {
      if(x<0) return 0; // kleiner0 ist ein Fehler!
      if(x==0) return 1; // 0! ist gleich 1
      return(x * rekfakul(x-1));
    }
    

    Jetzt brauchst du nur noch die Zahl übergeben.

    Code-Hacker


Anmelden zum Antworten