Seite 1 von 2

pow-Funktion; Hilfe notwendig!

Verfasst: Mo Sep 29, 2008 8:35 pm
von TomGom
Hi,
ich hab folgendes Programmierbeispiel:

Code: Alles auswählen

#include <stdio.h>

double pow();

int main()
{
double x = 2.5, y;

y= pow(x, 3.0);
printf ("2.5 hoch 3 ergibt:   %f\n, y);

printf ("2 + (3 hoch 2.5) ergibt:  %f\n", 2 + pow(3.0, x));

return 0;
}
Ich hab erst angefangen C zu lernen. Das Beispiel ist für mich auch sinnvoll und nachvollziehbar, jedoch zeigt mir der Compiler folgendes an:
"error C2660: 'pow' : Funktion akzeptiert keine 2 Parameter"

Sind für die Funktion "pow" nicht 2 Parameter notwendig??
Oder kann mir jemand sagen, wo hier der Fehler liegt?

Bin über jede Hilfe glücklich, da es schon ziemlich deprimierend ist, gleich anfangs nicht weiter vorranzukommen.

MfG

Re: pow-Funktion; Hilfe notwendig!

Verfasst: Mo Sep 29, 2008 8:44 pm
von Kerli
TomGom hat geschrieben:"error C2660: 'pow' : Funktion akzeptiert keine 2 Parameter"
Das ist natürlich völlig klar. Du verwendest nämlich nicht die 'echte' pow-Funktion sondern deklarierst eine eigene:
TomGom hat geschrieben:double pow();
Mit diesem Codausschnitt deklarierst du eine Funktion mit dem Namen 'pow', die keine Parameter erwartete, und deshalb auch den Fehler erzeugt.

Damit du die richtige Funktion aus der Standardbibliothek benutzen kannst, musst du 'math.h' in dein Programm einbinden und am Besten löscht du auch gleich die von dir deklarierte Funktion 'double pow()'.

Übrigens: Willkommen im Forum ;)

Re: pow-Funktion; Hilfe notwendig!

Verfasst: Mo Sep 29, 2008 8:46 pm
von Dirty Oerti
http://www.elook.org/programming/c/pow.html hat geschrieben:Syntax:

Code: Alles auswählen

#include <math.h>
double pow( double base, double exp );

Description:
The pow() function returns base raised to the exp power. There's a domain error if base is zero and exp is less than or equal to zero. There's also a domain error if base is negative and exp is not an integer. There's a range error if there's an overflow.
exp muss laut dieser Referenz ein Integer sein, bei dir ist es ein Float.
Außerdem muss "math.h" eingebunden werden.
Sonst funtionierts auf keinen Fall. :)


*Da war wohl jemand schnell^^*

*EDIT*
Irgendwie...
pow muss ein Integer sein, wird aber als double definiert?
Versteh ich was falsch?
Oder widerspricht sich diese Referenz?

Naja, aber ich denke das Problem dürfte nach Kerli's Post lösbar sein :)
*/EDIT*

Re: pow-Funktion; Hilfe notwendig!

Verfasst: Mo Sep 29, 2008 9:02 pm
von TomGom
ok, danke :)
wenn ich "math.h" mit einbinde funzt alles wunderbar.
Ein bisschen ärgerlich is das zwar schon, dass das in dem Buch was ich mir gekauft habe,
insofern falsch drin steht, :( aber wozu gibt es foren?!^^

Und wenn ich "math.h" nicht einbinden würde, und somit selber eine Funktion deklariere...
wie genau würde das aussehen, wenn ich genau diesselbe Funktion bezeichnen will( also e^x)???

Re: pow-Funktion; Hilfe notwendig!

Verfasst: Mo Sep 29, 2008 9:13 pm
von Dirty Oerti
TomGom hat geschrieben:Und wenn ich "math.h" nicht einbinden würde, und somit selber eine Funktion deklariere...
wie genau würde das aussehen, wenn ich genau diesselbe Funktion bezeichnen will( also e^x)???
Du meinst du willst die Funktion selbst schreiben?

Code: Alles auswählen

long experimental_pow(int base, short exponent)
{
   long ret = base;
   for(;exponent>1;exponent--) {
      ret *= base;
   }
   return ret; //EDIT: Fast vergessen..
}
So dürfte das in etwa funktionieren :)

Re: pow-Funktion; Hilfe notwendig!

Verfasst: Mo Sep 29, 2008 9:33 pm
von TomGom
ok soweit bin ich dann doch noch nich...habs mir irgendwie einfacher vorgestellt.^^
Aber danke auf jeden Fall nochmal für die nette und schnelle Hilfe. :)

