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 :

Demander qu'un nombre soit entre deux autres


Sujet :

Fortran

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 82
    Points : 44
    Points
    44
    Par défaut Demander qu'un nombre soit entre deux autres
    Bonjour tout le monde,

    Comme beaucoup de personnes je suis tombe sur une seg fault ( le plus grand malheur de ceux qui codent ne serait-ce qu'un peu) et je pense avoir la solution mais c'est pas sur,

    Bref je suis en train d'étudier un petit truc et j'ai une subroutine suivante (pas entiere car trop longue), voyez mes beaux prints pour vérifier xD :

    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
     
          ihigh=0                                               !gs-start
          if(ityptl(i).ne.61)then
          if( mod(iabs(idptl(i)),10).ge.2
         . .or. iabs(idptl(i))/10.eq.211
         . .or. iabs(idptl(i))/10.eq.221
         . .or. iabs(idptl(i))/10.eq.321)ihigh=1
          print * ,' hello guy ?'
          endif
          if(ityptl(i).eq.61.or.ihigh.eq.1)then                 !gs-end
          idpdg=idptl(i)
          idepos=idtrafo('pdg','nxs',idpdg)
          idex=iabs(idepos)
          ien=mod(idex,10)
          print *,' hello guy returns'
          if(idepos.ne.0.and.
         .(ien.eq.0.or.idex.lt.100
         . .or.idex.eq.3331.or.idex.eq.2221.or.idex.eq.1111
         . .or.idex.eq.331))then
           print *,'hello guy the trilogy !'
            if( ityptl(i).eq.61)ityptl(i)=60                !gs
            print *,'you can do it !'

    et l'erreur que j'obtiens est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Program received signal 11 (SIGSEGV): Segmentation fault
    Le message d'erreur ne s'affiche pas si j'enlève le bloc de gs start a gs end.

    Je pense (mais alors la je suis pas sur du tout) que l'erreur vient du fait que j'ai demande des valeurs entières comme 211, 221 ou 321 mais le problème est que dans mon truc qui s'appelle idptl je peux avoir 211.0 a 211.9 etc

    Donc je me demandais deux choses qui même si répondait pas a la question me seraient utile pour plus tard :

    Comment puis-je créer une variable qui va de 211.0 a 211.9 (appelons la t1) et la mettre dans mon if ?

    Est-ce que je peux tout simplement pas mettre un truc du type 211. qui dit qu'il peut y avoir des chiffres derrière le point ? Comme le fait que 211. puisse faire 211.0 a 211.9

    Bref c'est a peu près deux fois la même question mais bon,

    ca doit pas être quelque chose de complique mais j'avoue que je ne vois pas encore trop comment faire.

    Merci d'avance pour vos réponses

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 488
    Points : 593
    Points
    593
    Par défaut
    Bonjour,

    Les bonnes pratiques, lorsqu'on développe du code, incluent de compiler avec les options de compilations qui permettent de détecter les erreurs du type utilisation de variable non-initialisée ou d'élément de tableau inexistant ou d'un mauvais type de variable, etc.
    Par exemple pour le compilateur gfortran
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gfortran -g3 -O0 -Wall -fbounds-check -ffpe-trap=invalid,zero,overflow -fbacktrace
    Qui devrait très certainement te montrer, à la compilation et/ou l'exécution, ce qui ne va pas.

    Pour ta question; pas sûr de comprendre ce qui te pose problème, mais attention au type des variables (entier, flottant) qui sont utilisées; tes noms de variables commencent tous par un 'i'; historiquement les gens utilisaiet beacoup ça (notament si le programe ne contient pas l'instruction "implicit none") pour signifier que ce sont des variables de type entier. Mais sans voir cette partie du code, on ne peut que supposer...

    Bonne continuation.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 82
    Points : 44
    Points
    44
    Par défaut
    Bonjour,

    Merci d'avoir répondu,

    Je compilerai en utilisant les options en plus du coup, merci.

    Pour les questions c'est bon j'ai trouve moi-même et j'ai même résolu ce qui bloquait.

    Sinon oui mon code est assez ancien, il a commence a être développé, il y a environ 20 ans donc bon ...

    Et oui les variables étaient toutes entière également

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/07/2010, 16h18
  2. Date comprise entre deux autres dates
    Par Jean_guy dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 06/05/2008, 14h00
  3. trouver un nombre compris entre deux nombres
    Par piloulit dans le forum Excel
    Réponses: 1
    Dernier message: 30/11/2007, 07h15
  4. REGEXP : recupérer une chaine entre deux autres chaines
    Par dude666 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 31/08/2006, 09h23
  5. nombre jour entre deux dates
    Par lazzeroni dans le forum Oracle
    Réponses: 1
    Dernier message: 16/06/2006, 16h15

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