Aide pour petit prog

Aide pour petit prog - C - Programmation

Marsh Posté le 09-10-2005 à 17:16:35    

Bonjour, voila j'ai un petit prog à faire pour mes cours en turbo C++ et j'aurais besoin d'un ptit coup de mains  :ange:  
 
Voici le sujet:
Un joueur lance 2 dés. Si la somme des 2 dés est 2, il gagne 10€.Si seulement l'un des 2 dés est 1, il gagne 5€. Il ne gagne rien et ne perd rien si les 2 dés sont égaux et différents de 1. Dans les autres cas il perd 5€.
 
Ecrire un programme qui simule ce jeu, et affiche à l'écran le gain ou la perte.
 
 
Donc déjà on a comme précision qu'il faut utiliser randomize () et random (). Mais c'est la ou est le probleme car je vois pas trop comment les utiliser (j'ai regarder l'aide et sur le net mais j'ai du mal ^^), ils vont me servir pour déterminer une valeur aléatoire pour les dés mais je sais pas comment faire  :heink:  
 
Si quelqu'un pouvait me donner quelques explications (un ptit exemple si possible) sa serait simpa  :D  Je ne demande pas le programme mais une aide qui me permettra de faire le prog moi même.
 
Merci d'avance  :bounce:


Message édité par Juuni le 10-10-2005 à 22:02:08
Reply

Marsh Posté le 09-10-2005 à 17:16:35   

Reply

Marsh Posté le 09-10-2005 à 18:28:21    

Voici le début d'un programme possible :

void lance_les_des(int *de1, int *de2)
{
  *de1 = rand(..... // je ne me souviens plus des paramètres
  *de2 = rand(......
}
 
void maj_score(int *score_joueur, int de1, int de2)
{
  if (d1 + d2 == 2)
     *score_joueur += 10;
  else
     // les autres conditions sont à programmer
}
 
void main(void)
{
   // declarer les variables ...
 
  score_joureur = 0;
  de1 = 0;
  de2 = 0;
  randomize();
  do {
     lance_les_dés(&de1, &de2);
     maj_score(&score_joueur, de1, de2);
      // Demander au joueur s'il veu continuer
  } while (joueur_veut_continuer == TRUE);
   // affiche score final
   return;
}

Message cité 1 fois
Message édité par olivthill le 09-10-2005 à 18:29:41
Reply

Marsh Posté le 09-10-2005 à 19:06:08    

Tout dabord merci pour ton aide oliv  :ange:  
Ensuite pour rand faudrais pas mettre

Code :
  1. *de1 = 1+ramdom(6)

??? sa permettrais d'avoir un nombre de 1à6, si je me trompe pas  :p  
rand jvois à peut pres comment l'utiliser mais par contre jcomprend pas trop pour randomize  :??:  rand et randomize vont toujours ensemble???


Message édité par Juuni le 09-10-2005 à 19:06:48
Reply

Marsh Posté le 09-10-2005 à 19:57:19    

Comment ton PC te retourne un nombre aléatoire :
1) il faut générer tout d'abord la liste contenant des nombres aléatoires suivant une variable (la timestamp par ex) -> randomize
2) tu récupères les valeurs aléatoires par rand.
regarde sur le net (google) les manuels des fonctions rand et randomize.


Message édité par jlighty le 09-10-2005 à 19:58:05
Reply

Marsh Posté le 09-10-2005 à 20:21:47    

En faite ramdomize () sa sert a initialisé la fonction aleatoire, non? est ce que sa serait pas équivalent à sa: srand( time( NULL ) ); et sinon pour dire dans quel interval sera choisit le nombre c'est random qui s'en charge enfin c'est avec random que l'on précise ça?

Reply

Marsh Posté le 09-10-2005 à 20:43:29    

Citation :

En faite ramdomize () sa sert a initialisé la fonction aleatoire, non? est ce que sa serait pas équivalent à sa: srand( time( NULL ) );


Oui http://cboard.cprogramming.com/arc [...] -2366.html

Citation :

et sinon pour dire dans quel interval sera choisit le nombre c'est random qui s'en charge enfin c'est avec random que l'on précise ça?


d'après "man 3 rand", il faut utiliser la variable  RAND_MAX

Reply

Marsh Posté le 09-10-2005 à 23:02:21    

bon alors j'ai fait sa:
 

Code :
  1. #include<stdlib.h>
  2. #include<time.h>
  3. #include<stdio.h>
  4. #include<conio.h>
  5. void lance_les_des(int de1, int de2)
  6. {
  7.   printf("Appuyez sur une touche pour lancer les dés" );
  8.   de1 = 1+random(6)  /* Choisit un nombre aleatoire entre 1 et 6.*/
  9.   de2 = 1+random(6)
  10. }
  11. void maj_score(int score_joueur, int de1, int de2)
  12. {
  13.   if(de1 + de2 == 2)
  14.    {
  15.      score_joueur = 10;
  16.    }
  17.    else
  18.    {
  19.     if(de1 == 1)
  20.      {
  21.       score_joueur = 5;
  22.      }
  23.       else
  24.       {
  25.        if(de2 == 1)
  26.         {
  27.          score_joueur = 5;
  28. }
  29.  else
  30.          {
  31.   if(de1 == de2)
  32.            {
  33.             score_joueur = 0;
  34.            }
  35.     else
  36.     {
  37.      score_joueur = -5;
  38.     }
  39.  }
  40.       }
  41.     }
  42. }
  43. void main()
  44. {
  45.   int de1;
  46.   int de2;
  47.   int score_joueur;
  48.   score_joueur = 0;
  49.   de1 = 0;
  50.   de2 = 0;
  51.   randomize();
  52.     do
  53.      {
  54.      lance_les_des(&de1, &de2);
  55.      maj_score(&score_joueur, de1, de2);
  56.      }
  57.    return;
  58. }


 
mon prog n'est pas encore fini mais j'ai 4 erreurs:
- 9: statement missing;
- 13: declaration synthax error
- 64: declaration missing;
- 64: compound statement missing }
 
