problème programme Tableau

problème programme Tableau - C - Programmation

Marsh Posté le 05-12-2007 à 20:10:47    

Bonsoir, tout le monde, je dois fais un programme qui réalise la saisie de 10 entier positif et dont la fin de la saisie s'arrete au bout du 10ème (effectué), et qui selon une valeur rentrée de recherche, soit affiche la valeur du tableau la plus proche de cette valeur rentrée soit affiche valeur présente en position x.  
 
Donc moi, je bloque sur l'affichage la valeur du tableau la plus proche de cette valeur rentrée. J'ai essayé de faire la différence entre la valeur rentrée et la valeur du tableau sans succés.
 
Voici mon code  
 


#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
int main(void) {
 
 
int i, T[10],nb,test=0,d;      
 
for(i=0;i<=9;i++)
{
do{    
       printf("Entrez votre nombre\n" );
       scanf("%d",&T[i]);
 }  
       while(T[i]<0);    
       
 }
 
for(i=0;i<=9;i++)
{
printf("\nT[%d]=%d\n", i,T[i]);
         
}
 
printf("Entrez une valeur entiere a rechercher\n" );
scanf("%d",&nb);
 
 
for(i=0;i<=9;i++)
{
if (T[i]==nb){
              printf("la valeur est presente en position n %d",i);
              test=1;
              }
                 else  
                     {
                       if(abs(nb-T[i])<abs(nb-T[i+1]))
                                                     {
                                                     d=T[i];
                                                     }    
                                                      else
                                                          {d=T[i+1];      
                                                          }  
                       
                      }        
                     
 
 }                      
     
 
if(test==0){
        printf("%d est plus proche %d\n",nb,d);
           }
 
 
system("pause" );
 
return 0;
}


 
 
Voila je vous en serais trés reconnaissant de toute aide que vous allez m'apporter car là je galère grave merci.


Message édité par vyse75 le 05-12-2007 à 21:59:26
Reply

Marsh Posté le 05-12-2007 à 20:10:47   

Reply

Marsh Posté le 05-12-2007 à 21:40:02    

C'est pas du C++, je déplace dans C.

Reply

Marsh Posté le 05-12-2007 à 21:45:07    

Voila, ensutie, j'ai la flemme de chercher dans ce code parce qu'il est si mal indenté qu'il en est illisible. Bien présenter son code permet de localiser des erreurs d'un seul coup d'oeil et permet aussi simplement de comprendre le programme, donc c'est important.
 
De toute façon, ton programme ne compile pas :

C:\Program Files\CodeBlocks\seb\test.c: In function `int main()':
C:\Program Files\CodeBlocks\seb\test.c:39: error: expected `)' before '{' token
C:\Program Files\CodeBlocks\seb\test.c:48: error: expected primary-expression before '}' token
C:\Program Files\CodeBlocks\seb\test.c:48: error: expected `;' before '}' token

Reply

Marsh Posté le 05-12-2007 à 22:00:17    

Ok désolé, voila j'ai fais quelques efforts de présentation et régler les problèmes qui génaient.

Reply

Marsh Posté le 05-12-2007 à 22:33:11    

Déjà tu as un gros problème lorsque tu testes nb avec T[i] avec i==9, parce que tu vas comparer à T[i+1] qui est un élément du tableau qui n'existe pas.
Cela induit un comportement aléatoire : parfois ça marche, parfois ça fait semblant de marcher mais ça produit n'importe quoi, parfois ça plante.

 

Il faut donc que tu corriges ça.

 

Ensuite, tu n'as pas besoin de math.h.

 

Mais le plus important, c'est que l'algorithme que tu emploies est faux.
Je vais te mettre sur la piste, ton programme agit de cette façon :
SI l'écart avec l'élément courant est plus petit que l'écart avec l'élément suivant
ALORS
   position de référence = position courante
SINON
   position de référence = position suivante
FINSI

 

Essaie de dérouler cet algorithme, et tu devrais trouver pourquoi il est faux. ;)

 

(et ton indentation est vraiment peu... orthodoxe [:pingouino])


Message édité par Elmoricq le 05-12-2007 à 22:33:23
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed