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
Partager