Kreisfläche



  • Hallöchen,

    also ich habe ein eher einfaches Problem und komme trotzdem nicht darauf.
    Die Funktion bekommt zwei Radien übergeben und soll die Kreisfläche und die zwei Umfänge errechnen. Dem Aufrufer sollen die Werte nicht über den Rückgabewert bereit gestell werden. Wenn r1 < r2 den Wert 1 sonst 0.

    Aber irgendwie klappt der Aufruf der Funktion nicht. Oder ich habe einen Fehler mit den Zeigern gemacht.

    Für Hilfe wäre ich sehr Dankbar.

    Mit besten Grüßen

    Wurstbrot

    #include <stdio.h>
    #include <math.h>
    
    int kreis (float r1, float r2, float*A, float*U1, float*U2)
    {
    	float K1, K2,UM1, UM2;
    	float pi=3.14;
    	if (r1<r2)
    	{
    		K1=pi*r1*r1;
    		K2=pi*r2*r2;
    
    		*A=(K2-K1);
    
    		UM1=2*pi*r1;
    		UM2=2*pi*r2;
    
    		U1=&UM1;
    		U2=&UM2;
    
    		return 1;
    	}
    	else return 0;
    }	
    
    int main () {
    	float*a;
    	float*b;
    	float*c;
    
    	printf ("Kreisflaeche =%f \n Umfang 1=%f \n Umfang2=%f    \n",kreis(2.0,3.0, a,b,c));
        return 0;
    }
    


  • U1=&UM1;
            U2=&UM2;
    

    ändern in:

    *U1=UM1;
            *U2=UM2;
    

    Ausserdem stimmt dein printf Aufruf nicht, du übergibst ja nirgends die Parameter *a, *b und *c.



  • Aber ich will doch a,b und c doch gar nicht übergeben sondern von der Funktion übernehmen und unten ausgeben, a=Flächeninhalt, b=Umfang1 und c=Umfang2.
    Weißt du was ich meine?



  • Dann musst du trotzdem printf sagen, dass deine Variablen a, b und c sein sollen.
    So wie du das geschrieben hast, ginge es nur wenn deine Funktion als Rückgabewert a, b und c hätte (was aber durchaus ein Problem werden könnte 😉 ).
    So funzt es IMHO:

    kreis(2.0,3.0, a,b,c);
    printf ("Kreisflaeche =%f \n Umfang 1=%f \n Umfang2=%f    \n",*a, *b, *c);
    


  • Überlege dir vorher einmal wohin a, b und c zeigen! Du initialisierst sie nicht, aber greifst drauf zu! Vielleicht sollten a,b und c keine Zeiger sein, aber der Aufruf dafür kreis(2.0, 3.0, &a, &b, &c); lauten? 🙂

    P.S. Warum nimmst du float? Im Normalfall würde ich eher double nehmen, wegen der höheren Präzision.



  • Also den Flächeninhalt gibt er mir zurück. Dafür schon mal danke. Aber bei den Umfängen funktioniert es nicht. Da stürtzt das Prgramm immer ab. Obwohl es nachzuvollziehen ist.



  • Wir sollen reelwertige Zahlen erzeugen.



  • Oh richtig rüdiger... das da ja jeder Speicherplatz für *a, *b und *c fehlt, is mir gar nich aufgefallen ^^



  • Es funzt hab es in

    kreis(2.0,3.0, &a,&b,&c);
    printf ("Kreisflaeche =%f \n Umfang 1=%f \n Umfang2=%f    \n", a, b, c);
    

    geändert.
    Vielen, vielen Dank dafür.
    Jetzt habe ich es auch verstanden. Wir haben den Zeigern die Adressen im Aufruf an die Zeiger verwiesen.


Anmelden zum Antworten