Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Algorithmus Rundensystem
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 07.03.2012, 19:47    Titel: Algorithmus Rundensystem Antworten mit Zitat

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.

Code:
RAZ= TAZ-1


Code:
RAZ = TAZ


Paarungen für die höchste Startnummer (n) bei zwei Formeln (gerade Runde/ungerade Runde):

Ungerade Runde
Code:
(i + 1)/2 gegen n


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
Benutzer-Profile anzeigen Private Nachricht senden
Muttonhead



Anmeldungsdatum: 26.08.2008
Beiträge: 565
Wohnort: Jüterbog

BeitragVerfasst am: 08.03.2012, 00:08    Titel: Antworten mit Zitat

eine Lösung hab ich auch nicht parat, nur nen paar Gedanken dazu
Leider geht hier die Formatierung des Textes den ich posten wollte verloren, darum das:
http://www.freebasic-portal.de/porticula/fuer-alwim-1500.html
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 08.03.2012, 00:14    Titel: Antworten mit Zitat

[info]In Codeboxen (und im Portal zusätzlich in pre-Tags) bleibt die Formatierung erhalten.[/info]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 08.03.2012, 00:18    Titel: Antworten mit Zitat

Muttonhead hat Folgendes geschrieben:
eine Lösung hab ich auch nicht parat, nur nen paar Gedanken dazu
Leider geht hier die Formatierung des Textes den ich posten wollte verloren, darum das:
http://www.freebasic-portal.de/porticula/fuer-alwim-1500.html


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
Benutzer-Profile anzeigen Private Nachricht senden
Muttonhead



Anmeldungsdatum: 26.08.2008
Beiträge: 565
Wohnort: Jüterbog

BeitragVerfasst am: 08.03.2012, 22:12    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 08.03.2012, 23:14    Titel: Antworten mit Zitat

schon gelesen? http://en.wikipedia.org/wiki/Round-robin_tournament#Scheduling_algorithm
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Muttonhead



Anmeldungsdatum: 26.08.2008
Beiträge: 565
Wohnort: Jüterbog

BeitragVerfasst am: 08.03.2012, 23:40    Titel: Antworten mit Zitat

Zitat:
schon gelesen? http://en.wikipedia.org/wiki/Round-robin_tournament#Scheduling_algorithm


nee grinsen
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 grinsen

abgesehen davon... soo falsch lieg ich ja nicht(kurz mal überflogen die o.g. Seite)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 08.03.2012, 23:53    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 09.03.2012, 14:13    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 09.03.2012, 15:21    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Muttonhead



Anmeldungsdatum: 26.08.2008
Beiträge: 565
Wohnort: Jüterbog

BeitragVerfasst am: 09.03.2012, 16:25    Titel: Antworten mit Zitat

Sind die sog. Berger Tabellen denn nun ein Ergebnis des Rutschsystems?
Da sich ALWIN ja ausdrücklich auf diese bezieht

Mutton
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 09.03.2012, 16:58    Titel: Antworten mit Zitat

@ 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
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 09.03.2012, 17:27    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 09.03.2012, 18:30    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4702
Wohnort: ~/

BeitragVerfasst am: 09.03.2012, 20:09    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Muttonhead



Anmeldungsdatum: 26.08.2008
Beiträge: 565
Wohnort: Jüterbog

BeitragVerfasst am: 12.03.2012, 22:28    Titel: Antworten mit Zitat

*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. grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
RWK



Anmeldungsdatum: 04.07.2011
Beiträge: 44

BeitragVerfasst am: 13.03.2012, 14:13    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 13.03.2012, 16:14    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 13.03.2012, 17:33    Titel: Antworten mit Zitat

Hier ist eine brauchbare Beschreibung:
http://www.schachklub-bad-krozingen.de/media/dokumente/pdf/Turniersysteme.pdf
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Muttonhead



Anmeldungsdatum: 26.08.2008
Beiträge: 565
Wohnort: Jüterbog

BeitragVerfasst am: 14.03.2012, 00:47    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
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.

 Impressum :: Datenschutz