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 :

supprimer une case d'un tableau


Sujet :

C

  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2010
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 98
    Points : 39
    Points
    39
    Par défaut supprimer une case d'un tableau
    bonjour,
    comment faire pour supprimer la derniere case d'un tableau??et le nombre d'élément du tableau sera modifié???

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par marooh Voir le message
    bonjour,
    comment faire pour supprimer la derniere case d'un tableau??et le nombre d'élément du tableau sera modifié???
    Un realloc en modifiant la taille du tableau (l'argument de taille que tu fournis à realloc).
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Membre éclairé Avatar de seeme
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    430
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 430
    Points : 791
    Points
    791
    Par défaut
    Ca dépend de comment tu as créé ton tableau..

    Sans source, c'ets aps évident de répondre..

    Une solution est la recopie, une autre est de marquer la cellule comme "vide", ou de décaller toutes les valeurs qui suivent la case que tu as vidé et de marquer la fin du tableau par exemple avcec un \0

    Mais je le répète.. sans code...

  4. #4
    Nouveau membre du Club
    Inscrit en
    Octobre 2010
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 98
    Points : 39
    Points
    39
    Par défaut
    je ne peux pas décaller puisque c'est la dernière case

  5. #5
    Membre éclairé Avatar de seeme
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    430
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 430
    Points : 791
    Points
    791
    Par défaut
    Eh ben tu passes ton marqueur de fin de tableau sur cette case...

    @Franck.H: ça dépend quand même de la taille de son tableau et de la fréquence de suppression.
    HS: Ah lala Obernai.. J'y ai habité presque au pied de la croix ^^

    @marooh: il représente quoi ton tableau? Il est statique? Dynamique? Il y a beaucoup de suppressions?

  6. #6
    Nouveau membre du Club
    Inscrit en
    Octobre 2010
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 98
    Points : 39
    Points
    39
    Par défaut
    mon tableau est statique

  7. #7
    Membre éclairé Avatar de seeme
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    430
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 430
    Points : 791
    Points
    791
    Par défaut
    Citation Envoyé par marooh Voir le message
    mon tableau est statique
    IL va falloir y mettre un peu de bonne volonté quand même... Il représente quoi? C'est quoi l'ordre de grandeur de la longueur? Tu supprimes très souvent des données?

  8. #8
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par seeme Voir le message
    @Franck.H: ça dépend quand même de la taille de son tableau et de la fréquence de suppression.
    HS: Ah lala Obernai.. J'y ai habité presque au pied de la croix ^^
    Je suis dans le centre :p
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  9. #9
    Nouveau membre du Club
    Inscrit en
    Octobre 2010
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 98
    Points : 39
    Points
    39
    Par défaut
    en fait c'est un tableau de réels à remplir par l'utilisateur et dés qu'il saisi zéro,on arrete la saisie et le zéro ne sera pas pris comme element du tableau.voilaa

  10. #10
    Membre éclairé Avatar de seeme
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    430
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 430
    Points : 791
    Points
    791
    Par défaut
    Bon..

    Le plus simple vu que tu as un tableau statique, il ne peut pas changer de taille, c'est de marque la dernière case du tableau par un symbole (0, pourquoi pas, si tu es sûr qu'aucune case précédent ne peut valoir 0). Quand tu supprime une case, tu décalles tes cases vers la gauche et tu mets ton zero à la nouvelle fin (exactement comme une chaine de caractère avec le \0).

    Une autre solution, plus simple et plus légère, est de marquer les éléments supprimés en les remplaçant par une valeur particulière (0 si tu es sûr et certains qu'il ne sera jamais utilisé, ou encore -1 si tes réèles sont tous positifs).

    Ensuite, quand tu boucles sur le tableau, tu ne prend en compte que les valeurs différentes de 0 ou de -1...

    Sinon tu copies ton tableau dans un nouveau qui fait une case de moins en longueur (long, inutile..)

    Attention par contre que ton utilisateur ne rentre pas plus de nombre que ce que ton tableau peut contenir (risque de buffer overflow et vulnérabilité pour le système).

  11. #11
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Si tu ne connais pas la taille maximum du tableau il te faut un tableau dynamique, y'a pas à chercher plus loin
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  12. #12
    Nouveau membre du Club
    Inscrit en
    Octobre 2010
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 98
    Points : 39
    Points
    39
    Par défaut
    si je déclare dés le début un tableau avec un grand nombre de cases mais je ne les remplis pas toutes,les autres cases ne s'afficheront pas??

  13. #13
    Membre éclairé Avatar de seeme
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    430
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 430
    Points : 791
    Points
    791
    Par défaut
    Le problème c'est que tu vas réserver énormément de mémoire par rapport à ce que tu as besoin... Le dépassement peut quand même se faire si tu ne fait pas très attention...

    Je ne vois pas l'intérêt de faire une allocation statique ici..

  14. #14
    Nouveau membre du Club
    Inscrit en
    Octobre 2010
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 98
    Points : 39
    Points
    39
    Par défaut
    ce n'est pas un choix mais une obligation c'est ce que demande l'énoncé

  15. #15
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Moi personnellement c'est le genre de cas où j'utiliserais soit un tableau dynamique soit dans d'autres cas un peu plus particuliers (suivant les manip à faire sur le tableau), une liste chaînée
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  16. #16
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par marooh Voir le message
    ce n'est pas un choix mais une obligation c'est ce que demande l'énoncé
    Ha bin tu aurais pu le dire dès le départ (si tu ne l'as pas mentionné) ! Bin tu as en C99 les tableau statiques qu'on peut redimensionner si je me trompe pas mais tous les compilateurs ne prennent pas en compte cette nouvelle version de la norme !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  17. #17
    Membre éclairé Avatar de seeme
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    430
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 430
    Points : 791
    Points
    791
    Par défaut
    Citation Envoyé par marooh Voir le message
    ce n'est pas un choix mais une obligation c'est ce que demande l'énoncé
    Bon bah du coup ça change rien, tu mets un marqueur de fin de chaine ou de case vide et rulez...

    (Tu feras attention de ne pas dépasser la taille de ton tableau au moment de la saisie...)

  18. #18
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 368
    Points : 23 622
    Points
    23 622
    Par défaut
    Reste sur ta discussion précédente, s'il-te-plaît. Le sujet est le même. Tu as déjà obtenu une réponse, même si elle ne satisfait pas. Ce n'est pas en tournant le problème autrement que tu obtiendras ce que tu veux entendre.

    Le C n'est pas un équivalent du Perl, du PHP ou d'autres langages, dont tu proviens peut-être. En C, un tableau n'est qu'une zone de mémoire linéaire que l'on parcourt en suivant un index. Ce n'est pas un objet particulier, structuré, et dont la taille est enregistrée quelque part.

    Lorsque tu déclares un tableau dans ton code source, le compilateur réserve de la place en calculant les adresses des autres variables en conséquence. C'est pour ça qu'un tableau en C est purement statique, à l'exception des VLAs. Et même dans ce cas précis, la taille du tableau est définie à l'exécution, mais il n'est pas redimensionnable pour autant.

    Ça veut dire qu'en C, l'exploitation d'un tableau et la réservation de la mémoire qu'il occupe sont deux choses distinctes.

    Pour faire ce que tu veux faire, il faut donc allouer de la mémoire, la réallouer si nécessaire, et la libérer à la fin, et ceci avec malloc(), realloc(), et free(). « realloc() » permet de réallouer la mémoire, c'est-à-dire modifier sa taille sans en perdre le contenu. Pour cela, il est possible qu'elle alloue un autre segment complètement distinct et qu'elle y recopie le contenu du premier avant de le libérer, mais ça, tu n'as pas à t'en soucier.

    Les deux premières fonctions te renvoient un pointeur qui t'indique où se trouve la mémoire réservée. Tu peux ensuite exploiter ce pointeur comme un tableau avec « [ ] ».

  19. #19
    Nouveau membre du Club
    Inscrit en
    Octobre 2010
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 98
    Points : 39
    Points
    39
    Par défaut
    Bon bah du coup ça change rien, tu mets un marqueur de fin de chaine ou de case vide et rulez...
    ????????

  20. #20
    Membre éclairé Avatar de seeme
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    430
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 430
    Points : 791
    Points
    791
    Par défaut
    Je te l'ai déjà expliqué plus haut...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Supprimer une case d'un tableau
    Par saidma dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 26/10/2014, 11h55
  2. Supprimer une case vide d'un tableau
    Par Ahmad1994 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 17/02/2014, 11h31
  3. Supprimer une case d'un tableau
    Par cedji dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 02/04/2012, 11h28
  4. Supprimer une case d'un tableau de structure
    Par GomuSan dans le forum C
    Réponses: 3
    Dernier message: 30/12/2007, 13h42
  5. [Debutant] URL utilisable depuis une case d'un tableau de BD
    Par Marc_3 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 03/04/2005, 19h06

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