- 3D-Druck Einstieg und Tipps         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 21

Thema: Allgemeiner C-Programmier-Thread (Atmega8)

  1. #11
    Anzeige

    E-Bike
    Okay, Danke für die schnelle Antwort

    Frank

  2. #12
    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:

    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);
    
    }
    Das sind die Meldung, die mir der C-Compiler ausgibt:

    /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

  3. #13
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.02.2006
    Ort
    3. Planet eines kleinen Sonnensystems in einem Seitenarm der Milchstraße
    Alter
    70
    Beiträge
    622
    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

  4. #14
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    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!

  5. #15
    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

  6. #16
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.02.2006
    Ort
    3. Planet eines kleinen Sonnensystems in einem Seitenarm der Milchstraße
    Alter
    70
    Beiträge
    622
    Only entropy comes easy. - Anton Checkhov

  7. #17
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    54
    Beiträge
    502
    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

    雅思特史特芬
    开发及研究

  8. #18
    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

  9. #19
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.693
    Zitat Zitat von keinplanII
    ... das Programm liefert mir zwar immer noch nicht PI ...
    Wahrscheinlich rechnet es noch immer. Ist das dieses Programm, das PI auf 100 Seiten Druckpapier genau rechnet ?

    Zitat Zitat von keinplanII
    ... aber zumindest ist die Syntax jetzt in Ordnung ...
    Ich verstehe das so, dass der Compiler nicht meckert.

    Weiter viel Erfolg.
    Ciao sagt der JoeamBerg

  10. #20
    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

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test