 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 07.03.2012, 19:47 Titel: Algorithmus Rundensystem |
|
|
Ich habe vor, ein Computerprogramm zu schreiben, dass automatisch so auslost, wie nach der untenstehenden Paarungstafel. Leider komm ich nicht so ganz drauf wie ich das löse.
Code: | Paarungstafel Rundenturnier
Teilnehmer: 26 Runden: 25 Modus: Standard
Runde 1 : 1-26 2-25 3-24 4-23 5-22 6-21 7-20 8-19 9-18 10-17 11-16 12-15 13-14
Runde 2 : 26-14 15-13 16-12 17-11 18-10 19-9 20-8 21-7 22-6 23-5 24-4 25-3 1-2
Runde 3 : 2-26 3-1 4-25 5-24 6-23 7-22 8-21 9-20 10-19 11-18 12-17 13-16 14-15
Runde 4 : 26-15 16-14 17-13 18-12 19-11 20-10 21-9 22-8 23-7 24-6 25-5 1-4 2-3
Runde 5 : 3-26 4-2 5-1 6-25 7-24 8-23 9-22 10-21 11-20 12-19 13-18 14-17 15-16
Runde 6 : 26-16 17-15 18-14 19-13 20-12 21-11 22-10 23-9 24-8 25-7 1-6 2-5 3-4
Runde 7 : 4-26 5-3 6-2 7-1 8-25 9-24 10-23 11-22 12-21 13-20 14-19 15-18 16-17
Runde 8 : 26-17 18-16 19-15 20-14 21-13 22-12 23-11 24-10 25-9 1-8 2-7 3-6 4-5
Runde 9 : 5-26 6-4 7-3 8-2 9-1 10-25 11-24 12-23 13-22 14-21 15-20 16-19 17-18
Runde 10 : 26-18 19-17 20-16 21-15 22-14 23-13 24-12 25-11 1-10 2-9 3-8 4-7 5-6
Runde 11 : 6-26 7-5 8-4 9-3 10-2 11-1 12-25 13-24 14-23 15-22 16-21 17-20 18-19
Runde 12 : 26-19 20-18 21-17 22-16 23-15 24-14 25-13 1-12 2-11 3-10 4-9 5-8 6-7
Runde 13 : 7-26 8-6 9-5 10-4 11-3 12-2 13-1 14-25 15-24 16-23 17-22 18-21 19-20
Runde 14 : 26-20 21-19 22-18 23-17 24-16 25-15 1-14 2-13 3-12 4-11 5-10 6-9 7-8
Runde 15 : 8-26 9-7 10-6 11-5 12-4 13-3 14-2 15-1 16-25 17-24 18-23 19-22 20-21
Runde 16 : 26-21 22-20 23-19 24-18 25-17 1-16 2-15 3-14 4-13 5-12 6-11 7-10 8-9
Runde 17 : 9-26 10-8 11-7 12-6 13-5 14-4 15-3 16-2 17-1 18-25 19-24 20-23 21-22
Runde 18 : 26-22 23-21 24-20 25-19 1-18 2-17 3-16 4-15 5-14 6-13 7-12 8-11 9-10
Runde 19 : 10-26 11-9 12-8 13-7 14-6 15-5 16-4 17-3 18-2 19-1 20-25 21-24 22-23
Runde 20 : 26-23 24-22 25-21 1-20 2-19 3-18 4-17 5-16 6-15 7-14 8-13 9-12 10-11
Runde 21 : 11-26 12-10 13-9 14-8 15-7 16-6 17-5 18-4 19-3 20-2 21-1 22-25 23-24
Runde 22 : 26-24 25-23 1-22 2-21 3-20 4-19 5-18 6-17 7-16 8-15 9-14 10-13 11-12
Runde 23 : 12-26 13-11 14-10 15-9 16-8 17-7 18-6 19-5 20-4 21-3 22-2 23-1 24-25
Runde 24 : 26-25 1-24 2-23 3-22 4-21 5-20 6-19 7-18 8-17 9-16 10-15 11-14 12-13
Runde 25 : 13-26 14-12 15-11 16-10 17-9 18-8 19-7 20-6 21-5 22-4 23-3 24-2 25-1 |
Das ist der Quellcode den ich bisher habe.
Code: | DECLARE SUB TEILNEHMER
DECLARE SUB CPRINT (FFTEXT$, FFHEIGHT, FFWIDTH, FFCOLOR1, FFCOLOR2, FFCOLOR3)
DIM SHARED AS INTEGER mausx, mausy, mausk
DIM SHARED AS INTEGER FARBEN, Grafik, Sprache
DIM SHARED AS INTEGER RUNDE, TAZ, RAZ, Gegner
DIM SHARED AS String Spieler(500)
' RAZ = Rundenanzahl
' TAZ = Teilnehmeranzahl insgesamt
' RUNDE = aktuelle Runde
RUNDE = 1
TAZ = 26
Spieler(1) = "Mueller Michael"
Spieler(2) = "Merkl Angela"
Spieler(3) = "Schmidbauer Sepp"
Spieler(4) = "Kohl Rupert"
Spieler(5) = "Ruhland Rudi"
Spieler(6) = "Berthold Hans"
Spieler(7) = "Mittermaier Michael"
Spieler(8) = "Schmid Kurt"
Spieler(9) = "Wagner Richard"
Spieler(10) = "Maier Dieter"
Spieler(11) = "Gockel Herrmann"
Spieler(12) = "Del Tura Alexej"
Spieler(13) = "Boesl Jens"
Spieler(14) = "Nissen Friedrich"
Spieler(15) = "Peitsch Stefan"
Spieler(16) = "Stadler Max"
Spieler(17) = "Pohl Patrick"
Spieler(18) = "Schubert Herbert"
Spieler(19) = "Wacker Manuel"
Spieler(20) = "Bauer Steffen"
Spieler(21) = "Schneider Anton"
Spieler(22) = "Becker Boris"
Spieler(23) = "Winterhalder Karl-Otto"
Spieler(24) = "Oda Iris"
Spieler(25) = "Raven Vinzenz"
Spieler(26) = "Jelzin Borys"
TEILNEHMER
' ************************************************************************************
SCREENRES 1024, 768, 32
IF RUNDE MOD 2 <> 0 THEN
Gegner = (Runde + 1) / 2
FOR Z = 1 TO TAZ
CPRINT LTRIM$(STR$(Z)) + " - " + SPIELER$(Z) + " ", 20+ Z, 80, &hFFFFFF, &hFF55FF, &hAA00AA
NEXT
FOR ZZ = 0 TO TAZ-1
CC = CC + 1
CPRINT LTRIM$(STR$(CC+ 1)) + " " + SPIELER$(Gegner + ZZ) + " - " + SPIELER$(TAZ-ZZ) + " ", 55+CC, 65, &hFFFFFF, &hFF55FF, &hAA00AA
IF Gegner+ZZ > TAZ THEN ZZ = 0
IF TAZ-ZZ < 1 THEN ZZ = 0
IF CC > ((TAZ/2)-1) THEN EXIT FOR
NEXT
ELSE
Gegner = (TAZ + Runde) / 2
' CPRINT SPIELER$(TAZ) + " - " + SPIELER$(Gegner) + " ", 55, 80, &hFFFFFF, &hFF55FF, &hAA00AA
CC = 0
FOR ZZ = 0 TO TAZ-1
CC = CC + 1
CPRINT LTRIM$(STR$(CC+ 1)) + " " + SPIELER$(TAZ - ZZ) + " - " + SPIELER$(Gegner+ZZ) + " ", 55+CC, 65, &hFFFFFF, &hFF55FF, &hAA00AA
IF Gegner+ZZ > TAZ THEN ZZ = 0
IF TAZ-ZZ < 1 THEN ZZ = 0
IF CC > ((TAZ/2)) THEN EXIT FOR
NEXT
ENDIF
SLEEP
END
SUB CPRINT (FFTEXT$, FFHEIGHT, FFWIDTH, FFCOLOR1, FFCOLOR2, FFCOLOR3)
C = LEN(FFTEXT$)
REM PALETTE 4, 4
Color 4
LOCATE FFHEIGHT, FFWIDTH: PRINT FFTEXT$;
G = FFHEIGHT * 8 - 8
FOR F = FFWIDTH * 8 - 8 TO FFWIDTH * 8 + C * 8 - 8
FOR X = 0 TO 7
IF X < 2 AND POINT(F, G + X) = 4 THEN PSET (F, G + X), FFCOLOR1
IF X > 1 AND X < 5 AND POINT(F, G + X) = 4 THEN PSET (F, G + X), FFCOLOR2
IF X > 4 AND POINT(F, G + X) = 4 THEN PSET (F, G + X), FFCOLOR3
NEXT
NEXT
PALETTE
Color 15
End SUB
SUB FELT (X, y, XX, YY, FARBEN#)
LINE (X, y)-(X, YY - 1), &hFFFFFF
LINE (X, y)-(XX - 1, y), &hFFFFFF
LINE (X + 1, YY)-(XX, YY), &H555555
LINE (XX, y + 1)-(XX, YY), &h555555
PSET (X, YY), 7
PSET (XX, y), 7
VIEW (X + 2, y + 2)-(XX - 2, YY - 2), FARBEN, FARBEN
VIEW (0, 0)-(1023, 767)
END SUB
SUB TEILNEHMER
IF TAZ MOD 2 <> 0 THEN
RAZ = TAZ
ELSE
RAZ = (TAZ - 1)
END IF
IF RAZ < 3 THEN RAZ = 0
END SUB |
Der eine Code rechnet die Rundenanzahl bei ungeradener Teilnehmeranzahl aus und der andere bei gerader TAZ.
Paarungen für die höchste Startnummer (n) bei zwei Formeln (gerade Runde/ungerade Runde):
Ungerade Runde
Gerade Runde
Code: | gegner gegen (n+ i)/2 |
n = höchste Startnummer
i = Nummer der Runde
Vielleicht hat von euch einer eine Idee?
Das Programm soll egal wie viel Teilnehmer es sind nach den Berger Tabellen auslosen. _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
Muttonhead

Anmeldungsdatum: 26.08.2008 Beiträge: 565 Wohnort: Jüterbog
|
|
Nach oben |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 08.03.2012, 00:14 Titel: |
|
|
[info]In Codeboxen (und im Portal zusätzlich in pre-Tags) bleibt die Formatierung erhalten.[/info] |
|
Nach oben |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 08.03.2012, 00:18 Titel: |
|
|
Danke für die Antwort!
Vielleicht ist Rutschsystem eine Hilfe bzw. Anfang? Beim Rutschsystem rutscht jeder um einen Stuhl weiter. Mir liegt die Lösung für Rundensystem auf der Zunge. Nur ich komm noch nicht drauf. Habe ein Profiprogramm dass Rundensystem, Rutschsystem, Schweizer System, Keizer System, Amsterdamer System und Scheveninger System auslost.
Ich habe zwar schon mal ein solche Programm mit 15 Teilnehmer für Rundensystem und Rutschsystem geschrieben. Aber halt nur in Qbasic und ohne Algorithmus!
Zitat: | Edit: Ja es ist jeder gegen jeden! |
_________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
Muttonhead

Anmeldungsdatum: 26.08.2008 Beiträge: 565 Wohnort: Jüterbog
|
Verfasst am: 08.03.2012, 22:12 Titel: |
|
|
http://www.schach-bremen.de/werkzeuge/paarungen.php
Hab ein wenig mit den Ansetzungen die diese Seite ausspuckt herumgespielt und sie in ein normales Raster
eingetragen: Jeder gegen Jeden mit Hin und Rückrunde wie sie warscheinlich im Fußball im Ligamodus Verwendung hat.
Ich weiß, du benötigst nur die Hälfte, aber so war das Muster besser zu erkennen:
Code: | x=keine Paarung
h=Paarung Hinrunde
r=Paarung Rückrunde
12345
1 xrrrr
2 hxrrr
3 hhxrr
4 hhhxr
5 hhhhx |
Jede ungrade Spielerzahl und die darauf folgende gerade Spielerzahl haben die gleiche Rundenzahl
Bei der geraden Spielerzahl wird lediglich noch eine Partie mehr pro Runde ausgetragen
Die Rundenzahl entspricht der ungeraden Spielerzahl.
Im Raster stehen die Rundennummern für die jeweiligen Paarungen. Bei ungerader Spielerzahl sind
diese sowohl im "h"- als auch im "r"-Bereich zu finden. Für die Auswertung darf natürlich nur einer
dieser Bereiche überprüft werden.
Die Rundennummern der zusätzlichen Partien, wenn eine gerade Spielerzahl vorhanden ist, sind auf der Diagonale "x"
zu finden!!!
Code: | ***************************************
3/4 Spieler -> 3 Runden
123
1 123
2 231 <---Raster
3 312
4 132 (Diagonale)
(4 Spieler)
1.R: 2-3 4-1
2.R: 2-1 4-3
3.R: 3-1 4-2
***************************************
5/6 Spieler -> 5 Runden
12345
1 12345
2 23451
3 34512 <-----Raster
4 45123
5 51234
6 13524 (Diagonale)
(6 Spieler)
1.R: 2-5 3-4 6-1
2.R: 1-2 5-3 6-4
3.R: 1-3 4-5 6-2
4.R: 1-4 2-3 6-5
5.R: 3-6 4-2 6-3
*************************************** |
mag sein das diese Herleitung recht unprofessionell ist, aber ich sehe im Raster ein
Muster, welches sich auch auf mehr Spieler und somit größere Arrays übertragen läßt.
Auch wenn das jetzt weniger mit Mathe sondern eher mit Klötzchenbauen zu tun hat.
Wenn es hilft... |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
|
Nach oben |
|
 |
Muttonhead

Anmeldungsdatum: 26.08.2008 Beiträge: 565 Wohnort: Jüterbog
|
Verfasst am: 08.03.2012, 23:40 Titel: |
|
|
nee
Aber dann durften alle meinen Gedankengängen folgen, was nunmal nicht ein gutes Licht auf mich wirft.
Ich kanns ja nun nicht mehr ändern.
Hab das mehr als Knobelaufgabe aufgefaßt.
Ich wills ja nicht anwenden
abgesehen davon... soo falsch lieg ich ja nicht(kurz mal überflogen die o.g. Seite) |
|
Nach oben |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 08.03.2012, 23:53 Titel: |
|
|
Code: | DECLARE SUB TEILNEHMER
DECLARE SUB CPRINT (FFTEXT$, FFHEIGHT, FFWIDTH, FFCOLOR1, FFCOLOR2, FFCOLOR3)
DIM SHARED AS INTEGER mausx, mausy, mausk
DIM SHARED AS INTEGER FARBEN, Grafik, Sprache
DIM SHARED AS INTEGER RUNDE, TAZ, RAZ, Gegner, TZ
DIM SHARED AS String Spieler(500)
' RAZ = Rundenanzahl
' TAZ = Teilnehmeranzahl insgesamt
' RUNDE = aktuelle Runde
RUNDE = 2
TAZ = 26
Spieler(1) = "Mueller Michael"
Spieler(2) = "Merkl Angela"
Spieler(3) = "Schmidbauer Sepp"
Spieler(4) = "Kohl Rupert"
Spieler(5) = "Ruhland Rudi"
Spieler(6) = "Berthold Hans"
Spieler(7) = "Mittermaier Michael"
Spieler(8) = "Schmid Kurt"
Spieler(9) = "Wagner Richard"
Spieler(10) = "Bielmeier Ludwig"
Spieler(11) = "Gockel Herrmann"
Spieler(12) = "Del Tura Alexej"
Spieler(13) = "Boesl Jens"
Spieler(14) = "Nissen Friedrich"
Spieler(15) = "Peitsch Stefan"
Spieler(16) = "Stadler Max"
Spieler(17) = "Pohl Patrick"
Spieler(18) = "Schubert Herbert"
Spieler(19) = "Wacker Manuel"
Spieler(20) = "Bauer Steffen"
Spieler(21) = "Schneider Anton"
Spieler(22) = "Becker Boris"
Spieler(23) = "Winterhalder Karl-Otto"
Spieler(24) = "Oda Iris"
Spieler(25) = "Raven Vinzenz"
Spieler(26) = "Jelzin Borys"
TEILNEHMER
' ************************************************************************************
SCREENRES 1024, 768, 32
FOR Z = 1 TO TAZ
CPRINT LTRIM$(STR$(Z)) + " - " + SPIELER$(Z) + " ", 20+ Z, 80, &hFFFFFF, &hFF55FF, &hAA00AA
NEXT
IF RUNDE MOD 2 <> 0 THEN
' ungerade Teilnehmeranzahl
Gegner = (Runde + 1) / 2
FOR ZZ = 1 TO TZ/2
CPRINT LTRIM$(STR$(ZZ)) + " " + SPIELER$(Gegner + ZZ) + " - " + SPIELER$(TAZ - ZZ) + " ", 55 + ZZ, 65, &hFFFFFF, &hFF55FF, &hAA00AA
NEXT
ELSE
' gerade Teilnehmeranzahl
Gegner = (TAZ + Runde) / 2
FOR ZZ = 1 TO TZ/2
CPRINT LTRIM$(STR$(ZZ)) + " " + SPIELER$(TAZ - ZZ) + " - " + SPIELER$(Gegner + ZZ) + " ", 55 + ZZ, 65, &hFFFFFF, &hFF55FF, &hAA00AA
' IF Gegner - ZZ = 0 THEN
NEXT
ENDIF
SLEEP
END
SUB CPRINT (FFTEXT$, FFHEIGHT, FFWIDTH, FFCOLOR1, FFCOLOR2, FFCOLOR3)
C = LEN(FFTEXT$)
REM PALETTE 4, 4
Color 4
LOCATE FFHEIGHT, FFWIDTH: PRINT FFTEXT$;
G = FFHEIGHT * 8 - 8
FOR F = FFWIDTH * 8 - 8 TO FFWIDTH * 8 + C * 8 - 8
FOR X = 0 TO 7
IF X < 2 AND POINT(F, G + X) = 4 THEN PSET (F, G + X), FFCOLOR1
IF X > 1 AND X < 5 AND POINT(F, G + X) = 4 THEN PSET (F, G + X), FFCOLOR2
IF X > 4 AND POINT(F, G + X) = 4 THEN PSET (F, G + X), FFCOLOR3
NEXT
NEXT
PALETTE
Color 15
End SUB
SUB FELT (X, y, XX, YY, FARBEN#)
LINE (X, y)-(X, YY - 1), &hFFFFFF
LINE (X, y)-(XX - 1, y), &hFFFFFF
LINE (X + 1, YY)-(XX, YY), &H555555
LINE (XX, y + 1)-(XX, YY), &h555555
PSET (X, YY), 7
PSET (XX, y), 7
VIEW (X + 2, y + 2)-(XX - 2, YY - 2), FARBEN, FARBEN
VIEW (0, 0)-(1023, 767)
END SUB
SUB TEILNEHMER
IF TAZ MOD 2 <> 0 THEN
RAZ = TAZ
TZ = TAZ + 1
ELSE
RAZ = (TAZ - 1)
TZ = TAZ
END IF
IF RAZ < 3 THEN RAZ = 0
END SUB |
Bei diesem Code funktioniert die Auslosung der ersten Runde!
Leider eben halt nicht die restlichen.
Vielleicht hat da einer eine Idee.
Ich liege kurz davor und komm nicht drauf!!!
Gruß ALWIM _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 09.03.2012, 14:13 Titel: |
|
|
Hallo
Vielleicht wäre es einfacher, bei einer ungeraden Teilnehmeranzahl zuerst festzulegen, wer in welcher Runde aussetzt. Also z.B. Nr. 1 in der ersten Runde, Nr. 2 in der zweiten usw. Dann muss man die Paarungen immer nur für ein Teilnehmerfeld mit gerader Anzahl berechnen.
Gruß
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 09.03.2012, 15:21 Titel: |
|
|
genau @Skilltronic!
Code: | 'Rutschsystem für Rundenturniere beim Schachspiel
Width 50,120
Dim Shared As String Spieler(26)
Spieler(0) = "Freilos"
Spieler(1) = "Mueller Michael"
Spieler(2) = "Merkl Angela"
Spieler(3) = "Schmidbauer Sepp"
Spieler(4) = "Kohl Rupert"
Spieler(5) = "Ruhland Rudi"
Spieler(6) = "Berthold Hans"
Spieler(7) = "Mittermaier Michael"
Spieler(8) = "Schmid Kurt"
Spieler(9) = "Wagner Richard"
Spieler(10) = "Bielmeier Ludwig"
Spieler(11) = "Gockel Herrmann"
Spieler(12) = "Del Tura Alexej"
Spieler(13) = "Boesl Jens"
Spieler(14) = "Nissen Friedrich"
Spieler(15) = "Peitsch Stefan"
Spieler(16) = "Stadler Max"
Spieler(17) = "Pohl Patrick"
Spieler(18) = "Schubert Herbert"
Spieler(19) = "Wacker Manuel"
Spieler(20) = "Bauer Steffen"
Spieler(21) = "Schneider Anton"
Spieler(22) = "Becker Boris"
Spieler(23) = "Winterhalder Karl-Otto"
Spieler(24) = "Oda Iris"
Spieler(25) = "Raven Vinzenz"
Spieler(26) = "Jelzin Borys"
Dim Shared As Integer s(1 To 50)
Dim As Integer i, n
Sub ausgabe(n As Integer)
Dim As Integer j=n
For i As Integer = 1 To n\2
Print Spieler(s(i));" : ";Spieler(s(j))
'Print s(i);" : ";s(j),
j-=1
Next
End Sub
Sub rutsch(n As Integer)'Rutschsystem
For i As Integer=2 To n-1
Swap s(i),s(n)
Next
End Sub
n=13 'Anzahl Teilnehmer
If n < 3 Or n > 26 Then'nur bei mehr als 2 Teilnehmer
Print n;" Spieler geht nicht!"
Sleep
End
EndIf
For i= 1 To n 'Rutschsystem bei gerader Teilnehmerzahl
s(i)=i
Next
If n And 1 Then'Rutschsystem bei ungerader Teilnehmerzahl
n+=1 'auf gerade Teilnehmerzahl ergänzen
s(n)=0 'ein Teilnehmer bekommt ein Freilos
EndIf
ausgabe(n) 'erste Runde
Do
Print
rutsch(n)
ausgabe(n)
Loop Until s(n)=2 ' wenn die 2 auf dem letzten Platz
' auftaucht sind alle Spiele durch
GetKey |
_________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
Muttonhead

Anmeldungsdatum: 26.08.2008 Beiträge: 565 Wohnort: Jüterbog
|
Verfasst am: 09.03.2012, 16:25 Titel: |
|
|
Sind die sog. Berger Tabellen denn nun ein Ergebnis des Rutschsystems?
Da sich ALWIN ja ausdrücklich auf diese bezieht
Mutton |
|
Nach oben |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 09.03.2012, 16:58 Titel: |
|
|
@ Volta: Dein Code beinhaltet Fehler!
Bestimmte Namen sind bzw. stehen bei der Ausgabe immer links.
Demnach hätte dieser Spieler immer weiß!!! Das darf beim Schach, Billard, Dart bzw. anderen Sportarten nicht sein.
Die Bergertabellen sind meines Wissens nicht das Rutschsystem!
Rutschsystem und Rundensystem sind zwei paar Schuhe!
Manche Leute meinen, dass das Rundensystem nichts anderes ist, als das Rutschsystem in Tabellenform gebracht.
Das Programm soll halt genau nach diesen Bergertabellen auslosen. _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 09.03.2012, 17:27 Titel: |
|
|
schade,
ist so aber bei Wikipedia beschrieben.
http://de.wikipedia.org/wiki/Rutschsystem
auch dort ist immer Position 1 oben (weiß)?
Edit: sehe gerade,
1 wechselt jede Runde die Farbe
jeder 2 Platz hat gedrehtes Brett. _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 09.03.2012, 18:30 Titel: |
|
|
Beispiel:
1 = Merkl Angela
2 = Jelzin Borys
3 = Gates Bill
4 = Freilos
Bei Rundensystem spielt:
Runde 1: 1-4, 2-3
Runde 2: 4-3, 1-2
Runde 3: 2-4, 3-1
Bei Rutschsystem spielt:
Runde 1: 1-2
Runde 2: 2-3
Runde 3: 3-1
Bei Rutschsystem (2. Variante) spielt:
Runde 1: 1-4, 2-3
Runde 2: 4-3, 1-2
Runde 3: 2-4, 3-1
Linke Zahl hat Weiß und rechte Zahl hat schwarz!
Ich brauche eben eine Formel bzw. Algorithmus damit genau so ausgelost wird!
Gruß
ALWIM _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4702 Wohnort: ~/
|
Verfasst am: 09.03.2012, 20:09 Titel: |
|
|
ALWIM hat Folgendes geschrieben: | Bestimmte Namen sind bzw. stehen bei der Ausgabe immer links.
Demnach hätte dieser Spieler immer weiß!!! Das darf beim Schach, Billard, Dart bzw. anderen Sportarten nicht sein. |
Das lässt sich doch leicht beheben. Tausche einfach in jeder geradzahligen Runde die Seiten beider Spieler. In meinen Test hat dann jeder Spieler etwa gleich oft Position 1 bzw. 2 (z. B. bei 26 Spielern hat jeder 12x Position 1 und 13x Position 2 oder umgekehrt).
Code: | Do
Print
rutsch(n)
ausgabe(n)
geradzahligeRunde = not geradzahligeRunde
Loop Until s(n)=2 |
Wenn geradzahligeRunde gesetzt ist, müssen die Spieler in umgekehrter Reihenfolge ausgegeben werden. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Muttonhead

Anmeldungsdatum: 26.08.2008 Beiträge: 565 Wohnort: Jüterbog
|
Verfasst am: 12.03.2012, 22:28 Titel: |
|
|
*push* ist das Problem nun eingentlich mit einem echten Algo gelöst?
Da ich mich ja mit meiner "Analyse" komplett zum Obst gemacht habe...
kann ich auch nur eine Art Workaround um den tatsächlichen Algo dienen.
Dieser scheint aber tatsächlich Berger Tabellen auszuspucken. Der Code ist mir aber jetzt eher peinlich.  |
|
Nach oben |
|
 |
RWK
Anmeldungsdatum: 04.07.2011 Beiträge: 44
|
Verfasst am: 13.03.2012, 14:13 Titel: |
|
|
Sag doch nochmal genau die Regel an :
Muss es exakt so sein wie oben angegeben ?
Also sprich die entsprechende Nummer genau in der Reihenfolge...1. Runde: 1 vorne 2. Runde: 1 hinten
oder reicht als Vorgabe:
jeder gegen jeden - bei ungerader Teilnehmerzahl setzt jeder einmal aus
jeder Spieler hat gleich oft schwarz und weiß
der Rest ist egal
Grüße |
|
Nach oben |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 13.03.2012, 16:14 Titel: |
|
|
RWK hat Folgendes geschrieben: | Sag doch nochmal genau die Regel an :
Muss es exakt so sein wie oben angegeben ?
Also sprich die entsprechende Nummer genau in der Reihenfolge...1. Runde: 1 vorne 2. Runde: 1 hinten
oder reicht als Vorgabe:
jeder gegen jeden - bei ungerader Teilnehmerzahl setzt jeder einmal aus
jeder Spieler hat gleich oft schwarz und weiß
der Rest ist egal
Grüße |
Es soll schon so sein wie in meinem Beitrag vom 09.03.2012, 17:30.
Da es sonst ja kein (offizielles) Rundensystem mehr ist.
Bei ungerader Teilnehmerzahl setzt dann immer einer aus. Zum Schluss haben alle einmal eine Runde ausgesetzt bzw. Spielfrei gehabt.
Ich will ein Programm schreiben, das man dann für offizielle Turniere (Rundensystem/Rutschsystem) verwenden kann.
Ich brauche einen Algorithmus der so auslost, wie von der FIDE (Bergertabellen) vorgegeben.
Ich muss mich nochmal damit befassen, denn ich stehe wirklich kurz davor und komm nicht drauf. _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
|
Nach oben |
|
 |
Muttonhead

Anmeldungsdatum: 26.08.2008 Beiträge: 565 Wohnort: Jüterbog
|
Verfasst am: 14.03.2012, 00:47 Titel: |
|
|
ist die Reihenfolge der Partien innerhalb einer Runde vorgegeben?
*hust*
Code: | dim as integer spieler,spielertab,runden
'enthält alle Paarungen des Turniers und in welcher Runde
'sie stattfinden. Keine Aussage über Spielfarbe
redim as integer paarungen(1 to 1,1 to 1)
'enthält die Farben eines Spielers in den Runden
redim as string Farben(1 to 1,1 to 1)
input "Anzahl Spieler:",spieler
if spieler<3 then end
if spieler/2= int(spieler/2) then spielertab=spieler-1 else spielertab=spieler
runden=spielertab'Rundenzahl
'Hilfsvariablen für die Farbvergabe
'******************************************************************************
'1.Schritt Erstellen der Paarungstabelle **************************************
'******************************************************************************
redim paarungen (1 to spielertab, 1 to spielertab)
'"Befüllen"des Paarungsarrays
'ala Round Robin Schedule
for k as integer=1 to spielertab
for i as integer=1 to spielertab
paarungen(i,k)=1 + ((i+k-2) mod runden)
next i
next k
'Löschen oberen Hälfte
'somit sind alle Paarungen nur einmal in der Tabelle
for k as integer=1 to spielertab-1
for i as integer=k+1 to spielertab
paarungen(i,k)=0
next i
next k
'**************************************
'Anzeige Paarungstabelle***************
print
for k as integer=1 to spielertab
for i as integer=1 to spielertab
locate ,i*3
if paarungen(i,k)>0 then print paarungen(i,k);
next i
print
next k
'******************************************************************************
'2.Schritt Erstellen der Farbtabelle ******************************************
'******************************************************************************
redim farben (1 to spielertab, 1 to spielertab)
dim as string farbea,farbeb
farbeA="w"
farbeB="s"
'"Befüllen"des Farbarrays
for k as integer=1 to spielertab
for i as integer=1 to spielertab-1 step 2
farben(i,k)=farbeA
farben(i+1,k)=farbeB
next i
swap farbeA,farbeB
next k
'Diagonale nach bearbeiten
for i as integer =int(spielertab/2)+2 to spielertab
farben(i,i)="s"
next i
'Löschen oberen Hälfte
for k as integer=1 to spielertab-1
for i as integer=k+1 to spielertab
farben(i,k)=""
next i
next k
'**************************************
'Anzeigen Farbtabelle******************
print
for k as integer=1 to spielertab
for i as integer=1 to spielertab
locate ,i*3 +1
print farben(i,k);
next i
print
next k
'******************************************************************************
'3.Schritt alles verknüpfen. Frage: Ist es eine BERGER-TABELLE ????************
'******************************************************************************
'ein paar Hilfsvariablen
dim as string schwarz,weiss
dim as integer spielerA,spielerB
print
for r as integer=1 to runden 'nach jeder Runde einzeln durchsuchen
print "R" & r & ": ";
for k as integer=1 to spielertab
for i as integer=spielertab to 1 step -1
if paarungen(i,k)=r then 'wenn eine Rundennummer in der Paarungstabelle gefunden
spielerA=k 'die Senkrechte ist spielerA
spielerB=i 'die Waagerechte ist spielerB
if spielertab=spieler then 'bei ungerader Spieleranzahl
if spielerA<>spielerB then
if farben(spielerB,spielerA)="w" then
print spielerA & "-" & spielerB &" ";
else
print spielerB & "-" & spielerA &" ";
end if
end if
else 'bei gerader Spieleranzahl
if farben(spielerB,spielerA)="w" then
if spielerA=spielerB then spielerB=spieler 'wenn die Diagonale getroffen....
print spielerA & "-" & spielerB &" ";
else
if spielerA=spielerB then spielerB=spieler 'wenn die Diagonale getroffen....
print spielerB & "-" & spielerA &" ";
end if
end if
end if
next i
next k
print
next r
sleep |
|
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|