 |
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: 14.03.2012, 01:57 Titel: |
|
|
Zitat: | Zitat von Muttonhead:
ist die Reihenfolge der Partien innerhalb einer Runde vorgegeben? |
Die ist meines Wissens nach vorgegeben?!?? Kann sein, dass ich mich auch irre!
Wenn bei der Ausgabe 1-26, 2-25, 3-24 steht, spielen Spieler 1 bzw. Spieler 26 auf Brett (Tisch) 1 und Spieler 2 bzw. 25 auf Brett (Tisch) 2.
Das wäre aber nicht ganz so wichtig. Hauptsache man spielt in der ersten Runde mit der richtigen Farbe gegen den richtigen Gegner.
Zitat: | Zitat von Muttonhead:
Frage: Ist es eine BERGER-TABELLE ???? |
Ich habe das Ergebniss geprüft!!!
Die Paarungen stimmen. Jeder spielt mit der richtigen Farbe. Jeder hat den richtigen Gegner in der vorher festgelegten Runde. Man kann es als Berger-Tabelle bezeichnen. (100% stimmt das Ergebniss noch nicht; siehe oben, aber man kann es für offizielle Turniere verwenden.)
Bei einer ungeraden Teilnehmerzahl ist ein Spieler bei der Ausgabe nicht vorhanden. Dieser Spieler ist der Spieler der spielfrei ist. Offiziell wird bei einer ungeraden Teilnehmerzahl die Teilnehmerzahl zu einer geraden Teilnehmerzahl durch Spielfrei gemacht. Bei 25 Teilnehmer sind es dann 26. Bei 14 sind es 14. Bei 9 Teilnehmer sind es dann 10 Teilnehmer.
Ich danke euch vielmals für das Ergebniss. Jetzt muss ich mir mal anschauen wie das ganze bei dem Quellcode funktioniert.
Wer sich mit html auskennt, kann ja dann (falls mein Programm mal fertig und funktionieren wird) eine Routine basteln, die die Paarungen (wie 1-26 und 2-25) dann als html Datei abspeichert. _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 14.03.2012, 19:25 Titel: |
|
|
Eine HTML-Ausgabe ist nicht so kompliziert. Das Dokument sieht dann am Ende etwa so aus (ich bevorzuge inzwischen XHTML wegen der konsequenteren Struktur, aber in diesem Fall gibt es bis auf den Kopf überhaupt keinen Unterschied):
Code: | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Tuniertabelle (oder was sonst so als Fenstertitel erscheinen soll)</title>
</head>
<body>
<h1>Paarungstafel Rundenturnier</h1>
<p>Teilnehmer: 26; Runden: 25; Modus: Standard</p>
<table>
<tr>
<td>Runde 1:</td>
<td>1-26</td>
<td>2-25</td>
<td>3-24</td>
<td>4-23</td>
<td>5-22</td>
<td>6-21</td>
<td>7-20</td>
<td>8-19</td>
<td>9-18</td>
<td>10-17</td>
<td>11-16</td>
<td>12-15</td>
<td>13-14</td>
</tr>
<tr>
<td>Runde 2:</td>
<!-- und das ganze nochmal für die zweite und
später für die weiteren Runden -->
</tr>
<!-- ... und so weiter ... -->
</table>
</body>
</html> |
Die ersten Zeilen bis einschließlich <table> sowie die letzten Zeilen ab </table> kann das Programm einfach so in die Datei schreiben, abgesehen von der zu korrigierenden Teilnehmer- und Rundenzahl. Die Blöcke <tr>-</tr> werden innerhalb einer Schleife geschrieben - immer nach einer fertig berechneten Runde - und die Zahlen werden entsprechend durch die berechneten Zahlen ersetzt (oder sinnvollerweise auch gleich durch den zugehörigen Namen). _________________ 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: 16.03.2012, 00:49 Titel: |
|
|
etwas optimierte Variante
hoffentlich ohne Fehler
Code: | dim shared as integer spieler,runden,ppr,startwert
redim shared as integer paarungen(1 to 1, 1 to 2)
declare sub ErstellePaarungen (runde as integer)
input "Anzahl Spieler:",spieler
if spieler<3 then end
if spieler/2 <> int(spieler/2) then spieler +=1' wenn ungerade um eins erhöhen
runden=spieler-1
ppr=spieler/2 'Partien pro Runde
redim paarungen(1 to ppr, 1 to 2)
startwert=1
for r as integer=1 to runden
ErstellePaarungen (r)
print "R" & r & ": ";
for i as integer=1 to ppr
print paarungen(i,1) & "-" & paarungen(i,2) &" ";
next i
print
startwert=paarungen(ppr,2)
next r
sleep
end
sub ErstellePaarungen (runde as integer)
dim as integer rotation
rotation=startwert
for i as integer=1 to ppr
paarungen(i,1)=rotation
rotation +=1
if rotation>runden then rotation=1
next i
for i as integer=ppr to 2 step -1
paarungen(i,2)=rotation
rotation +=1
if rotation>runden then rotation=1
next i
paarungen(1,2)=spieler
if runde/2 = int(runde/2) then swap paarungen(1,1),paarungen(1,2)' bei jeder geraden Runde erstes Paar tauschen
end sub |
Mutton |
|
Nach oben |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 16.03.2012, 01:38 Titel: |
|
|
Zitat: | Zitat von Muttonhead:
etwas optimierte Variante
hoffentlich ohne Fehler |
Fehler habe ich keinen gefunden!
Es wird so ausgelost wie bei meinem Profiprogramm Swiss-Chess.
Damit lost das Programm nach den Berger-Tabellen korrekt aus.
Link: www.swiss-chess.de
Beim Swiss-Chess kann man Paarungstafel für Rundenturnier drucken oder speichern (txt, html). Deswegen habe ich bei meinem ersten Post die Berger Tabelle hingeschrieben.
Meine Idee war die Zahlen der einen Spalte in einer Schleife um +1 zu erhöhen, bis ich die maximale Teilnehmerzahl erreicht habe. Und bei der erreichten Teilnehmerzahl dann wieder bei 1 anfangen zu zählen. Bei der anderen Spalte wollte ich immer um 1 erniedriegen bis ich bei 1 bin, um dann wieder bei der höchsten Teilnehmerzahl anzufangen.
Ich habe festgestellt, dass nach jeder Runde die Zahlen sich immer um 1 verändern. Nur bei Brett 1 wechselt die höchste Spielnummer abwechselnd von der rechten Spalte zur linken.
Jetzt habe ich leider einen fertigen Quellcode, der nicht von mir selber geschrieben wurde. Das ist das was ich nicht haben wollte.
Aber der Quellcode funktioniert!!! Tausend Dank dafür!!!
Wenn ich den Quellcode in meinem halbfertigen Programm verwenden will, muss ich ihn sowieso umschreiben. So wie er jetzt momentan ist, kann ich ihn in meinem Programm noch nicht gebrauchen. Aber dass kriege ich alleine hin. _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
Muttonhead

