带分数的C#RPN计算器

时间:2018-05-12 18:55:16

标签: c# fractions rpn

我在这里的第一篇文章。 我编写了一个运行良好的RPN计算器。我在C#中用WinForms写了

现在我必须添加分数支持。所以分数的输入看起来像(3,4)(5,8)+结果应该是(11,8)

我不知道应该选择哪种方法来添加这些分数。我应该阅读它,拆分它,并将其存储在堆栈中吗?我可以将它直接保存为堆栈中的对象吗?

这是我的代码:

using System;
using System.Collections.Generic;
using System.Windows.Forms;

public partial class Form1 : Form
{
    //Variablen
    Stack<double> stack1 = new Stack<double>();
    double zahl1 = 0.0;
    double zahl2 = 0.0;


    public Form1()
    {
        InitializeComponent();
    }

    //Alle Button Events
    #region Buttonevents 
    private void buttonEnter_Click(object sender, EventArgs e)
    {

        {
            try
            {
                if (textbox1.Text != "")
                    stack1.Push(double.Parse(textbox1.Text));
            }
            catch (FormatException)
            {
                MessageBox.Show("Ungültige Eingabe. Nur Zahlen eingeben", "Eingabefehler");
            }
            textbox1.Clear();

        }
    }
    private void buttonDelete_Click(object sender, EventArgs e)
    {
        stack1.Clear();
        textbox1.Clear();
    }

    private void buttonAdd_Click(object sender, EventArgs e)
    {
        berechnung(1);
    }

    private void buttonSub_Click(object sender, EventArgs e)
    {
        berechnung(2);
    }

    private void buttonMult_Click(object sender, EventArgs e)
    {
        berechnung(3);
    }

    private void buttonDiv_Click(object sender, EventArgs e)
    {
        berechnung(4);
    }
    private void textbox1_Enter(object sender, EventArgs e)
    {
        textbox1.Clear();
    }

    # endregion


    //Methode zur Berechnung
    public void berechnung(int n)
    {
        try
        {
            if (textbox1.Text != "")
                stack1.Push(double.Parse(textbox1.Text));
        }
        catch (FormatException)
        {
            MessageBox.Show("Ungültige Eingabe. Nur Zahlen eingeben", "Eingabefehler");
        }
        if (stack1.Count > 1)
        {

            zahl2 = stack1.Pop();
            zahl1 = stack1.Pop();
            switch (n)
            {
                case 1: stack1.Push(zahl1 + zahl2); break;
                case 2: stack1.Push(zahl1 - zahl2); break;
                case 3: stack1.Push(zahl1 * zahl2); break;
                case 4: stack1.Push(zahl1 / zahl2); break;
            }
            textbox1.Text = stack1.Peek().ToString();
        }
        else
        {
            MessageBox.Show("Operation nicht möglich.\nStack enthält zu wenig Elemtente", "Eingabefehler");
        }
    }




    private void infoToolStripMenuItem_Click(object sender, EventArgs e)
    {

    }
}

0 个答案:

没有答案