Problem mit Funktion
-
Hallo Leute,
der Titel des Topics deutet es schon an, dass ich ein kleines Problem habe bei meiner Funktion. Der Grundgedanke war, dass mein Programm später Dezimalzahlen in Binärschreibweise ausgeben kann, soweit so gut als Anfänger ist das vielleicht ne schöne Knobelaufgabe.Meine erste Etappe bestand darin, dass das Programm die größte Zweierpotenz die in den Dezimalwert passt ermittelt. Und auch die Schleifendurchgänge zählt, da sie für die zweite Etappe sehr wichtig sind. Aber ich habe nur bei der größten Zweierpotenz meine Schwierigkeiten. Statt die größte die in die Dezimalzahl rein passt kommt die nächst größere.
Ein Beispiel: Bei dem Wert 65 wäre das 64 aber mein Programm will sturr 128 durchsetzen. Falls ich das noch zu scheußlich erklärt habe mein Programmcode:
#include <iostream> using namespace std; // Funktionsprototypen int biggestValue(int valueCopy); // Deklarationen int count = 0; int main() { int value; cin >> value; int ret = biggestValue(value); cout << ret << endl; return 0; } // Funktionsdefinitionen int biggestValue(int valueCopy) { int n = 1; do { n *= 2; count++; } while(n <= valueCopy); return n; }Ich hoffe jemand von euch findet den Fehler. Ich meine, dass bei mir irgendeine Kleinigkeit falsch is, aber ich finde diesen Schnitzer einfach nicht.
Gruß,
aikiguy91
-
Na ja, die Schleife läuft halt so lange wie Du es ihr gesagt hast.
Solange bis "n <= valueCopy" nicht mehr stimmt. Dann ist n halt größer :-)))
-
du brichst eben erst ab, wenn n schon wieder doppelt so groß ist.
-
Mist, solche Fehler passieren mir jedes mal bei Schleifen -.-
Wie könnte ich das Programm anders formulieren, sodass es das tut, was ich will, denn ich sehe momentan keine Lösung in meinem Programmcode.
-
return n-1 wäre etwas zu einfach und birgt andere Tücken :-)))
-
#include <iostream> using namespace std; // Funktionsprototypen int biggestValue(int valueCopy); // Deklarationen int count = 0; int main() { int value; cin >> value; int ret = biggestValue(value); cout << ret << endl; return 0; } // Funktionsdefinitionen int biggestValue(int valueCopy) { int n = 1, nTemp; do { nTemp = n; n *= 2; count++; } while(n <= valueCopy); return nTemp; }
-
Wow das war ja echt nur eine Kleinigkeit. Danke für eure Hilfe

Gruß,
aikiguy91
-
Es ist immer "ganz einfach" wenn man die Macke gefunden hat
