diff --git a/README.md b/README.md
index 42dd6bf40868808840ad189a0a748be47e18df8d..1bd708cd48784958e3c1e8d02c4394d2833fd9a0 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,27 @@
 # L2StructureDiscreteTP1
 
+L2 Informatique, Université d'Aix-Marseille.
+
+Embryon pour le TP1 du cours Structures Discrètes
+
+
+# utilisation de gnuplot
+
+Exemple de script à utiliser au début.
+
+```gnuplot
+plot 'divideNative.dat' using 1:2 with lines title "native time",\
+     'divideNative.dat' using 1:3 with lines axis x1y2 title "native operations"
+
+pause mouse
+
+```
+
+Explications succintes (voir la documentation pour plus de détails) :
+
+- `using 1:3` : les données des colonnes 1 et 3 sont utilisées pour coordonnées x et y respectivement.
+- `with lines` : connecte les points du graphe par des segments.
+- `title "native time"` : ajoute la légende de cette courbe.
+- `axis x1y2` utilise l'axe horizontal du bas (`x1`) et l'axe vertical de droite (`y2`), utile pour afficher deux courbes dont les valeurs n'ont pas le même ordre de grandeur.
+- `pause mouse` : affiche le graphique et attend le prochain clic pour terminer.
+
diff --git a/src/Chrono.java b/src/Chrono.java
new file mode 100644
index 0000000000000000000000000000000000000000..f2a9d6088989127ce5fc84f225f700e0d7467f62
--- /dev/null
+++ b/src/Chrono.java
@@ -0,0 +1,37 @@
+public class Chrono {
+
+  private long lastStartTime;
+  private boolean running = false;
+  private long elapsedTime = 0;
+
+
+  public void start() {
+    if (running) return;
+    running = true;
+    lastStartTime = System.nanoTime();
+  }
+
+
+  public double stop() {
+    if (running) {
+      running = false;
+      elapsedTime = elapsedTime + System.nanoTime() - lastStartTime;
+    }
+    return getElapsedTime();
+  }
+
+
+  public double getElapsedTime() {
+    return 1e-9 * (double) elapsedTime;
+  }
+
+  public void restart() {
+    reset();
+    start();
+  }
+
+  public void reset() {
+    elapsedTime = 0;
+    running = false;
+  }
+}
diff --git a/src/DivideAlgorithm.java b/src/DivideAlgorithm.java
new file mode 100644
index 0000000000000000000000000000000000000000..1e3343ebc3363d5d02d8ee5dfa5ddcf8ba3bbc12
--- /dev/null
+++ b/src/DivideAlgorithm.java
@@ -0,0 +1,6 @@
+public interface DivideAlgorithm {
+
+  int run(int numerator, int denominator);
+
+  int getOperationCount();
+}
diff --git a/src/Main.java b/src/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..0797ac357f00108de77ebdfcafeed2254f8e2aff
--- /dev/null
+++ b/src/Main.java
@@ -0,0 +1,26 @@
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.Writer;
+
+public class Main {
+
+  private static Chrono chrono = new Chrono();
+
+  public static void main(String args[]) throws IOException {
+    DivideAlgorithm divider = new NativeDivideAlgorithm();
+    Writer file = new FileWriter("divideNative.dat");
+
+    for (int i = 200_000; i < 10_000_000; i = i + 200_000) {
+      chrono.restart();
+      int q = divider.run(i, 2);
+      chrono.stop();
+      file.write(i + " " + chrono.getElapsedTime() +  " " + divider.getOperationCount() + "\n");
+    }
+
+    file.close();
+  }
+
+  // Comment plotter les données avec gnuplot :
+  // plot 'divideBySubtract.dat' using 1:2 with lines title "time",\
+  //      'divideBySubtract.dat' using 1:3 with lines axis x1y2 title "iterations"
+}
diff --git a/src/NativeDivideAlgorithm.java b/src/NativeDivideAlgorithm.java
new file mode 100644
index 0000000000000000000000000000000000000000..81911d3b1cf3dff7a35b6f3abece32885efdd5cf
--- /dev/null
+++ b/src/NativeDivideAlgorithm.java
@@ -0,0 +1,15 @@
+public class NativeDivideAlgorithm implements DivideAlgorithm {
+  private int operationCount = 0;
+
+  @Override
+  public int run(int numerator, int denominator) {
+    operationCount = 0;
+    operationCount++;
+    return numerator/ denominator;
+  }
+
+  @Override
+  public int getOperationCount() {
+    return operationCount;
+  }
+}