Potenzfunktion mittels while- und for Schleife und rekursiv lösen
-
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.
-
Hallo,
rufst du in deiner 'main'-Funktion überhaupt die 'potenz'-Funktion mit korrekten Parametern auf (im obigen Code fehlt dieser Aufruf nämlich
?
So wie SeppJ schon schrieb, zeig mal deinen gesamten Code (aber packe ihn korrekt in CPP-Tags).
-
Zudem ist ein
foo = foo * bar;
äquivalent zu
foo *= bar;
Und ein
foo += 1;
ist äquivalent zu
++foo;
MfG, EOutOfResources
-
Hallo.
Ich hatte mal langeweile, doch mehr vorkauen will ich es wirklich nicht.
// Main.cpp #include <iostream> using namespace std; int power_of(int base, int power); int main() { int b,p,erg; cout << "Basis: "; cin >> b; cout << "Potenz: "; cin >> p; erg = power_of(b,p); cout << "Ergebnis: " << erg << endl; return 0; } int power_of(int base, int power) { int temp = base; for(int i=1 ; i<power ; i++) { temp *= base; } return temp; }
Ich denke, daraus solltest du auch die Lösung für das Whilekonstrukt ableiten können.
Mfg Micha.
-
Micha321 schrieb:
int power_of(int base, int power) { int temp = base; for(int i=1 ; i<power ; i++) { temp *= base; } return temp; }
Kleiner Flüchtigkeitsfehler, x^0 = 1, nicht x
Aber ohne den Code vom Threadersteller kann man fast nur spekulieren, wo momentan sein Problem liegt...
-
2Good4This schrieb:
[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 rausin deiner Lösung liegt der Fehler auch daran, das die Variable e nur lokal in dem main() block gilt.
ein weiterer fehler liegt in deinem for schleifen kopf, dieser wurde ja schon genannt, = ist eine zuweisung an dieser stelle, und das komma müsste ein semikolon sein.
in der for schleife verwendest du das e, das geht schonmal nicht, da wird der compiler meckern
wenn du hier x verwendest, ist dieser wert der basis ja nach dem ersten durchlauf verloren, also sollte man ihn retten in eine lokale variable.
als letztes fehlt ein rückgabewert deiner funktion.
Irgendwas brauchst du ja als ergebnis, wie du ja im Prototyp eigentlich schon angekündigt hattest.Was allerdings machst du für den sonderfall x^0 ?
Diesen solltest du Frühzeitig z.b. mit einer Prüfung von y in den ersten zeilen checken.
ich hoffe ich konnte helfen :o
-
Schade, dass natürlich mal wieder jemand die Lösung gepostet hat.
Bisher haben sich 2Good4This und SeppJ schön Schritt für Schritt der Lösung durch Frage-Antwort Spielchen genähert, was sicherlich einiges an Mehrwert in Bezug auf den Lernfortschritt hat als eine fertige Lösunge vorgesetzt zu bekommen.
-
dabei ist die "Lösung" auch nicht 100% korrekt
-
Hier mal ne rekursive Lösung: http://ideone.com/G6qEl
-
0 hoch 0 ist übrigens auch 1
-
einDoof schrieb:
0 hoch 0 ist übrigens auch 1
Das kommt ganz darauf an, wen du fragst
@Pi: Ich glaube, für jemanden der gerade erst gelernt hat, wie man Funktionen verwendet, ist deine TMP-Lösung etwas zu fortschrittlich
-
einDoof schrieb:
0 hoch 0 ist übrigens auch 1
Nein, 0^0 ist nicht definiert. 1 kann höchstens ab und zu praktisch sein, gerade als Konvention in der Programmierung.
Dass es nicht definiert ist, sieht man daran, wenn man unterschiedliche Funktionen konvergieren lässt (z.B. x^x und 0^x für x->0+).
-
ich hab um ganz ehrlich zu sein nur schnell Google gefragt um mich abzusichern.
Jedoch hab ich auch hier in diesem Forum einen Thread gefunden, in dem darüber diskutiert wurde, da einige Sprachen unterschiedliche Lösungen hierzu bieten.Einfach nichts zu tun wie in dem Beispiel erachte ich nicht als ok.
Stell dir mal vor ein Anwender nutzt unwissend pow<0,0>::value.
Also entweder 1 oder 0.
Ich wär für 1
-
einDoof schrieb:
Stell dir mal vor ein Anwender nutzt unwissend pow<0,0>::value.
Also die beste Methode, das zu verhindern, ist ein kontrollierter Compiler-Fehler (was der obige Ansatz auch gut hinbekommt - die Spezialisierung pow<0,0> hat kein value) oder die Rückgabe eines Fehlerwertes (wo möglich).
-
Nexus schrieb:
einDoof schrieb:
0 hoch 0 ist übrigens auch 1
Nein, 0^0 ist nicht definiert. 1 kann höchstens ab und zu praktisch sein, gerade als Konvention in der Programmierung.
Dass es nicht definiert ist, sieht man daran, wenn man unterschiedliche Funktionen konvergieren lässt (z.B. x^x und 0^x für x->0+).
Was hat die Stetigkeit zweier Funktionen mit der Definition von 0^0 zu tun? Ich würde meinen gar nichts. Was man höchstens daran sehen kann, ist, das solch eine Definition nicht wohldefiniert ist. Das heißt aber lange noch nicht, dass es eine solche Definition nicht gibt.