Problem Rechteckregel programmieren
-
danke für die schnellen antworten. Es soll das Integral für eine gegebene Zahl von Messwerten berechnet werden. Vorgegebene Parameter waren schon:
getIntegral ( float messwerte[], int anzahl, float a, float b )
aber wie könnte ich dass Problem mit den Fließkommazahlen umgehen? Weil eigentlich benötige ich genau die Funktion a+i*h mit integer ist ja nicht ausreichendGrüße
-
Und was machst du, wenn a+i*h zwischen zwei Messwerten liegt. ... Vielleicht solltest du dir mal vor Augen fuehren, was die Schrittweite in deinem Beispiel tatsachlich ist.
-
Es gibt seit mehr als 50 Jahren Hochsprachencompiler, die Ganzzahlen und Fliesskommazahlen unterscheiden. Diese Compiler setzen aber voraus, dass der den Compiler einsetzende Programmierer das auch unterscheiden kann!

-
ja, aber leute die gerade erst anfangen zu programmieren sind damit noch nicht so ganz auf einem nenner. und er hat gefragt, er hat eine antwort bekommen, er muss jetzt nicht noch geflamt oder getrollt werden...
-
Skym0sh0 schrieb:
... er muss jetzt nicht noch geflamt oder getrollt werden...
Entschuldigung, das wollte ich ganz bestimmt nicht so verstanden wissen!

Es geht um compilerunabhängige Grundlagen zum Programmieren allgemein.
-
mh, ich habs immer noch nicht nicht negativ verstanden...
aber ok, mir ists eigentlich schnuppe wie es gemeint ist, da ich nicht angesprochen bin.aber ihr habt recht, der TE sollte sich erstmal im klaren darüber sein, was er machen will und wie er damit umgeht wenn z.b. das ergebnis von a+h*i z.b. 3,5 ist...
-
..genau dieses problem versteh ich nicht ganz, habe ja die messwerte als float definiert, und dann darf das ergebnis des array's keine dezimalzahl sein?? obwohl ich es eigentlich doch als dezimalzahl definiere? Vielleicht kann mir doch noch jemad eine Erklärung geben, weil steh da grad einfach auf dem schlauch, und komm deshalb nicht richtig weiter.
-
Du hast
anzahlmesswerte,messwert[0]bismesswert[anzahl-1]. Wenn du jetzt schreibst, dass du denmesswert[a+i*h]benutzen möchtest unda+i*hist eine Fließkommazahl, z.B. 3.32334, der wievielte Messwert ist dann gemeint?
-
Komm schon, so schwierig ist das nicht... es geht nicht um den Inhalt des Arrays, sondern um den Datentyp, mit dem auf die Elemente zugreifst.
Wenn du ein Array mit zwei Elementen definierst, dann greifst du mit dem Index 0 auf das erste und mit dem Index 1 auf das zweite Element zu. Welchen Sinn macht es, auf das Element 1.5 zugreifen zu wollen? Es gibt kein Element 1.5, das zwischen dem ersten und zweiten Element liegt, daher darfst du als Index nur ganzzahlige Datentypen benutzen, und zu denen gehörtfloatnun einfach nicht.Edit:
Beaten by Sepp
-
m_nus schrieb:
habe ja die messwerte als float definiert, und dann darf das ergebnis des array's keine dezimalzahl sein??
der Messwert ist ungleich dem arrayindex
der arrayindex ist ganzzahlig und hinter jedem index steckt ein messwert
messwert[0]=3.6; messwert[1]=5.2; ...warum willst du den arrayindex berechnen? oder willst du schauen, ob bzw. wo ein messwert schon im array vorhanden ist?
-
Nein, er will einfach die Flaeche unter der Kurve ausrechnen. Die Stuetzstellen sind die Messwerte. Sind sie aequidistant sollte folgendes ausreichen: (b-a)/anzahl * summe ueber alle Messwerte.
-
ok, hab das programm jetzt umgeschrieben, beim ausführen kommt jetz der fehler:
Unresolved external 'main' referenced from c:\Borland...von der Library nehm ich an. Muss ich etwa noch ne headerdatei einbinden?float getintegral ( float messwert[], int n, float a, float b, float h )
{
float y = 0 ;
int i ;
for ( i=0 ; i<n ; i++ )
h = ((b-a) / n) *(y += messwert[0]);
y *= h;
return(y);
}
-
Steht doch da: Du brauchst eine Funktion namens main. C++-Buch, erste Seite.
-
float getintegral ( float messwert[], int n, float a, float b, float h )
int main( )
{
float y = 0 ;
int i ;
for ( i=0 ; i<n ; i++ )
h = ((b-a) / n) *(y += messwert[0]);
y *= h;
return(y);
}Es kommt E2141: Declaration syntax error nach Eingabe der main-funktion, aber eigentlich kann man da doch nicht viel verkehrt machen

-
Such dir ein Tutorial zu C oder C++. Arbeite es durch! Ansonsten ist dein Programm ebenfalls falsch (mehr als nur eine Stelle). Da war deine erste Version besser, aber raten hilft eh nicht! Ich sollte das nicht tun, aber:
float getintegral ( float messwert[], int anzahl, float a, float b ) { float h = (b-a) / anzahl ; float x = 0 ; int i ; for ( i=0 ; i<anzahl ; i++ ) { x += messwert[i]; // <-- hier der Unterschied zu deinem ersten Versuch } x *= h; return x; }
-
ok, ich arbeite dass C++ Buch erstmal komplett durch. Hoffe ich bin dann weiter. Trotzdem danke