Dateiaustausch



  • Hallo,

    Ich habe Ubuntu 9.04 und bin gerade mit 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.

    #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;
          }
    

    Meine erste Frage ist :

    Wofür dienen die Parameter

    float d
    
    float flaeche
    

    und nochmals

    float d
    

    in den Drei Funktionen.

    Und meine zweite Frage ist :

    Sobald ich das Programm kompiliere zeigt die folgende Fehlermeldung:

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

    Und meine dritte Frage ist :

    Wofür dienen die Vars in Switch ?

    Ich bitte um Hilfe 🙂



  • Ist ja schön das du deine Datei Dateiaustausch nennst, hättest aber auch xyz.c oder sonst vieles nehmen können 😉 Als Betragstitel im Zusammenhang mit deinem Problem ist das aber nicht gerade hilfreich.

    float -> warum schaust du nicht einfach im Inhaltsverzeichnis deines Buchs?
    sqrt -> bin zu faul zum Suchen
    Printf -> schau mal wie das sonst bei dir im Quelltext steht und keine Fehlermeldung hervorruft 😃



  • float -> warum schaust du nicht einfach im Inhaltsverzeichnis deines Buchs?

    Ich weiß was float ist aber wofür dient in der funktion ?



  • Deinen float würde ich als "Übergabeparameter" bezeichnen - vielleicht solltest du dich noch ein wenig mit den C-Grundlagen beschäftigen?
    Der printf-Fehler ist wirklich sehr offensichtlich, f.-th. hat dir schon den richtigen Tipp gegeben (mit 25 Sekunden Nachdenken hättest du das selbst sehen sollen).

    Dein sqrt sollte sich in der math.h befinden. Eventuell bindet dein Compiler diese nicht automatisch ein? Kompilierst du in der Konsole, könntest du z.B. eingeben:
    gcc -lm -o ausführbareDatei.irgendwas -Wall quelltext.c

    Das -o gibt an, wo deine ausführbare Datei gespeichert wird, das -Wall sagt, dass du alle Warnungen sehen willst und das -lm bindet dir die math.h in den Kompilier-Prozess ein.

    Was den "Dateiaustausch" angeht: Du siehst hoffentlich, dass dein Beispiel absolut nichts damit zu tun hat? Du berechnest hier ein paar Dinge, die mit einem Kreis zu tun haben, nichts weiter.



  • mit dem übergabeparameter wird die funktion aufgerufen?



  • Nein. Den Übergabeparameter übergibst du bei Aufruf an die Funktion. (klingt ziemlich plausibel, oder? 😉 )



  • π ist in der math.h genauer definiert als

    # define M_PI            3.14159265358979323846  /* pi */
    
    /* und */
    
    # define M_PIl           3.1415926535897932384626433832795029L  /* pi */
    


  • Leider ist M_PI nicht von Standard vorgegeben.



  • Vielleicht bin ich ja nicht mehr ganz wach?

    Müsste float nicht der Datentyp der Übergabeparameter d und flaeche sein?

    Und var die Übergabeparameter beim Aufruf der Funktionen?

    Ach ja C ist casesensitiv ⚠


Anmelden zum Antworten