Комплексные числа, округление, ввод тригонометрической формы со строки - C#

Узнай цену своей работы

Формулировка задачи:

Не знаю, как округлить значения, к примеру до 2-3 символа. Еще не понимаю как сделать метод для преобразования строки в тригонометрическую форму. Помогите пожалуйста.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
 
namespace ConsoleApplication5
{
    class Program
    {
        class Complex
        {
            double re = 0, im;
            double p, q;
            //конструктор и его перегрузки
            public Complex() 
            {
 
            }
            public Complex(double r) // конструктор для триг
            {
                re = r;
                im = 0;
            }
            public Complex(double r, double i) // конструктор для алгебр
            {
                re = r;
                im = i;
            }
            public Complex(double r, double i, string flag) 
            {
                if (flag == "alg")
                {
                    re = r;
                    im = i;
                }
                if (flag == "trig")
                {
                    p = r;
                    q = i;
                }
            }
            
            public static Complex AlgToTrig(Complex f)
            {
                Complex f1 = new Complex();
                double ABS = f.abs();
 
                double b = Math.Atan(f.im / f.re) + Math.PI;
                f1.p = ABS;
                f1.q = b;
               
                return f1;
            }
            public static Complex TrigToAlg(Complex f)
            {
                Complex f1 = new Complex();
                f1.re = f.p * Math.Cos(f.q) * -1;
                f1.im = f.p * Math.Sin(f.q) * -1;
 
                return f1;
            }
 
            //метод преобразования в строку
            public string getComplexStrAlg() // в алг
            {
                string gc;
                if (im >= 0)
                {
                    gc = re + "+" + im + "i";
                }
                else
                {
                    gc = re + "" + im + "i";
                }
 
                return gc;
            }
            public string getComplexStrTrig()  // в триг
            {
                string gc;
 
                gc = String.Format("z={0:n3}(cos{1:n3}+sin{1:n3})", p, q);
 
                return gc;
            }
 
            #region перезагрузки арифметических операторов
         
            public static Complex operator +(Complex f1, Complex f2) // сложение
            {
                if (f1.p != 0 && f2.p != 0)
                {
                    Complex ff1 = Complex.TrigToAlg(f1);
                    Complex ff2 = Complex.TrigToAlg(f2);
                    Complex th = new Complex();
                    th.re = ff1.re + ff2.re;
                    th.im = ff1.im + ff2.im;
                    return th;
                }
                else
                {
                    Complex th = new Complex();
                    th.re = f1.re + f2.re;
                    th.im = f1.im + f2.im;
                    return th;
                }
            }
            public static Complex operator -(Complex f1, Complex f2) //вычитание
            {
                if (f1.p != 0 && f2.p != 0)
                {
                    Complex ff1 = Complex.TrigToAlg(f1);
                    Complex ff2 = Complex.TrigToAlg(f2);
                    Complex th = new Complex();
                    th.re = ff1.re - ff2.re;
                    th.im = ff1.im - ff2.im;
                    return th;
                }
                else
                {
                    Complex th = new Complex();
                    th.re = f1.re - f2.re;
                    th.im = f1.im - f2.im;
                    return th;
                }
            }
            public static Complex operator *(Complex f1, Complex f2)// умножение
            {
                if (f1.p != 0 && f2.p != 0)
                {
                    Complex ff1 = Complex.TrigToAlg(f1);
                    Complex ff2 = Complex.TrigToAlg(f2);
                    Complex th = new Complex();
                    th.re = ff1.re * ff2.re - ff1.im * ff2.im;
                    th.im = ff1.re * ff2.im + ff1.im * ff2.re;
                    return th;
                }
                else
                {
                    Complex th = new Complex();
                    th.re = f1.re * f2.re - f1.im * f2.im;
                    th.im = f1.re * f2.im + f1.im * f2.re;
                    return th;
 
                }
            }
            public static Complex operator /(Complex f1, Complex f2)// деление
            {
                if (f1.p != 0 && f2.p != 0)
                {
                    Complex ff1 = Complex.TrigToAlg(f1);
                    Complex ff2 = Complex.TrigToAlg(f2);
                    Complex th = new Complex();
                    th.re =(ff1.re * ff2.re + ff1.im * ff2.im) / (Math.Pow(ff2.re, 2) + Math.Pow(ff2.im, 2));
                    th.im = (ff2.re * ff1.im - ff1.re * ff2.im) / (Math.Pow(ff2.re, 2) + Math.Pow(ff2.im, 2));
                    return th;
                }
                else
                {
                    Complex th = new Complex();
                    th.re = (f1.re * f2.re + f1.im * f2.im) / (Math.Pow(f2.re, 2) + Math.Pow(f2.im, 2));
                    th.im = (f2.re * f1.im - f1.re * f2.im) / (Math.Pow(f2.re, 2) + Math.Pow(f2.im, 2));
                    return th;
                }
            }
            #endregion
            
            public double abs()
            {
                double r;
                r = Math.Sqrt(Math.Pow(re, 2) + Math.Pow(im, 2));
                return r;
            }
            #region перезагрузки операторов сравнения
            
            public static bool operator >(Complex f1, Complex f2)
            {
                double r1, r2;
                if (f1.p != 0 && f2.p != 0)
                {
                    Complex ff1 = Complex.TrigToAlg(f1);
                    Complex ff2 = Complex.TrigToAlg(f2);
                    r1 = ff1.abs();
                    r2 = ff2.abs();
                }
                else
                {
                    r1 = f1.abs();
                    r2 = f2.abs();
                }
                if (r1 > r2)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            public static bool operator <(Complex f1, Complex f2)
            {
                double r1, r2;
                if (f1.p != 0 && f2.p != 0)
                {
                    Complex ff1 = Complex.TrigToAlg(f1);
                    Complex ff2 = Complex.TrigToAlg(f2);
                    r1 = ff1.abs();
                    r2 = ff2.abs();
                }
                else
                {
                    r1 = f1.abs();
                    r2 = f2.abs();
                }
                if (r1 < r2)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            public static bool operator <=(Complex f1, Complex f2)
            {
                double r1, r2;
                if (f1.p != 0 && f2.p != 0)
                {
                    Complex ff1 = Complex.TrigToAlg(f1);
                    Complex ff2 = Complex.TrigToAlg(f2);
                    r1 = ff1.abs();
                    r2 = ff2.abs();
                }
                else
                {
                    r1 = f1.abs();
                    r2 = f2.abs();
                }
                if (r1 <= r2)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            public static bool operator >=(Complex f1, Complex f2)
            {
                double r1, r2;
                if (f1.p != 0 && f2.p != 0)
                {
                    Complex ff1 = Complex.TrigToAlg(f1);
                    Complex ff2 = Complex.TrigToAlg(f2);
                    r1 = ff1.abs();
                    r2 = ff2.abs();
                }
                else
                {
                    r1 = f1.abs();
                    r2 = f2.abs();
                }
                if (r1 >= r2)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            public static bool operator ==(Complex f1, Complex f2)
            {
                double r1, r2;
                if (f1.p != 0 && f2.p != 0)
                {
                    Complex ff1 = Complex.TrigToAlg(f1);
                    Complex ff2 = Complex.TrigToAlg(f2);
                    r1 = ff1.abs();
                    r2 = ff2.abs();
                }
                else
                {
                    r1 = f1.abs();
                    r2 = f2.abs();
                }
                if (r1 == r2)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            public static bool operator !=(Complex f1, Complex f2)
            {
                double r1, r2;
                if (f1.p != 0 && f2.p != 0)
                {
                    Complex ff1 = Complex.TrigToAlg(f1);
                    Complex ff2 = Complex.TrigToAlg(f2);
                    r1 = ff1.abs();
                    r2 = ff2.abs();
                }
                else
                {
                    r1 = f1.abs();
                    r2 = f2.abs();
                }
                if (r1 >= r2)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            #endregion
            
            public static Complex StringToComplex(string s)//статический метод из строки в комплексное число
            {
                Complex f = new Complex();
                String pattern = @"[-+]?(\d+)([-+*/])(\d+)";
                foreach (Match m in Regex.Matches(s, pattern))
                {
                    f.re = Int32.Parse(m.Groups[1].Value);
                    f.im = Int32.Parse(m.Groups[3].Value);
                    if (m.Groups[0].Value == "-")
                    {
                        f.re = f.re * -1;
                    }
                    if (m.Groups[2].Value == "-")
                    {
                        f.im *= -1;
                    }
                }
                return f;
            }
 
            ~Complex() 
            {
                Console.WriteLine("Экземпляр уничтожен");
            }
 
        }
        static void Main(string[] args)
        {
 
            Complex cmx1 = new Complex();
            Complex cmx2 = new Complex();
            Complex cmx = new Complex();
            Console.WriteLine("Введите первое комплексное число в алгебраической форме:");
            string comp1 = Console.ReadLine();
            cmx1 = Complex.StringToComplex(comp1);
            Console.WriteLine("Введите второе комплексное число в алгебраической форме:");
            string comp2 = Console.ReadLine();
            cmx2 = Complex.StringToComplex(comp2);
            Console.WriteLine("ОПЕРАТОРЫ");
            cmx = cmx1 + cmx2;
            Console.WriteLine(cmx1.getComplexStrAlg() + "+" + cmx2.getComplexStrAlg() + "=" + cmx.getComplexStrAlg());
            cmx = cmx1 - cmx2;
            Console.WriteLine(cmx1.getComplexStrAlg() + "-" + cmx2.getComplexStrAlg() + "=" + cmx.getComplexStrAlg());
            cmx = cmx1 * cmx2;
            Console.WriteLine(cmx1.getComplexStrAlg() + "*" + cmx2.getComplexStrAlg() + "=" + cmx.getComplexStrAlg());
            cmx = cmx1 / cmx2;
            Console.WriteLine(cmx1.getComplexStrAlg() + "/" + cmx2.getComplexStrAlg() + "=" + cmx.getComplexStrAlg());
            if (cmx1 > cmx2)
            {
                Console.WriteLine(cmx1.getComplexStrAlg() + ">" + cmx2.getComplexStrAlg() + "=true");
            }
            else
            if (cmx1 < cmx2)
            {
                Console.WriteLine(cmx1.getComplexStrAlg() + "<" + cmx2.getComplexStrAlg() + "=true");
            }
            else
            {
                Console.WriteLine(cmx1.getComplexStrAlg() + "==" + cmx2.getComplexStrAlg() + "=true");
            }
            Console.WriteLine("ТРИГОНОМЕТРИЧЕСКАЯ ФОРМА:");
            Console.WriteLine("Первое число в тригонометрической форме:");
            cmx = Complex.AlgToTrig(cmx1);
            Console.WriteLine(cmx.getComplexStrTrig());//
            Console.WriteLine("Второе число в тригонометрической форме:");
            cmx = Complex.AlgToTrig(cmx2);
            Console.WriteLine(cmx.getComplexStrTrig());//
 
            Console.WriteLine("Введите аргумент комплексного числа:");
            double p = Convert.ToDouble(Console.ReadLine());
            Console.WriteLine("Введите угол комплексного числа:");
            double q = Convert.ToDouble(Console.ReadLine());
            Complex tcmx = new Complex(p, q, "trig");
            Console.WriteLine("Ваше число в тригонометрической и алгеброической формах");
            Console.WriteLine(tcmx.getComplexStrTrig());
            cmx = Complex.TrigToAlg(tcmx);
            Console.WriteLine(cmx.getComplexStrAlg());

            Console.ReadLine();
        }
    }
}

Решение задачи: «Комплексные числа, округление, ввод тригонометрической формы со строки»

textual
Листинг программы
        //метод преобразования в строку
        public string getComplexStrAlg() // в алг
        {
            return string.Format("{0:0.00} {1} {2:0.00}i", re, im >= 0 ? "+" : "-", Math.Abs(im));
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5
Похожие ответы