Division in C

Gast #3899745
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?
Gast
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.
Gast
> 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.
Gast
@ 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.
Moderator (Firma: Titel) Persönliche Seite
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...   ;-)
Gast
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.
Gast
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.
Moderator
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 :)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.