diff --git a/kmeans.md b/kmeans.md
index f09cb6bc94473a9be0a6dc08db5ff03be608fdc3..c8e060536456b05bae78cecb48f1edd4292478f7 100644
--- a/kmeans.md
+++ b/kmeans.md
@@ -1,5 +1,5 @@
 ---
-title: K-Means
+title: Programmation séquentielle - K-Means
 author:
 - GENGA Dario
 - JAQUET Steven
@@ -16,34 +16,27 @@ header-includes:
 - \renewenvironment{figure}[1][2] {\expandafter\origfigure\expandafter[H]} {\endorigfigure}
 ---
 
-# Introduction: partitionnement de données
+# Buts
+- Le but de ce travail pratique est d'implémenter la méthode des k-moyennes pour
+partitionner des données de façon non supervisée.
 
+# Le partitionnement de données
 De façon générale, le partitionnement de données consiste à grouper des données
 en clusters de façon à ce que les éléments d'un même groupe soient proches les
-uns des autres ou d'un élément virtuel représentant l'élément "moyen" de
-la partition.
+uns des autres ou d'un élément virtuel représentant l'élément "moyen" de la
+partition.
 
-# Méthode des k-moyennes (k-means)
+# Méthodes des k-moyennes
+Dans ce travail vous devrez implémenter l'algorithme k-moyennes (k-means en anglais)
+qui permet de partionner un groupe de données par rapport à une metrique définie.
+Ce processus de regroupement de données s'effectue de manière non-supervisée, c'est-à-dire que l'algorithme utilisé s'applique sur des données non-étiquetées
+et sans avoir recours à un retour externe sur ses résultats.
 
-La méthode des k-moyennes est un algortihme permettant de partitionner
-un ensemble de données par rapport à une métrique prédéfinie.
 
-## Données
-
-Les éléments de l'univers doivent être représentables sous forme
-de vecteurs de valeurs
-naturelles (éléments de $\mathbb{N}^n$)
-ou réelles (éléments de $\mathbb{R}^n$) .
-
-## Fonctions à faire
-- definir centroide aleatoirement (3)
-- calcul dst euclidienne centre - pt
-- calcul de la moyenne
-- lire le fichier
-- place les closteur (ou et nombre)
+# Énoncé
+À partir d'un fichier contenant des points à 2 dimensions, implémenter l'algorithme k-moyennes et visualiser les différents clusters créés.
 
 ## Fonction distance
-
 Afin de quantifier la proximité de deux éléments entre eux, nous avons
 besoin de définir une fonction distance, qui sera notre métrique.
 
@@ -57,35 +50,34 @@ $$d(x,y)$$
 Une grande valeur de retour indiquera que $x$ et $y$ sont éloignés.
 Inversément, une petite valeur de retour indiquera qu'ils sont proches.
 
-## Algorithme
-
-### distance euclidienne
+## Distance euclidienne
 - calculer la distance entre un point a l'aide de la dst euclidienne et les centroides : sqrt((x2-x1)^2 + (y2-y1)^2) = sqrt((x-y)^2)
 - comparer les dst qui séparent le point aux centroides
 - assigner le point au centroide le plus proche
 - faire ca pour tous les points
 
-### distance de Manhattan
+## Distance de Manhattan
 - calculer la distance entre un point a l'aide de la dst euclidienne et les centroides : |(x2 - x1)| + |(y2-y1)|
 - comparer les dst qui séparent le point aux centroides
 - assigner le point au centroide le plus proche
 - faire ca pour tous les points
 
-# Implémentation
-
-## Type de données
 
-Cet algorithme peut s'appliquer facilement à tous types de données
-pouvant être représentées sous forme de vecteurs de valeurs.
-Cependant, nous avons décidé de limiter nos tests aux vecteurs à valeurs
-naturelles, en 2 dimensions, pour en simplifier la visualisation
-et la vérification de notre algorithme.
+## Fonctions à implémenter
+Votre programme doit implémenter les fonctions suivantes :
+- Définir _k_ centroide aleatoirement
+- Calculer la distance euclidienne entre le centre d'un centroide et d'un point
+- Calculer la nouvelle position d'un centroide (à partir de la moyenne des points)
+- Lire un fichier contenant des points
+- Déterminer les points appartenant aux closters
+- Déterminer le K optimal (Elbow optimal, silhouette method, ...)
 
-$$v \in \mathbb{N}^2$$
+Ainsi que les structures ci-dessous :
 
-### structure de donnée
+```c
 typedef struct _cluster {
     point* centroid;
+    int color;
 } cluster;
 
 typedef struct _point {
@@ -102,16 +94,7 @@ typedef struct _kmeans {
     cluster clusters_array[k];
     point** points_array;
 } kmeans;
-
-**BONUS 1** : étendre l'implémentation pour pouvoir utiliser des vecteurs
-à $n$ dimensions avec $n$ passé en paramètre au début de la procédure.
-
-**BONUS 2** : implémentation de l'algorithme PCA pour la visualisation
-de vecteurs à plus de 2 dimensions.
-
-## Algorithme
-
-**A FAIRE**
+```
 
 ### centroides
 - placer des centroides aléatoirement
@@ -120,6 +103,26 @@ de vecteurs à plus de 2 dimensions.
 - changer les cordonnées des centroides
 - répeter les actions jusqu'à que les cordonnées du centroides ne change pas
 
+
+## Type de données
+
+Cet algorithme peut s'appliquer facilement à tous types de données
+pouvant être représentées sous forme de vecteurs de valeurs.
+Cependant, nous avons décidé de limiter nos tests aux vecteurs à valeurs
+naturelles, en 2 dimensions, pour en simplifier la visualisation
+et la vérification de notre algorithme.
+
+$$v \in \mathbb{N}^2$$
+
+# Bonus
+
+**BONUS 1** : étendre l'implémentation pour pouvoir utiliser des vecteurs
+à $n$ dimensions avec $n$ passé en paramètre au début de la procédure.
+
+**BONUS 2** : implémentation de l'algorithme PCA pour la visualisation
+de vecteurs à plus de 2 dimensions.
+
+
 ## Interface utilisateur
 
 Le programme fonctionnera entièrement en ligne de commande, avec possibilité