Laden...

Abzählalgorithmus

Erstellt von lolli vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.830 Views
Thema geschlossen
L
lolli Themenstarter:in
3 Beiträge seit 2011
vor 12 Jahren
Abzählalgorithmus

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

A
118 Beiträge seit 2009
vor 12 Jahren

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

L
lolli Themenstarter:in
3 Beiträge seit 2011
vor 12 Jahren

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:

  • eine schleife muss solang laufen, bis nur noch ein kind "drin" ist
  • und ich in einer 2. schleife die einzelnen silben schrittweise durchghen muss und die kinder in bezug darauf erhöhen bis die silbenanzahl = 9 ist und dann fliegt das kind raus (sozugen, setzte ich array_=false)

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.

S
248 Beiträge seit 2008
vor 12 Jahren

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

L
lolli Themenstarter:in
3 Beiträge seit 2011
vor 12 Jahren

leider hab ich keine ahnung von listen und ich soll es auch mit nem array machen

U
282 Beiträge seit 2008
vor 12 Jahren

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.

P
13 Beiträge seit 2011
vor 12 Jahren
  • 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];
        }


Hinweis von herbivore vor 12 Jahren

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.

Thema geschlossen