Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1174 connectés 

  FORUM HardWare.fr
  Programmation
  Langages fonctionnels

  Problème en Caml

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème en Caml

n°1728858
Fuhlbar
Posté le 06-05-2008 à 01:27:02  profilanswer
 

Bonjour,
 
(Bon, tout d'abord, je préviens : je suis un grand amateur en programmation, merci d'être indulgent et de ne pas me découper en rondelles  :pt1cable: ). Voilà, j'essaie de programmer la décomposition en produit de cycles une image selon une transformation donnée bijective (les pixels étant représentés par un enregistrement {X:int, Y:int}, une image étant représentée par une matrice m*n de m*n pixels (les seuls paramètres dont qu'on prend en compte ici sont les paramètres m et n de la matrice, (on transforme les pixels de la matrice en fonction de leur coordonnées uniquement, pas de leur "contenu" ie leur couleur par ex.) ;la transformation, linéaire, sur les points étant donnée par une matrice "transformation" ) Ca donne ça :
 

Code :
  1. type point ={X:int;Y:int} ;;
  2.  
  3. let transformation = make_matrix 2 2 0;;
  4. transformation.(0).(0)<- 1 ;transformation.(1).(0)<-1 ;transformation.(1).(1)<-(-1) ;; (je définis ma matrice de transformation)
  5.  
  6. let transformer point n m t =
  7. match point with
  8. {X=i;Y=j}-> let i’=(t.(0).(0)*i + t.(1).(0)*j) mod m
  9.          and j’=(t.(0).(1)*i + t.(1).(1)*j) mod n in
  10.          {X=i’;Y=j’};;
  11. (fonction qui transforme un point de coordonnées i,j en un point de coordonnées i',j')
  12.  
  13. let produit_cycles image transformation =
  14.   let n = vect_length image and m = vect_length image.(0) in
  15.   let test = (make_vect n (make_vect m false)) and resultat = ref [] in
  16.   for i = 0 to (n-1) do for j=0 to (m-1) do
  17.      if not test.(i).(j) then
  18.        let cycle = ref [{X=j;Y=i}] and pointeur = ref (transformer ({X=j;Y=i}) n m transformation) in
  19.             test.(i).(j) <- true;
  20.             while !pointeur <>{X=j;Y=i}do
  21.                 cycle := !pointeur::!cycle;
  22.                 test.(( !pointeur).Y).((!pointeur).X) <- true ;
  23.                 pointeur := transformer !pointeur n m transformation done ;
  24.            resultat := (!cycle)::!resultat done  done ;
  25.            !resultat;;


Le compilateur accepte mon programme  :)  mais dès que je veux l'appliquer à une matrice, il m'affiche invariablement un " Invalid_argument "vect_item"". Je ne vois pas où une matrice est incorrectement indicée.
Je sais que tout ceci est un peu brouillon et manque de clarté, mais une aide serait la bienvenue.
 
Merci d'avance!


Message édité par gilou le 06-05-2008 à 23:21:07
mood
Publicité
Posté le 06-05-2008 à 01:27:02  profilanswer
 

n°1728935
masklinn
í dag viðrar vel til loftárása
Posté le 06-05-2008 à 11:27:45  profilanswer
 

Je ne fais pas de Caml donc je doute pouvoir t'aider, mais je recommande 2 choses:

 

1. Déplacer ton post dans la sous-cat "langages fonctionnels" plutôt que dans Divers hop, un modo l'a fait pour toi
2. Utiliser la balise [ code=ocaml] (et fermer avec [/code ]) (sans les espaces naturellement) pour avoir de la coloration des sources, ça rendra la chose beaucoup plus lisibles pour les gens lisant ton post: bon ben c'est fait aussi [:pingouino]

 
Code :
  1. let rec ninetyNineBottlesOfBeer  = function
  2.     0 -> print_string "no more bottles of beer\n"
  3.   | 1 -> print_string "1 bottle of beer on the wall. Take it down, pass it around\n" ; ninetyNineBottlesOfBeer 0
  4.   | n -> print_int n ; print_string " bottles of beer on the wall. Take one down, pass it around\n" ; ninetyNineBottlesOfBeer (n - 1)
  5.  in  ninetyNineBottlesOfBeer 99 ;
  6.  
  7. (* ocamlopt -o ninetyNineBottlesOfBeer nintyNineBottlesOfBeer.ml *)


Message édité par masklinn le 07-05-2008 à 09:31:21

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1728936
Elmoricq
Modérateur
Posté le 06-05-2008 à 11:28:45  profilanswer
 

Sujet déplacé.

n°1729273
gilou
Modérateur
Modzilla
Posté le 06-05-2008 à 23:21:36  profilanswer
 

Et j'ai ajouté les balises.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1809644
moma
Posté le 07-11-2008 à 18:59:38  profilanswer
 

Première chose :
la ligne  

Code :
  1. (make_vect n (make_vect m false))


 
va te poser problème. En effet la commande make_vect rend un vectuer dont les éléments sont physiquement égaux à son deuxième argument (dans le sens ==). C'est à dire qu'à chaque fois que tu vas modifier l'élément d'indice j dans la ligne d'indice i, les éléments d'indice j de chaque lignes vont être modifiés en conséquence. Il faut utiliser comme tu l'as fait plus haut "make_matrix".
 
Je n'ai pas identifié ton problème, mais je vais te poser une question quand même : As-tu essayer de retracer à la main les premières étapes de calculs de ton programme ? Tu utilises la boucle interactive pour essayer de voir où est le problème. Sinon tu peux essayer de mettre en commentaire judicieusement certaines parties de ton programme pour essayer toujours d'isoler l'erreur.
 
A+


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Langages fonctionnels

  Problème en Caml

 

Sujets relatifs
[PIC] Problème de mise en place I²CVC++ : Problème de scrolling sur un CEdit
Problème très étrange qui pourra me donner la réponse ?Problème avec des JLayeredPane
PLEASE HELP!!! Probleme avec un loadmovie Caml , problème avec le carré
[Caml] Problème à n corps[Caml] Conception de ptit jeux --> probleme!
[Caml] Probleme resolution fonctionproblème en camL
Plus de sujets relatifs à : Problème en Caml


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR