Langage c les tableau

Résolu
phenix1304 Messages postés 9 Statut Membre -  
bar056 Messages postés 358 Statut Membre -
Bonjour tous le monde

j'ai un programme qui determine le plus petit ecart entre elements de tableau .
j'ai essai avec ca
int t[100],i,j,p,s;
int n;
printf("nombre 'element de tableau :");
scanf("%d",&n);
for (i=0;i<n;i++)
{
printf("t[%d] = ",i);
scanf("%d",&t[i]);
}
p=0;
for(i=0;i<n-1;i++)
{
for(j=0;j<n;j++)
{
if (t[i]-t[j])= p{ ;
p=s}
}}
printf("le plus petit ecart entre elements de tableau %d \n",p);

mais il ne marche pas je voudrais votre solution svp ?

6 réponses

  1. jisisv Messages postés 3678 Statut Modérateur 936
     
    Ceci devrait fonctionner:
    ohand@osiris: ~/src/CCM/C $ cat ecart.c 
    #include <stdlib.h> 
    #include <stdio.h> 
    #include <limits.h> 
    #define SIZE 100 
    int main(int argc, char* argv[]) 
    { 
      unsigned int n; 
      int t[SIZE]; 
      unsigned int i,j ; 
      unsigned int d , delta, i1, i2; 
    
      printf("nombre 'element de tableau :"); 
      scanf("%d",&n); 
    
      if( n >SIZE ) 
        n=SIZE ; 
      if( n<0 ) 
        exit(EXIT_SUCCESS); 
    
      for (i=0; i<n; i++) 
        { 
          printf("t[%d] = ",i); 
          scanf("%d",&t[i]); 
        } 
    
      delta = UINT_MAX; 
    
      for(i=0; i<n; i++) 
        { 
          for(j = i+1; j < n; j++) 
     { 
       d = abs(t[i]-t[j]); 
       if ( d < delta ) 
         {  
           delta = d; 
           i1 = i;  
           i2=j; 
         } 
     } 
        } 
      printf("\nle plus petit écart entre élements de tableau est %d: t[%d]= %d, t[%d] = %d \n", delta, i1, t[i1], i2, t[i2]);  
      exit(EXIT_SUCCESS); 
    } 
    johand@osiris: ~/src/CCM/C $ head -11 data.txt  
    10 
    9890 
    30979 
    21417 
    11978 
    1675 
    7859 
    8046 
    7748 
    16218 
    12281 
    johand@osiris: ~/src/CCM/C $ ./ecart < data.txt  
    nombre 'element de tableau :t[0] = t[1] = t[2] = t[3] = t[4] = t[5] = t[6] = t[7] = t[8] = t[9] =  
    le plus petit écart entre élements de tableau est 111: t[5]= 7859, t[7] = 7748 


    Gates gave ^H sold you the windows.
    GNU gave us the whole house.(Alexandrin)
    3
  2. Nexo
     
    @jisisv int t[SIZE]; ??

    Sinon, tu as la version allocation dynamique pour ton tableau.
    J'ai fait le truc rapidement, pas eu le temps de tester mais ça devrait marcher.

    #include <stdlib.h>
    #include <stdio.h>
    
    
    int main(int argc, char *argv[]){
    
    int k, j;
    int i;
    int entree;
    int min;
    int *tableau = NULL;
    
    printf("Combien d'entree avez vous?\n");
    scanf("%d", &entree);
    fflush(stdin);
    
    tableau = malloc(entree*sizeof(int));
    
    if(tableau==NULL){
    	exit(1);
    	}
    else{
    	for(i = 0 ; i<entree ; i++){
    		printf("Entree %d\n", i);
    		scanf("%d",(tableau + i));
    		fflush(stdin);
    		}
    
    	min =abs(tableau[0]-tableau[1]);
    
    	for(j = 0 ; j<entree-1 ; j++){
    		for(k=j+1 ; k<entree ; k++){
    			if(abs(tableau[j]-tableau[i])<min){
    				min = abs(tableau[j]-tableau[i]);
    				}
    			}
    		}
    	}
    
    printf("Le minimum est %d\n", min);
    
    free(tableau);
    exit(0);
    
    }
    


    Pour améliorer tes connaissances sur le C, tu as l'excellent bouquin (et la référence) "Le language C" Norme ANSI, 2ème ed. de Brian W. Kernighan et Dennis M. Ritchie.
    Tu as aussi le tuto de matéo sur le langage C sur siteduzero.com, qui est très bien foutu pour commener.
    1
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Bonjour,

      int t[SIZE]; est équivalent à int t[100]; dans son programme (cf. son #define SIZE 100).

      Ensuite, dans ton code tu as mis : fflush(stdin); Sache que cela provoque un comportement indéterminé. Donc à ne pas mettre...
      Ensuite, dans ton main(), tu n'as pas mis de return 0; à la fin. (Non exit(0) n'est pas pareil).
      0
    2. Nexo
       
      Hello fiddy !

      Pour le tableau, mea culpa, j'avais pas capté le define.
      Pour fflush(stdin) je l'utilise généralement quand j'ai plusieurs scanf à la suite... Je savais pas que ça provoquait un comportement indéterminé ! Tu peux m'en dire un peu plus ? Ou un lien si tu as sous la main ? :)
      Et pour le exit(0), c'est un labsus, je voulais bien faire return 0;

      Merci !
      0
    3. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      fflush() a un comportement indéterminé sur l'entrée. Donc exit fflush(stdin). La bonne façon pour vider le buffer clavier est d'utiliser :
      int c;
      while ((c=getchar()) != '\n' && c != EOF);
      

      Bien sûr, l'idéal est de mettre cette moulinette dans une petite fonction qu'on appellera d'où on souhaite.
      0
    4. Nexo
       
      Ca marche, merci !
      0
  3. phenix1304 Messages postés 9 Statut Membre
     
    merci pour vous bon réponse
    0
  4. phenix1304 Messages postés 9 Statut Membre
     
    je veux avoir comment améliorer mes connaissance
    0
    1. jisisv Messages postés 3678 Statut Modérateur 936
       
      Connaissances en quoi ?
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. phenix1304 Messages postés 9 Statut Membre
     
    connaissances a la programmation
    0
  7. bar056 Messages postés 358 Statut Membre 52
     
    bonjour,

    dans le message #6 il y a des infos données
    0