diff --git a/MainApp.java b/MainApp.java index 90e7664..da718f8 100644 --- a/MainApp.java +++ b/MainApp.java @@ -1,5 +1,3 @@ -//package com.madrakrystian.algebra; - import java.io.BufferedReader; import java.io.IOException; import java.io.StringReader; @@ -8,25 +6,6 @@ import java.util.Scanner; import java.util.Stack; public class MainApp { - - -// Napisać program, który dla danego pierścienia współczynników R = ℤ/nℤ, n ∈ ℕ oraz wielomianów f,g ∈ R[x] zmiennej x znajdzie: -// -// iloczyn f⋅g ∈ R[x] -// klasę reszty f ∈ R[x]/(g) -// największy wspólny dzielnik nwd(f,g) korzystając z algorytmu Euklidesa. -// -// Uwaga: wielomiany są podawane jako ciąg współczynników od wyrazu wolnego, do współczynnika wiodącego. -// -// Termin: 07.06 -// Przykłady: -// -// Input: 2, [1,1,1,0,1], [0,1,1] (i.e. f = 1 + x + x² + x⁴, g = x² + x) -// Output: [[0,1,0,0,1,1,1], [1,1], [1,1]] -// -// Input: 6, [2,1,0,2,1,3], [1,0,0,5] -// Output: [[3,1,0,5,0,1,4,5,5], [5,2,1], DivisionError] - // czytanie inputu z System.in static Scanner reader = new Scanner(System.in); @@ -51,11 +30,7 @@ public class MainApp { char temp; - // - // poprawiony bardzo nieelegancki nowy input - // - - input = reader.nextLine(); + input = args[0]; BufferedReader read = new BufferedReader( new StringReader(input)); @@ -120,7 +95,9 @@ public class MainApp { // 2. System.out.println("2. klasa reszty: "); res = polynomialsDivide(polyOne,polyTwo,n); - System.out.println(Arrays.toString(res)); + if(res != null){ + System.out.println(Arrays.toString(res)); + } // 3. System.out.println("3. nwd: "); @@ -134,7 +111,7 @@ public class MainApp { e.printStackTrace(); } - //input(old) + //input /* do{ System.out.println("Podaj n: "); @@ -276,6 +253,11 @@ public class MainApp { //2. Dzielenie wielomianow public static int[] polynomialsDivide(int polyOne[], int polyTwo[], int mod) { + if(polyOne.length < polyTwo.length) { + System.out.println("Division error"); + return null; + } + // druga tablica ale z rowna liczba indeksow co pierwsza int[] tempTab = new int[polyOne.length]; // output @@ -334,10 +316,16 @@ public class MainApp { // 3. public static int[] nwd(int polyOne[], int polyTwo[], int mod) { + if(polyTwo.length == 0) { return polyOne; } - return nwd(polyTwo, polynomialsDivide(polyOne,polyTwo,mod),mod); + if(polyOne.length >= polyTwo.length) { + return nwd(polyTwo, polynomialsDivide(polyOne,polyTwo,mod),mod); + } + else { + return nwd(polyTwo, polynomialsDivide(polyTwo,polyOne,mod),mod); + } } } \ No newline at end of file