Créer une poule de championnat
Résolu
Bonjour,
Voila, je dois créer un championnat de foot avec poule classement etc.. Seulement je bloque dès la création des poules.
Voici mon script :
À else je ne sais pas quoi mettre : pour mettre dans poule[i] un nom d'équipe qui n'a toujours pas été tirée.
Voila, je dois créer un championnat de foot avec poule classement etc.. Seulement je bloque dès la création des poules.
Voici mon script :
#include <iostream> #include <ctime> #include <stdlib.h> using namespace std; int main () { const string pays[12] = {"FRANCE","ESPAGNE","IRLANDE","ROUMANIE","ESPAGNE","ALLEMAGNE","PAYS-BAS","ALLEMAGNE","ITALIE","PORTUGAL","SUISSE","GEORGIE"}; string liste[12] = {"FRANCE","ESPAGNE","IRLANDE","ROUMANIE","ESPAGNE","ALLEMAGNE","PAYS-BAS","ALLEMAGNE","ITALIE","PORTUGAL","SUISSE","GEORGIE"}; int i,alea; string poule[4]; srand(time(NULL)); for (i=0;i<=3;i++) { alea=rand()%12; if (liste[alea]!="") { poule[i]=liste[alea]; liste[alea]=""; } else //ET LA JE SAIS PAS QUOI METTRE ; cout<<poule[i]<<endl; } }
À else je ne sais pas quoi mettre : pour mettre dans poule[i] un nom d'équipe qui n'a toujours pas été tirée.
A voir également:
- Créer un calendrier de championnat
- Créer un compte google - Guide
- Comment créer un groupe whatsapp - Guide
- Créer un lien pour partager des photos - Guide
- Créer un compte gmail - Guide
- Créer un compte instagram sur google - Guide
1 réponse
En fait tu dois boucler jusqu'à trouver une chaîne non vide si j'ai compris ce que tu voulais faire. Donc à mon avis c'est plus un truc du genre
Bon sinon tu peux faire des trucs un peu plus jolis. Ci-dessous je te propose une solution qui tire parti des containers de la STL. On va définir une fonction qui extrait d'un ensemble (std::set) de n éléments le ième élément (où i est une valeur aléatoire) et le supprime.
https://forums.commentcamarche.net/forum/affich-37604421-introduction-a-la-stl-en-c-standard-template-library
http://www.cplusplus.com/reference/set/
http://www.cplusplus.com/reference/iterator/advance/
Explication du code :
Dans cet exemple j'ai écrit la fonction correspondante (pop_element) qui raisonne sur un ensemble générique (noté ici T) d'éléments (d'où le template). Dans ton cas tu l'appliques à un ensemble de std::string (std::set<std::string>), mais tu pourrais réutiliser cette fonction sur un std::set de ce que tu veux.
L'iterator "it" est positionné sur le premier élément de l'ensemble ("France" dans cet exemple). Ensuite je tire avec rand une valeur aléatoire entière, mais comme je veux une valeur comprise entre 0 et n (ou n est le nombre d'équipe), je calcule rand modulo n. Ainsi rand() % elements.size() calcule une position aléatoire comprise entre 0 et n - 1.
Ensuite je positionne mon iterator sur ce ième élément (tu peux voir pour faire très simple un iterator comme une sorte de pointeur, sauf que ça va beaucoup plus loin). Ainsi *it correspond bien à ma ième chaîne, et je stocke cet élement dans la variable "element". Ensuite je supprime la valeur située à cette position de mon ensemble, puis je retourne la valeur récupérée. On a donc bien extrait d'un ensemble de n éléments le ième élément avec i compris entre 0 et n.
Passons au main. J'initialise la graine (srand) pour mon tirage aléatoire, puis je construis un ensemble de chaînes (tu peux en insérer autant que tu veux, ici j'en ai mis juste 4). Puis j'extrais n équipes de cet ensemble (donc toutes).
À l'exécution on obtient :
Bonne chance
do { alea = rand() % 12; } while(list[alea] == ""); poule [i] = liste[alea]; list[alea] = "";
Bon sinon tu peux faire des trucs un peu plus jolis. Ci-dessous je te propose une solution qui tire parti des containers de la STL. On va définir une fonction qui extrait d'un ensemble (std::set) de n éléments le ième élément (où i est une valeur aléatoire) et le supprime.
https://forums.commentcamarche.net/forum/affich-37604421-introduction-a-la-stl-en-c-standard-template-library
http://www.cplusplus.com/reference/set/
http://www.cplusplus.com/reference/iterator/advance/
#include <set> #include <string> #include <cstdlib> #include <ctime> #include <iostream> template <typename T> T pop_element(std::set<T> & elements) { typename std::set<T>::iterator it(elements.begin()); std::advance(it, rand() % elements.size()); T element = *it; elements.erase(it); return element; } int main() { srand(time(NULL)); std::set<std::string> equipes; equipes.insert("France"); equipes.insert("Allemagne"); equipes.insert("Espagne"); equipes.insert("Angleterre"); std::size_t n = equipes.size(); for(std::size_t i = 0; i < n; ++i) { std::cout << pop_element(equipes) << std::endl; } return 0; }
Explication du code :
Dans cet exemple j'ai écrit la fonction correspondante (pop_element) qui raisonne sur un ensemble générique (noté ici T) d'éléments (d'où le template). Dans ton cas tu l'appliques à un ensemble de std::string (std::set<std::string>), mais tu pourrais réutiliser cette fonction sur un std::set de ce que tu veux.
L'iterator "it" est positionné sur le premier élément de l'ensemble ("France" dans cet exemple). Ensuite je tire avec rand une valeur aléatoire entière, mais comme je veux une valeur comprise entre 0 et n (ou n est le nombre d'équipe), je calcule rand modulo n. Ainsi rand() % elements.size() calcule une position aléatoire comprise entre 0 et n - 1.
Ensuite je positionne mon iterator sur ce ième élément (tu peux voir pour faire très simple un iterator comme une sorte de pointeur, sauf que ça va beaucoup plus loin). Ainsi *it correspond bien à ma ième chaîne, et je stocke cet élement dans la variable "element". Ensuite je supprime la valeur située à cette position de mon ensemble, puis je retourne la valeur récupérée. On a donc bien extrait d'un ensemble de n éléments le ième élément avec i compris entre 0 et n.
Passons au main. J'initialise la graine (srand) pour mon tirage aléatoire, puis je construis un ensemble de chaînes (tu peux en insérer autant que tu veux, ici j'en ai mis juste 4). Puis j'extrais n équipes de cet ensemble (donc toutes).
À l'exécution on obtient :
(mando@silk) (~) $ ./a.out Espagne Allemagne France Angleterre (mando@silk) (~) $ ./a.out Espagne Angleterre Allemagne France (mando@silk) (~) $ ./a.out Angleterre France Espagne Allemagne
Bonne chance