Hilfe zu Funktionen



  • Na ich denke es sollte so in der Art aussehen:

    const float calcMWST( float betrag, std::string steuersatz )
    {
    	if( ::strcmp( steuersatz.c_str( ), "0,07%" ) )
    		return ( betrag *= 0.07f );
    	else if( ::strcmp( steuersatz.c_str( ), "0,19%" ) )
    		return ( betrag * 0.19f );
    	else
    		return 0xfffff;
    };
    

    Der Code ist ungetestet...



  • wenn n ein char ist, kann es nicht "19" aufnehmen, das wären ja 2 chars. Warum nicht einfach interger nehmen? Bei deiner Funktion wird "steuer" auch gar nicht verändert. Es wird eine Kopie erstellt, in der Funktion geändert, aber nicht zurück gegeben. Entweder du deklarierst steuer als Referenz, oder du gibst die steuer in der Funktion zurück. Zudem solltest du globale Variablen vermeiden. Du kannst sie direkt als Paramater übergeben (vielleicht als Referenz)

    int n = 19;
    int v = 7;
    
    double MWSt ( const double betrag, double &steuer, int satz )
    {
        if(satz == n)
           return (steuer=betrag*0.19);
        if(satz == v)
           return (steuer=betrag*0.07);
    }
    
    int main() //int main, nicht void main
    {
        cout<<MWSt ( 1000, 10, 7 );
        //oder wenn steuer global deklariert wurde
        cout<<steuer;
    }
    


  • int main(){
       definiere betrag und satz;
       eingabe von betrag und satz;
       cout << "..." << MWST(betrag , steuer); // der von der methode zurückgegebene wert wird ausgegeben
    }
    
    float MWST(float betrag, char satz){  // rückgabetyp float
       definiere steuer;
       berechne steuer;
       return steuer;                     // float steuer zurückgeben
    }
    

    ich denke, das ist was du möchtest. bei dir wird die steuer übergeben. bringt eher nix, da sie erst berechnet werden soll. (wird später n wenig anders aussehn; aber denke für zeiger und referenzen reichts noch nicht) und die steuer müsste global sichtbar sein, was nich ganz so schön ist.

    edit. man man man. ich schreibe zu langsam. 🙂



  • Danke schon mal für die vielen Codes.
    Ein bisschen hats geholfen, ein bisschen hats verwirrt.
    Ich möchte ja eine Funktion erstellen, die die Mehrwertsteuer aus einem übergebenen Betrag berechnet. Name der Funktion MWSt
    Ich muss also diesen Betrag an die Funktion übergeben.
    Ausserdem soll der Steuersatz wählbar sein, für die Eingabe "v" soll der verminderte Steuersatz von 7% und für "n" der Steuersatz von 19% zur Berechnung verwendet werden.
    Ich muss also zuerst den Betrag und den gewünschten Steuersatz einlesen, die Variablen würde ich betrag und satz nennen. betrag ist vom Typ double und Satz vom Typ char (da ja v oder n eingelesen werden)
    Wie übergebe ich diese Vaariablen bzw. Werte nun an die Funktion?
    Der Rückgabewert der Funktion soll dann also die berechnete Mehrwertsteuer aus dem eingegebenen Betrag.

    # include <iostream>
    using namespace std;
    
    void main()
    {
    double betrag;
    int satz;
    
    cout<<"Bitten den Betrag eingeben: "<<endl;
    cin>>betrag>>endl;
    
    cout<<"Bitten den Steuersatz eingeben: (v fuer 7% und n fuer 19%)"<<endl;
    cin>>satz>>endl;
    
    cout>>"Die Mehrwertsteuer beträgt: "<<MWSt<<"Euro"<<endl;
    
    double MWSt (double betrag, char satz) 
    
        double steuer;
    
        if (satz == v) 
        { 
            steuer = betrag * 0,07 
        } 
    
        if (satz == n ) 
        { 
            steuer = betrag * 0,19 
        }
    
        return steuer
    
    }
    

    Ist das jetzt mit der Definition der Variablen in Ordnung. Stimmt auch der Aufruf und der Rückgabewert der Funktion?

    Grüße und Danke!

    Alex



  • double MWSt (double betrag, char satz)

    Du definierst die Funktion nirgendswo. Außerdem ist es angebracht, Funktionen außerhalb der main-Funktion zu deklarieren/definieren.



  • # include <iostream> 
    using namespace std; 
    
    double MWSt(double betrag, char satz) 
    {
        double steuer; 
    
        if (satz == 'v') 
        { 
            steuer = betrag * 0,07 
        } 
    
        if (satz == 'n') 
        { 
            steuer = betrag * 0,19 
        } 
    
        return steuer 
    }
    
    int main()
    { 
    cout<<"Bitten den Betrag eingeben: "<<endl; 
    double betrag; 
    cin>>betrag; 
    
    cout<<"Bitten den Steuersatz eingeben: (v fuer 7% und n fuer 19%)"<<endl; 
    int satz; 
    cin>>satz;
    
    cout<<"Die Mehrwertsteuer beträgt: "<< MWSt(betrag, satz) <<"Euro"<<endl; 
    }
    

    so sollte es gehen - allerdings würd ich dir dringend empfehlen, noch mal ein wenig in deinen aufzeichnungen nachzugucken, was fkt sind, wie man sie definiert/deklariert und wie man sie aufruft...
    außerdem waren nen paar fehler mit cin und cout drin...
    cout>>
    macht nicht viel sinn
    und
    cin>>...>>endl
    auch nicht

    char`s vergleicht man übrigens so:
    to_cmp == 'x'
    und nicht mit
    to_com == x

    es sei denn, x ist selbst eine variable (die mit char vergleichbar ist)

    auch, dass void main() falsch ist, wurde schon oft genug gesagt...

    bb



  • Ich weiß das ich vor der Prüfung meine Unterlagen noch fleißig durchackern muss.

    😕
    Ich bekomme mit dem letzten Programm für den Betrag 100 und den Satz n bzw. den Satz v beide Male die Rückgabe 3.47668e-310Euro.
    Woran liegt denn das? Es sollten doch 19 bzw. 7 Euro dabei rauskommen.

    Grüße

    alex



  • So funktioniert das Programm

    # include <iostream>
    using namespace std;
    
    double MWSt(double betrag, char satz)
    {
        double steuer = 0;
    
        if (satz == 'v')
        {
            steuer = betrag * 0.07;
        }
    
        else if (satz == 'n')
        {
            steuer = betrag * 0.19;
        }
    
        return steuer;
    }
    
    int main()
    {
    cout<<"Bitten den Betrag eingeben: "<<endl;
    double betrag;
    cin>>betrag;
    
    cout<<endl<<"Bitten den Steuersatz eingeben: (v fuer 7% und n fuer 19%)"<<endl;
    char satz;
    cin>>satz;
    
    cout<<endl<<"Die Mehrwertsteuer betraegt: "<< MWSt(betrag, satz) <<" Euro"<<endl;
    }
    


  • if (satz == 'v')
    {
    steuer = betrag * 0,07
    }

    if (satz == 'n')
    {
    steuer = betrag * 0,19
    }

    unskilled, was gehtn?



  • außerdem war satz als int deklariert und nicht als char. bei der eingabe von 'v' gibts natürlich seltsame werte.



  • oh - ist mir nicht aufgefallen - hab ihn nat. mit copy&paste übernommen und nur die fehler rausgemacht, die ich gesehen hab ^^

    bb


Anmelden zum Antworten