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

  FORUM HardWare.fr
  Programmation
  Divers

  [Caml] Probleme resolution fonction

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Caml] Probleme resolution fonction

n°827671
pulsar07
Posté le 20-08-2004 à 13:18:39  profilanswer
 

Je dois écrire en Caml la fonction algoRec qui prend les 4 paramètres suivants :
 
a)une fonction scinder : P -> pa(P) qui scinde un problème en une liste de sous problèmes,
b)une fonction estTrivial : P -> B qui retourne true si un problème est trivial ou false sinon,
c)une fonction solutionTrivial : P -> S qui retourne la solution à un problème trivial et
d)une fonction elaborerSolution : P x pa(S) -> S qui retourne la solution d'un problème en fonction de ce problème et des solutions de ses sous problèmes.
 
SACHANT QUE :  
 
- N l'ensemble des entiers naturels,
- B l'ensemble des booléens (true ou false),
- E -> F l'ensemble des applications de E dans F,
- pa(E) l'ensemble des parties d'un ensemble E,
- P l'ensemble des problèmes que l'on veut résoudre et
- S l'ensemble des solutions à ces problèmes.
 
 
Cette fonction algoRec retourne un élément de P -> S qui est une fonction récursive pour résoudre tout problème de P.
 
 
j'ai démarrer comme ca( si vous pouvez m'aider):
 
let algorec scinder estTrivial solutionTrivial elaborerSolution = if stTrivial = true then solutionTrivial else elaborerSolution;;

mood
Publicité
Posté le 20-08-2004 à 13:18:39  profilanswer
 

n°827735
pulsar07
Posté le 20-08-2004 à 14:26:02  profilanswer
 

up  :bounce:

n°827788
pascal_
Posté le 20-08-2004 à 15:11:38  profilanswer
 

Ben décompose ta fonction algoRec :

  • 1 - scinder le problème si il n'est pas trivial
  • 2 - traiter chaque sous-problème (récursif)
  • 3 - élaborer la solution du prolème à partir de la solution des sous-problèmes


Voila, vas-y par étape.


Message édité par pascal_ le 20-08-2004 à 15:13:18
n°827851
pulsar07
Posté le 20-08-2004 à 15:48:39  profilanswer
 

il est claire que je dois ecrire les fonctions qui corresponde aux parametres en fonction de mon probleme.
 
Mais c'est la fonction aloRec que j'ai du mal a ecrire.

n°831168
manuskp2
Posté le 24-08-2004 à 20:32:41  profilanswer
 

yo chui en 4A et g le projet Caml a rattraper moi aussi. eske tu a avancé depuis ce post. moi j'y comprends rien et si g pas cette matiere je redouble. tu imagines mon desarroi. si tu peut m'aider contact moi . manu_skp2@hotmail.com

n°838558
inf113
Posté le 01-09-2004 à 09:53:40  profilanswer
 

let rec algorec scinder estTrivial solutionTrivial elaborerSolution P =  
  let rec auxRec = fun
    |[]->[]
    |(t::q) -> (algorec t)::(auxRec q)
  in
    if (estTrivial P)then (solutionTrivial P)
    else
     elaborerSolution P (auxRec (scinder P));;
 
Voila je n'ai pas caml d'installé sur ma machine de boulot, mais une solution comme celle-ci devrais marcher à peu près aux erreurs de syntaxe près.
Il ya besoin d'une fonction auxilliaires pour traiter la liste des sous problèmes qui apparait sous forme de liste.

n°838559
inf113
Posté le 01-09-2004 à 09:54:43  profilanswer
 

:( est en fait : (

n°838662
nraynaud
lol
Posté le 01-09-2004 à 12:20:44  profilanswer
 

Il faudrait que je t'envoie mon pote, il est super-pédagogue niveau caml, moi je peux que faire la solution, ce qui sert à rien.


---------------
trainoo.com, c'est fini
n°986585
Pur'kaf
Aiguise moi sa !!!
Posté le 18-02-2005 à 20:37:05  profilanswer
 

moi aussi j'ai une question a popos de caml. Pourkoi ce code ne marche pas ?
let procedurep1 = function
 |(1,x,y,z,t) -> moveto x y ;
          lineto z t;
 |(n,x,t,z,t) -> let U = ( x + z +t - z) / 2;
   let V = ( y + t - z + x) / 2;
   procedurep1(n-1,x,y,U,V);;
 
il me souligne les derniers ";;" n me disant qe c pas bon . Sa fait deux ans que je n'ai pas fait d'ocaml et la c dur dur !! merci

n°986597
Pillow
'cos the trees won't talk
Posté le 18-02-2005 à 21:06:02  profilanswer
 

Pur'kaf a écrit :

moi aussi j'ai une question a popos de caml. Pourkoi ce code ne marche pas ?
let procedurep1 = function
 |(1,x,y,z,t) -> moveto x y ;
          lineto z t;
 |(n,x,t,z,t) -> let U = ( x + z +t - z) / 2;
   let V = ( y + t - z + x) / 2;
   procedurep1(n-1,x,y,U,V);;
 
il me souligne les derniers ";;" n me disant qe c pas bon . Sa fait deux ans que je n'ai pas fait d'ocaml et la c dur dur !! merci


Alors déjà il faut faire un bloc quand il y a plusieurs instructions qui se suivent. Tu peux utiliser begin...end ou des parenthèses pour cela.
Ensuite il faut préciser que la fonction est récursive en utilisant le mot clé rec.
Les variables locales se déclarent en utilisant let ... in.
Les majuscules sont réservés aux constructeurs et aux noms de modules.
Et tu utilises deux fois t dans ton deuxième filtre.

Code :
  1. let rec procedurep1 = function
  2.   |(1,x,y,z,t) ->
  3.      begin
  4.        moveto x y;
  5.        lineto z t
  6.      end
  7.   |(n,x,y,z,t) ->
  8.      (
  9.        let u = ( x + z +t - z) / 2 in
  10.        let v = ( y + t - z + x) / 2 in
  11.          procedurep1(n-1,x,y,u,v)
  12.      )
  13. ;;


(j'espère n'avoir rien oublié)
 
edit:l'expression de u et de v est probablement fausse (+z-z [:petrus75])


Message édité par Pillow le 18-02-2005 à 21:20:36
mood
Publicité
Posté le 18-02-2005 à 21:06:02  profilanswer
 

n°986876
Pur'kaf
Aiguise moi sa !!!
Posté le 19-02-2005 à 09:34:24  profilanswer
 

Merci beaucoup je ne comprenait plus rien lol. Apres deux ans on en oublie des choses et ce n'est pas chose facile de s'y remettre après tout ce temps en tout cas merci bcp !!!

n°986879
Pur'kaf
Aiguise moi sa !!!
Posté le 19-02-2005 à 09:39:28  profilanswer
 

j'ai une autre question , y a t'il un moyen de tracer un programme caml ? (debugger en gros)

n°986893
Pur'kaf
Aiguise moi sa !!!
Posté le 19-02-2005 à 10:29:41  profilanswer
 

j'ai voulu faire de la récursivité croisé (une fonction recursive f1 qui apelle une autre fonct rec f2 qui lui meme rapelle f1 ) et voila le resultat  
 
let rec procedurep1 = function
       
 |(1,x,y,z,t) ->
          begin
            moveto x y;
            lineto z t
          end
       |(n,x,y,z,t) ->
          (
            let u = ( x + z +t - y) / 2 in
            let v = ( y + t - z + x) / 2 in
             ( procedurep1((n-1),x,y,u,v)
        procedurep2((n-1),x,y,u,v)  
       )
         )
 
      and procedurep2 = function
        |(1,x,y,z,t) ->
          begin
             moveto x y;
              lineto z t
           end
        |(n,x,y,z,t) ->
           (
              let u = ( x + z -t + y) / 2 in
              let v = ( y + t + z - x) / 2 in
             ( procedurep1(n-1,x,y,u,v)
       procedurep2((n-1),u,v,z,t) )
         );;
 
Le seul probleme c'est que sa marche pas !!
Toplevel input:
>...........................function
>        
> |(1,x,y,z,t) ->
>          begin
>..........
>             ( procedurep1((n-1),x,y,u,v)
>        procedurep2((n-1),x,y,u,v)  
>       )
>         )
This expression has type int * int * int * int * int -> unit,
but is used with type int * int * int * int * int -> 'a -> int * int * int * int * int -> unit.
#
 
Un peu d'aide ???
 
Merci bcp :)

