diff --git a/medium_project/src/MSgfile.mli b/medium_project/src/MSgfile.mli index b69b937..4d7f9df 100644 --- a/medium_project/src/MSgfile.mli +++ b/medium_project/src/MSgfile.mli @@ -2,9 +2,9 @@ open Graph 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 diff --git a/medium_project/src/moneySharing.ml b/medium_project/src/moneySharing.ml index 7c7705b..2714b21 100644 --- a/medium_project/src/moneySharing.ml +++ b/medium_project/src/moneySharing.ml @@ -4,26 +4,38 @@ open Tool (*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= - ((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*) let rec get_id utilisateur l_id= match l_id with |[]-> 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*) let rec get_user id1 l_id= match l_id with |[]-> 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*) -let rec paiement g utilisateur l_utilisateurs montant l_id= match l_utilisateurs with - |[]-> (g, l_id) - |a::b-> if not(a=utilisateur) - 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 - else paiement g utilisateur b montant l_id - +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) + |a::b-> paye g utilisateur b montant (set_val_du a l_id montant l_utilisateurs) in + let l_id= set_val_pret utilisateur montant l_id in + paye g utilisateur l_utilisateurs montant l_id diff --git a/medium_project/src/moneySharing.mli b/medium_project/src/moneySharing.mli index 0275c5c..012addc 100644 --- a/medium_project/src/moneySharing.mli +++ b/medium_project/src/moneySharing.mli @@ -1,9 +1,13 @@ 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 \ No newline at end of file +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 \ No newline at end of file