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

Algorithmes et structures de données Discussion :

Comment parcourir un tableau de listes ?


Sujet :

Algorithmes et structures de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 114
    Points : 47
    Points
    47
    Par défaut Comment parcourir un tableau de listes ?
    Bonjour,

    pouvez vous m'aider svp a ecrire un algorithme qui permet de parcourir un tableau de listes

    tab( A1,A2,A3,A4,..Ak)

    A1, A2,A3,A4,Ak sont des listes d'éléments.
    A1(A,B,C,D,........Z)
    A2(1,2,3,4,.........n)
    A3(a,b,c,d,..........z)
    A4(A1,A2,A3,A4,.......An)
    Ak(a1,a2,a3,a4,.......an)

    je veux parcourir toutes les listes et tester les éléments des listes.
    chaque élément est testé avec un appel d'une fonction. comment appeler cette fonction "k=f(p)" dans l'algo pour tester les éléments de la liste ?
    si k=0 j'élémine cet élément.
    sinon je contruit une nouvelle liste L1 avec le reste des éléments différents de 0.

    Merci



    je suis débutantes en algorithmique.

    Merci pour vos aides

  2. #2
    Membre émérite
    Homme Profil pro
    sans emploi
    Inscrit en
    Janvier 2014
    Messages
    539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2014
    Messages : 539
    Points : 2 601
    Points
    2 601
    Par défaut
    Bonjour,
    tu déjà posé cette question ici : Parcours de listes dans une liste.

    Les réponses seront sensiblement les mêmes :

    Tu écris une procédure qui filtre une liste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure liste_filtrer( liste : type liste )
    début
      si non liste_est_vide(liste) alors
        courant : type élément = liste_tete(liste)
        faire
          suivant : type élément = liste_suivant(liste, courant)
          si f(p)=0 alors
            liste_effacer_element(liste, courant)
          fin si
          courant = suivant
        tant que suivant != NIL
      fin si
    fin
    Et tu écris une procédure qui parcourt le tableau de liste en appliquant le filtre à chaque liste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure tableau_filtre( tableau : tableau de liste )
    début
      pour i de 1 à nombre_élément(tableau)
        liste_filtre(tableau[i])
    fin

    Rien de compliqué, l'algo c'est la transition entre le problème compris en français et le début du codage. La syntaxe est libre, même si elle est forcément orientée vers le langage cible. Le plus compliqué est d'exprimer ce que tu veux en français le reste vient tout seul.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 114
    Points : 47
    Points
    47
    Par défaut
    Merci picodev.

    est ce que le parcourt des liste dans une liste est le meme parcourt des listes dans un tableau?

    je veux poser quelques questions:

    pourquoi la première procédure qui filtre les listes ?
    qu'est ce que tu veux dire avec
    si non liste_est_vide(liste)?

    liste_effacer_element(liste, courant)?

    on peut pas faire des boucles imbriquée qui permettent de parcourir le tableau et les listes en meme temps?

    Merci

  4. #4
    Membre émérite
    Homme Profil pro
    sans emploi
    Inscrit en
    Janvier 2014
    Messages
    539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2014
    Messages : 539
    Points : 2 601
    Points
    2 601
    Par défaut
    Citation Envoyé par 080983 Voir le message
    Merci picodev.

    est ce que le parcourt des liste dans une liste est le meme parcourt des listes dans un tableau?
    Tu accède à un tableau en indiquant l'indice de l'élément que tu veux récupérer. Parcourir un tableau revient à faire varier l'indice du début (0 ou 1 suivant les langages) à la fin (taille-1 ou taille) du tableau.

    Les listes ne sont pas faites pour être accédées en plein milieu. Le parcours d'une liste se fait en accédant à la tête de liste puis en passant au suivant.

    Citation Envoyé par 080983 Voir le message
    je veux poser quelques questions:

    pourquoi la première procédure qui filtre les listes ?
    Plus tu auras des procédures courtes qui ne font qu'une chose plus tu écriras un algo clair.

    Citation Envoyé par 080983 Voir le message
    qu'est ce que tu veux dire avec
    si non liste_est_vide(liste)?
    Si la liste est vide il n'y a rien à faire, car une liste peut ne pas contenir d'éléments … Il te faut donc une fonction qui t'indique si la liste est vide ou non.

    Citation Envoyé par 080983 Voir le message
    liste_effacer_element(liste, courant)?
    Tu veux effacer un élément de la liste ? oui ? alors il te faut une fonction qui te le fasse

    Citation Envoyé par 080983 Voir le message
    on peut pas faire des boucles imbriquée qui permettent de parcourir le tableau et les listes en meme temps?

    Merci
    Si bien sûr mais ce sera moins clair, moins lisible, moins compréhensible.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 114
    Points : 47
    Points
    47
    Par défaut
    Merci pour tes réponses picodev!!


    pouvez vous me montrer ce que peut être le contenu des fonctions

    liste_effacer_element(liste, courant)?


    aussi pour liste_est_vide(liste)?



    Merci d'avance et je suis désolée!!

  6. #6
    Membre émérite
    Homme Profil pro
    sans emploi
    Inscrit en
    Janvier 2014
    Messages
    539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2014
    Messages : 539
    Points : 2 601
    Points
    2 601
    Par défaut
    Ce sont typiquement des fonctions qui vont dépendre de l'implémentation et qu'on ne détaille jamais vraiment lors de l'algo.
    En quelque sorte, ce sont les fonctions dont tu vas avoir besoin qui vont influer quelle implémentation choisir.
    Une liste peut tout aussi bien être implémentée à base de pointeurs que par un simple tableau. Si un moment donné tu as besoin de trier la liste alors cela peut t'amener à orienter l'implémentation vers une liste sous forme de tableau …

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 114
    Points : 47
    Points
    47
    Par défaut
    Merci bp picodev.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 114
    Points : 47
    Points
    47
    Par défaut
    une dernière question !

    si j'ai plusieurs test si f(p)=0, si f(p)=1 (créer une nouvelle liste avec ces éléments), et si f(p)=2 ( créer nouvelles listes avec des combinaisons)

    si f(p)=0 alors
    liste_effacer_element(liste, courant)
    fin si

    comment sera le code la procédure liste_filtrer(liste)?

    Merci

  9. #9
    Membre émérite
    Homme Profil pro
    sans emploi
    Inscrit en
    Janvier 2014
    Messages
    539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2014
    Messages : 539
    Points : 2 601
    Points
    2 601
    Par défaut
    Je peux te faire la même réponse que dans l'autre discussion :

    Citation Envoyé par picodev Voir le message
    Je ne peux pas faire ton travail à ta place ... mais google peut t'aider à trouver des algos qui te seront utiles.
    Par exemple pour générer tous les tuples dont tu as besoin tu peux t'inspirer de l'algo L de Knuth dans le fascicule 2b de son TAOCP (à utiliser dans le squelette que je t'ai donné).
    Le tout est de bien organiser tes données.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 114
    Points : 47
    Points
    47
    Par défaut

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 114
    Points : 47
    Points
    47
    Par défaut
    comment faire le test avec une fonction?? est ce que ça c'est juste?
    voici la procédure.

    procedure liste_filtrer( liste : type liste )
    début
    si non liste_est_vide(liste) alors
    courant : type élément = liste_tete(liste)
    faire
    suivant : type élément = liste_suivant(liste, courant)
    si function1 (list, courant)=0 alors
    liste_effacer_element(liste, courant)
    fin si
    si function1(list,courant)=1 alors
    liste-certain_element(liste,courant)
    fin si
    si function1(list, courant) !=0 and function1(list, courant)!=1 alors
    liste_combination_element(list,courant)
    fin si
    courant = suivant
    tant que suivant != NIL
    fin si
    fin

  12. #12
    Membre émérite
    Homme Profil pro
    sans emploi
    Inscrit en
    Janvier 2014
    Messages
    539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2014
    Messages : 539
    Points : 2 601
    Points
    2 601
    Par défaut
    Insère ton code en utilisant les balises [code ] et [/code ] sinon ce n'est pas lisible.

    Comme je te le disais dans l'autre fil, il vaut mieux faire une première passe pour effacer ce que tu veux. Une autre procédure pour le reste, voire deux …
    Le principal est de pouvoir le faire à la main avec une feuille et crayon. Écrire l'algorithme pour décrire ce que tu as fait à la main.

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 114
    Points : 47
    Points
    47
    Par défaut
    Citation Envoyé par picodev Voir le message
    Insère ton code en utilisant les balises [code ] et [/code ] sinon ce n'est pas lisible.

    Comme je te le disais dans l'autre fil, il vaut mieux faire une première passe pour effacer ce que tu veux. Une autre procédure pour le reste, voire deux …
    Le principal est de pouvoir le faire à la main avec une feuille et crayon. Écrire l'algorithme pour décrire ce que tu as fait à la main.
    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
     procedure liste_filtrer( liste : type liste )
    début
    si non liste_est_vide(liste) alors
    courant : type élément = liste_tete(liste)
    faire
          suivant : type élément = liste_suivant(liste, courant)
             si function1 (list, courant)=0 alors
             liste_effacer_element(liste, courant)
             fin si
             si function1(list,courant)=1 alors
             liste-certain_element(liste,courant)
             fin si
             si function1(list, courant) !=0 and function1(list, courant)!=1 alors
              liste_combination_element(list,courant)
             fin si
    courant = suivant
    tant que suivant != NIL
    fin si
    fin

  14. #14
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 419
    Points : 5 818
    Points
    5 818
    Par défaut
    salut ,


    en reprenant ton code j'ai un doute


    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
    procedure liste_filtrer( liste : type liste )
    début
      si non liste_est_vide(liste) alors
        courant : type élément = liste_tete(liste)
    	tant que suivant != NIL
          suivant : type élément = liste_suivant(liste, courant)
          si function1 (list, courant)=0 alors
            liste_effacer_element(liste, courant)  // ici tu supprime l’élément courant ? 
          fin si
          si function1(list,courant)=1 alors  
                   // si tu as supprimé l’élément courant, là tu a plantage assuré  à moins de penser a mettre sinon entre les deux si
            liste-certain_element(liste,courant)
          fin si
          si function1(list, courant) !=0 and function1(list, courant)!=1 alors // idem qu'au dessus 
            liste_combination_element(list,courant)
          fin si
          courant = suivant
        Fin tant que 
      fin si
    fin
    dans le cas du sinon une autre presentation est possible
    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
     
    procedure liste_filtrer( liste : type liste )
    début
      si non liste_est_vide(liste) alors
        courant : type élément = liste_tete(liste)
        tant que suivant != NIL
           suivant : type élément = liste_suivant(liste, courant)
           Indice =  function1 (list, courant)
           choix indice Faire
             0 faire liste_effacer_element(liste, courant) fin faire
             1 faire  liste-certain_element(liste,courant) fin faire
            sinon
            faire   
               liste_combination_element(list,courant)
            fin faire 
          fin choix
          courant = suivant
        Fin tant que 
      fin si
    fin
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

Discussions similaires

  1. Comment Parcourir un tableau excel en VB6 ?
    Par Eausport dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 02/05/2011, 15h39
  2. parcourir un tableau de listes chainées
    Par étoile de mer dans le forum Débuter
    Réponses: 17
    Dernier message: 14/10/2008, 23h02
  3. Réponses: 17
    Dernier message: 19/07/2007, 08h38
  4. [C# 1.1] Comment parcourir un tableau byte[] ?
    Par fregolo52 dans le forum C#
    Réponses: 1
    Dernier message: 17/10/2006, 10h51
  5. Comment parcourir un tableau
    Par petitsims dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 27/01/2005, 14h33

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