Probleme mit Volumenberechnung (bzw. allgemein Rechenoperationen)



  • Deine Funktion erwartet Parameter.



  • Deine globalen Variablen a,b,c sind nicht die gleichen, die du in der Funktion als Parameter verwendest, auch wenn sie die gleichen Namen tragen! Nimm die globalen Variablen weg und definiere stattdessen lokale in main. Die übergibst du dann deiner Funktion.



  • Ihr habt's jetzt amtlich: Tim hat C verlernt 🤡



  • Tim schrieb:

    Ihr habt's jetzt amtlich: Tim hat C verlernt 🤡

    Vermutlich hast du "d" für eine Variable gehalten. Der Name ist auch denkbar schlecht gewählt. So was solltest du dir lieber gar nicht erst angewöhnen, Jan_K. Lokale Variable, die vllt. über 10 Zeilen gültig sind, darf man unter Umständen so nennen. Aber keine Funktionen.
    Wenn du dich an gewisse Konventionen hältst, tust du nicht nur anderen, sondern auch dir einen Gefallen.



  • Du musst die Funktion auch aufrufen. Funktionen erkennt man an den ().

    #include <stdio.h>
    
    //Funktion
    float qvolumen (float a, float b, float c)
    {   
        return (a * b * c);
    }
    
    void main (void)
    {
    // Definitionen (Deklaration ist anders)
      float a = 5,b = 10,c = 8;
    
      printf("Volumen = %f\n\n\n", qvolumen(a,b,c)); // Hier wird qvolumen mit den Parametern a, b und c aufgerufen. Der Rückgabewert wird gleich an printf weitergegeben
    //  system("PAUSE"); // ist nicht in stdio.h
      return;
    }
    


  • Besser und sicherer erscheint mir die Einführung einer Variable float r für den Rückgabewert der Funktion. Die Funktion ruft man dann erst mit r = function(...) auf und übergibt dann den Rückgabewert an printf, sonst kriegt man eben Null.



  • Ist es jetzt Geschmackssache, ob man mit double oder float arbeitet?

    Für meine bisherigen Aufgaben hat sich double prima bewährt. Man muss halt je nach Rechenoperation und Compiler womöglich math.h includieren und die mathematische lib mit -lm am Ende des Compile-Aufrufs mit verlinken.

    Gerne lasse ich mich aber über große Unterschied (von der "doppelten Genauigkeit" mal abgesehen) aufklären 😃



  • double braucht i.A. doppelt so viel Speicherplatz wie float.
    Aber bei GB-weise Ram braucht man heutzutage darauf keine Rücksicht mehr nehmen. Die Berechnungen laufen alle sowieso in double ab.

    Wenn man (sehr) große Arrays hat kann man evtl. noch mit float arbeiten.
    (oder bei Berechnungen auf der GPU).



  • Wow, vielen Dank für so viele konstruktive Antworten!

    Habe das ganze dann noch fertig bekommen, einmal mit (tut mir sehr leid, wenn ich Fachbegriffe nicht so ganz korrekt anwende) lokaler Funktion, also im Codeblock von main()

    #include <stdio.h>
    
    void main (void)
    {
    	float l = 8,b = 5,h = 6;
    	float multipliziere = l*b*h;
    	printf("L%cnge l = %f\n",132,l);
    	printf("Breite b = %f\n",b);
    	printf("H%che h = %f\n",148,h);
    	printf("Volumen = %f\n\n\n",multipliziere);
    	getchar();
    	return;
    }
    

    Danach dann noch mit globaler Funktion

    #include <stdio.h>
    
    float l = 10,b = 5,h = 7;
    
    int multipliziere() 
    {
    	return (l*b*h);
    }
    
    void main (void)
    {
    
    	printf("L%cnge l = %f\n",132,l);
    	printf("Breite b = %f\n",b);
    	printf("H%che h = %f\n",148,h);
    	printf("Volumen V = %d\n\n\n",multipliziere()); //globale Funktion multipliziere() wird aufgerufen
    	getchar();
    	return;
    }
    

    Klappt auch beides, versuche mich nun noch an einer Unteraufgabe.. Nochmals tausend Dank!



  • Das ist beides Mist.

    Lokale Funktione gibt es in C nicht.
    Ausserdem ist das gar keine Funktion.

    Der Wert von multiplizier wird direkt bei der Definition der Variable ausgerechnet und zugewiesen.

    Und globale Variablen sind böse. Da hast du nichts davon das du eine Funktion hast.

    Einer Funktion übergibt man Werte und bekommt einen Wert zurück.

    Bei meinem Beispiel von gestern kannst du auch schreiben:

    printf("Volumen = %f\n\n\n", qvolumen(1,4.5,3));
    // oder
    multipliziere = qvolumen(l,b,h);
    

    Dabei ist es egal wie die Variablen heissen.


Anmelden zum Antworten