Langage c les tableau

Résolu
phenix1304 Messages postés 8 Date d'inscription   Statut Membre Dernière intervention   -  
bar056 Messages postés 334 Date d'inscription   Statut Membre Dernière intervention   -
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 3645 Date d'inscription   Statut Modérateur Dernière intervention   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 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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 8 Date d'inscription   Statut Membre Dernière intervention  
 
merci pour vous bon réponse
0
phenix1304 Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
 
je veux avoir comment améliorer mes connaissance
0
jisisv Messages postés 3645 Date d'inscription   Statut Modérateur Dernière intervention   934
 
Connaissances en quoi ?
0

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

Posez votre question
phenix1304 Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
 
connaissances a la programmation
0
bar056 Messages postés 334 Date d'inscription   Statut Membre Dernière intervention   52
 
bonjour,

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