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 :

Traduire vers Fortran 90


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1
    Par défaut Traduire vers Fortran 90
    Bonjour/Bonsoir à tous, voila je viens ici pour avoir de l'aide au niveau de la programmation en Fortrant 90. Etant débutant en C et encore plus en Fortrant, je n'arrive pas à faire cet exercice.

    Voila donc le programme, je dois le traduire en Fortrant 90 (en remplaçant les GOTO par une boucle DO WHILE mais je sais pas où les placer)

    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
    DIMENSION M(20)
    100        FORMAT (1H1,20X,34HDECOMPOSITION EN FACTEURS PREMIERS//)
    101        FORMAT (30X,I3,2H =,I3,20(I4))
                 WRITE(*,100)
          DO 5 I=1,50
          N=I
          K=0
          IF(N.LE.2) GOTO 4
          NS2=N/2
          DO 2 L=2,NS2
    1    IF (MOD(N,L).NE.0) GOTO 2
          N=N/L
          K=K+1
          M(K)=L
          IF(N.EQ.1) GOTO 3
          GOTO 1
    2    CONTINUE
    3    IF (K.NE.0) WRITE(*,101) I,(M(L),L=1,K)
    4    IF (K.EQ.0) WRITE(*,101) I,I
    5    CONTINUE
          END
    Ma proposition (désolé si c'est nul j'ai eu qu'un "cours" de fortrant...)

    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
    Function ??
    INTEGER NS2, K, N, M, L
     
    DIMENSION M(20)
     
    100 FORMAT (1H1,20X,34HDECOMPOSITION EN FACTEURS PREMIERS//)
    101 FORMAT (30X,I3,2H =,I3,20(I4))
          WRITE(*,100)
          DO 5 I=1,50
          N=I
          K=0
          IF(N.LE.2) THEN  et4
          ELSE
          NS2=N/2
          DO 2 L=2,NS2
          ENDIF
    1    IF (MOD(N,L).NE.0) THEN et2
          N=N/L
          K=K+1
          M(K)=L
          ENDIF
          IF(N.EQ.1) THEN et3
          ELSE  et1
          ENDIF
    2    NEXT
    3    IF (K.NE.0) WRITE(*,101) I,(M(L),L=1,K)
          ENDIF
    4    IF (K.EQ.0) WRITE(*,101) I,I
         ENDIF
    5   NEXT
          END
    Qu'en pensez vous ??? Si vous avez une solution à proposer, n'hésitez pas , merci d'avance.

    Bonne soirée.

  2. #2
    Membre éprouvé Avatar de rogue-spectre
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 104
    Par défaut
    Salut,

    La recette pour du code spaghetti : "saupoudrez votre code de goto".
    Je t'invite à parcourir les cours de developpez ou tu peux également allez sur http://www.idris.fr/data/cours/lang/f90/F90_cours.html où tu as d'autres cours f77 f95 f2003.

    Pour ton essai de code tu as une boucle "DO" imbriquée dans un "IF" et donc c'est à revoir. Le truc qui peut te servir c'est le mot clé "EXIT" qui te permets de sortir d'une boucle "DO" (qui se finissent par "END*DO") avant la fin des incréments, dans le même style tu as "CYCLE" qui te permets de passer directement à l'itération suivante de ta boucle sans effectuer la fin des instructions de celle-ci (j'espère que c'est assez clair)

    Finalement tu as des "GOTO"*qui vont être remplacé simplement par des "END DO" et d'autre par des "EXIT" si j'ai bien les yeux en faces des trous.

    Pour tes test "IF", tu peux faire soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
       IF( condition )THEN
            ! plusieurs lignes de code
       ELSE IF( autre condition )THEN
            ! blablalba
       ELSE 
            ! le truc final
       END IF
    ou si tu as juste un test et un petit truc à faire qui prend qu'une ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       IF( condition ) un_truc_a_faire
    pas besoin du "END IF" dans ce cas

    ... et un tableau à taille fixe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       type_des_elements_du_tableau, DIMENSION( _taille_dim1, _taille_dim2, ...) :: nom_du_tableau
    … et, tu as oublié de remplacer les "DO i=" par des "DO WHILE( condition_de_sortie_de la_boucle )"

    Bonne journée


    PS : Il n'y a pas de "t" à la fin de Fortran
    PSS : tu peux également privilégier les symboles pour les tests, c'est plus joli et ça fait des mots clé à retenir en moins
    .EQ. ==
    .LE. <=
    .LT. <
    .GT. >
    .GE. >=

Discussions similaires

  1. Problème de passage de tableau de Python vers Fortran 90
    Par P.Math dans le forum Interfaçage autre langage
    Réponses: 0
    Dernier message: 31/03/2010, 12h01
  2. traduire code fortran en c++
    Par frereamir dans le forum C++
    Réponses: 1
    Dernier message: 15/07/2009, 14h59
  3. Programme Java à traduire en Fortran
    Par leons dans le forum Fortran
    Réponses: 1
    Dernier message: 22/03/2007, 15h55
  4. Conversion de fichier Excel vers Fortran : comment ?
    Par gibobo dans le forum Fortran
    Réponses: 2
    Dernier message: 12/03/2007, 19h29
  5. [vba access] traduire du fortran en vba
    Par sun19 dans le forum VBA Access
    Réponses: 1
    Dernier message: 26/11/2006, 08h01

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