Decalage dans un tableau

chimou-gaga Messages postés 23 Date d'inscription   Statut Membre Dernière intervention   -  
 Utilisateur anonyme -
Bonsoir,
Je souhaite chercher un entier dans un tableau d'entier, quand on le trouve, il faut le supprimer (l'ecraser) par la valeur qui le suit , et chaque T[i]= T[i+1]. la dernière case du tableau vide évidemment après ce décalage, on lui affecte un 0. Puis on affiche le nouveau tableau.
Voici mon travail
#include <stdio.h>
void main ()
{
	int T[5];
	int V,i,pos;
	bool tst;

	for (i=0;i<5;i++)
	{	
		printf ("la valeur de la %d case : ",i);
		scanf_s("%d",&T[i]);
	};
	
	printf ("donner V \n");
	scanf_s ("%d",&V);
	tst=false;
	i=0;
	
	while((tst==false)&&(i<5))
	{
		if (T[i]==V)
		{	
			tst=true;
			pos=i;
		}
		else
			i++;
	}
	pos=i-1;
	if (tst==true)
	{
		while (pos<5)
		{
				T[pos]=T[pos+1];
				pos++;
		};
		T[5]=0;
	}
	else
	printf("le V n'existe pas \n ");

	for (i=0;i<5;i++)
		printf ("%d \n",T[i]);
}

Il y a un problème au niveau du décalage, et j'ai pas pu le corriger.
Merci pour votre aide.


--
Dans le monde il y a 10 types de personnes,ceux qui comprennent le binaire, et les autres.

2 réponses

  1. Utilisateur anonyme
     
    while (pos<5)
    		{
    				T[pos]=T[pos+1];
    				pos++;
    		};


    Il ne faut pas mettre de ';' à la fin d'une boucle while (sauf pour do...while). Et l'utilisation de booléen n'est pas indispensable.

    Voila à quoi cela peut ressembler (code encore à re-travailler certes, mais ça peut te donner une piste)

    #include <stdio.h>
    #include <stdlib.h>
    
    #define SIZE 5
    
    // Decale le tableau de 1 vers la gauche depuis l'indice 'index'
    void shift(int *array,int size,int index) {
      int i;
      for (i = index ; i < size - 1 ; i++) {
        array[i] = array[i + 1];
      }
      array[size - 1] = 0;
    }
    
    // Recherche une valeur dans un tableau. Renvoie l'indice de cette valeur, -1 si elle n'est pas trouvée
    int search(int *array,int size,int val) {
      int i;
      for (i = 0 ; i < size ; i++) {
        if (array[i] == val) {
          return i;
        }
      }
      return -1;
    }
    
    
    int main(void) {
      int T[SIZE];
      int val, i, index = -1;
      // Remplissage du tableau
      for (i = 0 ; i < SIZE ; i++) {
        printf("Valeur de T[%d] : ", i);
        scanf("%d", &T[i]);
      }
      // Saisie de la valeur a rechercher
      printf("Valeur a supprimer : ");
      scanf("%d", &val);
      // Recherche de la valeur
      index = search(T,SIZE,val);
      // Si la valeur n'est pas trouvee, on affiche une erreur et on quitte le programme
      if (index == -1) {
        printf("Valeur non trouvee !\n");
        return 1;
      }
      // Décalage du tableau et affichage
      shift(T,SIZE,index);
      for (i = 0 ; i < SIZE ; i++) {
        printf("%d\n", T[i]);
      }
      return 0;
    }
    
    
    0
  2. chimou-gaga Messages postés 23 Date d'inscription   Statut Membre Dernière intervention   3
     
    Bonsoir,
    enfin, j'ai essayé ce code, et ça marche. J'aimerais savoir vos commentaires et votre avis, vous me semblez un vrai connaisseur, et vous m'avez aidé plusieurs fois :)
     #include <stdio.h>
    void main ()
    {
    	int T[10];
    	int V,i,c,pos;
    	bool tst;
    
    	for (i=0;i<10;i++)
    	{	
    		printf ("la valeur de la %d case : ",i);
    		scanf_s("%d",&T[i]);
    	};
    	
    	printf ("donner V \n");
    	scanf_s ("%d",&V);
    	tst=false;
    	i=0;
    	
    	while((tst==false)&&(i<10))
    	{
    		if (T[i]==V)
    		{	
    			tst=true;
    			pos=i;
    		}
    		else
    			i++;
    	}
    	if (tst==true)
    	{
    		for(c=pos+1;c<10;c++)
    		{
    
    			T[c-1]=T[c];
    		}
    		T[9]=0;
    	}
    	else
    	printf("le V n'existe pas \n ");
    
    	for (i=0;i<10;i++)
    		printf ("  %d   ",T[i]);
    }
    0
    1. Utilisateur anonyme
       
      Ce code marche ?? Tu es sûr de toi ?

      1) main retourne un entier. Donc : int main(void), contenant un "return code_retour";
      2) Pas de ";" après une boucle for
      3) Le type "bool". Si tu utilises C99 ok, mais il manque un include : #include <stdbool.h>
      4) scanf_s() ? D'où ça sort ça ?
      0