diff --git a/ss2012/AlgoAnim/Teil 5/matrixGenerator/generators/maths/MatrixGenerator.java b/ss2012/AlgoAnim/Teil 5/matrixGenerator/generators/maths/MatrixGenerator.java index 3a246fdd..165939fd 100644 --- a/ss2012/AlgoAnim/Teil 5/matrixGenerator/generators/maths/MatrixGenerator.java +++ b/ss2012/AlgoAnim/Teil 5/matrixGenerator/generators/maths/MatrixGenerator.java @@ -9,14 +9,17 @@ import java.awt.Color; import java.util.Locale; import java.util.Random; +import algoanim.primitives.IntMatrix; import algoanim.primitives.SourceCode; import algoanim.primitives.StringMatrix; import algoanim.primitives.generators.Language; import algoanim.properties.AnimationPropertiesKeys; +import algoanim.properties.MatrixProperties; import algoanim.properties.RectProperties; import algoanim.properties.SourceCodeProperties; import algoanim.properties.TextProperties; import algoanim.util.Coordinates; +import algoanim.util.DisplayOptions; import algoanim.util.Offset; import algoanim.util.Timing; @@ -47,26 +50,23 @@ public class MatrixGenerator implements Generator { */ private Language lang; - /** - * random number generator for user interaction - */ - private Random rand = new Random(); - /** * The info text as a SourceCode object (first slide) */ private SourceCode info = null; - /** - * The statement text as a SourceCode object (last several slides) - */ - private SourceCode statement = null; - /** * The sourceCode */ private SourceCode sc = null; + /** + * The matrices + */ + private IntMatrix intMatrixA = null; + private IntMatrix intMatrixB = null; + private IntMatrix intMatrixResult = null; + // ========================================================================================================= /** @@ -89,16 +89,16 @@ public class MatrixGenerator implements Generator { public void generateInfoText() { // create first page of animation (info text) as a code group - this.info = lang.newSourceCode(new Coordinates(10, 75), "info", null, this.TEXT_PROPS); - this.info.addCodeLine("Das hier vorgestellte Verfahren eignet sich fuer die Multiplikation zweier ganzer Zahlen.", null, 0, null); - this.info.addCodeLine("Die Funktionsweise laesst sich in die folgenden fuenf Schritte gliedern:", null, 0, null); - this.info.addCodeLine("1. Schreibe die beiden zu multiplizierenden Zahlen nebeneinander.", null, 1, null); - this.info.addCodeLine("2. Die linke Zahl wird halbiert (Reste werden abgerundet), die rechte Zahl wird verdoppelt.", null, 1, null); - this.info.addCodeLine(" Die beiden berechneten Zahlen werden in die darauffolgende Zeile geschrieben.", null, 2, null); - this.info.addCodeLine("3. Schritt 2 wird solange wiederholt, bis in der linken Spalte eine 1 steht.", null, 1, null); - this.info.addCodeLine("4. Nun streicht man alle Zeilen, in denen die linke Zahl gerade ist.", null, 1, null); - this.info.addCodeLine("5. Schlussendlich werden alle uebrigen Zahlen der rechten Spalte addiert.", null, 1, null); - + this.info = lang.newSourceCode(new Coordinates(10, 75), "info", null, TEXT_PROPS); + this.info.addCodeLine("Das hier vorgestellte Verfahren eignet sich zur Multiplikation zweier Matrizen.", null, 0, null); + this.info.addCodeLine("Zwei Matrizen können genau dann multipliziert werden, wenn die Spaltenanzahl der", null, 0, null); + this.info.addCodeLine("linken Matrix mit der Zeilenanzahl der rechten Matrix übereinstimmen. ", null, 0, null); + this.info.addCodeLine("Das Verfahren lässt sich leicht iterativ implementieren.", null, 0, null); + this.info.addCodeLine("Die Funktioneweise ist hierbei wie folgt:", null, 0, null); + this.info.addCodeLine("- Betrachte die i-te Zeile der linken Matrix und die i-te Spalte der rechten Matrix.", null, 1, null); + this.info.addCodeLine("- Nun wird des j-te Element der i-ten Zeilen mit dem j-ten Element der i-ten Spalte multipliziert.", null, 1, null); + this.info.addCodeLine("- Die einzelnen Ergebnisse der Multiplikationen werden addiert und man erhält das Element e(ij) der Ergebnismatrix E.", null, 1, null); + } /** @@ -111,7 +111,7 @@ public class MatrixGenerator implements Generator { textProperties.set(AnimationPropertiesKeys.COLOR_PROPERTY, Color.BLACK); textProperties.set(AnimationPropertiesKeys.DEPTH_PROPERTY, 1); textProperties.set(AnimationPropertiesKeys.FONT_PROPERTY, new java.awt.Font("Serif", Font.SANSSERIF, 24)); - lang.newText(new Coordinates(11, 15), "Russische Bauernmultiplikation", "header", null, textProperties); + lang.newText(new Coordinates(11, 15), "Falksches Schema", "header", null, textProperties); // header background RectProperties rectProperties = new RectProperties(); @@ -127,38 +127,140 @@ public class MatrixGenerator implements Generator { public void generateSourceCode() { // initialize source code object and add code lines - this.sc = lang.newSourceCode(new Coordinates(10, 147), "sourceCode", null, this.SC_PROPS); - this.sc.addCodeLine("public int russe(int a, int b){", null, 0, null); // 0 - this.sc.addCodeLine("if(a == 1){", null, 1, null); // 1 - this.sc.addCodeLine("return b;", null, 2, null); // 2 + this.sc = lang.newSourceCode(new Coordinates(150, 45), "sourceCode", null, SC_PROPS); + this.sc.addCodeLine("public void falkschesSchema(int[][] matrixA, int[][] matrixB){", null, 0, null); // 0 + this.sc.addCodeLine("int[][] result = new int[matrixA.length][matrixB[0].length];", null, 1, null); // 1 + this.sc.addCodeLine("int summe = 0;", null, 1, null); // 1 + this.sc.addCodeLine("for(int i=0; i primitives) { matrixA = (int[][]) primitives.get("matrixA"); matrixB = (int[][]) primitives.get("matrixB"); - //SC_PROPS = (SourceCodeProperties) props.getPropertiesByName("Quelltext"); - //TEXT_PROPS = (SourceCodeProperties) props.getPropertiesByName("Text"); - + SC_PROPS = (SourceCodeProperties) props.getPropertiesByName("Quelltext"); + TEXT_PROPS = (SourceCodeProperties) props.getPropertiesByName("Text"); + + + generateHeader(); + generateInfoText(); + falk(); + generateStatement(); lang.finalizeGeneration(); return lang.toString(); @@ -197,19 +304,19 @@ public class MatrixGenerator implements Generator { @Override public String getDescription() { - return "Das hier vorgestellte Verfahren eignet sich zur Multiplikation zweier Matrizen. Zwei Matrizen kšnnen genau dann" + + return "Das hier vorgestellte Verfahren eignet sich zur Multiplikation zweier Matrizen. Zwei Matrizen können genau dann" + "multipliziert werden, wenn die Spaltenanzahl der linken Matrix mit der Zeilenanzahl der rechten Matrix" + "übereinstimmt. Das Verfahren lässt sich leicht iterativ implementieren." + "
Die Funktioneweise ist hierbei wie folgt:" + "
- Betrachte die i-te Zeile der linken Matrix und die i-te Spalte der rechten Matrix." + "
- Nun wird des j-te Element der i-ten Zeilen mit dem j-ten Element der i-ten Spalte multipliziert." + - "
- Die einzelnen Ergebnisse der Multiplikationen werden addiert und man erhŠlt das Element e(ij) der Ergebnismatrix E."; + "
- Die einzelnen Ergebnisse der Multiplikationen werden addiert und man erhält das Element e(ij) der Ergebnismatrix E."; } @Override public String getCodeExample() { - return "public1 int[][] falk(int[][] matrixA, int[][] matrixB){" + + return "public1 int[][] falkschesSchema(int[][] matrixA, int[][] matrixB){" + "\n int[][] result = new int[matrixA.length][matrixB[0].length];" + "\n int summe=0;" + "\n for(int i=0; i < matrixA.length; i++){" + diff --git a/ss2012/AlgoAnim/Teil 5/matrixGenerator/generators/maths/MatrixGenerator.xml b/ss2012/AlgoAnim/Teil 5/matrixGenerator/generators/maths/MatrixGenerator.xml index d4750534..b6c7749a 100644 --- a/ss2012/AlgoAnim/Teil 5/matrixGenerator/generators/maths/MatrixGenerator.xml +++ b/ss2012/AlgoAnim/Teil 5/matrixGenerator/generators/maths/MatrixGenerator.xml @@ -3,11 +3,159 @@ matrixA - 1, 2, 3, 4; 5, 6, 7, 8 + 1, 2; 3, 4 matrixB - 1, 2, 3, 4; 5, 6, 7, 8 + 5, 6; 7, 8 + + + bold + + + + + + color + + + (0, 0, 0) + + + highlightColor + + + (255, 0, 0) + + + hidden + + + + + + font + + + SansSerif + + + name + + + Quelltext + + + contextColor + + + (0, 0, 0) + + + italic + + + + + + depth + + + 1 + + + row + + + 1 + + + size + + + 10 + + + indentation + + + 1 + + + + + bold + + + + + + color + + + (0, 0, 0) + + + highlightColor + + + (255, 0, 0) + + + hidden + + + + + + font + + + SansSerif + + + name + + + Text + + + contextColor + + + (0, 0, 0) + + + italic + + + + + + depth + + + 1 + + + row + + + 1 + + + size + + + 10 + + + indentation + + + 1 + + \ No newline at end of file