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
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.
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. =)
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
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 | }
|
Knarzer Vielen Dank fuer deine hilfe, dein code hat mir wahnsinnig geholfen, aber eine frage. wie könnte ich die werte in string umwandeln, so dass statt werten string entsprechend Team-Name ausgegeben werden?
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.
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; }
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.
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
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?
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; }
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
Hallo Peter fuer deine Hilfe bin ich dir sehr sehr dankbar . Alle, die mir bei den Aufgaben geholfen haben, ohne eure Hilfe hätte ich das nie geschafft
Ein kleiner Zusatz für 'Zufallsinteressierte': http://www.kielnet.net/home/julien.thomas/tech/XR232WEB.htm
Mueller Best's schrieb: > Alle, die mir bei den Aufgaben geholfen haben, ohne eure Hilfe hätte > ich das nie geschafft Was geschafft? Dir wurde doch alles, und ich meine wirklich alles vorgekaut.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.