From 19a0f6f12e93d6491605197e8683a8b9e06a2307 Mon Sep 17 00:00:00 2001 From: Krystian Madra Date: Wed, 6 Jun 2018 22:18:09 +0000 Subject: [PATCH] Plik zad02 --- MainApp.java | 282 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 282 insertions(+) create mode 100644 MainApp.java diff --git a/MainApp.java b/MainApp.java new file mode 100644 index 0000000..56ab965 --- /dev/null +++ b/MainApp.java @@ -0,0 +1,282 @@ +//package com.madrakrystian.algebra; + +import java.util.Arrays; +import java.util.Scanner; + +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] + + +// Input w programie dla przykladu 1 +// Podaj n: +// 2 +// Pierwszy wielomian: +// Podaj liczbe wyrazow w wielomianie: +// 5 +// Podaj kolejne wyrazy wielomianu po przycisku enter +// 1 +// 1 +// 1 +// 0 +// 1 +// Drugi wielomian: +// Podaj liczbe wyrazow w wielomianie: +// 3 +// Podaj kolejne wyrazy wielomianu po przycisku enter +// 0 +// 1 +// 1 + + + + // czytanie inputu z System.in + static Scanner reader = new Scanner(System.in); + + public static void main(String[] args) { + + // wielomiany + int polyOne[]; + int polyTwo[]; + + // wspolczynnik n + int n=1; + + //input + do{ + System.out.println("Podaj n: "); + // wpisz liczbe + n = reader.nextInt(); + + }while(n > 1000 || n <= 0); + + + System.out.println("Pierwszy wielomian: "); + polyOne = fillPolynomial(); + + System.out.println("Drugi wielomian: "); + polyTwo = fillPolynomial(); + + // wyswietl wielomiany + System.out.println("f:" + Arrays.toString(polyOne)); + System.out.println("g:" + Arrays.toString(polyTwo)); + + // 1. + System.out.println("1. iloczyn f*g: "); + int res[] = modTheTab(polynomialsMultiplication(polyOne, polyTwo),n); + System.out.println(Arrays.toString(res)); + + // 2. + System.out.println("2. klasa reszty: "); + res = polynomialsDivide(polyOne,polyTwo,n); + System.out.println(Arrays.toString(res)); + + // 3. + System.out.println("3. nwd: "); + res = nwd(polyOne,polyTwo,n); + System.out.println(Arrays.toString(res)); + + reader.close(); + } + + + // uzupelnianie tablicy + public static int[] fillPolynomial() { + + // zmienna pomocnicza + int temp = 0; + + System.out.println("Podaj liczbe wyrazow w wielomianie: "); + temp = reader.nextInt(); + + int[] tab = new int[temp]; + + // uzupelnianie pierwszego wielomianu + System.out.println("Podaj kolejne wyrazy wielomianu po przycisku enter"); + + for(int i=0; i= ptd) { + + // modulo dla ujemnych + if(polyOne[pod]<0) { + polyOne[pod] = mod + polyOne[pod]; + } + + // szukany mnoznik + temp = multiplier(polyOne[pod], polyTwo[ptd], mod); + + // przesuniecie tablicy + tempTab = polynomialShift(tempTab,i); + + // mnozenie wielomianow + tempTab = polynomialMultiplication(tempTab, temp); + + tempTab = modTheTab(tempTab, mod); + + // odejmowanie wielomianow + polyOne = polynomialsSubstraction(polyOne,tempTab); + + // zmiejszamy stopien pierwszego wielomianu + pod--; + + // zwiekszamy liczbe przesuniec drugiej tablicy + i++; + + } + result = Arrays.copyOf(polyOne, i-1); + + return result; + } + + // 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); + } + +} \ No newline at end of file