tirage aléatoire sans remise - C - Programmation
Marsh Posté le 16-12-2004 à 16:05:01
J'ai même pas envie de dérouler ton algo. Pourquoi tu ne le fais pas de façon plus claire et plus rapide en:
Pour i=1 à 6 |
Marsh Posté le 16-12-2004 à 16:07:31
Lam's a écrit : J'ai même pas envie de dérouler ton algo. Pourquoi tu ne le fais pas de façon plus claire et plus rapide en:
|
Peut-être parce-que ça fait pas la même chose?
Marsh Posté le 16-12-2004 à 16:10:55
skeye a écrit : Peut-être parce-que ça fait pas la même chose? |
J'ai pas l'impression que son code assure la non-remise, vu qu'il n'inverse pas les valeurs (à part la boucle k bidule, que j'ai la flemme de comprendre).
Marsh Posté le 16-12-2004 à 16:18:29
c le but de la boucle K bidule. Sinon c'est bien plus simple effectivement
Marsh Posté le 18-12-2004 à 08:45:30
J'ai matté ton algo et j'ai pas vraiment trouvé d'erreur.
T'as pas de debuggeur pour voir exactement les valeurs que prennent les variables ?
Tu peux faire la meme chose avec 3-4 lignes de moins mais si tu comprends mieux comme ca, tant mieux : chacun ses méthodes
Marsh Posté le 18-12-2004 à 11:01:52
CCIman a écrit :
|
Voilà un cas assez typique de code difficile à lire parce qu'il ne respecte pas un principe de codage simple qui veut que la portée d'un objet doit être limitée au strict nécessaire.
Je propose de réécrire ce code (la sémantique est inchangée) selon ce principe, ce qui AMA le rend immédiatement plus clair. (J'ai ajouté mes habituels manies : commentaires C90, suppression des accents et réindentation) :
Code :
|
Autre avantage de cet écriture, la préparation du code à un découpage en fonction...
J'ai placé un point d'arrêt en ligne 67 pour visualiser le contenu de j:
|
Y'a un problème! (la valeur devrait être comprise entre 0 et 11)
Comme le contenu de 'j' sert d'index au tableau ligne, je comprend que ça casse! Il y a un bug dans l'algo de tirage. Pourquoi n'a-t-il pas été validé individuellement ?
En fait, c'est simple. Au premier tour, 'test' est forcé à 1 (ligne 44). Ensuite, while (test == 0) est toujours faux, et on n'écrit jamais dans j[1]-j[5], ce qui explique la trace ci-dessus...
Voici un exemple de validation (au moins visuelle) de l'algorithme:
L'interface:
Code :
|
L'implementation:
Code :
|
Pour faire le test, compiler tirage.c avec -DTEST
|
Evidemment, on obtient toujours le même résultat poutr implémentation donnée (ici Borland C 3.1) On peut améliorer avec srand()...
Ensuite, dans l'applicaion, on inclus "tirage.h", et on ajoute tirage.c dans le projet. On appelle la fonction tirage avec le parametres qui vont bien.
Le travail en module indépendants et testables et indispensable si on veut écrire du code sérieusement. De plus, la modularité permet souvent la réutilisation d'objet validés, ce qui est un avantage certain que ce soit pour le développeur, son employeur ou le client final :
[i]Nota : le micro test que j'ai indiqué n'est qu'un embryon d'ébauche de début de test de validation unitaire... Dans la réalité, c'est beaucoup plus 'velu!'
Marsh Posté le 16-12-2004 à 15:47:03
Bonjour, j'aimerais tirer au hasard 6 valeurs sur un ensemble de 12 valeurs. Je fais entrer les 12 valeurs manuellement mais mon programme bug. Quand je l'execute y'a genre une violation d'adresse ou un truc du genre. (Pour le fopen c'est juste que quand ca marchera j'utiliserais un fichier pour enregistrer les résultats)