programm soll ausgedachte zahl erraten



  • hallo leute,
    ich möchte ein programm schreiben, welches durch abfragen, wie z.b. "ist die zahl kleiner als 50?" und den antworten "ja oder nein", die ausgedachte zahl errät.
    die zahl liegt zwischen 1-100.
    also ich als anfänger dachte da dran alles mit if zu machen und habe auch schon angefangen und sehr schnell festgestellt, dass es eine riesen schreibarbeit wäre.
    es aber bestimmt eine sinnvollere alternative. daher wollte ich fragen ob ihr mir da ein paar tipps geben könnt. es würde mir sehr weiter helfen.



  • Was du suchst, sind Schleifen. Erkundige dich mal darüber.

    Mit Schleifen hat man die Möglichkeit, ähnliche Vorgänge mehrfach hintereinander auszuführen, ohne Code zu duplizieren. Du kannst am Anfang zwei Variablen für die untere und obere Grenze (also 0 und 100) deklarieren. Dann stellst du deine Frage, und je nach Antwort veränderst du die untere oder die obere Grenze. Das tust du so lange, bis eine weitere Verkleinerung der Grenzen nicht mehr sinnvoll ist.

    Eine Alternative dazu wäre Rekursion, jedoch würde ich dir für den Anfang Schleifen empfehlen, da diese meiner Ansicht nach grundlegender und vor allem am Anfang einfacher zu verstehen sind.



  • Riesen schreibarbeit?
    Das sind ein paar Zeilen...
    Kennst du dich denn mit Schleifen aus?



  • ja da kenn ich ein wenig aus
    welche schleife wäre sinnvoll??



  • Welche Schleife gefällt dir denn besser?

    int i = 0;
    while(i != 10)
        std::cout << i++ << std::endl;
    
    for(int i = 0; i != 10; ++i)
        std::cout << i << std::endl;
    

    🙂
    Bei deinem Problem ist es vom Prinzip her eher unerheblich welche Schleife du verwendest, solange du sie richtig verwendest.



  • c++meganoob schrieb:

    ja da kenn ich ein wenig aus
    welche schleife wäre sinnvoll??

    In deinem Beispiel wäre eine While-Schleife angebracht.

    Aufgrund deiner Fragestellung vermute ich jedoch, dass du noch zu wenig Erfahrung mit Schleifen (z.B. for ) hast. Vielleicht solltest du dich noch ein bisschen besser zu diesem Thema einlesen.

    Mizar schrieb:

    Bei deinem Problem ist es vom Prinzip her eher unerheblich welche Schleife du verwendest, solange du sie richtig verwendest.

    Nicht ganz. Zumindest finde ich es unschön, in For-Schleifen gewisse Teile im Schleifenkopf leerzulassen, und nehme deshalb lieber while .



  • alles klar ich werds probieren
    danke!!



  • Ich finde es auch meist fragwürdig, for-Schleifen zu "vergewaltigen", nur um die Funktionalität einer while-Schleife nachzubilden. Verwirr ihn doch nicht unnötig, Mizar. Ein Schubs in Richtung while-Schleife ist für c++meganoob doch genau richtig.

    Übrigens solltest du beim Annäheren an den Zielwert nicht in 1er-Schritten vorgehen, da du so bei einer Range von z.B. 100 im schlimmsten Fall 50 Fragen beantworten musst. Setze eine vernünftige Schrittweite fest, die du nach und nach reduzierst.



  • _matze schrieb:

    Setze eine vernünftige Schrittweite fest, die du nach und nach reduzierst.

    Beispielsweise die Hälfte der Differenz zwischen oberer und unterer Grenze. 😉



  • _matze schrieb:

    Verwirr ihn doch nicht unnötig, Mizar.

    Das war nicht meine Absicht, ich wollte ihm nur zeigen das es mehrere Möglichkeiten gibt. Aber ich gebe dir und auch Nexus recht, das eine for -Schleife bei diesem Problem minimal umständlicher wäre als eine while -Schleife.



  • Nexus schrieb:

    _matze schrieb:

    Setze eine vernünftige Schrittweite fest, die du nach und nach reduzierst.

    Beispielsweise die Hälfte der Differenz zwischen oberer und unterer Grenze. 😉

    Hehe, ok, demnächst werden erstmal mindestens 2 Sekunden in's Nachdenken investiert... oh je... 😃



  • _matze schrieb:

    Hehe, ok, demnächst werden erstmal mindestens 2 Sekunden in's Nachdenken investiert... oh je... 😃

    Das hätte man spätestens bei deinem Post schon sagen können, deshalb dachte ich, es käme auch nicht mehr drauf an. 😉



  • heyhey leute regt euch nicht auf^^
    also ich probiers mit einer while schleife..aber irgendwie ohne erfolg
    ich habs schon tausend mal geändert
    ich poste es einfach mal^^

    # include <iostream>
    
    int main ()
    { std::cout<<"Ist ihre Zahl kleiner als 50 (1/0): "<< std::endl;
    
    int x;
      std::cin>> x;
    int i=50; 
      while(i>=1) 
      { 
    	  int j=50;
    	  while(j<=100){
    
      if (x==1)
      {  i/=2;
    	std::cout<<"Ist ihre Zahl kleiner als" << i << "(1/0): "<< std::endl;
      }
      if (x==0)
      {
    	  j*=1.5;
    std::cout<<"Ist ihre Zahl kleiner als" << j << "(1/0): "<< std::endl;
      }
    
    	  }}}
    

    außerdem soll ich nur mit 10 fragen hinkommen..



  • In meinem ersten Post in diesem Thread habe ich die Grundüberlegung mal erläutert. Wenn du die Schleifen verstanden hast, solltest du diese auch einigermassen anwenden können. Wenn nicht, musst du noch einmal über die Bücher.

    Ausserdem rate ich dir dringend, eine vernünftige Einrückung zu machen!



  • 😕 😮 🙄



  • Wenn du noch Verständnisprobleme hast, kannst du gerne nachfragen. Es sei denn, du befasst dich gar nicht mit dem Problem und willst uns nur ärgern.



  • Falls das ernst gemeint ist, dann gewöhn dir erstmal eine vernünftige Einrückung an...

    http://de.wikipedia.org/wiki/Einrückungsstil



  • natürlich befasse ich mich mit dem problem
    warum sollte ich euch ärgern?!?!?!
    also ich habs nach dem ich mir dein comment nochma durchgelesen nochmal probiert

    int antwort, zahl;
    	int x=50;
    		while (x<=100){
    
    			int y=100;
    			while (y>0){
    
    	zahl=(y+x)/2;
    	;
    
    std::cout<<"Ist ihre Zahl kleiner als" << zahl << "(1/0): "<< std::endl;
    
    std::cin>> antwort;
    
    if (antwort==1)
    
    { y/=2;}		
    
    if (antwort==0)
    
    { }
    			}}
    
    }
    

    ich weiß nicht was ich bei antwort 0 machen soll????



  • x=0 natürlich



  • c++meganoob schrieb:

    natürlich befasse ich mich mit dem problem
    warum sollte ich euch ärgern?!?!?!

    Deine drei Smileys ohne jegliche Beschreibung weisen darauf hin.

    c++meganoob schrieb:

    x=0 natürlich

    Du kannst Beiträge auch nachträglich editieren. 😉

    Aber okay, ich helf dir mal ein bisschen auf die Sprünge.

    int UpperBound = 100;       // obere Grenze (am Anfang 100)
    int LowerBound = 0;         // untere Grenze
    
    while (...) // solange der eingegrenzte Bereich gross genug ist
    {
    	... // hier Zahl abfragen, Bereich auswählen
    	... // hier eine der Grenzen neu setzen, um Bereich weiter einzuschränken
    }
    

Log in to reply