In C++ runden ohne bestimmte Befehle

Programmierung - (Computer, Technik, PC)

3 Antworten

Wenn du 3 Nachkommastellen brauchst würde ich das Ergebnis einfach in Milliohm darstellen.

Nehmen wir an du hast zwei parallele Widerstände von 3 und 5 Ohm.

(Einheiten in Ohm)

R_ges = (3 * 5) / (3 + 5) = 1.875 und dein Programm spuckt nur 1 aus.

(Einheit von R_ges in Milliohm umwandeln)

R_ges = 1000 * (3 * 5) / (3 + 5) = (1000 * 3 * 5) / (3 + 5) = 1875


Willst du nun das Ergebnis in Ohm haben aber die Nachkommastellen nicht verlieren benutzt du den modulo.

nachkommastellen = R_ges%1000 = 875

R_ges = R_ges / 1000

da fällt mir nur "teilen mit rest" ein, oder genauer "euklidischer algorithmus".

dein bild ist viel zu klein, durch ranzoomen sieht man auch nicht mehr. daher weiß ich nicht welche rechnungen du ausführst, aber da es um widerstände geht... wird wohl nicht mehr als +, -, * oder / sein.

wenn z.B: 4/9 teilst, dann ist das ja 0 rest 4. das kann man nur durch abziehen der 9 von der 4 erzielen, solange es gerade noch ein nicht-negatives ergebnis hat. (hier keinmal, da 4-9 bereits kleiner 0 ist). was dann über bleibt ist der rest. entscheidend ist nun, wann der rest zur aufrundung, wann zur abrundung führt. das ist aber auch nicht schwierig. nimm den rest mal 2 und sieh ob es größer als 9 wird. 4 * 2 = 8 < 9, also wird abgerundet. denn dann weiß man, dass 4/9 < 1/2 ist !!

da du eh den mod-befehl verwenden darfst, geht das dann natürlich noch viel einfacher, du musst nichtmal den euklidischen algorithmus ausführen, falls du die ganzzahlige teilung auch beherrscht, was aber C++ ja automatisch macht, wie du schreibst. ("Nachkommastellen wegschneidet")

wenn du durch additionen und subtraktionen auf gebrochene zahlen kommst (weil du z.B.: 1+ 2,4 rechnen sollst und der input noch nicht gerundet wurde), dann kannst du auch auf das ergebnis der rechnung die teilung mit rest durch due zahl 1 ausführen.

wenn du nicht auf ganze zahlen runden sollst, sondern z.B. auf die 3te nachkommastelle, dann musst du zuerst dein ergebnis mit 1000 = 10^3 multiplizieren und dann auf ganze zahlen runden. danach wieder durch 10^3 teilen. so rundest du also erst auf "spätere" stellen nach dem komma.

Auf dem Bild kann man nichts erkennen.

du kannst z.B. mit http://sebsauvage.net/paste/ Text-Fragmente ins Web stellen.

Aber mit float oder double dürft ihr die Variablen definieren? Oder müsst ihr int verwenden? Sollt ihr den Trick mit der Skalierung rausfinden (also z.B. alle Eingangswerte mit 100 multiplizieren)?

Gruß, Max.