Divisionsprogramm schreiben mit beliebig vielen Nachkommastellen



  • Hi,

    ich will ein Divisionsprogramm in C++ schreiben. So nach dem Motto:
    Zähler eingeben, Nenner eingeben, gewünschte Nachkommastellen ---> Ergebnis

    Da ichs aber noch nicht wirklich gut drauf habe hänge ich fest.
    Hier der Code:

    #include <stdio.h>
    
    void main(void)
    
    {
    	int z, n, x, a, nk;
    
    	printf("\tD I V I S I O N S P R O G R A M M\n");
    	printf("\nBitte Zaehler eingeben: ");
    	scanf("%i",&z);
    	printf("\nBitte Nenner eingeben: ");
    	scanf("%i",&n);
    	printf("\nBitte die Anzahl der gewuenschten Nachkommastellen angeben: ");
    	scanf("%i",&a);
    
    	x=z/n;
    
    	if(z%n==0)
    		printf("\n\nDas Ergebnis lautet: %i\n\n",x);
    	else 
    	{
    		while(a>=0)
    		{
    			z=10*(z-n*x);
    		nk=z/n;
    		printf("\n\n%i\n\n",nk);
    		a=a-1;
    		}
    	}
    }
    

    Und jetzt bitte nicht nicht gleich steinigen! Hier eine Erläuterung meiner Gedankengänge: Wenn die if-Bedingung wahr ist dann ist das Programm gleich fertig weil es keinen Rest gibt und somit ging die Division glatt auf.
    Und hier der Else-Teil: z=10*(z-n*x) heißt quasi dass ich den Rest mit 10 multipliziere (vgl. schriftliches Dividieren "eine Null runter holen").
    Diese zahl geteilt durch den Nenner gibt also meine nächste Stelle. Die while-Schleife soll dafür sorgen dass mit jeder Nachkommastellen-Division a (Anzahl der Nachkommastellen) um eins heruntergezählt wird, bis a==0 ist, da ja der Benutzer nur a Nachkommastellen haben wollte.
    Jedenfalls hab ich grad echt nen Knoten im Hirn, wäre nett wenn mir jemand einen Tipp geben könnte.
    Vielen Dank.



  • Hallo,

    hmm 5 / 3 wobei z=5 und n=3

    x=z/n

    =>

    x= 5/3

    5%3!=0

    =>

    y=10*(z-n*x) => y=10*(5-3*5/3) => y=10*(5-5) => y=10*0 => y=0

    nk=y/n

    nk=0/3

    nk=0

    Irgendwie funktioniert das nicht.
    Deine Idee mit dem Rest ist ja gut, warum machst du es dann nicht ?

    5%3=2
    210=20
    20/3=2
    2
    10=20

    usw.

    int nk,z,n,a;
    cout<<"Zaehler: ";
    cin>>z;
    cout<<"Nenner: ";
    cin>>n;
    cout<<"Nachkommastellen: ";
    cin>>a;
    
    if(!z%n){
     cout<<z/n<<',';
     while(a--)
       cout<<'0';
     cout<<endl;
     return;
    }
    
    nk=floor(z/n);
    cout<<nk<<',';
    while(a-- && z%n){
      z=(z%n)*10;
      nk=floor(z/n);
      cout<<nk;
    }
    cout<<endl;
    

    Das müsste funktioniern. Geht bestimmt auch einfacher.


Anmelden zum Antworten