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 :

Précision de types en perl [Débutant(e)]


Sujet :

Langage Perl

  1. #1
    Membre émérite

    Homme Profil pro
    Inscrit en
    Juillet 2003
    Messages
    2 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 2 075
    Points : 2 844
    Points
    2 844
    Par défaut Précision de types en perl
    Bonjour
    Commencant en perl j'ai un programme tout bete qui me calcule si le nombre que j'entre est pair ou non:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #!/usr/bin/perl -w
    #petit prog destiné a verifier la parité d'un nombre.
     
    printf ("Rentrez un nombre: \n");
    chomp($A=<STDIN>);
     
    if ($A%2==0)
       {
            print ("$A est un nombre pair\n");
       }
    else
       {
            print ("$A est un nombre impair\n");
       }
    Seulement voila: si l'on rentre une lettre au lieu d'un nombre le comportement devient n'importe quoi j'aurais donc aimé rajouter une clause elsif précisant que si $A n'est pas un entier, l'utilisateur doit recommencer en saisissant un nombre entier.
    Donc un elsif qui permette de clarifier le type de $A tout en me permettant de revenir au début mon problème étant que je ne sais pas comment l'écrire en perl
    de vos idées

  2. #2
    Membre éclairé
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Points : 777
    Points
    777
    Par défaut
    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
    22
    23
    24
    25
    26
    27
     
     
    sub IsNumeric {
            my $InputString = shift;
     
            if ($InputString !~ /^[0-9|.|,]*$/) {
                    return 0;
            }
            else {
                    return 1;
            }
        }
     
     
    my $A = 5.2;
    if (IsNumeric($A)) {
            if ($A%2)
            {   
                    warn "$A est un nombre pair\n";
            }
            else
            {
                    warn "$A est un nombre impair\n";
            }
    } else { 
            warn "pas un nombre"; 
    }
    Remoting Context Matters
    Everything in this chapter is 100 percent undocumented. Reliance on these techniques is not supported by either Microsoft, the publisher, or the author of this book. Use at you own risk! If your computer won't work afterwards, your toaster blows up or your car doesn't start, I assume no liability whatsoever: You're now about to enter the uncharted territories of .NET and you do so on your own risk. I can only provide some guidance

  3. #3
    Membre émérite

    Homme Profil pro
    Inscrit en
    Juillet 2003
    Messages
    2 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 2 075
    Points : 2 844
    Points
    2 844
    Par défaut
    Bonsoir
    il me faudrait créer une fonction rien que pour ça
    Sinon j'avoue que je ne comprends pas très bien l'expression régulière: !~ /^[0-9|.|,]*$/ sur le début le !~
    Qt à warn:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ perldoc warn
    No documentation found for "warn".
    Tu pourrais commenter ta solution s'il te plait?

  4. #4
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut Re: Précision de types en perl
    Citation Envoyé par Gnux
    Bonjour
    Commencant en perl j'ai un programme tout bete qui me calcule si le nombre que j'entre est pair ou non:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #!/usr/bin/perl -w
    #petit prog destiné a verifier la parité d'un nombre.
     
    printf ("Rentrez un nombre: \n");
    chomp($A=<STDIN>);
     
    if ($A%2==0)
       {
            print ("$A est un nombre pair\n");
       }
    else
       {
            print ("$A est un nombre impair\n");
       }
    Seulement voila: si l'on rentre une lettre au lieu d'un nombre le comportement devient n'importe quoi j'aurais donc aimé rajouter une clause elsif précisant que si $A n'est pas un entier, l'utilisateur doit recommencer en saisissant un nombre entier.
    Donc un elsif qui permette de clarifier le type de $A tout en me permettant de revenir au début mon problème étant que je ne sais pas comment l'écrire en perl
    de vos idées
    non y a 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
    #!/usr/bin/perl -w
    #petit prog destiné a verifier la parité d'un nombre.
     
    printf ("Rentrez un nombre: \n");
    chomp($A=<STDIN>);
     
    if ($A ~= /^\d+$/) {
            if ($A%2==0)    {
            print ("$A est un nombre pair\n");
            } else {
            print ("$A est un nombre impair\n");
           }
    } else{
    print "$A n'est pas un chiffre\n";
    }

  5. #5
    tfe
    tfe est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 85
    Points : 95
    Points
    95
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print ($variable%2 ? "impair": "paire");

  6. #6
    Membre émérite

    Homme Profil pro
    Inscrit en
    Juillet 2003
    Messages
    2 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 2 075
    Points : 2 844
    Points
    2 844
    Par défaut
    Citation Envoyé par tfe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print ($variable%2 ? "impair": "paire");
    J'avoue que j'ai de la peine à comprendre cet opérateur: si l'expression $var%2 est vraie ça retourne impaire c ça? Et si elle est fausse c'est pair.
    Mon interrogation porte sur l'évaluation de la variable: à savoir si en perl une variable est dite vraie qut elle est évaluée à 1 ou à 0 ? Car si je fais un prog de test genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #!/usr/bin/perl -w
    use strict;
    $var=2;
    print ($var%2 ? "impair" : "pair");
    J'obtiens pair ce qui veut dire que par l'interpréteur $var%2 a été interprété comme faux et donc qd perl une variable vraie retourne 1car si je mets 3 j'ai bien impair. Ca me semble bizarre (j'ai peut être trop l'habitude du return 0 )
    En tout cas merci pour votre aide
    PS:une dernière chose comment insérer un retour chariot pour l'affichage du résultat de l'opérateur ternaire?

  7. #7
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Pour ce qui est de l'expression son fonctionnement est rigoureusement identique à celui du C !!

    Si ce qui précède le ? est vrai, on prend la valeur d'avant le :.
    Si c'est faux, on prend ce qui suit le :.

    Ta difficulté porte en fait sur le ($a%2) qui est le reste de la division entière de $a par 2.

    Si $a est pair, son reste de division par 2 est 0, ce qui logiquement se traduit par faux.
    Si $a est impair, son reste de division par 2 est 1, ce qui donne la valeur logique vraie (est vraie toute valeur différente de 0, de "" et de undef).

    C'est là qu'est la difficulté



    Sinon, il n'y a pas que le calcul pour savoir si un nombre est pair
    Il y a aussi



    P.S. pour ton retour chariot, tu peux utiliser, au choix :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print "Le nombre est ".(($a%2)?"impair":"pair")."\n";
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf ("Le nombre est %s\n", ($a%2)?"impair":"pair");
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  8. #8
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Et pour compèter et répondre à ton problème initial, tu n'as pas réellement besoin d'un elseif

    Algorithmiquement, tout se résoud avec une boucle à condition terminale (type do {} while).

    Enjoy :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #!/usr/bin/perl
     
    use warnings;
    use strict;
     
    my $a;
     
    do {
      print ("Entrez un nombre :");
      chomp ($a=<>);
    } while ($a !~ /^\d+$/);
     
    print ("Le nombre est ".(($a%2)?"impair":"pair")."\n");
    8)
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

Discussions similaires

  1. Précision du type d'enum : standard ?
    Par Klaim dans le forum C++
    Réponses: 10
    Dernier message: 22/11/2007, 18h48
  2. [XPath] petite précision sur type de syntaxe
    Par Royd938 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 15/06/2006, 12h13
  3. [MS SQL] Est il possible de forcer la précision du type REAL
    Par TEXMEX dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 03/04/2006, 17h31
  4. Précision du type float
    Par cj227854 dans le forum C
    Réponses: 5
    Dernier message: 02/11/2005, 20h54
  5. [MS-SQL][ADO] précision du type FLOAT
    Par Le Lézard dans le forum Bases de données
    Réponses: 2
    Dernier message: 23/09/2004, 15h30

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