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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Нарисовать ромбик http://www.cyberforum.ru/cpp-beginners/thread203901.html
Надо нарисовать ромбик типа - * * * ...
C++ Подсчитать количество цифр в заданном натуральном числе методом рекурсии в общем попалась такая задачка, без рекурсии написать её не состовляет труда. прошу помощи в написании так как сдавать её уже завтра. http://www.cyberforum.ru/cpp-beginners/thread203894.html
Вывод треугольника с помощью символа * с использованием for C++
Вывод треугольника с помощью символа * с использованием for. * ** *** **** ***** #include<stdio.h> int x; for(x=0; x < x0; ++x) putchar('-');
Эмуляция х86 архитектуры для работы borland 3.1 C++
Тема в сабже, собственно. Подскажите хороший эмулятор. DosBox - не совсем устраивает. слишком много багов. либо посоветуйте альтернативный компилятор Си. Именно Си на х64 архитектуре. PS:...
C++ Задан числовой массив http://www.cyberforum.ru/cpp-beginners/thread203883.html
Задан числовой массив, состоящий из n элементов (n<=100). Определить есть ли среди последних 5 элементов только один четный положительный.
C++ структуры немогу найти ошибки(( Определите структуру, задающую информацию о авиарейсе: № рейса, направление, время вылета, время прибытия, тип самолета. Введите данные в эту структуру, после чего выведите их на экран. ... подробнее

Показать сообщение отдельно
michurinnn
15 / 15 / 1
Регистрация: 02.12.2010
Сообщений: 48
05.12.2010, 20:42
Более правильный вариант.
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.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru