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

Pascal Discussion :

Traduction algorithmes (trouver minimum d'une fonction) de Fortran en Pascal [PFE]


Sujet :

Pascal

  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 51
    Par défaut Traduction algorithmes (trouver minimum d'une fonction) de Fortran en Pascal [PFE]
    Bonjour à tous,
    j'ai besoin de traduire deux algorithmes (pas très longs) du langage fortran en Pascal.
    P.S. les algorithmes sont dans le fichier joint (.doc)
    merci encore
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Par défaut
    Citation Envoyé par Yearning
    Pourriez vous me les traduire de Fortran en Pascal s'il vous plait? je vous en remercie d'avances
    Bonjour
    Comprend pas

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 51
    Par défaut
    Citation Envoyé par krachik Voir le message
    Bonjour
    Comprend pas
    Bonsoir
    voilà le premier des 4 algorithmes :

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    SUBROUTINE MNBRAK(AX, BX, CX, FA, FB, FC, FUNC)
       
       PARAMETER (GOLD=1.618034, GLIMIT=100., TINY=1.E-20)
       
       FA=FUNC(AX)
       FB=FUNC(BX)
       IF(FB.GT.FA)THEN
            DUM=AX
            AX=BX
            BX=DUM
            DUM=FB
            FB=FA
            FA=DUM
       ENDIF
       CX=BX+GOLD*(BX-AX)
       FC=FUNC(CX)
    1  IF (FB.GE.FC) THEN
            R=(BX-AX)*(FB-FC)
            Q=(BX-CX)*(FB-FA)
            U=BX-((BX-CX)*Q-(BX-AX)*R)/(2.*SIGN(MAX(ABS(Q-R),TINY),Q-R)
            ULIM=BX+GLIMIT*(CX-BX)
    	  IF((BX-U)*(U-CX).GT.0.)THEN
     		FU=FUNC(U)
    		IF(FU.LT.FC)THEN
        AX=BX
        FA=FB
        BX=U
        FB=FU
        RETURN
    ELSE IF(FU.GT.FB)THEN
        CX=U
        FC=FU
        RETURN
    ENDIF
    U=CX+GOLD*(CX-BX)
    FU=FUNC(U)
    	  ELSE IF((CX-U)*(U-ULIM).GT.0.)THEN
    		FU=FUNC(U)
    		IF(FU.LT.FC°THEN
    		    BX=CX
    		    CX=U
    		    U=CX+GOLD*(CX-BX)
    		    FB=FC
    		    FC=FU
    		    FU=FUNC(U)
    		ENDIF
    	  ELSE IF((U-ULIM)*(ULIM-CX).GE.0.)THEN
    		U=ULIM
    		FU=FUNC(U)
    	  ELSE
    		U=CX+GOLD*(CX-BX)
    		FU=FUNC(U)
    	  ENDIF
            AX=BX
            BX=CX
            CX=U
            FA=FB
            FB=FC
            FC=FU
    	  GO TO 1   ENDIF
       RETURN
       END
    Je souhaiterai faire une conversion de cet algorithme, du langage fortran au langage Pascal afin de pouvoir l'utiliser dans mon application par la suite.
    mais je ne comprends pas tout, par exemple "GT" c'est "Greater then", en delphi ça donne ">"
    j'aimerai convertir ce programme en entier de fortran en pascal, c'est pas très difficile, par exemple le "=" du fortran se transformera en ":=" en pascal, mais il y a des symboles que je ne connais pas, tel que "GE", "SIGN"... etc.
    comprenez-vous?

  4. #4
    Expert confirmé

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

    N'importe quelle doc Fortran listant les mots clés te permettra de faire la traduction toi-même, ça ne devrait pas être difficile à trouver.

    .GE. = Greater or Equal.


  5. #5
    ALT
    ALT est déconnecté
    Membre Expert
    Avatar de ALT
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2002
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 344
    Par défaut
    Ouaip !
    Je peux même te dire que le '1' en première colonne est une étiquette, que les lignes de commentaire commencent par 'c', que le code doit être écrit à partir de la colonne 5 jusqu'à la colonne 80, &c.

    Mais ne compte pas sur moi pour te faire ton exo.

    Bon courage.

  6. #6
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 996
    Billets dans le blog
    2
    Par défaut
    Bonjour !

    Ceci pourrait de faire gagner du temps mais devrait produire du code "sale" :
    Si tu t'aventures dans cette direction, ce serait sympa de nous gratifier d'un retour d'expérience.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  7. #7
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 51
    Par défaut
    Merci beaucoup Alcatîz
    j'ai utilisé le 2ème logiciel, et après traduction j'ai comparé avec celle que j'ai faite moi même hier soir.
    pour le "go to", moi j'ai converti ça en une boucle "Tant Que",

    Exemple : (de l'algorithme 2)
    en FORTRAN
    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
    1   IF (ABS(X3-X0).GT.TOL*(ABS(X1)+ABS(X2)))THEN
             IF(F2.LT.F1)THEN
                X0=X1
    	      X1=X2
    	      X2=R*X1+C*X3
    	      F1=F2
    	      F2=F(X2)
    	   ELSE
                X3=X2
    	      X2=X1
    	      X1=R*X2+C*X0
    	      F2=F1
    	      F1=F(X1)
    	   ENDIF
       GOTO 1
    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
    WHILE (ABS(X3-X0) > TOL*(ABS(X1)+ABS(X2))) DO
    BEGIN
            IF(F2 < F1)
      THEN
    	      Begin
                       X0 :=X1 ;
    	      X1 :=X2 ;
    	      X2 :=R*X1+C*X3 ;
    	      F1 :=F2 ;
    	      F2 :=F(X2) ;
    	      End
      ELSE
                       Begin
                       X3 :=X2 ;
    	      X2 :=X1 ;
    	      X1 :=R*X2+C*X0 ;
    	      F2 :=F1 ;
    	      F1 :=F(X1) ;
    	      End ;
    END;
    or que le logiciel a fait ceci:

    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
    1   if (ABS(X3-X0) > TOL*(ABS(X1)+ABS(X2)))then begin
    if (F2<F1)then begin
    X0:=X1;
    X1:=X2;
    X2:=R*X1+C*X3;
    F1:=F2;
    F2:=F(X2);
    end else begin
    X3:=X2;
    X2:=X1;
    X1:=R*X2+C*X0;
    F2:=F1;
    F1:=F(X1);
    end;//
    GOTO 1;
    end;//
    qui est le plus juste?

    Il y a aussi une chose que j'ai remarqué, dans le premier algorithme, en faisant la conversion en pascal, c'était pas très évident pour les begin et les end des If.

    Les RETURN aussi je n'ai pas su quoi en faire en Pascal

    mes algo en pascal sont dans le fichier joint, toutes vos critiques sont les bienvenues.
    Merci
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Dichotomie pour trouver le minimum d'une fonction
    Par justin0203 dans le forum MATLAB
    Réponses: 4
    Dernier message: 16/01/2012, 12h20
  2. Trouver le minimum d'une fonction à 3 variables
    Par QuintusII dans le forum MATLAB
    Réponses: 13
    Dernier message: 08/12/2008, 14h19
  3. Recherche du minimum d'une fonction sur un intervalle
    Par jschutz dans le forum Mathématiques
    Réponses: 6
    Dernier message: 18/03/2008, 14h25
  4. Réponses: 2
    Dernier message: 23/11/2007, 11h33
  5. Cherche le minimum d'une fonction
    Par yakamone3 dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 06/06/2006, 10h01

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