Okay, Danke für die schnelle Antwort
Frank
Okay, Danke für die schnelle Antwort
Frank
Moin,
ich fange gerade mit der C-Programmierung an, und versuche mich aktuell an einem Programm zur Bestimmung von Pi. Leider hat sich ein (Syntax-)Fehler eingeschlichen, den ich nicht ausfindig machen kann. Das ist das Programm:
Das sind die Meldung, die mir der C-Compiler ausgibt:Code:#include <stdio.h> // Dies ist ein Programm das Pi bestimmt. Es werden Zufälligen Punkte in einem quadrat von 1x1 FE #include <time.h> // erstellt. Gleichzeitig werden die Punkte näher als 1 zum Ursprung gemessen. Das Verhältnis #include <stdlib.h> // zur Gesammtanzahl wird mit vier multipliziert, #include <math.h> // da hier nur ein Viertelkreis betrachtet wird. Und // Und man erhält Pi #define rand() (a=a*1103515245+12345, a&0x2710) #define srand(r) a=r unsigned long int a=1; int main(void) { int Zaehler, Anzahl, Zaehlerb; // Zähler zählt die Durchläufe, Anzahl gibt die Anzahl der durchläufe an, float c, b; // Zahlerb zählt die Punkte näher als 1 zum Uhrsprung. a und b bezeichnen die double s,k,d; // Koordinaten im Quadrat, s den Abstand zum Ursprung. x wird für den int x=10000; // Zufallsgenerator benötigt srand(time(NULL)); printf("Dies ist ein Programm zur Bestimmung von Pi\n"); printf("Geben Sie die Anzahl der Durchläufe an:"); scanf("%d",&Anzahl); do { srand(time(NULL)); c=rand(); c/=x; b=rand(); b/=x; // Teil durch x für einen Wert zwischen 0 und 1. Zaehler++; d=c*c+b*b; k=double sqrt(d); if(k<=1){Zaehlerb++;} }while(Zaehler<=Anzahl); s=Zaehlerb/Anzahl; s*=4; Printf("\nBei der Betimmung ist für Pi folgender Wert herrausgekommen: %f",s); return(0); }
/tmp/cc1CJaLB.o: In function `main':
Bestimmung_Pi2.c.text+0x10b): undefined reference to `sqrt'
Bestimmung_Pi2.c.text+0x16d): undefined reference to `Printf'
collect2: ld gab 1 als Ende-Status zurück
Ich hoffe ihr könnt mir weiterhelfen,
mfg Arthur
Hallo Arthur,
- 1. der Compiler stößt sich an Deiner Zeile "double sqrt(d); ". Wenn Du ein explizites Typecasting vornehmen willst, müsstest Du "(double)sqrt(..)" schreiben, sonst einfach nur "sqrt(..)". Gibt "sqrt" nach Deiner "math.h" denn nicht sowieso schon einen "double" Wert zurück?
2. C ist "case sensitive": "Printf"!="printf".
3. Ansonsten habe ich mir Dein Program nicht angesehen.
4. Wenn Du hier Fehlermeldungen nennst, schreibe bitte dazu, welchen Compiler Du einsetzt!
5. Bei avr-gcc ist "double" gleich "float".
Gruß
Fred
Only entropy comes easy. - Anton Checkhov
Hallo
Die Idee eines endlosen C-Problem-Thread halte ich für Unsinn weil dann alle Infos im Nirwana des Forums verschwinden. Der Grund dafür ist die Suchfunktion die zwar die Stichworte im Thread findet, aber die dazugehörige Seite nicht anzeigt.
Viel besser finde ich kurze Threads mit eindeutigem Betreff und ein paar Antworten. Die werden mit der Suche auf jeden Fall gefunden.
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Abend,
ich habe das "double" in Klammern gesetzt und "printf" korrigiert, trotzdem spuckt er mir folgende Fehlermeldung aus:
/tmp/ccBEcJIn.o: In function `main':
Bestimmung_Pi2.c.text+0x10b): undefined reference to `sqrt'
collect2: ld gab 1 als Ende-Status zurück
den genauen kompiler kann ich jetzt nicht nennen, es ist aber der, welcher bei ubuntu linux standartmäßig über den befehl cc angesprochen wird.
Vielen Dank im vorraus,
mfg Arhtur
Hallo Arthur,
http://ubuntuforums.org/showthread.php?t=78478
Gruß
Fred
Only entropy comes easy. - Anton Checkhov
Hi Arhtur,
wenn du mit sqrt arbeitest, solltest du in den Compiler Optionen -lm mit aufnehmen. Damit wird dann die Math Library mit eingebunden.
sast
雅思特史特芬
开发及研究
Moin,
das Programm liefert mir zwar immer noch nicht PI, aber zumindest ist die Syntax jetzt in Ordnung. Vielen Dank für die Hilfe.
mfg Arthur
Wahrscheinlich rechnet es noch immer. Ist das dieses Programm, das PI auf 100 Seiten Druckpapier genau rechnet ?Zitat von keinplanII
Ich verstehe das so, dass der Compiler nicht meckert.Zitat von keinplanII
Weiter viel Erfolg.
Ciao sagt der JoeamBerg
moin,
nein, das Programm ist es nicht. Falls du Langeweile hast, kannst du dir den Quelltext ja mal anschauen. es streut bliebig Punkte in einem Quadrat von 1*1 FE, und zählt dann die, die innerhalb einer LE zum Ursprung liegt um dann Pi zu berechnen.
mfg, Arthur
Lesezeichen