Hallo, ich habe vor, eine Diviosion in C++ zu schreiben.
Das Programm ist wie folgt:
#include <stdio.h>
void main(void)
{
float F,I,E;
int Fi, Ii, M;
printf("Test\n");
printf("Eingabe1: ");
scanf_s("%f",&F);
printf("Eingabe2: ");
scanf_s("%f",&I);
E = F/I;
Fi = (int)F;
Ii = (int)I;
M=Fi% Ii;
printf("%f / %f = %f\n",F,I,E);
printf("%i geteilt durch %i ist %i (rest) \n",Fi,Ii,M);
}
nun möchte ich noch einbauen, dass das Programm wie eine Schriftliche
Division in der Grundschule aussieht,
hat jemand eine idee?
Die Aufgabe ist:
Eine Zahl mit einer anderen Dividieren, das ergebnis mit
nachkommastellen ausgeben, soweit bin ich. siehe oben.
Jetzt soll noch angezeigt werden, dass die komplette rechnung (wie in
klasse 4) angezeigt wird. Da hänge ich fest und weiß nicht, wie ich das
umsetzen soll (C)
Andi schrieb:> Eine Zahl mit einer anderen Dividieren, das ergebnis mit> nachkommastellen ausgeben, soweit bin ich. siehe oben.
Eher nicht. Du sollst wahrscheinlich die zwei Zahlen durch Integer
Operationen teilen, nicht mittels Float.
Also den schriftlichen Divisionsprozess nachbilden.
Schau dir an wie der geht und programmiere das nach. Dazu versuche zu
formulieren wie du vorgehst.
Du brauchst dazu eine Schleife, die sehe ich in deinem Programm nicht.
Ausserdem brauchst du dazu keinerlei float, Integer oder long reichen.
Tipp:
Eine Integer Division (Operator '/'schneidet die Nachkommastellen ab
Zusätzlich brauchst du noch den Rest (Modulo), das ist der Operator '%'.
Andi schrieb:> Jetzt soll noch angezeigt werden, dass die komplette rechnung (wie in> klasse 4) angezeigt wird. Da hänge ich fest und weiß nicht, wie ich das> umsetzen soll (C)
Bist Du Student in irgendeiner Informatik-Studienrichtung?
Weil die Lösung Deiner Aufgabe eigentlich nur zum geringsten Teil etwas
mit "E = F/I;" zu tun hat?
Wenn es "wie in Klasse 4 angezeigt" werden soll, dann bedeutet das nicht
weniger als: Du brauchst die gesamte Zwischenrechnung im Dezimalsystem.
Das Problem: Moderne Computer rechnen nirgends im Dezimalsystem.
Ich persönlich würde das mit Strings lösen. Kannst Du denn wenigstens
davon ausgehen, dass die beiden zu teilenden Zahlen F und I ganzzahlig
sind, und F>I? Und nur das Ergebnis ist eine Gleitkommazahl? Oder wäre
das eine zu stark einschränkende Annahme?
Mal angenommen, F und I dürften ganzzahlig sein und F>I, etwa:
char F[]="12345";
char I[]="89";
dann würdest Du bei der Zwischenrechnung genau wie in Klasse 4 vorgehen.
Du würdest von F[] so lange Stellen aus dem String herunterziehen, in
eine Zahl wandeln und prüfen, ob durch I mindestens einmal ganzzahlig
geteilt werden kann:
1 / 89 ==> geht nicht
12 / 89 ==> geht nicht
123 / 89 ==> geht 1 mal, Rest 34
Rest hinschreiben und nächste Ziffer runterholen
344 / 89 ==> geht 3 mal, Rest 77
Rest hinschreiben und nächste Ziffer runterholen
775 / 89 ==> geht 8 mal, Rest 63
Zu dividierende Zahl ist zuende ==> Dezimalkomma setzen, 0 herunterholen
630 / 89 ==> geht 7 mal, Rest 7
Weitere Dezumalstellen nach Belieben weiterrechnen
Ergebnis 138,7...
Und das ganze dann so schön formatiert ausgeben, damit es wie eine
Kettenschwanzrechnung bei der Division in der 4. Klasse aussieht.
Andi schrieb:> nun möchte ich noch einbauen, dass das Programm wie eine Schriftliche> Division in der Grundschule aussieht,
Welche Grundschule ist das, die Floating Point Arithmetik aufm
Lehrzettel hat?
> Welche Grundschule ist das, die Floating Point Arithmetik aufm> Lehrzettel hat?
Hast du nicht schriftlich Dividieren in der Grundschule gelernt?!
Welche schule lehrt denn Fixed Point Arithmetik?
uwe schrieb:>> Welche Grundschule ist das, die Floating Point Arithmetik aufm>> Lehrzettel hat?> Hast du nicht schriftlich Dividieren in der Grundschule gelernt?!
Doch schon.
Aber ich erinnere mich nicht mehr, ob wir da schon mit Kommazahlen
hantiert haben, oder ob da noch ausschliesslich ganze Zahlen im Spiel
waren.
> Welche schule lehrt denn Fixed Point Arithmetik?
:-)
Keine. Aber auch in der Grundschule haben wir schon dividiert
1
234 : 8 = 29
2
74
3
2
4
5
Antwort: 234 dividiert durch 8 ergibt 29, Rest 2
Von hier dann mit Kommazahlen weiterzuarbeien ist zwar banal, aber ob
wir das 1970 bereits in der Grundschule hatten, weiß ich nicht mehr.
@ Karl Heinz
Worüber haben wir uns neulich unterhalten?
Ich hätte dann gerne noch eine Erklärung von Dir, wie man richtig
einatmet. Aber auch leicht verständlich, bitte! Ohne Mathematik und
nicht nur für Atmen-Freaks.
Karl Heinz schrieb:> Von hier dann mit Kommazahlen weiterzuarbeien ist zwar banal, aber ob> wir das 1970 bereits in der Grundschule hatten, weiß ich nicht mehr.
Jein.
Es gab Kommazahlen nur im Zusammenhang mit Größen wie z.B. 1,56 m oder
2,03 DM oder 3,5 h. Das wurde dann aufgebrochen in 1 m + 56 cm oder 2 DM
+ 3 Pfennig oder 3 h + 30 min. Und dazu gab es Multiplikationen und
Divisionen mit Ganzzahlen: eine Brezel kostet 0,25 DM, wieviel Brezeln
bekommst du für 2 DM?
Das ist auch heute noch so. Sogar incl. der DM... :-/
Bitflüsterer schrieb:> Ich hätte dann gerne noch eine Erklärung von Dir, wie man richtig> einatmet.
Zu spät... ;-)
Lothar Miller schrieb:> Bitflüsterer schrieb:>> Ich hätte dann gerne noch eine Erklärung von Dir, wie man richtig>> einatmet.> Zu spät... ;-)
Na hoffentlich nicht :-)
In den Neunzigern hatten wir das Komma auch bei der schriftlichen
Division.
Wenn du dann aus der grundschule kamst und aufs Gymansium gegangen bist
haben die dir das nicht erst beigebracht.
Ah bei euch ging die grundschule nur bis zur 4. Klasse
Kommt aber erst in der 5 glaube ich. Kommt also auf Bundesland an ob es
"noch" in der Grundschule gelernt wurde oder auf der Oberschule.
Die Lehrpläne sind die selben kommt immer in der 5. Klasse.
Wenn ich micht recht erinnere, lernten wir in de Grundschule (4 Jahre)
auch keine "Kommazahlen". Vermutlich ist das der Grund dafür, dass sie
mir bis heute nicht ganz geheuer sind und ich sie, wo immer möglich, zu
umgehen versuche. Ganzzahlige Division mit Rest ist doch viel schöner :)