Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Gorner.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
915.4 Кб
Скачать
  1. Інструкція для користувача

Для роботи з даною програмою необхідно мати на увазі те, що при введенні даних у початковий масив необхідно враховувати: відсутність у будь-якій степені – замінюється 0.

// Підключення необхідних бібліотек

#include<iostream>

#include<cmath>

#include<iomanip>

Using namespace std;

Void main()

{

int n;

// Введення кількості коефіцієнтів + вільний член

cout<<"n="; cin>> n;

// Створення масиву під початкові дані

int a[100];

// Введення коефіцієнтів та вільного члена

for (int i=0; i<n; i++){cout<<"a["<< i <<"]="; cin>> a[i];}

for (int i=0; i<n; i++){cout<< a[i] < <' ';}

cout<<endl;

// Введення числа для знаходження границь дійсних коренів

int m;

cout<<"m="; cin>> m;

int b[100];

intvg, ex, ng;

// Ділення початкового масиву за методом Горнера, для знаходження верхньої границі

for (int f=-m; f<=m; f++){

ex=0;

cout<< f <<' '<<"="<<' ';

{

b[0]=a[0];

for (int i=1; i<n; i++){b[i]=f*b[i-1]+a[i];}

for (int i=0; i<n; i++){cout<< b[i] <<' ';

if (b[i]>=0) ex+=1;}

cout<<endl;

}

if (ex==n) {vg=f; break;}

}

int d[100];

// Перетворення масиву для знаходження нижньої границі

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

d[i]=a[i]*pow((-1),i);

// Ділення початкового масиву за методом Горнера, для знаходження нижньої границі

for (int i=0; i<n; i++){cout<< d[i] <<' ';}

cout<<endl;

for (int f=-m; f<=m; f++){

ex=0;

cout<< f <<' '<<"="<<' ';

{

b[0]=d[0];

for (int i=1; i<n; i++){b[i] = f*b[i-1] + d[i];}

for (int i=0; i<n; i++){cout<< b[i] <<' ';

if (b[i]>=0 || i==0) ex+=1;}

cout<<endl;

}

if (ex==n) {ng=-f; break;}

}

// Виведення на екран границь дійсних коренів

cout<<endl<<"ng = "<<ng<<endl<<"vg = "<<vg<<endl;

int g[100];

for (int i=0; i<=n-1; i++){a[i]*=pow((-1),i);}

if (a[0] < 0) {

for (int i=0; i<n; i++) a[i]*=(-1);}

cout<<"znaky: "<<endl;

for (int i=0; i<n; i++) {cout<< a[i] <<' ';}

cout<<endl;

int iD1, iD2, pZ, cZ, iDM = 0;

for (int f=-vg; f<=-ng; f++){

cout<< f <<' '<<"="<<' ';

{

g[0]=a[0];

for (int i=1; i<n; i++) {g[i]=f*g[i-1] + a[i];}

for (int i=0; i<n; i++){cout<< g[i] <<' ';}

cZ=g[n-1];

if (f!=-vg) {

if (((pZ>=0 &&cZ<0) || (cZ>=0 &&pZ<0)) && iDM==0) {

iD1=f-1;

iD2=f;

iDM++;}

}

pZ=cZ;

cout<<endl;

}

}

cout<<"D1 = "<< iD1 <<endl<<"D2 = "<< iD2 <<endl;

int c[100];

// Порівняння значень при яких знаки змінюються

c[0]=(abs(iD1)>abs(iD2)) ? iD2 : iD1;

cout<<"c[0]="<< c[0] <<endl;

intch[100], chP[100], chC[100];

// Присвоюємо попереднім значенням значення вектора a

for (int i=0; i<n; i++) chP[i]=a[i];

for (int l=n-1; l>=0; l--){

// Обчислюємо вільні члени поточного рядка

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

chC[0]=a[0];

chC[i+1]=c[0]*chC[i]+chP[i+1];}

ch[0]=chC[0];

ch[l]=chC[l];

// Запис вільних членів у масив

for (int i=0; i<n-1; i++) {chP[i]=chC[i];}

}

// Множимо на 10 в степені

for (int i=0; i<n; i++) ch[i]*= pow(10,i);

int c1[100];

iDM=0;

for (int f=0; f<=10; f++){

cout<< f <<' '<<"="<<' ';

{

c1[0]=ch[0];

for (int i=1; i<n; i++) {c1[i]=f*c1[i-1]+ch[i];}

for (int i=0; i<n; i++){cout<< c1[i] <<' ';}

cZ=c1[n-1];

if (f != 0) {

if (((pZ>=0 &&cZ<0) || (cZ>=0 &&pZ<0)) && iDM==0) {

iD1=f-1;

iD2=f;

iDM++;}

}

pZ=cZ;

cout<<endl;

}

}

c[1]=(abs(iD1)>abs(iD2)) ? iD2 : iD1;

cout<<"c[1]="<< c[1] <<endl;

// Присвоюємо попереднім значенням значення вектора a

for (int i=0; i<n; i++) chP[i]=ch[i];

for (int l=n-1; l>= 0; l--){

// Обчислюємо вільні члени поточного рядка

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

chC[0]=a[0];

chC[i+1]=c[1]*chC[i]+chP[i+1];}

ch[0]=chC[0];

ch[l]=chC[l];

for (int i=0; i<n-1; i++) {chP[i]=chC[i];}

}

// Множимо на 10 в степені

for (int i=0; i<n; i++) ch[i]*= pow(10,i);

int c2[100];

iDM=0;

for (int f=0; f<=10; f++){

cout<< f <<' '<<"="<<' ';

{

c2[0]=ch[0];

for (int i=1; i<n; i++) {c2[i]=f*c2[i-1]+ch[i];}

for (int i=0; i<n; i++){cout<< c2[i] <<' ';}

cZ=c2[n-1];

if (f!= 0) {

if (((pZ>=0 &&cZ<0) || (cZ>=0 &&pZ<0)) && iDM==0) {

iD1=f-1;

iD2=f;

iDM++;}

}

pZ=cZ;

cout<<endl;

}

}

c[2]=(abs(iD1)>abs(iD2)) ? iD2 : iD1;

cout<<"c[2]="<< c[2] <<endl;

// Присвоюємо попереднім значенням значення вектора a

for (int i=0; i<n; i++) chP[i]=ch[i];

for (int l=n-1; l>=0; l--){

// Обчислюємо вільні члени поточного рядка

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

chC[0]=a[0];

chC[i+1]=c[2]*chC[i]+chP[i+1];}

ch[0]=chC[0];

ch[l]=chC[l];

for (int i = 0; i < n-1; i++) {chP[i] =chC[i];}

}

// Множимо на 10 в степені

for (int i=0; i<n; i++) ch[i]*=pow(10,i);

for (int i=0; i<n; i++) {cout<<ch[i] <<' ';}

cout<<endl;

floatcf=(abs(ch[n-1]*1.0))/(abs(ch[n-2]*1.0));

// Округляємо останні три цифри кореня

cf=(int)(cf*100);

cout<<endl;

// Вивід результатів

cout<<"y="<< c[0] <<"."<< c[1] << c[2] <<cf<<endl;

// Кінцевий результат

cout<<"x=-"<< c[0] <<"."<< c[1] << c[2] <<cf<<endl;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]