tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
8
ZUGRIFFE
4495
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von shutdown
    shutdown shutdown ist offline Mitglied Smaragd
    Registriert seit
    Jun 2004
    Beiträge
    1.026
    Hi!

    Der Titel sagts ja eigentlich schon.

    Ich bekomme folgendes C-Programm einfach nicht zu laufen.

    Er bringt mir diese Fehlermeldung

    tmp/ccVFXBXa.o(.text+0x111): In function `main':
    : undefined reference to `sqrt'
    /tmp/ccVFXBXa.o(.text+0x1c5): In function `main':
    : undefined reference to `fmod'
    /tmp/ccVFXBXa.o(.text+0x222): In function `main':
    : undefined reference to `fmod'
    /tmp/ccVFXBXa.o(.text+0x440): In function `string_to_number':
    : undefined reference to `pow'
    collect2: ld returned 1 exit status
    Also auf gut deutsch: Er akzeptiert keine Funktion der math.h
    Diese ist aber richtig installiert! (Auch bei Freunden klappt die Kompilierung einfach nicht).
    (Unter Windows klappt die Kompilierung und das Programm einwandfrei!)

    Vielen Dank für eure Hilfe!

    cu shutdown


    Hier nun das Programm:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    
    /***************************************************************************** 
    program:    prim_mit_datei.c 
                Primzahl-Test (in der Art nach Erestostrates) mit Datei-Anbindung 
    author:      shutdown 
    created:    14-01-2005 
    modified:   15-01-2005 
    compiler:   BC++ 5.02 
    *****************************************************************************/ 
     
    #include '<'stdio.h> 
    #include '<'string.h>     // die '' nur fürs "dumme" Forum ;-)
    #include '<'fcntl.h> 
    #include '<'math.h> 
    #include '<'stdlib.h> 
    #include '<'conio.h> 
     
    long double string_to_number(char string[]); 
     
    void main(void) 
    { 
        char string[1000]; 
        long double i; 
        long double testzahl; 
        int status = 1; 
        char string_dat[1000]; 
     
     
        long double von, bis; 
     
        long double wurzel; 
     
        FILE *datei; 
     
        printf("***Primzahltest mit Dateianbindung***\n\n"); 
     
        printf("Start bei: "); 
        scanf("%Lf", &von); 
     
        printf("Ende bei: "); 
        scanf("%Lf", &bis); 
     
        for(i=von; i<=bis; i++)// while(1) 
        { 
        status = 1;   // grundsätzlich geht man davon aus, dass es eine Primzahl ist 
                       // ein Gegenbeispiel (*0) und Status ist 0 und damit nicht prim 
     
        testzahl = i; 
     
        wurzel = sqrt(testzahl);    // Es ist nur eine Überprüfung bis zur Wurzel nötig 
     
       // printf("Testzahl eingeben (ENDE mit 0): "); 
       // scanf("%f",&testzahl); 
     
        if(testzahl == 0) 
            break; 
     
        datei = fopen("prim.txt", "a+"); 
     
        while(fgets(string, sizeof(string), datei) && (string_to_number(string) <= wurzel)) 
        { 
            if(fmod(testzahl, 2) != 0) 
            { 
               if(!(fmod(testzahl, string_to_number(string))== 0.0)) 
               { 
                   status *= 1;                           //ist Primzahl 
               } 
               else 
               { 
                   status *= 0;                        //keine Primzahl 
                   break; 
               } 
               if(testzahl == string_to_number(string)) 
                   status = 1; 
            } 
            else 
            { 
                status = 0; 
                break; 
            } 
        } 
     
        fclose(datei);                       // fragt mich nicht warum´... 
        datei = fopen("prim.txt", "a+");     // ... aber es hilft wunder! 
     
     
        if(status == 1) 
        { 
        //    printf("\n%.0Lf ist eine Primzahl!\n", testzahl); 
     
            fprintf(datei, "%.0Lf\n", testzahl);     //größerer Bereich als ultoa 
     
            //ultoa(testzahl, string_dat, 10);       //Umwandlung unsigned long to string 
     
            //if(fputs(string_dat, datei)==EOF) 
            //    printf("Fehler\n");                   //Wenn Primzahl, dann in Datei 
            //fputs("\n", datei);                        //schreiben 
        } 
        else 
        { 
        // printf("\n%.0Lf\n", testzahl); 
        } 
     
        fclose(datei); 
     
     
        }            //ENDE while-Schleife 
     
        printf("Fertig!"); 
    } 
     
    long double string_to_number(char string[])  // die macht dasselbe wie atoi() 
    {                                      // aber komm erstmal auf den Namen atoi! 
        int laenge; 
        long double zahl=0; 
        int i, j=0; 
        int help; 
     
        i = strlen(string); 
     
     
        j = 0; 
        i -= 2; 
     
        while(i>=0) 
        { 
            if(i<0)         // wenn string[0] überschritten (i--), dann ENDE 
                break; 
            switch(string[i]) 
            { 
                 case '1': help = 1; 
                            break; 
                 case '2': help = 2; 
                           break; 
                 case '3': help = 3; 
                            break; 
                 case '4': help = 4; 
                            break; 
                 case '5': help = 5; 
                            break; 
                 case '6': help = 6; 
                            break; 
                 case '7': help = 7; 
                            break; 
                 case '8': help = 8; 
                            break; 
                 case '9': help = 9; 
                            break; 
                 case '0': help = 0; 
                             break; 
            } 
     
            zahl += help * pow(10, j);   //erst die Einer addieren, dann die Zehner... 
     
        i--; 
        j++; 
        } 
     
        return zahl; 
     
    }
     
    Versuche nie Probleme zu lösen, von deren Existenz du noch gar nichts weißt!

  2. #2
    Registriert seit
    Nov 2002
    Beiträge
    2.709
    Du musst das Programm mit dem Parameter -lm uebersetzen, dann geht es. "lm" stellt die libmath zur verfuegung.
     

  3. #3
    Registriert seit
    Oct 2003
    Beiträge
    1.706
    Hallo,

    verusch mal die libm beim kompilieren mit dazu zu linken:

    Code :
    1
    
    gcc -lm your_source.c

    Gruß

    RedWing
     
    "I'm not deaf, I'm ignoring you"
    ----

  4. #4
    Registriert seit
    Oct 2003
    Beiträge
    1.706
    Ups, da war wohl jemand schneller
     
    "I'm not deaf, I'm ignoring you"
    ----

  5. #5
    Avatar von shutdown
    shutdown shutdown ist offline Mitglied Smaragd
    Registriert seit
    Jun 2004
    Beiträge
    1.026
    super, genau das wars!

    Vielen Dank!

    Kennt zufällig jemand noch den Befehl, mit dem man Textdateien in ein Linuxfreundliches Format verwandeln kann (ich weiß, dass es einen gibt, ich komm jetzt einfach net drauf)

    Meine unter Windows erstellte Datei sieht so aus:

    2^M
    3^M
    4^M
    ...

    Nur kann ich diese ^M nicht wirklich ansprechen/löschen.

    Sie werden aber von Linux auf irgendeine Art und Weise interpretiert, denn wenn ich die Datei zeilenweise einlese, dann akzeptiert er diese "Eingaben" nicht.

    Lass ich mein Programm die Datei erzeugen, dann steht da aber nix von ^M

    (wäre ganz praktisch, es sin nämlich schon fast 2 Mio Einträge )

    Danke!

    shutdown
     
    Versuche nie Probleme zu lösen, von deren Existenz du noch gar nichts weißt!

  6. #6
    Registriert seit
    Aug 2004
    Ort
    nähe Wü
    Beiträge
    429
    Hi,

    versuch es mal mit dos2unix. Das sollte aus deinem ^M eine ordenliches newlinechar machen.
     
    ---
    Der Uhu ist der Luchs unter den Adlern...
    Dieter Nuhr

  7. #7
    Registriert seit
    Nov 2002
    Beiträge
    2.709
    Unter Windows ist das "^M" = CR & LF, Unix nutzt nur ein LF. Mit dem Vim koenntest du wahrscheinlich auch per
    Code :
    1
    
    :1,$s/\\r\\n/\\n/g
    alles umwandeln. Vim-VIM-VIM
     

  8. #8
    Avatar von shutdown
    shutdown shutdown ist offline Mitglied Smaragd
    Registriert seit
    Jun 2004
    Beiträge
    1.026
    Danke!
    Jetzt klappts genau so wie ichs gern hätt *freu*

    Und es is tatsächlich schneller als unter Windows

    Vielen Dank!

    cu shutdown
     
    Versuche nie Probleme zu lösen, von deren Existenz du noch gar nichts weißt!

  9. #9
    Registriert seit
    Jan 2002
    Ort
    Bayern
    Beiträge
    1.390
    Kleiner Tipp am Rande entweder du nutzt std::string::getline zum einlesen oder du musst die Zeilen entsprechen verarbeiten, somit bleibt deine Datendatei portabel.

    Daniel
     
    we would change the world if god gave us the source code...
    and remember, science is nothing more than reverse engineering nature...

    Current projects:
    - LdrawConverter

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 14.04.08, 11:39
  2. Latex kompilieren unter Linux
    Von Darian im Forum Sonstige Sprachen
    Antworten: 6
    Letzter Beitrag: 12.12.07, 10:47
  3. Antworten: 4
    Letzter Beitrag: 19.05.07, 16:59
  4. warum kann ich dieses echo nicht ausgeben?
    Von Katzehuhn im Forum PHP
    Antworten: 3
    Letzter Beitrag: 08.03.05, 19:13