Remplissage d'un tableau avec des nombres aléatoires
Actuellement, je suis en train de remplir un tableau de taille num avec des valeurs aléatoires. Pour ce faire, j'ai besoin de créer deux fonctions:
1: Écrire une fonction (*createdata) qui alloue un tableau dynamique de num double des valeurs, de l'initialisation des valeurs à 0,0.
2: Écrire un différents fonction (gendata) qui permettra de remplir un tableau de valeurs doubles avec des valeurs aléatoires générées à l'aide de la fonction rand ().
Voici ma tentative d'écriture de la façon dont les fonctions opèrent (en dehors de la fonction main() ):
double *createdata(int num)
{
int i = 0;
double *ptr;
ptr = (double *)malloc(sizeof(double)*num);
if(ptr != NULL)
{
for(i = 0; i < num; i++)
{
ptr[i] = 0.0;
}
}
}
double gendata(int num)
{
createdata(num);
int j = 0;
for(j = 0; j < num; j++)
{
ptr[j] = rand();
}
}
Cependant, je sais qu'il y a certainement quelque chose de mal avec l'au-delà.
Ce que je voudrais, c'est qu'une fois que j'ai appelé deux fonctions principales, je vais avoir généré un tableau de taille num qui est rempli avec des nombres aléatoires.
- Un petit indice: il n'y a pas de return dans l'un de vos fonctions.
- Si j'ajoute de retour(ptr) à la fin de mon *createdata fonction que faire l'affaire?
- Votre
gendata()
fonction ne correspond pas à la spécification de remplir un tableau dedouble
avec des valeurs aléatoires; il correspond à la spécification de générer et de remplir un tableau dedouble
avec des valeurs aléatoires. Vous pouvez réviser le cahier des charges ou le code; dans l'ensemble, la révision du code sera plus utile à la fonction. Ensuite, vous n'avez pas besoin renvoyer rien devoid gendata(double *array, int num)
.
Vous devez vous connecter pour publier un commentaire.
Vous devez passer le pointeur alloué à la
gendata
fonction, parce que dans sa forme actuelle,ptr
est inconnue. Est-ce que même le compiler?Exemple:
Et:
A noter également que je suis vérification pour le retour
NULL
nouveau demalloc
.D'autres astuces autres pourraient dire ici:
malloc
.free
le pointeur après vous l'utiliser entièrement.gendata
, mais vous avez déclaré commedouble
. Utilisationvoid
au lieu de cela, si vous n'allez pas retourner quoi que ce soit.Mais vous êtes probablement va avoir besoin de retourner le pointeur de toute façon, de sorte que vous pouvez l'utiliser plus tard dans d'autres fonctions, telles que
main
.EDIT: Donc, ce serait comme ça, comme un exemple:
Et dans votre
main
:malloc
, pourquoi le faites-vous?Vous avez besoin de retourner un tableau alloué dans le createdata fonction de (), sinon, vous ne pouvez pas l'utiliser dans gendata(), ou n'importe où ailleurs.
Je ne suis pas sûr pourquoi gendata() est déclarée comme retournant un double, soit.
Dans createdata(), vous avez oublié de fait retourner le pointeur de la nouvellement allouée tableau à la fin:
Aussi, votre gendata() la fonction a besoin de travailler sur un tableau, de ne pas générer ses propres. Vous devez ajouter, comme un argument. Aussi, il n'a pas besoin de retourner quoi que ce soit. Donc:
Cependant, vous pouvez simplifier le ci-dessus et de réduire le niveau d'imbrication:
Noter que
double ptr[]
signifie en fait le même quedouble* ptr
, mais le[]
syntaxe rend plus évident que la fonction veut, c'est un pointeur vers un tableau de doubles plutôt qu'un pointeur à un seuldouble
.Maintenant afin de créer un tableau et ensuite aléatoire, vous feriez:
Bien, je ne suis pas assez familier avec la façon malloc œuvres, bien qu'il ressemble à ça fonctionnera très bien, donc je ne peux pas l'évaluer, mais le seul problème que je peux voir ici ce sont:
Vous n'êtes pas de retour
ptr
dans votrecreatedata
fonction. Ainsi, lorsque vous essayez d'accéder àptr
dans votregendata
fonction, il n'y a pas deptr
tableau dans la portée. Qui vous donnera une erreur. Aussi,gendata
fonction n'est pas à même de retourner quoi que ce soit.Regardez ce code, cela devrait fonctionner:
Je crois que cela fonctionne, voici un exemple d'utilisation:
cout
, et aussi le mélange des déclarations avec le code...