Ich hoffe, dass sich viele meiner Probleme in Zukunft von alleine lösen werden.
Ansonsten weiß ich ja, wo man gute Antworten bekommt (*schleim,schleim*) :D

MfG

Re: pow-Funktion; Hilfe notwendig!

Verfasst: Mo Sep 29, 2008 9:39 pm
von Dirty Oerti
TomGom hat geschrieben:ok soweit bin ich dann doch noch nich...habs mir irgendwie einfacher vorgestellt.^^
Aber danke auf jeden Fall nochmal für die nette und schnelle Hilfe. :)

Ich hoffe, dass sich viele meiner Probleme in Zukunft von alleine lösen werden.
Ansonsten weiß ich ja, wo man gute Antworten bekommt (*schleim,schleim*) :D

MfG
Keine Angst, so schwer ist das nicht. :)

Code: Alles auswählen

long experimental_pow(int base, short exponent)
{
   long ret = base;
   for(;exponent>1;exponent--) {
      ret *= base;
   }
   return ret; //EDIT: Fast vergessen..
}
Du übergibst der Funktion die Parameter, sagen wir mal 4 und 3.
ret ist der Rückgabewert.
Den setzen wir mal auf 4, damit haben wir 4 hoch 1 schonmal geschafft.
(Daher auch die 1 in der for-Schleife)
Jetzt zur Schleife:

Wir prüfen: exp > 1 ?
3 > 1 => ja
also multiplizieren wir die basis nochmal zum Rückgabewert:
ret *= base;
4 *= 4;
=> 4*4 = 16
dann wird exponent (durch die for-Schleife) um 1 verringert.
und von vorne:
2 > 1 => ja
=>=>
ret *= base;
16 *= 4;
=> 16 * 4 = 64;
exponent um eins niedriger => 1
1 > 1 => nein
wir verlassen die Schleife und geben per

return ret

das Ergebnis zurück.

Die Funktion oben kann natürlich noch schöner und besser realisiert werden, aber als einfaches Beispiel taugts :)

Re: pow-Funktion; Hilfe notwendig!

Verfasst: Mo Sep 29, 2008 9:42 pm
von Kerli
TomGom hat geschrieben:ok soweit bin ich dann doch noch nich...habs mir irgendwie einfacher vorgestellt.^^
Aber danke auf jeden Fall nochmal für die nette und schnelle Hilfe. :)
Bitte, dafür sind wir ja da ;)
TomGom hat geschrieben: Ich hoffe, dass sich viele meiner Probleme in Zukunft von alleine lösen werden.
Ansonsten weiß ich ja, wo man gute Antworten bekommt (*schleim,schleim*) :D
Sonst sind wir auch dabei ein Tutorial zu erstellen. Dort kannst du auch einiges lernen.

Und sollte etwas unverständlich sein, oder irgendetwas wichtiges nicht erklärt werden dann sag uns das bitte :D

Re: pow-Funktion; Hilfe notwendig!

Verfasst: Mo Sep 29, 2008 10:04 pm
von Xin
Dirty Oerti hat geschrieben:Du übergibst der Funktion die Parameter, sagen wir mal 4 und 3.
ret ist der Rückgabewert.
Den setzen wir mal auf 4, damit haben wir 4 hoch 1 schonmal geschafft.
(Daher auch die 1 in der for-Schleife)
Was, wenn ^1 schon zuviel ist?
4^0 ist nicht 4... ;-)

Re: pow-Funktion; Hilfe notwendig!

Verfasst: Di Sep 30, 2008 2:55 pm
von Dirty Oerti
Xin hat geschrieben:
Dirty Oerti hat geschrieben:Du übergibst der Funktion die Parameter, sagen wir mal 4 und 3.
ret ist der Rückgabewert.
Den setzen wir mal auf 4, damit haben wir 4 hoch 1 schonmal geschafft.
(Daher auch die 1 in der for-Schleife)
Was, wenn ^1 schon zuviel ist?
4^0 ist nicht 4... ;-)
Dirty Oerti hat geschrieben:Die Funktion oben kann natürlich noch schöner und besser realisiert werden, aber als einfaches Beispiel taugts :)
Ich weiß ich weiß.
Es ist nur ein Beispiel.
Schnell aus dem Ärmel geschüttelt.
Ich wollte jetzt keine allgemein gültige Funktion schreiben...
Wie funktioniert 5 hoch -3,563?
Das könnte ich mathematisch nicht mal genau ausrechnen, nur nähern.