Variables aléatoires
Fermé
MaximeTestori
Messages postés
10
Date d'inscription
mardi 20 mai 2014
Statut
Membre
Dernière intervention
28 avril 2015
-
20 mai 2014 à 08:18
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 21 mai 2014 à 10:45
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 21 mai 2014 à 10:45
A voir également:
- Variables aléatoires
- Algorithme permutation 3 variables - Forum Programmation
- Nuage de points excel 3 variables ✓ - Forum Bureautique
- Graphique a trois variables - Forum Excel
- Aucun débogueur disponible. impossible d'envoyer 'variables' - Forum Programmation
- Algorithme permutation 2 variables - Forum Programmation
8 réponses
Twinuts
Messages postés
5375
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
14 juin 2023
2
20 mai 2014 à 09:46
20 mai 2014 à 09:46
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; }
MaximeTestori
Messages postés
10
Date d'inscription
mardi 20 mai 2014
Statut
Membre
Dernière intervention
28 avril 2015
20 mai 2014 à 09:58
20 mai 2014 à 09:58
oui, par exemple une de mes variable s'appelle DiffTemps et la valeur aléatoire doit être comprise entre 5.56 et 27.25.
Twinuts
Messages postés
5375
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
14 juin 2023
2
20 mai 2014 à 10:01
20 mai 2014 à 10:01
Salut,
Donc normalement la fonction "my_rand" devrait faire l'affaire.
Donc normalement la fonction "my_rand" devrait faire l'affaire.
my_rand(5.56, 27.25);
MaximeTestori
Messages postés
10
Date d'inscription
mardi 20 mai 2014
Statut
Membre
Dernière intervention
28 avril 2015
20 mai 2014 à 10:11
20 mai 2014 à 10:11
Je ne la connaissais pas...
OK merci je vais essayer
OK merci je vais essayer
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
MaximeTestori
Messages postés
10
Date d'inscription
mardi 20 mai 2014
Statut
Membre
Dernière intervention
28 avril 2015
20 mai 2014 à 10:18
20 mai 2014 à 10:18
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));
Twinuts
Messages postés
5375
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
14 juin 2023
2
20 mai 2014 à 10:23
20 mai 2014 à 10:23
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; }
MaximeTestori
Messages postés
10
Date d'inscription
mardi 20 mai 2014
Statut
Membre
Dernière intervention
28 avril 2015
20 mai 2014 à 10:36
20 mai 2014 à 10:36
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...
MaximeTestori
Messages postés
10
Date d'inscription
mardi 20 mai 2014
Statut
Membre
Dernière intervention
28 avril 2015
Modifié par MaximeTestori le 20/05/2014 à 13:27
Modifié par MaximeTestori le 20/05/2014 à 13:27
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
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 835
20 mai 2014 à 16:11
20 mai 2014 à 16:11
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().
Twinuts
Messages postés
5375
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
14 juin 2023
2
21 mai 2014 à 08:19
21 mai 2014 à 08:19
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; }
20 mai 2014 à 12:13
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,
21 mai 2014 à 08:12
"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
21 mai 2014 à 09:51
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).
Modifié par [Dal] le 21/05/2014 à 10:48
en prime, il indique avec un code de couleur les sous-spécificateurs de taille introduits par C99 :-)
Dal