Euhh jcomprend ce que veulent dire les erreurs mais j'arrive pas à les corriger  :(

Message cité 1 fois
Message édité par Juuni le 09-10-2005 à 23:02:50
Reply

Marsh Posté le 09-10-2005 à 23:04:04    

Ca manque de ; a la fin de plein de ligne :D

Reply

Marsh Posté le 09-10-2005 à 23:15:47    

et de pointeurs et d'optimisation des conditions...


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 09-10-2005 à 23:35:09    

ouaip j'avais deviné que yavait un probleme de ; mais jvois pas trop ou il en manque  :heink:  et pour ce qui est des pointeur et d'optimisation des conditions... ba sa me dit rien :??:  j'ai pas du voir sa en cours encore (on commence)

Reply

Marsh Posté le 09-10-2005 à 23:35:09   

Reply

Marsh Posté le 10-10-2005 à 09:17:11    

une question, tu dois utiliser la programmation orientée objet ? car ce que tu fais ressemble plus au C qu'au C++.

Reply

Marsh Posté le 10-10-2005 à 11:02:21    

les ; ligne 8 et 9
 
 
une chose
 
score_joueur = -5
 
ne fera pas perdre 5 pts au joueurs... regarde -=5

Reply

Marsh Posté le 10-10-2005 à 20:30:37    

c'est du C sque je fais  :ange:

Reply

Marsh Posté le 10-10-2005 à 20:33:18    

alors pourquoi dans la catégorie C++ :D


Message édité par jlighty le 10-10-2005 à 22:14:04
Reply

Marsh Posté le 10-10-2005 à 22:00:34    

ouaip jviens de voir, j'ai fait mon boulet  :pt1cable:  
Bon sinon pour mon prog voici le code après pas mal de modifications, mais il me reste un probleme c'est que j'ai pas l'affichage du "gain" car en regardant le deroulement de mon prog il ne va pas dans ma fonction maj_score, c'est dans ma fonction lance_les_des que je dois lui dire d'allez dans maj_score mais je sais pas comment faire sa  :sweat:  
 
 

Code :
  1. #include<stdlib.h>
  2. #include<time.h>
  3. #include<stdio.h>
  4. #include<conio.h>
  5. int maj_score(int score_joueur, int de1, int de2);
  6. int lance_les_des()    /* determination de deux nombre aleatoire. */
  7. {
  8.   int de1;
  9.   int de2;
  10.   int val;
  11.   int a;
  12.   int score_joueur;
  13.   printf("Appuyez sur une touche pour lancer les des \n" );
  14.   getchar();
  15.   de1 = 1+random(6);
  16.   de2 = 1+random(6);
  17.   printf("Le premier de a pour valeur:%d\n",de1);
  18.   printf("Le deuxieme de a pour valeur:%d\n",de2);
  19.   val = score_joueur;
  20.   return val;
  21. }
  22. int maj_score(int score_joueur, int de1, int de2)    /* comparaison des scores de chacun des dés. */
  23. {
  24.   if(de1 + de2 == 2)
  25.    {
  26.      score_joueur = 10;
  27.    }
  28.    else
  29.    {
  30.     if(de1 == 1)
  31.      {
  32.       score_joueur = 5;
  33.      }
  34.       else
  35.       {
  36.        if(de2 == 1)
  37.         {
  38.          score_joueur = 5;
  39. }
  40.  else
  41.          {
  42.   if(de1 == de2)
  43.            {
  44.             score_joueur = 0;
  45.            }
  46.     else
  47.     {
  48.      score_joueur = -5;
  49.     }
  50.  }
  51.       }
  52.     }
  53.     return score_joueur;
  54. }
  55. void gain_perte(int score_joueur)
  56. {
  57. if(score_joueur>0)
  58.   {
  59.    printf("Vous avez gagne:%d",score_joueur);
  60.    getchar();
  61.   }
  62.    else
  63.    {
  64.    printf("Vous avez perdu:%d",score_joueur);
  65.    getchar();
  66.    }
  67.   getchar();
  68. }
  69. void main()
  70. {
  71.   int de1;
  72.   int de2;
  73.   int score_joueur;
  74.   int a;
  75.   int gain_perte;
  76.   char c;
  77.   score_joueur = 0;
  78.   de1 = 0;
  79.   de2 = 0;
  80.   randomize();
  81.   clrscr();
  82.     do
  83.      {
  84.      a=lance_les_des();
  85.      gain_perte=gain_perte+a;
  86.      printf("Voulez vous continuer a jouer? (o/n) \n" );
  87.      scanf("%c",&c);
  88.      }
  89.      while(c=='o');
  90. }

Reply

Marsh Posté le 10-10-2005 à 22:17:01    

la mise à jour tu l'appelles dans ton main

Reply

Marsh Posté le 11-10-2005 à 13:19:30    

olivthill a écrit :

Voici le début d'un programme possible :


Attention. Ni randomize() ni random() ne sont des fonctions standards mais des extensions de Borland C. Les fonctions du C sont srand() et rand().  
 
Mais ceci peut aider quand on a pas de compilateur Borland:
 
http://mapage.noos.fr/emdel/clib.htm
Module RANDOM
 
D'autre part, main() retourne int. Toujours.
 
http://mapage.noos.fr/emdel/notes.htm#typemain


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 11-10-2005 à 13:40:22    

Juuni a écrit :

bon alors j'ai fait sa:
<...>
mon prog n'est pas encore fini mais j'ai 4 erreurs:
- 9: statement missing;
- 13: declaration synthax error
- 64: declaration missing;
- 64: compound statement missing }
 
Euhh jcomprend ce que veulent dire les erreurs mais j'arrive pas à les corriger  :(


Quelques remarques et corrections... Pose des questions si tu ne comprends pas.


#include<stdlib.h>
#include<time.h>
#include<stdio.h>
#include<conio.h>
 
/* -ed- ajoute' pour la compatibilite'... */
#ifndef random
#define random(num) (int)((double)rand()/RAND_MAX * (num))
#endif
 
#ifndef randomize
#define randomize() srand((unsigned)time(NULL))
#endif
 
/* -ed- cette fonction n'est pas exportee, donc 'static'. */
static void lance_les_des(int de1, int de2)
{
    /* -ed- attention, les accents ne sont pas portables... Manque un '\n' */
    printf("Appuyez sur une touche pour lancer les dés" );
     
    /* -ed-
    vu le texte affiche', on pourrait s'attendre a une fonction  
    de suspension. Je n'en vois pas... Ajoute un getchar().
    */
    (void) getchar();
     
    /* -ed-
       en principe, on ne met pas de commentaire en fin de ligne  
     (sauf tres court). Commentaire deplace.  
     */
    /* Choisit un nombre aleatoire entre 1 et 6.*/
     
    /* -ed
    manque un ';'. Ajoute.  
    Attention 'random() n'est pas une fonction standard.
    */
    de1 = 1+random(6);
    de2 = 1+random(6);
    /* -ed-
    Attention, tu modifies la valeur des parametres.  
    C'est en général le signe d'une erreur de conception.  
    En effet, si on veut que la fonction appelante recupere  
    les valeurs tirees, il faut passer l'adresse des variables  
    via un pointeur du meme type, ou l'adresse d'une structure  
    contenant les deux variables.
     
    Je te laisse corriger ca et terminer la mise au point de ton code...
    */
}
 
void maj_score(int score_joueur, int de1, int de2)
{
    if(de1 + de2 == 2)
    {
        score_joueur = 10;
    }
    else
    {
        if(de1 == 1)
        {
            score_joueur = 5;
        }
        else
        {
            if(de2 == 1)
            {
                score_joueur = 5;
            }
            else
            {
                if(de1 == de2)
                {
                    score_joueur = 0;
                }
                else
                {
                    score_joueur = -5;
                }
            }
        }
    }
}
 
/* -ed- main() retourne int. Toujours. */
int main(void )
{
    int de1;
    int de2;
    int score_joueur;
    score_joueur = 0;
    de1 = 0;
    de2 = 0;
    randomize();
    do
    {
        lance_les_des(&de1, &de2);
        maj_score(&score_joueur, de1, de2);
    }
    /* -ed- manque un while... Ajoute ceci, mais ... */
    while (1);
    /* -ed-
    ... codage barbare. (sortie par Ctrl-break)  
    Il faudrait tester une condition de sortie...  
    */
 
   /* -ed- parce que main() retourne int, ajoute un 0. */
    return 0;
}


Message édité par Emmanuel Delahaye le 11-10-2005 à 13:44:21

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 11-10-2005 à 18:51:52    

Bon ba deja merci pour l'aide c'est simpa  :) bon ensuite jvai rebosser mon prog ce soir en rentrant donc jverais a ce moment la si ya des  truc que je comprends pas ou si j'ai un probleme  :p  
Sinon pour random et randomize normalement ce que j'ai fait est bon (enfin d'apres mon prof ^^) car on est sous borlant.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed