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 ?
A voir également:

6 réponses

jisisv Messages postés 3678 Statut Modérateur 934
 
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
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
fiddy Messages postés 11653 Statut Contributeur 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
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
fiddy Messages postés 11653 Statut Contributeur 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
Nexo
 
Ca marche, merci !
0
phenix1304 Messages postés 9 Statut Membre
 
merci pour vous bon réponse
0
phenix1304 Messages postés 9 Statut Membre
 
je veux avoir comment améliorer mes connaissance
0
jisisv Messages postés 3678 Statut Modérateur 934
 
Connaissances en quoi ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

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

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