Laden...

Potenz a ^ b liefert falsches Ergebnis [==> Math.Pow(a, b) verwenden]

Erstellt von Bladz vor 12 Jahren Letzter Beitrag vor 12 Jahren 12.488 Views
Thema geschlossen
B
Bladz Themenstarter:in
2 Beiträge seit 2011
vor 12 Jahren
Potenz a ^ b liefert falsches Ergebnis [==> Math.Pow(a, b) verwenden]

Hallo meine Lieben
Ihr kennt vielleicht folgendes Zahlenrätsel:
Du hast 9 Kugeln, eine ist minimal schwerer. Mit einer Balkenwage sollst du die schwerere finden. Wiege so selten wie möglich, wie oft muss man mindestens wiegen um mit Sicherheit die schwerere Kugel zu finden.
Ich kenn die Lösung und spoiler hier einfach mal, dass immer gilt:
3Wie oft ich wiegen muss = Kugelanzahl
In diesem Fall: 3
2=9 (9 Kugeln -> 2 mal wiegen)
Ich habe versucht das ganze in n Windows-Form zu setzen:
TextBox1 zur Eingabe der Kugeln
TextBox2 zu Ausgabe der Anzahl an Wiegevorgängen
Button1 zur Berechnung

Und folgenden Code für den Button:

for (int x = 0; x <= 100; x++)
            {
                int y = 3 ^ x;
                int z = 3 ^ (x + 1);
                if ((Convert.ToInt32(textBox1.Text) >= y) & (Convert.ToInt32(textBox1.Text) <= z))
                {
                    textBox2.Text = Convert.ToString(x+1);
                }
            }

Besagt, so wars zumindest geplant, dass die schleife die exponenten von 30 bis 3100 berechnet und immer vergleicht ob die eingegebene Zahl Kugeln zwischen 3x und 3x+1 liegt. Tut sie das, so soll das Programm in TextBox2 x+1 ausgeben
Leider kommen komplett seltsame Ergebnisse zustande.
Könnt ihr mir helfen und mir sagen warum bitte?
Liebe Grüße und danke

Bladz

1.346 Beiträge seit 2008
vor 12 Jahren

Der ^-operator bedeutet nicht, dass die potenz genommen wird. Das ist ein binäres XOR. Richtig ist: Math.Pow(basis, exponent);

B
Bladz Themenstarter:in
2 Beiträge seit 2011
vor 12 Jahren

tadaa 😄 da hätt ich aber echt selbst drauf kommen müssen xD dankeschön^^

Ach und falls es irgendeinen interessiert (was ich nicht glaube, aber könnte ja sein 😄)
Hier die Endfassung, noch mit leichten Änderungen

for (int x = 0; x <= 100; x++)
            {
                double y = Math.Pow(3, x);
                double z = Math.Pow(3, (x + 1));
                if ((Convert.ToDouble(textBox1.Text) > y) & (Convert.ToDouble(textBox1.Text) <= z))
                {
                    textBox2.Text = Convert.ToString(x+1);
                }
                if (Convert.ToDouble(textBox1.Text) == y)
                {
                    textBox2.Text = Convert.ToString(x);
                }
                if (Convert.ToDouble(textBox1.Text) == z)
                {
                    textBox2.Text = Convert.ToString(x + 1);
                }
            }

Danke nochmal vielmals 😄

6.911 Beiträge seit 2009
vor 12 Jahren

Hallo Bladz,

als Anmerkung zum Code: verwende lieber double.TryParse und double.ToString für die Konvertierungen.

Beachte bitte vorsorglich auch [Hinweis] Wie poste ich richtig? Punkt 1.1, 1.1.1

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

Thema geschlossen