Streckenlänge berechnen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Streckenlänge berechnen

    Hallo ich möchte die 64 Punkte (X/Y) von einer Datei einlesen und ausgeben und dann die Punkte der rheinfolge nach verbinden und eine gesamtstrecke ausgeben!
    Das einlesen der Punkte klappt und die einzulesene Datei wird auch ausgegeben. Dies habe ich mit diesem Quelltext verwirklicht.
    #include <stdio.h>;
    int main()

    {

    int iAnz, i , a;
    float *x, *y , *z , b , c ;
    FILE *datei;
    datei = fopen("TSP03.dat","r") ;
    fscanf(datei,"%d",&iAnz);
    printf("Anzahl der Knoten : %d\n",iAnz);
    x = new float[iAnz+1] ;
    y = new float[iAnz+1] ;
    z = new float[iAnz+1] ;
    for(i=1;i<=iAnz;i++)
    {
    fscanf(datei,"%d",&a);
    x=a;
    fscanf(datei,"%f",&b);
    y[i]=b;
    fscanf(datei,"%f",&c);
    z[i]=c;
    printf("%d %1.2f %1.2f\n",a,b,c);
    };
    fclose (datei);
    return 0 ;
    } ;

    die auszulesene Datei befindet sich unter dem letzen code.
    Nun möchte ich die gesamtstrecke aller Punkte ausgeben . Dafür benutze ich die Formel Wurzel(x2-x1)²+(y2-y1)²
    Das programm kompeliert zwar aber es gibt wider nur die Tabelle die ich einlsen wollte aus.
    Vielen dank im vorraus für die Hilfe.

    #include <stdio.h>
    #include <math.h>
    int main()
    {
    int iAnz, i , a, l;
    float *x, *y , *z , b , c ,dist , gdist=0;
    FILE *datei;
    datei = fopen("TSP03.dat","r") ;
    fscanf(datei,"%d",&iAnz);
    printf("Anzahl der Knoten : %d\n",iAnz);
    x = new float[iAnz+1] ;
    y = new float[iAnz+1] ;
    z = new float[iAnz+1] ;
    for(i=1;i<=iAnz;i++)
    {
    fscanf(datei,"%d",&a);
    x[i]=a;
    fscanf(datei,"%f",&b);
    y[i]=b;
    fscanf(datei,"%f",&c);
    z[i]=c;
    // printf("%d %1.2f %1.2f\n",a,b,c);
    }
    for(l=1;l<=65;l++)
    {
    dist =sqrt(pow(y[i+1]-y[i],2)+pow(z[i+1]-z[i],2));
    gdist = gdist+dist;
    printf("Das ist die Gesamtlänge %f\n", gdist);
    }
    return 0 ;
    }

    64
    1 5.00 0.20
    2 0.50 2.10
    3 4.20 0.50
    4 8.00 4.50
    5 1.30 8.00
    6 6.90 5.90
    7 0.90 4.80
    8 7.30 1.30
    9 3.90 2.00
    10 8.30 9.90
    11 3.90 4.90
    12 9.40 4.60
    13 5.80 6.70
    14 6.40 0.90
    15 4.70 4.00
    16 3.10 2.30
    17 0.80 0.60
    18 3.00 1.40
    19 7.90 2.80
    20 5.80 7.80
    21 8.50 2.70
    22 5.30 0.60
    23 7.20 7.40
    24 4.70 7.60
    25 0.30 3.60
    26 1.10 1.80
    27 5.00 4.70
    28 7.30 3.90
    29 0.50 7.70
    30 7.30 8.60
    31 0.60 0.20
    32 4.60 9.90
    33 0.90 0.50
    34 6.40 2.00
    35 1.90 2.40
    36 2.20 3.40
    37 4.40 2.90
    38 8.10 6.00
    39 3.70 9.90
    40 5.30 5.00
    41 5.80 1.20
    42 8.90 6.20
    43 8.10 7.60
    44 8.10 5.10
    45 7.10 6.90
    46 1.70 9.10
    47 8.70 3.70
    48 5.70 3.10
    49 2.00 3.30
    50 1.90 2.80
    51 9.80 1.90
    52 6.00 4.40
    53 2.80 0.20
    54 9.50 4.90
    55 7.20 0.50
    56 7.10 2.50
    57 7.10 3.70
    58 1.10 6.30
    59 2.70 3.10
    60 5.10 4.50
    61 1.80 9.70
    62 4.00 1.50
    63 3.70 1.50
    64 6.80 9.10
  • Ich wollte es wissen und hab zwei Compiler mit deinem 2. Quelltext gefüttert ->
    beide weigern sich meiner Meinung nach zu Recht den Quelltext zu überstzen.

    Nutze die C&C++ Tags!
    Dann sieht das so aus:

    Quellcode

    1. #include <stdio.h>
    2. #include <math.h>
    3. int main()
    4. {
    5. int iAnz, i , a, l;
    6. float *x, *y , *z , b , c ,dist , gdist=0;
    7. FILE *datei;
    8. datei = fopen("TSP03.dat","r") ;
    9. fscanf(datei,"%d",&iAnz);
    10. printf("Anzahl der Knoten : %d\n",iAnz);
    11. x = new float[iAnz+1] ; // was macht das "new" in einem C-Quelltext? -> das sollte bei einem C-Compiler zum Fehler führen
    12. y = new float[iAnz+1] ;
    13. z = new float[iAnz+1] ;
    14. for (i=1;i<=iAnz;i++)
    15. {
    16. fscanf(datei,"%d",&a);
    17. x[i]=a;
    18. fscanf(datei,"%f",&b);
    19. y[i]=b;
    20. fscanf(datei,"%f",&c);
    21. z[i]=c;
    22. // printf("%d %1.2f %1.2f\n",a,b,c);
    23. }
    24. for (l=1;l<=65;l++)
    25. {
    26. dist =sqrt(pow(y[i+1]-y[i],2)+pow(z[i+1]-z[i],2));
    27. gdist = gdist+dist;
    28. printf("Das ist die Gesamtlänge %f\n", gdist);
    29. }
    30. return 0 ;
    31. }
    Alles anzeigen


    In der Zeile wo mein Kommentar steht und den folgenden beiden besteht noch Überarbeitungsbedarf.

    In deinem 1.Quelltext sind 2 ; zu viel.

    Weiter hab ich noch nix geprüft. Aber entscheide dich, entweder C oder C++!

    MfG bcc-fan