IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

projet roulette c


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2012
    Messages : 30
    Par défaut projet roulette c
    Bonjour,

    j'ai un gros problème avec mon projet en c, le compilateur bug au moment du fprintf dans le main, j'ai besoin de récupérer un numero dont le joueur a saisi, voici mon code :
    main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    #include <stdio.h>
    #include <stdlib.h>
    #include "roulette.h"
    #include "mise.c"
    #include "joueur.h"
     
     
    int main(void){
        Joueur* j=(Joueur *)malloc(sizeof(Joueur));
    	Roulette* r=(Roulette *)malloc(sizeof(Roulette));
    	j->argent=300;
    	j->mise=0;
    	j->hist=NULL;
    	int cx=0;
    	int p;
    	do{
           printf("Combien voulez vous pariez ?");
           scanf("%d",&(j->mise));
           if(j->mise<=0 || j->mise>j->argent) {
                         printf("Vous ne pouvez pas miser cette somme la\n");
           }
        }
        while(j->mise<=0 || j->mise>j->argent);
        do{
           printf("Sur quelle chiffre voulez vous miser ?\n");
           scanf("%d",j->numero);
           if(j->numero<0 || j->numero>36){
                          printf("Vous ne pouvez pas miser sur cette somme la(vous pouvez miser sur des numeros entre 0 et 36)");
           }
        }
        while(j->numero<0 || j->numero>36);
        fprintf(j->hist,"%d ",j->numero);
        fseek(j->hist,0,SEEK_END);
    }
    roulette.h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #include <stdio.h>
    #include <stdlib.h>
     
     
     
    struct roulette{
     
    	int nbTirages;
    //int occ [37];
        FILE* fich;
     
     
    };
    typedef struct roulette Roulette;
     
    int tirageRoulette(Roulette r);
    mise.c :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    #include <stdio.h>
    #include <stdlib.h>
     
    int pair(int m){
    	return m%2==0;
    }
    int couleurRouge(int m){
    	if (m<0){
    		printf("error");
    		return 0;
    	}	
    	if(m<11){
    		return !(pair(m));
    	}
    	if(m<19){
    		return pair(m);
    	}
    	if(m<29){
    		return !(pair(m));
    	}
    	if(m<=36){
    		return pair(m);
    	}
    	else{
    		return 0;
    	}
    }
     
    int couleurNoir(int m){
    	if(m<0){
    		printf("error \n");		
    		return 0;
    	}
    	if(m<11) 
    		return pair(m);
    	if(m<19){
    		return !(pair(m));
    	}
    	if(m<29){
    		return pair(m);
    	}
    	if( m<36){
    		return !(pair(m));
    	}
    	else{
    		return 0;
    	}
    }
     
     
    int dansChevalH(int m){
        int x;
        if(m%3!=0){
    		return 1;
        }
        else{
             printf("Vous ne pouvez pas faire de cheval avec %d",m);
             return 0;
        } 	
    }
    int dansChevalV(int m){
        int x;
        if(m!=34 && m!=35 && m!=36 ){
                 return 1;
        }
        else{printf("Vous ne pouvez pas faire de cheval avec %d",m);
             return 0;
        }
    }
    int dansCarre(int m){
        if(m%3!=0 && m!=34 && m!=35){
                  return 1;
        }
        else{
             printf("Vous ne pouvez pas faire un carre avec %d",m);
             return 0;
        }
    }
    int dansTransversalle(int m){
        int x;
        if(m%3==0){  
           return 1;
        }
        else{
           return 0;
        }
    }
    int dansSixain(int m){
        int x;
        if(m%3==0 && m!=36){
           return x==m || x==m-1|| x==m-2||x==m+1||x==m+2||x==m+3;
        }
        else{
           return 0;
        }
    }
    int dansDouzaine(int m){
        if(m%3==0 && m<=27){
           return 1;
        }
        else{
           return 0;
        }   
    }
    int passe(int m){
        return m>0 && m<18;
    }
    int manque(int m){
        return m>=19 && m<=36;
    }
    void chevalH(int* tab,int num){
        *(tab)=num;
        tab++;
        *(tab)=num+1;
        tab++;
    }
    void chevalV(int* tab,int num){
        *(tab)=num;
        tab++;
        *(tab)=num+3;
        tab++;
    }  
    void transversalle(int* tab,int m){
         *(tab)=m;
         tab++;
         *(tab)=m-1;
         tab++;
         *(tab)=m-2;
         tab++;
    }
    void sixain(int* tab,int num){
         *(tab)=num;
         tab++;
         *(tab)=num-1;
         tab++;
         *(tab)=num-2;
         tab++;
         *(tab)=num+1;
         tab++;
         *(tab)=num+2;
         tab++;
         *(tab)=num+3;
         tab++;
    }
    void carre(int* tab,int num){
         *(tab)=num;
         tab++;
         *(tab)=num+1;
         tab++;
         *(tab)=num+3;
         tab++;
         *(tab)=num+4;
         tab++;
    }
    void colonne(int* tab,int num){
         *(tab)=num-2;
         tab++;
         *(tab)=num-1;
         tab++;
         int i;
         for (i=0;i<10;i++){
             *(tab)=num+i;
             tab++;
         }
    }
    joueur.h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #include <stdio.h>
    #include <stdlib.h>
     
    struct joueur{
    	    int montantMise;
            int genreMise;
            int numero;
            int mise;
            int* mi;
    	    int argent;
    	    FILE* hist;
    };
    typedef struct joueur Joueur;
     
    int addMise(Joueur* j,int m){
    	j->argent-=m;
    }
    Merci d'avance pour la reponse. ;D

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Août 2007
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 179
    Par défaut
    Quand ouvres-tu ton fichier?

  3. #3
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2012
    Messages : 30
    Par défaut
    Ah oui merci beaucoup j'ai oublier de l'ouvrir merci mais j'avais essayer avec des pointeurs et sa marcher pas .

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par adamsony06 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    	do{
           printf("Combien voulez vous pariez ?");
           scanf("%d",&(j->mise));
           if(j->mise<=0 || j->mise>j->argent) {
                         printf("Vous ne pouvez pas miser cette somme la\n");
           }
        }
        while(j->mise<=0 || j->mise>j->argent);
    Ca ne te gêne pas trop de faire deux fois le même test ? Heureusement que tu ne programmes qu'un jeu de roulette et pas le système d'atterrissage automatique d'un avion parce que j'aurais un peu peur d'être dans cet avion...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	while (1) {
    		printf("Combien voulez vous parier ?");
    		scanf("%d",&(j->mise));
    		if(j->mise>0 && j->mise<=j->argent) break;
    		printf("Vous ne pouvez pas miser cette somme là\n");
    	}
    Accessoirement scanf() n'est pas fait pour les saisies humaines mais bon, pour un exercice ça peut passer...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    while (1) {
    		printf("Combien voulez vous parier ?");
    		scanf("%d",&(j->mise));
    		if(j->mise>0 && j->mise<=j->argent) break;
    		printf("Vous ne pouvez pas miser cette somme là\n");
    	}
    Certains profs n'aiment pas du tout l'utilisation d'un break.

    On peut envisager trois solutions qui seront peut être mieux acceptées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    printf("Combien voulez vous parier ?");
    scanf("%d",&(j->mise));
    while(j->mise <= 0 || j->mise > j->argent)
    {
          printf("Vous ne pouvez pas miser cette somme là\n"); 
          printf("Combien voulez vous parier ?");
          scanf("%d",&(j->mise));
    }
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void demanderMise(int * mise, int argent)
    {
          printf("Combien voulez vous parier ?");
          scanf("%d",mise);
          if(j->mise <= 0 || j->mise > j->argent)
          {
                  printf("Vous ne pouvez pas miser cette somme là\n");
                  demanderMise(mise, argent);
          }
    }
     
    demanderMise(&j->mise, argent);
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void demanderMise(int * mise, int argent)
    {
          printf("Combien voulez vous parier ?");
          scanf("%d",mise);
    }
     
    demanderMise(&j->mise, argent);
    while(j->mise <= 0 || j->mise > j->argent)
    {
          printf("Vous ne pouvez pas miser cette somme là\n");
          demanderMise(mise, argent);
    }
    Après cela dépend du prof, mais certains vont vraiment bondir en voyant un break (un peu comme avec les goto).

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Après cela dépend du prof, mais certains vont vraiment bondir en voyant un break...
    Mouais. Et donc on remplace un break bien placé et tout gentil par une récursivité...

    A la base tu as raison: certains profs sont des extrémistes (surtout les vieux avec une grosse barbe et des touffes de poils qui sortent des oreilles) et ils n'aimeront pas. Mais ma soluce était plutôt pour ceux que je classe dans la catégorie "j'ouvre mon esprit" (oserais-je dire "be aware" ) et qui font, j'espère, partie des plus nombreux
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    La récursivité n'est pas du tout adaptée à ce genre de situation vu que plus il y aura de valeur erronée, plus on empilera sur la pile d'appel.

    Mais cette méthode peut être intéressante pour montrer au prof qu'on sait utiliser des fonctions récursives. Donc si on a fait un cours là-dessus il y a peu...


    Après, il est certain que le break reste la solution la plus adaptée niveau performance.
    Par contre au niveau lisibilité du code, je suggère de mettre un commentaire à la ligne du while(1) pour expliquer comment on sort de la boucle.
    On cherchera aussi à limiter au maximum l'emploie des break si on peut faire autrement. Il ne faut pas en abuser et en mettre partout.

    EDIT : Je pense d'ailleurs que c'est la raison pour laquelle on demande souvent à ne pas utiliser le break dans les TP/TD car on risque par la suite de ne plus réfléchir, de vouloir en mettre partout et de les utiliser alors qu'on pourrait faire quelque chose de plus simple.


    Pour la fonction récursive, dans ce cas là, on doit faire au maximum 3/4 appels de la fonction. Dans ce contexte, cela reste assez négligeable.
    Par contre, niveau lisibilité, ce n'est pas forcément le plus évident.

    Personnellement, je conseillerais plutôt l'utilisation de la première solution que je propose. Si on a plus de lignes, on peut utiliser la 3ème.


    Après, très souvent, il n'y a pas de meilleurs méthodes, il faut choisir en fonction de nos objectifs et consignes.
    Si un professeur ou un patron ne demande pas de break, on sera obligé de s'y plier.
    Si on recherche au maximum le gain de performance, on utilisera une méthode différente que si on recherche un maximum de lisibilité du code.
    De même si on recherche juste à montrer dans le cadre d'un exercice qu'on a compris quelque chose...

    Il faut donc bien être conscient qu'il existe très souvent plusieurs solutions, plusieurs manières de faire.


    Je pense que nous sommes dans un exercice de cours, à quoi s'attend donc le prof?
    - S'il a déjà parlé du break en cours, en fonction de ce qu'il aura dit, on saura s'il vaut mieux l'utiliser ici ou non.
    - S'il n'en a pas parlé, dans le doute je pense qu'il vaut mieux ne pas l'utiliser et poser une question sur le break en cours (en plus ça fera profiter toute la classe ).

    EDIT : par contre, quand on ne sait pas quel prof corrige, il vaut mieux éviter à tout prix l'utilisation d'un break lors d'un partiel.

  8. #8
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    On m'a souvent dit dans mes études de ne pas utiliser break; mais très honnêtement, j'ai parfois du mal à voir pourquoi. En tout cas, dans certains cas.

    Il est vrai que si la condition d'arrêt est par exemple i == 42 et qu'à un moment dans la boucle, on a une condition qui nous oblige à l'arrêter, on met i = 42; plutôt que break;. De même, multiplier les break en plus d'une condition d'arrêt explicite est le meilleur moyen de ne pas savoir comment se termine la boucle.

    Mais un bon while(1) avec un break, je trouve ça pas mal (oui, il y a quelque mois, Svear m'a tapé parce que j'ai mis un while( keepReading) avec keepReading qui était un booléen.... mais les gens changent !).

Discussions similaires

  1. Utilisation for i in range (n) pour projet roulette de casino
    Par yoyo27500 dans le forum Général Python
    Réponses: 9
    Dernier message: 01/06/2014, 11h35
  2. Qu'est ce qu'un grand projet ?
    Par Geronimo dans le forum Débats sur le développement - Le Best Of
    Réponses: 62
    Dernier message: 04/04/2013, 14h52
  3. Parametrage des options de projet
    Par ares7 dans le forum EDI
    Réponses: 7
    Dernier message: 22/07/2002, 15h33
  4. Réponses: 6
    Dernier message: 21/06/2002, 14h48
  5. Les fichiers d'un projet
    Par Manolo dans le forum C++Builder
    Réponses: 4
    Dernier message: 07/05/2002, 17h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo