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 :

Tableau dynamique en Fortran


Sujet :

Fortran

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Tableau dynamique en Fortran
    Bonjour à tous

    Alors j'aurais besoin d'aide svp.
    Voilà, je dois faire un petit programme en fortran 90 :

    Je dois faire un tableau dynamique (n*n).
    Ensuite, dans chaque case du tableau, je dois placer des entiers aléatoires compris entre 0 et 1.
    Jusque là pas de souci .
    Maintenant, j'analyse toutes les cases du tableau avec une double boucle
    Jusque là, toujours pas de souci.
    Le problème est le suivant : pour chaque case du tableau, je dois tester les cases qui l'entourent et faire la somme de ces cases.

    Voici quelques lignes du programme.
    merci d'avance.
    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
               ! ALLOCATION DU TABLEAU tabvie
     
     PRINT*,"SAISIR LES DIMENSION DE LA COLONIE "      ! LE PROGRAM ATTEND QUE VOUS SAISISSIEZ LA TAILLE DU TABLEAU 
     READ*,n
        IF(.NOT. ALLOCATED (tabvie))THEN
          ALLOCATE ( tabvie(n,n), STAT=ERR )
            IF(err/=0)THEN 
              PRINT*,"PROBLEME D'ALLOCATION"           ! L'ALLOCATION DU TABLEAU C'EST MAL DEROULEE
              STOP 
            ELSE  
              PRINT*,"TABLEAU DEJA ALLOUE "            ! TABLEAU DEJA ALLOUE
              STOP 
            END IF 
        END IF  
    ! INITIALISTAION DE LA COLONIE 
    DO i=1,n                                                           
        DO j=1,n
          tabvie(i,j)=colo() 
        END DO 
     END DO 
    ! AFFICHAGE DE LA COLONIE INITIALE 
     
            DO i=1,n
             PRINT*,tabvie(i,:)
            END DO  
     
     PRINT*, "*****************COLONIE INITIALE***************** "
     
     DO i=1,n 
       DO j=1,n
         IF (tabvie(i,j)==0) THEN 
            IF (voisin().GE.3)THEN
                 tabvie(i,j)=1
              ELSE 
                 tabvie(i,j)=0
            END IF 
         END IF 
     
       END DO 
     END DO 
     
              DO I=1,n
                PRINT*,tabvie(i,:)
              END DO 
     
     
                                       CONTAINS ! PROGRAMMES SECONDAIRES
     
     
     
        INTEGER FUNCTION voisin()          ! SOUS PROGRAMME DEFINISSANT LE NOMBRE DE VOISIN D'UNE CASE tabvie(i,j)
     
                 voisin =tabvie(i-1,j-1)+tabvie(i-1,j)+tabvie(i-1,j+1)&      ! ON VA TESTER  TOUTES LES CASE VOISINE
                            +tabvie(i,j-1)+tabvie(i,j+1)&                    
                         +tabvie(i+1,j-1)+tabvie(i+1,j)+tabvie(i+1,j+1)       ! DE LA CASE tabvie(i,j)
        	END FUNCTION
    J'ai besoin d'aide sur la fonction VOISIN() qui fait la somme des cases entourant tabvie(i,j).

  2. #2
    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
    Ta question n'est pas très précise... Besoin d'aide ? Sur quoi ?

    En ayant lu en diagonale ton programme, le problème que je vois est le suivant: Si i ou j sont égaux à 1 ou n, la fonction accède à des points en dehors du tableau. Tu dois donc tester point par point :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Voisin = 0.
    if (i > 1) then
       if (j > 1) Voisin = Voisin + TabVie(i-1,j-1)
       Voisin = Voisin + TabVie(i-1,j)
       if (j < n) Voisin = Voisin + TabVie(i-1,j+1)
    endif
    ...
    Une alterntive serait d'utiliser la fonction sum() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Voisin = sum(TabVie(max(i-1,1):min(i+1,n),max(j-1,1):min(j+1,n))) - TabVie(i,j)
    Il y a une erreur d'imbrication du code suivant...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            ELSE  
              PRINT*,"TABLEAU DEJA ALLOUE "            ! TABLEAU DEJA ALLOUE

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/03/2015, 18h31
  2. récupérer la memoire et tableau dynamique
    Par Guigui_ dans le forum Langage
    Réponses: 6
    Dernier message: 06/01/2003, 08h02
  3. AFFICHER UN TABLEAU DYNAMIQUE
    Par ghassenus dans le forum Langage
    Réponses: 2
    Dernier message: 28/12/2002, 14h19
  4. [Kylix] tableau dynamique
    Par sdoura2 dans le forum EDI
    Réponses: 1
    Dernier message: 31/10/2002, 08h57
  5. Réponses: 4
    Dernier message: 13/05/2002, 16h43

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