Brei Geschrieben 8. Mai 2003 Geschrieben 8. Mai 2003 Hallo In C++ gibts ja den "Modulo". Also das %-Zeichen. Unser Lehrer hat gesagt, das gibt bei einer Division den ganzzahligen Rest zurück. Und dann hat er auch dafür eine "ausgeschriebene Version" gezeigt. Ich glaub, aber der hat da einen Fehler drin, oder ich hab´s falsch verstanden. also wie kann man durch längeren Code das %-Zeichen ersetzen? rest = zahl1 % zahl2 danke Zitieren
Shadax Geschrieben 9. Mai 2003 Geschrieben 9. Mai 2003 ...und wo glaubst du hat er einen Fehler gemacht? Poste doch einfach mal das Progrämmchen....... Zitieren
Crow T. Robot Geschrieben 9. Mai 2003 Geschrieben 9. Mai 2003 Also Modulo gibt doch den Rest einer Integerdivision. Also führt man einfach die Integerdivision durch, multipliziert das Ergebnis wieder mit dem vorigen Divisor und subtrahiert das Produkt vom vorigen Dividenden. int zahl1 = 10; int zahl2 = 3; int rest; rest = zahl1 - ((zahl1 / zahl2) * zahl2) Habe gerade keinen C-Compiler installiert, um das zu verifizieren, evtl. müsste man in der Klammer noch explizit nach int casten? Aber das Prinzip sollte richtig sein. Zitieren
Brei Geschrieben 9. Mai 2003 Autor Geschrieben 9. Mai 2003 tja, den code hat er uns auch gegeben. Was ich nicht verstehe: rest = zahl1 - ((zahl1 / zahl2) * zahl2) ich muss ja zuerst die Klammer rechnen, also zahl1/zahl2 * zahl2 somit hebt sich doch das wieder auf wenn ich durch zahl 2 und dann wieder mal zahl2 rechne! Oder wird, da es INT-Variablen sind, einfach das, was hinter dem Komma steht automatisch weggelassen? Dann würde es für mich Sinn machen. Hab wenig Erfahrung in C und sonstigen Programmsprachen, aber in Visual Basic kann man das so machen: zahl1 = 7.3 ergebnis = int(zahl1) dann steht in ergebnis "7" drin. Hab ich das jetzt schon richtig verstanden? Zitieren
nic_power Geschrieben 9. Mai 2003 Geschrieben 9. Mai 2003 Original geschrieben von b-r-e Oder wird, da es INT-Variablen sind, einfach das, was hinter dem Komma steht automatisch weggelassen? Dann würde es für mich Sinn machen. Ja. Integer sind Ganzzahlen, d.h. es gibt keine "krummen" Ergebnisse. Nic Zitieren
capone007 Geschrieben 12. Mai 2003 Geschrieben 12. Mai 2003 Original geschrieben von b-r-e ich muss ja zuerst die Klammer rechnen, also zahl1/zahl2 * zahl2 somit hebt sich doch das wieder auf wenn ich durch zahl 2 und dann wieder mal zahl2 rechne! nich ganz....wenn ich dich überhaupt richtig verstehe: nehmen wir für zahl2 den wert 2 (zahl2 = 2; ) du rechnest ja nicht einen wert erst MAL 2 und dann DURCH 2, sondern eine Zahl DURCH eine andere und das Ergebnis MAL 2. hoffe nich an dir vorbei "geschrieben" zu haben Zitieren
nic_power Geschrieben 12. Mai 2003 Geschrieben 12. Mai 2003 Hallo, Äh, also mathematisch gesehen gilt: a ---- * b = a, mit b!=0 b das b kürzt sich raus. Ob Du nur (a/b)*b oder (a*b)/b rechnest, spielt eigentlich keine Rolle. Nic Zitieren
Crow T. Robot Geschrieben 12. Mai 2003 Geschrieben 12. Mai 2003 Mathematisch gesehen hast du recht, hier ging es aber um die speziellen Eigenarten einer Integerdivision bzw. Modulo. Und da macht es sehr wohl einen Unterschied. a = 10; b = 3; erg1 = (a/b)*b; // ergibt 9 erg2 = (a*b)/b; // ergibt 10 Zitieren
Binchen Geschrieben 20. Mai 2003 Geschrieben 20. Mai 2003 Hi Leute, int zahl1 = 10; int zahl2 = 3; int rest; rest = zahl1 - ((zahl1 / zahl2) * zahl2) zuerst rechnet man zahl1/zahl2 10/3=3 - da beides int werte sind dann 3*zahl2 3*3=9 und zuletzt zahl1-9 10-9=1 Also hast Du den Rest Wert von 1 Raus Es ist die gleiche Rechnung wie mit Modulo, nur ausführlich geschrieben. Rechne mal alles mit Fließkommazahlen und schau Dir das Ergebnis an. MFG Bine Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.