Decalage dans un tableau
chimou-gaga
Messages postés
24
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.
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.
A voir également:
- Decalage d'un tableau en c
- Tableau word - Guide
- Trier un tableau excel - Guide
- Tableau ascii - Guide
- Imprimer un tableau excel - Guide
- Tableau croisé dynamique - Guide
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 :)
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]); }