Anmeldungsdatum: 26.08.2008 Beiträge: 565 Wohnort: Jüterbog
|
Verfasst am: 16.03.2012, 09:05 Titel: |
|
|
Hab aber auch erst ein Weilchen probiert bis ich die Rotationsregeln so halbswegs gesehen hab:
1.) höchste gerade Nummer/ Freilos ist immer Brett 1
2.) weiss wird von links nach rechts gezählt, schwarz von rechts nach links
3.) der schwarze Spieler vom letzten Brett der vorherigen Runde wandert in der aktuellen Runde ans Brett 1 (erstmal als weiss)
von dort mit seiner Nummer als Basis wieder nach Regel 2.) durchzählen.
4.) Brett 1 dreht pro Runde, bedeutet höchste gerade Nummer/Freilos ist mal schwarz und mal weiss
Bei geraden Rundennummer ist höchste gerade Nummer/Freilos weiss
Beispiel mit 6 Spieler:
so steht das Turnier nach Runde 1:
Code: | ->
w: 123 Zählweise
s: 654
<- |
die 4 (schwarz, letztes Brett) "wandert" als weiss zu Brett 1
Die 6 ist immer erstmal schwarz auf Brett 1
von 4 ab erst weiss(nach rechts) und dann schwarz (nach links) durchzählen
Code: | ->
w: 451
s: 632
<- |
wenn eine gerade Rundenummer, und 2 ist gerade, dann Brett 1 drehen:
Fertig ist die Runde 2:
kurz noch bis zur Runde 3:
2 schwarz letztes Brett --> weiss erstes Brett
6 schwarz erstes Brett
Durchzählen
Brett 1 nicht rotieren, da 3 ungerade
ooch, da ist noch Luft für eigenen Code  |
|
Nach oben |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 04.05.2012, 03:06 Titel: |
|
|
@Muttonhead:
Bei deinem Programm werden Zahlen ausgegeben.
Ich habe bereits mehrmals versucht, dass das Programm anstatt Zahlen vollständige Namen ausgibt.
Die Namen sind in solche Stringvariablen definiert.
Code: | Spieler(1) = "Mueller Michael"
Spieler(2) = "Merkl Angela"
Spieler(3) = "Schmidbauer Sepp"
Spieler(4) = "Kohl Rupert" |
Für mich ein Problem in deinem Programm ist folgendes:
Code: | paarungen(1,2)
paarungen(i,1) |
diese Zahlen nach dem Komma bereiten mir Schwierigkeiten wegen:
Code: | Spieler(2) = "Merkl Angela" |
Ich blicke da irgendwie nicht mehr durch. Es ist doch schwieriger umzusetzen als ich vorher dachte. Ich habe 2-3 Ideen gehabt aber selbst diese funktionieren nicht.
Vielleicht kann mir jemand helfen. Da habe ich einen fertigen Algorithmus und komm trotzdem nicht weiter!
Gruß
ALWIM _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
Muttonhead

