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
Version imprimable
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
BonjourCitation:
Envoyé par Yearning
Comprend pas 8-)8-)8-)8-)
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:
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.
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 PASCALCode:
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:
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:
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