Problem kompilierung in C

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
schlafmütze
Beiträge: 67
Registriert: Mi Mär 11, 2009 6:48 pm

Problem kompilierung in C

Beitrag von schlafmütze » So Mai 03, 2009 2:27 pm

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

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Problem kompilierung in C

Beitrag von Xin » So Mai 03, 2009 2:31 pm

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 ;-)
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

schlafmütze
Beiträge: 67
Registriert: Mi Mär 11, 2009 6:48 pm

Re: Problem kompilierung in C

Beitrag von schlafmütze » So Mai 03, 2009 2:42 pm

Oh danke das ging schnell.
danke hat funktioniert.

schlafmütze
Beiträge: 67
Registriert: Mi Mär 11, 2009 6:48 pm

Re: Problem kompilierung in C

Beitrag von schlafmütze » So Mai 03, 2009 3:04 pm

Was tun die Parameter da ?

Werden damit die funktionen aufgerufen ?

Benutzeravatar
Jside
Beiträge: 377
Registriert: Di Nov 11, 2008 12:56 am

Re: Problem kompilierung in C

Beitrag von Jside » So Mai 03, 2009 3:08 pm

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ß...

schlafmütze
Beiträge: 67
Registriert: Mi Mär 11, 2009 6:48 pm

Re: Problem kompilierung in C

Beitrag von schlafmütze » So Mai 03, 2009 3:09 pm

Missverstanden sry ich meine die Parameter in der Funktion float d etc :oops:

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Problem kompilierung in C

Beitrag von Xin » So Mai 03, 2009 3:17 pm

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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

schlafmütze
Beiträge: 67
Registriert: Mi Mär 11, 2009 6:48 pm

Re: Problem kompilierung in C

Beitrag von schlafmütze » So Mai 03, 2009 3:23 pm

sry leute ich meine die Parameter( float d )etc :oops: der Funktionen im Programm.
Missverstanden

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: Problem kompilierung in C

Beitrag von fat-lobyte » So Mai 03, 2009 3:41 pm

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
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Problem kompilierung in C

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

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.
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Antworten