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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Décembre 2010
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 258
    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 confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 293
    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.

  3. #3
    Membre éclairé
    Inscrit en
    Décembre 2010
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 258
    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 664
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    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 éclairé
    Inscrit en
    Décembre 2010
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 258
    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 664
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    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 éclairé
    Inscrit en
    Décembre 2010
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 258
    Par défaut
    Parfait, merci beaucoup pour ton aide

+ 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