Kann man mit C++ Funktionen Verschachteln?



  • Hallo!
    Habe folgendes Problem:
    Ich soll mittels simpson-Regel die Näherung eines Integral optional von 2 Funktionen f1 und f2 mit beliebigen Grenwerten bestimmen. f1 und f2 soll ich mit pointern in die Simpson Fkt einbringen.
    Folgendes habe programmiert:
    #include <iostream>
    #include <cmath>

    using namespace std;
    int i;
    double x=0, n, a, b, h= ( b-a )/ (2*n), *f, ;

    /*
    i ist Laufindex
    a obere Grenze, b untere Grenze
    h und n in Simpson verwendet

    double f1 (double &x)
    {
    double y;
    y=( exp(x) + 1/ exp(x) )/2 * cos(x);
    return y;
    }

    double f2 (double &x)
    {
    double y;
    y= 4 / ( 1+ x*x );
    return y;
    }

    double simpson(a, b, n)
    {
    double S1=0, S2=0, I, ha, hb;
    for ( i=3; i<= (n-2) /2; i=i+2)
    {
    x=a+i*h;
    S1= S1 + f;
    }

    for ( i=2; i< (n-1) /2 +1; i=i+2)
    {
    x= a+ i*h;
    S2=S2+ f;
    }
    x=a;
    ha = f ;
    x=b;
    hb= f ;

    I= h/3 * ( ha + hb + 4* S1 + 2* S2);
    return I;
    }

    Doch so lässt sich das ganze nich kompilieren. Weiß nichtmehr weiter...



  • N' Abend erstmal,

    Also erstmal würde ich dir Code-TAGS für deine weiteren Posts empfehlen, dann werden die nämlich schneller beantwortet, da übersichtlicher!

    Dann ist mir bei deinem Code aufgefallen, das er sehr viele Fehler enthält -das sind Grundlagen- ... mal ein Beispiel:

    int i;
    double x=0, n, a, b, h= ( b-a )/ (2*n), *f, ;
    

    Das /\ könnte in etwa so (richtig!) heißen (ich weiß ja nicht was du vor hast 😕 ):

    int i;
    double x = 0, n, a, b, h, *f;
    // Initialisierungen:
    a = ...;
    n = ...;
    // ...
    h = (b - a) / (2 * n); // (2 * n) darf nie 0 werden!
    

    Sry, aber du solltest dich erstmal mit den Grundlagen von C++ beschäftigen, glaube das hat sonst kein Sinn 🙄 (Bitte nicht böse sein... 😉 )

    Dann machst du einen zeilenübergreifenden Kommentar auf, den du nicht mehr schließt ... 😮

    Hier:

    /*
    i ist Laufindex
    a obere Grenze, b untere Grenze
    h und n in Simpson verwendet
    

    Dann vllt. noch etwas zum Titel deines Posts:

    Man kann Funktionen nicht ineinander definieren...
    Also so etwas geht nicht:

    void func_erstens(void)
    {
       // ...
       void func_drinnen(void)
       {
          // ...
          // ...
          // ...
       }
       // ...
    }
    

    Du kannst sie aber in einer aufrufen, musst ggf. einen Prototypen der Funktion voranstellen, falls diese vorher nicht definiert wurde.

    Hoffe ich konnte helfen... 👍


Anmelden zum Antworten