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 :

Tableau de nombres qui se suivent


Sujet :

Shell et commandes GNU

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2010
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 258
    Points : 77
    Points
    77
    Par défaut Tableau de nombres qui se suivent
    Bonjour à tous,

    Voici mon souci.
    J'ai ce tableau d'entier :

    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
     
    NUMEROS=(
    2
    6
    10
    11
    12
    15
    16
    20
    23
    25
    45
    67
    68
    69
    70
    )
    Je veux pouvoir parcourir ce tableau et savoir quels sont les nombres qui se suivent et à partir d'ou ?

    La sortie devrait être :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Numéro 10 : 3 à la suite
    Numéro 15 : 2 à la suite
    Numéro 67 : 4 à la suite
    Comment faire ?

    J'arrive à en trouver deux à la suite en parcourant le tableau, mais si j'en ai 25 à la suite, ça fait beaucoup de boucles ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    A=0
    for NUMERO in ${NUMEROS[*]}
    do
    	if [ "$(($NUMERO+1))" == "${NUMEROS[$((A+1))]}" ]
    	then
    		echo "Numéro $NUMERO : 2 à la suite"
    	fi
    	A=$(($A+1))
    done

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 252
    Points : 13 481
    Points
    13 481
    Par défaut
    Bonjour,

    Pourquoi ne pas faire une prédiction à chaque tour.
    Si la prédiction est vérifiée un compteur s'incrémente.
    Si la prédiction est incorrecte le compteur retombe à 1.

    De toute façon, au pire, à tout moment, avec la prédiction et le compteur, tu peux recalculer ton point de départ.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Membre régulier
    Inscrit en
    Décembre 2010
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 258
    Points : 77
    Points
    77
    Par défaut
    je suis désolé mais je ne comprend pas ce que tu veux dire

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 561
    Points : 19 397
    Points
    19 397
    Par défaut
    A=0 : le nom des variables (tableaux) en minuscule ou panaché.
    for NUMERO in ${NUMEROS[*]} : un tableau s'itère mieux en utilisant @, sinon la boucle for coupe les éléments en mots.
    if [ "$(($NUMERO+1))" == "${NUMEROS[$((A+1))]}" ] : test inutile : if (( numero+1 == ${numero[a+1]} )).
    if [ "$(($NUMERO+1))" == "${NUMEROS[$((A+1))]}" ] : == n'est pas un opérateur arithmétique, n'est pas POSIX, et devrait être réservé aux [[ ]].

    je ne me baserais pas sur des prédictions (Flodelarab a bu le liquide de sa boule de cristal ?), mais sur l'observation du passé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ numeros=( 2 6 10 11 12 15 16 20 23 25 45 67 68 69 70 )
    $ for curr in ${numeros[@]} ; do if ((prev)); then if ((prev == curr-1)); then test -n "$start" || start=$prev; allstarts[$start]=$((++n)); else unset start; n=1; fi;fi; prev=$curr; done
    $ for i in "${!allstarts[@]}"; do echo "Numéro $i : ${allstarts[i]} à la suite"; done
    Numéro 10 : 3 à la suite
    Numéro 15 : 2 à la suite
    Numéro 67 : 4 à la suite
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre régulier
    Inscrit en
    Décembre 2010
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 258
    Points : 77
    Points
    77
    Par défaut
    Merci beaucoup, ça fonctionne, mais pourrais-tu m'expliquer un peu ton code, j'aimerai comprendre, et la je ne vois pas

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 561
    Points : 19 397
    Points
    19 397
    Par défaut
    en gros, je compare la valeur de l'élément précédent avec l'élément en-cours auquel je retranche 1.
    si c'est le cas, j'assigne certaines variables, dont un tableau dont l'indice est la valeur précédente, et j'en incrémente une autre.
    sinon, j'en purge une, et j'initialise l'incrément à 1, car dans le cas précédent sa valeur de départ est 1.

    enfin, j'itère sur les indices du tableau qui contient les valeurs qui commencent une suite, et le nombre de chiffres qui se suivent
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Membre régulier
    Inscrit en
    Décembre 2010
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 258
    Points : 77
    Points
    77
    Par défaut
    Parfait, merci beaucoup pour ton aide

  8. #8
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 252
    Points : 13 481
    Points
    13 481
    Par défaut
    Au tribunal, t'auras du mal à justifier de faire faire 2 boucles à un ordinateur, là où un être humain n'en fait qu'une.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $ prediction=0;compteur=0;for cur in ${numeros[@]} ; do if [ $cur -eq $prediction ] ; then compteur=$((compteur+1));else echo $compteur;compteur=1;fi;prediction=$((cur+1));done;echo $compteur
    0
    1
    1
    3
    2
    1
    1
    1
    1
    4
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 561
    Points : 19 397
    Points
    19 397
    Par défaut

    cependant, ta ligne retourne des informations non pertinentes, et ne retourne pas toutes les informations requises.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  10. #10
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 252
    Points : 13 481
    Points
    13 481
    Par défaut
    Il a une base de travail pour laquelle rien n'est difficile. C'est tout ce que je cherche à faire.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  11. #11
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 298
    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 298
    Points : 12 778
    Points
    12 778
    Par défaut
    Bonjour,

    Et si le tableau commence avec la valeur 1 au lieu de 2, peut-on considérer le résultat valide ?


    Bon, en fait je lisais autre chose, désolé
    Cordialement.

  12. #12
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 252
    Points : 13 481
    Points
    13 481
    Par défaut
    Pas compris cette objection.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

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

Discussions similaires

  1. [Débutant] trouver le nombre d'éléments qui se suivent dans une matrice
    Par fondeur39 dans le forum MATLAB
    Réponses: 3
    Dernier message: 26/12/2011, 18h14
  2. [Tableaux] nombres qui se suivent
    Par djosh dans le forum Langage
    Réponses: 2
    Dernier message: 20/09/2006, 16h24
  3. Des nombres qui commencent par 0
    Par KEROZEN dans le forum Access
    Réponses: 5
    Dernier message: 28/04/2006, 13h31
  4. Réponses: 9
    Dernier message: 15/09/2005, 16h13
  5. [AWK] récupération de lignes qui se suivent
    Par PtiNico dans le forum Linux
    Réponses: 2
    Dernier message: 12/04/2005, 19h44

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