Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

KikaMerev avatar KikaMerev 0 Точки

Решаване на кубично уравнение?

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

 

Тагове:
0
C++ Programming 16/06/2016 00:31:24
Filkolev avatar Filkolev 4482 Точки

Със сигурност ще ти трябва това: http://en.cppreference.com/w/cpp/numeric/complex

Оттам нататък може да ползваш и директно формулата за кубично уравнение; само ще трябва да разучиш как се ползва това апи с комплексните числа, но не изглежда особено сложно.

0
KikaMerev avatar KikaMerev 0 Точки

Благодаря, ще го разуча. А да попитам дали е възможно да се използва масив?

0
mitko.z avatar mitko.z 5 Точки

А, със сигурност ще може да се направи такава програмка, при това не би трябвало да е много сложна. Не ти следих логиката в изложението, защото не е пред мен формулата за решаване на подобен тип уравнение (учил съм го, но преди доста време и съм го забравил blush). Аз искам малко да те коригирам относно мнението ти за 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). Въпроса е вече ти какво искаш да постигнеш.

Ако дадеш формулата, по която се решава, ще мога да ти дам някакви насоки (или вкраен случай да ти я направя задачката, ако толкова те мързи, де laugh ).

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.