Написать программу, позволяющую решить простейшие уравнения или системы уравнений - C#

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

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

Всем доброго дня! Прошу вас о помощи, потому что послезавтра сдавать лабораторные. Надо написать программу позволяющую решить простейшие уравнения или системы уравнений. Исходные данные и результат должны быть представлены в понятном математическом виде. Выводить ошибку, если уравнение не имеет корней или их бесконечное множество. Заранее спасибо за любую помощь.

Решение задачи: «Написать программу, позволяющую решить простейшие уравнения или системы уравнений»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Windows.Forms;
 
namespace Num__
{
    public partial class Form1 : Form
    {
        double c;
        bool status = false;
        bool stat = true;
       
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            string inString = textBox1.Text;
            if (Checked(inString))
            {
                string outStr = GetExp(inString);
                textBox1.Text += " = " + Reshenie(outStr);
                status = true;
            }
        }
 
        static private bool Checked(string str)
        {
            int sum = 0;
 
            foreach (char ch in str)
            {
                if (ch == '(')
                    sum++;
                if (ch == ')')
                    sum--;
            }
 
            if (sum != 0 || IsOperator(str[0]) || IsOperator(str[str.Length - 1]))
            {
                MessageBox.Show("Error!");
                return false;
            }
            return true;
        }
 
        private double Reshenie(string str)
        {
            Stack<double> resh = new Stack<double>();
 
            for (int i = 0; i < str.Length; i++)
            {
                if (Char.IsDigit(str[i]))
                {
                    string a = "";
 
                    while (!IsDelimetr(str[i])) //Пока не разделитель
                    {
                        a += str[i]; //Добаляем
                        i++;
                        if (i == str.Length) break;
                    }
                    resh.Push(double.Parse(a));
                    i--;
                    continue;
                }
                else if (IsOperator(str[i]))
                {
                    double a = resh.Pop();
                    double b = resh.Pop();
                    switch (str[i])
                    {
 
                        case '+': c = b + a; break;
                        case '-': c = b - a; break;
                        case '*': c = b * a; break;
                        case '/': c = b / a; break;
                        case '^': c = double.Parse(Math.Pow(double.Parse(b.ToString()), double.Parse(a.ToString())).ToString()); break;
                    }
                    resh.Push(c);
                }
            }
 
            return resh.Peek();
        }
 
        private string GetExp(string str)
        {
            string outString = "";
            Stack<char> operStack = new Stack<char>();
 
            for (int i = 0; i < str.Length; i++)
            {
                if (str[i] == ' ') //Если пробел
                    continue; //пропускаем
 
                if (Char.IsDigit(str[i])) //Если число
                {
                    while (!IsDelimetr(str[i])) //Пока не разделитель
                    {
                        outString += str[i]; //Добаляем
                        i++;
                        if (i == str.Length) break;
                    }
                    outString += " ";
                    i--;
                    continue;
                }
 
                if (IsOperator(str[i]))
                {
                    if (operStack.Count > 0)
                        if (GetPriority(str[i]) <= GetPriority(operStack.Peek()))
                            outString += operStack.Pop().ToString() + " ";
 
                    operStack.Push(char.Parse(str[i].ToString()));
                }
 
                if (str[i] == '(')
                    operStack.Push(str[i]);
 
                if (str[i] == ')')
                {
                    char s = operStack.Pop();
 
                    while (s != '(')
                    {
                        outString += s.ToString() + ' '; 
                        s = operStack.Pop();
                    }
                }
            }
 
            while (operStack.Count > 0)
                outString += operStack.Pop() + " ";
 
            return outString;
        }
 
        static private bool IsOperator(char с)
        {
            if (("+-/*^".IndexOf(с) != -1))
                return true;
            return false;
        }
 
        private byte GetPriority(char s)
        {
            switch (s)
            {
                case '(':
                    return 0;
                case ')':
                    return 1;
                case '+':
                    return 2;
                case '-':
                    return 3;
                case '*':
                    return 4;
                case '/':
                    return 4;
                case '^':
                    return 5;
                default:
                    return 6;
            }
        }
 
        static private bool IsDelimetr(char c)
        {
            if ((" +-/*^()=".IndexOf(c) != -1))
                return true;
            return false;
        }
 
        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            if (status)
            {
                textBox1.Clear();
                status = false;
            }
        }
    }
}

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


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

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

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