SolveClass.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Runtime.Remoting.Messaging;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. namespace KuzminBolshakovLab5
  8. {
  9. // Класс для математических вычислений
  10. class SolveClass
  11. {
  12. // Вычисление косинуса через синус
  13. public static double Cos(double x)
  14. {
  15. return Math.Sin(Math.PI / 2 - x);
  16. }
  17. public double DriveCos() => Cos(-2);
  18. public double DriveTan() => Tan(-2);
  19. public double DriveCot() => Cot(-2);
  20. public double DriveSec() => Sec(-2);
  21. public double DriveLogBase() => LogBase(2,2);
  22. public static int Plug1() { return 1; }
  23. public static int Plug2() { return 2; }
  24. public static int PlugTan() => 2;
  25. public static int PlugCot() => 2;
  26. public static int PlugSec() => 2;
  27. public static int PlugCos() => 2;
  28. public static int PlugLogBase() => 2;
  29. // Вычисление тангенса
  30. public static double Tan(double x)
  31. {
  32. if (Math.Cos(x) == 0) return double.MinValue; // Тангенс не существует
  33. return Math.Sin(x) / Cos(x);
  34. }
  35. // Вычисление котангенса
  36. public static double Cot(double x)
  37. {
  38. if (Math.Sin(x) == 0) return double.MinValue; // Котангенс не существует
  39. return Cos(x) / Math.Sin(x);
  40. }
  41. // Вычисление секанса
  42. public static double Sec(double x) => 1 / Cos(x);
  43. // Вычисление логарифма по любому основанию
  44. public static double LogBase(double x, double baseValue)
  45. {
  46. if (x <= 0 || baseValue <= 0 || baseValue == 1) return double.MinValue; // Логарифм не существует
  47. return Math.Log(x) / Math.Log(baseValue);
  48. }
  49. // Решение первого уравнения (левая часть) для x <= 0
  50. public static double SolveLeft(double x)
  51. {
  52. double part1 = ((Cot(x) / Sec(x)) - Tan(x)) * Math.Sin(x) / Cos(x);
  53. //double part1 = ((PlugCot() / PlugSec()) - PlugTan()) * Math.Sin(x) / PlugCos();
  54. //double part2 = (Math.Sin(x) + Cos(x) + Cos(x)) * (Math.Sin(x) + Cos(x) + Cos(x));
  55. double part2 = (Math.Sin(x) + Cos(x) + Cos(x)) * (Math.Sin(x) + Cos(x) + Cos(x));
  56. return part1 * part2;
  57. }
  58. // Решение второго уравнения (правая часть) для x > 0
  59. public static double SolveRight(double x)
  60. {
  61. double logBase5 = LogBase(x, 5);
  62. if (logBase5 == double.MinValue) return double.MinValue; // Проверка на несуществующие логарифмы
  63. double part1 = ((logBase5 * logBase5 * logBase5) * LogBase(x, 10) + LogBase(x, 3)) / Math.Log(x);
  64. double part2 = Math.Log(x) * logBase5;
  65. return part1 + part2;
  66. }
  67. // Проверка совместимости системы
  68. public static bool SolveSystem(double x, out double leftResult, out double rightResult)
  69. {
  70. leftResult = double.MinValue;
  71. rightResult = double.MinValue;
  72. if (x == 0)
  73. {
  74. Console.WriteLine($"Котангенса от {x} не существует");
  75. return false;
  76. }
  77. if (x == 1)
  78. {
  79. Console.WriteLine($"Логарифм от {x} равен 0");
  80. return false;
  81. }
  82. if (Plug1() <= 0)
  83. {
  84. leftResult = SolveLeft(x);
  85. return leftResult != double.MinValue; // Только левое уравнение имеет смысл
  86. }
  87. else if (Plug2() > 0)
  88. {
  89. rightResult = SolveRight(x);
  90. return rightResult != double.MinValue; // Только правое уравнение имеет смысл
  91. }
  92. return false; // В случае других ошибок
  93. }
  94. }
  95. }