Anmeldungsdatum: 26.08.2008 Beiträge: 565 Wohnort: Jüterbog
|
Verfasst am: 04.05.2012, 17:59 Titel: |
|
|
Also Paarungen() ist ein 2dimensionales Array
Der erste Index beschreibt das Brett (Brettnummer).
Der zweite Index zeigt die Farbe des Spielers an: Index 1=weiß 2=schwarz
Der Inhalt des Arrays bei 6 Spielern in Runde 1 sieht so aus:
Code: |
123
----
1 |123
2 |654
|
Das bedeutet
Paarungen(1,1) gegen Paarungen(1,2)
Paarungen(2,1) gegen Paarungen(2,2)
Paarungen(3,1) gegen Paarungen(3,2)
usw.
Bei mehr Spielern wird das Array "länger" dimensioniert (Variable ppr!!)
In den einzelnen Zellen findest du dann die Index-Nummer deines Spielers.
In der nächsten Runde sind diese im Array natürlich anders verteilt!
Um den Spielernamen zu sehen mußt du den Inhalt deines Namenarrays mit dem Inhalt des Paarungenarrays verknüpfen
Dies würde zb den Namen des Spielers von Brett 1/weiß ausgeben:
Code: | print Spieler(Paarungen(1,1)) |
oder dieses Beispiel den Namen des Spielers vom Brett 3/schwarz:
Code: | print Spieler(Paarungen(3,2)) |
Mutton |
|
Nach oben |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 04.05.2012, 18:22 Titel: |
|
|
Danke für die Antwort!
Die Idee mit dem Verknüpfen hatte ich auch. Offentsichtlich bin ich auf die einfache Lösung nicht draufgekommen. Warscheinlich bin ich wegen der String und der Integervariable nicht draufgekommen. Das hat mich ein wenig ins Grübeln gebracht.
Bin gerade am Testen. So wie es momentan aussieht, müsste es korrekt funktionieren.
Ich Trottel!
Tausend Dank für den unbezahlbaren Tipp!
Gruß
ALWIM _________________ SHELL SHUTDOWN -s -t 05 |
|
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.
|
|