C Kubische Funktion mit falscher Ausgabe in for-Schleife

DRQ

Lt. Junior Grade
Registriert
Okt. 2008
Beiträge
398
Schönen Sonntag Nachmittag liebe CB'ler!
Ich hantiere im Moment an einem Programm rum, welches die y(x) Werte einer kubischen Funktion ermittlet. Dies soll für den Wertebereich x=0 bis x=99 mit einer Schrittweite von 1 stattfinden und alles in einem Array vom Typ int gespeichert werden. Schlussendlich soll der Spaß in einem .txt Dokument gespeichert werden, so das dieses von z.B. Excel gelesen und als Graph dargestellt werden kann. Die Werte für a, b, c und d sind vorgegeben. Mein Programm sieht nun wie folgt aus:
Code:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
FILE *dateizeiger;
char dateiname1[] = "Werte.txt";

int y[100];
int x=0, a=1, b=-241, c=18838, d=-471960;

dateizeiger = fopen(dateiname1,"wt");

if
(dateizeiger == NULL)
printf(" Fehler beim Schreiben der Datei %s",dateiname1);

else
printf("a=%d, b=%d, c=%d, d=%d\n\n", a, b, c, d);
         for(x=0; x <= 99; x++)
                   {
                     y[x] = (a*x^3)+(b*x^2)+(c*x)+d;
                     fprintf (dateizeiger, "%d\n", y[x]);
                   }
fclose(dateizeiger);
system("type Werte.txt");
system("pause");
return(0);
}

Jetzt sehe ich aber schon direkt bei der Ausgabe, dass da i.was nicht stimmt, da für x=0 ja d rauskommen müsste - es kommt aber -471955 (also d+5) raus. Ich finde dafür einfach keinen Grund. Woher kommt das??
 
Oh... Oh Gott x.x
alles klar, dass erklärt so einiges... Dann direkt mal umschreiben - Danke!

EDIT: Jap, hat geklappt... Das Leben kann so einfach sein.
 
Zuletzt bearbeitet:
^ ist der Operator für bitweises XOR und hat mit "Hoch-Rechnen" nichts zu tun.

*narf* zu spät.
 
Da das eigentliche Problem geklärt ist, denke ich dass es nicht mehr schaden kann, allgemeine Hinweise zu geben.

- Dein if/else construct macht vermutlich nicht das, was du möchtest. Auf jeden Fall macht es aber nicht das, was es sollte. Nämlich bei einem Fehler abzubrechen.
- Warum speicherst du die Werte in einem Array, wenn du sie hinterher nie wieder benutzt? Da reicht doch eine einzelne Variable, die du in jedem Durchlauf änderst, oder ganz auf eine temporäre Variable zu verzichten.
- system("type Werte.txt"); Wird auf nicht-Windows Systemen versagen. Auch ist es blöd, erst den Dateinamen in einer Variablen abzulegen und ihn dann hier hartzucoden. Wenn schon, dann benutze die Variable auch durchgehend. Und mir ist kein Fall in Erinnerung, in dem system() für irgendetwas sinnvoll gewesen wäre. Öffne die Datei einfach nochmal zum Lesen und gib aus, was du rein geschrieben hast, oder gib die Werte gleich bei der Erzeugung aus.

Hinweis für später:

- Auch wenn ich das für deinen konkreten Fall nicht ausgerechnet habe, könnte es sich lohnen, für solche Berechnungen auf Integer Overflow zu prüfen.
€: Siehe den Artikel vom Dicken dazu http://www.fefe.de/intof.html
 
Zuletzt bearbeitet:
Zurück
Oben