Hallöchen,
ich komme bei folgender Problemstellung nicht weiter.
Ermitteln des Siegers beim Abzählen
Methode bekommt Informationen Kinderanzahl sowie die Anzahl der Silben des Abzählreims übergeben.
Ergebnis ist eine Zahl, welches Kind gewinnt (
Abzählen beginnt mit dem ersten Kind und wird dann nach dem „Rausfliegen“ mit dem nachfolgenden Kind fortgesetzt
so richtig klappt das aber nich, weil ich nich weis was ich alles beachten muss, bzw wie ich die bereits auf false gesetzten array-werte richtig mit einbinde und wie ich die arrays immer wieder durchlafen lasse
hier mal mein versuch.
für hilfe wäre ich dankbar
static void Main(string[] args)
{
Console.WriteLine(abzaehlen(12, 9));
Console.WriteLine("\n Beenden...");
Console.ReadKey();
}
static int kinderAnzahlTrue(Boolean[] anzahlKinder) //Schleife wie viele Kinder noch dabei sind
{
int anzahlTrue = 0;
for (int t = 0; t < anzahlKinder.Length; t++)
{
if (anzahlKinder[t])
anzahlTrue = anzahlTrue + 1;
}
return anzahlTrue;
}
static int abzaehlen(int anzahl, int Reimsilben)
{
Boolean[] anzahlKinder = new Boolean[anzahl];
int k = 0;
for (int m = 0; m < anzahlKinder.Length; m++)
{
anzahlKinder[m] = true; //alle auf treue setzen
}
while (kinderAnzahlTrue(anzahlKinder) > 1) //solang mehr als 1 Kind im Spiel ist, durchlaufe die Schleife
{
for (int i = 1; i < Reimsilben; i++)
{
if (k + 1 < anzahlKinder.Length)
k++;
else
k = 0;
}
anzahlKinder[k] = false;
}
return 0;
}
lolli
Hallo,
Ich verstehe nicht ganz was dein Problem ist, bzw. was genau du überhaupt machen möchtest. Wenn ich aber den Code anschaue habe ich das Gefühl dir fehlen einige Grundlagen. So macht es z.B. keinen Sinn, dass _abzählen _einen Rückgabewert hat, der konstant ist.
Mfg
Aratar
mein problem ist, das mir ein ansatz fehlt wie ich an die aufgabe heran gehe.
die aufgabe heißt:
Entwickeln Sie eine Methode (mit Testprogramm) zum Ermitteln des Siegers bei einem Abzählen. Die Methode bekommt die Informationen Kinderanzahl sowie die Anzahl der Silben des Abzählreims übergeben. Das Ergebnis ist eine Zahl, die sagt, welches Kind gewinnt (also übrig bleibt).
Das Abzählen beginnt mit dem ersten Kind und wird dann nach dem „Rausfliegen“ mit dem nachfolgenden Kind fortgesetzt.
Der Aufruf der Methode abzaehlen(12,9)(12 Kinder und 9 Silben im Reim) müsste das
Ergebnis 2 liefern.
und dazu soll ich ein array verwenden.
was ich weis:
was ich nich weis ist wie ich das am geschicktesten lösen kann wenn das array zu ende ist und ich wieder sozusagen von vorn anfange abzuzählen, weil noch nicht alle kinder "raus" sind.
und wenn ein kind raus ist muss ich ja auch die schleife der silben auch neu durchlaufen.
Hallo,
am leichtesten sollte es sein, wenn du alle Nummern in eine Liste (List<int>) packst.
Danach schmeisst du solange einen Eintrag raus bis nurnoch einer vorhanden ist. Um den Richtigen zu ermitteln sollte index = liste.Count % Silben reichen.
Grüße
leider hab ich keine ahnung von listen und ich soll es auch mit nem array machen
Listen sind im Wesentlichen etwas komfortablere Wrapper um ein Array. Das einfachste wäre eine Liste von Kindern (in deinem Fall z.B. integers)
Du kannst das aber auch mit einem bool-Array machen. Das initialsierst du mit "true" für alle Kinder. Beim Abzählen inkrementierst du einen Zähler und musst die "false"-Werte überspringen.
Ich habe aber sehr stark den verdacht, das das gegen 1.1.1 Nicht nach Grundlagen fragen verstößt.
Lies dir mal eine Einführung in einem Buch durch, z.B. Visual C# 2010.
- eine schleife muss solang laufen, bis nur noch ein kind "drin" ist
Wer braucht schon Schleifen! 😛
Wobei ich mir auch relativ sicher bin, dass man dazu auch eine Formel aufstellen könnte und nicht auf Schleifen/ Rekursion setzen muss.
class Abzaehlen
{
static void Main(string[] args)
{
Abzaehlen abzaehlen = new Abzaehlen();
int AnzahlKinder = 12;
int Silben = 9;
List<int> Kinder = new List<int>();
//Liste mit Kindern erstellen
for (int i = 0; i < AnzahlKinder; i++)
{
Kinder.Add(i+1);
}
Console.WriteLine(abzaehlen.Sieger(Kinder, Silben, 0).ToString());
Console.ReadKey();
}
private int Sieger(List<int> Kinder, int Silben, int Index)
{
int RemoveIndex = (Index -1 +Silben < Kinder.Count) ? Index-1 +Silben : ((Index -1 +Silben) % Kinder.Count);
Kinder.RemoveAt(RemoveIndex);
return Kinder.Count > 1 ? Sieger(Kinder,Silben,RemoveIndex) : Kinder[0];
}
leider hab ich keine ahnung von listen und ich soll es auch mit nem array machen
Was wir allerdings voraussetzen. Siehe [Hinweis] Wie poste ich richtig? Punkt 1.1.1.
Es ist auch schwer vorzustellen, dass ihr eine Aufgabe bekommt, ohne vorher die nötigen Grundlagen besprochen zu haben.
Wenn das wider Erwarten hier nicht so war, findest du die Grundlagen zu Arrays und Listen in jedem guten C# Buch in den ersten Kapiteln beschrieben. Anschließend bekommst du die Lösung auch alleine hin und hast wesentlich mehr gelernt, als wenn wir dir sagen wie es geht.
Die rekursive Lösung von p66y solltest du nicht abgeben, sonst weiß dein Lehrer sofort, dass die nicht von dir ist.