|
MadBonsaiJr
|
| Titel: Rest (Modulo) rechnung mir float geht net |
25.01.2011 19:28 |
|
|
Anmeldungsdatum: 26.08.2009
Beiträge: 791
 |
Tutorial Autor (?) |
|
HEy, ich bin immernoch bei meinem Taschenrechner und jetzt (wollte) ich Mal und Geteil dazu tun. Leider habe ich ein Problem bei Mal. Ich möchte, dass der PC als Ergebniss ausgibt: Ergebniss : XYZ, Rest: ABC
Hier der Code (Habe der Übersicht zu gute Plus,Minus u. Mal weggelassen): http://pastebin.com/aQKCyNRT
Ich wollte das später auch in ne Funktion tun, aber das klappt ja auch schon ohne nicht. Als Fehlermeldung zeigt mir mein Compiler (immernoch Code::Blocks)Zitat: invalid operands of types flopat and float to binary operator% an!
Von Delphi her weiß ich , dass i-was nicht mit den Variablen-typen in Ordnung ist, aber was?
[Zuletzt bearbeitet: 25.01.2011 19:29]
________________________________________ Pc: http://www.sysprofile.de/id146539 Phobie vor langen Wörtern: Hippopotomonstrosesquippedaliophobie
|
 |
|
| |
|
L3oop
|
| Titel: Rest (Modulo) rechnung mir float geht net |
25.01.2011 19:38 |
|
Moderator 45.021 Punkte (?)
Anmeldungsdatum: 25.04.2008
Beiträge: 9.399
 |
Experte |
|
Zumindest ein Fehler liegt wohl hier:
double Geteilt(float z1, float z2) { return (z1 / z1); }
Du teilst z1 durch sich selbst, somit kommt immer 1 heraus.
Ansonsten kann der Modulo-Operator nur mit zwei Int-Operanden verwendet werden. Ändere dazu die Datentypen bei der Funktionsdefinition auf int.
Damit Ergebnis und Rest richtig angezeigt wird, musst du zum einen den Fehler oben beheben, zum anderen (z1 % z2) von z1 abziehen, so dass du den rest-freien Betrag erhältst.
[Zuletzt bearbeitet: 25.01.2011 19:39]
________________________________________ Stereomix • Bootreihenfolge ändern • PC beschleunigen
|
 |
|
| |
|
MadBonsaiJr
|
| Titel: Rest (Modulo) rechnung mir float geht net |
26.01.2011 00:01 |
|
|
Anmeldungsdatum: 26.08.2009
Beiträge: 791
 |
Tutorial Autor (?) |
|
okee, werde ich morgen ausprobieren, das mit z1 7 z2 war nur ein schreibfehler
________________________________________ Pc: http://www.sysprofile.de/id146539 Phobie vor langen Wörtern: Hippopotomonstrosesquippedaliophobie
|
 |
|
| |
|
xero
|
| Titel: Rest (Modulo) rechnung mir float geht net |
26.01.2011 09:00 |
|
|
Anmeldungsdatum: 04.09.2006
Beiträge: 450
 |
Tutorial Autor (?) |
|
Kleiner Mathematischer Trick:
Zitat: result = (int)z1/z2; rest= z1-(float)result*z2;
Geht aber sicher auch noch besser. Google mal. mfg
|
 |
|
| |
|
Nvidia Freak
|
| Titel: Rest (Modulo) rechnung mir float geht net |
26.01.2011 12:35 |
|
|
Anmeldungsdatum: 02.05.2010
Beiträge: 399
|
Darf ich fragen, wozu du einen Rechner haben willst, der dir einen Rest anzeigt?
[Zuletzt bearbeitet: 26.01.2011 12:39]
________________________________________ Rechtschreibfehler vehrleihen Beiträägen eine persönliche Nothe Recycling Tower
|
 |
|
| |
|
MadBonsaiJr
|
| Titel: Rest (Modulo) rechnung mir float geht net |
26.01.2011 15:46 |
|
|
Anmeldungsdatum: 26.08.2009
Beiträge: 791
 |
Tutorial Autor (?) |
|
Weil ich der Reihe nach abarbeiten soll: Plus Minus Mal Geteilt mit Rest Geteilt mit Dezimalzahlen
________________________________________ Pc: http://www.sysprofile.de/id146539 Phobie vor langen Wörtern: Hippopotomonstrosesquippedaliophobie
|
 |
|
| |
|
MadBonsaiJr
|
| Titel: Rest (Modulo) rechnung mir float geht net |
26.01.2011 15:59 |
|
|
Anmeldungsdatum: 26.08.2009
Beiträge: 791
 |
Tutorial Autor (?) |
|
diesen "mathematischen trick" verstehe ich irgendwie nicht. Ich habs in mein Programm mal eingefügt, aber ich bekomme bei 5 / 2 nicht 2 Rest 1 sondern: 5 / 2 = 1 Rest 0
?!?!
Habe das mit ner Funktion gemacht, Code(mit Funktion):http://pastebin.com/ZRjhYx0Q
________________________________________ Pc: http://www.sysprofile.de/id146539 Phobie vor langen Wörtern: Hippopotomonstrosesquippedaliophobie
|
 |
|
| |
|
xero
|
| Titel: Rest (Modulo) rechnung mir float geht net |
26.01.2011 17:09 |
|
|
Anmeldungsdatum: 04.09.2006
Beiträge: 450
 |
Tutorial Autor (?) |
|
Warum so kompliziert?
Beispiel: 5/2: result = (int)z1/z2; rest= z1-(float)result*z2;
result = (int)5/2; // = 2 rest = 5- (float)2*2; //= 5-*4 = 1
5/2 = 2 und 1 Rest.
Im Code kann das - auswendig runter geschrieben und nicht geprüft so aussehen:
Zitat: float Geteilt(float z1, float z2) { return (z1 / z1); }
(...)
int ergebnis = (int)Geteilt(z1,z2); int rest = z1-(float)Geteilt(z1,z2)*z2; ergebnis und rest können natürlich auch float sein. den Cast auf float bei "rest =" kann man eigentlich weglassen, da die methode float zurück gibt.
So oder so ähnlich sollte es funktionieren. Zur Erklärung: Der Cast auf Int schneidet die Nachkommastellen ab.
mfg
|
 |
|
| |
|
|
|
|