kleines c# rätsel

süchtler

Grünschnabel
Hi Leute ! Will folgendes machen

Der Computer gibt eine Zahl zwischen 1 und 2048 vor (diese Zahll soll eine Zufallszahl sein), die der Benutzer erraten muss.

Es gibt maximal 11 Versuche, das Programm reagiert mit "zu groß", "zu klein" oder "richtig".
Die Anzahl der Versuche soll mitgezählt und am Schluss ausgegeben werden.

-------------------------------------

Wie mach ich das denn am besten ? Und wie geht das mit der Zufallszahl ? Wenn mir wer den Code geben könnte, könnte ich mich auch schon danach richten.

Ich lern gerade C# so aus nem Buch und den Foren, wär cool wenn ihr mir bei diesem Beispiel helfen könntet!
 
Ich gebe dir paar Tipps, diese Aufgabe ist perfekt zum lernen für dich :)

Zufallszahlen generieren:
Code:
Random R =new Random();
int zahl;
int I;
int MaxLimit = 99;
int MinLimit = 0;
for(I = 0; I < 1; I++)
{
zahl = R.Next(MinLimit,MaxLimit);
}
}

zähle am besten beim falsch machen einen Zähler hoch also so ungefähr:
Code:
if(geraten<zahl)
{
echo "falsch";
falschgewettet++;
}
usw.

Ich hoffe du verstehst wie ich das meine. Wenn du weitere Fragen hast, schieß los.
 
Ich denke mal das er damit nur die Ausgabe an den User meint. Ob nun 'Console.Write()' oder 'MessageBox.Show()'.. Hauptsache der User erfaehrt, dass er falsch geraten hat.
 
also .... es sagen einige das es echo in C# nicht gibt...

Stimmt das wirklich ? Wenn nein, wie genau verwende ich es ? Wenn ich es so wie du mache, gibt er mir einen Fehler aus.
 
Genau, wie erhardt schon gesagt hat, will ich nur damit sagen, das da dein Fehler ausgegeben wird ob nun echo (Konsele), MessageBox (Win) oder ein Textfeld spielt ja keine Rolle.

PS:
süchtler hat gesagt.:
also .... es sagen einige das es echo in C# nicht gibt...

Stimmt das wirklich ? Wenn nein, wie genau verwende ich es ? Wenn ich es so wie du mache, gibt er mir einen Fehler aus.

Dann lügen sie. Du kannst echo benutzten in dem du ein Konsolenprojekt erstellt in #Develop oder VS.NET. Wie willst du dein Rätsel programmieren? Als Konsolenprogramm oder Windowsprogramm? Wenn Windowsprogramm vergiss das und mach das erst als Konsolenprogramm. Ist nur ein gut gemeinter Tipp. Lern erstmal in einer Konsole zu programmieren, dann fehlt dir später die Windowsprogrammierung viel leichter.
 
Zuletzt bearbeitet:
ja ja ! ich will eh ein konsolenprogramm machen


ich werde das heute mal machen... darf ich dann den code hierher geben damit du ihn dir anschaust ?
 
also hier is mal der code
Code:
using System;
 
namespace DefaultNamespace
 
{
 
class MainClass
 
{
 
public static void Main(string[] args)
 
{
 
 
 
 
 
Random R =new Random();
 
int zahl;
 
int I;
 
int MaxLimit = 99;
 
int MinLimit = 0;
 
int geraten=Convert.ToInt16(Console.ReadLine());
 
for(I = 0; I < 1; I++)
 
{
 
zahl = R.Next(MinLimit,MaxLimit);
 
Console.WriteLine("{0}",zahl);
 
 
 
int falschgewettet=1;
 
 
 
while (falschgewettet<11) 
 
{
 
if(geraten<zahl)
 
{
 
Console.WriteLine("Ihre Zahl war zu nieder");
 
geraten=Convert.ToInt16(Console.ReadLine());
 
falschgewettet++;
 
}
 
else if (geraten>zahl)
 
{
 
Console.WriteLine("Ihre Zahl war zu hoch");
 
geraten=Convert.ToInt16(Console.ReadLine());
 
falschgewettet++;
 
}
 
else if (geraten==zahl && falschgewettet<=11)
 
{
 
Console.WriteLine("RICHTIG GERATEN");
 
break;
 
}
 
if (geraten!=zahl && falschgewettet>=11)
 
{
 
Console.WriteLine("Leider zu viele Versuche");
 
}
 
}
 
 
 
}
 
}
 
}
 
}
--------------------------------------------------------------------------------
Also ein Problem....
Wenn ich 10 mal den falschen Betrag eingebe, und beim 11ten mal den Richtigen, dann schreibt er trotzdem nicht Richtig...

PS: Das die zu erratende Zahl ausgewiesen wird, habe ich vorerst nur für mich gemacht, damit ich richtig testen kann.
 
Zuletzt bearbeitet:
Beim 11. Mal wird nich ausgegeben "RICHTIG GERATEN", weil es eine 'else if' Schleife ist.
Wenn also 'falschgewettet' den Wert 10 hat un in den rumpf der if Schleife (bei kleiner oder größer) gegangen wird, wird 'falschgewettet' nochmals um 1 erhöht, womit es 11 ist.

Da aber die if-Schleife zusammengehört, werden die anderen Ausdrücke (geraten == zahl, kleiner, größer) nicht mehr ausgewertet und es wird zurück in die while-Schleife gegangen, welche dann abgebrochen wird.

Außerdem hat die 1. for-Schleife keinen Sinn :)

Code:
using System;

namespace DefaultNamespace
{
   class MainClass
   {
      public static void Main(string[] args)
      {
         Random R = new Random();
         int zahl;
         int MaxLimit = 99;
         int MinLimit = 0;
         int geraten = Convert.ToInt16(Console.ReadLine());
         zahl = R.Next(MinLimit,MaxLimit);
         Console.WriteLine("{0}",zahl);
         int falschgewettet = 1;
         while (falschgewettet < 11)
         {
            if(geraten<zahl)
            {
               Console.WriteLine("Ihre Zahl war zu nieder");
               geraten = Convert.ToInt16(Console.ReadLine());
               falschgewettet++;
            }
            else if (geraten>zahl)
            {						
               Console.WriteLine("Ihre Zahl war zu hoch");
               geraten=Convert.ToInt16(Console.ReadLine());
               falschgewettet++;
            }
				
            if (geraten==zahl && falschgewettet <= 11)
            {
               Console.WriteLine("RICHTIG GERATEN");
               break;					
            }
				
            if (geraten!=zahl && falschgewettet >= 11)
            {
               Console.WriteLine("Leider zu viele Versuche");
            }
         }
         Console.ReadLine();
      }
   }
}
 
Zurück