Forum: PC-Programmierung Funktionen in C++


von Klaus (Gast)


Lesenswert?

Hi,

hab versucht ein Programm zu schreiben, das mir die Funktionswerte von 
f(x)=e^(sin(x)) bestimmt.

#include <iostream>
#include <cmath>

using namespace std;

int main()
{
  double x;
  cout << "Gib ein x ein!" << endl;
  cin >> x;
  double sin_x = sin(x);
  double exp(1.0);

  cout << pow(exp(1.0),sin_x) << endl;

}

Wo ist denn hier der Fehler? Jedenfalls ist in der vorletzten Zeile exp 
rot unterkringelt, mit dem Hinweis: Error: Der Ausdruck muss einen 
(pointer-to-)Funktionstyp aufweisen. Irgendwie kann ich damit jetzt 
überhaupt nichts anfangen

LG

von Dr. Sommer (Gast)


Lesenswert?

Klaus schrieb:
> Irgendwie kann ich damit jetzt
> überhaupt nichts anfangen

> double exp(1.0);
Damit kann keiner was anfangen. Was soll das denn bewirken??

Klaus schrieb:
> using namespace std;
http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice

von Peter II (Gast)


Lesenswert?

sieht ja auch komisch aus.

> double exp(1.0);
was meinst du damit?

double exp = 1.0?

> cout << pow(exp(1.0),sin_x) << endl;
hier schon wieder

exp(1.0)
was soll das sort?


entweder willst du eine variable anlegen mit dem Namen exp oder eine 
Funktion aufrufen.

von Karl H. (kbuchegg)


Lesenswert?

exp ist eine Funktion. Genauso wie sin.

Du hast ja auch nicht
1
double sin(x);
geschrieben. Sondern du hast eine Variable definiert
1
double sin_x
die du mit dem Ergebnis des Funktionsaufrufs sin(x) initiallisiert hast.
1
double sin_x = sin(x);


exp ist eine Funktion. Aber du hast keine Variable, die das Ergebnis des 
Funktionsaufrufs aufnehmen würde.

: Bearbeitet durch User
von Yalu X. (yalu) (Moderator)


Lesenswert?

Statt
1
  double exp(1.0);
2
3
  cout << pow(exp(1.0),sin_x) << endl;

wolltest du wahrscheinlich schreiben:
1
  double e = exp(1.0);  // Eulersche Zahl e = 2.71828...
2
3
  cout << pow(e, sin_x) << endl;   // e ** sin_x

pow(e, irgendwas) ist aber gerade exp(irgendwas), denn genau so ist die
exp-Funktion definiert. Allso schreibst du besser:
1
  cout << exp(sin_x) << endl;   // e ** sin_x

und lässt die Zeile darüber weg.

: Bearbeitet durch Moderator
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.