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

Fortran Discussion :

Problème avec do while


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 42
    Par défaut Problème avec do while
    Bonjour,
    voilà j'ai un problème avec ce code : De plus, cela n'a rien à voir avec les tableaux mais genre quand je met ce code



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    do while (N.lt.0.and.N.gt.P.and.IOS.ne.-1)
           write(*,14)
    14     format(/,1X,'Appuyer entre 0 et 9 pour saisir la commande : ',$)
           read(*,*,iostat=IOS) N
           if (N.lt.0.and.N.gt.P.and.IOS.ne.-1) then
           write(*,*)'Chiffre incorrecte.'
           end if
           end do
    Mon programme s'exécute normalement jusqu'à cette boucle où rien ne s'affiche... (P=9 ici je l'ai paramétré avant)
    Je veux faire en sorte que tant que le chiffre de l'utilisateur est inférieur à 0 ou supérieur à 9, le programme continue de lui redemander de saisir un nouveau chiffre. Je pense l'avoir bien traduit mais je ne ocmprend pas pourquoi il ne m'affiche rien. Merci d'avance

  2. #2
    Membre éprouvé
    Homme Profil pro
    Ingénieur modélisation aérodynamique
    Inscrit en
    Juillet 2009
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur modélisation aérodynamique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 105
    Par défaut
    Bonjour,

    Les variables IOS et N sont elles initialisées ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 42
    Par défaut
    ouais ios dans integer et N aussi

  4. #4
    Membre expérimenté Avatar de Grame
    Profil pro
    Inscrit en
    Août 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Août 2007
    Messages : 148
    Par défaut
    ouais ios dans integer et N aussi
    oui mais non

    Une valeur est affectée à IOS à l'intérieur de la boucle dans l'instruction READ.
    Donc, on ne connait pas la valeur de IOS AVANT d'entrer dans la boucle.
    On ne peut donc pas faire un test dessus.

    Je veux faire en sorte que tant que le chiffre de l'utilisateur est inférieur à 0 ou supérieur à 9,
    J'écrirais çà plus simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     do
         write(*,14, advance='no')
    14  format(/,1X,'Appuyer entre 0 et 9 pour saisir la commande : ')
          read(*,*) n
          if (n .ge. 1 .and. n .le. 9) then
            exit
          else
            write(*,*)'Chiffre incorrecte.'
          end if
    end do
    Le $ que tu écris est, je suppose, pour ne pas avoir de passage à la ligne.
    C'est une extension à la norme Fortran 77/90/95 proposée par certains
    éditeurs. L'écriture
    fait partie de la norme Fortran >= 90

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 42
    Par défaut
    C'est une boule quoi que tu utilises ? do seulement ? parce que quand je lance le programme maintenant, peut importe les chiffres que j'entre il me met valeur incorrecte à chaque fois ... IL faudrait plutôt tant que la valeur entrée n'est pas bonne donc si elle est inférieure à 0 ou supérieure à 9 le programme redemande une saisie et sinon on avance dans le programme d'où la boucle do while. Mais cela doit être dans les conditions qu'il y a un blème enfin je ne sais pas. Le IOS.ne.-1 c'est juste pour dire si on rentre une lettre, c'est faux et si on appuie sur f10 cela permet de quitter le programme.

  6. #6
    Membre expérimenté Avatar de Grame
    Profil pro
    Inscrit en
    Août 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Août 2007
    Messages : 148
    Par défaut
    C'est une boule quoi que tu utilises ?
    Classiquement, on trouve 2 sortes de boucles :
    - le test au début, boucle while ...
    - le test à la fin, boucle ... until

    Là c'est une boucle infinie. Le test est à l'intérieur de la boucle et quand il est validé, on sort de la boucle par exit.

    Ce type de boucle fait hurler à l'hérésie certains collègues, mais je la trouve plus simple à comprendre et à maintenir que des boucles avec des tests en entrée ou en sortie très/trop complexes.

    Sous linux avec gfortran, cette boucle fait exactement ce que tu veux.

    Tu es sous quel OS avec quel compilateur ?

  7. #7
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 32
    Par défaut
    Bonjour,
    Je pense que ton problème vient de ta traduction du problème. Tu écris
    Je veux faire en sorte que tant que le chiffre de l'utilisateur est inférieur à 0 ou supérieur à 9
    mais tu écris "tant que le chiffre de l'utilisateur est inférieur à 0 ET supérieur à 9", ce qui est impossible. Ne devrais-tu pas avoir un "OR" au lieu du "AND" dans ta condition d'entrée dans la boucle?

  8. #8
    Membre expérimenté Avatar de Grame
    Profil pro
    Inscrit en
    Août 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Août 2007
    Messages : 148
    Par défaut
    mais tu écris "tant que le chiffre de l'utilisateur est inférieur à 0 ET supérieur à 9", ce qui est impossible. Ne devrais-tu pas avoir un "OR" au lieu du "AND" dans ta condition d'entrée dans la boucle?
    Tu as raison, cà m'avait échappé. mais il faut là aussi initialiser N sinon on n'est pas sûr d'entrer dans la boucle.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [FPDF] Problème avec un while dans un tableau
    Par nigg4z dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 11/10/2007, 15h13
  2. [MySQL] Problème avec un "while"
    Par fantasygirl dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 23/08/2007, 02h09
  3. Réponses: 2
    Dernier message: 17/10/2005, 22h16
  4. Problème avec Do while rs.EOF
    Par lauraned dans le forum ASP
    Réponses: 12
    Dernier message: 21/05/2004, 12h00

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