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 :

[Fortran 77] Compiler mon 1er programme


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Inscrit en
    Février 2008
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 1
    Par défaut [Fortran 77] Compiler mon 1er programme
    Bonjour..
    j'ai comme devoir de créer un programme traitant la méthode Gauss-Seidel en Fortran , et comme je maîtrise le Pascal, j'en ai fait l'algorithme, le prg en Pascal puis je l'ai traduit manuellement en Fortran, instruction par instruction, en suivant un guide instruction Fortran 77. En compilant , je me retrouve avec 56 erreurs et 09 warnings, y a-t-il quelq'uun qui pourra m'aider à le compiler..
    Merci
    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    c **********************************************************
    c Résolution d'un système matriciel par la méthode de Gauss-Seidel
    c **********************************************************
          PROGRAM Gauss seidel
          IMPLICIT NONE
    	INTEGER :: i, j, k ,n, m
            REAL,DIMENSION (n,m) :: A
    	REAL,DIMENSION (n) :: b
    	REAL,DIMENSION (m) :: T
    	REAL,DIMENSION (m) :: TE
    	REAL::Somav, Somap, eps 
    	common i/j/k/n/m/A/T/TE/bSomav/Somap/eps
            DATA k/0/n/9/m/9/
    c
    	Subroutine EntrerA
    	DO 100 i=1,n
    	  Write(*,*)"Faites entrer",i,"ligne"
    	  Do 50 j=1,m
    	    Read(5,*) a(i,j)
    50	  Continue
    100	Continue
    	Return
    	End
     
    	Subroutine EntrerB
    	Write(*,*)"Faites entrer les valeur de b"
    	DO 100 i=1,n
    	 Read(5,*) b(i)
    100	Continue
    	Return
    	End
     
          Subroutine EntrerTemp
    	Write(*,*)"Entrer les valeur initiales de T°"
            do 100 j=1,m 
               read(*,*) T(j)
               TE(j)=0.00
    100     continue
            write(*,*)"entrer la valeur de epsilon"    
    	Read(5.*) eps
    	Return
    	End
     
    c	Type function test-arrêt:logical
     
    	Real::Somme
     
    	Test_arrêt=false
    	Somme=0.0
    	DO 100 i=1,n
    	 Somme=Somme+abs(TE(i)-T(i))
    100	continue
    	if(Somme<eps)then
    	 Test_arrêt=True
    	Endif
    	Return
    	End
    C	Debut Programme Principal
    C	************************
    	Call EntrerA
    	Call EntrerB
    	Call EntrerTemp
    5	if not(Test_arrêt) go to 40
    	 k=k+1
    	 Do 30 i=1,n
    	  Do 10 j=1,m
    	   Somav=Somav+a(i,j)*TE(j)
    10	  Continue
    	  Do 20 j=i+1,n
    	   Somap=Somap+a(i,j)*T(j)
    20	  Continue
    	 Te(i)=[b(i)-Somav-Somap]/a(i,i)
    30	 Continue
    40	Continue
    	Write(6,*)"Aprés la",k,"ième itération, voici les résultats"
    	Do 60 i=1,n
    	 Write(6,50) TE(i) 
    50	 Format (F9,2)                              
    60	Continue
    	End

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 72
    Par défaut
    as-tu pensé à ne commencer tes lignes d'instructions qu'à partir de la colonne 7 ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 72
    Par défaut
    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
     
    c **********************************************************
    c Résolution d'un système matriciel par la méthode de Gauss-Seidel
    c **********************************************************
          PROGRAM Gauss seidel
    c en F77 pas de :: pour les déclarations, et tableaux déclarés par
    cA(n,m)
    c      IMPLICIT NONE
          parameter(n=50)
          parameter(m=20)
    	integer i, j, k
          real A(n,m), b(n), T(m), TE(m), Somav, Somap, eps
    c ca je connais pas... peut-être des virgules plutot que des '/' ?
    	common i,j,k,A,T,TE,bSomav,Somap,eps
    c idem
    c        DATA k/0/n/9/m/9/
    c plutôt que des do 100... utilises do ... enddo
    	Subroutine EntrerA
    	do i=1,n
    	  Write(*,*)"Faites entrer",i,"ligne"
    	  do j=1,m
    c ton '5' n'est pas défini, si tu veux lire ce qu'écrit un utilisateur
    c dans le terminal c'est read(*,*), ou read(*,"format")
    	    Read(*,*) a(i,j)
    	  enddo
    	enddo
    	Return
    	End
     
    	Subroutine EntrerB
    	Write(*,*)"Faites entrer les valeur de b"
    	do i=1,n
    	 Read(*,*) b(i)
    	enddo
    	Return
    	End
     
          Subroutine EntrerTemp
    	Write(*,*)"Entrer les valeur initiales de T°"
            do j=1,m 
               read(*,*) T(j)
               TE(j)=0.00
           enddo
           write(*,*)"entrer la valeur de epsilon"
           read(*,*) eps
           return
           End
     
    c	Type function test-arrêt:logical
     
    c déclarer préférentiellement au début.
    	Real Somme
     
    	Test_arret=false
    	Somme=0.0
    c de plus si tu mets plusieurs points '100', ca va planter
    c raison de plus pour utiliser do ... enddo
    	do i=1,n
    	 Somme=Somme+abs(TE(i)-T(i))
    	enddo
    	if(Somme<eps)then
    	 Test_arret=True
    	Endif
    	Return
    	End
    C	Debut Programme Principal
    C	************************
    	Call EntrerA
    	Call EntrerB
    	Call EntrerTemp
    	if (Test_arret) then
    	 k=k+1
    	 Do i=1,n
    	  Do j=1,m
    	   Somav=Somav+a(i,j)*TE(j)
    	  enddo
    	  Do j=i+1,n
    	   Somap=Somap+a(i,j)*T(j)
    	  enddo
    	 Te(i)=(b(i)-Somav-Somap)/a(i,i)
    	 enddo
           else
    	Write(*,*)"Aprés la",k,"ième itération, voici les résultats"
    	Do i=1,n
    	 Write(*,50) TE(i) 
    50	 Format (F9,2)
    	enddo
    	endif
    	End
    premières corrections, y'en a surement d'autres.
    Petite précision, tu enregistres dans un fichier quelquepart, ou c'est simplement affiché dans la console ?

  4. #4
    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
    Tu dis que tu veux faire un programme en F77 alors que ton programme est écrit en F95, mais en format fixe à la F77. Si tu as vraiment un compilateur F77, ça ne va pas fonctionner... Si tu as un compilateur F95, alors pourquoi ne pas écrire directement en format libre ? Ajoute un module pour tes sous-programmes, enlève le common (archaïsme) en mettant les variables du common en public dans le module, etc. Les modules Fortran sont assez près des unit de Delphi.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 110
    Par défaut
    Bonjour,

    un post qui ne va servir à rien...Mais toi qui commence le Fortran, commence par le Fortran 90/95 SVP! Cela sera plus propre avec les histoires de format libre, de déclarations de variable de non-utilisation de common, de vraies boucles do ....

    Donc écoute ce que dit Sylvain Bergeron ...

    PS: c'est juste un cri du coeur, aujourd'hui encore je viens de voir un programme en Fortran 77 (alors que la personne m'affirmait que c'était du 95) où il n'y avait ni de "program" ni de "end program" et avec des implicit à tout va. Je vous assure que c'est très délicat à déboguer...

Discussions similaires

  1. Mon 1er programme java
    Par Just-Soft dans le forum Eclipse Java
    Réponses: 7
    Dernier message: 19/02/2013, 14h40
  2. Réponses: 0
    Dernier message: 22/02/2012, 23h15
  3. en compilant mon programme me donne erreur
    Par domxaline dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 14/08/2009, 10h23
  4. compiler le 1er programme java
    Par amethyste94 dans le forum Langage
    Réponses: 5
    Dernier message: 10/04/2008, 16h12
  5. [Compilation] Dev ne peut pas compiler mon programme
    Par Rémaill dans le forum Dev-C++
    Réponses: 9
    Dernier message: 01/11/2005, 00h41

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