Entwickler-Ecke
C# - Die Sprache - Potenzieren in Schleife
Ritzeratze - Mo 23.09.13 20:05
Titel: Potenzieren in Schleife
Moin,
ich habe da vielleicht ein Verständnisproblem. Beim Potenzieren Basis ^ Exponent wird doch die Basis * Basis errechnet, also z.B. 2 ^ 3 = 2*2*2 = 8.
Wenn ich nun die Basis in die Variable d_BasisWert und den Exponent in die Variable d_ExpoWert stecke, müsste ich mit der folgenden Schleife den Wert errechnen können
C#-Quelltext
1: 2: 3: 4: 5: 6:
| static double Ergebnis=1;
for (int i = 1; i <= d_ExpoWert; i++) { Ergebnis *= d_BasisWert; } |
Das Ergebnis habe ich mit 1 initialisiert, sonst kommt in der Berechnung immer 0 heraus.
Aber warum kommt bei mir immer 0 heraus. Kann mir jemand einen Tipp geben denn ich glaube ich habe da ein Mathematisches Loch.
Gruss Ritze
Ralf Jansen - Mo 23.09.13 20:13
Dir fehlen grundlegende Debuggingfähigkeiten. Damit würdest du wahrscheinlich in null komma nix das Problem selber sehen.
Für den Anfang starte dein Programm doch mal einfach mit F10 (ich gehe davon aus du benutzt Visual Studio) und sieh dir während du schrittweise durch dein Programm springst den Inhalt der benutzten Variablen an. Im Normalfall solltest dir ein Licht aufgehen wenn der Inhalt einer Variablen von deiner Erwartung abweicht.
Ansonsten kann man aus deinem Codeschnipsel rein gar nix ableiten. Wie bräuchten mehr Context.
Ritzeratze - Mo 23.09.13 20:26
Nabend Ralf,
Ne Debugging Erfahrungen sind schon da. ich sehe ja auch das Ergebnis immer 0 bleibt. Aber warum.
Nach dem ersten Lauf müsste Ergebnis den Wert von der Basis haben, da ich Ergebnis mit 1 vorbelegt habe.
Also 1 * 2 = 2; Im nächsten Lauf wird der Zähler erhöht und Ergebnis mit der Basis multipliziert. Dann wird das Ergebnis zugewiesen, also 4.
im dritten Lauf dann 8. Ich sehe den Fehler nicht. Verstanden habe ich das schon.
Gruss Ritze
Ralf Jansen - Mo 23.09.13 20:36
Zitat: |
ich sehe ja auch das Ergebnis immer 0 bleibt. |
Also zummindest am Anfang sollte es ja 1 sein du hast es ja explizit so initialisiert. Wenn du nicht mal das siehst dann sollte das auch ein Hinweis sein.
Ansonsten fehlt uns immer noch der Context.
Delphi-Laie - Mo 23.09.13 20:41
Das sehe sogar ich ohne nenneswerte C#-Erfahrung: Ergebnis:=Basis*Basis wird hier berechnet.
Es muß aber Ergebnis:=Ergebnis*Basis heißen.
jaenicke - Mo 23.09.13 20:44
Delphi-Laie hat folgendes geschrieben : |
Das sehe sogar ich ohne nenneswerte C#-Erfahrung: Ergebnis:=Basis*Basis wird hier berechnet.
Es muß aber Ergebnis:=Ergebnis*Basis heißen. |
Die fehlt dir hier aber, denn dort in der Zeile steht bereits Ergebnis := Ergebnis * Basis, das *= macht genau das...
Wie d_BasisWert und d_ExpoWert initialisiert sind, ist aus dem Quelltext aber nicht zu ersehen.
Ritzeratze - Mo 23.09.13 21:32
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31:
| static double Basiswert, Expowert, Ergebnis = 1, ;
static void Potenzieren() { for (int i = 1; i <= Expowert; i++) { Ergebnis *= Basiswert;
} }
static void Rechneoperationen (out double ergebnis) {
ergebnis = 0;
switch (wahl) { case "P":
Potenzieren();
Console.WriteLine("Das Ergebnis der Potenzierung ist: {0}", ergebnis);
break; |
......
Ritzeratze - Mo 23.09.13 22:04
Ok gecheckt. Ich hab jetzt nur noch einen kleinen kosmetischen Fehler.
Die Berechnung stimmt.
Th69 - Di 24.09.13 09:53
Hallo Ritzeratze,
wie du wohl selber erkannt hast, sind static-Variablen keine gute Wahl. Verwende besser lokale Variablen und Rückgabewerte von Methoden. Dann passiert dir beim nächsten Mal nicht nochmal so ein Fehler.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!