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"; 
    }

  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");

  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)

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