Decalage dans un tableau

Fermé
chimou-gaga
Messages postés
24
Date d'inscription
samedi 10 novembre 2012
Statut
Membre
Dernière intervention
27 février 2015
- 5 mars 2013 à 22:02
 Utilisateur anonyme - 8 mars 2013 à 13:34
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.

2 réponses

Utilisateur anonyme
5 mars 2013 à 23:15
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
chimou-gaga
Messages postés
24
Date d'inscription
samedi 10 novembre 2012
Statut
Membre
Dernière intervention
27 février 2015
3
7 mars 2013 à 21:10
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
Utilisateur anonyme
8 mars 2013 à 13:34
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