Suppression élément d'un tableau
Exercice: Ecrire un programme qui lit un entier X et un tableau A du type int au clavier et élimine toutes les occurrences de X dans A en tassant les éléments restants. Le programme utilisera les pointeurs P1 et P2 pour parcourir le tableau
voilà ce que j'ai fait mais je ne sais pas pourquoi ça marche pas :(
merci pour votre aide :D
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| #include <stdio.h>
#include <conio.h>
int main()
{
int t[50];
int n;
int *p1;
int *p2;
int q;
int nb;
printf("entrer la dimension du tableau");
scanf("%d",&n);
for(p1=t;p1<t+n;p1++){
printf("entrer l'element [%d]: ",p1-t);
scanf("%d",p1);
}
printf("entrer l'élement à afficher");
scanf("%d",&q);
for(p1=t;p1<t+n;p1++){
while(*p1=!q)
*p2=*p1;
nb++;
}
n=nb;
for(p2=t;p2<t+n;p2++){
printf("%4d",*p2);
}
printf("\n");
getch();
} |
1 pièce(s) jointe(s)
Suppression éléments impairs d'un tableau d' int
Bonjour
Je recherchais une manière élégante de supprimer des éléments d'un tableau et je suis tombé sur cet ancien post que je me suis permis de réouvrir.
Comme j'avais du mal à écrire l'astuce de Diogène en passant par deux pointeurs, j'ai mis au clair mes idées avec ce petit programme qui résume ce qu'il a écrit, mais en n'utilisant que le pointeur initial ( mais je le remercie pour son idée ).
Le but, ici, est d'éliminer d'un tableau d'int, ceux qui sont impairs , de remettre à zéro les autres et de réallouer la mémoire utile.
J'ai mis en PJ le programme sous Sublime Text.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| #include <stdio.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
int i=0,j=0,k=0,n=20,*tab=malloc(n*sizeof(*tab));
if(tab==NULL)exit(-1);[/B]
// remplissage du tableau //
for(i=0;i<n;i++)tab[i]=i+1;
// impression tableau initial //
for(i=0;i<n;i++)printf("%d\n",tab[i]);
//
puts("\n");
// élimination des éléments impairs du tableau //
i=0;
while(i<n)
{
while((*(tab+i))%2!=0)i++;
tab[j]=*(tab+i);
i++;
j++;
}
// mise a 0 des éléments impairs restants
for(k=j;k<n;k++)tab[k]=0;
/// réallocation à j éléments ///
tab=realloc(tab,j*sizeof(*tab));
if(tab==NULL)exit(-1);
/// résultat : reste les nbs pairs ///
for(k=0;k<n;k++)printf("%d\n",tab[k]);
// libération du pointeur //
free(tab);
return 0;
} |
Merci pour cette belle astuce : et pour Diogène, j'utilise beaucoup realloc quand je ne connais pas la taille du tableau à créer, car j'ai découvert cela en lisant ses posts...et j'adore Glenn Gould !