[C#] Abzählen Algorithmus
spacer
Autor Nachricht
lolli
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Di 03.05.11 14:45 
Verwendete Sprache: C#
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 markieren
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(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;
}


gruß lolli

Moderiert von user profile iconMartok: Quote- durch C#-Tags ersetzt
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 1798
Erhaltene Danke: 250

Win 2000, Win XP, Win7
C++, C# (VS 2005/08/10)
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.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
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 markieren
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(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;
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;
}
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
home home