Zufallsgenerator für Manschaft Turnier

#2070532
Lesenswert?

Hallo alle zusammen,ich benötige einen Zufallsgenerator in C für 
Fussball-Turnier mir 16 Mannschaften, die in 4 Teams in Gruppen verteilt 
sind und gegeneinander spielen sollen, aber nur jeweils einmal. Die 
beide siege pro gruppen kommen weiter. Ich bin auch ein völliger neuling 
in richtung C-Programmierung und will diese Aufgaben erledigen.

Danke voraus.

char *team[] = {"Team1","Team2","Team3",........"Team16"};

in 4 gruppen die 2 sieger weiterkommen
Gast #2070551
Lesenswert?

Echter Zufall ist schwer zu programmieren. Sicherlich gibt es 
"Pseudozufalls-Algorithmen" im Netz zu finden, in Unix-ähnlichen 
Systemen, auch in Linux, kann man üblicherweise einen Wert aus 
"dev/random" lesen. Ansonsten ist es eventuell möglich, äußere 
Ereignisse heranzuziehen - z.B. einen Tastendruck des Benutzers - um 
irgendeine Schleife zu stoppen, in der der "Zufalls"-wert kontinuierlich 
neu berechnet wird. Wenn die Aforderungen gering sind, reicht oft schon 
eine Division durch 7, von der immer der Rest weiterverwendet wird. Dann 
muß man nur noch wissen, in welchem Wertebereich die Zufallszahlen 
liegen, und diese sinnvoll den möglichen Ergebnissen zuordnen.
Gast #2070566
Lesenswert?

Schau dir mal die Funktionen "int rand(void)" und "void srand(unsigned 
int seed)" der Standardbibliothek "stdlib" an.

#include <stdlib.h>

Das dürfte der einfachste Weg sein, wenn ihr diese benutzen dürft. =)
#2070616
Lesenswert?

Danke Sebihepp,

habe schon den Zufallsgenerator geschaft aber wie ich diesen 16 
Mannschaften in 4 Teams in Gruppen verteilen kann, komme ich noch nicht 
klar.
hie
 C-Code fur Zufallsgenerator: perfekt!
#include <time.h>
#include <stdio.h>
#include <stdlib.h>

 char *team[] = {"Team1","Team2","Team3",........"Team16"};


int main(void)
{
  srand((unsigned int)time(NULL));
  printf("Zufall Team:\n%s\n", team[rand()%(sizeof team/sizeof 
team[0])]);
  return 0;
}
*********************
jetzt soll ich alle in 4 Teams in Gruppen verteilen:
GruppeA: Team1,Team4,Team7,Team10
GruppeA:................
...................

Bitte Helfen Sie mir
Gast #2070647
Lesenswert?

Ei ei ei... so wenig Eigeninitiative... hab heute aber nen guten Tag, 
daher:

Quick n' dirty
1
#include <stdio.h>
2

3
int main() {
4
    int teamNr;
5
    int numbers[16];
6
    int teams[4][4];
7
    int i,j;
8
    
9
    for(i=0; i<4; i++) {
10
  for(j=0; j<4; j++) {
11
      teams[i][j] = -1;
12
  }
13
    }
14
    
15
    for(i=0; i<16; i++) {
16
  numbers[i] = 0;
17
    }
18

19
    srand(time(NULL));
20
    
21
    for(i=0; i<4; i++) {
22
  for(j=0; j<4; j++) {
23
      while(teams[i][j] == -1) {
24
    teamNr = rand()%16;
25
    if(numbers[teamNr] == 0) {
26
        numbers[teamNr] = 1;
27
        teams[i][j] = teamNr+1;
28
    }
29
      }
30
  }
31
    }
32

33
    for(i=0; i<4; i++) {
34
  printf("Gruppe %d\nTeams: ",i+1);
35
  for(j=0; j<4; j++) {
36
      printf("%d ",teams[i][j]);
37
  }
38
  printf("\n");
39
    }
40
}
Gast #2070702
Lesenswert?

Hallo,

bitte bitte ;)

Ich hab jetzt grad nicht mehr die Zeit (und zugegebenermaßen auch nicht 
die Lust) da noch was zu programmieren.

Die Ausgabe als String ist oben bereits umgesetzt, alles was du anpassen 
musst sind die entsprechenden printf-Befehle.
#2070707
Lesenswert?

Hi Ich habe folgendes umgeschrieben aber kommt kein string raus, würdest 
du mir mal n Blick drauf werfen? DAnke

#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *numbers[] = {"Team1","Team2","Team3",........"Team16"};


int main()
{
    int teamNr;
    int teams[4][4];
    int i,j;

    for(i=0; i<4; i++)
  {
    for(j=0; j<4; j++)
    {
      teams[i][j] = -1;
    }
    }

      for(i = 0; i < sizeof(numbers)/sizeof(int); i++)
  {
        numbers[i] = (char*)0;
    }

    srand(time(NULL));

    for(i=0; i<4; i++)
  {
    for(j=0; j<4; j++)
    {
      while(teams[i][j] == -1)
      {
        teamNr = rand()%16;
        if(numbers[teamNr] == (char*)0)
        {
          numbers[teamNr] =(char*) 1;
          teams[i][j] = teamNr+1;
        }

      }
    }
    }

    for(i=0; i<4; i++)
    {
      printf("Gruppe %d\nTeams: ",i+1);
      for(j=0; j<4; j++)
      {
        printf("%d ",teams[i][j]);
      }
         printf("\n");
    }
  //system("pause");
  return 0;
}
Gast #2070862
Lesenswert?

