Anfänger



  • also for schleife weg und eine neue variable für den zeilenumbruch einführen?

    stimmt denn der rest mit dem schalter?



  • dejavu o.O

    vll solltest du nicht alle deine threads "anfänger" nennen^^



  • Ich wusste, dass mir der Thread bekannt vorkommt.



  • haha, ja vl. aber ich lerne 😃



  • ich habs jetzt umgeändert, stimmt aber immer noch nicht.

    #include <iostream>
    #include <stdlib.h>
    #include <time.h>
    #include <stdio.h>
    
    using namespace std;
    int main()
    {
        int zahl=0,kopf=0;
        bool schalter=true;
        srand(time(NULL));
    
        while (schalter)
        {
            while(kopf <50 || zahl<50)
                {
                if ( rand() % 2 == 0 )
                    {
                        cout<<"Kopf ";
                        ++kopf;
                    }
                else
                    {
                        cout<<"Zahl ";
                        ++zahl;
                    }
    
                if (kopf >50 || zahl >50)
                    schalter=false;
        }}
    
        cout <<"\n\nKOPF: "<< kopf <<endl;
        cout <<"ZAHL: " <<zahl;
    }
    

    was mache ich falsch?



  • int main()
    {
        int zahl=0, kopf=0;
        srand(time(NULL));
    
        while(kopf < 50)
        {
            if ( rand() % 2 == 0 )
            {
                cout<<"Kopf ";
                ++kopf;
            }
            else
            {
                cout<<"Zahl ";
                zahl++;
            }
        }
    
        cout <<"\n\nKOPF: "<< kopf <<endl;
        cout <<"ZAHL: " <<zahl;
    }
    

    so sollte das wohl funktionieren
    den schalter braucht du nicht wirlich.



  • ich muss den schalter ja verwenden, ist in der aufgabenstellung (oben) gegeben.



  • int main() 
    { 
        int zahl=0, kopf=0; 
        srand(time(NULL));
        bool schalter = false;
    
        while(!schalter) 
        { 
            if ( rand() % 2 == 0 ) 
            { 
                cout<<"Kopf "; 
                kopf++;
    
                if (kopf >= 50)
                    schalter = true;
            } 
            else 
            { 
                cout<<"Zahl "; 
                zahl++; 
            }
        } 
    
        cout <<"\n\nKOPF: "<< kopf <<endl; 
        cout <<"ZAHL: " <<zahl; 
    }
    

    dann eben so^^



  • das funktioniert auch nit richtig, denn ich bekomme zahlen über 50 raus, aber normalerweiße soll es bei maximal 50 stoppen ^^



  • versuchs nochmal, eben editiert^^

    EDIT:
    oh, verlesen, und ja, seppj hat recht, ne if noch in Zahl und alles wird gut^^


  • Mod

    Niko.S schrieb:

    das funktioniert auch nit richtig, denn ich bekomme zahlen über 50 raus, aber normalerweiße soll es bei maximal 50 stoppen ^^

    Dann musst du das bei Zahl eben auch noch prüfen. Zeig mal ein bisschen Initiative.



  • Niko.S schrieb:

    das funktioniert auch nit richtig, denn ich bekomme zahlen über 50 raus, aber normalerweiße soll es bei maximal 50 stoppen ^^

    Könntest auch mal selber nachdenken 🙄 Schwer ist es nicht, das zu korrigieren.

    int main()
    {
    	int zahl=0, kopf=0;
    	srand(time(NULL));
    
    	while(kopf < 50 && zahl < 50)
    	{
    		if (rand() % 2 == 0 )
    		{
    			cout<<"Kopf ";
    			++kopf;
    		}
    		else
    		{
    			cout<<"Zahl ";
    			zahl++;
    		}
    	}
    
    	cout <<"\n\nKOPF: "<< kopf <<std::endl;
    	cout <<"ZAHL: " <<zahl;
    }
    


  • anti-freak, deine version klappt wieder nicht ^^

    aber ich habs selber hinbekommen

    int main()
    {
        int zahl=0, kopf=0;
        srand(time(NULL));
        bool schalter = true;
    
        while(schalter)
        {
            if ( rand() % 2 == 0 )
            {
                cout<<"Kopf ";
                ++kopf;
    
                if (kopf >= 50)
                    schalter = false;
            }
            else
            {
                cout<<"Zahl ";
                zahl++;
    
                if (zahl >= 50)
                    schalter=false;
            }
        }
        cout <<"\n\nKOPF: "<< kopf <<endl;
        cout <<"ZAHL: " <<zahl;
    }
    

    danke für die hilfe 😃



  • er will es ja mit dem bool

    int main() 
    { 
        int zahl=0, kopf=0; 
        srand(time(NULL)); 
        bool schalter = false; 
    
        while(!schalter) 
        { 
            if ( rand() % 2 == 0 ) 
            { 
                cout<<"Kopf "; 
                kopf++;
            } 
            else 
            { 
                cout<<"Zahl "; 
                zahl++; 
            }
    
            if (zahl >= 50 || kopf >= 50)
                schalter = true;
        } 
    
        cout <<"\n\nKOPF: "<< kopf <<endl; 
        cout <<"ZAHL: " <<zahl; 
    }
    

  • Mod

    So, hier noch die ultimative TMP-Lösng (außer, dass man den Zufallsgenerator natürlich auch noch zur Compilezeit auswerten könnte, aber dann wäre der mehrfache Aufruf des Programms etwas witzlos):

    #include <cstdlib>
    #include <iostream>
    #include <ctime>
    
    const unsigned limit = 50;
    
    template<unsigned kopf, unsigned zahl> struct muenzwurfzaehler
    {
      void operator()()
      {
        if (std::rand() %2)
          muenzwurfzaehler<kopf+1, zahl>()();
        else
          muenzwurfzaehler<kopf, zahl+1>()();
      }
    };
    
    template<> template<unsigned kopf> struct muenzwurfzaehler<kopf, limit>
    {
      void operator()()
      {
        std::cout << "Abgebrochen, da " << limit << "xZahl. Zählerstand für Kopf ist " << kopf << '\n';
      }
    };
    
    template<> template<unsigned zahl> struct muenzwurfzaehler<limit ,zahl>
    {
      void operator()()
      {
        std::cout << "Abgebrochen, da " << limit << "xKopf. Zählerstand für Zahl ist " << zahl << '\n';
      }
    };
    
    int main()
    {
      std::srand(std::time(0));
      muenzwurfzaehler<0,0>()();
    }
    

    Das Programm ist auch ein wunderbarer Compilerkiller. 50 geht als Spitzenwert noch gut in ein paar Sekunden, aber bei 500 kam mein Rechner schon ganz gut ins Schwitzen.

    edit: Benutzer von MSVC müssen glaube ich noch ein bisschen was an der Syntax der partiellen Spezialisierungen ändern, damit das Programm bei ihnen übersetzt, da MSVC sich da nicht strikt an den Standard hält. Wie genau, dass müsst ihr nachschlagen oder auf jemanden warten, der MSVC und TMP benutzt. camper? pumuckl?



  • Treadtitel schrieb:

    Anfänger

    ich denke das ist ein wenig überfordernd, wenn er noch nichtmal richtig mit bools umgehen kann^^
    zumal hier ebenso sein condition bool fehlt 😛


  • Mod

    anti-freak schrieb:

    Treadtitel schrieb:

    Anfänger

    ich denke das ist ein wenig überfordernd, wenn er noch nichtmal richtig mit bools umgehen kann^^
    zumal hier ebenso sein condition bool fehlt 😛

    Ja, das war auch nicht wirklich für ihn, sondern eher für andere, damit man mal sieht, was so alles möglich ist. Und für mich selbst zur Übung. TMP braucht man in der Praxis so selten, ist aber so cool 🕶 , da möchte ich drin fit bleiben. Da sind solche Beispiele gerade recht.



  • ok, wenn das für alle ist, dann komme ich gerade an einen punkt, zu fragen, für was man sowas braucht^^
    sehe da eher keine verwendungszwecke, für was sowas sinnvoll sein soll.

    und ja, ich weiß was templates sind, aber sehe nicht was es für einen sinn hat, sowas einfaches so zu verkomplizieren (außer natürlich der übung).



  • Templates nutzt man (normalerweise) auch eher für Typen. Aber auch andere Dinge können nützlich sein:

    template<typename T, unsigned int N>
    class Vector
    {
      T data_[N];
    public:
      ...
    };
    

    Die Lösung von SeppJ war natürlich eher scherzhaft gemeint.


  • Mod

    Ja, hier ist das eher Proof-of-Concept. Aber es gibt durchaus Anwendungen, die man damit wesentlich vereinfachen kann. Guckst du zum Beispiel hier:
    http://www.c-plusplus.net/forum/282091


Anmelden zum Antworten