Seite 1 von 1

Problem kompilierung in C

Verfasst: So Mai 03, 2009 2:27 pm
von schlafmütze
ich habe ein Buch names Easy C beschäftigt.
Bei 5 Kapitel bin ich mit ein Beispiel nicht zurecht gekommen.
Das Beispiel handelt es sich um Dateiaustausch und programmiere in C.

Code: Alles auswählen

#include <stdio.h>
#include <math.h>


void kreis_area(float d)
  {
    float flaeche, pi = 3.1415;
    flaeche = d*d*pi/4;
    printf("Flaeche des Kreises : %.2f \n",flaeche);
  }

void kreis_durchmesser(float flaeche)
 {
   float d,pi = 3.1415;
   d = sqrt(4 * flaeche / pi);
   printf("Durchmesser des Kreises Betreagt : %.2f\n",d);
 }

void kreis_umfang(float d)
 {
   float umfang, pi = 3.1415;
   umfang = d * pi;
   printf("Umfang des kreises betraegt : %.2f\n",umfang);
 }

 int main()
  {
    float var;
    int abfrage;
   
    do{
        printf("welche Berechnung wollen wir durchfuehren ?\n\n");
        printf("<1> Kreisflaeche\n");
        printf("<2> Kreisdurchmesser\n");
        printf("<3> Kreisumfang\n\n");
        printf("<4> Programm beenden\n\n");
        printf("Ihre Auswahl < >\b\b");
        scanf("%d",&abfrage);

        switch(abfrage)
          {
             case 1 :   printf("Durchmesser : ");
                        scanf("%f",&var);
                        kreis_area(var);
                        break;

             case 2 :   printf("Flaeche : ");
                        scanf("%f",&var);
                        kreis_durchmesser(var);
                        break;
             
             case 3 :   printf("Durchmesser : ");
                        scanf("%f",&var);
                        kreis_umfang(var);
                        break;
             case 4 :   printf("Programmende\n");
                        break;
             default:   Printf("Unbekannte Eingabe\n");
           }
        }while(abfrage!=4);
        return 0;
      } 	
sobald ich das Programm mit

Code: Alles auswählen

 gcc dateiaustauch.c
kompiliere zeigt es mir eine unbekannte Fehlermeldung und zwar :

Code: Alles auswählen

/tmp/ccChUXga.o: In function `kreis_durchmesser':
dateiaustauch.c:(.text+0x71): undefined reference to `sqrt'
/tmp/ccChUXga.o: In function `main':
dateiaustauch.c:(.text+0x1f7): undefined reference to `Printf'
collect2: ld gab 1 als Ende-Status zurück
übrigens ich besitze Ubuntu 9.04

Re: Problem kompilierung in C

Verfasst: So Mai 03, 2009 2:31 pm
von Xin
Du musst die math-Library mit einbinden. Beim GCC musst Du dafür den Schalter -lm beim Kompilieren hinzufügen.

Code: Alles auswählen

gcc -lm dateiaustausch.c
Ansonsten solltest Du printf noch klein schrieben ;-)

Re: Problem kompilierung in C

Verfasst: So Mai 03, 2009 2:42 pm
von schlafmütze
Oh danke das ging schnell.
danke hat funktioniert.

Re: Problem kompilierung in C

Verfasst: So Mai 03, 2009 3:04 pm
von schlafmütze
Was tun die Parameter da ?

Werden damit die funktionen aufgerufen ?

Re: Problem kompilierung in C

Verfasst: So Mai 03, 2009 3:08 pm
von Jside
schlafmütze hat geschrieben:Was tun die Parameter da ?

Werden damit die funktionen aufgerufen ?
-lm heißt Wörtlich -libMath
Damit wird dem Linker gesagt, das er diese Libs hinzuziehen soll... soviel ich weiß...

Re: Problem kompilierung in C

Verfasst: So Mai 03, 2009 3:09 pm
von schlafmütze
Missverstanden sry ich meine die Parameter in der Funktion float d etc :oops:

Re: Problem kompilierung in C

Verfasst: So Mai 03, 2009 3:17 pm
von Xin
schlafmütze hat geschrieben:Was tun die Parameter da ?
Werden damit die funktionen aufgerufen ?
Der Linker baut Dein Programm zusammen. Dazu gehören nicht nur Deine Funktionen, sondern auch die Funktionen, die Du rufst. Die Library, in der printf() hinzugefügt wird, wird automatisch hinzugefügt. Wenn Du die Funktion sqrt rufst, muss das Programm ja auch irgendwo hinspringen. "-l" fügt eine zusätzliche statiche Library hinzu, "m" steht für die Math-Library. Die wird nicht automatisch hinzugefügt, weil sie nicht grundsätzlich benötigt wird.

Re: Problem kompilierung in C

Verfasst: So Mai 03, 2009 3:23 pm
von schlafmütze
sry leute ich meine die Parameter( float d )etc :oops: der Funktionen im Programm.
Missverstanden

Re: Problem kompilierung in C

Verfasst: So Mai 03, 2009 3:41 pm
von fat-lobyte
Damit übergibst du der Funktion Argumente, die die Funktion dann auswerten kann.
Du kannst das hier nachlesen:
http://tutorial.proggen.org/doku.php?id ... #parameter

Re: Problem kompilierung in C

Verfasst: So Mai 03, 2009 4:06 pm
von Dirty Oerti

Code: Alles auswählen

void kreis_area(float d)
d = Durchmesser des Kreises, von dem die Fläche berechnet werden soll.

Fläche = d * d * PI / (2*2)

Code: Alles auswählen

void kreis_durchmesser(float flaeche)
Dürfte selbsterklärend sein. Ist einfach nur die Umwandlung obiger Gleichung.

Code: Alles auswählen

void kreis_umfang(float d)
d = Durchmesser des Kreises, von dem du den Umfang berechnen willst.

Umfang = d * PI

:)
Falls das deine Frage war.