Форум программистов, компьютерный форум CyberForum.ru

Найти рациональные корни полинома! - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.87
Neetrinoo
0 / 0 / 0
Регистрация: 05.12.2010
Сообщений: 8
05.12.2010, 18:18     Найти рациональные корни полинома! #1
Ребят помогите плс написать код.Ломаю голову уже оч давно((((не выходит.
Условие такое:

Найти все рациональные корни полинома n-й степени с целыми коэффициентами (x) = 4 x4 + 6 x3 - 12 x2 - 7 x + 9 . При решении таких задач используется теорема.

Теорема. Для того чтобы несократимая дробь p/q была корнем уравнения an xn + an-1 xn-1 + ... + a0 = 0 с целыми коэффициентами, необходимо, чтобы число р было делителем свободного члена а0, а число q – делителем старшего коэффициента an (причем q¹0 и an¹0).
Если уравнение имеет целые коэффициенты, а старший коэффициент равен единице (т.е. аn=1), то рациональными корнями этого уравнения могут быть только целые числа, которые являются делителями свободного члена а0.

Вот такая задача.
Спасибо заранее!!!

Добавлено через 43 минуты
Можем договорится пишите в icq 449227042

Добавлено через 1 час 11 минут
КРОме этого имеется еще несколько задач .Нужно решить.Обо всем договариваемся!!!))
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
michurinnn
 Аватар для michurinnn
15 / 15 / 1
Регистрация: 02.12.2010
Сообщений: 48
05.12.2010, 18:34     Найти рациональные корни полинома! #2
Сомневаюсь.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream.h>
#include <math.h>
 
int main()
{
    // f(x) = 4*x^4 + 6*x^3 - 12*x^2 - 7*x + 9
    // Найдем корни уравнения 4*x^4 + 6*x^3 - 12*x^2 - 7*x + 9 == 0,
    // Корнем может являться дробь p/q , где р - делитель свободного члена ( у нас == 9)
    // а q - делитель старшего коэффицента ( у нас == 4)
    float p [3] = {9.0,3.0,1.0}; // Конкретно для этого случая !!!
    float q [3] = {4.0,2.0,1.0}; // Конкретно для этого случая !!!
    float x = 9.0/4.0;
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            float x = p[i]/q[j];
            cout<<"Checking "<<x<<endl;
            if ( 4*pow(x,4) + 6*pow(x,3) - 12*pow(x,2) - 7*x + 9 == 0)
            {
                cout<<x<<" is root!"<<endl;
            }
        }
    }
    return 0;
}
Neetrinoo
0 / 0 / 0
Регистрация: 05.12.2010
Сообщений: 8
05.12.2010, 19:01  [ТС]     Найти рациональные корни полинома! #3
можешь написать поподробнее, а то пишет ошибку на борланде : call to underfined function 'system'
michurinnn
 Аватар для michurinnn
15 / 15 / 1
Регистрация: 02.12.2010
Сообщений: 48
05.12.2010, 19:11     Найти рациональные корни полинома! #4
Погоди, Borland поставлю.
Попробуй на другом компиляторе
Neetrinoo
0 / 0 / 0
Регистрация: 05.12.2010
Сообщений: 8
05.12.2010, 19:19  [ТС]     Найти рациональные корни полинома! #5
ок дай свою аську чтоли,там свяжемся чтоли...у меня есть программа для функции f(x) = x4 + 4 x3 - 2 x2 - 12 x + 9 . Он выглядит вот так.
#include <iostream.h>
#include <conio.h>
#include <math.h>
void main()
{
clrscr();
int x,f,i,j,p,q,a0,an;
int a[6];
cout<<"\nLab3\n";
cout<<"\nKirillov Yaroslav\n";
cout<<"\nVar 9\n";
cout<<"\nNayti korni polinoma f(x)=x^4+4*x^3-2*x^2-12x+9\n";
a0=9;
i=0;
j=-9;
while (i<6,j<=9)
{
if (a0%j==0)
{
a[i]=j;
i++;
}
j++;
if (j==0)
j++;
}
cout<<"\nKorni polinoma:\n";
for (i=0;i<6;i++)
{
x=a[i];
f=pow(x,4)+4*pow(x,3)-2*pow(x,2)-12*x+9;
if (f==0)
cout<<a[i]<<" ";
}
getch();
}


ВОт я думаю, как его переделать под мою функцию f(x) = 4 x4 + 6 x3 - 12 x2 - 7 x + 9
michurinnn
 Аватар для michurinnn
15 / 15 / 1
Регистрация: 02.12.2010
Сообщений: 48
05.12.2010, 19:36     Найти рациональные корни полинома! #6
Этот код в Борладне у тебя работает? Проверь сразу

ну???
Neetrinoo
0 / 0 / 0
Регистрация: 05.12.2010
Сообщений: 8
05.12.2010, 19:51  [ТС]     Найти рациональные корни полинома! #7
этот который я написал работает.но там функция другая,нужно изменить его на мою функцию а как хз
michurinnn
 Аватар для michurinnn
