Berechnung Integral.... wo hängt der Fehler ???
-
elduderado schrieb:
Blöder Fehler mit dem k .... bei den ganzen Indeces komm ich schnell durch einander.
Und deshalb ist es immer eine gute Idee, den Variablen sinnvolle Namen zu geben. (C unterstützt nicht umsonst die Möglichkeit, (fast) beliebig lange Namen zu definieren ;))
-
Oha, ich muss meinen Post doch nochmal heraus wühlen. Erstmal worums geht, dazu die main func:
int main(void) { double F,H,xa,xe,y[n]; char neu; do { do { printf("Bitte geben Sie den Grad des Polynoms ein (0-100): "); scanf("%i",&k); }while(k>100); printf("Bitte geben Sie die untere Schranke des Integrals ein xa: "); scanf("%lf",&xa); printf("Bitte geben Sie die obere Schranke des Integrals ein xe: "); scanf("%lf",&xe); input(a); H = (xe - xa) / (n - 1); stuetz(xa,H,n,y); F = (H/2) * (y[0] + y[n-1] + 2 * teilsum(1,n-2,y)); printf("Die Berechnung des Integrals ergibt: %lf\n\n",F); printf("Wollen Sie ein neues Integral berechnen (y/n) ???: "); scanf("%c",&neu); }while((neu = 'y') || (neu = 'Y')); }
Ich wollte kein goto setzten, deshalb hab ich 2 while schleifen verwendet... aber irgendwie ging das in die Hose. Die Erste, für sich funktionier wunderbar, jedoch springt er bei der 2ten gleich wieder an Anfang der Main func, ohne eine Eingabe abzuwarten. Muss irgendetwas deppertes übersehen haben
nen Hint bitte
-
==
puffer leeren: int c; while ((c = getchar()) != EOF && c != '\n');
-
@ c.rackwitz : Danke für deine Antwort, aber leider versteh ich deine Antwort nicht so ganz. Warum genau muss ich meine Eingabe im Speicher zwischenspeichern, bzw. warum kann ich nicht scanf() benutzen ...
Danke
-
vergiss meine zeile von wegen "puffer leeren".
== bedeutet vergleich
= bedeutet zuweisung
pruefe das.
-
Ok, ich weiß jetzt wodran es lag und zwar war noch ein return, durch eine vorherige Eingabe im Speicher, wodurch das scanf abgebrochen wurde. Hab einfach noch ein fflush(stdin) reingesetzt und siehe es funzt.
Aber der Vergleichsoperator muss natürlich auch stimmen...Danke
-
el-duderado schrieb:
Ok, ich weiß jetzt wodran es lag und zwar war noch ein return, durch eine vorherige Eingabe im Speicher, wodurch das scanf abgebrochen wurde. Hab einfach noch ein fflush(stdin) reingesetzt und siehe es funzt.
Aber der Vergleichsoperator muss natürlich auch stimmen...Danke
falsch, falsch, falsch!
fflush(stdin) funzt nur bei MS compilern und ist KEIN ansi c. benutze es NIEMALS!
mit einem "return im speicher" hat das alles nichts zu tun.
dein vergleichsop stimmt NICHT! == ist vergleich, du aber hast = (zuweisung) verwendet.und jetzt erlange doch bitte schnellstmoeglich die erleuchtung.
-
Das war schon klar mit dem Vergleichsoperator, habe ich auch sofort geändert. Aber wenn du dir die Mühe machen möchtest und das Prog mal kompilierst, wirst du feststellen, dass er die scanf("%c",&neu); einfach übergeht. Das liegt meiner Meinung daran, dass ich im Speicher noch ein return hab und deshalb das scanf gleich weiter springt.
Ich könnte natürlich nochmal den Rückgabewert der scanf überprüfen, aber ich bin mir da eigentlich recht sicher.
-
Achso noch was, zum kompilieren benutze ich eigentlich immer dev-c++, da mir die Formatierung sowie die Fehlerüberprüfung darin aber garnicht gefällt, nehme ich dann immer visual c++. Evtl haste bezüglich des compilers ja noch einen Tipp
MfG
Micha
-
el-duderado schrieb:
Das liegt meiner Meinung daran, dass ich im Speicher noch ein return hab und deshalb das scanf gleich weiter springt.
deine meinung ist falsch, punkt. schlag dir den sch**** von wegen "return im speicher" aus dem kopf. klingt ja gerade zu als ob programmierung fuer dich etwas mit glauben und vermutungen zu tun haette.
das fuegst du bei den anderen variablendefinitionen hinzu:
int c;das setzt du unmittelbar vor die zeile mit dem scanf:
while ((c = getchar()) != EOF && c != '\n');machs einfach mal und tu nicht so als ob du wuesstest, was in deinem computer abgeht. das weiss dein computer naemlich besser als du
-
@rackwitz: Versteh deinen Standpunkt nicht - diese Vermutung ist durchaus legitm und dazu noch IMHO hier genau der Punkt!
Also was soll dann ein Spruch von wegen:c.rackwitz schrieb:
deine meinung ist falsch, punkt. schlag dir den sch**** von wegen "return im speicher" aus dem kopf. klingt ja gerade zu als ob programmierung fuer dich etwas mit glauben und vermutungen zu tun haette.
... dazu machst du durch deine "Lösung" (definitiv nicht failsave!) genau das: Du holst das return aus dem Eingabepuffer - zwar nur Nebeneffekt, aber immerhin:
c.rackwitz schrieb:
das setzt du unmittelbar vor die zeile mit dem scanf:
while ((c = getchar()) != EOF && c != '\n');machs einfach mal und tu nicht so als ob du wuesstest, was in deinem computer abgeht. das weiss dein computer naemlich besser als du
Sorry, aber in Verbindung damit verleihen solche Äusserungen deinen Postings eher Trollcharakter und kommt sehr arrogant rüber!
btw:
c.rackwitz schrieb:
und jetzt erlange doch bitte schnellstmoeglich die erleuchtung.
Wenn dich solche Fragen nerven, warum antwortest du drauf???
grüße
-
mir war nicht klar, dass du mit "return" einen zeilensprung meintest. in dem fall hast du recht, da koennte noch eins im puffer sein.
arroganz: du koenntest sehr wohl recht haben. ich werd mich aber dafuer nicht entschuldigen, weil ich mal davon ausgehen kann, dass hier keine mimosen mitlesen.
warum antworten: wenn ichs weiss, dann antworte ich, bevor sich ein paar noobs mit halbwissen gross fuehlen wollen.
-
persönlich hab ich kein Problem mit deinen Antworten, allerdings fand ich, dass dieser Thread einfach ein bisschen an Niveau verloren hatte ... und das eigentlich nur wegen zu ungenau gelesenen Postings oder Fehlinterpretationen.
Deshalb war ja auch DEINE Antwort zu schnell bzw. NICHT richtig:c.rackwitz schrieb:
deine meinung ist falsch, punkt. schlag dir den sch**** von wegen "return im speicher" aus dem kopf. klingt ja gerade zu als ob programmierung fuer dich etwas mit glauben und vermutungen zu tun haette.
Ansich kein Problem - passiert ja immer mal, aber da kann man doch Stil bewahren - oder muss ich also die Mimose auf mich beziehen?
-
Ich lass die Diskussion mal im Raum stehen und bin froh, dass die Sache jetzt wenigstens aufgeklärt ist.
Leider bin ich nicht so der Programmier-freak, sonst hätte ich sicherlich gleich gewusst, was c.rackwitz mit der while() Schleife meinte :D, nämlich genau das, was ich heraus gefunden hab.
So Thema abgeschlossen.... Danke!
-
double trapez_integr(double u,double o,int s,double(*f)(double)){ double i=0,r=0,d=(o-u)/--s; while(i<s) r+=d/2*(f(u+i*d)+f(++i*d+u)); return r; }