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 Perl Discussion :

PERL pour les nuls


Sujet :

Langage Perl

  1. #21
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    Bon ne comprenant pas trop le problème mais si tu souhaites juste incrémenter $i de 2 à chaque tour et que $j soit égale à $i+1, essaie ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for ($i = 0; $i < 10; $i+=2){
         my $j = $i+1;
         print "résultat \$i = $i";
         print "résultat \$i = $j"
     
    }
    résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    resultat $i = 0
    resultat $j = 1
    resultat $i = 2
    resultat $j = 3
    resultat $i = 4
    resultat $j = 5
    resultat $i = 6
    resultat $j = 7
    resultat $i = 8
    resultat $j = 9

    PS: si $i++ équivaut a $i=$i+1

  2. #22
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur de production
    Inscrit en
    Novembre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur de production
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2013
    Messages : 34
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par Gardyen Voir le message
    encore un peu de doc...
    Merci pour la doc.

    J'ai compris, quand ++ est placé après la variable, celle-ci prend la valeur avant d'être incrémenté.

    $i = 0;
    tant que ($i < 10)
    {
    print $i++; affiche 0
    my $j = 0;
    print $i++ + $j++; affiche 1 + 0
    $i++; valeur de $i + 1? avant d'être incrémenté donc $i++ équivalent à $i = 0 + 1 ?
    }

  3. #23
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur de production
    Inscrit en
    Novembre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur de production
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2013
    Messages : 34
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par 6ril23 Voir le message
    Bon ne comprenant pas trop le problème mais si tu souhaites juste incrémenter $i de 2 à chaque tour et que $j soit égale à $i+1, essaie ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for ($i = 0; $i < 10; $i+=2){
         my $j = $i+1;
         print "résultat \$i = $i";
         print "résultat \$i = $j"
     
    }
    résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    resultat $i = 0
    resultat $j = 1
    resultat $i = 2
    resultat $j = 3
    resultat $i = 4
    resultat $j = 5
    resultat $i = 6
    resultat $j = 7
    resultat $i = 8
    resultat $j = 9

    PS: si $i++ équivaut a $i=$i+1
    Bonjour 6ril23,

    En fait, j'essaie juste de comprendre le résultat de la boucle du premier post c'est à dire 013467910

  4. #24
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    tu peux envisager ++ comme une fonction

    $i++ correspond à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $temporaire = $i;
    $i = $i + 1;
    retourne $temporaire
    ++$i correspond à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $i = $i + 1;
    retourne $i
    donc chaque incrémentation ($i++ ou ++$i) va augmenter $i de 1, seulement la première va afficher la valeur avant incrémentation, la seconde la valeur après.
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

  5. #25
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur de production
    Inscrit en
    Novembre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur de production
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2013
    Messages : 34
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par Gardyen Voir le message
    tu peux envisager ++ comme une fonction

    $i++ correspond à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $temporaire = $i;
    $i = $i + 1;
    retourne $temporaire
    ++$i correspond à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $i = $i + 1;
    retourne $i
    donc chaque incrémentation ($i++ ou ++$i) va augmenter $i de 1, seulement la première va afficher la valeur avant incrémentation, la seconde la valeur après.
    Merci Gardyen pour cette explication.

    Donc pour en revenir à ma boucle avec le while :

    my $i = 0;

    while ($i < 10)
    {
    print $i++; affiche 0
    #my $j = 0;
    #print $i++ + $j++;
    print $i++; affiche 0
    $i++; incrémente de 1

    }
    <>;

    Puis la boucle continu ms avec la valeur de $i incrémenté, on est bien d'accord?

  6. #26
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    dissocie les print et les ++, tu y verras plus clair
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

  7. #27
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur de production
    Inscrit en
    Novembre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur de production
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2013
    Messages : 34
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par Gardyen Voir le message
    dissocie les print et les ++, tu y verras plus clair
    Je n y vois pas plus claire lol désolé

    mon print va me permettre d'afficher la valeur de mon $i
    et ensuite il va me l'incrémenter donc dans mon second print il doit m'afficher mon $i = $i + 1?
    puis il me l'incrémente de nouveau avec le $i++ ms à partir de la premier valeur ou de la précédente?

  8. #28
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    il y a incrémentation à chaque ++, le print n'affiche que la valeur retournée par le ++
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

  9. #29
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur de production
    Inscrit en
    Novembre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur de production
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2013
    Messages : 34
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par Gardyen Voir le message
    il y a incrémentation à chaque ++, le print n'affiche que la valeur retournée par le ++
    C'est pour cela que je ne comprend pas le résultat

    print $i++; affiche mon $i à 1
    print $i++ + $j++; affiche 2
    $i++; = 3

    On est bien à + trois à la fin de ma boucle ms dans mon résultat je n'ai pas de 2???

  10. #30
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    je pense qu'il faut éviter les print $++

    si tu dissocies les print $i et les $i++ça sera plus simple

    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
    my $i = 0;
     
    while ($i < 10)
    {
    print $i; affiche 0
    $i++;
    print $i; affiche 1
    #my $j = 0;
    #print $i++ + $j++;
    $i++;
    print $i; affiche 2
    $i++; incrémente de 1
    print $i; affiche 3
    }
    <>;
    de la même manière, écrit my $somme=$i+$j; print $somme;

    car ton écriture est difficilement lisible et si tu dois le reprendre ben tu va galérer, mais si c'est un collègue ben il va pas s'en sortir et il aura raison de râler

    plus ton code sera clair mieux ce sera car celui qui se remettra sur le code n'a (plus) aucune notion du script (ce qu'il fait, comment, pourquoi...):
    - une bonne indentation
    - des commentaires clairs et le plus nombreux possible (on en met jamais trop même si c'est pas naturel)
    - des variables dont le nom est le plus informatif possible de ce qu'elle représente...

  11. #31
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    Citation Envoyé par Snatch77 Voir le message
    Citation Envoyé par Gardyen
    il y a incrémentation à chaque ++, le print n'affiche que la valeur retournée par le ++
    C'est pour cela que je ne comprend pas le résultat

    print $i++; affiche mon $i à 1
    print $i++ + $j++; affiche 2
    print $i;
    $i++; = 3

    On est bien à + trois à la fin de ma boucle ms dans mon résultat je n'ai pas de 2???
    en partant de ce qu'a écrit @gardyen, combien de $i++ as tu? est-ce si anormal d'être à 3? Est ce qu'on passe par 2 et tu ne le vois pas ou est-ce qu'on ne passe pas par l'état 2? (ajoute la partie en rouge t'aidera à avoir la réponse à cette dernière question)

  12. #32
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur de production
    Inscrit en
    Novembre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur de production
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2013
    Messages : 34
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par 6ril23 Voir le message
    je pense qu'il faut que t'arrête avec tes print $++

    si tu dissocies les print $i et les $i++ça sera plus simple

    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
    my $i = 0;
     
    while ($i < 10)
    {
    print $i; affiche 0
    $i++;
    print $i; affiche 1
    #my $j = 0;
    #print $i++ + $j++;
    $i++;
    print $i; affiche 2
    $i++; incrémente de 1
    print $i; affiche 3
    }
    <>;
    de la même manière, écrit my $somme=$i+$j; print $somme;

    car ton écriture est difficilement lisible et si tu dois le reprendre ben tu va galérer, mais si c'est un collègue ben il va pas s'en sortir et il aura raison de râler

    plus ton code sera clair mieux ce sera car celui qui se remettra sur le code n'a (plus) aucune notion du script (ce qu'il fait, comment, pourquoi...):
    - une bonne indentation
    - des commentaires clairs et le plus nombreux possible (on en met jamais trop même si c'est pas naturel)
    - des variables dont le nom est le plus informatif possible de ce qu'elle représente...
    Merci pour ton retour 6ril23

    En fait, c'est une boucle que j'ai eu lors d'un entretien, je ne connais pas perl et il m'a demandé quel était le résultat, je n'ai pas su, mais j'ai retenu le code et je l'ai exécuté et je cherche à comprendre le résultat de cette boucle.

    Mais grâce à vous deux, je l'ai enfin compris, vraiment merci à toi et Gardyen, désolé, ça a pris beaucoup de temps.

    En gros voilà ce que ma boucle fait :

    use strict;
    use warnings;

    my $i = 0;

    while ($i < 10)
    {
    print $i; affiche 0
    $i++; incrémenté de 1 donc 1
    #my $j = 0;
    #print $i++ + $j++;
    print $i; affiche 1
    $i++; incrémenté de 1 donc 2
    $i++; incrémenté de 1 donc 3

    }
    <>;

    my $i = 3;

    while ($i < 10)
    {
    print $i; affiche 3
    $i++; incrémenté de 1 donc 4
    #my $j = 0;
    #print $i++ + $j++;
    print $i; affiche 4
    $i++; incrémenté de 1 donc 5
    $i++; incrémenté de 1 donc 6

    }
    <>;

    my $i = 6;

    while ($i < 10)
    {
    print $i; affiche 6
    $i++; incrémenté de 1 donc 7
    #my $j = 0;
    #print $i++ + $j++;
    print $i; affiche 7
    $i++; incrémenté de 1 donc 8
    $i++; incrémenté de 1 donc 9

    }
    <>;

    my $i = 9;

    while ($i < 10)
    {
    print $i; affiche 9
    $i++; incrémenté de 1 donc 10
    #my $j = 0;
    #print $i++ + $j++;
    print $i; affiche 10
    $i++; incrémenté de 1 donc 11
    $i++; incrémenté de 1 donc 12

    }
    <>;

    la boucle s'arrête

    D'où le résultat = 013467910

    Vraiment merci pour votre temps =)

  13. #33
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    La balise code est ton amie (le bouton avec un #)
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Chemin de perl pour les nuls
    Par toophigra dans le forum Langage
    Réponses: 6
    Dernier message: 05/02/2010, 20h06
  2. Réponses: 6
    Dernier message: 06/11/2005, 11h10
  3. C++ pour les nuls => Linux => Problème
    Par wizardman dans le forum Linux
    Réponses: 6
    Dernier message: 21/09/2005, 00h53
  4. Apprendre le réseau (pour les nuls)
    Par __fabrice dans le forum Développement
    Réponses: 5
    Dernier message: 08/03/2005, 13h49

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