double arrow

Алгоритм

2


Заключение

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


Приложение

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

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г


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  


2

Сейчас читают про: