ERLEDIGT
NEIN
NEIN
ANTWORTEN
8
8
ZUGRIFFE
4495
4495
EMPFEHLEN
-
Hi!
Der Titel sagts ja eigentlich schon.
Ich bekomme folgendes C-Programm einfach nicht zu laufen.
Er bringt mir diese Fehlermeldung
Also auf gut deutsch: Er akzeptiert keine Funktion der math.htmp/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
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!
-
Du musst das Programm mit dem Parameter -lm uebersetzen, dann geht es. "lm" stellt die libmath zur verfuegung.
-
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"
----
-
Ups, da war wohl jemand schneller
"I'm not deaf, I'm ignoring you"
----
-
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!
shutdownVersuche nie Probleme zu lösen, von deren Existenz du noch gar nichts weißt!
-
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
-
Unter Windows ist das "^M" = CR & LF, Unix nutzt nur ein LF. Mit dem Vim koenntest du wahrscheinlich auch per
alles umwandeln. Vim-VIM-VIMCode :1
:1,$s/\\r\\n/\\n/g
-
Danke!
Jetzt klappts genau so wie ichs gern hätt
*freu*
Und es is tatsächlich schneller als unter Windows
Vielen Dank!
cu shutdownVersuche nie Probleme zu lösen, von deren Existenz du noch gar nichts weißt!
-
24.01.05 22:58 #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.
Danielwe 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
-
Unter Linux: Programm läuft nach kompilieren nicht mehr
Von Aiwonnie im Forum JavaAntworten: 2Letzter Beitrag: 14.04.08, 11:39 -
Latex kompilieren unter Linux
Von Darian im Forum Sonstige SprachenAntworten: 6Letzter Beitrag: 12.12.07, 10:47 -
[C] Anfängerfrage: Warum funktioniert dieses kleine Programm nicht?
Von Azi im Forum C/C++Antworten: 4Letzter Beitrag: 19.05.07, 16:59 -
warum kann ich dieses echo nicht ausgeben?
Von Katzehuhn im Forum PHPAntworten: 3Letzter Beitrag: 08.03.05, 19:13





Zitieren
Login





