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).

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
Essai 1 :

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
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..

Essai 2 :

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
Essai 3 :

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
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..
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