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 :

Problème algorithme construction d'un tableau


Sujet :

Fortran

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 23
    Par défaut Problème algorithme construction d'un tableau
    Salut, je me permets de faire de nouveau appelle à votre savoir faire car je rencontre une n-ième difficulté.. Voilà mon problème, je dispose d’un tableau contenant les coordonnées d’un certain nombre de points, ce tableau possède 2 lignes (la première correspondant aux abscisses et la deuxième correspondant aux ordonnées) et autant de colonnes que de points connus (dans mon exemple j’ai pris 5 points). Dans le code, j’ai appelé ce tableau X.

    Je souhaite construire un deuxième tableau P qui possédera dans sa première colonne les différentes distances d entre les points et les deux autres colonnes contiendront la position dans le tableau X des deux points séparés par cette distance d. Donc par exemple, si on prend les deux premiers points de mon tableau X : (9 ;1) et (5 ;1), on a alors d=4, donc le tableau P aura à sa première ligne : 4 1 2. La deuxième ligne contiendra dans sa 1ière colonne la distance séparant le premier point de X et le troisième point de de X, la 2ième colonne contiendra 1 et la 3ième colonne contiendra 3…
    Donc le tableau P va contenir autant de lignes que de distances possibles, c'est-à-dire pour n points, on va avoir n*(n-1)/2 distances possibles. Dans mon exemple, le nombre de points étant de 5, le nombre de distance possible est : nbdist=10.

    Dans mon algo, j’ai décidé de construire les tableaux P_inter_d et P_inter_points , le premier contient les différentes distances calculées (il a donc une colonne est 10 lignes) et le deuxième contient les indices des points de X correspondant aux distances contenues dans P_inter_d. A la fin de mon algo, je regroupe ces deux tableaux afin d’obtenir le tableau P désiré.

    Le problème c’est que le code que j’ai écrit ne revoie pas du tout le résultat attendu.. Or lorsque je le développe à la main, mon code semble marcher parfaitement. Donc si une personne pouvait m’aider à débloquer la situation ça serait très sympathique. J'ai mis en PJ le resultat qui est affiché lorsque je compile.

    Voilà mon code :
    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
    90
    91
    92
    program testconstruction
     
    implicit none
     
     
    integer :: i,j,k,l, pballocation
    integer, parameter :: nbpoints=5
    integer, parameter :: nbdist=5
    integer, parameter :: nbl=2
    integer, dimension(nbl,nbpoints) :: X
    integer :: num
    integer :: S,q
    real, dimension(:,:), allocatable :: P, P_inter_d,P_inter_points
    real :: d
     
        X = reshape( (/9,1,5,1,2,11,2,3,5,8/), (/nbl,nbpoints/) )
     
         if(.not. allocated(P)) then
            allocate(P(nbdist,3),stat=pballocation )
            if(pballocation .GT. 0) then
               stop " Erreur: probleme memoire "   
             end if
        end if
     
         if(.not. allocated(P_inter_d)) then
            allocate(P_inter_d(nbdist,1),stat=pballocation )
            if(pballocation .GT. 0) then
               stop " Erreur: probleme memoire "   
            end if
         end if
     
         if(.not. allocated(P_inter_points)) then
            allocate(P_inter_points(nbdist,2),stat=pballocation )
            if(pballocation .GT. 0) then
               stop " Erreur: probleme memoire "   
            end if
         end if
     
     
     
    do i=1,(nbpoints-1) !!Construction de la matrice P contenant autant de lignes que de points La première colonne de P contient les distance d entre les points Xi 
            q=q+nbpoints-i              !!et Xj, la deuxième colonne contient l'indice i du point Xi et la troisième colonne contient l'indice j du point Xj
             do j=i+1,nbpoints
                d=((X(1,i)-X(1,j))**2+(X(2,i)-X(2,j))**2)**0.5
                 if (i.EQ.1) then
                   P_inter_d(j-1,1)=d
                   P_inter_points(j-1,1)=i
                   P_inter_points(j-1,2)=j
                  end if
                  if (i.NE.1) then
                      P_inter_d(j+q,1)=d
                      P_inter_points(j+q,1)=i
                      P_inter_points(j+q,2)=j
                 end if
              end do
           if (i.NE.1) then
           q=q+1
           end if
    end do
     
    write(*,*)
    write(*,"('Voici le tableau Pinterd  :')",advance='no')
    write(*,*)
     
    do i=1,nbdist
    write(*,*) P_inter_d(i,1)
    end do
     
     
    write(*,*)
    write(*,"('Voici le tableau Pinterpoints  :')",advance='no')
    write(*,*)
     
    do i=1,nbdist
    write(*,*) P_inter_points(i,1:2)
    end do
     
    do i=1,nbdist
       P(i,1)=P_inter_d(i,1)
       P(i,2)=P_inter_points(i,1)
       P(i,3)=P_inter_points(i,2)
    end do
     
    write(*,*)
    write(*,"('Voici le tableau P :')",advance='no')
    write(*,*)
     
    do i=1,nbdist
    write(*,*) P(i,:)
    end do
     
    end program testconstruction

    Merci pour votre aide,

    Bien cordialement
    Images attachées Images attachées  

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

Discussions similaires

  1. Problème construction d'un tableau sous python
    Par luis98 dans le forum Général Python
    Réponses: 16
    Dernier message: 28/02/2013, 11h10
  2. Réponses: 6
    Dernier message: 07/06/2005, 16h19
  3. Problème de construction avec la STL
    Par gelam dans le forum SL & STL
    Réponses: 19
    Dernier message: 01/05/2005, 12h41
  4. Problème de montage d'un tableau en HTML...
    Par David.V dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 04/02/2005, 08h38
  5. Réponses: 25
    Dernier message: 16/07/2003, 20h41

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