Autre

Tableaux Mac C++ et nombres aléatoires

iBookG4user

Affiche originale
27 juin 2006
Seattle, WA
  • 20 sept. 2009
Ils mettent les tuteurs pour C++ aux moments les plus inopportuns de mon collège... Quoi qu'il en soit, l'instructeur a publié les instructions suivantes :

'Écrivez une fonction qui remplira un tableau avec 25 nombres aléatoires entre 1 et 10. Ensuite, écrivez une fonction qui imprimera le tableau. Écrivez du code dans main pour tester vos fonctions. Parfois, ce code de test est appelé *pilote

N'utilisez pas de variables globales ici. Passer le tableau à la fonction via la liste des paramètres'

Mon code actuel n'entraîne aucune erreur dans le débogueur, mais il ne génère pas le tableau. Et je ne sais pas ce qu'il veut dire en écrivant au chauffeur, qu'est-ce que je suis censé tester ? Vous vous êtes tous avérés extrêmement utiles dans le passé et je suis sûr que vous m'aiderez à m'orienter dans la bonne direction cette fois

Code : |_+_|

lee1210

10 janvier 2005


Dallas, Texas
  • 20 sept. 2009
Quelques petites choses : Votre tableau doit être de type int[], pas double[]. Vous devez accepter un tableau int à produire et à imprimer. Vous devez déclarer un int[] dans main, le passer à produire, le remplir là, puis le passer à print. Les<< operator of ofstream does not deal with arrays as you'd hope, so you'll need to loop to display in print.

Aussi, et je suis sûr que c'est une erreur honnête, je suis sûr que votre professeur voulait dire pseudo- Aléatoire.

De plus, dans main, vous déclarez de nouveaux double()s, sans invoquer product et print. Supprimez le double là-bas, transmettez un argument comme indiqué ci-dessus et modifiez le type de retour de ces deux éléments en void.

-Lire

grinceur729

Suspendu
25 novembre 2005
  • 20 sept. 2009
Comment écririez-vous un prototype de fonction pour la fonction « produire » ?
Et comment écririez-vous un appel à la fonction « produire » ?

Et à l'intérieur de votre fonction « principale », laquelle des deux avez-vous écrite, un prototype de fonction ou un appel de fonction ?

iBookG4user

Affiche originale
27 juin 2006
Seattle, WA
  • 20 sept. 2009
lee1210 a dit : Quelques choses : Votre tableau doit être de type int[], pas double[]. Vous devez accepter un tableau int à produire et à imprimer. Vous devez déclarer un int[] dans main, le passer à produire, le remplir là, puis le passer à print. Les<< operator of ofstream does not deal with arrays as you'd hope, so you'll need to loop to display in print.

Aussi, et je suis sûr que c'est une erreur honnête, je suis sûr que votre professeur voulait dire pseudo- Aléatoire.

De plus, dans main, vous déclarez de nouveaux double()s, sans invoquer product et print. Supprimez le double là-bas, transmettez un argument comme indiqué ci-dessus et modifiez le type de retour de ces deux éléments en void.

-Lire

D'accord, j'ai apporté les modifications que vous avez suggérées et le code semble plus logique. Bien que maintenant j'obtienne trois erreurs dans les boucles for.

Code : |_+_|

Pièces jointes

  • Capture d'écran 20/09/2009 à 5.42.31 PM.png Capture d'écran du 20/09/2009 à 5h42.31 PM.png'file-meta'> 178,1 Ko · Vues : 1 941

lee1210

10 janvier 2005
Dallas, Texas
  • 20 sept. 2009
Changez le type d'argument de produire en int[] ou int *. Pour le moment, c'est juste un entier, vous ne pouvez donc pas utiliser [], etc. Il en va de même pour l'impression. De plus, vous n'avez pas besoin de retourner quoi que ce soit du produit ou de l'impression. Changez leur type de retour en void.

Je pense que l'intention est que vous rappeliez print dans main, ce qui devrait être bien.

