Zum Inhalt springen

kross

Mitglieder
  • Gesamte Inhalte

    7
  • Benutzer seit

  • Letzter Besuch

Reputationsaktivitäten

  1. Positiv
    kross hat eine Reaktion von Max01 erhalten in Punkt vor Strichrechnung   
    so sollte es relativ einfach gehen
    -eingabe (werte und operanten merken)
    -anschließend aus dieser liste die operationen von der höchsten zur kleinsten priorität abarbeiten
    -bleibt nurnoch ein wert und keine operation mehr hat man das ergebnis

    zu tun
    erstmal ein neues leeres form erstellen und 6 buttons adden und code einfügen
    das beispielprojekt hat nur addition, multiplikation und potenzieren und als wert nur die zahl 3
    -erweitern um ziffern {0..9}/3
    -ziffern untereinander zu zahlen zusammenfassen (sind 2 werte an stelle i in der liste ohne rechenoperation benachbart wert=wert*10+wert[i+1], lösche wert[i+1])
    -erweitern um subtraktion/division
    -fehlerbehandlung (doppelte rechenoptoren abfangen etc)


    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace WindowsApplication5 { public partial class Form1 : Form { private List<Teil> m_teile; public enum operation { plus, minus, mal, durch, hoch, } public Form1() { InitializeComponent(); button1.Text = "3"; button2.Text = "+"; button3.Text = "*"; button4.Text = "^"; button5.Text = "Neu"; button6.Text = "="; m_teile = new List<Teil>(); } private void button1_Click(object sender, EventArgs e) { m_teile.Add(new Teil(3)); } private void button2_Click(object sender, EventArgs e) { m_teile.Add(new Teil(Operation.plus)); } private void button3_Click(object sender, EventArgs e) { m_teile.Add(new Teil(Operation.mal)); } private void button4_Click(object sender, EventArgs e) { m_teile.Add(new Teil(Operation.hoch)); } private void button5_Click(object sender, EventArgs e) { m_teile = new List<Teil>(); } private void button6_Click(object sender, EventArgs e) { //schrittweise aufloesen //erster schritt die ziffern zu zahlen zusammenfassen //!!!!todo im beispiel nur mit einstelligen ziffern gearbeitet //zweiter schritt potenzen ausrechnen //rechten und linken operand + rechenzeichen aus der liste löschen //ergebnis an deren stelle einfügen for (int i = 0; i < m_teile.Count; i++) { if (m_teile[i].Art == Teil.ArtEnum.RechenOperation && m_teile[i].Operation == Operation.hoch) { int erg = (int)Math.Pow(m_teile[i - 1].Wert, m_teile[i + 1].Wert); m_teile[i - 1].Wert = erg; //wert vor dem operand wird überschrieben spart herrauslöschen und anschließendes neu einfügen m_teile.RemoveRange(i, 2); i--;//i um eins verringern da durch das löschen der aktuellen position dort nun ein noch nicht verarbeiteter wert steht } } //dritter schritt multiplizieren (todo dividieren) for (int i = 0; i < m_teile.Count; i++) { if (m_teile[i].Art == Teil.ArtEnum.RechenOperation && m_teile[i].Operation == Operation.mal) { int erg = m_teile[i - 1].Wert * m_teile[i + 1].Wert; m_teile[i - 1].Wert = erg; //wert vor dem operand wird überschrieben spart herrauslöschen und anschließendes neu einfügen m_teile.RemoveRange(i, 2); i--;//i um eins verringern da durch das löschen der aktuellen position dort nun ein noch nicht verarbeiteter wert steht } } //letzter schritt addieren (todo subtrahieren) for (int i = 0; i < m_teile.Count; i++) { if (m_teile[i].Art == Teil.ArtEnum.RechenOperation && m_teile[i].Operation == Operation.plus) { int erg = m_teile[i - 1].Wert + m_teile[i + 1].Wert; m_teile[i - 1].Wert = erg; //wert vor dem operand wird überschrieben spart herrauslöschen und anschließendes neu einfügen m_teile.RemoveRange(i, 2); i--;//i um eins verringern da durch das löschen der aktuellen position dort nun ein noch nicht verarbeiteter wert steht } } //m_teile sollte nurnoch 1 eintrag haben dieser ist das ergebnis MessageBox.Show(m_teile[0].Wert.ToString()); } } public enum Operation { plus, minus, mal, durch, hoch, } public class Teil { private ArtEnum m_art; public ArtEnum Art { get { return m_art; } } private Operation m_operation; public Operation Operation { get { return m_operation; } } private int m_wert; public int Wert { get { return m_wert; } set { m_wert = value; } } public Teil(Operation _op) { m_art = ArtEnum.RechenOperation; m_operation = _op; } public Teil(int _wert) { m_wert = _wert; m_art = ArtEnum.Wert; } public enum ArtEnum { RechenOperation, Wert } } }

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...