Forum: PC-Programmierung Division in C


von Andi (Gast)


Lesenswert?

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?

von Marc (Gast)


Lesenswert?

Andi schrieb:
> hat jemand eine idee?

Überleg dir halt wie du in der Grundschule dividiert hast ... zuerst die 
tausender, hunderter, zehner, einer.

von Andi (Gast)


Lesenswert?

Hallo Marc,
ich weiß nicht, wie ich das in C++ umsetzen kann, hast du eine idee?

von Udo S. (urschmitt)


Lesenswert?

Poste bitte den exakten Text der Hausaufgabe.

von Dr. Sommer (Gast)


Lesenswert?

Was jetzt, C, C++, oder Microsoft-spezifisches-unportables-C ?

von Andi (Gast)


Lesenswert?

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)

von Udo S. (urschmitt)


Lesenswert?

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 '%'.

von Jürgen S. (jurs)


Lesenswert?

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.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

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?

von uwe (Gast)


Lesenswert?

> 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?

von Karl H. (kbuchegg)


Lesenswert?

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.

: Bearbeitet durch User
von Bitflüsterer (Gast)


Lesenswert?

@ 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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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...   ;-)

von Udo S. (urschmitt)


Lesenswert?

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 :-)

von uwe (Gast)


Lesenswert?

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.

von uwe (Gast)


Lesenswert?

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.

von Yalu X. (yalu) (Moderator)


Lesenswert?

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 :)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.