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();

}

10 réponses

1 2
Avatar
Olivier Azeau
Benoit wrote:
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
=========================================== >
[SNIP]

k=rand()/RAND_MAX;

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



Ca sent la division entière...

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

Benoit
"Olivier Azeau" a écrit dans le message de
news:Hp2wd.4521$
Benoit wrote:
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
=========================================== > >
[SNIP]

k=rand()/RAND_MAX;

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



Ca sent la division entière...



Avatar
Benoit
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...

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
Olivier Azeau
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" ?

"Olivier Azeau" a écrit dans le message de
news:Hp2wd.4521$

Benoit wrote:

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
=========================================== >>>


[SNIP]

k=rand()/RAND_MAX;

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



Ca sent la division entière...








Avatar
Benoit
Grosso modo,ce que je veux c est un constructeur def par:

RandomVector(int n)

qui me construit un vecteur aléatoire fait de 0 et 1...voila ce que je
veux...c'est simple et je n y arrive pas...:(

Benoit
Avatar
Benoit
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...:(

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
Olivier Azeau
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
en lançant le debugger de VS .NET, je n'ai pas directement acces au
_coefs[i]...je vois bien la valeur prise par "i" mais pour les _coefs jai
une sous arboresence myend, myfirst...ou la les valeur sont space: -2.***
e-38, 0 etc...


"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
j ai le sentiment que l erreur vient de la façon dont je décris le
constructeur...non?

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
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