gitweb on Svarog

projekti pod git sistemom za održavanje verzija -- projects under the git version control system
dodati MaxNiza i Pitagorine trojke - primeri za efikasnosta algoritama
[spa1-materijali.git] / kodovi / efikasnost-algoritama / Pitagora.java
diff --git a/kodovi/efikasnost-algoritama/Pitagora.java b/kodovi/efikasnost-algoritama/Pitagora.java
new file mode 100644 (file)
index 0000000..f4e890e
--- /dev/null
@@ -0,0 +1,131 @@
+public class Pitagora {
+
+       /**
+        * Generisanje svih trojki brojeva do neke granice uz proveru da li je to
+        * upravo Pitagorina trojka.
+        */
+       static void trojke1() {
+               int br = 0;
+               int gr = 100;
+
+               System.out.println("\nPitagorine trojke\n");
+
+               for (int x = 1; x <= gr; x++) {
+                       for (int y = 1; y <= gr; y++) {
+                               for (int z = 1; z <= gr; z++) {
+                                       if (x * x + y * y == z * z) {
+                                               br++;
+                                               stampajTrojku(br, x, y, z);
+                                       }
+                               }
+                       }
+               }
+       }
+
+       /**
+        * Generisanje parova brojeva a,b i provera da li postoji celo c koje bi
+        * formiralo Pitagorinu trojku.
+        */
+       static void trojke2() {
+               int br = 0;
+               int gr = 100;
+
+               System.out.println("\nPitagorine trojke 2\n");
+
+               for (int x = 1; x <= gr; x++) {
+                       for (int y = 1; y <= gr; y++) {
+                               double zreal = x * x + y * y;
+                               zreal = Math.sqrt(zreal);
+                               // Provera da li je ceo broj
+                               int z = (int) zreal;
+                               if (zreal == z) {
+                                       br++;
+                                       stampajTrojku(br, x, y, z);
+                               }
+                       }
+               }
+       }
+
+       /**
+        * Euklidova teorema daje Pitagorinu trojku za bilo koja dva prirodna broja
+        * n i m.
+        */
+       static void trojke3() {
+               int br = 0;
+               int gr3 = 10;
+
+               System.out.println("\nPitagorine trojke 3\n");
+
+               for (int m = 1; m <= gr3; m++) {
+                       for (int n = 1; n <= m - 1; n++) {
+                               int x = m * m - n * n;
+                               int y = 2 * m * n;
+                               int z = m * m + n * n;
+                               br++;
+                               stampajTrojku(br, x, y, z);
+                       }
+               }
+       }
+
+       /**
+        * Generisanje trojki kod kojih je razlika izmedju a i c 1. Postupak je
+        * izveden preko Euklidove teoreme.
+        */
+       static void trojke4() {
+               int br = 0;
+               int gr4 = 10;
+
+               System.out.println("\nPitagorine trojke 4\n");
+
+               for (int m = 2; m <= gr4; m++) {
+                       int n = m - 1;
+                       int a = 2 * m * n;
+                       int b = m * m - n * n;
+                       int c = m * m + n * n;
+                       br++;
+                       stampajTrojku(br, a, b, c);
+               }
+       }
+
+       /**
+        * Generisanje trojki kod kojih je razlika izmedju a i b 1. Postupak je
+        * izveden preko Euklidove teoreme i koriste se inkrementalna resenja
+        * dobijene Pell-ove jednacine.
+        */
+       static void trojke5() {
+               int gr5 = 6;
+               int br = 0;
+
+               System.out.println("\nPitagorine trojke 5\n");
+
+               int w = 3;
+               int n = 2;
+               for (int i = 1; i <= gr5; i++) {
+                       int m = n + w;
+                       int a = 2 * m * n;
+                       int b = m * m - n * n;
+                       int c = m * m + n * n;
+                       br++;
+                       stampajTrojku(br, a, b, c);
+                       int temp = w;
+                       w = 3 * w + 4 * n;
+                       n = 2 * temp + 3 * n;
+               }
+       }
+
+       public static void stampajTrojku(int br, int x, int y, int z) {
+               System.out.print(br + " ");
+               System.out.print("a = " + x);
+               System.out.print(", b = " + y);
+               System.out.print(", c = " + z);
+               System.out.println();
+       }
+
+       public static void main(String[] args) {
+               trojke1();
+               trojke2();
+               trojke3();
+               trojke4();
+               trojke5();
+       }
+}
Svarog.pmf.uns.ac.rs/gitweb maintanance Doni Pracner