String aus Funktion



  • Hi,

    ich programmire noch nicht lange in c++ und habe ein kleines Problem:

    Ich habe eine übungsaufgabe, in der eich ein Programm schreiben soll, dass den promillewert nach dem genuss verschiedener alkoholika in einer tabelle auflistet. Die Tabelle soll bei jedem getränk von 0,2 bis 2 Lieter, in schritten von 0,2 Lieter angezeitgt werden. Wie kann ich das machen, dass alles von einer Funktion berechnet wird (ARRAY!!)

    Das ist mein bisheriger quellcode:

    #include <iostream>
    
    using namespace std;
    
        char menu;
        int gewicht = 0;
        float volume = 0;
        float promille;
        float lieter = 2.0;
        int i; //Zählvariable
        float alc; //Var gibt die menge des reinen alkohols an
    
        float volbier()
        {
            volume = 0.06;
    
            while ( lieter <= 2)
            {
                alc = lieter * volume;
                promille = alc / gewicht * 1000.0;
                lieter = lieter + 0.2;
                ++i;
            };
    
        return promille;
    
        };
    
    int main()
    
    {
    
        cout<<"Drunken Monkey\nProgramm zum errechnen des Promille gehalts nach alkohol genuss\n\nMenue"<<endl;
    
    temp://GOTO.. nur vorläufig!
    
        cout<<"1)Gewicht eingeben\n2)Tabelle Anzeigen\n3)Programm beenden"<<endl;
        cin>>menu;
    
        if (menu =='1')
        {    cout<<"Geben Sie ihr gewicht an: "<<endl;
            cin>>gewicht;
            if (gewicht < 45)
                cout<<"Kein Alkohol für Kinder und Jugendliche!!!"<<endl;
            goto temp; //GOTO.. nur vorläufig!
        };
    
        if (menu =='2')
    
        {
            cout<<"Menge   Bier        Wein      Wodka     Stroh-Rum"<<endl;
            cout<<" (l)       Promille Promille  Promille  Promille "<<endl;
            cout<<"----------------------------------------------------- "<<endl;
            cout<<" 0.2       "<<volbier()<<"                                             "<<endl;
            cout<<" 0.3                                                  "<<endl;
            cout<<" 0.4                                                  "<<endl;
            cout<<" 0.5                                                  "<<endl;
            cout<<" 0.6                                                  "<<endl;
            cout<<" 0.7                                                  "<<endl;  
            cout<<" 0.8                                                  "<<endl;  
            cout<<" 0.9                                                  "<<endl;
            cout<<" 1.0                                                  "<<endl;
            cout<<" 1.1                                                  "<<endl;
            cout<<" 1.2                                                  "<<endl;  
            cout<<" 1.3                                                  "<<endl;
            cout<<" 1.4                                                  "<<endl;  
            cout<<" 1.5                                                  "<<endl;
            cout<<" 1.6                                                  "<<endl;
            cout<<" 1.7                                                  "<<endl;    
            cout<<" 1.8                                                  "<<endl;
            cout<<" 1.9                                                  "<<endl;
            cout<<" 2.0                                                  "<<endl;  
        };
    
        if (menu =='3')
    
    return 0;
    };
    

    Ausserdem würde ich gerne das doofe "goto" loswerden, hab das aber mit schleifen nicht hinbekommen..

    Zur info: ich benutze Microsoft Visual C++ 6.0

    danke für eure hilfe,
    Florian



  • He he, ich weiß nicht ob ich dir helfen kann wenn ich sowas sehe:

    if (menu =='2')
    
        {
            cout<<"Menge   Bier        Wein      Wodka     Stroh-Rum"<<endl;
            cout<<" (l)       Promille Promille  Promille  Promille "<<endl;
            cout<<"----------------------------------------------------- "<<endl;
            cout<<" 0.2       "<<volbier()<<"                                             "<<endl;
            cout<<" 0.3                                                  "<<endl;
            cout<<" 0.4                                                  "<<endl;
            cout<<" 0.5                                                  "<<endl;
            cout<<" 0.6                                                  "<<endl;
            cout<<" 0.7                                                  "<<endl;  
            cout<<" 0.8                                                  "<<endl;  
            cout<<" 0.9                                                  "<<endl;
            cout<<" 1.0                                                  "<<endl;
            cout<<" 1.1                                                  "<<endl;
            cout<<" 1.2                                                  "<<endl;  
            cout<<" 1.3                                                  "<<endl;
            cout<<" 1.4                                                  "<<endl;  
            cout<<" 1.5                                                  "<<endl;
            cout<<" 1.6                                                  "<<endl;
            cout<<" 1.7                                                  "<<endl;    
            cout<<" 1.8                                                  "<<endl;
            cout<<" 1.9                                                  "<<endl;
            cout<<" 2.0                                                  "<<endl;  
        };
    

    Eine Schleife hätte dir wohl einiges Copy und Paste erspart.
    Wieso überhaupt so viele Leerzeilen im Source, klemmt dein Enter?

    if (menu =='3')
    

    Und was macht das? Warten bis der Bildschirmschoner anspringt?

    Dein goto könntest du so wegkriegen:

    do {
      char c = menu();
      switch (c) {
        //mach was mit c
      };
    } while (c!='4');  //Angenommen die Eingabe von 4 soll beenden
    


  • Wenn du dir die Mühe machst die Frage in 2 Foren zu stellen, beantworte ich sie dir auch in 2 Foren 😃

    Ich würde deine Funktionen umschreiben, im Moment macht sie eh nicht viel Sinn

    float promilleRechner(float liter, float volumen, int gewicht){
      float alc = liter * volume;
      return (alc / gewicht * 1000L);
    }
    

    Deine bisherige Funktion vollbier() gibt immer nur die Promille für 2 Liter zurück.
    Da du die Werte in deiner Main ja zeilenweise mit konstanten Literwert macht, könnte das dann so aussehen.

    int main (){
    int Gewicht;
    float volBier = 0.06, volSchnaps = 0.2;
    
    /* Menü und so */
    
      for (int i = 1; i < 11; i++){
         cout << i * 0.2 << "  " << promilleRechner(i * 0.2, volBier, Gewicht) << "  " << promilleRechner(i * 0.2, volSchanps, Gewicht) << endl;
      }
    
    /* .......... */
    
    }
    


  • danke, werde mir deine tipps mal zu gemüte führen.. das mit dem if (menu =='3') ist zum beenden, ich hab halt das return noch nicht geschrieben....

    und wenn du eine bessere methode kennst, tabellen in der konsole darzustellen, währe ich über deinen vorschlag dankbar

    mfg. Florian



  • FlorianW schrieb:

    if (menu =='2')
    
        {
            cout<<"Menge   Bier        Wein      Wodka     Stroh-Rum"<<endl;
            cout<<" (l)       Promille Promille  Promille  Promille "<<endl;
            cout<<"----------------------------------------------------- "<<endl;
            cout<<" 0.2       "<<volbier()<<"                                             "<<endl;
            cout<<" 0.3                                                  "<<endl;
            cout<<" 0.4                                                  "<<endl;
            cout<<" 0.5                                                  "<<endl;
            cout<<" 0.6                                                  "<<endl;
            cout<<" 0.7                                                  "<<endl;  
            cout<<" 0.8                                                  "<<endl;  
            cout<<" 0.9                                                  "<<endl;
            cout<<" 1.0                                                  "<<endl;
            cout<<" 1.1                                                  "<<endl;
            cout<<" 1.2                                                  "<<endl;  
            cout<<" 1.3                                                  "<<endl;
            cout<<" 1.4                                                  "<<endl;  
            cout<<" 1.5                                                  "<<endl;
            cout<<" 1.6                                                  "<<endl;
            cout<<" 1.7                                                  "<<endl;    
            cout<<" 1.8                                                  "<<endl;
            cout<<" 1.9                                                  "<<endl;
            cout<<" 2.0                                                  "<<endl;  
        };
    

    Oh Gott! Mach das weg!

    Bye, TGGC (Demo or Die)



  • TGGC schrieb:

    Oh Gott! Mach das weg!

    jo, 'cout' ist dreck. ein schickes 'puts' hätt's auch getan



  • net schrieb:

    jo, 'cout' ist dreck. ein schickes 'puts' hätt's auch getan

    Aber puts ist doch C 🤡



  • imhotep schrieb:

    net schrieb:

    jo, 'cout' ist dreck. ein schickes 'puts' hätt's auch getan

    Aber puts ist doch C 🤡

    macht nichts. geht trotzdem. das ist ja das schöne an c++, die 99%ige c-kompatibilität



  • for (int i = 1; i < 11; i++){
         cout << i * 0.2 << "  " << promilleRechner(i * 0.2, volBier, Gewicht) << "  " << promilleRechner(i * 0.2, volSchanps, Gewicht) << endl;
      }
    

    Das gibt doch schon eine Art Tabelle aus, oder nich?



  • Panke schrieb:

    Das gibt doch schon eine Art Tabelle aus, oder nich?

    Na das hoff ich doch 😃
    Muss man nur noch einen passenden Tabellenkopf für basteln, vielleicht noch eine Trennung der Spalten machen, ............ hier und da ein paar Blümchen und Bienchen, ........ sollte ja nur das Prinzip zeigen.


Anmelden zum Antworten