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; + } +}