Compiler reagiert auf Formel nicht.

Farid19

Grünschnabel
Hi.
Ich habe folgendes Problem .
In meiner Quellcode reagier Compiler auf Formel nicht,obwohl sie da steht.
Er gibt mir den falschen Wert aus .Ich glaube es ist so als ob ich
int c;
printf("%d",c);
geschriben hätte

Das Programm ist so aufgebaut: Die Punkte aus Datei lesen und Berechnen.
Ich würde mich tierisch frohen auf einen Antwort.
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<math.h>
 double pow();
int main() {
     
   FILE *CVS;
                                                                               
           int f,i,j;
           float p,o,d;
           float c,b,e,g,a;
           float A,S1,S2,I1,I2,I3;
           char file_name[40];
           float x[20];
           float y[20];
 
   
            printf("Geben Sie bitte die Datei Name ein:");
            scanf("%s",&file_name);
            fflush(stdin),
            CVS=fopen(file_name,"r");
            if(CVS==NULL)
            
            
    {
               printf("Fehler beim \x94ffnen der Datei\n");
               return 0;
    }
               
    printf("\n  Folgende Werte wurden in der Datei (\"%s\") gefunden:\n\a",file_name);
    printf("---------------------------------------------------------\n");
    
     
     for (i=1;i<=20;i++)                                                       
while((fscanf(CVS,"%f,%f\n",&x[i],&y[i]))!=EOF&&i<20 )  
  
   printf("\t\tPunkt%d (%2.1f,%2.1f )\n\n",i++,x[i],y[i]);
         
         
do
{
          for(i=0;i<20;++i)

          
 d+=(y[++i]*x[--i]-y[--i]*x[++i]);   
c+=(y[--i]*y[++i]*x[--i]-y[--i]*y[--i]*x[++i]+y[++i]*y[++i]*x[--i]-y[++i]*y[--i]*x[++i]);  In dieser Zeile ist das problem ,aber ich weiss nicht wo              :confused::confused:

           }
           while(i<20);
           A=d*0.5;
  
           
           printf("%.2f\n2,d);also diesen Wert gibt er mir raus 
           printf("%.2f\n",c);warum dann den nicht 

        
       
       system("PAUSE");
   return 0;
}



Danke voraus.
 
Hi.
C:
for(i=0;i<20;++i)
         d+=(y[++i]*x[--i]-y[--i]*x[++i]);   
c+=(y[--i]*y[++i]*x[--i]-y[--i]*y[--i]*x[++i]+y[++i]*y[++i]*x[--i]-y[++i]*y[--i]*x[++i]);
In dieser Zeile ist das problem ,aber ich weiss nicht wo :confused::confused:
Kann es sein, dass du die Anweisung mit der Berechnung für c mit in die For-Schleife nehmen wolltest? Dann müßtest du die beiden Anweisungen in einen Block zusammenfassen.

Es gibt allerdings ein noch viel größeres Problem. Es ist mehr oder weniger nur Zufall wenn dein Programm überhaupt etwas sinnvolles macht, da diese 2 Zeilen sogenanntes "undefiniertes Verhalten" zur Folge haben.

Du solltest es vermeiden in einer Anweisung den Wert einer Variablen mehr als einmal zu verändern.
C:
int i = 5;
i = i++;
Was ist der Wert von i? Laut C Standard ist der Wert von i nicht definiert - man kann generell nicht mal sagen was das Programm überhaupt machen wird. Das liegt daran, das die Variable mehrfach in dieser Anweisung verändert wird und kein sogenannter "Sequenzpunkt" die Ausführungsreihenfolge festlegt.

Genauso ist das in der Anweisung die du geschrieben hast. Der Compiler könnte zuerst die ganzen Dekrementierungen berechnen und dann die Inkrementierungen, er dürfte von links nach rechts oder umgekehrt die Werte berechnen und die Variable i verändern. Er dürfte allerdings auch (als Extremfall) die Festplatte löschen oder abstürzen - laut C Standard wäre dieses Verhalten in dem Fall auch OK; da es ja sowieso undefiniert ist.

Ich vermute mal du wolltest eher soetwas schreiben wie:
C:
d+=(y[i+1]*x[i]-y[i - 1]*x[i]);
Allerdings kommt das auf deine Interpretation an.

Gruß
 
Hallo .
danke für den Antwort.
Deine Vermutung ist richtig .
und ich will noch mehr von solchen Fomel rein schreiben.
Also ich habe alles genau so gemacht wi du mir geschrieben hast.
Aber es funktioniert trotzdem nicht.
Die Formel wird einfach ignoriert.
Ich bin am Endeeeeeeeeeeeeeeeeeee.
 
Um es noch übersichtlicher zu gestalten:
Code:
int x;
int y;
h=i-1;
j=i+1;

d+=(y[j]*x[i]-y[h]*x[i]);

Was gibt der Kompiler denn für eine Fehlermeldung aus
 
Abgesehen davon, daß mir bei solchren Konstrukten die Haare zu Berge stehen, ist Dein Problem, warum das ignoriert wird, einfach zu lösen:
Du hast das ganze in eine do...while-Schleife gepackt, die ausgeführt wird, solange i<20 ist. Vorher hast Du aber eine Schleife, in der i bis 21 hochgezählt wird. Also wird die do...while-Schleife nicht ausgeführt.
 
Abgesehen davon, daß mir bei solchren Konstrukten die Haare zu Berge stehen, ist Dein Problem, warum das ignoriert wird, einfach zu lösen:
Du hast das ganze in eine do...while-Schleife gepackt, die ausgeführt wird, solange i<20 ist. Vorher hast Du aber eine Schleife, in der i bis 21 hochgezählt wird. Also wird die do...while-Schleife nicht ausgeführt.

ich dachte der vorteil einer do...while schleife liegt darin, dass sie mindestens einmal ausgeführt wird? Oder hab ich deinen Post nicht verstanden?

Grüße, random.
 
AAARRRGGGHHHH! Das ist mir jetzt aber peinlich :-( :-( :-(
Das stimmt natürlich!
Allerdings ist das Konstrukt ziemlich sinnlos, da es immer genau 1 Mal durchlaufen wird.

@Farid: Vielleicht kannst Du mal in Prosa beschreiben, was Du machen willst. Ich bin mir nämlich nicht sicher, ob Du nur ein paar geschweifte Klammern vergessen hast, oder sie nicht da sein sollen. So besteht z.B. die For-Schleife nur aus der Zeile d+=..... Die Zeile, die mit c+= beginnt, ist nicht mehr in der Schleife. Ist das Absicht?

Vielleicht hilft es Dir weiter, wenn Du Dir das mal Schritt für Schritt in einem Debugger anschaust.
 
Zurück