Решаване на кубично уравнение?
Здравейте!
Искам да помоля някой по опитен от мен (ниво начинаещ) да ми обясни как се съставя програма, която да намира и извежда корените на кубично уравнение (уравнение, в което най-висшата степен е трета), при въведени коефициенти пред степените. Успях да съставя код на програма, която да прави същото, но с квадратно уравнение. Знам как се решава кубично уравнение и мога да го реша на лист хартия, но изпитвам затруднения при реализацията на кода. Мисля че частта, при която се използва схема на Хорнер може да се изрази с цикъл 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). Въпроса е вече ти какво искаш да постигнеш.
). Аз искам малко да те коригирам относно мнението ти за 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). Въпроса е вече ти какво искаш да постигнеш.
Ако дадеш формулата, по която се решава, ще мога да ти дам някакви насоки (или вкраен случай да ти я направя задачката, ако толкова те мързи, де ).
 ).