Problème de création de boucles - C - Programmation
Marsh Posté le 24-05-2007 à 11:13:15
D'abord en C, on boucle de 0 à n-1c'est-à-dire que si tu as un tableau de 10 éléments, le premier élément est numéroté 0 et le dernier 9.
Donc d'abord revois le remplissage de tes tableaux, car ta boucle de i 1 a 9 provoque ce qu'on appelle un comportement imprévisible, c'est-à-dire que ça peut fonctionner ou ne pas fonctionner (en général ça marche chez toi mais quand tu présentes fièrement ton travail au prof ça plante ! bienvenue dans l'univers merveilleux des programmeurs C).
Marsh Posté le 24-05-2007 à 11:22:04
Trap D a écrit : D'abord en C, on boucle de 0 à n-1c'est-à-dire que si tu as un tableau de 10 éléments, le premier élément est numéroté 0 et le dernier 9. |
Oui je sais mais ça m'arrangeait bien de commencer à 1
Marsh Posté le 24-05-2007 à 13:21:21
Trap D:
C n'est pas VB, les tableaux commencent TOUJOURS à 0 et pas à 1. Que tu utilises l'élément 0 ou pas dépend de ce que tu veux faire dans ton code. Et n'a aucun side-effect autre que les bugs que peux contenir le code. Tu n'as pas bien lu le code...
Atlanted :
Essaie ça, ça devrait marcher:
for (i = 0; i < 9; i++)
if (tab[i] <= tabc[8-i] && tab[i] >= tabd[8-i])
{ printf("Fer %d : %d -> Distance dans la moyenne avec ce type de Fer\n", (i+1), tab[0]);
fprintf(e, "Fer %d : %d -> Distance dans la moyenne avec ce type de Fer\n", (i+1), tab[0]);
}
else if (tab[i]>=tabc[8-i])
{ printf("Fer %d : %d -> Ca m'etonnerait...\n", (i+1), tab[0]);
fprintf(e, "Fer %d : %d -> Ca m'etonnerait...\n", (i+1), tab[0]);
}
else if(tab[i]<=tabd[8-i])
{ printf("Fer %d : %d -> Distance inferieure a la normale pour ce type de club\n", (i+1), tab[0]);
fprintf(e, "Fer %d : %d -> Distance inferieure a la normale pour ce type de club\n", (i+1), tab[0]);
}
Je suppose que tu compares l'indice 0 à l'indice 8, 1 à 7, 2 à 6, 3 à 5, ...
Marsh Posté le 24-05-2007 à 13:30:10
ReplyMarsh Posté le 24-05-2007 à 14:32:47
bignose a écrit : |
Effectivement j'essaye bien de faire cette comparaison.
Merci pour l'aide apporter ça fonctionne, ce qui m'énerve c'est de voir la simplicité de la réponse et de ne pas avoir réussit à le découvrir moi même
Marsh Posté le 24-05-2007 à 17:09:17
Atlanted a écrit : Oui je sais mais ça m'arrangeait bien de commencer à 1 |
Dans ton code on ne voit pas pourquoi. Si c'est juste pour avoir un effet d'affichage (du style "la valeur n° 1 est xxx, la valeur n° 2 est yyy etc" alors ça vaut pas le coup. Surtout que si on doit travailler 12 fois sur un élément, faudra écrire 12 fois "[i - 1]" et le pgm fera 12 fois le boulot de la soustraction.
Avec un peu d'entrainement, on prend vite l'habitude de faire comme le C et, au lieu de travailler de "1" à "=n" et de traiter l'indice "i - 1", on préfère travailler comme lui de "0" à "<n" en traitant l'indice "i". Surtout qu'au niveau assembleur, tester "<=" est toujours plus long que tester "<"...
Et si jamais on veut quand-même avoir un effet d'affichage "humanisé", là on affiche "i + 1"...
Marsh Posté le 25-05-2007 à 10:33:20
Sve@r a écrit : Dans ton code on ne voit pas pourquoi. Si c'est juste pour avoir un effet d'affichage (du style "la valeur n° 1 est xxx, la valeur n° 2 est yyy etc" alors ça vaut pas le coup. Surtout que si on doit travailler 12 fois sur un élément, faudra écrire 12 fois "[i - 1]" et le pgm fera 12 fois le boulot de la soustraction. |
Dans mon code c'était effectivement pour avoir valeur n° 1 = ... donc j'avais besoin de commencer à 1
Marsh Posté le 25-05-2007 à 15:24:55
Je tenais quand même à signaler que dans la réponse de Bignose c'est plutôt
Code :
|
Enfin pour que ca fonctionne... je préfère préciser au cas où
Merci
Marsh Posté le 25-05-2007 à 15:27:33
Atlanted a écrit : Dans mon code c'était effectivement pour avoir valeur n° 1 = ... donc j'avais besoin de commencer à 1 |
Non, tu pouvais incrémenter l'indice juste pour l'affichage.
Marsh Posté le 25-05-2007 à 19:01:13
_darkalt3_ a écrit : Non, tu pouvais incrémenter l'indice juste pour l'affichage. |
Déjà dit
Citation : Et si jamais on veut quand-même avoir un effet d'affichage "humanisé", là on affiche "i + 1"... |
Marsh Posté le 25-05-2007 à 22:20:15
Reply
Marsh Posté le 24-05-2007 à 11:05:36
Bonjour,
J'ai une difficulté dans la réalisation d'une boucle, si quelq'un pouvait m'éclairer :
Voici mon souci, j'ai crée les trois boucles suivantes où je range mes données dans des tableaux :
Je voudrais ensuite faire une comparaison des données de chaque tableaux pour imprimer les resultats dans un fichier, j'ai fais ceci de la facon suivante :
etc.........
Je sais que j'ai possiblité de faire ceci via une boucle mais je n'y arrive pas . Précisons que j'ai un niveau débutant donc je cherche à faire les choses de la manière la plus simple.
Message édité par Atlanted le 31-05-2007 à 11:05:22