OVH Cloud OVH Cloud

Pourquoi cout ou rand marche pas???

12 réponses
Avatar
Benoit
Bonsoir,

J ai defini un constructeur qui construit un vecteur aléatoire fait de
valeurs entre en 0 et 1 avec la fonction rand()

Quand je veux afficher le vecteur construit
cout << "A[" << j << "]=" << A[j] << endl;

Ca ne marche pas...j'ai tjs 0.

Par contre quand je fais rand() % 10 ça affiche bien des valeurs entre 0 et
9.

Savez vous pkoi?

Merci

Benoit
PS: le code est ci dessous...si besoin
============================================
#include<iomanip>
#include<vector>

#include"RandomVector.h"

using namespace std;

int main()

{

RandomVector A(5); double k;

for (int j=0;j<5;j++)

{


cout << "A[" << j << "]=" << A[j] << endl;

k=rand()/RAND_MAX;

printf("k=%f\n",k); //marche pas non plus... :(

}

A.~RandomVector();

return 0;

}

===================================================================

#ifndef RANDOMVECTOR_H

#define RANDOMVECTOR_H

#include<iostream>

#include<math.h>

#include<stdlib.h>

#include<ctime>

#include <assert.h>

#include <complex>

#include <iomanip>

#include <vector>

using namespace std;

class RandomVector

{

public:

// Constructeur allouant la memoire pour un vecteur de dimension dim

RandomVector( int dim );




// Destructeur : Detruit le tableau alloue par le constructeur :

~RandomVector();



// Accesseur au ieme element en lecture seule :

const double& operator [] ( int i ) const;

// Lire la dimension du vecteur :

int getDimension() const;




private:

// Attributs :

vector<double> _coefs;

};

#endif

===================================================================

#include<iostream>

#include<math.h>

#include<stdlib.h>

#include<ctime>

#include<assert.h>

#include<complex>

#include<iomanip>

#include<vector>

#include<stdio.h>

#include"RandomVector.h"

using namespace std;

RandomVector::RandomVector( int dim ) : _coefs(dim)

{

srand(time(NULL));

for (int i=0;i<dim;i++)

_coefs[i] = rand()/RAND_MAX;

}

//------------------------------------------------------------------

RandomVector::~RandomVector()

{

}

//------------------------------------------------------------------

const double&

RandomVector::operator [] ( int i ) const

{

assert(i>=0);

assert(i < _coefs.size());

return _coefs[i];

}

// -----------------------------------------------------------------

RandomVector::getDimension() const

{

return _coefs.size();

}

2 réponses

1 2
Avatar
Olivier Azeau
Benoit wrote:
je l ai constaté à l'affichage, je ne maitrise pas trop le debuger de VS
.NET il est bizar...
mais meme qd je fais:

double k;
k=(rand() % 100) /100
cout << k<< endl;

j ai k=0 et 1/k = infinity...

c est trop space...:(



Par définition : quel que soit x entier positif, 0 <= x % 100 < 100
et quand on divise un entier inférieur à 100 par l'entier 100, on fait
une division entière dont le résultat est zéro.
Donc tout est normal (ouf !)

PS : quand tu réponds à un message, essaie de tjr écrire en dessous du
texte précédent.

Benoit
"Olivier Azeau" a écrit dans le message de
news:me3wd.4538$

Benoit wrote:

Je n'arrive à générer des nombres entre 0 et 1...en tout cas quand je



les

affiche j'ai 0.

je fais au niveau du constructeur:
(_coefs déclaré en privé comme vector<double>)
_coefs[i] =rand();
et j ai toujours 0...


Tu l'as constaté à l'affichage ou as-tu lancé un debugger pour verifier
le contenu en mémoire de tes variables ?


Je ne comprends pas...
"Olivier Azeau" a écrit dans le message de
news:5Z2wd.4532$


Benoit wrote:


C'est à dire?
même qd je fais rand() tout court ça ne marche pas...

Benoit


Qu'est-ce qui "ne marche pas" ?















Avatar
Benoit
Ok alors l'astuce dont je ne me souvenais plus...un an sans pratique et je
paie cher...lol...c'est de faire un cast!!!! et oui suis bête!!!

donc
k=rand()/((double)RAND_MAX);

et hop j ai des nombres aleatoires entre 0 et 1...c etait tout bete...

Merci

Benoit
"Benoit" a écrit dans le message de
news:41c0c6ab$0$12711$
Par définition : quel que soit x entier positif, 0 <= x % 100 < 100
et quand on divise un entier inférieur à 100 par l'entier 100, on fait
une division entière dont le résultat est zéro.
Donc tout est normal (ouf !)

PS : quand tu réponds à un message, essaie de tjr écrire en dessous du
texte précédent.


Ok mais alors comment faire pour tirer un nombre aléatoire entre 0 et
1????


Merci

Benoit





1 2