shutdown
Erfahrenes Mitglied
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.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:
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:
/*****************************************************************************
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;
}