Random
biba
-
fiddy Messages postés 11653 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11653 Date d'inscription Statut Contributeur Dernière intervention -
Bonsoir,
en incluant la fonction random pour la récupération des nombres aléatoires, j'obtiendrais le message suivant:
undefined reference to `Rand'
Voilà mon bout du code:
int main(int argc,char** argv)
{float * a,*b;
int size,i,j;
srand(time(NULL)); //initialise le generateur de nbre aleatoire
size=atoi(argv[1]);
a=(float*)malloc(size*sizeof(float));
b=(float*)malloc(size*sizeof(float));
for(i=0;i<size;i++)
for(j=0;j<size;j++)
a[i*size+j]=(Rand() % 10) + 1;//nombre entre 0 et 10
for(i=0;i<size;i++)
b[i]=(Rand() % 10) + 1;
Solve( a, b, size);
return (0);
}
Merci d'avance.
en incluant la fonction random pour la récupération des nombres aléatoires, j'obtiendrais le message suivant:
undefined reference to `Rand'
Voilà mon bout du code:
int main(int argc,char** argv)
{float * a,*b;
int size,i,j;
srand(time(NULL)); //initialise le generateur de nbre aleatoire
size=atoi(argv[1]);
a=(float*)malloc(size*sizeof(float));
b=(float*)malloc(size*sizeof(float));
for(i=0;i<size;i++)
for(j=0;j<size;j++)
a[i*size+j]=(Rand() % 10) + 1;//nombre entre 0 et 10
for(i=0;i<size;i++)
b[i]=(Rand() % 10) + 1;
Solve( a, b, size);
return (0);
}
Merci d'avance.
A voir également:
- Random
- Chat random - Accueil - Réseaux sociaux
- Random. chat - Accueil - Réseaux sociaux
- Random MixTape Maker - Télécharger - Lecture & Playlists
- Random pc freeze - Guide
- Random Password Generator - Télécharger - Sécurité
2 réponses
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 ^_^).
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,
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