#include <stdio.h>
#include <math.h>
#define Pi 3.14

static double zahl;

double addition(double zahl)
{
 double y;
 printf("%lf+>",zahl);
 scanf("%lf",&y);
 fflush(stdin);
 return zahl+=y;
}

double subtraktion(double zahl)
{
 double y;
 printf("%lf->",zahl);
 scanf("%lf",&y);
 fflush(stdin);
 return zahl-=y;
}

double division(double zahl)
{
 double y;
 printf("%lf/>",zahl);
 scanf("%lf",&y);
 fflush(stdin);
 return zahl/=y;
}

double multiplikation(double zahl)
{
 double y;
 printf("%lf*>",zahl);
 scanf("%lf",&y);
 fflush(stdin);
 return zahl*=y;
}

double sqrtw(double zahl)
{
 double x=sqrt(zahl);
 printf("(sqrt)%lf>",x);
 return x;
}

double hypotenuse(double zahl)
{
 double a=zahl;
 double b,c;
 printf("Kathete b>");
 scanf("%lf",&b);
 c=(a*a)+(b*b);
 return zahl=sqrt(c);
}

double kugel(double zahl)
{
 double d=zahl;
 return zahl=Pi*(d*d*d)/6;
}


double (*rechenfunk[])(double) = { addition, subtraktion,
                                   division, multiplikation,
                                   sqrtw, hypotenuse, kugel };

int main()
{
 char op;

 printf("no.>");
 scanf("%lf",&zahl);
 do {
      printf(" op>");
      scanf("%c",&op);
      fflush(stdin);
      switch(op)
      {
       case '+': printf("%lf",zahl=(*rechenfunk[0])(zahl));   break;
       case '-': printf("%lf",zahl=(*rechenfunk[1])(zahl));   break;
       case '/': printf("%lf",zahl=(*rechenfunk[2])(zahl));   break;
       case '*': printf("%lf",zahl=(*rechenfunk[3])(zahl));   break;
       case 'q': printf("%lf",zahl=(*rechenfunk[4])(zahl));   break;
       case 'H': printf("H=%lf",zahl=(*rechenfunk[5])(zahl));   break;
       case 'V': printf("V=%lf",zahl=(*rechenfunk[6])(zahl));   break;
       default : printf("op '=','+','-','/','*','q','H','V'\n");   break;
    }
  } while(op != '=');

 printf("Gesamtergebnis=%lf\n",zahl);

 return 0;
}
