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

Shell et commandes GNU Discussion :

Lister les états (on/off) simultanés d'un groupe d'éléments


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut Lister les états (on/off) simultanés d'un groupe d'éléments
    Bonjour,

    je sèche sur une manip, les mots me manquent pour l'expliquer à un moteur de recherche.

    j'ai trois éléments, et je voudrais faire la liste de leurs états (on/off) possibles :
    Code x : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    !a !b !c
    !a !b  c
    !a  b !c
    !a  b  c
     a !b !c
     a !b  c
     a  b !c
     a  b  c
    pourriez-vous m'indiquer les termes que je dois passer aux moteurs de recherche, s'il vous plaît ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    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 832
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par N_BaH Voir le message
    pourriez-vous m'indiquer les termes que je dois passer aux moteurs de recherche, s'il vous plaît ?
    Là franchement je suis déçu. Déjà ça n'a rien à voir avec un souci shell et bon, c'est pas super compliqué à coder.

    C'est comme un compteur kilométrique... sauf qu'il s'arrête à 2 au lieu de 10.

    Code bash : 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
    #!/usr/bin/env bash
     
    declare -a tab=(0 0 0)
    limit=2
     
    # Etat de départ
    echo ${tab[@]}
     
    # Tant qu'il y a des indices à traiter
    i=0
    while test $i -lt ${#tab[@]}; do
    	# On incrémente l'élément en cours
    	tab[$i]=$((${tab[$i]} + 1))
     
    	# Si l'élément n'a pas atteint sa limite
    	if test ${tab[$i]} -lt $limit; then
    		# Etat courant
    		echo ${tab[@]}
     
    		# L'indice se réinitialise et on repart sur l'incrément
    		i=0
    		continue
    	fi
     
    	# L'élément courant passe à 0 et l'indice passe à l'élément suivant
    	tab[$i]=0
    	i=$(($i + 1))
    done

    Et c'est bien évidemment adaptatif en fonction du tableau de départ.
    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]

  3. #3
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    désolé, et merci, mais ce n'est pas ce que j'ai demandé.
    Citation Envoyé par NBaH
    pourriez-vous m'indiquer les termes que je dois passer aux moteurs de recherche, s'il vous plaît ?
    là, tu viens de me pêcher un poisson.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    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 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    là, tu viens de me pêcher un poisson.
    Ben... je pensais que savoir coder le truc serait plus utile que savoir le demander (c'est un peu notre métier)...
    Bon après un poisson c'est déjà si pas mal... tu peux au-moins manger un jour...

    Après les pistes à creuser pourraient être du côté des probabilités (arrangements et autres), tableaux de Karnaugh à 3 entrées, tables de vérités sur 3 variables...
    C'est d'ailleurs ce que montre Wikipedia => https://fr.wikipedia.org/wiki/Table_de_v%C3%A9rit%C3%A9.
    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]

  5. #5
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 347
    Par défaut
    Moi, perso, j'appelle ça de la logique combinatoire

  6. #6
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 287
    Par défaut
    Bonjour

    En logique, une fonction booléenne est entièrement définie si tu as sa table de vérité.

  7. #7
    Membre Expert
    Avatar de Escapetiger
    Homme Profil pro
    Administrateur système Unix - Linux
    Inscrit en
    Juillet 2012
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur système Unix - Linux

    Informations forums :
    Inscription : Juillet 2012
    Messages : 1 559
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    (.../...)
    Après les pistes à creuser pourraient être du côté des probabilités (arrangements et autres), tableaux de Karnaugh à 3 entrées, tables de vérités sur 3 variables...
    C'est d'ailleurs ce que montre Wikipedia => https://fr.wikipedia.org/wiki/Table_de_v%C3%A9rit%C3%A9.
    Tout à fait, avec une application pour les bus informatique par exemple:

    Wikipedia
    Une sortie à trois états (en anglais three-state output) est une sortie de circuit électronique logique qui peut être activée ou désactivée selon l'état d'une entrée de contrôle (CEI).
    « Developpez.com est un groupe international de bénévoles dont la motivation est l'entraide au sens large » (incl. forums developpez.net)
    Club des professionnels en informatique

    Liste des balises BB

  8. #8
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 256
    Par défaut
    En Shell, ça va peut-être être chiant à faire.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  9. #9
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    bonjour

    Je ne suis pas sûr de ce que tu recherches...

    Regarder du coté de Les permutations, les arrangements et les combinaisons ou chercher du coté de "State Machine" ?


    en python, pour avoir la liste, je vais utiliser itertools.product([True, False], repeat=3)La doc de product() indique :
    Produit cartésien des itérables d'entrée
    ------------

    Shell, ça va peut-être être chiant à faire
    et tricher est permis ?
    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
    echo "toto;tata;maman;papa" | python3 -c "$(cat << EOF
    import itertools
     
    names=input().split(";")
    count = len(names)
     
    possibilites = list(itertools.product([True, False], repeat=count))
    #print(possibilites)
     
    bashs = []
    for possible in possibilites:
        bashs.append(tuple(f"{'!' if not k else ''}{names[j]}" for j, k in enumerate(possible)))
     
    for line in bashs:
        print(*line)
     
    EOF
    )"

  10. #10
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Code bash : 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
    #!/usr/bin/env bash
     
    declare -a tab=(0 0 0)
    limit=2
     
    # Etat de départ
    echo ${tab[@]}
     
    # Tant qu'il y a des indices à traiter
    i=0
    while test $i -lt ${#tab[@]}; do
    	# On incrémente l'élément en cours
    	tab[$i]=$((${tab[$i]} + 1))
     
    	# Si l'élément n'a pas atteint sa limite
    	if test ${tab[$i]} -lt $limit; then
    		# Etat courant
    		echo ${tab[@]}
     
    		# L'indice se réinitialise et on repart sur l'incrément
    		i=0
    		continue
    	fi
     
    	# L'élément courant passe à 0 et l'indice passe à l'élément suivant
    	tab[$i]=0
    	i=$(($i + 1))
    done
    je vois bien la "mécanique", et je peux la reformuler dans une syntaxe bash plus hermétique, mais je ne comprends pas le fonctionnement.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  11. #11
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 287
    Par défaut
    printf '%s\n' {0,1}{0,1}{0,1}
    On aura du mal à faire plus efficace et élégant que ça. Je retiens.

  12. #12
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    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 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    mais je ne comprends pas le fonctionnement.
    Je traite ça comme un compteur. Sauf qu'au lieu de l'afficher dans le sens de lecture (123, 124, 125, ...) je l'affiche dans le sens inverse (321, 421, 521, ...). C'est plus facile à coder.

    Or dans un compteur, c'est le dernier chiffre qui monte (ici le premier). Mais si le chiffre arrive au bout, il repasse à 0 et l'avant dernier monte d'un cran. Et etc. Ce mécanisme est reproduit par la variable "i" qui est l'indice du chiffre à faire monter.

    Donc j'ai une boucle infinie et à chaque tour, le chiffre "i" monte d'un cran. Si ce chiffre arrive au bout, il repasse à 0 et "i" passe au rang suivant sinon "i" repasse à 0.
    Par exemple (on va parler d'un compteur normal de 0 à 10) arrivé à 9-9-4, avec i = 0
    9-9-4 passe à 10-9-4 (rappel on est à l'envers)
    Comme 10 dépasse la limite, il passe à 0 ce qui donne 0-9-4 et i passe à 1 et on repart en haut de la boucle
    0-9-4 avec i=1 passe à 0-10-4
    Comme 10 dépasse la limite, il passe à 0 ce qui donne 0-0-4 et i passe à 2 et on repart en haut de la boucle
    0-0-4 avec i=2 passe à 0-0-5
    Comme 5 ne dépasse pas la limite, i revient à 0 et on repart en haut de la boucle
    0-0-5 avec i=0 passe à 1-0-5
    Comme 1 ne dépasse pas la limite, i revient à 0 (oui il l'est déjà mais tant-pis) et on repart en haut de la boucle
    1-0-5 avec i=0 passe à 2-0-5
    Et etc etc etc jusqu'à 9-9-9 où on quitte la boucle.
    Les nombres affichés sont alors
    9-9-4
    0-0-5
    1-0-5
    2-0-5
    3-0-5
    ...

    Maintenant ta solution à base de printf est au quand-même dessus du lot
    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]

  13. #13
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    ah!? je vois de la lumière...

    merci, Sve@r, pour ces explications.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  14. #14
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Euh, le code c'est N_BaH, moi je n'ai fait que la remarque que c'était un (dé)compte binaire
    et moi, j'avais trouvé ça sur le net pour faire une fonction dec2bin.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  15. #15
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 347
    Par défaut
    Et en jq:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    jq -c 'combinations' <<<'[["!a","a"],["!b","b"],["!c","c"]]'
    ["!a","!b","!c"]
    ["!a","!b","c"]
    ["!a","b","!c"]
    ["!a","b","c"]
    ["a","!b","!c"]
    ["a","!b","c"]
    ["a","b","!c"]
    ["a","b","c"]

Discussions similaires

  1. Lister les softs installés sur un Pc
    Par Jflgb dans le forum C++Builder
    Réponses: 18
    Dernier message: 23/06/2004, 17h34
  2. [ODBC] Intranet en PHP : Lister les tables d'une base Access
    Par fblouet dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 28/10/2003, 14h46
  3. Lister les tables d'une Base
    Par YanK dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 08/10/2003, 10h40
  4. [VB6] [Réseau] Lister les ordinateurs du réseau
    Par CYFL dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 17/12/2002, 09h25
  5. [TP]Lister les fichiers d'un répertoire
    Par nvtitan dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 21/06/2002, 11h22

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