Інструкція для користувача
Для роботи з даною програмою необхідно мати на увазі те, що при введенні даних у початковий масив необхідно враховувати: відсутність у будь-якій степені – замінюється 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;
}
