Potenzfunktion mittels while- und for Schleife und rekursiv lösen
-
Hallo, ich brauche dringend Hilfe,
wir sollen in der FH eine Potenzfunktion mittels while schleife und mittels for schleife und auch noch einmal rekursiv lösen. Leider habe ich zur zeit gar keine Ahnung wie ich das realisieren soll.Vielleicht kann mir da jemand auf die Sprünge helfen...
MFG
-
2Good4This schrieb:
Hallo, ich brauche dringend Hilfe,
wir sollen in der FH eine Potenzfunktion mittels while schleife und mittels for schleife und auch noch einmal rekursiv lösen. Leider habe ich zur zeit gar keine Ahnung wie ich das realisieren soll.Vielleicht kann mir da jemand auf die Sprünge helfen...
MFG
\begin{math}3^4 = 3 \cdot 3 \cdot 3 \cdot 3\end{math}
Wenn Du nun folgende Funktionssignatur hast:
int power_of(int base, int power);
, wie muss dann wohl die Lösung mit einer for- und einer while-Schleife aussehen? Und wie die rekursive?
-
Und für die Rekursion:
Benötigt aber noch etwas Anpassung für Exponenten die keine Zweierpotenzen sind, aber da kommst du sicher selber drauf.
-
Danke schonmal für die Antworten, aber die helfen mir noch nicht besonders viel..
Ich habe vergessen zu erwähnen, das das ganze über eine Funktion [cpp]int potenz (int x, int y) realisiert werden soll. Das 3^4= 3*3*3*3 ist, ist mir bewusst, jedoch weiß ich trotzdem nicht, was ich in die Bedingungen für die Schleifen schreiben soll. Bin noch ein ziemlicher Newbie in cpp
-
Nun, die while-Schleife läuft, solange das ihr übergebene Argument richtig ist. Die for-Schleife ist komplizierter, aber dazu findest Du sicherlich viel Material mit Google. Hilft das?
-
2Good4This schrieb:
Bin noch ein ziemlicher Newbie in cpp
Und gerade deswegen sollst du deine Hausaufgaben auch selber machen. Eine Zählschleife wie diese hier musst du in 10 Sekunden selber programmieren können, selbst wenn man dich nachts um drei aus dem Schlaf reißt. Das geht aber nur mit Übung. Diese Übungsaufgabe ist wirklich extrem einfach, sei nicht so faul!
-
2Good4This schrieb:
Danke schonmal für die Antworten, aber die helfen mir noch nicht besonders viel..
Ich habe vergessen zu erwähnen, das das ganze über eine Funktion [cpp]int potenz (int x, int y) realisiert werden soll. Das 3^4= 3*3*3*3 ist, ist mir bewusst, jedoch weiß ich trotzdem nicht, was ich in die Bedingungen für die Schleifen schreiben soll. Bin noch ein ziemlicher Newbie in cppWenn Ihr eine rekursive Lösung bieten sollt, dann müsstet Ihr im Stoff eigentlich ausreichend weit fortgeschritten sein um sowas hinzubekommen.
Wie wäre es, wenn Du mal zeigst, was Du schon hast?
-
Mein Problem ist doch, das ich nicht weiß, was ich in die Bedingung für die while schleife schreiben soll... wie eine while Schleife arbeitet ist mir bewusst. Und wenn ich faul wäre, würde ich mir das ganze einfach von einem Kommilitonen besorgen, ich habe mich also extra hier angemeldet um es selber zu lernen. Das mit Rekursive stelle ich erstmal zurück, muss zu anfang erstmal die while und die forschleife hinbekommen.
-
Dann fangen wir doch mal mit der for-Schleife an. Beantworte die folgenden Fragen:
1. Was macht eine for-Schleife?
2. Was genau macht jedes einzelne Feld im Kopf einer for-Schleife?
3. Wie würdest du auf dem Papier eine Potenz ausrechnen?
4. Wie kannst du 3. auf 1. und 2. übertragen?
-
1. Also die Bedingungen werden dabei im Kopf gesetzt und vor jedem Durchgang geprüft, und nach jedem Durchgang erfolgt die veränderung der Zählvariable.
2.Es gibt einen Startwert, Bedingungen und eine Zählvariable
3. Ich würde die Basis, so oft mit sich mal nehmen wie der Exponent lautet.
Beispiel: 7^3=7*7*74. Genau das bekomme ich nicht gebacken
-
Bei 7^3 würdest du also von 1 bis 3 zählen und bei jedem Schritt dein bisheriges Ergebnis mal sieben nehmen. Fällt dir vielleicht jetzt etwas auf?
-
Ah... Mein Startwert dürfte also 0 sein, und meine Bedingung gleich dem Exponenten, so richtig ? Und in der Schleife muss ich jedesmal mein Ergebnis mit der Basis multiplizieren...
-
2Good4This schrieb:
Ah... Mein Startwert dürfte also 0 sein, und meine Bedingung gleich dem Exponenten, so richtig ? Und in der Schleife muss ich jedesmal mein Ergebnis mit der Basis multiplizieren...
Das klingt doch gar nicht mal so verkehrt, schreib das mal als konkreten Code, damit ich sehe, ob ich dich auch richtig verstanden habe. Denk daran, dass du zwei Werte brauchen wirst: Einen Zähler wie oft du schon multipliziert hast und einen Wert für das Ergebnis dieser Multiplikationen.
-
[cpp]#include <stdio.h> //Einbinden von Bibliotheken
#include <conio.h>int potenz (int , int );
int main(void)
{
int x=0;
int y=0;
int i=0;
int e=x;
printf("Bitte geben Sie eine Basis ein: ");
scanf("%i", &x);
printf("Bitte geben Sie einen Exponenten ein: ");
scanf("%i", &y);}
int potenz (int x, int y)
{
int i;
for (i=0; i=y, i+=1)
{
e=e*x
}
}
in der Zeile mit dem bösen Smiley haut er noch nen Fehler raus
-
1. Die for-Schleife wird solange abgearbeitet, wie die Bedingung wahr ist, nicht so lange, bis die Bedingung wahr ist.
2. i=y ist kein Vergleich, sondern eine Zuweisung. Aber nach 1. ist diese Bedingung ohnehin falsch.
3. Wie dir dein Compiler schon gesagt haben wird, fehlt eine Deklaration von e. Die Variablen aus der main haben nichts mit den Variablen in potenz zu tun.
4. Du willst doch etwas zurückgeben, da fehlt ein return. Auch das sollte dir dein Compiler sagen.
5. Zum Testen wäre es vielleicht auch eine gute Idee, die Funktion zu benutzen.
6. Du machst C, kein C++. Da die Frage nicht C-spezifisch ist, lasse ich es aber trotzdem mal im C++ Forum, solange keine speziellen C Fragen auftauchen.
-
int potenz (int x, int y)
{
int i;
int e=x;
for (i=0; i<=y, i+=1)
{
e=e*x
}
return e;
}hmm, so besser ? den fehler in der for Zeile hat er aber immer noch.
Deinen Punkt 5. verstehe ich nicht
Zu 6. Wieso programmiere ich c ? Ich bin bisher davon ausgegangen das das c++ ist
-
Was für einen Fehler meldet der Compiler denn?
2Good4This schrieb:
Zu 6. Wieso programmiere ich c ? Ich bin bisher davon ausgegangen das das c++ ist
printf() und scanf() sind aus C geerbt, die kannst du zwar noch nutzen, aber in C++ verwendet man cin und cout für die Ein-/Ausgabe.
PS: Und die Schleifenbedingungen solltest du auch nochmal überprüfen.
-
2Good4This schrieb:
hmm, so besser ? den fehler in der for Zeile hat er aber immer noch.
Semikolons! Das Komma hat eine andere Bedeutung.
Deinen Punkt 5. verstehe ich nicht
Du solltest dein Ergebnis kontrollieren. Du wirst feststellen, dass es nicht ganz stimmt. Wenn du ein bisschen mit den Werten herumspielst wird dir sicher auch klar, was nicht stimmt.
Zu 6. Wieso programmiere ich c ? Ich bin bisher davon ausgegangen das das c++ ist
Es ist C. Das sieht man daran, dass du
1. Überhaupt kein einziges der Zusatzfeatures von C++ benutzt. Hier würde sich z.B. die Möglichkeit Variablen im Kopf von for-Schleifen zu deklarieren anbieten. Oder die Möglichkeit, Variablen überall im Programm zu deklarieren, nicht nur am Anfang von Funktionen.
2. Teile von C benutzt für die es in C++ kompletten Ersatz gibt, so dass es äußerst ungewöhnlich wäre, diese in C++ noch zu benutzen. Hier sind dies die C Ein-/Ausgabefunktionen die in C++ komplett überarbeitet wurden.Das soll aber kein Vorwurf sein, C ist auch eine gute Sprache, wenn man es vernünftig lernt (was auch einfacher sein dürfte als bei C++ weil es einfach weniger zu lernen gibt). Man sollte nur nicht den Fehler machen, beides gleichzeitig zu lernen, dann lernt man nämlich erfahrungsgemäß keines von beidem.
Falls du nach einem Buch lernst, dass C/C++ lehren will oder dass dir das bisher gelernte als C++ verkaufen wollte, schmeiß es weg.
-
Achso, gut zu wissen... Unser Prof sagte wir machen c++
Aber naja... ALso funktionieren tut es nun dank des semikolons aber komisch ist, das immer 0 raus kommt, nehme ich bei der deklaration von x das =0 weg kommt bei jeder zahlenkombi der wert 1968414260 raus =(... Weiß nur leider nicht wo der Feherteufel versteckt ist... Ich hab gerade keine ahnugn wie die anweisungen bei der for schleife sonst lauten sollten...
-
2Good4This schrieb:
Achso, gut zu wissen... Unser Prof sagte wir machen c++
Aber naja... ALso funktionieren tut es nun dank des semikolons aber komisch ist, das immer 0 raus kommt, nehme ich bei der deklaration von x das =0 weg kommt bei jeder zahlenkombi der wert 1968414260 raus =(... Weiß nur leider nicht wo der Feherteufel versteckt ist... Ich hab gerade keine ahnugn wie die anweisungen bei der for schleife sonst lauten sollten...
Bei solchen Fehler wird dir (im Gegensatz zu plumpen fragen nach Hausaufgaben) hier sehr gerne geholfen. Zeig den Code und eine genaue Beschreibung des Fehlverhaltens jemand wird dir den Fehler zeigen.