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
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
Bonsoir
voilà le premier des 4 algorithmes :
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.
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
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?
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.
![]()
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.
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]
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
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 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
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
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;
qui est le plus juste?
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;//
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
Partager