This commit is contained in:
Kevin Cavailles 2020-11-24 21:22:04 +01:00
commit d2f77bcfa2
3 changed files with 31 additions and 15 deletions

View file

@ -2,9 +2,9 @@ open Graph
type path = string type path = string
val from_file: path -> (float graph * (string * id) list) val from_file: path -> (float graph * (string * id * float) list)
val write_file: path -> string graph -> (string * id) list -> unit val write_file: path -> string graph -> (string * id * float) list -> unit
val export: path -> string graph -> unit val export: path -> string graph -> unit

View file

@ -4,26 +4,38 @@ open Tool
(*fonction qui créé le noeud associé à un utilisateur et rentre la correspondance dans la table des id*) (*fonction qui créé le noeud associé à un utilisateur et rentre la correspondance dans la table des id*)
let init_node g user id l_id= let init_node g user id l_id=
((new_node g id), ((user,id)::l_id)) ( (new_node g id), ((user,id,0.0)::l_id) )
(*fonction qui renvoie l'id d'un utilisateur*) (*fonction qui renvoie l'id d'un utilisateur*)
let rec get_id utilisateur l_id= match l_id with let rec get_id utilisateur l_id= match l_id with
|[]-> raise Not_found |[]-> raise Not_found
|(a,id1)::b-> if a=utilisateur then id1 else get_id utilisateur b |(a,id1,value)::b-> if a=utilisateur then id1 else get_id utilisateur b
(*fonction qui renvoie le nom correspondant à un id*) (*fonction qui renvoie le nom correspondant à un id*)
let rec get_user id1 l_id= match l_id with let rec get_user id1 l_id= match l_id with
|[]-> raise Not_found |[]-> raise Not_found
|(nom,a)::b-> if a=id1 then nom else get_user id1 b |(nom,a,value)::b-> if a=id1 then nom else get_user id1 b
let set_val_du a l_id montant l_utilisateurs=
List.map (fun (nom,id,value)-> if nom=a
then (nom,id,(Float.sub value (Float.div montant (Float.of_int(List.length l_utilisateurs)))))
else (nom,id,value)
) l_id
let set_val_pret utilisateur montant l_id=
List.map (fun (nom,id,value)-> if nom=utilisateur
then (nom,id,(Float.add value montant))
else (nom,id,value)
) l_id
(*fonction qui rentre les paiements réalisés*) (*fonction qui rentre les paiements réalisés*)
let rec paiement g utilisateur l_utilisateurs montant l_id= match l_utilisateurs with let paiement g utilisateur l_utilisateurs montant l_id=
let rec paye g utilisateur l_utilisateurs montant l_id=match l_utilisateurs with
|[]-> (g, l_id) |[]-> (g, l_id)
|a::b-> if not(a=utilisateur) |a::b-> paye g utilisateur b montant (set_val_du a l_id montant l_utilisateurs) in
then paiement (add_arc g (get_id utilisateur l_id) (get_id a l_id) (Float.div montant (Float.of_int(List.length l_utilisateurs)))) utilisateur b montant l_id let l_id= set_val_pret utilisateur montant l_id in
else paiement g utilisateur b montant l_id paye g utilisateur l_utilisateurs montant l_id

View file

@ -1,9 +1,13 @@
open Graph open Graph
val paiement: float graph -> string -> string list -> float -> (string * id) list -> (float graph * (string * id) list) val paiement: float graph -> string -> string list -> float -> (string * id * float) list -> (float graph * (string * id * float) list)
val init_node: float graph -> string -> id -> (string * id) list-> (float graph * (string * id) list) val init_node: float graph -> string -> id -> (string * id * float) list-> (float graph * (string * id * float) list)
val get_id: string -> (string * id) list -> id val get_id: string -> (string * id * float) list -> id
val get_user: id -> (string * id) list -> string val get_user: id -> (string * id * float) list -> string
val set_val_du: string -> (string * id * float) list -> float -> string list -> (string * id * float) list
val set_val_pret: string -> float -> (string * id * float) list -> (string * id * float) list