Problème de programmation en Caml

Discutez d'informatique ici !
fuhlbar
Messages: 1
Enregistré le: 08 Mai 2008, 16:28

Problème de programmation en Caml

par fuhlbar » 08 Mai 2008, 16:37

j'essaie de programmer la décomposition d'une image (représentée par une matrice m*n, chaque case représentant un pixel de l'image) en cycles à support disjoint selon une transformation bijective donnée (en fait je détermine les différentes orbitales d'une permutation sur un tableau de m*n pixels), la transformation étant définie par une matrice 2*2.

Un point est donc représenté par un enregistrement {X:int;Y:int},

Ca donne ça :


let transformation = make_matrix 2 2 0;;
transformation.(0).(0)<- 1 ;transformation.(1).(0)<-1 ;transformation.(1).(1)<-(-1) ;; (je définis ma transformation linéaire)

let transformer point n m t =
match point with
{X=i;Y=j}-> let i’=(t.(0).(0)*i + t.(1).(0)*j) mod m
and j’=(t.(0).(1)*i + t.(1).(1)*j) mod n in
{X=i’;Y=j’};;

et enfin :

let produit_cycles image transformation =
let n = vect_length image and m = vect_length image.(0) in
let test = (make_vect n (make_vect m false)) and resultat = ref [] in
for i = 0 to (n-1) do for j=0 to (m-1) do
if not test.(i).(j) then
let cycle = ref [{X=j;Y=i}] and pointeur = ref (transformer ({X=j;Y=i}) n m transformation) in
test.(i).(j) <- true;
while !pointeur <>{X=j;Y=i}do
cycle := !pointeur::!cycle;
test.(( !pointeur).Y).((!pointeur).X) <- true ;
pointeur := transformer !pointeur n m transformation done ;
resultat := (!cycle)::!resultat done done ;
!resultat;;

Mais voilà, Caml accepte mon code, mais me renvoie un "vect_item" dès que je l'applique à une matrice. Je ne vois pas où j'ai fait une erreur d'indiçage. :mur:



 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite