Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
41
Добавлен:
08.07.2017
Размер:
5.55 Кб
Скачать
package Task1;

import java.util.Scanner;

public class Main {

/*Лабораторная работа №1
*
* Указатели и списки.
*
* Задание разработать:
* логическую функцию Equality(p,q), проверяющую равенство многочленов p и q;
* функцию Meaning(p, x), вычисляющую значение многочлена в целочисленной точке х;
* процедуру Add(p,q,r) вычисления суммы многочленов q и r, результат – многочлен p.
*
*
* Выполнил Беликов В.С. гр. 681075
*/
private static Scanner scanner = new Scanner(System.in);

// функцию Meaning(p, x), вычисляющую значение многочлена в целочисленной точке х;
private static int meaning(Element p, int x) {
int result = 0;
Element pStart = p;
do {
p = p.getNext();
result += p.getMultiplier() * (int) Math.pow(x, p.getPower());
System.out.println(p.getMultiplier() + "*" + x + "^" + p.getPower() + "="
+ (p.getMultiplier() * (int) Math.pow(x, p.getPower())));

} while (p.getNext() != null);
p = pStart;
return result;
}

// процедуру Add(p,q,r) вычисления суммы многочленов q и r, результат – многочлен p.
private static Element add(Element p, Element q) {
Element r = new Element(0, 0);
Element rStart = r;
Element qStart = q;
Element pStart = p;
while (p != null) {
boolean ownMult = true;
while (q != null) {
if (p.getPower() == q.getPower() && q.getMultiplier() != 0 && p.getMultiplier() != 0) {
Element next = new Element(p.getMultiplier() + q.getMultiplier(), p.getPower());
ownMult = false;
next.setBack(r);
r.setNext(next);
r = r.getNext();
}
q = q.getNext();
}
if (ownMult) {
if (p.getMultiplier() != 0) {
Element next = new Element(p.getMultiplier(), p.getPower());
next.setBack(r);
r.setNext(next);
r = r.getNext();
}
}
q = qStart;
p = p.getNext();
}
p = pStart;
r = rStart;
return r;
}

// Вывод многочлена в консоль
private static void print(Element el) {
Element startEl = el;
while (el != null) {
if (el.getMultiplier() != 0) {
System.out.print(el.getMultiplier() + (el.getPower() != 0 ? "x^" + el.getPower() : ""));
if (el.getNext() != null) {
System.out.print(el.getNext().getMultiplier() > 0 ? "+" : "");

}
}
el = el.getNext();
}
el = startEl;

System.out.println();
System.out.println();
}

public static void main(String[] args) {
// TODO Auto-generated method stub

Element p = new Element(0, 0);
int countElement = 0;
System.out.println("Введите количество элементов в многочлене P");
countElement = scanner.nextInt();
System.out.println("Введите многочлен P:");
input(p, countElement);
returnToStart(p);

System.out.println();
System.out.println();
Element q = new Element(0, 0);
System.out.println("Введите количество элементов в многочлене Q");
countElement = scanner.nextInt();
System.out.println("Введите многочлен Q:");
input(q, countElement);
returnToStart(q);
System.out.println("Многочлен P: ");
print(p);
System.out.println("Многочлен Q: ");
print(q);
System.out.println("Сумма многочленов P и Q: ");
print(add(p, q));
System.out.println("Многочлены P и Q " + (equality(p, q) ? "равны" : "не равны"));
System.out.println("Введите x: ");
int x = scanner.nextInt();
System.out.println("Результат в многочлена P в точке x: " + meaning(p, x));
System.out.println("Результат в многочлена Q в точке x: " + meaning(q, x));

}

// Умножение многочлена на число
private static Element mul(Element p, int number) {
Element r = new Element(0, 0);
Element rStart = r;
Element pStart = p;
while (p != null) {
Element next = new Element(number * p.getMultiplier(), p.getPower());
next.setBack(r);
r.setNext(next);
r = r.getNext();
p = p.getNext();
}
r = rStart;
p = pStart;
return r;
}

// Сравнение двух многочленнов
private static boolean equality(Element p, Element q) {
Element r = add(p, mul(q, -1));
while (r != null) {
if (r.getMultiplier() != 0){
return false;
}
r = r.getNext();
}
return true;
}

// Ввод многочлена
private static void input(Element p, int countElement) {
for (int i = 0; i < countElement; i++) {
System.out.println("Введите коэффицент " + (i + 1) + "-го элемента: ");
int mult = scanner.nextInt();
System.out.println("Введите степень " + (i + 1) + "-го элемента: ");
int power = scanner.nextInt();
Element next = new Element(mult, power);
next.setBack(p);
p.setNext(next);
p = next;
}
}

// Возвращение к началу списка
private static void returnToStart(Element el) {
while (el.getBack() != null) {
el = el.getBack();
}

}

}
Соседние файлы в папке Task1