C # RPN калькулятор с дробью - PullRequest
0 голосов
/ 12 мая 2018

мой первый пост здесь.Я запрограммировал калькулятор 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)
    {

    }
}
...