Mueller Best's schrieb:
> char *numbers[] = {"Team1","Team2","Team3",........"Team16"};

Ok, hier hast du also deine Team-Namensliste....

Mueller Best's schrieb:
> for(i = 0; i < sizeof(numbers)/sizeof(int); i++)
>   {
>         numbers[i] = (char*)0;
>     }

... und hier schmeißt du alle Namen weg.

Mueller Best's schrieb:
> numbers[teamNr] =(char*) 1;

Was denkst du denn, welcher String an der Speicherstelle mit der Adresse 
1 steht?

Ohne auch nur ein kleines Bischen Grundverständnis dafür zu haben, was 
das Programm tut, wirst du keine Chance haben, irgendwas so zu 
verändern, daß es nachher noch tut.
#2070972
Lesenswert?

Hallo  Rolf Magnus, danke fuer deien antwort.
char numbers[16][20] = {"Team1","Team2","Team3",........"Team16"};

aber sowie ich sagte bin ich C Anfänger und kommemit string array noch 
nicht ganzt klar. ich denke String an der Speicherstelle mit der Adresse
1  ist "Team1"  char numbers[0] = "Team1"; aber wie glreiffe ich hinzu?

for(i =0; i < 5;i++)
{
    numbers[i]= numbers[0];??????
    printf("\n%s\n", numbers[i]);
}


kann es so sein??

Danke Dir
(Firma: keine) #2071053
Lesenswert?

Man man man man man, da wird dir schon alles vorgekaut, und dann muss 
man dir das letzte Bröckchen auch noch pürieren!
1
for(i=0; i<4; i++) {
2
    printf("Gruppe %d\n",i+1);
3
    for(j=0; j<4; j++) {
4
        printf("Team %d\n",teams[i][j]);
5
    }
6
    printf("\n");
7
}

Wie kommt man bitte auf die Idee sowas "komplexes" entwickeln zu wollen 
wenn du absoluten Basics nicht vorhanden sind?
#2071489
Lesenswert?

Hallo alle zusammen, Ich schaffe es nicht  diese strings über einen 
Zufallsgenerator in 4 Gruppen anzuordnen. Kann mir bitte jemand helfen? 
Ich wäre Ihnen sehr dankbar. ich bin eigentlich sehr schwach in C.



#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char 
*numbers[]={"Team1","Team2","Team3","Team4","Team5","Team5"........"Team 
16"};

int main()
{
    //int teamNr;
    //int numbers[16];
    char *teams[4],**temp;
    int i,j;

    for(i=0; i<4; i++)
  {
      temp = teams[i] ;
    }

    for(i=0; i<16; i++)
  {
        numbers[i] = numbers[0];
    }
    srand(time(NULL));

    for(i=0; i<4; i++)
  {
    for(j=0; j<4; j++)
    {
      while(teams[i][j] == -1)
      {
        if(numbers[rand()%(sizeof numbers/sizeof numbers[i])] == 
numbers[0])
        {
          numbers[rand()%(sizeof numbers/sizeof numbers[i])] = 
numbers[1];
          teams[i] = (rand()%(sizeof numbers/sizeof numbers[i]))+1;
        }
      }
    }
    }

    for(i=0; i<4; i++)
    {
      printf("Gruppe %d\nTeams:",i+1);
      for(j=0; j<4; j++)
      {
        printf("%s ",teams[i]);
      }
         printf("\n");
    }
  //system("pause");
  return 0;
}
Gast #2071974
Lesenswert?

Ich würde einfach das Array mit den 16 Einträgen mischen und dann sind 
die Teams 0-3 in Gruppe 1, 4-7 in Gruppe 2, 8-11 in Gruppe 3 und 12-15 
in Gruppe 4.
Ein Array von Strings würde ich nicht unbedingt numbers[] nennen.
Also mal schnell was hingetippt, ungetestet.

#include ....
char *teamnamen[] = 
{"Team1","Team2","Team3","Team4","Team5","Team5"........"Team16"};

main()
{
  int jog, gruppe;
  srand(time(NULL));

/* mischen */
  for(jog=0; jog<16; jog++)
  {
    int r=rand()%16;
    char *tmp=teamnamen[jog];
    teamnamen[jog]=teamnamen[r];
    teamnamen[r]=tmp;
  }

/* ausgeben */
  for(gruppe=0; gruppe<4; gruppe++)
  {
    printf("Gruppe %d : ", gruppe+1);
    for(jog=0; jog<4; jog++)
    {
      printf("%s ", teamnamen[4*gruppe+jog]);
    }
    printf("\n");
  }
}

Peter

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren