Autor Beitrag
lolli
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Di 03.05.11 14:45 
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
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
static void Main(string[] args)
        {
            Console.WriteLine("Uebung 07 - Abzaehlalgorithmus\n");
            Console.WriteLine(abzaehlen(129));
            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;
        }


gruß lolli

Moderiert von user profile iconMartok: Quote- durch C#-Tags ersetzt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 03.05.11 16:38 
Hallo lolli,

innerhalb der while (bzw. for) -Schleife mußt du noch die schon rausgeflogenenen Kinder anhand von "anzahlKinder[k]" überprüfen, d..h überspringen.
Tipp: noch eine weitere while- (bzw. do-while) Schleife einfügen.
lolli Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Di 03.05.11 17:20 
so jetzt gibt er mir zumindest nen ergebnis aus. abe rich weis nich wo mein fehler liegt.
er setzt jetzt auch alle falsch, aber schon beim 2ten durchlauf setzt eins zu früh falsch -.-

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
static void Main(string[] args)
        {
            Console.WriteLine("Uebung 07 - Abzaehlalgorithmus\n");
            Console.WriteLine(abzaehlen(129));
            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;
            int sieger = 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;

                    while (anzahlKinder[k] == false)
                    {
                        if (k +1< anzahlKinder.Length)
                            k++;
                        else
                            k = 0;
                    }
                }
                    anzahlKinder[k] = false;

             }
            for (int x = 0; x < anzahlKinder.Length; x++)
            {
                if (anzahlKinder[x])
                    sieger=  x;
            }
          return sieger;
        }