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 :

problème avec while


Sujet :

Langage Perl

  1. #1
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut problème avec while
    J'ai un problème avec ma boucle while

    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
    use strict;
    use warnings;
     
    my $val = 0;
     
    while($val < 65 ){
        $val += 3;
     
        if($val > 65){
            $val -= 3;
            last;
        }
     
    }
     
    # 63 => 66
    A chaque passage, j'ajoute 3 jusqu'à ce que j'obtienne le nombre le plus proche mais INFÉRIEUR à 65. Donc, quand j'arrive à 63 si l'ajout suivant fait dépasser le seuil de 65, je ne dois pas effectuer l'opération. Par contre, si l'ajout avait été de 2, j'aurais dû le faire.

    Le problème réel est plus compliqué et le j'appelle un sous-programme qui me renvoie une valeur croissante au cours du temps. Je ne peux donc pas faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    use strict;
    use warnings;
     
    my $val = 0;
     
    while(($val += 3) < 65 ){
     
    }
    Merci pour votre aide,

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 582
    Points : 2 030
    Points
    2 030
    Par défaut
    Hello,

    le pb que je vois dans ta boucle while, c'est que si ton total > 65, tu retire 3. Tant que total < 65, tu rajoute 3.

    Si total = 64, dans la boucle ton programme va rajouter 3, donc total = 67.
    Ensuite, tjs dans la boucle, ton programme va retirer 3 puis total est > 65.

    Total repasse à 64 et voilà comment on fait mumuse avec une boucle infinie

  3. #3
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    le pb que je vois dans ta boucle while, c'est que si ton total > 65, tu retire 3. Tant que total < 65, tu rajoute 3.

    Si total = 64, dans la boucle ton programme va rajouter 3, donc total = 67.
    Ensuite, tjs dans la boucle, ton programme va retirer 3 puis total est > 65.

    Total repasse à 64 et voilà comment on fait mumuse avec une boucle infinie
    ... en effet, d'où le last dans ma boucle if($val > 65)

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 582
    Points : 2 030
    Points
    2 030
    Par défaut
    oups, je commence à rouiller en Perl

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2008
    Messages : 89
    Points : 56
    Points
    56
    Par défaut
    Bonjour,

    Pourrais-tu expliquer ton problème car là l'énoncé n'est pas clair.

    Merci.

    Carlozi.

  6. #6
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    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
    use strict;
    use warnings;
     
    my $val = 0;
     
    while($val < 65 ){
        $val += 3;
     
        if($val > 65){
            $val -= 3;
            last;
        }
        print "$val\n";
    }
    Je cherche à simplifier ce script qui affiche les valeurs de 3 à 63 mais sans utiliser while(($val += 3) < 65 ).
    Je cherche un moyen de supprimer le if($val > 65) mais je pense que c'est impossible.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Salut,

    Pourquoi tu n'utilises pas une boucle for?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    # le compteur commence à 3 ($val=3) 
    # on boucle tant que la valeur est plus petit que 65 ($val <65)
    # on incrémente de 3 à chaque itération ($val += 3)
    for($val=3; $val < 65; $val += 3)
    {
    print $val."\n";
    }

  8. #8
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Sujet d'introduction :
    Le problème réel est plus compliqué et le j'appelle un sous-programme qui me renvoie une valeur croissante au cours du temps. Je ne peux donc pas faire



    use strict;
    use warnings;

    my $val = 0;

    while(($val += 3) < 65 ){

    }
    Merci pour votre aide,

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Jasmine80 Voir le message
    Je cherche à simplifier ce script qui affiche les valeurs de 3 à 63 mais sans utiliser while(($val += 3) < 65 ).
    - Ma boucle for affiche des nombres de 3 à 63.
    - Je n'utilise pas le while()

    Où réside le problème exactement?

  10. #10
    Invité
    Invité(e)
    Par défaut
    Je cherche à simplifier ce script qui affiche les valeurs de 3 à 63 mais sans utiliser while(($val += 3) < 65 ).
    - Ma boucle for affiche des nombres de 3 à 63.
    - Je n'utilise pas le while(...)

    Je cherche un moyen de supprimer le if($val > 65) mais je pense que c'est impossible.
    -> Je ne l'utilise pas dans mon code

    Où réside le problème exactement?

  11. #11
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Le problème réel est plus compliqué et le j'appelle un sous-programme qui me renvoie une valeur croissante au cours du temps.

    Voici le code exact
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
                   while($Tm1<67){
                            $Sonde1 = substr($Demi1,0,$L1);
                            $Tm1 = &Tm($Sonde1,$Ct,$Na);
                            $L1++;
                            if($L1 > 100){
                              $Tm1 = 1000000;
                            }
                   }
    Il me faudrait donc un $Tm1 le plus proche possible de 67 mais inférieur à celui-ci. A chaque fois que l'on rentre dans la boucle, on augmente la taille de $Sonde1 de 1 et cela provoque également une augmentation de la variable $Tm1 mais cette augmentation est de valeur inconstante.


    Merci pour le temps que vous passez à essayer de m'aider mais je pense que ce problème n'a pas d'autre solution que de passer par une opération inverse quand on dépasse le seuil.

Discussions similaires

  1. Problème avec while
    Par dot-_-net dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 20/04/2008, 16h14
  2. [MySQL] problème avec while
    Par scastong dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 28/02/2008, 20h42
  3. [MySQL] problème avec while
    Par dudu134 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 13/11/2007, 08h51
  4. [MySQL] Problème avec while
    Par Whinze dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 03/06/2007, 17h33
  5. [Tableaux] problème avec while
    Par zimotep dans le forum Langage
    Réponses: 3
    Dernier message: 11/09/2005, 10h30

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