Ejemplo n.º 1
0
        /// <summary>
        /// Gibt die vereinfachten Terme in der Textbox aus
        /// </summary>
        private void EinfacheAusgabe()
        {
            Term[]         vereinfachteTerme;
            QuineMcCluskey qmc;
            var            tempString = "";

            // TODO: Run background TASK with cancellation token
            //var thread = new System.Threading.Thread(Waiting.Wait);
            //thread.Start();

            // Für jede Ausgangsvaribale den Term vereinfachen
            for (var i = 0; i < fTabelle.AnzahlAusgabevariablen; i++)
            {
                // Terme auslesen und vereinfachen
                qmc = new QuineMcCluskey(fTabelle.GibMinterme(i));
                vereinfachteTerme = qmc.Vereinfache();

                // Vereinfachten Term in den temporären String schreiben
                tempString += Properties.Settings.Default.ausChar + (i + 1).ToString() + " = ";
                tempString += vereinfachteTerme[0].ToString();
                for (var j = 1; j < vereinfachteTerme.Length; j++)
                {
                    tempString += "+" + vereinfachteTerme[j].ToString();
                }
                tempString += "\r\n";
            }

            //System.Threading.Thread.Sleep(100);
            //thread.Abort();

            // Text in die Textbox schreiben
            textBoxAusgabe.Text = tempString;
        }
Ejemplo n.º 2
0
        private void SubBerechnePrimimplikanten(out QuineMcCluskey qmc, out List <Term> primimplikanten)
        {
            qmc = new QuineMcCluskey(grade.Count - 1);

            primimplikanten = new List <Term>();

            for (var i = 0; i < grade.Count; i++)
            {
                foreach (var term1 in grade[i])
                {
                    // Bis auf die größten Grad
                    if (i < (grade.Count - 1))
                    {
                        foreach (var term2 in grade[i + 1])
                        {
                            // Alle Elemente des aktuellen Grades mit denen des nächsthöheren Grades vergleichen
                            if (term1.IstAehnlichWie(term2))
                            {
                                // Ähnliche Terme zusammenfassen und als keine Primimplikanten markieren
                                qmc.TermHinzufuegen(term1 + term2);
                                term1.Ist_Primimplikant = false;
                                term2.Ist_Primimplikant = false;
                            }
                        }
                    }
                    // Falls der Term Primimplikant ist
                    if (term1.Ist_Primimplikant)
                    {
                        // den Term der Menge der Primimplikanten hinzufügen
                        primimplikanten.Add(term1);
                    }
                }
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Zeigt ausführlich die Schritte zur Vereinfachung in einem extra Form
        /// </summary>
        private void ErweitereAusgabe()
        {
            var            vereinfachteTerme = new List <Term[]>();
            QuineMcCluskey qmc;
            var            list = new List <List <Term[]> > [fTabelle.AnzahlAusgabevariablen];

            // TODO: Run background TASK with cancellation token
            //var thread = new System.Threading.Thread(Waiting.Wait);
            //thread.Start();

            // Für jede Ausgangsvariable den Term vereinfachen
            for (var i = 0; i < fTabelle.AnzahlAusgabevariablen; i++)
            {
                // Terme auslesen und vereinfachen
                qmc     = new QuineMcCluskey(fTabelle.GibMinterme(i));
                list[i] = new List <List <Term[]> >();
                vereinfachteTerme.Add(qmc.Vereinfache(ref list[i]));
            }

            //System.Threading.Thread.Sleep(100);
            //thread.Abort();

            // Ausgabe im Form
            var errorIndizes = new List <Int32>();
            var form         = new AusgabeForm(list, vereinfachteTerme);
            var just_error   = true;

            while (just_error)
            {
                try
                {
                    form.ShowDialog();
                    just_error = false;
                }
                catch
                {
                    MessageBox.Show("Leider ist die Darstellung zu groß!", "Darstellung nicht möglich", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    errorIndizes.Add(form.SelectedIndex);
                    form = new AusgabeForm(list, vereinfachteTerme, errorIndizes.ToArray(), form.LastIndex);
                }
            }
        }