De plus, lorsque vous passez array à produire, utilisez simplement array et non *array.

-Lire

iBookG4user

Affiche originale
27 juin 2006
Seattle, WA
  • 20 sept. 2009
lee1210 a dit : changez le type d'argument de produire en int[] ou int *. Pour le moment, c'est juste un entier, vous ne pouvez donc pas utiliser [], etc. Il en va de même pour l'impression. De plus, vous n'avez pas besoin de retourner quoi que ce soit du produit ou de l'impression. Changez leur type de retour en void.

Je pense que l'intention est que vous rappeliez print dans main, ce qui devrait être bien.

De plus, lorsque vous passez array à produire, utilisez simplement array et non *array.

-Lire

Ça a marché
Maintenant, savez-vous ce qu'il voulait dire en écrivant le code pour tester les fonctions ? Que veut-il dire par là? Et merci beaucoup pour votre aide jusqu'à présent!

Code : |_+_|

chown33

Modérateur
Membre du staff
9 août 2009
le plan abyssal
  • 20 sept. 2009
iBookG4user a dit : Maintenant, savez-vous ce qu'il voulait dire en écrivant le code pour tester les fonctions ? Que veut-il dire par là?

La spécification dit que les nombres dans le tableau doivent être compris entre 1 et 10. Vous pouvez écrire un test qui le confirme.

Il a également dit que les nombres devraient être aléatoires. Alors que l'aléatoire peut être plus difficile à tester qu'il n'y paraît, le non-aléatoire simple peut être facile à tester. Le plus simple est de vérifier que tous les nombres n'ont pas la même valeur. Des tests plus complexes d'aléatoire utilisent des analyses statistiques.

Un autre test que vous pouvez écrire consiste à confirmer que la fonction produire () renvoie des valeurs différentes à chaque fois qu'elle est appelée. Il s'agit d'une forme simple d'analyse statistique, c'est-à-dire de s'assurer que les appels consécutifs ont des résultats indépendants.

Vous devriez également envisager d'initialiser le tableau avec des valeurs invalides connues, telles que -1 ou 0, avant d'appeler produire(). Sinon, un tableau local non initialisé peut déjà contenir des valeurs imprévisibles, qu'un test pourrait interpréter comme aléatoires même si produire() ne fait rien du tout.

En tant que spécification, l'énoncé des travaux est quelque peu vague. D'une part, il ne précise pas quels tests il doit passer. Croyez-moi, si vous laissez à la plupart des programmeurs le choix des tests de qualification, c'est une grosse erreur. Le code pouvait fonctionner dans un seul cas, ce qui était le cas utilisé par le programmeur pour développer le code. Si cela semble fou, je peux vous assurer que c'est arrivé.

iBookG4user

Affiche originale
27 juin 2006
Seattle, WA
  • 20 sept. 2009
C'était assez simple, merci !
Cela a fonctionné un régal:
Code : |_+_| S

Ponceuse

à
24 avril 2008
  • 21 sept. 2009
iBookG4user a dit : C'était assez simple, merci !
Cela a fonctionné un régal:

Essayez de mettre un nombre « invalide » dans votre tableau (disons, 11) et voyez si cette fonction le détecte.

iBookG4user

Affiche originale
27 juin 2006
Seattle, WA
  • 21 sept. 2009
Sander a dit : essayez de mettre un nombre « invalide » dans votre tableau (disons 11) et voyez si cette fonction le détecte.

J'ai temporairement défini le tableau pour autoriser les nombres supérieurs à 10 et il l'a détecté, merci S

Ponceuse

à
24 avril 2008
  • 22 sept. 2009
iBookG4user a déclaré : j'ai temporairement configuré le tableau pour autoriser les nombres supérieurs à 10 et il l'a détecté, merci

Même si ce n'est pas le premier élément du tableau..?

La raison pour laquelle je pose la question est que votre fonction print() (au moins la dernière version affichée dans ce fil) ne renvoie que le premier élément du tableau (converti en double).