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 ---> ErgebnisDa 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
210=20usw.
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.