Unterschiedliche Ergebnisse bei gleicher EXE-Datei

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

  • Unterschiedliche Ergebnisse bei gleicher EXE-Datei

    Hallo,

    ich habe das folgende Programm geschrieben.
    Beim Kompilieren wird mir kein Fehler angezeigt.

    Beim Ausführen der Exe-Datei kommt das Programm mal zu einem richtigen Ergebniss und mal werden völlig falsche Werte angezeigt, obwohl ich an der EXE-Datei ja nichts geändert habe.

    Es wirkt auf mich so als ob manchmal mit leeren Werten gerechnet wird.

    Das Problem tritt im letzten Abschnitt auf
    "test = ((10*(sqrt((px[j]-x)*(px[j]-x[i])+(py[j]-y[i])*(py[j]-y[i]))))/19);"
    test nimmt mal die richtigen Werte an und mal die falschen.

    Wie kann das sein ?

    Vielen Dank im Voraus schonmal!

    Gruß Paul

    C-Quellcode

    1. [syntax="cpp"]#include <stdio.h>
    2. #include <math.h>
    3. #include <stdlib.h>
    4. int iAnzauslesen (int &iAnz);
    5. float auslesen (int &iAnz, int *x, int *y, int *AnzP);
    6. float rand ( int &iAnz, int &anzL, float *px, float *py, int *x, int *y );
    7. int main()
    8. {
    9. int iAnz, i, anzL;
    10. int *x, *y, *AnzP;
    11. float *px, *py, *test;
    12. iAnzauslesen(iAnz);
    13. x= new int[iAnz+1];
    14. y= new int[iAnz+1];
    15. AnzP= new int[iAnz+1];
    16. test= new float[iAnz+1];
    17. auslesen (iAnz, x, y, AnzP);
    18. anzL = 1; /*for (anzL=1;100;anzL++)*/
    19. px= new float[anzL+1];
    20. py= new float[anzL+1];
    21. rand (iAnz, anzL, px, py, x, y);
    22. }
    23. int iAnzauslesen (int &iAnz){
    24. FILE *datei ;
    25. datei = fopen("Koordinaten.dat","r") ;
    26. fscanf (datei, "%d",&iAnz) ;
    27. };
    28. float auslesen (int &iAnz, int *x, int *y, int *AnzP){
    29. FILE *datei ;
    30. datei = fopen("Koordinaten.dat","r") ;
    31. int i, a, b, c, fail;
    32. fscanf(datei,"%d", &fail) ;
    33. for(i=1;i<=iAnz;i++)
    34. {
    35. fscanf(datei,"%d %d %d",&a,&b,&c);
    36. AnzP[i]=a;
    37. x[i]=b;
    38. y[i]=c;
    39. }
    40. };
    41. float rand ( int &iAnz, int &anzL, float *px, float *py, int *x, int *y ){
    42. int i, j;
    43. float test;
    44. for (i=1;i<=iAnz;i++)
    45. {
    46. for (j=1;j<=anzL;j++)
    47. {
    48. printf("%d\n",j);
    49. px[j]=(rand()%150000) / 150 + 1.0;
    50. py[j]=(rand()%150000) / 150 + 1.0;
    51. printf("%2.2f %2.2f\n", px[j], py[j]);
    52. }
    53. printf("%d\n",i);
    54. printf("%d %d\n", x[i], y[i]);
    55. test = ((10*(sqrt((px[j]-x[i])*(px[j]-x[i])+(py[j]-y[i])*(py[j]-y[i]))))/19);
    56. printf("%f\n", test);
    57. }
    58. };[/syntax]
    Alles anzeigen
  • Du zeigst hier C-Quelltext und kompilierst als C++! Und, wenn du die Warnungen nicht alle weg schaltest, sollten selbst bei C++ welche kommen.

    Kompiliere das als C-Quelltext und bearbeite die Fehlermeldungen.
    Oder, wenn es C++ werden soll, dann mach das so konsequent wie möglich.

    rand ist ein unglücklicher Name für eine selbst erstellte Funktion. Den solltest du nur wählen, wenn du genau weisst was du machst. Die meisten C- Compiler kennen auch eine rand-Funktion!

    Nicht das du oder dein Compiler da durcheinander kommen ;)

    Bei C++ geht das, weil du fast alles "umbiegen" kannst. Ob man da allerdings noch durchblickt, wenn man es übertreibt ?(

    Ach das C++ new hab ich wieder übersehen :huh:

    Hab ich in den letzten Tagen nicht erst einen andern Quelltext mit ähnlichen Problemen gesehen ?(

    MfG bcc-fan

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von bcc-fan ()