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

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2002
    Messages
    291
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 291
    Points : 81
    Points
    81
    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 émérite

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

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Mars 2002
    Messages : 255
    Points : 2 717
    Points
    2 717
    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 régulier
    Inscrit en
    Novembre 2002
    Messages
    291
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 291
    Points : 81
    Points
    81
    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 463
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 463
    Points : 4 305
    Points
    4 305
    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+
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  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 émérite

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

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Mars 2002
    Messages : 255
    Points : 2 717
    Points
    2 717
    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 463
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 463
    Points : 4 305
    Points
    4 305
    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à !
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  8. #8
    HRS
    HRS est déconnecté
    Membre confirmé
    Avatar de HRS
    Inscrit en
    Mars 2002
    Messages
    677
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 677
    Points : 638
    Points
    638
    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 463
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 463
    Points : 4 305
    Points
    4 305
    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 !
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

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

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    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+
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 12
    Points : 11
    Points
    11
    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...
    the matrix has you....

  12. #12
    Nouveau membre du Club
    Inscrit en
    Octobre 2002
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 30
    Points : 27
    Points
    27
    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 à l'essai
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 12
    Points : 11
    Points
    11
    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..........
    the matrix has you....

  14. #14
    Nouveau membre du Club
    Inscrit en
    Octobre 2002
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 30
    Points : 27
    Points
    27
    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 à l'essai
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 12
    Points : 11
    Points
    11
    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.......
    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 : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    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&#58; array&#91;0..Max&#93; of string;
      n, Del&#58; Integer;
      i&#58; Integer;
    begin
    n &#58;= 8; &#123; 8, pourquoi pas ??? &#125;
    Del = 5; &#123; On va virer la cinquième case &#125;
     
    for i &#58;= Del + 1 to n do &#123; On parcours toutes les cases derrière Del... &#125;
      Tab&#91;i - 1&#93; &#58;= Tab&#91;i&#93;; &#123; ...et on les remplies. La i-ème avec la &#40;i+1&#41;ème &#125;
     
    Tab&#91;n&#93; &#58;= ''; &#123; On vide la dernière case pleine du tableau &#125;
     
    Dec&#40;n&#41;; &#123; Et on dit que l'on a supprimé une case &#125;
    end;
    C'est pas la mer à boire quand même...

    A+
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

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, 21h34
  2. Réponses: 4
    Dernier message: 07/05/2009, 14h50
  3. Supprimer certains éléments d'un tableau
    Par Him dans le forum Langage
    Réponses: 7
    Dernier message: 29/10/2008, 02h56
  4. [Tableaux] supprimer un élément d'un tableau
    Par banzzai dans le forum Langage
    Réponses: 1
    Dernier message: 15/09/2006, 16h52
  5. Réponses: 2
    Dernier message: 27/05/2006, 20h08

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