Taschenrechner der anderen Art
-
Wurde euch obiger Code als C oder C++ Code verkauft? Für mich ist das alles C, also schonmal falsches Forum. Weiß grad nicht wie das in C aussieht, aber eigentlich ist void main nicht erlaubt und müsste int main sein und bei C, muss man noch am Ende von main "return 0;" schreiben:
int main() { // Code return 0; }Dann noch zu folgendem in der Funktion main:
int x,y,ergeb; if(x<0)Was soll das bewirken? x ist nicht initialisiert und scheint auch vor der if-Abfrage nicht initialisiert zu werden. Also ist diese Abfrage hinfällig. Ob der if-Zweig betreten wird oder nicht, ist Zufall. Ok, man müsste Wissen wo der if-Zweig da schließt, mit der öffnenden Klammer von main und dem o.g. if-Zweig sehe ich 2 öffnende, aber nur eine schließende Klammer am Ende.
Hast du schonmal Division auf einem Blatt Papier mit Subtraktion realisiert? Wenn nicht, solltest du das tun. Das Ergebnis der Division (Quotient) ist doch, wie oft der Divisor in den Dividenden passt. Probier das mal mit mehreren ganzzahlig teilbaren Zahlen auf Papier aus. Ich glaube die meisten, könnten dir ohne weiteres eine Schleife schreiben die das erledigt, aber das sollte nicht der Sinn sein.

Greetz
-
Naja, in C gibts denke ich auch keine Referenzen, oder?
"scanf" ist natürlich schon etwas "hardcore" für C++, aber der Code ist denke ich eindeutig C++ und nicht C.@natco:
Sinn dieser Übung ist es vielleicht nicht nur Code verstehen zu können, sondern auch Code schreiben zu können.
Und um Code schreiben zu können musst du erstmal wissen was er Schritt für Schritt tun soll.
-
hustbaer schrieb:
Naja, in C gibts denke ich auch keine Referenzen, oder?
Ok, die Referenzen in Parameterübergabe habe ich nicht gleich gesehen. Aber ich sehe, außer bei "eingabe", nicht wirklich den Sinn an der Übergabe per Referenz (und wenn schon Referenz die nicht modifiziert wird, dann wenigstens mit const).
Und wenn schon C++, dann kann man auch den Zähler von i in for anlegen und nicht vorher wie in C am Anfang eines Blocks deklarieren und dann in for erst initialisieren.Greetz
-
Stimmt schon, is voll mit "C-ismen", aber naja. Schlechter C++ Code halt

-
BTW: sollt ihr eigentlich mit Restwerten oder mit Kommazahlen arbeiten?
-
z.B. 4:2=2 also keine Komazahlen...
Habe mir auch schon ein Strukturdiagramm gezeichnet, aber komme trotzdem nicht weiter, wie ich das prog. soll... Ich brauche das ganze bis Donnerstag, ohweija

Drückt mir die Daumen...

-
Interessanter wäre wohl noch die Frage ob auch negative Zahlen erlaubt sein sollen. Dann würde die Berechnung der Multiplikation dort oben so auch nur für positive Zahlen funktionieren.
Wo ist das Problem? Vergiss das Struktogramm, wenn du nicht mal weißt, wie die ganzzahlige Division funktioniert bringt dir das ganze Struktogramm nichts. Du musst erstmal verstehen was das Ergebnis einer Division ist, aber das hab ich dir eigentlich bereits gesagt.
In der Grundschule hat man für sowas auch kleine Papierklötze bekommen. Bei 9/3 hat man dann einen 9-Klötze großen Streifen dahergenommen und gezählt wie viele 3-klötzige Streifen auf den Streifen mit den 9 Klötzen passen. Schwupps, hatte man das Ergebnis der Division.
Also was musst du machen um das Ergebnis zu kriegen? Richtig, zählen wie oft die 3 in die 9 passt. Das in einer Schleife zu realisieren sollte jetzt ja wohl kein Problem mehr sein. Ansonsten würde ich mir Gedanken über Mathenachhilfe machen und mir ein gutes Buch über C oder C++, oder was auch immer der Lehrer meint euch da beizubringen, kaufen.Greetz
-
Hmm,
ich weiß einfach nicht was ich hier ändern soll:
int division (int &x, int &y) {int ergeb; int i; ergeb=0; for(i=0; i<x; i++); { ergeb=ergeb-y; } return ergeb; }Oder wie ich diese Schleife machen soll...
-
Hallo natco,
einen Hinweis zur Übersichtlichkeit. Wenn Du einer Variable ein Ergebniss zuweist, dass aus einer Berechnung mit der Variablen entsteht kannst Du Kurzschreibweisen verwenden.
Für
ergeb = ergeb - y;kannst Du z. B.
ergeb -= y;schreiben. Das gleiche gilt für die anderen drei Grundrechenarten.
ergeb += y; // ist das gleiche wie ergeb = ergeb + y; ergeb -= y; // ist das gleiche wie ergeb = ergeb - y; ergeb *= y; // ist das gleiche wie ergeb = ergeb * y; ergeb /= y; // ist das gleiche wie ergeb = ergeb / y;Zu Deinem Problem möchte ich nur darauf Hinweisen, dass in Deiner jetzigen for-Schleife das Abbruchkriterium (i<x) nicht stimmt und Du darüber hinaus den Falschen Wert mit der return-Anweisung zurück gibst.
Hoffe das hilft Dir auf den Richtigen Weg.
Viele Grüße
Knecht
-
Hab das jetzt so gemacht:

#include <stdio.h> void eingabe (int &x, int &y) { printf("Erste Zahl eingeben:"); scanf("%i",&x); printf("Zweite Zahl eingeben:"); scanf("%i",&y); } int division (int &x, int &y) {int ergeb; int i; ergeb=0; for(i=0; i<x; i++); if(x>y); { ergeb=x-y; } return ergeb=x/y; } void ausgabe (int &x, int &y, int &ergeb) { printf("%i / %i = %i",x,y,ergeb); } void main() {int x,y,ergeb; eingabe(x,y); ergeb=division(x,y); ausgabe(x,y,ergeb); }Dabei wird aber das Substrahieren so zu sagen überbrückt :P. Naja, besser als gar nichts :>
-
Wenn du die Division wirklich auf die Subtraktion zurückführen willst, ist deine Berechnungsschleife Humbug. Das geht etwa so:
int division(int x,int y) { int i; for(i=0;x>y;++i) x-=y; return i; }
-
Hab jetzt versucht mir rest zu arbeiten, follgendes ist rausgekommen, aber funzt irgendwie net:
Könnt Ihr mir sagen warum?
#include <stdio.h> void eingabe (int &x, int &y) { printf("Erste Zahl eingeben:"); scanf("%i",&x); printf("Zweite Zahl eingeben:"); scanf("%i",&y); } int division (int &x, int &y) {int ergeb; int rest; rest=x; ergeb=0; while (y <= rest); { rest=rest-y; ergeb=ergeb+1; } return ergeb; } void ausgabe (int &x, int &y, int &ergeb) { printf("%i / %i = %i",x,y,ergeb); } void main() {int x,y,ergeb; eingabe(x,y); ergeb=division(x,y); ausgabe(x,y,ergeb); }
-
Du berechnest zwar den Divisionsrest, aber du gibst ihn nicht zurück, ergo erfährt das Hauptprogramm auch nichts davon.
-
ich weiss nicht warum das noch keinen aufgefallen ist - das ; bei dem while am ende find ich merkwuerdig {o;
while (y <= rest); { rest-=y; ergeb+=1; }
-
CStoll schrieb:
Wenn du die Division wirklich auf die Subtraktion zurückführen willst, ist deine Berechnungsschleife Humbug. Das geht etwa so:
int division(int x,int y) { int i; for(i=0;x>y;++i) x-=y; return i; }... hat das x > y didaktische Gründe oder war das ganze nur eine grobe "Skizze"?

-
hä schrieb:
... hat das x > y didaktische Gründe
Entweder das - oder ich hab' mich einfach verschrieben.
(wohl eher ersteres :D)