1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Spielplan (harte Nuss)

    • Frage
  • pesche
  • 12. Dezember 2005 um 17:01
  • Unerledigt
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • pesche
    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
    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
    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
    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
    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 :D

  • Wolfibolfi
    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.

  • pesche
    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
    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
    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)

  • pesche
    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
    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
    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
    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
    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
    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
    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.

  • Maximilian Rupp 27. Dezember 2024 um 12:06

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

  1. Datenschutzerklärung
  2. Impressum