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 Zurück  1, 2
 
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: 14.03.2012, 01:57    Titel: Antworten mit Zitat

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



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

BeitragVerfasst am: 14.03.2012, 19:25    Titel: Antworten mit Zitat

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



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

BeitragVerfasst am: 16.03.2012, 00:49    Titel: Antworten mit Zitat

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



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 16.03.2012, 01:38    Titel: Antworten mit Zitat

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



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

BeitragVerfasst am: 16.03.2012, 09:05    Titel: Antworten mit Zitat

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

Code:
  w:  4
  s:  6

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:

Code:
  w:  651
  s:  432



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
Code:
  w:  234
  s:  615


ooch, da ist noch Luft für eigenen Code lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 04.05.2012, 03:06    Titel: Antworten mit Zitat

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



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

BeitragVerfasst am: 04.05.2012, 17:59    Titel: Antworten mit Zitat

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



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 04.05.2012, 18:22    Titel: Antworten mit Zitat

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! lachen

happy happy happy lächeln lächeln cool lächeln lächeln happy happy happy

Tausend Dank für den unbezahlbaren Tipp!

Gruß
ALWIM
_________________
SHELL SHUTDOWN -s -t 05
Nach oben
Benutzer-Profile anzeigen Private Nachricht 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 Zurück  1, 2
Seite 2 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