123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Runtime.Remoting.Messaging;
- using System.Text;
- using System.Threading.Tasks;
- namespace KuzminBolshakovLab5
- {
- // Класс для математических вычислений
- class SolveClass
- {
- // Вычисление косинуса через синус
- public static double Cos(double x)
- {
- return Math.Sin(Math.PI / 2 - x);
- }
- public double DriveCos() => Cos(-2);
- public double DriveTan() => Tan(-2);
- public double DriveCot() => Cot(-2);
- public double DriveSec() => Sec(-2);
- public double DriveLogBase() => LogBase(2,2);
- public static int Plug1() { return 1; }
- public static int Plug2() { return 2; }
- public static int PlugTan() => 2;
- public static int PlugCot() => 2;
- public static int PlugSec() => 2;
- public static int PlugCos() => 2;
- public static int PlugLogBase() => 2;
- // Вычисление тангенса
- public static double Tan(double x)
- {
- if (Math.Cos(x) == 0) return double.MinValue; // Тангенс не существует
- return Math.Sin(x) / Cos(x);
- }
- // Вычисление котангенса
- public static double Cot(double x)
- {
- if (Math.Sin(x) == 0) return double.MinValue; // Котангенс не существует
- return Cos(x) / Math.Sin(x);
- }
- // Вычисление секанса
- public static double Sec(double x) => 1 / Cos(x);
- // Вычисление логарифма по любому основанию
- public static double LogBase(double x, double baseValue)
- {
- if (x <= 0 || baseValue <= 0 || baseValue == 1) return double.MinValue; // Логарифм не существует
- return Math.Log(x) / Math.Log(baseValue);
- }
- // Решение первого уравнения (левая часть) для x <= 0
- public static double SolveLeft(double x)
- {
- double part1 = ((Cot(x) / Sec(x)) - Tan(x)) * Math.Sin(x) / Cos(x);
- //double part1 = ((PlugCot() / PlugSec()) - PlugTan()) * Math.Sin(x) / PlugCos();
- //double part2 = (Math.Sin(x) + Cos(x) + Cos(x)) * (Math.Sin(x) + Cos(x) + Cos(x));
- double part2 = (Math.Sin(x) + Cos(x) + Cos(x)) * (Math.Sin(x) + Cos(x) + Cos(x));
- return part1 * part2;
- }
- // Решение второго уравнения (правая часть) для x > 0
- public static double SolveRight(double x)
- {
- double logBase5 = LogBase(x, 5);
- if (logBase5 == double.MinValue) return double.MinValue; // Проверка на несуществующие логарифмы
- double part1 = ((logBase5 * logBase5 * logBase5) * LogBase(x, 10) + LogBase(x, 3)) / Math.Log(x);
- double part2 = Math.Log(x) * logBase5;
- return part1 + part2;
- }
- // Проверка совместимости системы
- public static bool SolveSystem(double x, out double leftResult, out double rightResult)
- {
- leftResult = double.MinValue;
- rightResult = double.MinValue;
- if (x == 0)
- {
- Console.WriteLine($"Котангенса от {x} не существует");
- return false;
- }
- if (x == 1)
- {
- Console.WriteLine($"Логарифм от {x} равен 0");
- return false;
- }
- if (Plug1() <= 0)
- {
- leftResult = SolveLeft(x);
- return leftResult != double.MinValue; // Только левое уравнение имеет смысл
- }
- else if (Plug2() > 0)
- {
- rightResult = SolveRight(x);
- return rightResult != double.MinValue; // Только правое уравнение имеет смысл
- }
- return false; // В случае других ошибок
- }
- }
- }
|