From 982fba8e9a7a15e14a2e7f95221c5695eaacc1f5 Mon Sep 17 00:00:00 2001 From: "guyslain.naves" <guyslain.naves@lis-lab.fr> Date: Fri, 28 Sep 2018 11:58:17 +0200 Subject: [PATCH] initialisation du projet --- README.md | 25 +++++++++++++++++++++++ src/Chrono.java | 37 ++++++++++++++++++++++++++++++++++ src/DivideAlgorithm.java | 6 ++++++ src/Main.java | 26 ++++++++++++++++++++++++ src/NativeDivideAlgorithm.java | 15 ++++++++++++++ 5 files changed, 109 insertions(+) create mode 100644 src/Chrono.java create mode 100644 src/DivideAlgorithm.java create mode 100644 src/Main.java create mode 100644 src/NativeDivideAlgorithm.java diff --git a/README.md b/README.md index 42dd6bf..1bd708c 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 0000000..f2a9d60 --- /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 0000000..1e3343e --- /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 0000000..0797ac3 --- /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 0000000..81911d3 --- /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; + } +} -- GitLab