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 :

Traduction de code Pascal en Fortran90


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2011
    Messages : 4
    Par défaut Traduction de code Pascal en Fortran90
    Bonjour,

    Je veux convertir le code suivant qui est écrit en Turbo Pascal en code Fortran90. Je ne connais rien en pascal !
    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
    function rse( a,b:double ) : double;
    {Raises a to the b power.}
    var
      sign : integer;
      c : double;
    begin
      if (a > 0.0) then
        rse := sexp(b*ln(a))
      else if a = 0.0 then
        rse := 0
      else
        begin
          c := trunc(b);
          if b <> c then begin
            write('error in function rse');
            halt;
          end;
          if odd(trunc(b)) then sign := -1 else sign := 1;
            rse := sign*sexp(b*ln(abs(a)));
        end;
    end; {rse}
    Merci de votre aide !!

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 970
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 970
    Par défaut
    Lai,

    Je n'en suis pas sûr, mais si ce n'est pas le record des déterrages, ça ne doit pas en être loin.

    Pour le code, c'est indiqué dedans : c'est une simple fonction d'élévation du paramètre a à la puissance donnée par le paramètre b de la fonction, ça doit bien exister en Fortran, sinon c'est tout de même facile à implémenter, plutôt que chercher à traduire un langage que tu ne connais pas.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2011
    Messages : 4
    Par défaut
    Voici ce que j'ai obtenu en essayant de traduire le code Turbo Pascal. Seulement le programme s'arrête quand je fais une compilation !
    Auriez-vous une idée sur ce qui ne va pas dans ma traduction ?

    Merci par avance.
    Code Fortran : 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
    FUNCTION rse(a,b)
        ! Raises a to the b power
        REAL :: a,b
        INTEGER :: mysign
        REAL :: c
        REAL :: rse
     
        IF (a > 0.0) THEN
           rse = sexp(b*LOG(a))
        ELSE IF (a == 0.0) THEN
           rse = 0.
        ELSE
            c = INT(b)
            IF (b /= c) THEN
               PRINT *,'error in function rse'
     !          PRINT *,'a = ',a,'b = ',b,',c = ',c
             STOP
            END IF
            IF (MOD(c,2.0) == 0) THEN
               mysign = 1
            ELSE
               mysign = -1
            END IF
            rse = mysign*sexp(b*LOG(ABS(a)))
        END IF 
      END FUNCTION rse

  4. #4
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 970
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 970
    Par défaut
    Qia,
    Citation Envoyé par take_up Voir le message
    Auriez-vous une idée sur ce qui ne va pas dans ma traduction.
    À vrai dire, presque tout.

    edit -------------

    Oups, j'étais dans l'idée d'une traduction Fortran -> Pascal, au temps pour moi.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2011
    Messages : 4
    Par défaut
    c'est pourquoi votre réponse m'avait un peu surpris mais bon le problème est bien posé maintenant !!

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Août 2006
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 974
    Par défaut
    Citation Envoyé par take_up Voir le message
    Seulement le programme s'arrête quand je fais une compilation !
    Auriez-vous une idée sur ce qui ne va pas dans ma traduction ?
    Le compilateur a certainement écrit ce qui n'allait pas avant d'arrêter...

    Je n'ai pas de compilateur Fortran sous la main pour tester, mais avec un survol rapide, je vois que tu utilises une fonction « sexp ». Ça n'existe pas en Fortran. Tu devrais utiliser simplement « exp », mais on ne code jamais a^b en exp(b*ln(a)) en Fortran à ma connaissance. On fait simplement a ** b.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2011
    Messages : 4
    Par défaut
    sexp est une une fonction que j'avais déja défini comme suit:
    FUNCTION sexp(x)
    ! Prevents runtime errors caused by exp underflowing.
    REAL :: x
    REAL :: sexp

    IF (x < -2000.) THEN
    sexp = 0.0
    ELSE
    sexp = EXP(x)
    END IF
    END FUNCTION sexp

    Je pensais que a**b et exp(b*ln(a)) donnent le même résultat !

Discussions similaires

  1. [TP] Code pascal pour lire sur un port série (int 14h)
    Par ebedinade dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 13/12/2005, 00h39
  2. Traduction de code Oracle vers SQL Server
    Par randomcl dans le forum Langage SQL
    Réponses: 1
    Dernier message: 13/11/2005, 23h43
  3. Traduction du code oracle vers SQL - suite
    Par randomcl dans le forum Langage SQL
    Réponses: 1
    Dernier message: 10/11/2005, 14h40
  4. [VB.NET] Traduction de code c++builder -> VbNet
    Par Tempotpo dans le forum Windows Forms
    Réponses: 7
    Dernier message: 22/03/2005, 15h02

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