Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2011, 18:40   #1
ice173
 
Регистрация: 16.05.2011
Сообщений: 7
По умолчанию квадратное уравнение(немног сложное)

Всем привет..Нужна небольшая помощь...Мне была дано задание
Написать программу решения квадратного уравнения в общем с комплексными кофициентами используя классы...
как туда вставить решение с комплексными я без понятия(((помогите кто поправить код....

Код:
#include <iostream>
#include <complex>
#include <math.h>
#include <string.h>
using namespace std;
 
class qvur
{
 public:
        double  _a, _b, _c; 
        double _x1, _x2;
 
        void ReturnSomething(); 
        void SetABC(double a, double b, double c)
        {
            _a=a;
            _b=b;
            _c=c;
        };
 
        double Geta(){return _a;}
        double Getb(){return _b;}
        double Getc(){return _c;}
        void SetX(double x1,double x2)
        {
            _x1=x1;
            _x2=x2;
        }
        double getx1(){return _x1;}
        double getx2(){return _x2;}
        void reshenie()
        {
            double D=pow(_b,2)-4*_a*_c;
            cout<<"Diskriminant = "<< D << endl;
            _x1=(-_b-sqrt(D))/(2*_a);
            _x2=(-_b+sqrt(D))/(2*_a);
        };
         private:
        void DoSomething();
 
};
 
int main()
{
        qvur qu;
        double a,b,c,x1,x2;
        cout<<" ***Vvedite koficienti*** a,b,c \n";
        cout<<"a=";
        cin>>a;
        cout<<"b=";
        cin>>b;
        cout<<"c=";
        cin>>c;
        qu.SetABC(a,b,c);
        qu.reshenie();
        cout<<"x1= ";
        cout<<qu.getx1();
        cout<<" \n";
        cout<<"x2= ";
        cout<<qu.getx2() << endl;
        system("pause");
        return 0;
}
ice173 вне форума Ответить с цитированием
Старый 17.05.2011, 12:36   #2
KobolD
Форумчанин
 
Регистрация: 10.06.2010
Сообщений: 239
По умолчанию

Ну так тебе надо еще класс комплексных чисел создать и переменные х1 и х2 объявлять как экземпляры этого класса.
Код:
class Complex
{
 public:
        double Re, Im;
}
И подправите процедуру нахождения решения (вывод ответа сам допишешь)
Код:
        void reshenie()
        {
            double D=pow(_b,2)-4*_a*_c;
            cout<<"Diskriminant = "<< D << endl;
            if (D<0)
                  _x1.Re=(-_b)/(2*_a);
                  _x1.Im=(-sqrt(-D))/(2*_a);
                  _x2.Re=(-_b)/(2*_a);
                  _x2.Im=(+sqrt(-D))/(2*_a);
            else
                 _x1.Re=(-_b-sqrt(D))/(2*_a);
                 _x2.Re=(-_b+sqrt(D))/(2*_a);
        };
P.S. А зачем создавать методы досупа к общедоступным членам?
Чтобы слова не расходились с делом, нужно молчать и ничего не делать.
KobolD вне форума Ответить с цитированием
Старый 17.05.2011, 17:04   #3
ice173
 
Регистрация: 16.05.2011
Сообщений: 7
По умолчанию

огромное спасибо))помогло)
ice173 вне форума Ответить с цитированием
Старый 17.05.2011, 20:17   #4
ice173
 
Регистрация: 16.05.2011
Сообщений: 7
По умолчанию

Код:
#include <iostream>
#include <complex>
#include <math.h>
#include <string.h>
using namespace std;

class Complex
{
 public:
        double Re, Im;
};

class qvur
{
 public:
        double  _a, _b, _c; 
        double _x1, _x2;
 
        void ReturnSomething(); 
        void SetABC(double a, double b, double c)
        {
            _a=a;
            _b=b;
            _c=c;
        };
 
        double Geta(){return _a;}
        double Getb(){return _b;}
        double Getc(){return _c;}
        void SetX(double x1,double x2)
        {
            _x1=x1;
            _x2=x2;
        }
        double getx1(){return _x1;}
        double getx2(){return _x2;}
        void reshenie()
        {
            double D=pow(_b,2)-4*_a*_c;
            cout<<"Diskriminant = "<< D << endl;
            if (D<0)
                  _x1.Re=(-_b)/(2*_a);
                  _x1.Im=(-sqrt(-D))/(2*_a);
                  _x2.Re=(-_b)/(2*_a);
                  _x2.Im=(+sqrt(-D))/(2*_a);
            else
                 _x1.Re=(-_b-sqrt(D))/(2*_a);
                 _x2.Re=(-_b+sqrt(D))/(2*_a);
        };
         private:
        void DoSomething();
 
};
 
int main()
{
        qvur qu;
        double a,b,c,x1,x2;
        cout<<" ***Vvedite koficienti*** a,b,c \n";
        cout<<"a=";
        cin>>a;
        cout<<"b=";
        cin>>b;
        cout<<"c=";
        cin>>c;
        qu.SetABC(a,b,c);
        qu.reshenie();
        cout<<"x1= ";
        cout<<qu.getx1();
        cout<<" \n";
        cout<<"x2= ";
        cout<<qu.getx2() << endl;
        system("pause");
        return 0;
}
если должно быть так то ошибку кидает...что нетак?
ice173 вне форума Ответить с цитированием
Старый 18.05.2011, 12:19   #5
KobolD
Форумчанин
 
Регистрация: 10.06.2010
Сообщений: 239
По умолчанию

Ты вот эту фразу читал?
Цитата:
Сообщение от KobolD Посмотреть сообщение
Ну так тебе надо еще класс комплексных чисел создать и переменные х1 и х2 объявлять как экземпляры этого класса.
double _x1, _x2; меняем на Complex _x1, _x2;

