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

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

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

Не знаю, как округлить значения, к примеру до 2-3 символа. Еще не понимаю как сделать метод для преобразования строки в тригонометрическую форму. Помогите пожалуйста.
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Text.RegularExpressions;
  6. using System.Threading.Tasks;
  7. namespace ConsoleApplication5
  8. {
  9. class Program
  10. {
  11. class Complex
  12. {
  13. double re = 0, im;
  14. double p, q;
  15. //конструктор и его перегрузки
  16. public Complex()
  17. {
  18. }
  19. public Complex(double r) // конструктор для триг
  20. {
  21. re = r;
  22. im = 0;
  23. }
  24. public Complex(double r, double i) // конструктор для алгебр
  25. {
  26. re = r;
  27. im = i;
  28. }
  29. public Complex(double r, double i, string flag)
  30. {
  31. if (flag == "alg")
  32. {
  33. re = r;
  34. im = i;
  35. }
  36. if (flag == "trig")
  37. {
  38. p = r;
  39. q = i;
  40. }
  41. }
  42. public static Complex AlgToTrig(Complex f)
  43. {
  44. Complex f1 = new Complex();
  45. double ABS = f.abs();
  46. double b = Math.Atan(f.im / f.re) + Math.PI;
  47. f1.p = ABS;
  48. f1.q = b;
  49. return f1;
  50. }
  51. public static Complex TrigToAlg(Complex f)
  52. {
  53. Complex f1 = new Complex();
  54. f1.re = f.p * Math.Cos(f.q) * -1;
  55. f1.im = f.p * Math.Sin(f.q) * -1;
  56. return f1;
  57. }
  58. //метод преобразования в строку
  59. public string getComplexStrAlg() // в алг
  60. {
  61. string gc;
  62. if (im >= 0)
  63. {
  64. gc = re + "+" + im + "i";
  65. }
  66. else
  67. {
  68. gc = re + "" + im + "i";
  69. }
  70. return gc;
  71. }
  72. public string getComplexStrTrig() // в триг
  73. {
  74. string gc;
  75. gc = String.Format("z={0:n3}(cos{1:n3}+sin{1:n3})", p, q);
  76. return gc;
  77. }
  78. #region перезагрузки арифметических операторов
  79. public static Complex operator +(Complex f1, Complex f2) // сложение
  80. {
  81. if (f1.p != 0 && f2.p != 0)
  82. {
  83. Complex ff1 = Complex.TrigToAlg(f1);
  84. Complex ff2 = Complex.TrigToAlg(f2);
  85. Complex th = new Complex();
  86. th.re = ff1.re + ff2.re;
  87. th.im = ff1.im + ff2.im;
  88. return th;
  89. }
  90. else
  91. {
  92. Complex th = new Complex();
  93. th.re = f1.re + f2.re;
  94. th.im = f1.im + f2.im;
  95. return th;
  96. }
  97. }
  98. public static Complex operator -(Complex f1, Complex f2) //вычитание
  99. {
  100. if (f1.p != 0 && f2.p != 0)
  101. {
  102. Complex ff1 = Complex.TrigToAlg(f1);
  103. Complex ff2 = Complex.TrigToAlg(f2);
  104. Complex th = new Complex();
  105. th.re = ff1.re - ff2.re;
  106. th.im = ff1.im - ff2.im;
  107. return th;
  108. }
  109. else
  110. {
  111. Complex th = new Complex();
  112. th.re = f1.re - f2.re;
  113. th.im = f1.im - f2.im;
  114. return th;
  115. }
  116. }
  117. public static Complex operator *(Complex f1, Complex f2)// умножение
  118. {
  119. if (f1.p != 0 && f2.p != 0)
  120. {
  121. Complex ff1 = Complex.TrigToAlg(f1);
  122. Complex ff2 = Complex.TrigToAlg(f2);
  123. Complex th = new Complex();
  124. th.re = ff1.re * ff2.re - ff1.im * ff2.im;
  125. th.im = ff1.re * ff2.im + ff1.im * ff2.re;
  126. return th;
  127. }
  128. else
  129. {
  130. Complex th = new Complex();
  131. th.re = f1.re * f2.re - f1.im * f2.im;
  132. th.im = f1.re * f2.im + f1.im * f2.re;
  133. return th;
  134. }
  135. }
  136. public static Complex operator /(Complex f1, Complex f2)// деление
  137. {
  138. if (f1.p != 0 && f2.p != 0)
  139. {
  140. Complex ff1 = Complex.TrigToAlg(f1);
  141. Complex ff2 = Complex.TrigToAlg(f2);
  142. Complex th = new Complex();
  143. th.re =(ff1.re * ff2.re + ff1.im * ff2.im) / (Math.Pow(ff2.re, 2) + Math.Pow(ff2.im, 2));
  144. th.im = (ff2.re * ff1.im - ff1.re * ff2.im) / (Math.Pow(ff2.re, 2) + Math.Pow(ff2.im, 2));
  145. return th;
  146. }
  147. else
  148. {
  149. Complex th = new Complex();
  150. th.re = (f1.re * f2.re + f1.im * f2.im) / (Math.Pow(f2.re, 2) + Math.Pow(f2.im, 2));
  151. th.im = (f2.re * f1.im - f1.re * f2.im) / (Math.Pow(f2.re, 2) + Math.Pow(f2.im, 2));
  152. return th;
  153. }
  154. }
  155. #endregion
  156. public double abs()
  157. {
  158. double r;
  159. r = Math.Sqrt(Math.Pow(re, 2) + Math.Pow(im, 2));
  160. return r;
  161. }
  162. #region перезагрузки операторов сравнения
  163. public static bool operator >(Complex f1, Complex f2)
  164. {
  165. double r1, r2;
  166. if (f1.p != 0 && f2.p != 0)
  167. {
  168. Complex ff1 = Complex.TrigToAlg(f1);
  169. Complex ff2 = Complex.TrigToAlg(f2);
  170. r1 = ff1.abs();
  171. r2 = ff2.abs();
  172. }
  173. else
  174. {
  175. r1 = f1.abs();
  176. r2 = f2.abs();
  177. }
  178. if (r1 > r2)
  179. {
  180. return true;
  181. }
  182. else
  183. {
  184. return false;
  185. }
  186. }
  187. public static bool operator <(Complex f1, Complex f2)
  188. {
  189. double r1, r2;
  190. if (f1.p != 0 && f2.p != 0)
  191. {
  192. Complex ff1 = Complex.TrigToAlg(f1);
  193. Complex ff2 = Complex.TrigToAlg(f2);
  194. r1 = ff1.abs();
  195. r2 = ff2.abs();
  196. }
  197. else
  198. {
  199. r1 = f1.abs();
  200. r2 = f2.abs();
  201. }
  202. if (r1 < r2)
  203. {
  204. return true;
  205. }
  206. else
  207. {
  208. return false;
  209. }
  210. }
  211. public static bool operator <=(Complex f1, Complex f2)
  212. {
  213. double r1, r2;
  214. if (f1.p != 0 && f2.p != 0)
  215. {
  216. Complex ff1 = Complex.TrigToAlg(f1);
  217. Complex ff2 = Complex.TrigToAlg(f2);
  218. r1 = ff1.abs();
  219. r2 = ff2.abs();
  220. }
  221. else
  222. {
  223. r1 = f1.abs();
  224. r2 = f2.abs();
  225. }
  226. if (r1 <= r2)
  227. {
  228. return true;
  229. }
  230. else
  231. {
  232. return false;
  233. }
  234. }
  235. public static bool operator >=(Complex f1, Complex f2)
  236. {
  237. double r1, r2;
  238. if (f1.p != 0 && f2.p != 0)
  239. {
  240. Complex ff1 = Complex.TrigToAlg(f1);
  241. Complex ff2 = Complex.TrigToAlg(f2);
  242. r1 = ff1.abs();
  243. r2 = ff2.abs();
  244. }
  245. else
  246. {
  247. r1 = f1.abs();
  248. r2 = f2.abs();
  249. }
  250. if (r1 >= r2)
  251. {
  252. return true;
  253. }
  254. else
  255. {
  256. return false;
  257. }
  258. }
  259. public static bool operator ==(Complex f1, Complex f2)
  260. {
  261. double r1, r2;
  262. if (f1.p != 0 && f2.p != 0)
  263. {
  264. Complex ff1 = Complex.TrigToAlg(f1);
  265. Complex ff2 = Complex.TrigToAlg(f2);
  266. r1 = ff1.abs();
  267. r2 = ff2.abs();
  268. }
  269. else
  270. {
  271. r1 = f1.abs();
  272. r2 = f2.abs();
  273. }
  274. if (r1 == r2)
  275. {
  276. return true;
  277. }
  278. else
  279. {
  280. return false;
  281. }
  282. }
  283. public static bool operator !=(Complex f1, Complex f2)
  284. {
  285. double r1, r2;
  286. if (f1.p != 0 && f2.p != 0)
  287. {
  288. Complex ff1 = Complex.TrigToAlg(f1);
  289. Complex ff2 = Complex.TrigToAlg(f2);
  290. r1 = ff1.abs();
  291. r2 = ff2.abs();
  292. }
  293. else
  294. {
  295. r1 = f1.abs();
  296. r2 = f2.abs();
  297. }
  298. if (r1 >= r2)
  299. {
  300. return true;
  301. }
  302. else
  303. {
  304. return false;
  305. }
  306. }
  307. #endregion
  308. public static Complex StringToComplex(string s)//статический метод из строки в комплексное число
  309. {
  310. Complex f = new Complex();
  311. String pattern = @"[-+]?(\d+)([-+*/])(\d+)";
  312. foreach (Match m in Regex.Matches(s, pattern))
  313. {
  314. f.re = Int32.Parse(m.Groups[1].Value);
  315. f.im = Int32.Parse(m.Groups[3].Value);
  316. if (m.Groups[0].Value == "-")
  317. {
  318. f.re = f.re * -1;
  319. }
  320. if (m.Groups[2].Value == "-")
  321. {
  322. f.im *= -1;
  323. }
  324. }
  325. return f;
  326. }
  327. ~Complex()
  328. {
  329. Console.WriteLine("Экземпляр уничтожен");
  330. }
  331. }
  332. static void Main(string[] args)
  333. {
  334. Complex cmx1 = new Complex();
  335. Complex cmx2 = new Complex();
  336. Complex cmx = new Complex();
  337. Console.WriteLine("Введите первое комплексное число в алгебраической форме:");
  338. string comp1 = Console.ReadLine();
  339. cmx1 = Complex.StringToComplex(comp1);
  340. Console.WriteLine("Введите второе комплексное число в алгебраической форме:");
  341. string comp2 = Console.ReadLine();
  342. cmx2 = Complex.StringToComplex(comp2);
  343. Console.WriteLine("ОПЕРАТОРЫ");
  344. cmx = cmx1 + cmx2;
  345. Console.WriteLine(cmx1.getComplexStrAlg() + "+" + cmx2.getComplexStrAlg() + "=" + cmx.getComplexStrAlg());
  346. cmx = cmx1 - cmx2;
  347. Console.WriteLine(cmx1.getComplexStrAlg() + "-" + cmx2.getComplexStrAlg() + "=" + cmx.getComplexStrAlg());
  348. cmx = cmx1 * cmx2;
  349. Console.WriteLine(cmx1.getComplexStrAlg() + "*" + cmx2.getComplexStrAlg() + "=" + cmx.getComplexStrAlg());
  350. cmx = cmx1 / cmx2;
  351. Console.WriteLine(cmx1.getComplexStrAlg() + "/" + cmx2.getComplexStrAlg() + "=" + cmx.getComplexStrAlg());
  352. if (cmx1 > cmx2)
  353. {
  354. Console.WriteLine(cmx1.getComplexStrAlg() + ">" + cmx2.getComplexStrAlg() + "=true");
  355. }
  356. else
  357. if (cmx1 < cmx2)
  358. {
  359. Console.WriteLine(cmx1.getComplexStrAlg() + "<" + cmx2.getComplexStrAlg() + "=true");
  360. }
  361. else
  362. {
  363. Console.WriteLine(cmx1.getComplexStrAlg() + "==" + cmx2.getComplexStrAlg() + "=true");
  364. }
  365. Console.WriteLine("ТРИГОНОМЕТРИЧЕСКАЯ ФОРМА:");
  366. Console.WriteLine("Первое число в тригонометрической форме:");
  367. cmx = Complex.AlgToTrig(cmx1);
  368. Console.WriteLine(cmx.getComplexStrTrig());//
  369. Console.WriteLine("Второе число в тригонометрической форме:");
  370. cmx = Complex.AlgToTrig(cmx2);
  371. Console.WriteLine(cmx.getComplexStrTrig());//
  372. Console.WriteLine("Введите аргумент комплексного числа:");
  373. double p = Convert.ToDouble(Console.ReadLine());
  374. Console.WriteLine("Введите угол комплексного числа:");
  375. double q = Convert.ToDouble(Console.ReadLine());
  376. Complex tcmx = new Complex(p, q, "trig");
  377. Console.WriteLine("Ваше число в тригонометрической и алгеброической формах");
  378. Console.WriteLine(tcmx.getComplexStrTrig());
  379. cmx = Complex.TrigToAlg(tcmx);
  380. Console.WriteLine(cmx.getComplexStrAlg());
  381.  
  382. Console.ReadLine();
  383. }
  384. }
  385. }

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

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

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


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

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

5   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы