Fließkommazahl errechne die nächst größeren Ganzzahl
-
Ha HABE ES!!!!!!!!!!!!!!!!!!!!!!!!!
DANKE DANKE DANKE!!!
void Test(double d_in) { for (int int_Zahl = INT_MIN; int_Zahl <= INT_MAX ; int_Zahl++ ) { if( int_Zahl > int(d_in)) { cout << int_Zahl << "\n"; return; } } } void main() { cout << "ceiling(3.14) = "; Test(3.14); cout << "ceiling(-5.67) = "; Test(-5.67); system("pause"); }Jetzt entspricht alles der Aufgabe!!!
Herzlichen Dank für den Denkanstoß und so
Wünsche eine gute Nacht!
-
Ähm, da solltest nochmal ganz genau drüber nachdenken, vor allem über das int(d_in)...war das nicht verboten? Und wenn du das schon machst, wofür dann überhaupt der ganze Rest!?
-
Ja hatte noch den alten Code....sorry...
es muss natürlich{ if( int_Zahl > int(f_in)) {heißen nicht
größer gleich.... soll ja den nächst größere Zeigen.
Vergleiche sind expizit erlaubt!Vergleichsoperationen wie >, ≥ etc. zwischen Fließkommazahlen und Ganzzahlen sind gestattet.
DANKE!
-
int(f_in) ist aber eine Typumwandlung. Lass das einfach weg...
btw: Was ist mit negativen Zahlen?
-
dot schrieb:
Und wenn du das schon machst, wofür dann überhaupt der ganze Rest!?
Welcher Rest?? Was meinst du?
INT_MIN <- Minimum von Integer (in <climits> festgelegt)
INT_MAX <- Maximum von Integer
void main()
{
cout << "ceiling(3.14) = "; //Ausgabe damit es so aussieht wie in der Aufgabenstellung
Test(3.14);
cout << "ceiling(-5.67) = ";
Test(-5.67);
system("pause"); //Erzeugt ein "HALT"....damit die Konsole offen bleibt
}
-
dot schrieb:
int(f_in) ist aber eine Typumwandlung. Lass das einfach weg...
btw: Was ist mit negativen Zahlen?Naja denke die Typumwandlung geht in Ordnung.
Stimmt mit negativen Zahlen ist das Ergebnis zwar mathematisch richtig. Also der nächst größere Integer aber nicht nach Beispiel. Mhhhh....ach ich hasse das.
Hat jemand eine Idee??
-
Meine Lösung....
void Test(double d_in) { for (int int_Zahl = INT_MIN; int_Zahl <= INT_MAX ; int_Zahl++ ) { if( int_Zahl > int(d_in)) { if(int_Zahl >= 0) { cout << int_Zahl << "\n"; } else { cout << int_Zahl - 1 << "\n"; } return; } } } void main() { cout << "ceiling(3.14) = "; Test(3.14); cout << "ceiling(-5.67) = "; Test(-5.67); cout << "ceiling(0.67) = "; Test(0.67); system("pause"); }Nicht schön aber selten......und so stimmt die Ausgabe!
ceiling(3.14) = 4
ceiling(-5.67) = -5Und mit 0.XX läuft es auch...
Ausgabe:
ceiling(3.14) = 4
ceiling(-5.67) = -5
ceiling(0.67) = 1
Drücken Sie eine beliebige Taste . . .
-
Aber du verwendest immer noch die verbotene Typumwandlung und diese Lösung ist wahnsinnig langsam...
-
dot schrieb:
Aber du verwendest immer noch die verbotene Typumwandlung und diese Lösung ist wahnsinnig langsam...
Ja ich weiß...ist aber ne Klausur/Hausaufgabe....auf Speed kommt es nicht an. Und ja du hast recht ohne ist es besser. Scheinbar rundet int(XX)....
so jetzt habe ich es...ohne Typenumwandlung....void Test(double d_in) { for (int int_Zahl = INT_MIN; int_Zahl <= INT_MAX ; int_Zahl++ ) { if( int_Zahl > d_in) { cout << int_Zahl << "\n"; return; } } }Benutzt INT_MIN/INT_MAX nur um den ganzen Bereich abzudecken.
ceiling(3.14) = 4
ceiling(-5.67) = -5
ceiling(0.67) = 1
Drücken Sie eine beliebige Taste . . .
-
magier-phil schrieb:
dot schrieb:
Aber du verwendest immer noch die verbotene Typumwandlung und diese Lösung ist wahnsinnig langsam...
Ja ich weiß...ist aber ne Klausur/Hausaufgabe....auf Speed kommt es nicht an. Und ja du hast recht ohne ist es besser. Scheinbar rundet int(XX)....
Nö, int(XX) rundet nicht, es schneidet einfach den Nachkommateil weg ("truncate").