コード例 #1
0
        private void PrintToFile()
        {
            //Print DFA in File-------------------------------------------------------------------------------------------------
            PrintDFA = new string[(NewVertexx * (Alphabet.Length - 1)) + 4];
            int index2 = 0;

            PrintDFA[index2] = "∑ = {";
            for (int i = 0; i < Alphabet.Length - 2; i++)
            {
                PrintDFA[index2] += Alphabet[i] + ", ";
            }
            PrintDFA[index2] += Alphabet[Alphabet.Length - 2];
            PrintDFA[index2] += "}";

            index2++;
            PrintDFA[index2] = "Vertex Name = {q0";
            for (int i = 1; i < NewVertexx; i++)
            {
                PrintDFA[index2] += ", q" + i.ToString();
            }
            PrintDFA[index2] += "}";

            index2++;
            PrintDFA[index2] = "Final Vertex Name = {";
            int Counter = FinalVertexDFA.Count;

            foreach (int FinalV in FinalVertexDFA)
            {
                if (Counter == 1) //Last Home of FinalVertexDFA
                {
                    PrintDFA[index2] += "q" + FinalV.ToString() + "}";
                    break; // foreach Self be breaken and not necessary this "break;"
                }
                else
                {
                    PrintDFA[index2] += "q" + FinalV.ToString() + " , ";
                    Counter--;
                }
            }
            // Print Vector Between Two Vertex
            index2++;
            PrintDFA[index2] = "All Vector : ";
            index2++;
            for (int i = 0; i < NewVertexx; i++)
            {
                for (int j = 0; j < Alphabet.Length - 1; j++)
                {
                    PrintDFA[index2] = "                    q" + i.ToString() + "  Arrow(" + Alphabet[j] + ")  q" + (dfaMatris[i, j]).ToString();
                    index2++;
                }
            }
        }
