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 :

Formule incomplète


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2013
    Messages : 1
    Par défaut Formule incomplète
    Bonjour ,
    Je doit effectuer un tout petit programme comme si joint (http://depositfiles.com/files/zfm9cge3x )
    je doit l’effectuer avec code block met j'ai déjà bien avancer, mais pas moyen de trouver mon erreur !

    J'ai fait ceci :

    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 <time.h>
     
    int main()
    {
        /* déclarations */
        int i;
        int ch49,ch3,ch3_1,ch3_2,ch3_3;
     
        srand(time(NULL));
     
        /* boucle pour 2 tirages,  */
        for (i=0;i<2;++i)
        {
            /* Nb de 1 a 49 */
            ch49 = rand () % 49;
     
            /* Nb de 1 a 49 */
            ch3 = rand () % 49;
     
            /* affichage */
            printf ("****************************************       TIRAGE*************************************************** No %d:\nNb hazard de 1 a 49: %d\nNb hazard de 1 a 49: %d\n",i+1,ch49+1,ch3+1);
            printf ("****************************************        **************************************************")
            /* test pour voir si 1 et 49 sont bien pris en compte */
            if (ch49+1==49 || ch49+1==1)
            {
                printf("\n* TOUVE %d au tirage: %d *\n",ch49+1,i+1);
                system ("pause");
            }
        }
        system("PAUSE");
        return 0;
    }
    Pouvez vous m'aider s'il vous plait ?

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Bonjour,
    Tu nous donnes encore ton .exe, nous ne l'executerons pas.
    Pour t'aider, nous avons besoin que tu nous expliques ce que tu veux, et pourquoi ce que tu obtiens ne te satisfait pas.

    Concernant ton programme.
    Dans tes options de projet/solution/compilation, coche la case "laisser la console ouverte".
    Cela te permettra de supprimer les system("pause"). system est une fonction qui dépend de l'OS, nous autres linuxiens n'avons pas le programme pause.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    /* Nb de 1 a 49 */
            ch49 = rand () % 49;
    Ceci est faux, puisque le %49 donne des nombres entre 0 et 48.
    comme dans toute la suite, tu utilise ch49+1, fais le de suite.

    Ton test de logique est inutile, car non caractéristique. Tu ne testes pas si tu sors de l'intervalle, et le hasard étant ce qu'il est, tu n'as aucune garantie, même statistique, sur le résultat.

    Crée une fonction d'aléatoire bornée, pour pouvoir la tester.
    par exemple:
    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 <time.h>
     
    /* un nombre aleatoire dans [min, max] */
    int alea(int min, int max);
     
    int main()
    {
        /* déclarations */
        int i;
        int rand1, rand2;
     
        srand(time(NULL));
     
        /* boucle pour 2 tirages,  */
        for (i=0;i<2;++i)
        {
            rand1 = alea(1, 49);
            rand2 = alea(1, 49);
     
            /* affichage */
            printf ("****************************************       TIRAGE*********************************************")
            printf ("No %d:\t1 <= %d <= 49\t1 <= %d <= 49\n", i+1, rand1, rand2);
            printf ("****************************************        **************************************************")
        }
        return 0;
    }
     
    /* un nombre aleatoire dans [min, max] */
    int alea(int min, int max) {
    	int plage = max-min+1;
    	return (rand () % plage) + min;
    }

  3. #3
    Membre Expert
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Par défaut
    Citation Envoyé par bemix Voir le message
    je doit l’effectuer avec code block met j'ai déjà bien avancer, mais pas moyen de trouver mon erreur !
    Hello,


    Évites des printf et passe à std::cout (à moins que tu doives faire ça en C ?)

    Ton programme semble correct pour générer des nombres de 1 à 49 (penses au +1 directement plutôt que de le refaire à chaque fois).

    Si "l'erreur" concerne le fait que tu ne trouves pas 1 ou de 49, c'est du au hazard, exécute ton prog 10/15 fois et tu devrais en voir.

    Sinon il te reste à générer des nombres de 1 à 10 (normalement sans difficultés vu que tu arrives à générer des nombres de 1 à 49, puis à utiliser des tableaux (cf l'exe, si on aime un peu l'asm ça se comprend bien) :
    2 tableaux de 49 et 10 éléments, dans chaque tableau la case d'indice i à la valeur i+1 (tableau49[0] = 1 etc..).
    Puis retourner la valeur de la case d'un indice aléatoire (bon du coup tu auras besoin de nombres de 0 à 48 ^^).
    Et enfin à compter les doublons.

    Si tu est en C++ std::vector pour les tableaux, std::set pour repérer les doublons, sinon tu peux le faire à la main (comme dans l'exe fourni).

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/04/2014, 11h43
  2. [Crystal] Formules ...
    Par Antichoc dans le forum Formules
    Réponses: 3
    Dernier message: 25/11/2003, 10h52
  3. évaluateur de formule mathématique
    Par lyrau dans le forum Générateurs de compilateur
    Réponses: 5
    Dernier message: 28/03/2003, 22h50
  4. [Formule] Lever et coucher du soleil
    Par psl dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 21/10/2002, 16h37
  5. [reseaux] Comment creer un compte user à partir d'un formul avec perl
    Par oulai_evado dans le forum Programmation et administration système
    Réponses: 4
    Dernier message: 01/10/2002, 19h54

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