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 :

program addition fortran


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Octobre 2013
    Messages : 15
    Par défaut program addition fortran
    Bonjour svp j'aimerais que vous m'aidiez a completer ce programme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    program addition
    real :: a ,b ,somme
    write (*,*) entrer deux nombre 
    read (*,*) a ,b
    somme = 0
    somme =a + b
    write (*,*) "la somme est ",somme
    end programm addition
    en effet le probleme qui ce pose c'est que je compile le prrogramme il ne calcule que la somme des nombres entiers et pas des nombres reels. pour 2.3+3 il affiche 5 au lieu de 5.3

    je souhaiterais aussi specifier la condition sur les nombres reels de tel sortes que si nous entrons des lettres (d ,p) ilaffiche "error"
    j'ai ajouté ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    program addition
    real :: a ,b ,somme
    write (*,*) entrer deux nombre 
    read (*,*) a ,b
    somme = 0
    if a ,b real then
    somme =a + b
    write (*,*) "la somme est ",somme
    else if write (*,*) "error"
    end if
    end programm addition
    Mais ce programme ne se compile pas (ne marche pas)

    BIENVOULOIR M'AIDER

  2. #2
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2013
    Messages : 35
    Par défaut
    Bonjour,

    1. Votre premier programme comporte 2 erreurs de syntaxe qui empêche sa compilation :
    - l3 : les guillemets délimitant le message à afficher sont absents
    - l8 : le mot réservé PROGRAM est mal orthographié (il comporte un m de trop)

    La version corrigée ci-dessous se compile sans erreur. Le programme fonctionne aussi bien avec des entiers que des réels :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    program addition
     
    implicit none
    real :: a ,b ,somme
     
    write (*,*) "entrer deux nombre" 
    read (*,*) a ,b
    somme =a + b
    write (*,*) "la somme est ",somme
    end program addition
    J'ai rajouté la clause IMPLICIT NONE afin d'interdire le typage implicite, ce qui est recommandé. J'ai supprimé l'initialisation à zéro de la variable somme qui n'apporte rien ici.

    2. Dans la deuxième version de votre programme, vous souhaitez gérer les erreurs d'entrée/sortie de manière à afficher un message d'erreur personnalisé si l'utilisateur saisit au moins une donnée non réelle. Une façon de faire consiste à utiliser l'argument optionnel IOSTAT de la primitive READ qui retourne une valeur entière non nulle si une erreur de lecture se produit. Le code ci-dessous implante cette approche :

    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
     
    program addition
     
    implicit none
    real	:: a ,b ,somme
    integer :: err
     
    write (*,*) "entrer deux nombre"
    read (*,*,iostat = err) a ,b
     
     
    if (err == 0) then
    	somme = a + b
    	write (*,*) "la somme est ",somme
    else
    	write (*,*) "error"
    end if
     
    end program addition
    Il est à noter que, même si le test n'avait pas été implanté, la saisie d'une donnée non réelle aurait provoquer une erreur d'éxécution, l'arrêt du programme et l'affichage d'un message d'erreur.

    Cordialement.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Octobre 2013
    Messages : 15
    Par défaut
    Merci bien.

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Octobre 2013
    Messages : 15
    Par défaut
    apres avoir ecris le programme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    program somme
    implicit none
    real ::  a ,b ,sommme
    integer :: err
    write (*,*) "entrer deux nombre" 
    read (*,* ,IOSTAT= err) a , b
    if (err =0) then
        sommme=a+b
     write (*,*) "la somme est " , sommme
    else
     write (*,*) "error"
     end if
    end program somme
    les erreurs suivant sont survenues

    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
    if (err =0) then
            1
    Error: Syntax error in IF-expression at (1)
    D:\joel\son.f90:10.4:
     
    else
        1
    Error: Unexpected ELSE statement at (1)
    D:\joel\son.f90:12.4:
     
     end if
        1
    Error: Expecting END PROGRAM statement at (1)
    Error(E42): Last command making (build\son.o) returned a bad status
    Error(E02): Make execution terminated
     
    * Complete *
    bienvouloir m'aider

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2013
    Messages : 35
    Par défaut
    Bonjour,

    Dans une instruction conditionnelle IF...THEH..ELSE..., le mot clé réservé IF doit être suivi d'une expression booléenne. Ici, on cherche à comparer la valeur de la variable err à zéro afin de déterminer si une erreur s'est produite (valeurs non nulles) ou pas (valeur nulle). En Fortran 90, cette comparaison peut se faire à l'aide de l'expression conditionnelle suivante (cf mon message précédent) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    IF (err == 0) THEN
    ...
    Cette expression conditionnelle (opérateur ==, 2 signes égale consécutifs) compare la valeur de 2 variables sans les modifier et retourne TRUE ou FALSE selon le résultat de la comparaison. Elle ne doit pas être confondu avec une instruction d'affectation (err = 0, 1 seul signe égale), qui elle modifie la valeur de la variable err. C'est une erreur fréquente et qui est à l'origine de l'erreur de compilation que vous avez obtenue.

    En Fortran, il est possible d'exprimer d'une manière équivalente le test d'égalité de deux variables en utilisant l'opérateur .NE., ce qui évite tout risque de confusion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    IF (err.NE.0) THEN
    ...

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2013
    Messages : 35
    Par défaut errata
    Dans mon dernier message, toutes les occurrences de l'opérateur .NE. (Not Equal) doivent être remplacées par l'opérateur .EQ. (Equal).

    Ce qui donne pour le dernier paragraphe :
    En Fortran, il est possible d'exprimer d'une manière équivalente le test d'égalité de deux variables en utilisant l'opérateur .NE. .EQ. , ce qui évite tout risque de confusion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <s>IF (err.NE.0) THEN</s>
    IF (err.EQ.0) THEN
    ...
    Désolé pour cette erreur.

Discussions similaires

  1. problème en program Fortran
    Par djwyyoucef dans le forum Fortran
    Réponses: 6
    Dernier message: 02/03/2013, 12h07
  2. [VB6] Problème d'addition de dates et de nombres
    Par pepper dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 28/11/2002, 21h12
  3. [imprecis]Réaliser a^n avec seulement l'opérateur d'addition
    Par Amon dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 08/11/2002, 22h22

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