Decalage dans un tableau
chimou-gaga
Messages postés
23
Date d'inscription
Statut
Membre
Dernière intervention
-
Utilisateur anonyme -
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
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.
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
-
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; } -
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]); }