Variables aléatoires
MaximeTestori
Messages postés
10
Date d'inscription
Statut
Membre
Dernière intervention
-
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
Salut à tous
J'ai trois variables doubles que je veux choisir aléatoirement mais compris entre un minimum>0 et un maximum qui sont pour chacune de ces variables différents.
Aidez moi s'il vous plait
J'ai trois variables doubles que je veux choisir aléatoirement mais compris entre un minimum>0 et un maximum qui sont pour chacune de ces variables différents.
Aidez moi s'il vous plait
A voir également:
- Variables aléatoires
- Freezes aléatoires - Forum Ordinateurs
- Animations aléatoires - Forum Powerpoint
- Les variables ✓ - Forum Python
- Images aléatoires (php) ✓ - Forum PHP
- Générateur d'images aléatoires - Forum Python
8 réponses
Salut,
Je comprend pas bien la question, mais tu veux faire un random borné avec un min et un max ?
Si oui, c'est ça que tu veux ?:
Je comprend pas bien la question, mais tu veux faire un random borné avec un min et un max ?
Si oui, c'est ça que tu veux ?:
#include <stdio.h> #include <stdlib.h> #include <time.h> double my_rand(double min, double max) { return min + ((double)rand() / ((double)RAND_MAX / (max - min))); } int main(int argc, char** args) { int i = 0; srand(time(NULL)); for(i = 0; i < 20; i++) printf("%lf\n", my_rand(8.f, 50.f)); return 0; }
oui, par exemple une de mes variable s'appelle DiffTemps et la valeur aléatoire doit être comprise entre 5.56 et 27.25.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Excuse moi est ce que tu peux m'expliquer cette partie?
nt main(int argc, char** args)
{
int i = 0;
srand(time(NULL));
for(i = 0; i < 20; i++)
printf("%lf\n", my_rand(8.f, 50.f));
nt main(int argc, char** args)
{
int i = 0;
srand(time(NULL));
for(i = 0; i < 20; i++)
printf("%lf\n", my_rand(8.f, 50.f));
Salut,
"my_rand" c'est la fonction que je t'ai faite lors de mon premier poste :)
soit:
le main n'est là que pour l'exemple...
"my_rand" c'est la fonction que je t'ai faite lors de mon premier poste :)
soit:
double my_rand(double min, double max) { return min + ((double)rand() / ((double)RAND_MAX / (max - min))); }
le main n'est là que pour l'exemple...
int main(int argc, char** args) { int i = 0; // variable pour la boucle for srand(time(NULL)); // initialisation de rand (obligatoire) for(i = 0; i < 20; i++) // boucle 20x pour afficher le resultat de la fonction my_rand printf("%lf\n", my_rand(8.f, 50.f)); // affiche un rand min=8.0 et max=50.0 return 0; }
Merci mais comment je précise que cette valeur qu'il va me donner est pour la variable DiffTemps car il y a deux autres variables pour lesquelles je vais utiliser la même structure pour avoir également des nombre aléatoire mais avec des extremums différents?
Je dois être chiant non...
Je dois être chiant non...
Je ne suis pas très doué en programmation donc est ce que quelqu'un peut me dire pourquoi l'algorithme suivant ne fonctionne pas?????
#define Min1 5,56
#define Max1 27,25
#define Min2 500,0
#define Max2 4500,0
#define Min3 36,0
#define Max3 1151,08
double my_rand(Min1, Max1)
{
return Min1+(Max1-Min1)*((double)rand())/((double)RAND_MAX);
}
i = 0;
srand(time(NULL));
for(i = 0; i < 20; i++)
printf("%lf\n", my_rand(Min1.f, Max1.f));
double my_rand(Min2, Max2)
{
return Min2+(Max2-Min2)*((double)rand())/((double)RAND_MAX);
}
i = 0;
srand(time(NULL));
for(i = 0; i < 20; i++)
printf("%lf\n", my_rand(Min2.f, Max2.f));
double my_rand(Min3, Max3)
{
return Min3+(Max3-Min3)*((double)rand())/((double)RAND_MAX);
}
i = 0;
srand(time(NULL));
for(i = 0; i < 20; i++)
printf("%lf\n", my_rand(Min3.f, Max3.f));
Sachant que j'ai trois variables doubles que je veux choisir aléatoirement mais compris entre un minimum>0 et un maximum qui sont pour chacune de ces variables différents.
Apparemment il y a un probleme avec les double, my_rand, f et Max3...
Cordialement
#define Min1 5,56
#define Max1 27,25
#define Min2 500,0
#define Max2 4500,0
#define Min3 36,0
#define Max3 1151,08
double my_rand(Min1, Max1)
{
return Min1+(Max1-Min1)*((double)rand())/((double)RAND_MAX);
}
i = 0;
srand(time(NULL));
for(i = 0; i < 20; i++)
printf("%lf\n", my_rand(Min1.f, Max1.f));
double my_rand(Min2, Max2)
{
return Min2+(Max2-Min2)*((double)rand())/((double)RAND_MAX);
}
i = 0;
srand(time(NULL));
for(i = 0; i < 20; i++)
printf("%lf\n", my_rand(Min2.f, Max2.f));
double my_rand(Min3, Max3)
{
return Min3+(Max3-Min3)*((double)rand())/((double)RAND_MAX);
}
i = 0;
srand(time(NULL));
for(i = 0; i < 20; i++)
printf("%lf\n", my_rand(Min3.f, Max3.f));
Sachant que j'ai trois variables doubles que je veux choisir aléatoirement mais compris entre un minimum>0 et un maximum qui sont pour chacune de ces variables différents.
Apparemment il y a un probleme avec les double, my_rand, f et Max3...
Cordialement
Bonjour,
Déjà, enlève tous les #define.
return Min1+(Max1-Min1)*((double)rand())/((double)RAND_MAX);
Mets plutôt : return Min1+(double)rand() / RAND_MAX * (Max1-Min+1);
Tu as oublié le main(). Du coup, pleins d'instruction sont hors fonction...
printf("%lf\n", my_rand(Min2.f, Max2.f));
Ce n'est pas %lf, mais %f qu'il faut utiliser. Ensuite, les arguments sont pas bons :
my_rand(2.0, 5.0); par exemple pour appeler la fonction my_rand().
Déjà, enlève tous les #define.
return Min1+(Max1-Min1)*((double)rand())/((double)RAND_MAX);
Mets plutôt : return Min1+(double)rand() / RAND_MAX * (Max1-Min+1);
Tu as oublié le main(). Du coup, pleins d'instruction sont hors fonction...
printf("%lf\n", my_rand(Min2.f, Max2.f));
Ce n'est pas %lf, mais %f qu'il faut utiliser. Ensuite, les arguments sont pas bons :
my_rand(2.0, 5.0); par exemple pour appeler la fonction my_rand().
Aïe ça pique,
Si on reprend avec tes defines:
Si on reprend avec tes defines:
#include <stdlib.h> #include <stdio.h> #include <time.h> #define Min1 5.56 #define Max1 27.25 #define Min2 500 #define Max2 4500 #define Min3 36 #define Max3 1151.08 double my_rand(double min, double max) { return min+(max-min)*((double)rand())/((double)RAND_MAX); } int main(int argc, char** argv) { srand(time(NULL)); double var1 = my_rand(Min1, Max1); double var2 = my_rand(Min2, Max2); double var3 = my_rand(Min3, Max3); // utilisation de var1, var2, var3 return 0; }
Sinon ce n'est pas rand()/RAND_MAX/(max-min)...
Il faut multiplier plutôt par max-min. Voir même max-min+1.
Et il faut rajouter min aussi.
printf("%lf\n", my_rand(8.f, 50.f));
Ce n'est pas %lf qu'il faut mettre mais %f.
Ce n'est pas 8.f ou 50.f qu'il faut mettre mais 8.0 et 50.0. Ou simplement 8. et 50..
Cdlt,
"Il faut multiplier plutôt par max-min. Voir même max-min+1."
Mouep, j'ai fait ça comme ça mais visiblement il y a bien d'autres techniques:
https://stackoverflow.com/questions/10776073/random-double-between-min-and-max
"Ce n'est pas %lf qu'il faut mettre mais %f. "
umpfff,
printf float=%f
printf double=%lf
printf double=%lf
Faut revoir ses bases en C !
print(), comme toutes les fonctions à nombre variable d'arguments réalise une promotion automatique de certains types. Par exemple les float sont convertis en double.
De fait, dans le printf, le %f sert au double (pas besoin de %lf).
en prime, il indique avec un code de couleur les sous-spécificateurs de taille introduits par C99 :-)
Dal