1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Deutsch
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Spielplan (harte Nuss)

    • Frage
  • pesche
  • 12. Dezember 2005 um 17:01
  • Unerledigt
  • pesche
    3
    pesche
    Mitglied
    Punkte
    45
    Beiträge
    8
    • 12. Dezember 2005 um 17:01
    • #1

    Also, ich möchte einen Spielplan für ein Tischfussballturnier erstellen, so dass jeder gegen jeden mit jedem einmal spielt:

    - es gibt 12 Spieler

    - es werden immer 2er Teams gebildet (teams sind nicht fix, d.h. spieler1 ist mit spieler2 ein team später jedoch auch mit spieler3 usw.)

    - jedes 2er Team muss gegen jedes 2er Team spielen

    (
    Es sollte 66 Teams und insgesamt etwa 2145 Spiele geben.

    A(nzahl)=12
    (A-1)*(A/2)=66 Teams

    T(eams)=66
    (T-1)*(T/2)=2145 Spiele
    )

    Nun bräuchte ich den Code um den Spielplan zu erstellen. Ich stell mir das so vor:
    Ich bekomme ein Formular in dem ich die 12 Spieler eingebe. Dann sollten alle möglichen Paarungen erscheinen (inkl. der Namen).

    Kriegt das jemand hin?
    Habe zu wenig Programmiererfahrung um das zu lösen. Echt ne harte Nuss...

    Bin auch schon froh um Lösungsansätze...

    vielen Dank

  • ComSubVie
    5
    ComSubVie
    Mitglied
    Punkte
    230
    Beiträge
    42
    • 12. Dezember 2005 um 19:09
    • #2

    Bau dir zuerst mal eine Liste mit den Teams auf (das sind 2 verschachtelte Schleifen, also trivial).
    Bau dir dann einfach aus der Teamliste den Spielplan auf - das sind auch wieder nur 2 verschachtelte Schleifen, wobei du halt darauf aufpassen musst, das ein spieler zur gleichen Zeit nur in einem Team spielen darf. Nicht trivial, aber leicht.

    Was ist daran jetzt so schwierig?

  • pesche
    3
    pesche
    Mitglied
    Punkte
    45
    Beiträge
    8
    • 13. Dezember 2005 um 00:58
    • #3

    ???

    was daran so schwierig ist? hab keine ahnung von c++. kann ein wenig php aber das ist alles.

    kannst du mir den code aufschreiben wenns ja so einfach ist?
    und wenns geht als .exe an e-mail schicken (hab kein compiler)?

    vielen dank

  • ComSubVie
    5
    ComSubVie
    Mitglied
    Punkte
    230
    Beiträge
    42
    • 13. Dezember 2005 um 07:25
    • #4

    dann machs doch in PHP (mal davon abgesehen das da die Unterschiede nicht sonderlich groß sind)

    siehe http://www.informatik-forum.at/showpost.php?p=167379&postcount=4

  • wolfmann
    11
    wolfmann
    Mitglied
    Reaktionen
    2
    Punkte
    1.252
    Beiträge
    238
    • 13. Dezember 2005 um 14:09
    • #5
    Zitat von pesche

    ???

    was daran so schwierig ist? hab keine ahnung von c++. kann ein wenig php aber das ist alles.

    kannst du mir den code aufschreiben wenns ja so einfach ist?
    und wenns geht als .exe an e-mail schicken (hab kein compiler)?

    vielen dank

    Alles anzeigen

    nur weil nicht schwierig ist - heissts nicht dass es nicht arbeit macht.
    Oder ladest du dir auch leute zum rasenmaehen ein ?:devil: du kannst dir uebrigens nen C++ Compiler direkt von der MS runterladen
    oder du verwendest einen der opensource compiler - die asurede das du keinen compiler hast zieht in nem informatiker forum irgendwie nicht :grinning_squinting_face:

    -------------------
    “If you hear hoof beats, you should look for horses, not zebras.”
    --
    "You, Sir, are an Idiot!" - George Hamilton

  • Wolfibolfi
    37
    Wolfibolfi
    Mitglied
    Reaktionen
    186
    Punkte
    14.936
    Beiträge
    2.942
    • 13. Dezember 2005 um 14:38
    • #6
    Zitat von wolfmann

    Oder ladest du dir auch leute zum rasenmaehen ein ?:devil:

    Haha, der Tag ist gerettet.

    In einen FBO rendern ist wie eine Schachtel Pralinen - man weiß nie, was man kriegt.

  • pesche
    3
    pesche
    Mitglied
    Punkte
    45
    Beiträge
    8
    • 13. Dezember 2005 um 15:26
    • #7

    zeit hab ich ja... bin arbeitslos

    nur....

    ICH KANNS NICHT...

    aber egal...

    ich dachte...

    ...na egal...

    dann eben nicht...

  • pesche
    3
    pesche
    Mitglied
    Punkte
    45
    Beiträge
    8
    • 13. Dezember 2005 um 15:28
    • #8

    aber ich hab n angebot....

    du schreibst mir den code... und ich komm bei dir rasenmähen...

  • wolfmann
    11
    wolfmann
    Mitglied
    Reaktionen
    2
    Punkte
    1.252
    Beiträge
    238
    • 13. Dezember 2005 um 15:47
    • #9
    Zitat von pesche

    aber ich hab n angebot....

    du schreibst mir den code... und ich komm bei dir rasenmähen...


    danke fuers angebot - ich wohn aber in den USA (und meinen Rasen macht ein Mexikaner)

    -------------------
    “If you hear hoof beats, you should look for horses, not zebras.”
    --
    "You, Sir, are an Idiot!" - George Hamilton

  • pesche
    3
    pesche
    Mitglied
    Punkte
    45
    Beiträge
    8
    • 13. Dezember 2005 um 19:05
    • #10

    habs mittlerweile selbst etwas versucht (code ist aber sehr hässlich)

    hab zuerst alle spieler in ein array gelesen, dann alle möglichen teams gebildet und die dann in eine SQL datenbank (id, sp1, sp2) geschrieben.

    bis dahin alles bestens...

    aber beim bilden der teams gibts ein problem:

    PHP
    //buildteams.php
     
    $sql = "SELECT * from teams";
    $result = mysql_query ($sql); 
    while($row=mysql_fetch_array($result)) 
    { 
     
    $sp1=$row['sp1'];
    $sp2=$row['sp2'];
     
    $sql2 = "SELECT * from teams";
    $res=mysql_query($sql2);
    while($rows=mysql_fetch_array($res)) 
    {
    $spone=$rows['sp1'];
    $sptwo=$rows['sp2'];
     
    if($sp1==$spone || $sp1==$sptwo || $sp2==$spone || $sp2==$sptwo)
    {
    echo "";
    }
    else
    {
    $team1="$sp1 - $sp2";
    $team2="$spone - $sptwo";
     
    $insert="insert into matches values ('','".$team1."','".$team2."')";
    mysql_query($insert);
    }
    }
    }
    Alles anzeigen



    Dabei gibt es dublikate:

    id team1 team2
    1 Hari-Max Uli-Ste
    432 Uli-Ste Hari-Max

    WIE KANN ICH DAS VERHINDERN?

    hab bereits n selfjoin gebastelt der die duplikate findet, jedoch kommen dann auch wieder alle einträge:

    SELECT m1.id, m1.team1, m1.team2, m2.id, m2.team1, m2.team2 from matches m1, matches m2 where m1.team1=m2.team2 and m1.team2=m2.team1

    id team1 team2 id team1 team2
    1 Hari-Max Uli-Ste 432 Uli-Ste Hari-Max
    ... .... .... ... ... ...
    432 Uli-Ste Hari-Max 1 Hari-Max Uli-Ste

    WIE SCHAFF ICH ES NUR EINEN DER BEIDEN ZU LÖSCHEN?

  • pesche
    3
    pesche
    Mitglied
    Punkte
    45
    Beiträge
    8
    • 13. Dezember 2005 um 19:08
    • #11

    hier der code um teams zu bilden:

    PHP
    $namen = array("Rufer", "Big", "Jason", "Matti", "Raff", "Manu", "Hackl", "Wenger", "Gerber", "Jan", "Emi", "Splitty");
    $pos=0;
    $next=1;
    $rest=12;
    while($rest>1)
    {
     for($i=1; $i<$rest; $i++)
     {
      $team = array ($namen[$pos], $namen[$next]); 
      $next = $next+1;
      $sql="insert into teams values('', '".$team[0]."', '".$team[1]."')";
      mysql_query($sql);
     }
    $pos=$pos+1;
    $next=$pos+1;
    $rest=$rest-1;
    }
    Alles anzeigen



    und hier die datenbanken:

    CREATE TABLE `matches` (
    `id` int(20) NOT NULL auto_increment,
    `team1` varchar(30) collate latin1_general_ci NOT NULL,
    `team2` varchar(30) collate latin1_general_ci NOT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1 ;

    CREATE TABLE `teams` (
    `id` int(20) NOT NULL auto_increment,
    `sp1` varchar(20) collate latin1_general_ci NOT NULL,
    `sp2` varchar(20) collate latin1_general_ci NOT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1 ;

  • ComSubVie
    5
    ComSubVie
    Mitglied
    Punkte
    230
    Beiträge
    42
    • 13. Dezember 2005 um 20:29
    • #12

    im prinzip nicht so schlecht. die doppelten kriegst du weg, wenn du die schleifen so designst:
    1 -> 2
    1 -> 3
    ..
    1 -> n
    2 -> 3
    2 -> 4
    ..
    2 -> n

    (d.h. der startindex vom zweiten spieler immer größer ist, als jener vom ersten)

    als code z.b.:

    Code
    for ( $i = 0; $i < $anzahl; $i++ ) {
      for ( $j = $i+1; $j < $anzahl; $j++ ) {
        $team = array( $namen[$i], $namen[$j] );
      }
    }
  • pesche
    3
    pesche
    Mitglied
    Punkte
    45
    Beiträge
    8
    • 14. Dezember 2005 um 02:17
    • #13

    ne die doppelten entstehen nicht beim erstellen der teams, sondern beim bilden der teampaarungen (1 code höher)

  • ComSubVie
    5
    ComSubVie
    Mitglied
    Punkte
    230
    Beiträge
    42
    • 14. Dezember 2005 um 08:52
    • #14

    naja, mit deinem SQL ist das ein wenig komplizierter. aber wenn du die teams einfach als array aufbaust $team[0] = array(name1,name2), $team[1]=array(name1,name3), ...
    dann kannst du deine matches auch so wie oben aufbauen (team: 0/1, 0/2, 0/3, .. 0/b, 1/2, 1/3, ... 1/n, ... n-1/n), und dabei überprüfst du noch, ob eh kein spieler in beiden teams drin ist (team[i][0] != team[j][0], team[i][1] != team[j][0], team[i][0] != team[j][1], team[i][1] != team[j][1]), und wenn das der fall ist einfach in die liste einfügen

  • pesche
    3
    pesche
    Mitglied
    Punkte
    45
    Beiträge
    8
    • 14. Dezember 2005 um 15:26
    • #15

    Vielen Dank ComSubVie...

    Das war wirklich nicht so schwer... aber auf die if schleife wär ich nie gekommen...

    hier nochmal den kompletten code für die, dies interessiert:

    PHP
    $namen = array("Rufer", "Big", "Jason", "Matti", "Raff", "Manu", "Hackl", "Wenger", "Gerber", "Jan", "Emi", "Splitty");
    $pos=0;
    $next=1;
    $rest=12;
    $nr=0;
    while($rest>1)
    {
     for($i=1; $i<$rest; $i++)
     {
      $team[$nr] = array ($namen[$pos], $namen[$next]); 
      $next++;
      $nr++;
     }
    $pos++;
    $next=$pos+1;
    $rest=$rest-1;
    }
    for ( $i = 0; $i < $nr; $i++ ) 
    {
     for ( $j = $i+1; $j < $nr; $j++ ) 
     {
      if($team[$i][0] != $team[$j][0] && $team[$i][1] != $team[$j][0] && $team[$i][0] != $team[$j][1] && $team[$i][1] != $team[$j][1])
      {
       $spiel = array ($team[$i], $team[$j]);
       echo $spiel[0][0];
       echo " + ";
       echo $spiel[0][1];
       echo " VS ";
       echo $spiel[1][0];
       echo " + ";
       echo $spiel[1][1];
       echo "<br>";
      } 
     }
    }
    Alles anzeigen



    stimmt so, oder?

  • Swoncen
    22
    Swoncen
    Mitglied
    Reaktionen
    1
    Punkte
    5.331
    Beiträge
    993
    • 14. Dezember 2005 um 15:36
    • #16

    Es gibt keine "if-Schleife".. es gibt aber eine "if-Verzweigung". Sorry sowas muss gesagt werden.

    640K ought to be enough for anybody. :eek2:

  • Maximilian Rupp 27. Dezember 2024 um 12:06

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung

  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  • Deutsch
  • English
Zitat speichern