IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Suppression d' un élement d' un tableau


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 15
    Par défaut Suppression d' un élement d' un tableau
    Bonjour à tous

    Je souhaite cree un programme pour supprimer un élement du tableau.
    Mais je ne sais pas comment faire.

    Voici un exemple de mon programme.
    Par exemple pour un tableau à 4 élements.
    1,5,9,10
    Si je veux supprimer 9 ca donnera
    1,5,10.

    Faut t' il utiliser les fonction comme calloc ou realloc ?

  2. #2
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Regarde du côté de la fonction memmove().

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 802
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 802
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par alexis007 Voir le message
    Bonjour à tous

    Je souhaite cree un programme pour supprimer un élement du tableau.
    Mais je ne sais pas comment faire.

    Voici un exemple de mon programme.
    Par exemple pour un tableau à 4 élements.
    1,5,9,10
    Si je veux supprimer 9 ca donnera
    1,5,10.

    Faut t' il utiliser les fonction comme calloc ou realloc ?
    calloc et realloc sont des fonctions de réservation mémoire. Pour ton pb faut que tu décales, à partir de l'élément à supprimer, tout ce qu'il y a après. En général ça ne se fait jamais car ça traduit un défaut de conception. Si vraiment on a besoin de supprimer des éléments intermédiaires on préfère utiliser une liste chaînée.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    j'avoue qu'à l'énoncé j'ai du mal à voir le rapport avec C.

    Sinon la manière logique (et de ton niveau) est de décaler....

    Présente-nous un algo et un petit morceau de code, et on t'aidera

    (certaines des suggestions évoquées plus haut ne sont à utliser qu'une fois qu'on a bien compris ce qu'on devait faire)...

  5. #5
    Membre éprouvé Avatar de siegfried64
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Maroc

    Informations forums :
    Inscription : Novembre 2007
    Messages : 78
    Par défaut
    Citation Envoyé par alexis007 Voir le message
    Par exemple pour un tableau à 4 élements.
    1,5,9,10
    Si je veux supprimer 9 ca donnera
    1,5,10.
    il suffit de faire un décalage des élément de tableau à partir de l'élément à supprimer.

    si on veut supprimer l'élément j d'un tableau comportant n éléments on fait :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(i=j;i<n;i++) t[i]=t[i+1];
    et tu obtiendra le resultat,
    Puis tu peux utiliser realloc si tu veux pour diminuer la taille du tableau.

  6. #6
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Citation Envoyé par siegfried64 Voir le message
    si on veut supprimer l'élément j d'un tableau comportant n éléments on fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(i=j;i<n;i++) t[i]=t[i+1];
    et tu obtiendra le resultat,
    Puis tu peux utiliser realloc si tu veux pour diminuer la taille du tableau.
    Ce code plante pour i = n-1

  7. #7
    Membre éprouvé Avatar de siegfried64
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Maroc

    Informations forums :
    Inscription : Novembre 2007
    Messages : 78
    Par défaut
    Citation Envoyé par diogene Voir le message
    Ce code plante pour i = n-1
    c'etais juste a titre d'exemple, il faut juste ajouter une if avant, dans le cas de i=n-1 on fait rien, ou on fait une realloc directement.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 15
    Par défaut
    Bonsoir

    j' ai essayé de coder le programme mais ca supprime uniquement le dernier element.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    50
    #include <stdlib.h>
    #include <stdio.h>
     
     
    void suppEle(int *t, int nbEle, int val)
    {
    int i;
    for(i=0;i<nbEle;i++)
    	{
    	if(t[i]==val)
    	t[i+1]=t[i];
    	}
    }
     
     
     
     
     
    int main()
     
    {
     
    int t[3];
    int i;
    int n;
     
    for(i=0;i<4;i++)
     
    	scanf("%d",&t[i]);
     
    for(i=0;i<4;i++)
     
    	printf("%d\n",t[i]);
     
    scanf("%d",&n);//nombre à supprimer
     
    suppEle(t,4,n);
     
     
     
     
    for(i=0;i<3;i++)
     
    	printf("%d\n",t[i]);
     
     
     
    return 0;
     
    }
    Par exemple pour 1,5,9,10 si c' est 10 a supprimer ca affiche 1,5,9
    Mais si c' est 9 à supprimer ca affiche 1,5,9.

  9. #9
    Membre éprouvé Avatar de siegfried64
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Maroc

    Informations forums :
    Inscription : Novembre 2007
    Messages : 78
    Par défaut
    voila un corrigé de ton programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <stdlib.h>
    #include <stdio.h>
     
     
    void suppEle(int *t, int nbEle, int val)
    {
    int i,j;
    for(i=0;i<nbEle;i++)
    	{
    	if((t[i]==val)&&(i<nbEle-1)) { for(j=i;j<nbEle;j++) t[j+1]=t[j];}
    	}
    }

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 15
    Par défaut
    Bonsoir

    Dans un autre forum on m' a fourni une fonction semblable à void suppEle.
    Mais c' est pour l' utiliser dans la fonction main que j' ai des problèmes.
    Car j' aimerais affiché le nouveau tableau avec la valeur supprimée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    50
    51
    52
    53
    54
    55
    56
    #include <stdlib.h>
    #include <stdio.h>
     
     
    int suppEle(int *tab, int nb, int val)
    {
        int i, j;
     
        for(i = 0; i < nb; i++)
        {
            /*Si valeur de la case à l'indice i est égale à val alors on décale */
            if(*(tab + i) == val)
            {
                /*On part de i pour aller à nb - 1(on ne déborde pas) */
                for(j = i ; j < nb - 1; j++)
                    *(tab + j) = *(tab + j + 1);/*On passe ce qu'il y a en case j+1
                                                  en case j */
     
                nb = nb - 1;/* On enlève un élément à notre tableau */
            }
        }
     
        return nb;
    }
     
    int main()
     
    {
     
    int t[3];
    int i;
    int n,nb;
     
    for(i=0;i<4;i++)
     
    	scanf("%d",&t[i]);//saisie des élémets du tableau
     
    for(i=0;i<4;i++)
     
    	printf("%d\n",t[i]);
     
    scanf("%d",&n);//nombre à supprimer
     
    nb= suppEle(t,4,9);
    printf("nb est egale à %d\n",nb);
     
     
    for(i=0;i<3;i++)
     
    	printf("%d\n",t[i]);
     
     
     
    return 0;
     
    }

  11. #11
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 362
    Par défaut
    Citation Envoyé par alexis007 Voir le message
    Bonsoir

    Dans un autre forum on m' a fourni une fonction semblable à void suppEle.
    Mais c' est pour l' utiliser dans la fonction main que j' ai des problèmes.
    Car j' aimerais affiché le nouveau tableau avec la valeur supprimée.
    A mon avis, tu devrais mieux découper, et ainsi avoir des fonctions réutilisables.

    Pour supprimer un élément, il faut :
    1) le rechercher;
    2) s'il est dans le tableau, le supprimer effectivement.

    Dans la même logique, si tu dois ensuite insérer un élément (c'est la suite classique de ce genre d'exercices), tu devras :
    1) rechercher si l'élément n'est pas déjà dans le tableau ;
    2) s'il n'y est pas, l'ajouter (éventuellement à une certaine place dans le cas d'un tableau trié).

    Tu peux donc définir 4 fonctions, par exemple comme ceci :
    • void affiche(int tab[], int taille)
      qui affiche les "taille" premiers éléments de tab
    • int recherche(int tab[], int taille, int *indice, int element)
      qui retourne 1/0 si trouvé/non trouvé, plus l'indice si trouvé, et l'indice de la première valeur > sinon (ça, c'est pour le cas d'un tableau trié, il faut insérer à cet endroit) ;
    • void supprime(int tab[], int *taille, int indice)
      qui supprime l'élément d'indice "indice" et décrémente "taille" de 1 ;
    • void insere(int tab[], int *taille, int indice)
      selon le même principe.


    De cette façon, tu devrais mieux structurer ton code il me semble.

Discussions similaires

  1. suppression d'un élement d'un tableau
    Par mamax29 dans le forum Langage
    Réponses: 3
    Dernier message: 21/04/2011, 23h19
  2. Erreur de suppression d'un élement
    Par Clad3 dans le forum C++
    Réponses: 1
    Dernier message: 05/06/2006, 21h41
  3. JSP : Suppression d'une entrée dans un tableau html
    Par ze veritable farf dans le forum Servlets/JSP
    Réponses: 34
    Dernier message: 11/04/2006, 16h17
  4. Suppression d'une ligne d'un tableau
    Par ratapapa dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 27/03/2006, 09h35
  5. [vb/excel] suppression d'une colonne d'un tableau
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/10/2005, 10h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo