#include <stdio.h>

double addition(double a, double b)
{
	return(a+b); 
}

double subtraktion(double a, double b)
{
	return(a-b); 
}

double multiplikation(double a, double b)
{
	return(a*b); 
}

double division(double a, double b, short *w)
{
	if(b<0.00000001 && b>-0.00000001)
	{
		*w=1;
		return(0.0);
	}
	else
	{
		return(a/b); 
	}
}


int main(void)
{
	double zahl1, zahl2,ergebnis;
	short warnung=0, wahl=0;
 
	printf("Dieses Programm kann eine der vier Grundrechenarten auf zwei reelle Zahlen anwenden.\n\
Geben Sie bitte Ihre erste Zahl ein: "); 
 
	scanf("%lf",&zahl1);
 
	printf("Geben Sie nun bitte Ihre zweite Zahl ein: ");  
  
	scanf("%lf",&zahl2); 
 
	printf("Nun kommt die Wahl der Rechenart. Bitte geben Sie ein:\n\
       1 für Addition,\n\
       2 für Subtraktion,\n\
       3 für Multiplikation,\n\
       4 für Division.\nIhre Wahl: "); 
	scanf("%hi",&wahl); 
  
	if(wahl==1)
	{
		ergebnis=addition(zahl1,zahl2);
	}
	else
	{
		if(wahl==2)
		{
			ergebnis=subtraktion(zahl1,zahl2);
		}
		else
		{
			if(wahl==3)
			{
				ergebnis=multiplikation(zahl1,zahl2);
			}
			else
			{
				if(wahl==4)
				{
					ergebnis=division(zahl1,zahl2,&warnung);
				} 
				else
				{
					printf("Wegen Ihrer unzulaessigen Wahl wird das Programm beendet.\n");
					return(1);
				}
			}
	      
		}
     
	}
     
 
	if(warnung==0)
	{
		printf("Das Ergebnis der ");
    
		if(wahl==1)
		{
			printf("Addition");
		}
		else
		{
			if(wahl==2)
			{
				printf("Subtraktion");
			}
			else
			{
				if(wahl==3)
				{
					printf("Multiplikation");
				}
				else
				{
					printf("Division");    
				}  
			}
     
		}  
    
 
		printf(" von %10.10lf und %10.10lf lautet: %10.10lf.\n\n",zahl1,zahl2,ergebnis);  
 
		if(zahl1>100000000 || ( zahl1<0.00000001 && zahl1>-0.00000001 ) || zahl1<-100000000 || zahl2>100000000 || ( zahl2<0.00000001 && zahl2>-0.00000001 ) || zahl2<-100000000 )
		{
			printf("Sie muessen damit rechnen, dass dieses Ergebnis wegen der Groesse der Zahlen\nmit Rundungsfehlern\
 behaftet ist.\n");
		}
		else
		{
			printf("Dieses Ergebnis wird durch Rundungsfehler\
 nicht wesentlich verfaelscht.\n"); 
		}
	}
	else
	{
		printf("Die Division konnte wegen eines zu kleinen Nenners nicht durchgefuehrt werden.\n"); 
	}
 
	return(0);
  
}

