Random
Fermé
biba
-
15 mars 2010 à 17:19
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 16 mars 2010 à 20:11
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 16 mars 2010 à 20:11
A voir également:
- Random
- Random pascal - Forum Pascal
- Random en c++ - Forum C++
- Random en c ✓ - Forum C
- Random password - Télécharger - Sécurité
- Quiksilver random - Forum Programmation
2 réponses
mohammed3011
Messages postés
23
Date d'inscription
mardi 5 août 2008
Statut
Membre
Dernière intervention
18 février 2011
16 mars 2010 à 12:06
16 mars 2010 à 12:06
est ce que ta ajouté la bibliothèque qui contient la fonction RAND() au header?
si je me rappelle bien time.h(pas sur ^_^).
si je me rappelle bien time.h(pas sur ^_^).
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
16 mars 2010 à 20:11
16 mars 2010 à 20:11
Bonsoir,
Le problème était tout simple.
Le compilateur dit : "undefined reference to `Rand'".
Effectivement la fonction n'est pas Rand() mais rand() en minuscule. Le compilateur respecte la casse.
La version j=1+(rand() % 10) fonctionnera donc correctement (avec, bien sûr, rand() en minuscule).
Mais pour respecter l'équiprobabilité, il vaut mieux s'appuyer sur les poids forts comme tu l'as si bien dit.
Ensuite, il y a un problème dans ces lignes :
a=(float*)malloc(size*sizeof(float));
for(i=0;i<size;i++)
for(j=0;j<size;j++)
a[i*size+j]=...;//nombre entre 0 et 10
i*size+j est la plupart du temps plus grand que size. Donc, il y aura un bufferoverflow pour i>=1 compte tenu de la taille du tableau.
De plus, j'ajoute quelque précision sur le code.
Tu devrais vérifier que size est supérieur à 0 sinon malloc va échouer.
N'oublie pas de vérifier la valeur de retour des malloc.
N'oublie pas de libérer les ressources allouées avec free.
Le cast devant malloc est inutile, puisqu'il y a cast implicite.
Dans la plupart des cas, tu devrais mieux utiliser double que float.
return (0);
Il n'y a pas besoin de parenthèse, return n'est pas une fonction. Un simple return 0; suffit.
Cdlt,
Le problème était tout simple.
Le compilateur dit : "undefined reference to `Rand'".
Effectivement la fonction n'est pas Rand() mais rand() en minuscule. Le compilateur respecte la casse.
La version j=1+(rand() % 10) fonctionnera donc correctement (avec, bien sûr, rand() en minuscule).
Mais pour respecter l'équiprobabilité, il vaut mieux s'appuyer sur les poids forts comme tu l'as si bien dit.
Ensuite, il y a un problème dans ces lignes :
a=(float*)malloc(size*sizeof(float));
for(i=0;i<size;i++)
for(j=0;j<size;j++)
a[i*size+j]=...;//nombre entre 0 et 10
i*size+j est la plupart du temps plus grand que size. Donc, il y aura un bufferoverflow pour i>=1 compte tenu de la taille du tableau.
De plus, j'ajoute quelque précision sur le code.
Tu devrais vérifier que size est supérieur à 0 sinon malloc va échouer.
N'oublie pas de vérifier la valeur de retour des malloc.
N'oublie pas de libérer les ressources allouées avec free.
Le cast devant malloc est inutile, puisqu'il y a cast implicite.
Dans la plupart des cas, tu devrais mieux utiliser double que float.
return (0);
Il n'y a pas besoin de parenthèse, return n'est pas une fonction. Un simple return 0; suffit.
Cdlt,
16 mars 2010 à 19:53
merci pour votre réponse, bien sur j'ai ajouté la bib au header mais c pas ça était le pb.En effet, j'ai résolu le pb en mettant:
j=1+(int) (10.0*rand()/(RAND_MAX+1.0));en s'appuyant sur le poid fort au lieu de:
j=1+(rand() % 10);
merci