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 :

programme principal . . .


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 9
    Par défaut programme principal . . .
    Bonjour les amis
    J'ai un problème simple et j'espère obtenir de l'aide dès que possible.
    Le problème est dans l'écriture d'un programme majeur pour exécuter des programmes que vous résoudre les équations

    Je fais le programme suivant et demander la correction
    Ou d'autres idées

    **************************************************************
    function fd(x)
    real fd
    real x
    fd=x**3+2*x+1
    return
    end

    subroutine dichotomie
    real a,b,eps,xm
    integer n,i
    write(*,*)'enter a,b and eps'
    read(*,*)a,b,eps
    n=log(abs(a-b)/eps)/log(2.0)+1
    do i=1,n
    xm=(a+b)/2
    if (fd(a)*fd(xm)<0) then
    b=xm
    else
    a=xm
    endif
    enddo
    write(*,*)'{',a,',',b,',}'
    write(*,*)'xm=',xm,'f(xm)=',fd(xm)
    endsubroutine
    *************************************************************
    function fb(x)
    real fb
    real x
    fb=x**3+2*x+1
    return
    end

    subroutine balayage
    real a,b,p,xsuite
    write(*,*)'entre les valeurs suivant a b p'
    read(*,*)a,b,p
    10 xsuite=a+p
    if(fb(a)*fb(xsuite)<0)then
    write(*,*)'la solution est dans [',a,',',xsuite,']'
    else
    a=a+p
    goto 10
    endif
    endsubroutine

    ****************************************************************
    function fl(x)
    real fl
    real x
    fl=x**3+2*x+1
    return
    end

    subroutine lagr
    real x0,x1,x2,eps
    write(*,*)'entrer x0: '
    read(*,*)x0
    write(*,*)'entrer x1: '
    read(*,*)x1
    write(*,*)'entrer x2: '
    read(*,*)x2
    write(*,*)'entrer eps: '
    read(*,*)eps
    do while (abs(fl(x2))>=eps)
    x2=x1-(fl(x1)*(x1-x0))/(fl(x1)-fl(x0))
    x0=x1
    x1=x2
    write(*,*)'la valeur de la racine est',x2
    enddo
    endsubroutine

    ******************************************************************
    function fn(x)
    real fn
    real x
    fn=3*x**3+2*x+1
    return
    end

    function dfn(x)
    real dfn
    real x
    dfn=x**3+2
    return
    end


    subroutine newton
    real x0,x1
    real eps
    write(*,*)'entrer x0: '
    read(*,*)x0
    write(*,*)'entrer x1: '
    read(*,*)x1
    write(*,*)'entrer eps: '
    read(*,*)eps
    do while (abs(fn(x0))>=eps)
    x1=x0-fn(x0)/dfn(x0)
    write(*,*)'valeur de la racine est',x1
    x0=x1
    enddo
    endsubroutine

    *************************************************************
    function fp(x)
    real fp
    real x
    fp=-(x**3+1)/2
    return
    end

    subroutine pfd
    real x1
    real eps
    write(*,*)'donner la valeur de x1'
    read(*,*)x1
    write(*,*)'donner la valeur de epsilon'
    read(*,*)eps
    x=x1
    do while (abs(x-fp(x))>=eps)
    write(*,*)'valeur de racine est',x
    y=fp(x)
    x=y
    end do
    write(*,*)x,fp(x)
    endsubroutine


    do while(i.ne.6)
    write(*,*)'1.Dichotomie'
    write(*,*)'2.Balayage'
    write(*,*)'3.Lagrange'
    write(*,*)'4.Newton'
    write(*,*)'5.Point fixe'
    write(*,*)'6.Quiter'
    write(*,*)'Votre choix: '
    read(*,*)i
    if(i.eq.1)then
    call dichotomie
    else
    if(i.eq.2)then
    call balayage
    else
    if(i.eq.3)then
    call lagr
    else
    if(i.eq.4)then
    call newton
    else
    if(i.eq.5)then
    call pfd
    endif
    endif
    endif
    endif
    endif
    enddo
    end program

  2. #2
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 388
    Par défaut
    Bonjour.
    Il manque l'instruction annonçant le début du programme principal.
    Ajouter par exemple : "program main", juste avant la ligne "do while(i.ne.6)".
    Ça compile, et renvoie un résultat.

  3. #3
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 388
    Par défaut
    Je n'avais pas bien compris la question. Voici ma proposition :

    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
     
    program main
        implicit none
        integer :: i
        character(len=20), dimension(:), allocatable :: tab_ch
        tab_ch = (/ "1) Dichotomie ", "2) Balayage   ", "3) Lagrange   ", &
                    "4) Newton     ", "5) Point fixe ", "6) Quiter     ", &
                    "Votre choix:  "  /)
        do
            print '(100(a/))', ( trim(tab_ch(i)), i = 1, size(tab_ch) )
            read(*,*) i
            select case (i)
                case (1); call dichotomie
                case (2); call balayage
                case (3); call lagr
                case (4); call newton
                case (5); call pfd
                case (6); exit
            end select
        enddo
    end program

  4. #4
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 9
    Par défaut
    merci pour l'aide mais il ya un petit probleme
    cette probleme quand je essayez exicuter le .
    le probleme est das cette partie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     tab_ch = (/ "1) Dichotomie ", "2) Balayage   ", "3) Lagrange   ", &
                    "4) Newton     ", "5) Point fixe ", "6) Quiter     ", &
                    "Votre choix:  "  /)
    entre

  5. #5
    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
    Citation Envoyé par MEKKADRA Voir le message
    Le problème est probablement avec la réallocation dynamique requise pour cette ligne. Cette facilité est introduite par Fortran 2003 et ton compilateur est probablement antérieur. Tu dois donc déclarer directement le tableau (comme __dardanos__ l'a fait) ou insérer un allocate() juste avant la ligne tab_ch = (/ ...

  6. #6
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 388
    Par défaut
    Si le caractère ")" pose problème, il faut le supprimer.

    Ton compilateur est peut-être trop ancien.
    Ça tourne avec gfortran (gcc 4.6.2).

    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
     
    program main
        implicit none
        integer :: i
        integer, parameter :: nb_choix = 7
        character(len=20), dimension(7) :: tab_ch
        tab_ch = (/ "1 Dichotomie ", "2 Balayage   ", "3 Lagrange   ", &
                    "4 Newton     ", "5 Point fixe ", "6 Quiter     ", &
                    "Votre choix: "  /)
        do
            print '(a)', tab_ch ; read(*,*) i
            select case (i)
                case (1); call dichotomie
                case (2); call balayage
                case (3); call lagr
                case (4); call newton
                case (5); call pfd
                case (6); exit
            end select
        enddo
     
    end program

Discussions similaires

  1. La sous-fonction ne marche pas dans le programme principal
    Par lematlabeur dans le forum MATLAB
    Réponses: 11
    Dernier message: 15/11/2007, 21h04
  2. Réponses: 14
    Dernier message: 04/06/2007, 22h43
  3. Réponses: 13
    Dernier message: 10/07/2006, 16h47
  4. Réponses: 12
    Dernier message: 06/06/2006, 18h22
  5. Réponses: 2
    Dernier message: 02/06/2006, 12h59

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