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 :

Probleme intervalle nombres aleatoires


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2013
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Probleme intervalle nombres aleatoires
    Bonjour a tous!

    Je suis debutante en C++ et voila un petit travail qu'on m'a conseillé de faire. Le soucis? je n'arrive pas a atteindre le resultat souhaité alors que tout semble correct.





    /Voici la demarche a suivre:

    1; On donne à minimum une valeur plus grande que celle qu'on attend. On calcule plusieurs de valeurs V que l'on compare ensuite avec minimum.
    À chaque fois que V est inférieur à minimum, on remplace
    minimum par V. Si on fait ceci un nombre suffisant de fois, la valeur finale de minimum devrait être la plus petite valeur aléatoire générée par la formule.

    2. On applique la même chose à maximum, sauf que l'on commence par une valeur plus petite que celle attendue.
    On calcule plusieurs valeurs de V que l'on compare apres à maximum. À chaque fois que V est supérieur à maximum, on remplace la valeur de maximum par celle de V. Si on fait ceci un nombre suffisant de fois, la valeur finale de maximum devrait être la plus grande valeur aléatoire générée par la formule.

    3.on utilise les mêmes valeurs de V pour trouver les valeurs de minimum et maximum.

    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
    // Probleme_1.cpp : Defines the entry point for the console application.	
    // INFO1002 Devoir1 q1.cpp : définit le point d'entrée pour l'application console.
    //
     
    #include "stdafx.h"
    #include <iostream>
    #include <time.h>
    using namespace std ;
     
    int _tmain(int argc, _TCHAR* argv[])
    {
     
    // Comment s'assurer que les valeurs ne sortent pas de l'intervalle ?
    //         On doit  trouver la borne inférieure et la borne supérieure de l'intervalle desdonnées générées.
     
    	srand( unsigned int (time( NULL ) ) ) ;
    	short minimum = 32768, maximum = 0, V ; 
     
    	for( long I = 0 ; I < 1000000 ; I++) // Faire un très grand nombre d'itérations.
    	{
     
    		V = 65 + rand()%(90-65+1) ;
    		if( V < minimum)  
    		{minimum = V ; }// Gardez trace de la plus petite valeur générée.
    		else if( V > maximum) 
    		{maximum = V ;} // Gardez trace de la plus grande valeur générée.
    	}
     
    	cout << "L'intervalle genere est [ " << minimum << ", " << maximum << " ] " << endl ; 
     
     
    	system("pause");
    	return 0;
     
     
    }


    Le résultat attendu est [ 65, 90 ] mais je n'arrive pas. Au contraire j'ai un [-32768, 65] J'ai beau modifier mes intervalles mais c'est de pire en pire en fait. Je ne vois absolument pas ce qui cloche ??

  2. #2
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Ton programme est relativement correct.
    Le souci vient de ton initialisation de short minimum.
    32768 n'est pas valide pour un short (sur ta machine).

    Voici un petit programme et son résultat pour mieux comprendre l'erreur.
    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
    // g++ -Wall -Wextra -pedantic short.cpp -o short && ./short
     
    #include <iostream>
    #include <limits>
     
    int main()
    {
    	{
    		short min = 32768;
    		std::cout << "short min = 32768; -> " << min << std::endl;
    	}
     
    	std::cout << "short min -> " << std::numeric_limits<short>::min() << std::endl;
    	std::cout << "short max -> " << std::numeric_limits<short>::max() << std::endl;
     
    	return 0;
    }
    Voici le résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ g++ -Wall -Wextra -pedantic short.cpp -o short && ./short
    short.cpp: In function ‘int main()’:
    short.cpp:9:15: warning: overflow in implicit constant conversion [-Woverflow]
    short min = 32768; -> -32768
    short min -> -32768
    short max -> 32767
    Note qu'en activant les "warnings" (-pedantic ici (?!)), le compilateur t'avertit de l'overflow.
    Il faut donc utiliser #include <limits> et std::numeric_limits<short>::max() et std::numeric_limits<short>::min(); ou mieux, initialiser ces deux variables avec un tirage.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2013
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Ah je comprends mieux! J'avoue que je n'aurais jamais imagné que ca puisse etre ca. Merci beaucoup a vous!

  4. #4
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    De rien, n'hésites pas à passer le sujet en [Résolu]

Discussions similaires

  1. [Débutant] Probleme avec les nombres aleatoire en c++ builder
    Par jammel dans le forum C++Builder
    Réponses: 2
    Dernier message: 20/11/2013, 22h33
  2. nombre aleatoire entre un intervalle a et b
    Par aimad41 dans le forum C
    Réponses: 12
    Dernier message: 20/11/2006, 15h58
  3. nombres aleatoires en plsql
    Par al85 dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 29/03/2005, 19h07
  4. nombre aleatoire
    Par Bob dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 17/06/2002, 18h12
  5. [Kylix] Probleme de nombre flottant!!
    Par yopziggy dans le forum EDI
    Réponses: 5
    Dernier message: 02/05/2002, 10h13

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