Beiträge von Baerchen1

    Hallo. bitte helft mir, ich hab morgen Prüfung im C-Programmieren!!
    Ich hab grad ein Programm egschrieben, funktioniert aber noch nicht ganz richtig, wer kann mir büdde sagen, was da falsch ist?? :engel:

    Das Programm liest n orte ein(x und y Koordinaten), die in eine Liste eingelesen werden sollen. Dann in untere Matrix die Entfernungen zwischen allen Orten.. Danach sollen die Koord. in eine binäre Datei gespeichert werden, und von da wieder gelesen und ausgegeben werden:

    /*-----------------------------------------------------------------------
    SS 2005 - Aufgabe 35 (Listen, Dateien und Matrizen)
    -------------------------------------------------------------------------*/
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #define maxN 5

    typedef struct ORT {
    float x,y;
    struct ORT *n;
    } ort;

    struct ORT *n=NULL;

    void EntfMatrix(ort *LA, int *N, float A[maxN][maxN])
    { int i,j; float x[maxN],y[maxN];
    struct ORT *anfang=NULL;
    printf("Anzahl Orte: "); scanf("%d",N);
    if (*N>maxN) *N=maxN;
    for (i=0;i<*N;i++)
    { if((LA=(struct ORT*)malloc(sizeof(struct ORT)))!=NULL)
    {n=(struct ORT*)malloc(sizeof(struct ORT));
    printf("Ort %d - x-Wert: ",i+1); scanf("%f",&LA->x);
    x[i]=LA->x;
    printf(" y-Wert: "); scanf("%f",&LA->y);
    y[i]=LA->y;
    LA->n=anfang;
    anfang=LA;
    }
    }

    for (i=0;i<*N;i++)
    {for (j=0;j<i;j++)
    {A[i][j]=sqrt( ( fabs((x[i])*(x[i]) - (x[j])*(x[j])) ) +
    ( fabs((y[i])*(y[i]) - (y[j])*(y[j])) ) );
    printf("%.2f ",A[i][j]);
    }
    printf("\n");
    }
    }

    //------------------------------------------------------------------------
    void SpeichAufDatei(ort *LA, char datname[])
    {FILE *ausdatei; ort *LA_Ausgabe=NULL;
    ausdatei=fopen(datname,"wb");
    LA_Ausgabe=LA;
    while(LA_Ausgabe!=NULL)
    {fwrite(&LA_Ausgabe->x,sizeof(ort),1,ausdatei);
    printf("\n%f ",LA->x);
    fwrite(&LA_Ausgabe->y,sizeof(ort),1,ausdatei);
    printf("%f",LA_Ausgabe->y);
    LA_Ausgabe=LA_Ausgabe->n;
    }
    fclose(ausdatei);
    }
    //------------------------------------------------------------------------
    ort *BildeListeAusDatei(char datname[])
    {FILE *eindatei; ort *LA,*LL,*vorg=NULL;
    int anz=0;
    printf("eingelesen: \n");
    eindatei=fopen(datname,"rb");
    if (eindatei==NULL) {printf("Datei nicht gefunden\n"); return NULL;}
    while (fread(&LA,sizeof(LA),1,eindatei) != NULL)
    {printf("x[%d]= %f y[%d]= %f\n",anz,LA->x,anz,LA->y);
    anz++;
    LL=malloc(sizeof(ort));
    LL->n=NULL;
    if (anz>1) vorg->n=LL; //Vorg.mit neuem Listelem. verknuepfen
    vorg=LL;
    if (anz==1) LA=LL; //Adr.des 1.Elem.ist Listadr.
    LL->ort=ort; //Datensatz zum Ort in Listelem. einfuegen
    }
    fclose(eindatei);
    return LA;
    }

    //------------------------------------------------------------------------
    void main()
    { float A[maxN][maxN];
    int N,anz;
    char datname[33]="C:/DJGPP/bin/pruef35.bin";
    ort *LA=NULL;
    clrscr();
    EntfMatrix(LA,&N,A);
    SpeichAufDatei(LA,datname);
    LA=BildeListeAusDatei(datname);
    getche();
    }