Zum Inhalt springen

Rechteckregel als C-Funktion


wanne60

Empfohlene Beiträge

Hallo,

mithilfe der Rechteckregel soll ein Programm als Funktion in C geschrieben werden zur Ermittlung des Integrals für eine gegebene Anzahl von Messwerten.

Die Parameter der Funktion lauten:

getIntegral ( float messwerte[], int anzahl, float a, float b ;

a und b sind die Intervallgrenzen, anzahl ist die anzahl der Messwerte.

Ich habe mal mein Programm angehängt, es ist aber nicht als Funktion geschrieben. Wie schreibe ich denn so was als Funktion?

Bei einer Funktion habe ich ja definierte Schnittstellen, d.h. als Input habe ich die Messwerte, die anzahl und die Intervallgrenzen, output ist das berechnete Integral.

Das angehängte Programm funktioniert zwar, aber mit der Array-definition gibt es Probleme ( float messwerte[anzahl]), kann ich in dem Array keine Variable angeben?

Bin für jede Hilfe dankbar!

Gruss

Michael

Numerische Integration nach dem Rechteckverfahren.doc

Link zu diesem Kommentar
Auf anderen Seiten teilen

mithilfe der Rechteckregel soll ein Programm als Funktion in C geschrieben werden
Dein Programm ist C++. Namespace, <iostream>, cin und cout gibt's in C nicht. Sollte aber nicht weiter tragisch sein, das kann man recht einfach nach C portieren.

Ich habe mal mein Programm angehängt, es ist aber nicht als Funktion geschrieben. Wie schreibe ich denn so was als Funktion?
Verlagere den Berechnungsteil in eine eigene Funktion, die du dann aus main aufrufst.

Das angehängte Programm funktioniert zwar,

Das möchte ich bezweifeln. Da ist ein Bezeichner n, der nirgends deklariert ist. Aber ich gehe mal davon aus, dass das anzahl sein soll.

aber mit der Array-definition gibt es Probleme ( float messwerte[anzahl]), kann ich in dem Array keine Variable angeben?
In C++ nicht. In C geht das (wenn der Compiler den neuesten Standard unterstützt).
Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich mach das einfach mal, hat ja nicht jeder Word:

//Numerische Integration nach dem Rechteckverfahren
# include <iostream>
using namespace std;
int main()
{
int anzahl, i;
float a, b;

cout <<"Eingabe Anzahl Messwerte:";
cin >> n;

float messwerte[anzahl];

cout <<"Eingabe untere Intervallgrenze:";
cin >> a ;

cout <<"Eingabe obere Intervallgrenze:";
cin >> b ;

for ( i=0; i<n; ++i)
{
cout <<"Eingabe "<<i<<" . Wert:";
cin >> messwerte[i];
}

float h =(b-a)/anzahl;
double getIntegral = 0;

for ( i=0; i<anzahl; ++i)
{
getIntegral = getIntegral + messwerte[i]*h;
}
cout <<" Integral =" <<getIntegral<<endl;
system("pause");
return 0;
}[/code]

Tja, in der Form ist der Code um den Faktor 40 kleiner. Und jeder kann ihn lesen und bearbeiten, ohne potentiell schädliche Dateien in proprietären Formaten runterladen zu müssen :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

Ich habe nun einfach eine Funktion geschrieben, die die angegebenen Parameter aus einem main-Programm übernimmt.

Ist das korrekt?

//Numerische Integration nach dem Rechteckverfahren

# include <iostream>

using namespace std;

double getIntegral ( float messwerte[], int anzahl, float a, float b, double Integral )

{

float h =(b-a)/anzahl;

Integral = 0;

for ( i=1; i<=anzahl; ++i)

{

Integral = Integral + messwerte*h;

return Integral;

}

}

Danke und Gruss

wanne60

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ist das korrekt?

//Numerische Integration nach dem Rechteckverfahren

# include <iostream>

using namespace std;

Wie ich schon sagte, <iostream> und namespace gibt's in C nicht, das ist C++.

Den Integral-Parameter brauchst du nicht, da tut's eine lokale Varialbe.

Und die return-Anweisung muss aus der Schleife raus, sonst springst du gleich im ersten Durchlauf aus der Funktion.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Was meinst du mit lokaler variable
So was wie h. Das ist eine lokale Variable.

was muß dann hinter die return-Anweisung?
Nichts, hinter der return-Anweisung ist die Funktion beendet. Die return-Anweisung muss hinter die Schleife.

Wie teile ich der Funktion mit, was an das aufrufende Programm übergeben wird?
Mit der return-Anweisung.
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Klotzkopp,

Ich habe die return-Anweisung nach der Schleife angeordnet.

Verstanden habe ich nicht, ob in der Funktionsdeklaration nun noch eine variable rein muß, in der das Ergebnis der Funktion abgelegt wird?

In meinem Programm ist das ja die variable Integral.

//Numerische Integration nach dem Rechteckverfahren

# include <iostream>

using namespace std;

double getIntegral ( float messwerte[], int anzahl, float a, float b, )

{

float h =(b-a)/anzahl;

double Integral = 0;

for ( i=1; i<=anzahl; ++i)

{

Integral = Integral + messwerte*h;

}

return ;

}

Danke und Gruss

wanne60

Link zu diesem Kommentar
Auf anderen Seiten teilen

Verstanden habe ich nicht, ob in der Funktionsdeklaration nun noch eine variable rein muß, in der das Ergebnis der Funktion abgelegt wird?
Nein, dafür gibt es den Rückgabewert. Die Parameter sind in erster Linie die Eingabedaten der Funktion, der Rückgabewert die Ausgabe.

In meinem Programm ist das ja die variable Integral.
Beachte, dass die Variable Integral deiner main-Funktion nichts mit der Variablen Integral in der getIntegral-Funktion zu tun hat, nur weil die zufällig denselben Namen haben. Das sind lokale Variablen, d.h. ihr Gültigkeitsbereich beschränkt sich auf den enthaltenden Block.

Du musst übrigens bei der return-Anweisung angeben, was zurückgegeben werden soll. Was da vorher stand, war schon richtig.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...