и соответственно вывод делаешь сразу текстом (не помню как приведение типов на С++ реализуется поэтому возможно надо будет подправить)
Код:
string getx1(){
if (_x1.Im<0)
     return (string)_x1.Re +"-i" + (string)abs(_x1.Im);
else
      return (string)_x1.Re + "+i" + (string)_x1.Im;
}
Чтобы слова не расходились с делом, нужно молчать и ничего не делать.

Последний раз редактировалось KobolD; 18.05.2011 в 12:22.
KobolD вне форума Ответить с цитированием
Старый 18.05.2011, 12:26   #6
KobolD
Форумчанин
 
Регистрация: 10.06.2010
Сообщений: 239
По умолчанию

Кстати, зачем тебе вот этот метод?
Код:
        void SetX(double x1,double x2)
        {
            _x1=x1;
            _x2=x2;
        }
и к тому же в основной программе не надо объявлять переменные х1 и х2, они всеравно не используются.
Чтобы слова не расходились с делом, нужно молчать и ничего не делать.
KobolD вне форума Ответить с цитированием
Старый 19.05.2011, 13:05   #7
ice173
 
Регистрация: 16.05.2011
Сообщений: 7
По умолчанию

что-то неособо получается((
может вы в код вгоните всё..посмотрю визуально..нужно понять...
ice173 вне форума Ответить с цитированием
Старый 19.05.2011, 14:39   #8
KobolD
Форумчанин
 
Регистрация: 10.06.2010
Сообщений: 239
По умолчанию

Код:
    class Program
    {
        static void Main(string[] args)
        {
            double a, b, c;
            //Ввод данных
            Console.WriteLine("Введи a b c");
            Console.Write("a=");
            a=Convert.ToDouble(Console.ReadLine());
            Console.Write("b=");
            b = Convert.ToDouble(Console.ReadLine());
            Console.Write("c=");
            c = Convert.ToDouble(Console.ReadLine());

            //Создаие объекта
            KvadratnoUravnenie MyUravnenie = new KvadratnoUravnenie(a, b, c);

            //Вывод результата
            MyUravnenie.Vivod();

            Console.ReadLine();
        }

        class Komplex
        {
            public double Re;
            public double Im;
        }

        class KvadratnoUravnenie
        {
            double a, b, c;
            Komplex X1;
            Komplex X2;

            public KvadratnoUravnenie(double a, double b, double c)
            {
                this.a = a;
                this.b = b;
                this.c = c;
                reshenie(); //Решать будем сразу после ввода коэфициентов
            }

            void reshenie() //процедура решает уравнение
            {
                double D = Math.Pow(b, 2) - (4 * a * c);
                if (D < 0)
                {
                    X1 = new Komplex();
                    X2 = new Komplex();
                    X2.Re = X1.Re = -b / (2 * a);
                    X1.Im = Math.Sqrt(Math.Abs(D)) / (2 * a);
                    X2.Im = -X1.Im;
                }
                else if (D > 0)
                {
                    X1 = new Komplex();
                    X2 = new Komplex();
                    X1.Re = (-b - Math.Sqrt(D)) / (2 * a);
                    X2.Re = (-b + Math.Sqrt(D)) / (2 * a);
                }
                else
                {
                    X1 = new Komplex();
                    X1.Re = -b / (2 * a);
                }
            }

            public void  Vivod() //вывод решения в консоль
            {
                //Вывод первого решения
                int Toleranse = 3; //(округляем до третьего знака)
                if (X1!=null)
                    if (X1.Im==0)
                        Console.WriteLine("X1 = " + Math.Round(X1.Re, Toleranse).ToString());
                    else if (X1.Im<0)
                        Console.WriteLine("X1 = {0} -i{1}", Math.Round(X1.Re, Toleranse), Math.Abs(Math.Round(X1.Im, Toleranse)));
                    else
                        Console.WriteLine("X1 = {0} +i{1}", Math.Round(X1.Re, Toleranse), Math.Abs(Math.Round(X1.Im, Toleranse)));
                //Вывод второго решения
                if (X2 != null)
                    if (X2.Im == 0)
                        Console.WriteLine("X2 = " + Math.Round(X2.Re, Toleranse).ToString());
                    else if (X2.Im < 0)
                        Console.WriteLine("X2 = {0} -i{1}", Math.Round(X2.Re, Toleranse), Math.Abs(Math.Round(X2.Im, Toleranse)));
                    else
                        Console.WriteLine("X2 = {0} +i{1}", Math.Round(X2.Re, Toleranse), Math.Abs(Math.Round(X2.Im, Toleranse)));
            }
        }
    }
Чтобы слова не расходились с делом, нужно молчать и ничего не делать.
KobolD вне форума Ответить с цитированием
Старый 19.05.2011, 23:36   #9
ice173
 
Регистрация: 16.05.2011
Сообщений: 7
По умолчанию

огромное спасибо))только вот думаю препод ахренеет увидев что я с# знаю))мне на dev c++ нужн)))но я с этим материалом разберусь наверно)))покрайней мере постораюсь

Последний раз редактировалось ice173; 19.05.2011 в 23:45. Причина: корректировка
ice173 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Квадратное уравнение turtles Общие вопросы по Java, Java SE, Kotlin 1 14.04.2011 21:56
Квадратное уравнение Marfeys Помощь студентам 1 22.12.2010 10:04
Сложное уравнение Lodas Помощь студентам 8 17.10.2010 23:09
Квадратное уравнение LuBuMaster Общие вопросы C/C++ 0 24.03.2010 18:19