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

Langage Pascal Discussion :

Supprimer un élément d'un tableau


Sujet :

Langage Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2002
    Messages
    291
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 291
    Par défaut Supprimer un élément d'un tableau
    Bonjour,

    Voilà, comme le titre le dit, j'aimerais savoir comment supprimer un élément d'un tableau de variables :

    Ex :
    Nom[1] : florent
    Nom[2] : guillaume
    Nom[3] : fred
    en supprimant le premier nom par exemple, j'obtiens :
    Nom[1] : guillaume
    Nom[2] : fred
    Merci, j'espère avoir été clair !

  2. #2
    Membre Expert

    Homme Profil pro
    Urbaniste
    Inscrit en
    Mars 2002
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Mars 2002
    Messages : 255
    Par défaut
    Si j'ai bien compris, t'as un tablo de String ? Essaye avec la fonction move. Si je ne me trompe pas, un string fait TOUJOURS 256 octets en mémoire, donc pour effacer florent (le pauvre), faut déplacer 2*256 octets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    move (txt[0], txt[1], 2*256);
    J'ai bien peut de me tromper (j'ai plus trop la main en Pascal). Faut p'têtre rajouter un "@" devant les txt pour passer leur adresse en paramètre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    move (@txt[0], @txt[1], 2*256);
    @+ Haypo

  3. #3
    Membre éclairé
    Inscrit en
    Novembre 2002
    Messages
    291
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 291
    Par défaut Mais
    Oui mais la fonction move ne va que me deplacer mon nom dans le nom d'avant, pour que ce passera til pour le dernier nom, il mettra rien dedan?
    Moi je ve a proprement parler, supprimer un element de mon tableau, donc ok je remonte tous mes element mais le dernier je devrai quand meme le supprimer et c'est ce que je cherche!

  4. #4
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 466
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 466
    Par défaut
    Attention les tableaux ne sont pas dynamiques ! (c'est ce qu'on m'apprend à l'école argh ).
    Donc ça veut dire que quand tu lui donne une taille lors de l'édition ce tableau aura la taille définie lors de l'éxecution et ne variera pas. Par conséquent tu ne peux pas supprimer une case. Le seul truc que tu peux faire c'est déplacer les autres case et remplir la case que tu veux effacer par 0 ou ''. Et voilà. Sinon pour déplacer tes cases c'est de l'algorithmique ( tri, .... ). Si t'as des questions pour savoir comment on fait ça, ben pose des questions ( ou va à l'école !!! )
    a+

  5. #5
    tintin22
    Invité(e)
    Par défaut
    Voila comme l'a dit wormful_sickfoot, tu réinitialise le dernier à '' , tu peux aussi mettre une variable qui t'indique le dernier élement
    si tu as un array[1..Max]

    Nom[1] : florent
    Nom[2] : guillaume
    Nom[3] : fred

    Ici dernier_element = 3, si tu supprime "Fred" , dernier_element sera égale à 2, et ainsi de suite..

  6. #6
    Membre Expert

    Homme Profil pro
    Urbaniste
    Inscrit en
    Mars 2002
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Mars 2002
    Messages : 255
    Par défaut
    Autre solution, plus rapide dans la plupart des cas : avoir une variable qui contient le nombre d'éléments dans le tableau.

    @+ Haypo

  7. #7
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 466
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 466
    Par défaut
    Bien vu. Et dans ce cas, on peut faire un record qui contient un tableau, et une variable entière qui définit le nombre d'éléments dans le tableau.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    type tab=array[1..20] of char;
    type tableau=record
         t:tab;
         n_valeurs:integer;
         end;
    Voilà !

  8. #8
    HRS
    HRS est déconnecté
    Membre chevronné
    Avatar de HRS
    Inscrit en
    Mars 2002
    Messages
    678
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 678
    Par défaut
    et donc en peaufinant la solution de wormfull-sickfoot (en remplaçant
    char par string)

    on fait une procédure qui supprime un élément d'un tableau

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    procedure SupprimerElement (IndiceElementaSupprimer : integer;
                                var tab : tableau);
     
    {ou}
     
    procedure SupprimerElement (NomaSupprimer : string; var tab : tableau);

  9. #9
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 466
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 466
    Par défaut
    Exactement et en peaufianant la solution de Monsieur HRS, on arrive à la solution des objets, enregsitrements qui contiennent des procédures ( méthodes ).

    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
     
    type tab=array[1..20] of char;
    type tableau=object
         t:tab;
         n_valeurs:integer;
         procedure SupprimerElement(Indice:integer);
         end;
     
    {ou}
     
    type tableau=object
         nom:string[20];
         n_valeurs:integer;
         procedure SupprimerElement(Indice:integer);
         end;
    Voilà ! Le travail d'équipe paie toujours !

  10. #10
    Membre Expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Par défaut
    On peut aussi s'en faire un, de tableau dynamique ! Pourquoi se gêner...

    Pour ça, il suffit d'utiliser les listes chaînées et les pointeurs.

    C'est peut-être un peu complexe pour toi.

    Si ça t'intéresse, j'ai un type liste chaînée qui gère aussi les listes de chaînes de caractères, avec tri et tout ce qui va avec.

    A+

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 12
    Par défaut supprimer un element dans un tableau....
    Je te propose ceci...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    rang:integer                      (* indice de l'élément à suprimer*)
    nmax:integer                     (* taille du tableau*)
     
    inc(nmax);
    for i:=rang to nmax do tableau[i]:=tableau[i+1];
    dec(rang);
    Je crois que ça doit pouvoir marcher...

  12. #12
    Membre averti
    Inscrit en
    Octobre 2002
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 30
    Par défaut
    premiere chose ds le for il faut que tu t'arretes a nmax-1 car tu utilises i+1
    deuxieme chose je vois pas pourquoi tu decrementes le rang a la fin

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 12
    Par défaut supprimer un élément du tableau....
    en fait il ya une erreur:
    il faut juste faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    for i:=rang to nmax do tableau[i]:=tableau[i+1];
    dec(nmax);
    Biensur avec 0< rang <=nmax;
    -------------------------------------------------------------
    Bienvenu dans le desert du réel..........

  14. #14
    Membre averti
    Inscrit en
    Octobre 2002
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 30
    Par défaut
    oui mais tu as un tableau de nmax cases or tu fais ds ton for
    tab[i]:=tab[i+1] si i=nmax tu as tab[nmax]:=tab[nmax+1] =>petit pb

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 12
    Par défaut supprimer....
    En effet, gros pb, j'y suis allé un peu trop facile....
    T'as quoi comme solution ?


    --------------------------------------------------------------------
    the matrix has you.......

  16. #16
    Membre Expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Par défaut
    Toujours là ce problème sur le déplacement de données dans un tableau statique ???
    Ca traine...

    C'est pourtant pas compliqué. Il suffit de tout remonter d'un cran, et de remplir la dernière case avec du vide.

    Soit un tableau de Max cases possibles au total (déclaration : Tab: array[1..Max] of string;, par exemple);

    Soit n le nombre de cases remplies actuellement. Et soit Del la case à "supprimer".

    On va déclarer une variable compteur, appelons-la i qui va se charger de déplacer nos données. Prêt ?

    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
     
    const
      Max = 10;
     
    var
      Tab: array[0..Max] of string;
      n, Del: Integer;
      i: Integer;
    begin
    n := 8; { 8, pourquoi pas ??? }
    Del = 5; { On va virer la cinquième case }
     
    for i := Del + 1 to n do { On parcours toutes les cases derrière Del... }
      Tab[i - 1] := Tab[i]; { ...et on les remplies. La i-ème avec la (i+1)ème }
     
    Tab[n] := ''; { On vide la dernière case pleine du tableau }
     
    Dec(n); { Et on dit que l'on a supprimé une case }
    end;
    C'est pas la mer à boire quand même...

    A+

Discussions similaires

  1. [PHP 5.0] Supprimer un élément dans un tableau et le ré-indexer
    Par clement106 dans le forum Langage
    Réponses: 6
    Dernier message: 05/12/2009, 20h34
  2. Réponses: 4
    Dernier message: 07/05/2009, 13h50
  3. Supprimer certains éléments d'un tableau
    Par Him dans le forum Langage
    Réponses: 7
    Dernier message: 29/10/2008, 01h56
  4. [Tableaux] supprimer un élément d'un tableau
    Par banzzai dans le forum Langage
    Réponses: 1
    Dernier message: 15/09/2006, 15h52
  5. Réponses: 2
    Dernier message: 27/05/2006, 19h08

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