Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带分数的C#RPN计算器_C#_Fractions_Rpn - Fatal编程技术网

带分数的C#RPN计算器

带分数的C#RPN计算器,c#,fractions,rpn,C#,Fractions,Rpn,我在这里的第一篇文章。 我编写了一个RPN计算器,它工作得很好。我用WinForms用C#写的 现在我必须添加分数支持。所以分数的输入看起来像(3,4)(5,8)+结果应该是(11,8) 我不知道我应该选择哪种方法来添加这些分数。我应该阅读它、拆分它并将其存储在堆栈上吗?我可以将它直接保存为堆栈上的对象吗 这是我的密码: using System; using System.Collections.Generic; using System.Windows.Forms; public part

我在这里的第一篇文章。 我编写了一个RPN计算器,它工作得很好。我用WinForms用C#写的

现在我必须添加分数支持。所以分数的输入看起来像(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)
    {

    }
}
使用系统;
使用System.Collections.Generic;
使用System.Windows.Forms;
公共部分类Form1:Form
{
//变异素
Stack stack1=新堆栈();
双zahl1=0.0;
双zahl2=0.0;
公共表格1()
{
初始化组件();
}
//所有按钮事件
#区域按钮
私有无效按钮输入\单击(对象发送者,事件参数e)
{
{
尝试
{
如果(textbox1.Text!=“”)
stack1.Push(double.Parse(textbox1.Text));
}
捕获(格式化异常)
{
MessageBox.Show(“Ungültige Eingabe.Nur Zahlen eingeben”,“Eingabeehler”);
}
textbox1.Clear();
}
}
私有无效按钮删除\单击(对象发送者,事件参数e)
{
stack1.Clear();
textbox1.Clear();
}
私有无效按钮单击(对象发送者,事件参数e)
{
berechnung(1);
}
私有无效按钮单击(对象发送者,事件参数e)
{
berechnung(2);
}
私有无效按钮结果单击(对象发送者,事件参数e)
{
berechnung(3);
}
私有无效按钮取消单击(对象发送者,事件参数e)
{
berechnung(4);
}
私有无效文本框1\u输入(对象发送方,事件参数e)
{
textbox1.Clear();
}
#端区
//祖尔-贝雷什农方法
公共空间(内部北)
{
尝试
{
如果(textbox1.Text!=“”)
stack1.Push(double.Parse(textbox1.Text));
}
捕获(格式化异常)
{
MessageBox.Show(“Ungültige Eingabe.Nur Zahlen eingeben”,“Eingabeehler”);
}
如果(堆栈1.Count>1)
{
zahl2=stack1.Pop();
zahl1=stack1.Pop();
开关(n)
{
案例1:stack1.推(zahl1+zahl2);断开;
案例2:stack1.Push(zahl1-zahl2);中断;
案例3:stack1.推(zahl1*zahl2);断开;
案例4:stack1.Push(zahl1/zahl2);中断;
}
textbox1.Text=stack1.Peek().ToString();
}
其他的
{
MessageBox.Show(“尼希特·莫格利奇行动。\n施塔克·祖韦尼格·埃姆坦特”,“艾因加贝勒”);
}
}
私有void infoToolStripMenuItem\u单击(对象发送方,事件参数e)
{
}
}

您需要为堆栈元素切换到不同类型的对象,因为
double
只能存储一个浮点值。您可能需要创建一些新类,一个用于保存浮点值,一个用于分数,并检测是否只涉及分数,因为这样您就可以直接对分数值进行数学运算,而无需进行近似运算。感谢您的快速响应。所以我应该使用2堆栈。一个堆栈作为堆栈,一个堆栈作为堆栈?我想我无论如何都要做一个新的类分数来简化分数