Решаване на кубично уравнение?
Здравейте!
Искам да помоля някой по опитен от мен (ниво начинаещ) да ми обясни как се съставя програма, която да намира и извежда корените на кубично уравнение (уравнение, в което най-висшата степен е трета), при въведени коефициенти пред степените. Успях да съставя код на програма, която да прави същото, но с квадратно уравнение. Знам как се решава кубично уравнение и мога да го реша на лист хартия, но изпитвам затруднения при реализацията на кода. Мисля че частта, при която се използва схема на Хорнер може да се изрази с цикъл while, ала незнам как да намеря стойностите на променливата, която да дели коефициентите във схемата на Хорнер (в цикъла). Тази променлива трябва да е делителите на свободния член върху делителите на коефициента пред висшата степен. Принципно знам как да намеря делители на число с цикъл for, обаче този цикъл тук е безполезен, понеже делителите може да са отрицателни числа, тоест да са от реален тип, а доколкото знам с цикъл for може да се инициализират само променливи от целочислен тип. Та въпросът ми е как да намеря тези стойности (делителите на свободния член върху делителите на коефициента пред висшата степен) и да ги присвоя към променлива, която да дели след това коефициентите в цикъл while. Оттам мисля, че мога да се спрява.
Моля някой да ми помогне.
А това е кода, който съставих за решаване на квадратно уравнение, ако това може да помогне по някакъв начин:
#include <iostream>// reshavane na kvadratno uravnenie
#include <cmath>
using namespace std;
int main ()
{
double a, b, c, x, D, x1, x2;
cin>>a>>b>>c;
a*pow(x,2)+b*x+c==0;
D=(b*b)-(4*a*c);
if (a==0)
{
if (b==0)
{
if (c==0) cout<<"Vsqko x e reshenie"<<endl;
else cout<<"Nqma reshenie"<<endl;
}
else
{x=(-(c/b));
cout<<x<<endl;}
}
else
{
if (D==0)
{x1=x2=(-(b/(2*a)));
cout<<x1<<endl;}
else
{
if (D<0) cout<<"Nqma reshenie"<<endl;
else
{x1=(-b+sqrt(D))/(2*a);
x2=(-b-sqrt(D))/(2*a);
cout<<x1<<" "<<x2<<endl;}
}
}
system ("pause");
return 0;
}
Благодаря, ще го разуча. А да попитам дали е възможно да се използва масив?
А, със сигурност ще може да се направи такава програмка, при това не би трябвало да е много сложна. Не ти следих логиката в изложението, защото не е пред мен формулата за решаване на подобен тип уравнение (учил съм го, но преди доста време и съм го забравил ). Аз искам малко да те коригирам относно мнението ти за for цикъла - в един цикъл можеш всеки валиден израз да поставиш, пример for(max(a); b+5; a=5), друг е въпроса има ли смисъл. Т.е. брояча може да приема и отрицателни стойности, може и да не е от тип int, пример for(float i = -1; i > 0; i = i +0.1). Можеш дори и няколко брояча да вкараш - for(int i = 0, j = 1; i < 10; i++, j *= 10). Въпроса е вече ти какво искаш да постигнеш.
Ако дадеш формулата, по която се решава, ще мога да ти дам някакви насоки (или вкраен случай да ти я направя задачката, ако толкова те мързи, де ).