15 / 15 / 1
Регистрация: 02.12.2010
Сообщений: 48
05.12.2010, 19:57     Найти рациональные корни полинома! #8
Попробуй вот так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream.h>
#include <math.h>
#include <conio.h>
void main()
{
    // f(x) = 4*x^4 + 6*x^3 - 12*x^2 - 7*x + 9
    // Найдем корни уравнения 4*x^4 + 6*x^3 - 12*x^2 - 7*x + 9 == 0,
    // Корнем может являться дробь p/q , где р - делитель свободного члена ( у нас == 9)
    // а q - делитель старшего коэффицента ( у нас == 4)
    cout<<"\nWe need find root of polynomial f(x) = 4*x^4 + 6*x^3 - 12*x^2 - 7*x + 9\n";
    float p [3] = {9.0,3.0,1.0}; // Конкретно для этого случая !!!
    float q [3] = {4.0,2.0,1.0}; // Конкретно для этого случая !!!
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            float x = p[i]/q[j];
            cout<<"Checking "<<x<<"\n"; // Проверка корректности корня
            if ( 4*pow(x,4) + 6*pow(x,3) - 12*pow(x,2) - 7*x + 9 == 0)
            {
                cout<<x<<" is root!"<<"\n"; // Так выводятся корни
            }
        }
    }
    getch();
}
Neetrinoo
0 / 0 / 0
Регистрация: 05.12.2010
Сообщений: 8
05.12.2010, 20:05  [ТС]     Найти рациональные корни полинома! #9
да,работает.Правильно я понял,что корень это 1?
Можешь объяснить как программа просто работает.Какой алгоритм плс.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.12.2010, 20:42     Найти рациональные корни полинома!
Еще ссылки по теме:

Найти корни уравнения C++
Найти корни кубических уравнений C++
C++ Найти корни квадратного уравнения

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
michurinnn
 Аватар для michurinnn
15 / 15 / 1
Регистрация: 02.12.2010
Сообщений: 48
05.12.2010, 20:42     Найти рациональные корни полинома! #10
Более правильный вариант.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream.h>
#include <math.h>
#include <conio.h>
void main()
{
    // f(x) = 4*x^4 + 6*x^3 - 12*x^2 - 7*x + 9
    // Найдем корни уравнения 4*x^4 + 6*x^3 - 12*x^2 - 7*x + 9 == 0,
    // Корнем может являться дробь p/q , где р - делитель свободного члена ( у нас == 9)
    // а q - делитель старшего коэффицента ( у нас == 4)
    cout<<"\nWe need find root of polynomial f(x) = 4*x^4 + 6*x^3 - 12*x^2 - 7*x + 9\n";
    float p [3] = {9.0,3.0,1.0}; // Конкретно для этого случая !!!
    float q [3] = {4.0,2.0,1.0}; // Конкретно для этого случая !!!
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            float x = p[i]/q[j];
            float y = -x;
            cout<<"Checking "<<x<<"\n"; // Проверка корректности корня
            if ( 4*pow(x,4) + 6*pow(x,3) - 12*pow(x,2) - 7*x + 9 == 0)
            {
                cout<<x<<" is root!"<<"\n"; // Так выводятся корни
            }
            cout<<"Checking "<<y<<"\n"; // Проверка корректности корня
            if ( 4*pow(y,4) + 6*pow(y,3) - 12*pow(y,2) - 7*y + 9 == 0)
            {
                cout<<y<<" is root!"<<"\n"; // Так выводятся корни
            }
        }
    }
    getch();
}
Добавлено через 19 минут
#include <iostream.h>
#include <math.h> -- подключение необходимых заголовочных файлов (модулей)
#include <conio.h>

В строках 12 и 13 объявляются 2 массива p и q. Массив p хранит возможные делители свободного члена
( в нашем случае это 9,3 и 1), а массив q - делители старшего коэффицента (4,2,1). Оба массива хранят значения типа float, чтобы корректно производить деление и получать верные дроби.

В строках 14 и 17 2 цикла for, которые позволяют сделать обход обоих массивов и получить все возможные варианты дроби p/q (которая, согласно теореме, может являться корнем).

Т.о., в процессе выполнения этих циклов переменной "х" присваивается очередное значение p/q,
а переменной "у" - значение "х" с обратным знаком (корни могут быть и отрицательными).
Затем эти значения подсавляются в уравнение 4*x^4 + 6*x^3 - 12*x^2 - 7*x + 9
Если верно равенство 4*x^4 + 6*x^3 - 12*x^2 - 7*x + 9 = 0, то корень найден.

P.S. функция pow(x,n) возвращает результат возведения х в степень n.
Yandex
Объявления
05.12.2010, 20:42     Найти рациональные корни полинома!
Ответ Создать тему
Опции темы

Текущее время: 08:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru