Алгоритм

 


Заключение

Данный отчет был подготовлен в течение нескольких дней. Все досконально изучив и наладив, проверив программу, результаты работы меня удволетворили.


Приложение

Код программы

 

package Program;

 

import java.util.Random;

import java.util.Scanner;

 

public class Program {

 

public static Double bernoullisMethod(Double[] coeffs) { //метод Бернули

int n = coeffs.length - 1; //инициализация переменной размера массива для коэфф-в c[i]

double[] c = new double[n]; // создание экземпляра массива

for (int i = 1; i < coeffs.length; i++) // в цикле -

c[i - 1] = (-1) * coeffs[i] / coeffs[0]; // - подсчет c[i] коэфф-в

 

double[] u = new double[n * 2]; // создание экземпляра массива для u[i] коэфф-в

for (int i = 0; i < n - 1; i++)

u[i] = 0; // инициализация элементов до n по начальным условиям

 

for (int k = 1; k <= n; k++) { // в цикле для каждого u[n+k] элемента

u[n - 1] = k; // присвоение значения по условию

for (int j = 1; j <= n; j++) // вложенный цикл (сумма u[n+k])

u[(n + k) - 1] = c[j - 1] * u[(n + k - j) - 1]; // подсчет u[n+k-j] коэфф-в

}

double g = u[n + n - 2] / u[n + n - 3]; // подсчет корня по первому условию

double gg = u[n + n - 1] / u[n + n - 3]; // подсчет корня по второму условию

return Math.max(g, gg); // вывод максимального корня

}

 

public static void main(String[] args) {

while (true) {

int n; //число коэфициентов

Double[] coeffs; //массив коэффициентов

try { //попытка выполнить дальнейший код

// инициализация коэффициентов

System.out.print("введите число коэфициентов полинома n = "); // вывод в консоль

n = new Scanner(System.in).nextInt(); //ввод числа n с консоли

//исключение простых уравнений, где n < 3

if (n < 3) {

System.out.println("задайте n больше ");

continue;

}

coeffs = new Double[n]; //создание массива коэфф-в

System.out.println("введете коэффиценты c[i] сами? да/нет"); // вывод в консоль

String answer; //переменная ответа

answer = new Scanner(System.in).nextLine(); //ввод ответа с консоли

if (answer.equals("да")) { //проверка ответ. если "да", то происходит ввод значения коэфф-в вручную

System.out.println("вводите коэффициенты в одну строку, отделяя пробелами"); // вывод в консоль

String[] arrcoeffs = new Scanner(System.in).nextLine().split("\\s+"); //инициализация массива коэфф-в (строки)

if (n == arrcoeffs.length) { //проверка равенства n и длины массива

try { //попытка выполнить дальнейший код

for (int i = 0; i < n; i++) { //для каждого коэфф-та -

coeffs[i] = Double.parseDouble(arrcoeffs[i]); // - его конвертация из строки в вещественное число

}

} catch (NumberFormatException ex) { //перехватывание исключения NumberFormatException

System.out.println("ошибка ввода: "

+ ex.getMessage() + "\n повторите ввод"); //вывод в консоль

continue;

} catch (NullPointerException ex) { //перехватывание исключения NullPointerException

System.out.println("ошибка ввода: "

+ ex.getMessage() + "\n повторите ввод"); //вывод в консоль

continue;

} catch (Exception ex) { //перехватывание общего исключения (ошибки)

System.out.println("один из коэф-тов не является числом "); //вывод в консоль

continue;

}

} else { //когда n не совпадает с размерностью массива

System.out.println("количество к-в не соответствует "

+ "введенному n\n повторите ввод"); // вывод в консоль

continue;

}

} else { //если ответ не "да", коэфф-ты задаются рандомно

int lim = 20; //предел рандомизации

System.out.println("выбраны случайные целые коэффициэнты "

+ "из интервала [" + (-1) * lim + "," + lim + "]"); // вывод в консоль

Random rnd = new Random(); //создание экземпляра класса Random

for (int i = 0; i < n; i++) { // задание произвольных коэфф-в в цикле -

coeffs[i] = (double) rnd.nextInt(lim + 1) - lim; // - значения берутся из интервала [-lim;lim]

System.out.format("%.2f ", coeffs[i]); // последовательный вывод в консоль

}

}

 

// подсчет корней

double root = bernoullisMethod(coeffs); //применение метода Бернули

System.out.println("\nметодом Бернули посчитан один из максимальных "

+ "корней \ng1 = " + root

+ "\n хотите посчитать новые (или выйти)? да/нет"); //вывод в консоль

 

// условие невыхода

answer = new Scanner(System.in).nextLine(); // ввод ответа с консоли

if (answer.equals("да")) // проверка ответа. если "да", то программа начинается сначала

continue;

else

return; //иначе происходит выход

} catch (Exception ex) { // перехватывание общего исключения

System.err.println(ex); //вывод исключения через поток err

System.out.println("повторите ввод"); // вывод в коноль

continue;

}

}

 

}

}

 

 


 

Пример программы:


 

 

Литература

1. Вержбицкий В.М. - Основы численных методов. Учебник для вузов. Высш. школа – 2002г.

2. Латыпова Н.В. «Методические указания и рекомендации по вычислительной практике» УдГу, Ижевск,2004г

3. Ким И.Г, Латыпова Н.В., Моторина О.Л. «Численные методы ч.2» УдГу, Ижевск,2013г

4. Ким И.Г, Латыпова Н.В.«Численные методы ч.1» УдГу, Ижевск,2012г