コード例 #2
0
        private void SolveButton_Click(object sender, EventArgs e)
        {
            const double PRECISION = 0.01;

            double InitialX, FinalX, InitialY, FinalY, InitialV, FinalV, A, T;

            InitialX = FinalX = InitialY = FinalY = InitialV = FinalV = A = T = 0;

            bool hasInitialX, hasFinalX, hasInitialY, hasFinalY, hasInitialV, hasFinalV, hasA, hasT;

            hasInitialX = hasFinalX = hasInitialY = hasFinalY = hasInitialV = hasFinalV = hasA = hasT = false;

            //get text from text boxes
            if (HasText(InitialXTextBox))
            {
                hasInitialX = true;
                InitialX    = double.Parse(InitialXTextBox.Text, CultureInfo.InvariantCulture);
            }
            if (HasText(FinalXTextBox))
            {
                hasFinalX = true;
                FinalX    = double.Parse(FinalXTextBox.Text, CultureInfo.InvariantCulture);
            }
            if (HasText(InitialYTextBox))
            {
                hasInitialY = true;
                InitialY    = double.Parse(InitialYTextBox.Text, CultureInfo.InvariantCulture);
            }
            if (HasText(FinalYTextBox))
            {
                hasFinalY = true;
                FinalY    = double.Parse(FinalYTextBox.Text, CultureInfo.InvariantCulture);
            }
            if (HasText(InitialVTextBox))
            {
                hasInitialV = true;
                InitialV    = double.Parse(InitialVTextBox.Text, CultureInfo.InvariantCulture);
            }
            if (HasText(FinalVTextBox))
            {
                hasFinalV = true;
                FinalV    = double.Parse(FinalVTextBox.Text, CultureInfo.InvariantCulture);
            }
            if (HasText(ATextBox))
            {
                hasA = true;
                A    = double.Parse(ATextBox.Text, CultureInfo.InvariantCulture);
            }
            if (HasText(TTextBox))
            {
                hasT = true;
                T    = double.Parse(TTextBox.Text, CultureInfo.InvariantCulture);
            }

            bool exhausted       = false;
            bool solvedSomething = false;

            while (!exhausted)
            {
                exhausted       = false;
                solvedSomething = false;

                // if initial x, final x, and velocity exist
                // distance, time, velocity

                if (!hasFinalX && Convert.ToInt32(hasT) == 1 && (Convert.ToInt32(hasInitialV) + Convert.ToInt32(hasFinalV)) == 1)
                {
                    if (!hasInitialX)
                    {
                        InitialX             = 0;
                        InitialXTextBox.Text = InitialX.ToString();
                    }

                    if (hasInitialV)
                    {
                        FinalX             = InitialV * T;
                        FinalXTextBox.Text = FinalX.ToString();

                        FinalV             = InitialV;
                        FinalVTextBox.Text = FinalV.ToString();

                        hasFinalV = true;
                    }
                    else if (hasFinalV)
                    {
                        FinalX             = FinalV * T;
                        FinalXTextBox.Text = FinalX.ToString();

                        InitialV             = FinalV;
                        InitialVTextBox.Text = InitialV.ToString();

                        hasInitialV = true;
                    }

                    hasInitialX     = true;
                    hasFinalX       = true;
                    solvedSomething = true;
                }

                // if 3 of 4 variables exist for equation 1
                if (Convert.ToInt32(hasFinalV) + Convert.ToInt32(hasInitialV) + Convert.ToInt32(hasA) + Convert.ToInt32(hasT) == 3)
                {
                    if (!hasFinalV) // solve for final velocity
                    {
                        //calculate variable
                        FinalV = InitialV + A * T;

                        //set text box to answer
                        FinalVTextBox.Text = FinalV.ToString();
                        hasFinalV          = true;
                        solvedSomething    = true;
                    }
                    else if (!hasInitialV) // solve for intial velocity
                    {
                        //calculate variable
                        InitialV = FinalV - A * T;

                        //set text box to answer
                        InitialVTextBox.Text = InitialV.ToString();
                        hasInitialV          = true;
                        solvedSomething      = true;
                    }
                    else if (!hasA) // solve for acceleration
                    {
                        if (T == 0)
                        {
                            MessageBox.Show("Cannot solve for acceleration: time is 0.");
                        }
                        else
                        {
                            //calculate variable
                            A = (FinalV - InitialV) / T;

                            //set text box to answer
                            ATextBox.Text   = A.ToString();
                            hasA            = true;
                            solvedSomething = true;
                        }
                    }
                    else if (!hasT) // solve for time
                    {
                        if (A == 0)
                        {
                            MessageBox.Show("Cannot solve for time: acceleration is 0.");
                        }
                        else
                        {
                            //calculate variable
                            T = (FinalV - InitialV) / A;

                            //set text box to answer
                            TTextBox.Text   = T.ToString();
                            hasT            = true;
                            solvedSomething = true;
                        }
                    }
                }
                else if (Convert.ToInt32(hasFinalV) + Convert.ToInt32(hasInitialV) + Convert.ToInt32(hasA) + Convert.ToInt32(hasT) == 4)
                {
                    if (Math.Abs(FinalV - (InitialV + A * T)) > PRECISION)
                    {
                        MessageBox.Show("Values are incorrect.", "Input Validation");
                    }
                }


                // if 4 of 5 variables exist for equation 2
                if (Convert.ToInt32(hasFinalX) + Convert.ToInt32(hasInitialX) + Convert.ToInt32(hasInitialV) + Convert.ToInt32(hasA) + Convert.ToInt32(hasT) == 4)
                {
                    if (!hasFinalX) // solve for final x position
                    {
                        //calculate variable
                        FinalX = InitialX + InitialV * T + 0.5 * A * Math.Pow(T, 2);

                        //set text box to answer
                        FinalXTextBox.Text = FinalX.ToString();
                        hasFinalX          = true;
                        solvedSomething    = true;
                    }
                    else if (!hasInitialX) // solve for initial x position
                    {
                        //calculate variable
                        InitialX = FinalX - (InitialV * T + 0.5 * A * Math.Pow(T, 2));

                        //set text box to answer
                        InitialXTextBox.Text = InitialX.ToString();
                        hasInitialX          = true;
                        solvedSomething      = true;
                    }
                    else if (!hasInitialV) // solve for initial velocity
                    {
                        if (T == 0)
                        {
                            MessageBox.Show("Cannot solve for initial velocity: time is 0.");
                        }
                        else
                        {
                            //calculate variable
                            InitialV = (FinalX - InitialX - 0.5 * A * Math.Pow(T, 2)) / T;

                            //set text box to answer
                            InitialVTextBox.Text = InitialV.ToString();
                            hasInitialV          = true;
                            solvedSomething      = true;
                        }
                    }
                    else if (!hasA) // solve for acceleration
                    {
                        if (T == 0)
                        {
                            MessageBox.Show("Cannot solve for acceleration: time is 0.");
                        }
                        else
                        {
                            A               = 2 * (FinalX - InitialX - InitialV * T) / Math.Pow(T, 2);
                            ATextBox.Text   = A.ToString();
                            hasA            = true;
                            solvedSomething = true;
                        }
                    }
                    else if (!hasT) // solve for time
                    {
                        double a = 0.5 * A;
                        double b = InitialV;
                        double c = InitialX - FinalX;

                        double sqrtpart = (b * b) - (4 * a * c);
                        double answer1  = ((-1) * b + Math.Sqrt(sqrtpart)) / (2 * a);
                        double answer2  = ((-1) * b - Math.Sqrt(sqrtpart)) / (2 * a);

                        if (answer1 >= 0 && answer2 >= 0)
                        {
                            TTextBox.Text   = answer1.ToString() + " and " + answer2.ToString();
                            T               = answer2;
                            hasT            = true;
                            solvedSomething = true;
                        }
                        else if (answer1 < 0 && answer2 >= 0)
                        {
                            TTextBox.Text   = answer2.ToString();
                            T               = answer2;
                            hasT            = true;
                            solvedSomething = true;
                        }
                        else if (answer2 < 0 && answer1 >= 0)
                        {
                            TTextBox.Text   = answer1.ToString();
                            T               = answer1;
                            hasT            = true;
                            solvedSomething = true;
                        }
                        else
                        {
                            TTextBox.Text = "Error: Negative time";
                        }
                    }
                }
                else if (Convert.ToInt32(hasFinalX) + Convert.ToInt32(hasInitialX) + Convert.ToInt32(hasInitialV) + Convert.ToInt32(hasA) + Convert.ToInt32(hasT) == 5)
                {
                    if (Math.Abs(FinalX - (InitialX + InitialV * T + 0.5 * A * Math.Pow(T, 2))) > PRECISION)
                    {
                        MessageBox.Show("Values are incorrect.", "Input Validation");
                    }
                }

                // if 4 of 5 variables exist for equation 3
                if (Convert.ToInt32(hasFinalX) + Convert.ToInt32(hasInitialX) + Convert.ToInt32(hasInitialV) + Convert.ToInt32(hasFinalV) + Convert.ToInt32(hasT) == 4)
                {
                    if (!hasFinalX)
                    {
                        //calculate variable
                        FinalX = InitialX + 0.5 * (InitialV + FinalV) * T;

                        //set text box to answer
                        FinalXTextBox.Text = FinalX.ToString();
                        hasFinalX          = true;
                        solvedSomething    = true;
                    }
                    else if (!hasInitialX)
                    {
                        //calculate variable
                        InitialX = FinalX - 0.5 * (InitialV + FinalV) * T;

                        //set text box to answer
                        InitialXTextBox.Text = InitialX.ToString();
                        hasInitialX          = true;
                        solvedSomething      = true;
                    }
                    else if (!hasInitialV)
                    {
                        if (T == 0)
                        {
                            MessageBox.Show("Cannot solve for initial velocity: time is 0.");
                        }
                        else
                        {
                            //calculate variable
                            InitialV = 2 * (FinalX - InitialX) / T - FinalV;

                            //set text box to answer
                            InitialVTextBox.Text = InitialV.ToString();
                            hasInitialV          = true;
                            solvedSomething      = true;
                        }
                    }
                    else if (!hasFinalV)
                    {
                        if (T == 0)
                        {
                            MessageBox.Show("Cannot solve for final velocity: time is 0.");
                        }
                        else
                        {
                            //calculate variable
                            FinalV = 2 * (FinalX - InitialX) / T - InitialV;

                            //set text box to answer
                            FinalVTextBox.Text = FinalV.ToString();
                            hasFinalV          = true;
                            solvedSomething    = true;
                        }
                    }
                    else if (!hasT)
                    {
                        if (InitialV + FinalV == 0)
                        {
                            MessageBox.Show("Cannot solve for time: the sum of initial velocity and final velocity is 0.");
                        }
                        else
                        {
                            //calculate variable
                            T = 2 * (FinalX - InitialX) / (InitialV + FinalV);

                            //set text box to answer
                            TTextBox.Text   = T.ToString();
                            hasT            = true;
                            solvedSomething = true;
                        }
                    }
                }
                else if (Convert.ToInt32(hasFinalX) + Convert.ToInt32(hasInitialX) + Convert.ToInt32(hasInitialV) + Convert.ToInt32(hasFinalV) + Convert.ToInt32(hasT) == 5)
                {
                    if (Math.Abs(FinalX - (InitialX + 0.5 * (InitialV + FinalV) * T)) > PRECISION)
                    {
                        MessageBox.Show("Values are incorrect.", "Input Validation");
                    }
                }

                // if 4 of 5 variables exist for equation 4
                if (Convert.ToInt32(hasA) + Convert.ToInt32(hasFinalX) + Convert.ToInt32(hasInitialX) + Convert.ToInt32(hasFinalV) + Convert.ToInt32(hasInitialV) == 4)
                {
                    if (!hasA) // solve for acceleration
                    {
                        if (FinalX == InitialX)
                        {
                            MessageBox.Show("Cannot solve for acceleration: final x position and initial x position are the same");
                        }
                        else
                        {
                            //calculate variable
                            A = 0.5 * (Math.Pow(FinalV, 2) - Math.Pow(InitialV, 2)) / (FinalX - InitialX);

                            //set text box to answer
                            ATextBox.Text   = A.ToString();
                            hasA            = true;
                            solvedSomething = true;
                        }
                    }
                    else if (!hasFinalX)
                    {
                        if (A == 0)
                        {
                            MessageBox.Show("Cannot solve for final x position: acceleration is zero.");
                        }
                        else
                        {
                            FinalX = (Math.Pow(FinalV, 2) - Math.Pow(InitialV, 2)) / (2 * A) + InitialX;

                            FinalXTextBox.Text = FinalX.ToString();
                            hasFinalX          = true;
                            solvedSomething    = true;
                        }
                    }
                    else if (!hasInitialX)
                    {
                        if (A == 0)
                        {
                            MessageBox.Show("Cannot solve for initial x position: acceleration is zero.");
                        }
                        else
                        {
                            InitialX = FinalX - (Math.Pow(FinalV, 2) - Math.Pow(InitialV, 2)) / (2 * A);

                            InitialXTextBox.Text = InitialX.ToString();
                            hasInitialX          = true;
                            solvedSomething      = true;
                        }
                    }
                    else if (!hasFinalV)
                    {
                        FinalV = Math.Sqrt(2 * A * (FinalX - InitialX) + Math.Pow(InitialV, 2));

                        FinalVTextBox.Text = FinalV.ToString();
                        hasFinalV          = true;
                        solvedSomething    = true;
                    }
                    else if (!hasInitialV)
                    {
                        InitialV = Math.Sqrt(Math.Pow(FinalV, 2) - (2 * A * (FinalX - InitialX)));

                        InitialVTextBox.Text = InitialV.ToString();
                        hasInitialV          = true;
                        solvedSomething      = true;
                    }
                }
                else if (Convert.ToInt32(hasA) + Convert.ToInt32(hasFinalX) + Convert.ToInt32(hasInitialX) + Convert.ToInt32(hasFinalV) + Convert.ToInt32(hasInitialV) == 5)
                {
                    if (Math.Abs(2 * A * (FinalX - InitialX) - Math.Pow(FinalV, 2) + Math.Pow(InitialV, 2)) > PRECISION)
                    {
                        MessageBox.Show("Values are incorrect.", "Input Validation");
                    }
                }

                if (solvedSomething == false) // if we were unable to solve for any variables
                {
                    exhausted = true;         // we've exhausted all our options
                }
            }

            MessageBox.Show("Finished solving.");
        }