Probleme bei C Programm - Bitte um Hilfe!

Das Forum fĂĽr Programmierer und Systemadmins. Von Shell-, Perl- und PHP-Scripts bis zur objektorientierten Programmierung mit C++.

Probleme bei C Programm - Bitte um Hilfe!

Beitragvon Landscaper » Di 15 Jul, 2003 21:01

Bei dem Programm geht es um die Berechnung einer Fläche mit Hilfe der Eulerschen Integration(Trapezverfahren):

Dabei wird zwischen der unteren Fläche, die sich aus Rechtecken mit der Kantenlänge gleich Funktionswert der linken Intervallgrenze ergeben, und der oberen Summe, die diesmal aus Rechtecken mit der Kantenlänge gleich dem Fkt.-wert der rechten Intervallgrenze zuusammengesetzt ist, unterschieden. Die "wahre" Fläche ergibt sich durch Mittelung der beiden Flächen, was einer Näherung mittels Trapezen entspricht.

Problemschilderung:
Wenn ich das Prog. kompiliere und ausfĂĽhre wird nur nach der erstren Integrationsgrenze gefragt und der "Rest" ausgegeben??? :(
(Ich glaub mit der "funktion" stimmt auch was nicht.)

Wäre sehr dankbar für Lösungsvorschläge!!!

Code: Alles auswählen
#include <stdio.h>
#include <math.h>

int i,n;
float anfang, ende, interv, wert, sum_u, sum_o;

double funktion(double);

main()
{
printf("Die untere Integrationsgrenze angeben :\n");
scanf("%f",&anfang);
printf("Die obere Integrationsgrenze angeben :\n");
scanf("%f",&ende);
printf("Geben Sie die Anzahl der Intervalle an (maximal 32000):\n ");
scanf("%d",&n);

/* Initialisierung zu Null*/
wert =0.0;
sum_u=0.0;
sum_o=0.0;

/* Berechnung der Intervallbreite (Breite des Trapezes). */
interv = (ende - anfang)/n;

/* Aufsummierung der einzelnen Intervallflächen für die obere Fl„che und die untere Fläche, */
for (i=0;i<=n-1;i++)
{
    sum_u = sum_u + funktion(anfang + 1 * interv) * interv;
    sum_o = sum_o + funktion(anfang + (i+1) * interv) * interv;
}

/* Berechnung der "wahren" Fläche durch Mittelung der beiden Flächen. */

wert=(sum_o+sum_u)/2;
printf("Das Integral in den obigen Grenzen hat den Wert: %f \n", wert);

}
/* Definition der benutzten Funktion */

double funktion(double x)
{
    return(exp (-x*x));
}


***EDIT penguinforce: fĂĽr sourcecode haben wir den bb-code "code", bitte diesen zwecks fĂĽr sourcecode immer verwenden! (ausser bei php, da gibts einen eigenen ;))***
Landscaper
Neu im Board
Neu im Board
 
Beiträge: 2
Registriert: Di 15 Jul, 2003 20:45

Beitragvon mad » Mi 16 Jul, 2003 01:28

such mal im groups.google.com nach "scanf problem newline" ..
sollte eigentlich reichen.

mfg,
mad.
mad
Neu im Board
Neu im Board
 
Beiträge: 18
Registriert: Mo 23 Jun, 2003 18:27

Beitragvon Landscaper » Mi 16 Jul, 2003 20:50

Hi Mad!

Hier ist der veränderte Code.
Das Problem mit der Eingabe ist jetzt beseitigt, doch steht bei der Ausgabe des Ergebnises (non-float printf).

Was kann man dagegen tun?

Danke im voraus!

[code]
#include <stdio.h>
#include <math.h>

short i,n;
double anfang,ende,interv,wert,sum_u,sum_o;

double funktion(double);

main()
{
printf("Die untere Integrationsgrenze angeben:\n ");
do
{scanf("%lf",&anfang);
}
while ( getchar() !='\n');

printf("Die obere Integrationsgrenze angeben:\n ");
do
{scanf("%lf",&ende);
}
while ( getchar() !='\n');



printf("Geben Sie die Anzahl der Intervalle an (maximal 32000): ");
do
{scanf("%d",&n);
}
while ( getchar() !='\n');

/* Initialisierung zu Null*/
wert =0.0;
sum_u=0.0;
sum_o=0.0;

/* Berechnung der Intervallbreite (Breite des Trapezes). */
interv = (ende - anfang)/n;

/* Aufsummierung der einzelnen Intervallfl„chen f
Landscaper
Neu im Board
Neu im Board
 
Beiträge: 2
Registriert: Di 15 Jul, 2003 20:45

Beitragvon mad » Do 17 Jul, 2003 09:25

hm, dein compiler linkt dann wohl den code nicht gegen
die floating-point versionen von scanf/printf; da gibts
sicher ne option um ihm das zu verklickern.
(stichwort mathe-library)

mitm gcc funkts jedenfalls,
sprich dein code is nicht das problem.

mfg,
mad.

ps: uebrigens 11 von 10 problemen lassen sich mit google selbst loesen.
mad
Neu im Board
Neu im Board
 
Beiträge: 18
Registriert: Mo 23 Jun, 2003 18:27


ZurĂĽck zu PROGRAMMIER FORUM

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 24 Gäste