[aide en Programmation C] :Coupe du monde
Bonjour à tous et toutes, Voila j'aimerai si s est possible que vous m aidiez a trouver la solution de mon problème
Mon programme doit dans un premier temps, générer une liste chainée de pays qui participeront a la coupe du monde...
Dans un seconds temps je dois construire un arbre binaire où chaque noeuds acceuillera le nom du pays vainqueur
PS: il ne dois pas générer les feuilles qui contiendront mes pays participant(je les ajouterai par après)
Mon problème est le suivant :
Pour 2 équipes il doit générer 1 noeud
Pour 4 équipes il doit générer 3 noeud
Pour 8 équipes il doit générer 7 noeud et c'est ici que ca ne marche plus il s'arrête après la demande de mon 2ème noeud ...
Mais si je remplace le "x" de ma boucle "for(i=0;i<x;i++)"
par "3" ---> il me fait les 7 noeud comme il faut !!! Pourquoi???
voici mon code :
Voila dans l'espoir que qq'un puisse m'aider, MERCI d'avance :)
Mon programme doit dans un premier temps, générer une liste chainée de pays qui participeront a la coupe du monde...
Dans un seconds temps je dois construire un arbre binaire où chaque noeuds acceuillera le nom du pays vainqueur
PS: il ne dois pas générer les feuilles qui contiendront mes pays participant(je les ajouterai par après)
Mon problème est le suivant :
Pour 2 équipes il doit générer 1 noeud
Pour 4 équipes il doit générer 3 noeud
Pour 8 équipes il doit générer 7 noeud et c'est ici que ca ne marche plus il s'arrête après la demande de mon 2ème noeud ...
Mais si je remplace le "x" de ma boucle "for(i=0;i<x;i++)"
par "3" ---> il me fait les 7 noeud comme il faut !!! Pourquoi???
voici mon code :
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
/*Structure des différents maillons*/
struct pays
{
char nom[30];
struct pays *next;
};
struct noeud
{
char * nom;
char * score;
struct noeud * Gnext;
struct noeud * Dnext;
};
/*Programme principale */
int main()
{
int choix,i;
int x;
struct pays * tete;
struct noeud * arbre;
void afficher(struct pays *tete);
struct pays * creation(struct pays * );
struct pays * modifier(struct pays * tete);
struct noeud * gen_arbre(struct noeud *);
void afficher2(struct noeud * arbre);
int menu1(void);
tete = NULL;
arbre = NULL;
choix = menu1();
x = choix;
choix = pow(2,choix);
for (i=0;i<choix;i++)
{
printf("\n\nEQUIPE %d\n=========",(i+1));
tete = creation(tete);
printf("\n");
}
printf("\n\nLISTE DES PAYS PARTICIPANTS\n===========================\n\n");
afficher(tete);
printf("\n\n");
do
{
choix = menu2();
switch(choix)
{
case 1 : tete = modifier(tete);afficher(tete); break;
}
printf("\n\n");
}while (choix==1) ;
choix = pow(2,choix);
for(i=0;i<x;i++)
{
arbre = gen_arbre(arbre);
}
afficher2(arbre);
return 0;
}
// Menu pour le nombre d'équipe.
int menu1()
{
int choix;
printf("+++++++++++++++++++++++++++++++++\n+ BIENVENU A LA COUPE DU MONDE +\n++++++++++++++++++++++++++++++++\n\n");
printf("Veuillez choisir le nombre d equipe qui participeront :\n\n\t1) 2 equipes\n\t2) 4 equipes\n\t3) 8 equipes\n\t4) 16 equipes\n\n");
printf ("Votre choix : ");
scanf("%d",&choix);
return (choix);
}
// Menu pour la confirmation ou la modification des équipes.
int menu2()
{
int choix;
printf("Souhaitez vous modifier la liste des equipes?\n\n\t1) modifier 1 equipes\n\n\t2) Valider et commencer les eliminatoires\n\n");
printf ("Votre choix : ");
scanf("%d",&choix);
return (choix);
}
// Fonction qui affiche la liste chainée des pays.
void afficher( struct pays * tete)
{
struct pays * p;
p = (struct pays *)malloc(sizeof(struct pays));
printf("\nLISTE DES PAYS PARTICIPANT\n\n");
for(p=tete ; p!=NULL ; p=p->next)
{
printf("%s \n",p->nom);
}
}
// Fonction qui affiche les noeud de l'arbre binaire.
void afficher2(struct noeud * arbre)
{
if (arbre!=NULL)
{
printf("%s ",arbre->nom);
printf("\n\n");
if (arbre->Gnext!=NULL || arbre->Dnext!=NULL)
{
afficher2(arbre->Gnext);
afficher2(arbre->Dnext);
}
}
}
// Création d'un maillon en fin de liste chainée.
struct pays * creation(struct pays * tete)
{
struct pays * nouveau,* p;
struct pays * creemaillon();
if (tete == NULL)
{
nouveau =(struct pays *)malloc(sizeof(struct pays));
nouveau = creemaillon();
tete = nouveau;
}
else
{
nouveau = (struct pays *)malloc(sizeof(struct pays));
p = (struct pays *)malloc(sizeof(struct pays));
p = tete;
while( p->next!=NULL)
{
p = p->next;
}
nouveau = creemaillon();
p->next = nouveau;
}
return (tete);
}
// Création du maillon.
struct pays * creemaillon()
{
struct pays * x;
x = (struct pays *)malloc(sizeof(struct pays));
printf("\nVeuillez entrer le nom du pays : ");
scanf ("%s", x->nom);
x->next = NULL ;
return x;
}
//Fonction qui modifie le nom d'une équipe.
struct pays * modifier(struct pays * tete)
{
char sup_pays[30];
int tmp = 2;
int trouver = 0;
struct pays * p, * prev;
if(tete == NULL)
{
printf("Impossible de supprimer/modofier un pays, il n y en a pas!!!!\n");
}
else
{ printf("Quel pays souhaitez vous modifier?\n--->");
scanf("%s", &sup_pays);
if (!strcmp(sup_pays,tete->nom))
{
printf("\nVeuillez entrer le nom du pays : ");
scanf ("%s", tete->nom);
trouver = 1;
}
else
{
p = (struct pays *)malloc(sizeof(struct pays));
p = tete->next;
while((p!=NULL))
{
tmp = strcmp(sup_pays,p->nom);
if(tmp == 0)
{
trouver = 1;
printf("\nVeuillez entrer le nom du pays : ");
scanf ("%s", p->nom);
}
prev = p;
p = p->next;
}
}
if(trouver == 0)
{
printf("Pays n existe pas\n");
}
else
{
printf("Votre pays a bien ete modifier\n");
}
}
return (tete);
}
// Fonction qui génère pour chaque "appel" : un nouveau niveau pour l'arbre binaire.
struct noeud * gen_arbre(struct noeud * arbre)
{
struct noeud * cree_noeud();
if(arbre==NULL)
{
arbre = cree_noeud();
}
else
{
if((arbre->Gnext!= NULL)&&(arbre->Dnext!= NULL))
{
arbre->Gnext = gen_arbre(arbre->Gnext);
arbre->Dnext = gen_arbre(arbre->Dnext);
}
else
{
arbre->Gnext =cree_noeud();
arbre->Dnext =cree_noeud();
}
}
return arbre;
}
// Création d'un noeud.
struct noeud * cree_noeud()
{
struct noeud * nouveau ;
nouveau = (struct noeud *) malloc (sizeof(struct noeud));
printf("entrer du blabla pour differencier le(s) noeud(s) : ");
scanf ("%s",nouveau->nom);
nouveau->score = " ";
nouveau->Gnext = NULL;
nouveau->Dnext = NULL;
return nouveau;
}
Voila dans l'espoir que qq'un puisse m'aider, MERCI d'avance :)
A voir également:
- [aide en Programmation C] :Coupe du monde
- Application de programmation - Guide
- Mettre en veille un programme - Guide
- Programmation envoi sms - Guide
- Programmation binaire - Guide
- Ce programme est écrit en python il construit un mot secret ✓ - Forum Python
2 réponses
Je pense que c'est juste un mélange entre tes variables x et choix non ? En plus tu fais deux fois un
N'est ce pas plutôt dans les deux cas un :
... sachant que je n'ai pas du tout testé ton programme car je ne suis pas sous linux là...
Bonne chance
choix = pow(2,choix);
N'est ce pas plutôt dans les deux cas un :
choix = pow(2,x);
... sachant que je n'ai pas du tout testé ton programme car je ne suis pas sous linux là...
Bonne chance
Pour faire sauter un warning il faudrait déclarer ta fonction main à la findu fichier, car elle fait appel noatmment à menu2 qui n'est pas encore déclaré à ce stade. En plus en général on s'attend à truover main en fin de fichier ;-)
Il faut supprimer du main tous les prototypes de fonction, c'est mal. En plus si tu mets le main en fin de fichier tu n'as plus besoin de ces lignes.
Une fois ces corrections apportées j'ai bien le bon nombre d'équipe demandé ce ci dit... Je n'ai pas vu quand ton bug survenait :
Bonne chance
Il faut supprimer du main tous les prototypes de fonction, c'est mal. En plus si tu mets le main en fin de fichier tu n'as plus besoin de ces lignes.
Une fois ces corrections apportées j'ai bien le bon nombre d'équipe demandé ce ci dit... Je n'ai pas vu quand ton bug survenait :
(mando@aldur) (~) $ ./a.out +++++++++++++++++++++++++++++++++ + BIENVENUE A LA COUPE DU MONDE + ++++++++++++++++++++++++++++++++ Veuillez choisir le nombre d equipe qui participeront : 1) 2 equipes 2) 4 equipes 3) 8 equipes 4) 16 equipes Votre choix : 3 EQUIPE 1 ========= Veuillez entrer le nom du pays : 1 ... EQUIPE 8 ========= Veuillez entrer le nom du pays : 8 LISTE DES PAYS PARTICIPANTS =========================== LISTE DES PAYS PARTICIPANT 1 2 3 4 5 6 7 8 Souhaitez vous modifier la liste des equipes? ...
Bonne chance
moi je verrais un problem d allocation de mémoire pcq si je déplace la boucle qui génère mon arbre juste après que mon 'x' ai été initialisé(avant de créer ma liste chainée des pays), ca marche , mais ca ne m arrange pas pcq ensuite je dois utiliser une fonction similaire a "gen_arbre()" pour rajouter mes terminaisons et ca me fait le meme genre de probleme que ici...
Voila encore merci ;)