Random

biba -  
fiddy Messages postés 441 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.
Configuration: Linux / Firefox 3.0.18

2 réponses

  1. mohammed3011 Messages postés 25 Statut Membre
     
    est ce que ta ajouté la bibliothèque qui contient la fonction RAND() au header?
    si je me rappelle bien time.h(pas sur ^_^).
    0
    1. biba
       
      Bonsoir,
      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
      0
  2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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,
    0