n°986938
el muchach​o
Comfortably Numb
Posté le 19-02-2005 à 12:02:36  profilanswer
 

Oui il y a un debugger non graphique (ligne de commande, sauf p-ê avec le GUI cameleon), mais qui permet de revenir en arrière. Mais il n'est pas disponible sur toutes les versions.

n°986941
Chronoklaz​m
Posté le 19-02-2005 à 12:09:11  profilanswer
 

Pur'kaf a écrit :

j'ai une autre question , y a t'il un moyen de tracer un programme caml ? (debugger en gros)


 
Mettre des print partout ?


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
n°987141
Pillow
'cos the trees won't talk
Posté le 19-02-2005 à 16:50:05  profilanswer
 

Pur'kaf a écrit :

j'ai voulu faire de la récursivité croisé (une fonction recursive f1 qui apelle une autre fonct rec f2 qui lui meme rapelle f1 ) et voila le resultat  
[...]


Tu as oublié un point virgule entre les appels à procedurep1 et à procedurep2.

let rec procedurep1 = function
  |(1,x,y,z,t) ->
     (
       moveto x y;
       lineto z t
     )
  |(n,x,y,z,t) ->
     let u = ( x + z +t - y) / 2 in
     let v = ( y + t - z + x) / 2 in
       (  
          procedurep1((n-1),x,y,u,v);
          procedurep2((n-1),x,y,u,v)  
       )
   
and procedurep2 = function
  |(1,x,y,z,t) ->
     (
       moveto x y;
       lineto z t
     )
  |(n,x,y,z,t) ->
     let u = ( x + z -t + y) / 2 in
     let v = ( y + t + z - x) / 2 in
       (
          procedurep1(n-1,x,y,u,v);
          procedurep2((n-1),u,v,z,t)
       )
;;


 

el muchacho a écrit :

Oui il y a un debugger non graphique (ligne de commande, sauf p-ê avec le GUI cameleon), mais qui permet de revenir en arrière. Mais il n'est pas disponible sur toutes les versions.

La directive trace est parfois utile aussi, bien que limitée (et elle marche sur toutes les plateformes).

# let rec f x =
  if x < 1 then 0
  else x + f (x-1)
;;
# #trace f;;
f is now traced.
# f 3;;
f <-- 3
f <-- 2
f <-- 1
f <-- 0
f --> 0
f --> 1
f --> 3
f --> 6
- : int = 6


Chronoklazm a écrit :

Mettre des print partout ?

[:totoz]
 

n°987149
Pur'kaf
Aiguise moi sa !!!
Posté le 19-02-2005 à 17:11:02  profilanswer
 

Franchement merci, vous m'etes d'une grande aide !!!!!


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

  [Caml] Probleme resolution fonction

 

Sujets relatifs
Problème de script sous IEProblème de header
Probleme de programmation unix et stdarg.h[PHP] BBCode vers html problème avec <br>
SQL fonction conversion vers date [CSS] Probleme IE, bizarre (ou désespérant, au choix)
probleme avec un formulaireproblème de boîte/cadre/float
Problème : script continue avant la fin de l'execution system()[JAVADOC] Problème de tags avec un tiret
Plus de sujets relatifs à : [Caml] Probleme resolution fonction


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