Brauche dringend Hilfe für "c"

M

Mephisto_

Aktives Mitglied
Thread Starter
Dabei seit
02.11.2006
Beiträge
746
Reaktionspunkte
12
Folgendes Problem: Das Programm soll mir die Oberfläche und das Volumen von einen Kreis berechnen. Aber leider berechnet es mir nur das Volumen.

Hier der Quelltext:

main.c:
#include <stdio.h>

#include <oberK.h> /*Berechnung der Oberflaeche*/
#include <volumenK.h> /*Berechnung des Volumens*/

int main()
{
/*Konstanten bestimmen*/
float durchK;

/*Durchmesser abfragen*/
printf ("Bitte geben Sie den Kugeldurchmesser ein: ");
scanf("%f",&durchK);

/*Ergebnisse ausgeben*/
printf ("Das Volumen der Kugel betraegt %f m3 und die Oberflaeche %f m2",berVolumenK(durchK),berOberK(durchK));

return 0;
}

volumenK.c:
#include <stdio.h>
#include <volumenK.h>

#define PI 3.14159
#define bruch 0.16667

float berVolumenK(float durchK)
{
float volumenK;

volumenK = bruch * PI * durchK * durchK * durchK;

return volumenK;
}

oberK.c:
#include <stdio.h>
#include <oberK.h>

#define PI 3.14159

float berOberK(float durchK)
{
float oberK; //float für ergebnis mit nachkomma

oberK = PI * durchK * durchK;

return oberK; //das ergebnis zurück geben!
}

Bitte helft mir. Bin schon am verzweifeln.
 
Wozu erstellst du eigene Headerdateien, es reicht doch die Funktionen in der Main.c zu definieren.

Variante ohne eigenen Header:

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

#define bruch 0.16667

float berOberK(float durchK)
{
float oberK; //float für ergebnis mit nachkomma

oberK = M_PI * durchK * durchK;

return oberK; //das ergebnis zurück geben!
}


float berVolumenK(float durchK)
{
float volumenK;

volumenK = bruch * M_PI * durchK * durchK * durchK;

return volumenK;
}

int main()
{

float durchK;

printf ("Bitte geben Sie den Kugeldurchmesser ein: ");
scanf("%f",&durchK);

printf ("Das Volumen der Kugel betraegt %f m3 und die Oberflaeche %f m2",berVolumenK(durchK),berOberK(durchK) );

return 0;
}

Variante mit eigenen Header:

Code:
/* kugel.h */
#define bruch 0.16667

float berOberK(float durchK)
{
float oberK; //float für ergebnis mit nachkomma

oberK = M_PI * durchK * durchK;

return oberK; //das ergebnis zurück geben!
}


float berVolumenK(float durchK)
{
float volumenK;

volumenK = bruch * M_PI * durchK * durchK * durchK;

return volumenK;
}

Code:
#include <stdio.h>
#include <math.h>
#include "kugel.h"


int main()
{

float durchK;

printf ("Bitte geben Sie den Kugeldurchmesser ein: ");
scanf("%f",&durchK);



printf ("Das Volumen der Kugel betraegt %f m3 und die Oberflaeche %f m2",berVolumenK(durchK),berOberK(durchK) );

return 0;
}
 
Zuletzt bearbeitet:
Wenn du schon eine Header Datei machen möchtest dann brauchste für diesen Kontext nur eine. Hat e alles mit der Kugel zu tun.

Ach ja noch ne Anmerkung zu jools .. Was hat es für einen Grund das zu machen?

float berVolumenK(float durchK);
float berOberK(float durchK);

Da du e schon de Funktionen vor der main implementiert hast, sollte de main de Funktionen e kennen.

Und noch ne Frage zu Mephisto ... Hat der Compiler keine Meldung gemacht, dass er die Header Dateien oder so nicht gefunden hat?

Lokale Header-Dateien, also im gleichen Verzeichnis, inkludiert man ja so: #include "kugel.h".

Und noch ne Kleinigkeit, PI wäre eigentlich in der math.h als M_PI genau definiert.
 
Zuletzt bearbeitet:
hoppelmoppel schrieb:
Ach ja noch ne Anmerkung zu jools .. Was hat es für einen Grund das zu machen?

float berVolumenK(float durchK);
float berOberK(float durchK);
gar keinen :D, der Aufruf in der printf-Anweisung reicht natürlich aus.
 
Wusste nicht mal dass der Compiler da keine Fehlermeldung spuckt. Ist ja eigentlich eine Redeklaration .. ;)
 
Erstmal vielen dank für die vielen Antworten.

Leider müssen die Funktionen extern und in ne eigene Datei, sprich 2 externe. Eigentlich müsste meine Funktion doch stimmen? Was hab ich da falsch gemacht?
 
Das ist übrigens das Ergebnis warum ich mir Gedanken mache:

Bitte geben Sie den Kugeldurchmesser ein: 2
Das Volumen der Kugel betraegt 4.188870 m3 und die Oberflaeche 0.000000 m2
Übung 2 c has exited with status 0.
 
stell mal den ganzen source in nem packet zur verfügung sammt den header files. Und dann sag mal wie oder mit was du das kompiliert hast. Bis jetzt ist mir nur der, denk ich, fehlerhafte include aufgefallen.
 
Benutze diee neueste Version von XCode

Code:
/*main.c*

#include <stdio.h>

#include "oberK.h" /*Berechnung der Oberflaeche*/
#include "volumenK.h"  /*Berechnung des Volumens*/

int main()
{
                        /*Konstanten bestimmen*/
    float durchK;
    
                        /*Durchmesser abfragen*/
    printf ("Bitte geben Sie den Kugeldurchmesser ein: ");
    scanf("%f",&durchK);
    
                        /*Ergebnisse ausgeben*/
    printf ("Das Volumen der Kugel betraegt %f m3 und die Oberflaeche %f m2",berVolumenK(durchK),berOberK(durchK));
    
    return 0;
}

/*oberK.c*/

#include <stdio.h>
#include <oberK.h>

#define PI 3.14159

float berOberK(float durchK)
{
    float oberK;    //float für ergebnis mit nachkomma
    
    oberK = PI * durchK * durchK;
    
    return oberK;    //das ergebnis zurück geben!
}

/*oberK.h*/

float berOberK(float d);

/*volumenK.c*/

#include <stdio.h>
#include <volumenK.h>

#define PI 3.14159
#define bruch 0.16667

float berVolumenK(float durchK)
{
    float volumenK;
    
    volumenK = bruch * PI * durchK * durchK * durchK;

    return volumenK;
}

/*volumenK.h*/

float berVolumenK(float durchK);
 
Tja kann dir schon sagen was an dem kopierten Source nicht stimmt ... Schau dir mal die aller erste Zeile genau an. Wenns dann noch immer nicht geht dann gugg ich noch genauer rein ;)
 
Nein daran liegt es leider nicht. Hab die Kommentare mit den Dateien nur für euch schnell dazu geschrieben ;-)
 
Naja ok, das was mir beim pasten wieder aufgefallen ist ... sind deine includes in den volumek und oberk files. Zum einen sind sie falsch und zum anderen unnötig. Solange du nicht PI in den Header Dateien definierst oder du keinen call auf eine wo anders implementierte Funktion machst, brauchste diese nicht. Bist du dir sicher dass x-code keinen compilerfehler gibt?
 
jap. hab das gerade mal mit *hüstel*visual studio*hüstel* getestet. da funktioniert alles!
 
Ach bevor du solch nen Kram verwendest ;) .. benutz lieber de Kosole. Ist sehr einfach und schnell für kleine Sachen. Einfach ins source dir navigieren und ein gcc -Wall -g -o *Programmname* main.c [restlichen c files] und dann die datei so ausführen: ./*Programmname* (Sterne Weg und Programmname durch richtigen Namen ersetzen)
 
So habs mal in Xcode reinkopiert und ja .. da gibs Probleme ;) mal guggen ob ma des eingrenzen können. Wieder nen Grund warum ich de Konsole lieber hab XD

Um ehrlich zu sein .. ich weiß es nicht warum xcode da so rumgurkst ..

Aber mich würde auch noch deine Angabe interessieren .. Hat doch überhaupt keinen Sinn 2 Header Files zu machen, paste die doch mal rein XD
 
Zuletzt bearbeitet:
Also das ist ja spannend. Xcode gibt bei "Run" (Eingabe: 5.0) aus:

"Das Volumen der Kugel betraegt 65.451103 m3 und die Oberflaeche 0.000000 m2"

Wenn ich das von Xcode gebaute Binary im Terminal aufrufe (% build/Debug/cTest ), dann bekomme ich das erwartete Ergebnis:

"Bitte geben Sie den Kugeldurchmesser ein: Das Volumen der Kugel betraegt 65.451103 m3 und die Oberflaeche 78.539749 m2"

Was ist denn da los? Im Debug mode von Xcode geht es auch.

Alex

EDIT: Anbei meine Xcode Datei
 
Wie genau mache ich das mit der konsole?
 
Wie genau machst Du was mit der Konsole?

Alex
 
Oh, bei mir hat sich das Problem nach einem Clean gegeben. Müsste also auch prima in Xcode funktionieren.

Alex
 
Zurück
Oben Unten