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 :

[Débutant] Les tableaux en Fortran


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Débutant
    Inscrit en
    Juillet 2007
    Messages
    386
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 386
    Points : 119
    Points
    119
    Par défaut [Débutant] Les tableaux en Fortran
    Bonjour,
    je suis un débutant en Fortran, j'essaye d'écrire un programme pour créer un tableau A tel que A(i)= i+2. Je suis sûr qu'on doit mettre une boucle de type do enddo mais je n'ai pas su quoi mettre dans cette boucle. Pouvez-vous me compléter mon programme ci-dessous ? Merci pour votre aide
    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
    program tableau 
    implicit none
    integer I
     
    print* ,'entrer le nombre n:'
    read*,n
    REAL:: A(n) 
    integer n
     
     
          do i=1,n
     
          enddo 
     
    end

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 29
    Points : 16
    Points
    16
    Par défaut
    TOUJOURS LES DECLARATIONS EN PREMIER (rien avant)

    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
    program test 
    implicit none
     
    integer :: n,i
    real,dimension(:),allocatable :: A
     
    write(*,*) 'entrer le nombre n:'
    read(*,*) n
     
    allocate(A(n))
     
    do i=1,n
    A(i)=i+2.
    end do 
     
    end program test

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 29
    Points : 16
    Points
    16
    Par défaut
    c'est dimension( : )

  4. #4
    Débutant
    Inscrit en
    Juillet 2007
    Messages
    386
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 386
    Points : 119
    Points
    119
    Par défaut
    Citation Envoyé par cyrius24
    TOUJOURS LES DECLARATIONS EN PREMIER (rien avant)

    program test
    implicit none

    integer :: n,i
    real,dimension(,allocatable :: A

    write(*,*) 'entrer le nombre n:'
    read(*,*) n

    allocate(A(n))

    do i=1,n
    A(i)=i+2.
    end do

    end program test
    Merci pour votre reponse, j ai esseye' le programme , mais il m a donne' que le nombre n, je veux faire apparaitre le tableau A, alors comment faire?

  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
    Points : 1 346
    Points
    1 346
    Par défaut
    Pour afficher le tableau A:
    Ça affiche le tableau sur une ligne. Mais ce n'est pas très lisible, surtout si n est grand. Il est préférable d'afficher aussi les indices :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    write(*,*) (i, A(i), i=1, n)
    Ça s'affiche toujours sur une ligne, mais avec des indices. Il serait cependant préférable d'afficher un élément par ligne. Par ce faire, le plus simple est d'afficher un élément à la fois, soit 1 élément par write :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    do i = 1, n
      write(*,*) i, A(i)
    enddo

  6. #6
    Débutant
    Inscrit en
    Juillet 2007
    Messages
    386
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 386
    Points : 119
    Points
    119
    Par défaut
    Citation Envoyé par Sylvain Bergeron
    Pour afficher le tableau A:
    Ça affiche le tableau sur une ligne. Mais ce n'est pas très lisible, surtout si n est grand. Il est préférable d'afficher aussi les indices :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    write(*,*) (i, A(i), i=1, n)
    Ça s'affiche toujours sur une ligne, mais avec des indices. Il serait cependant préférable d'afficher un élément par ligne. Par ce faire, le plus simple est d'afficher un élément à la fois, soit 1 élément par write :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    do i = 1, n
      write(*,*) i, A(i)
    enddo
    Donc comment ca devient le program en totale si j utilise ton dernier code?

  7. #7
    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
    Points : 1 346
    Points
    1 346
    Par défaut
    Tu dois afficher le tableau après lui avoir assigné des valeurs.

  8. #8
    Débutant
    Inscrit en
    Juillet 2007
    Messages
    386
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 386
    Points : 119
    Points
    119
    Par défaut
    C'est-à-dire comme ça :
    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
    program test 
    implicit none
     
    integer :: n,i
    real,dimension(:),allocatable :: A
     
    write(*,*) 'entrer le nombre n:'
    read(*,*) n
     
    allocate(A(n))
     
    do i=1,n
    A(i)=i+2.
    enddo 
    do i = 1, n
      write(*,*) i, A(i)
    enddo
    end
    ?
    A quoi ça sert alors allocatable :: A? et est-ce qu'il y a une commande équivalente ?
    Merci de nouveau

  9. #9
    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
    Points : 1 346
    Points
    1 346
    Par défaut
    Citation Envoyé par feynman
    C est a dire comme ca :
    ...
    do i=1,n
    A(i)=i+2.
    enddo
    do i = 1, n
    write(*,*) i, A(i)
    enddo
    ...
    Tout à fait. Remarque que tu pourrais combiner les boucles comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ...
    do i = 1, n
      A(i)=i+2.
      write(*,*) i, A(i)
    enddo
    ...
    mais en pratique, dans un programme plus imposant, il faut presque toujours séparer les tâches de calculs et les tâches d'impression. La première forme est donc « meilleure ».

    Citation Envoyé par feynman
    A quoi ca sert alors allocatable :: A? et est ce qu il y a une commande equivalente?
    Ça sert à déclarer un tableau dont les dimensions ne seront déterminées qu'à l'exécution. Il n'y a pas vraiment de commande équivalente.

    En F77, il n'y avait pas d'allocatable. On devait déclarer les tableaux assez grand pour supporter les plus gros cas prévus et valider si la situation était prévue:
    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 test77
    implicit none
     
    integer n,i,DimMaxA
    parameter (DimMaxA=1000)
    real A(DimMaxA)
     
    write(*,*) 'entrer le nombre n:'
    read(*,*) n
    if (n .gt. DimMaxA) then
      write(*,*) 'n est trop grand'
      stop
    endif
     
    do i=1,n
    A(i)=i+2.
    enddo
    do i = 1, n
    write(*,*) i, A(i)
    enddo
    end

Discussions similaires

  1. Petit problème de débutant avec les tableaux
    Par crazy_zakaria dans le forum Débuter
    Réponses: 10
    Dernier message: 20/11/2009, 10h25
  2. [Débutant] manipulations sur les tableaux
    Par nahr_Elk dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 13/09/2008, 23h40
  3. Problème de débutant dans les tableaux
    Par mat1450 dans le forum C++
    Réponses: 8
    Dernier message: 17/08/2007, 19h09
  4. [Débutant] Les fonctions mathématiques en Fortran
    Par feynman dans le forum Fortran
    Réponses: 1
    Dernier message: 17/07/2007, 10h21
  5. [Débutant] Problèmes avec les tableaux.
    Par Lwq dans le forum C++
    Réponses: 6
    Dernier message: 01/11/2005, 12h54

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