Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2360 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Problème de création de boucles

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème de création de boucles

n°1564454
Atlanted
Posté le 24-05-2007 à 11:05:36  profilanswer
 

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 :
 

Code :
  1. for(i=1; i<=9; i++){
  2.             printf("F %d : ", i);
  3.             scanf("%d", &temp);
  4.             tab[i-1] = temp;
  5.                            }
  6.         for(o=1; o<=9; o++){
  7.             x+= 20;
  8.             tabc[o-1] = x;
  9.                            }
  10.         for(p=1; p<=9; p++){
  11.             r+= 20;
  12.             tabd[p-1] = r;
  13.                            }


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 :

Code :
  1. if (tab[1] <= tabc[7] && tab[1] >= tabd[7]){
  2.                 printf("F 2 : %d -> D\n", tab[1]);
  3.                 fprintf(e, "F 2 : %d -> Dr\n", tab[1]); }
  4.         else if (tab[1]>=tabc[7]){
  5.                 printf("F 2 : %d -> C\n", tab[1]);
  6.                 fprintf(e, "F 2 : %d -> C\n", tab[1]); }
  7.         else if(tab[1]<=tabd[7]){
  8.                 printf("F 2 : %d -> D\n", tab[1]);
  9.                 fprintf(e, "F 2 : %d -> D\n", tab[1]); }


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
mood
Publicité
Posté le 24-05-2007 à 11:05:36  profilanswer
 

n°1564463
Trap D
Posté le 24-05-2007 à 11:13:15  profilanswer
 

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).

n°1564472
Atlanted
Posté le 24-05-2007 à 11:22:04  profilanswer
 

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 :(

n°1564553
bignose
Posté le 24-05-2007 à 13:21:21  profilanswer
 

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, ...
 

n°1564558
Trap D
Posté le 24-05-2007 à 13:30:10  profilanswer
 

bignose a écrit :

Trap D:
Tu n'as pas bien lu le code...

Et encore une victime de la lecture rapide  :o  

n°1564600
Atlanted
Posté le 24-05-2007 à 14:32:47  profilanswer
 

bignose a écrit :


Je suppose que tu compares l'indice 0 à l'indice 8,  1 à 7,  2 à 6,  3 à 5, ...


 
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 :sweat:  

n°1564727
Sve@r
Posté le 24-05-2007 à 17:09:17  profilanswer
 

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"...

Message cité 1 fois
Message édité par Sve@r le 24-05-2007 à 17:24:27

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1565021
Atlanted
Posté le 25-05-2007 à 10:33:20  profilanswer
 

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 :)

Message cité 1 fois
Message édité par Atlanted le 25-05-2007 à 10:33:47
n°1565217
Atlanted
Posté le 25-05-2007 à 15:24:55  profilanswer
 

Je tenais quand même à signaler que dans la réponse de Bignose c'est plutôt
 

Code :
  1. for  (i = 0;   i < 9;   i++)}
  2. if (tab[i] <= tabc[8-i] && tab[i] >= tabd[8-i])
  3. { printf("Fer %d : %d -> Distance dans la moyenne avec ce type de Fer\n", (i+1), tab[i]);
  4.   fprintf(e, "Fer %d : %d -> Distance dans la moyenne avec ce type de Fer\n", (i+1), tab[i]);
  5. }
  6. else if (tab[i]>=tabc[8-i])
  7. { printf("Fer %d : %d -> Ca m'etonnerait...\n", (i+1), tab[i]);
  8.   fprintf(e, "Fer %d : %d -> Ca m'etonnerait...\n", (i+1), tab[i]);
  9. }
  10. else if(tab[i]<=tabd[8-i])
  11. { printf("Fer %d : %d -> Distance inferieure a la normale pour ce type de club\n", (i+1), tab[i]);
  12.   fprintf(e, "Fer %d : %d -> Distance inferieure a la normale pour ce type de club\n", (i+1), tab[i]);
  13. } }


 
Enfin pour que ca fonctionne... je préfère préciser au cas où :)
 
Merci

n°1565220
_darkalt3_
Proctopathe
Posté le 25-05-2007 à 15:27:33  profilanswer
 

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.


---------------
Töp of the plöp
mood
Publicité
Posté le 25-05-2007 à 15:27:33  profilanswer
 

n°1565426
Sve@r
Posté le 25-05-2007 à 19:01:13  profilanswer
 

_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"...



Message édité par Sve@r le 25-05-2007 à 19:02:14

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1565465
_darkalt3_
Proctopathe
Posté le 25-05-2007 à 22:20:15  profilanswer
 

au temps pour moi j'ai lu en diagonal :o


---------------
Töp of the plöp

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Problème de création de boucles

 

Sujets relatifs
Problème requete SQL sur du PHP[JS] Problème de rafraichissement de l'affichage
DirectShow - Problème de FullScreen[HELP] Problème de Tableau
Problème d'installation du forum phpBBProbleme avec un module VBA
Problème de coordonnées...Unrecognized attribute 'requirePermission' - problème avec machine.con
Probleme avec Opera[Résolu]Problème d'affichage avec FCKEditor
Plus de sujets relatifs à : Problème de création de boucles


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR