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 :

Triangle de Pascal


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 24
    Par défaut Triangle de Pascal
    Bonjour,

    j'ai le programme suivant pour construire le triangle de Pascal, mais il ne m'écris correctement sue les vleurs "1", ailleurs il met des "50", des "1" ou des "0" et je ne comprends vraiment pas où est mon erreur !

    Voici le programme :

    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
    PROGRAM trianglePascal
    INTEGER   :: n=10     ! last row  of the triangle
    CALL triangle (1,n)
    END PROGRAM
     
    RECURSIVE SUBROUTINE triangle (i,m)
    INTEGER                                :: i,m,j
    INTEGER,ALLOCATABLE,SAVE,DIMENSION(:)  :: a,b
    IF (i==1) THEN
       ALLOCATE (a(m))
       ALLOCATE (b(1))
       b=1
    ELSE IF (i==2) THEN
       DEALLOCATE (b)
       ALLOCATE (b(2))
       b=1
    ELSE
       DEALLOCATE (b)
       ALLOCATE (b(i))
       b(1)=1
       b(i)=1
       DO j=2,i-1
          b(j)=a(j-1)+a(j-2)
       END DO
    END IF
    a(1)=b(i)
    PRINT '(12I4)',b
    IF (i==m) RETURN
    CALL triangle (i+1,m)
    END SUBROUTINE
    Merci d'avance pour vos conseils !

  2. #2
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 32
    Par défaut
    Bonjour,
    L'erreur me semble provenir du fait que a n'enregistre que la dernière valeur de b dans ton code
    Je suppose que c'est plutôt
    que tu voulais écrire. Avec cette erreur, tu peux effectivement avoir toutes les valeurs possibles et imaginables puisque ton vecteur a n'a pas de valeur initiales...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 24
    Par défaut Dommage
    Merci Doguette,

    mais ça marche toujours pas !

    Ca va me rendre dingue...

    Merci

  4. #4
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 32
    Par défaut
    Bonjour,
    Un autre point: dans ta boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       DO j=2,i-1
          b(j)=a(j-1)+a(j-2)
       END DO
    ne serait-ce pas plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       DO j=2,i-1
          b(j)=a(j-1)+a(j)
       END DO
    En effet, le premier 3 de la 4ème ligne du triangle provient de la somme des positions 1 et 2 de la 3ème ligne. Avant, tu additionnais avec a(0) qui n'est pas défini... J

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 24
    Par défaut Toujours pas !
    Merci encore une fois Doguette, mais ça ne marche toujours pas !

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 24
    Par défaut Wooohooo !
    Salut Doguette,

    j'ai trouvé mon programme en mieux dans un bouquin :

    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
    PROGRAM trianglePascal
    INTEGER   :: n=10     ! last row  of the triangle
    CALL triangle (1,n)
    END PROGRAM
    
    RECURSIVE SUBROUTINE triangle (i,m)
    INTEGER                                :: i,m,j
    INTEGER,ALLOCATABLE,SAVE,DIMENSION(:)  :: a,b
    IF (i==1) THEN
       ALLOCATE (a(m))
       ALLOCATE (b(1))
       b=1
    ELSE IF (i==2) THEN
       DEALLOCATE (b)
       ALLOCATE (b(2))
       b=1
    ELSE
       DEALLOCATE (b)
       ALLOCATE (b(i))
       a(i)=b(i-1)
       b(1)=1
       b(i)=1
       DO j=2,i-1
          b(j)=a(j-1)+a(j-2)
       END DO
    END IF
    PRINT '(12I4)',b
    IF (i==m) RETURN
    CALL triangle (i+1,m)
    END SUBROUTINE
    Ils avaient cependant la même erreure que tu m'avais trouvée : en rouge dans le code...


  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 24
    Par défaut Oups
    j'ai mis le mauvais code, le voici :

    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
    PROGRAM Pascaltriangle
    IMPLICIT NONE
    INTEGER,ALLOCATABLE,DIMENSION(:)  :: x
    INTEGER                        :: sort
    sort=10     ! number of rows in the triangle
    ALLOCATE (x(1))
    CALL triangle(x,1,sort)
    DEALLOCATE (x)
    END PROGRAM
    !
    RECURSIVE SUBROUTINE triangle(x,n,sortt)
    INTEGER                          :: n,sortt
    INTEGER,DIMENSION(*)             :: x
    INTEGER,ALLOCATABLE,DIMENSION(:) :: t
    IF (n==1) THEN
    ALLOCATE(t(1))
    t=1
    ELSE IF(n==2) THEN
    ALLOCATE(t(2))
    t=1
    ELSE
    ALLOCATE(t(n))
    t(1)=1
    t(n)=1
    DO i=2,n-1
    t(i)=x(i-1)+x(i+1)
    END DO
    END IF
    PRINT '(12I4)',t
    IF (n==sortt) RETURN
    CALL triangle(t,n+1,sortt)
    END SUBROUTINE

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Affichage du Triangle de Pascal
    Par jrosenzw dans le forum C++
    Réponses: 11
    Dernier message: 14/03/2009, 03h10
  2. Triangle de pascal
    Par koko03 dans le forum Mathématiques
    Réponses: 3
    Dernier message: 26/01/2009, 17h52
  3. triangle de pascal
    Par chouuc dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 20/01/2009, 01h36
  4. Triangle de Pascal
    Par WhiteTigerZ dans le forum Pascal
    Réponses: 5
    Dernier message: 09/03/2007, 19h47
  5. Triangle de Pascal
    Par yushkoya dans le forum VBScript
    Réponses: 6
    Dernier message: 11/07/2006, 14h18

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