Ask Question

Name:
Title:
Your Question:

Answer Question

Name:
Your Answer:
User Submitted Source Code!


Description:
  Program
Language: C/C++
Code:
#include <iostream>
#include <string>
#include <cmath>
#include <complex>
using namespace std;

void Search_Hk(double &z1, double &z2, double &a0)
{
    //Нахождение Hk
    double Hk;
    int k;
    int i = 0;
    while (i < 10)
    {
        k = i + 1;
        Hk = ((a0*(pow(z2, k))) / (z2 - z1)) + ((a0*(pow(z1, k))) / (z1 - z2));
        cout << "H" << "(" << i << ")" << " = " << Hk << endl;
        i++;
    }
}

void Hk__for_discriminant0(double &a0, double &z0)
{
    //Нахождение Hk при дискриминанте, равном 0
    double Hk;
    int k;
    int i = 0;
    while (i < 10)
    {
        k = i + 1;
        Hk = k * a0*(pow(z0, 1));
        cout << "H" << "(" << i << ")" << " = " << Hk << endl;
        i++;
    }
}

void Hk_Negative(double &a0, double &b1, double &b2)
{
    //Нахождение Hk при отрицательном дискриминанте, комплексные значения
    complex <double> Hk;
    int k;
    int i = 0;
    complex <double> z1(b1 / 2, (sqrt(b1*b1 + 2 * b2)) / 4);
    complex <double> z2(b1 / 2, -(sqrt(b1*b1 + 2 * b2)) / 4);
    double arg_Z1 = arg(z1);
    double arg_Z2 = arg(z2);
    complex <double> exp_Z1(cos(arg_Z1), sin(arg_Z1));
    complex <double> exp_Z2(cos(arg_Z2), sin(arg_Z2));
    double absolute_Z1 = abs(z1);
    double absolute_Z2 = abs(z2);
    complex <double> Z1_expZ1 = absolute_Z1 * exp_Z1;
    complex <double> Z2_expZ2 = absolute_Z2 * exp_Z2;
    //cout << z1 << "    " << z2 << "    " << arg_Z1 << "    " << arg_Z2 << "    " << exp_Z1 << "    " << exp_Z2 << "    " << absolute_Z1 << "    " << absolute_Z2 << "    " << Z1_expZ1 << "    " << Z2_expZ2 << "    " << endl;
    while (i < 10)
    {
        k = i + 1;
        Hk = ((a0 * pow(Z2_expZ2, k)) / (Z2_expZ2 - Z1_expZ1)) + ((a0 * pow(Z1_expZ1, k)) / (Z1_expZ1 - Z2_expZ2));
        cout << "H" << "(" << i << ")" << " = " << ((a0 * pow(Z2_expZ2, k)) / (Z2_expZ2 - Z1_expZ1)) + ((a0 * pow(Z1_expZ1, k)) / (Z1_expZ1 - Z2_expZ2)) << endl;
        i++;
    }
}

int main()
{
    setlocale(LC_ALL, "Russian");
    //Ввод данных
    double a0, b1, b2, z0, z1, z2, discriminant, Res1, Res2;
    cout << "Введите через пробел коэффициенты а0, b1, b2" << endl;
    cout << "(Десятичные значения записывайте через точку)" << endl;
    cin >> a0 >> b1 >> b2;
    discriminant = b1 * b1 - 4 * b2;
    cout << "Дискриминант равен (" << discriminant << ")" <<  endl;

    if (discriminant == 0)//Расчет Hk при дискриминанте равном нулю,будет один вычет
    {
        cout << "Дискриминант равен нулю" << endl;
        z0 = b1 / 2;
        Hk__for_discriminant0(a0, z0);
    }
    else if (discriminant > 0)//Нахождение вычетов при дискриминанте больше 0, имеем 2 вычета
    {
        z1 = (b1 + sqrt(discriminant)) / 2;
        z2 = (b1 - sqrt(discriminant)) / 2;
        Res1 = (a0*z2*z2) / (z2 - z1);
        Res2 = (a0*z1*z1) / (z1 - z2);
        cout << "Первый вычет (" << Res1 << ")" << endl;
        cout << "Второй вычет (" << Res2 << ")" << endl;
        cout << endl;
        Search_Hk(z1, z2, a0);
    }
    else
    {
        Hk_Negative(a0, b1, b2);
    }
    cout << endl;

    return 0;
}
     
Comments: