Bonjour à tous,
Je débute en Fortran et j'ai quelques difficultés à réaliser ce que je souhaite...
Alors, je dispose d'un tableau de réels du type :
0 1 2 3
1 0 4 5
2 4 0 6
3 5 6 0
Tableau dist
Je souhaiterais faire "remonter" mes valeurs pour remplir les cases où j'ai des 0, ou plus simplement, retirer les 0 de mon tableau pour obtenir un second tableau de réels du type :
1 1 2 3
2 4 4 5
3 5 6 6
Tableau temp
J'ai essayé plusieurs approches qui compilent mais qui ne me donnent pas ce que je souhaite (j'adapte ici mon code à l'exemple ci-dessus, en réalité les dimensions des deux tableaux sont variables mais toujours de la forme (n,n) pour dist et (n-1,n) pour temp).
Essai 1 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 real(kind = dp), parameter :: eps = 1.0E-08 integer(kind = sp) :: i,j real(kind = dp), dimension(4,4) :: dist real(kind = dp), dimension(3,4) :: temp
Rq : le "abs" est ici superflu car mon tableau ne contient que des valeurs >= 0 mais je l'ai ajouté en prévision de possibles changements. Cela ne modifie en rien mon code normalement..
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Do i = 1,4 Do j = 1,4 if(abs(dist(j,i)) > eps) then temp(j,i) = dist(j,i) Endif Enddo Enddo
Essai 2 :
Essai 3 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Do i = 1,4 Do j = 1,4 if(abs(dist(j,i)) < eps) cycle temp(j,i) = dist(j,i) Enddo Enddo
Aucune de ces solutions ne fonctionne ... Il y a manifestement un problème au niveau de ma condition qui n'est pas prise en compte mais je ne sais pas pour quelle raison..
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Do i = 1,4 Do j = 1,4 if(i /= j) then temp(j,i) = dist(j,i) Endif Enddo Enddo
Je précise également que je souhaite effectuer cette manipulation pour ensuite déterminer la valeur minimale pour chaque colonne à l'aide de la fonction minval. Mon tableau dist est un tableau de distance entre points.
Les 0 correspondent en fait à la distance entre un point et lui-même. Afin de trouver le point le plus proche, il faudrait donc que j'enlève ces 0 pour obtenir la véritable valeur minimale..
Je vous remercie par avance pour vos réponses et si vous avez besoin de compléments d'information, n'hésitez pas ..!
Bonne journée à tous
Partager