示例#1
0
        public string RetornarTabela()
        {
            string txtresultvalores = null;

            for (int L = 0; L < Tabela.GetLength(0); L++)
            {
                if (L > 0)
                {
                    txtresultvalores = txtresultvalores + Environment.NewLine;
                }

                for (int C = 0; C < Tabela.GetLength(1); C++)
                {
                    txtresultvalores = txtresultvalores + (Tabela[L, C].ToString("n2") + "     ");
                }
            }

            return(txtresultvalores);
        }
示例#2
0
        public string RetornarMatRestricoes()
        {
            string txtresultvalores = null;


            for (int L = 0; L < ValorVariaveis.GetLength(0); L++)
            {
                if (L > 0)
                {
                    txtresultvalores = txtresultvalores + Environment.NewLine;
                }

                for (int C = 0; C < ValorVariaveis.GetLength(1); C++)
                {
                    txtresultvalores = txtresultvalores + " " + (ValorVariaveis[L, C] + "   ");
                }
            }

            return(txtresultvalores);
        }
示例#3
0
        public ParametroFase1 Resultado(float[,] Tabela, string[,] ValorVariaveis, bool EstadoAtipico)
        {
            if (EstadoAtipico == true) //Se nos procedimentos de analises foi encontrado algo átipico na Tabela Simplex demontrar a tabela sem resultados;
            {
                //txtfase.Text = "DEMONSTRAÇÃO TABELA";
                //txtresult.Text = "Estado atípico ocorrido !!!";
                txtresultvalores = new ParametroFase1();
                for (int L = 0; L < Tabela.GetLength(0); L++)
                {
                    if (L > 0)
                    {
                        txtresultvalores.resultvalores += Environment.NewLine;
                    }

                    for (int C = 0; C < Tabela.GetLength(1); C++)
                    {
                        txtresultvalores.resultvalores += (Math.Round(Tabela[L, C], 2) + "     ");
                    }
                }
            }
            else
            {
                //txtfase.Text = "DEMONSTRAÇÃO TABELA";
                txtresultvalores = new ParametroFase1();
                for (int L = 0; L < Tabela.GetLength(0); L++)
                {
                    if (L > 0)
                    {
                        txtresultvalores.resultvalores += Environment.NewLine;
                    }
                    if (L > 0)
                    {
                        for (int C = 0; C < Tabela.GetLength(1); C++)
                        {
                            txtresultvalores.resultvalores += Environment.NewLine + (Math.Round(Tabela[L, C], 2) + "      ");
                        }
                    }
                }

                txtresultvalores = new ParametroFase1();
                if ((Tabela[0, 0]) < 0)
                {
                    txtresultvalores.result += "RESPOSTAS:  Z = " + -(Math.Round(Tabela[0, 0], 2)) + ";";
                }
                else
                {
                    txtresultvalores.result += "RESPOSTAS:  Z = " + (Math.Round(Tabela[0, 0], 2)) + ";";
                }

                for (int L = 0; L < ValorVariaveis.GetLength(0); L++)
                {
                    if (L > 0)
                    {
                        txtresultvalores.resultvalores += Environment.NewLine;
                    }

                    for (int C = 0; C < ValorVariaveis.GetLength(1); C++)
                    {
                        if (L == 0)
                        {
                            txtresultvalores.resultvalores += (ValorVariaveis[L, C] + "   |   ");
                        }
                        if (L == 1)
                        {
                            if (float.Parse(ValorVariaveis[L, C]) < 0)
                            {
                                txtresultvalores.resultvalores += 0 + "      ";
                            }
                            else
                            {
                                txtresultvalores.resultvalores += ValorVariaveis[L, C] + "      ";
                            }
                        }
                    }
                }
            }

            return(txtresultvalores);
        }
示例#4
0
        public void AlgoritmoTroca(float[,] Tabela, float[] VetLinhaPermitida, float[] VetColunaPermitida, string[,] ValorVariaveis, float EP, int ControleLinha, int ControleColuna)
        {
            float[] SubCelulasColuna = new float[VetColunaPermitida.Length];            //Vetor que contem os valores da sub-células Inferiores da Coluna Permitida;
            float[,] NovaTabela = new float[Tabela.GetLength(0), Tabela.GetLength(1)];  //Matriz que receberá os novos valores advindos dos cálculos da Tabela Simplex recebida;
            for (int L = 0; L < Tabela.GetLength(0); L++)                               //FOR que preenche o vetor SubCelulaColuna e parte da Nova Tabela Simplex;
            {
                for (int C = 0; C < Tabela.GetLength(1); C++)                           //Preenchimento da Linha Permitida e Coluna Permitida da Nova Tabela SImplex;
                {
                    if ((Tabela[L, C] == VetLinhaPermitida[C]) && (ControleLinha == L)) //Multiplica-se toda a linha pelo EP Inverso;
                    {
                        NovaTabela[L, C] = VetLinhaPermitida[C] * (1 / EP);
                    }
                    if ((Tabela[L, C] == VetColunaPermitida[L]) && (ControleColuna == C))       //Multiplica-se toda a coluna pelo - (EP Inverso)
                    {
                        NovaTabela[L, C]    = VetColunaPermitida[L] * -(1 / EP);
                        SubCelulasColuna[L] = NovaTabela[L, C];
                    }
                    if ((Tabela[L, C] == EP) && (ControleLinha == L) && (ControleColuna == C))  //Calcula-se o inverso do Elemento Permitido;
                    {
                        NovaTabela[L, C]    = 1 / EP;
                        SubCelulasColuna[L] = NovaTabela[L, C];
                    }
                }
            }
            for (int L = 0; L < Tabela.GetLength(0); L++)      //FOR que termina de preencher a Nova Tabela Simplex utilizando dos valores da SubCelula;
            {
                for (int C = 0; C < Tabela.GetLength(1); C++)
                {
                    if ((C != ControleColuna) && (L != ControleLinha))                 //IF que verifica se célula da Nova Tabela ja foi preenchida anteriormente, se estiver vazia então executa os procedimento;
                    {
                        NovaTabela[L, C] = SubCelulasColuna[L] * VetLinhaPermitida[C]; //Multiplica-se a (SCS) marcada em sua respectiva coluna com a (SCI) marcada de sua respectiva linha;
                        NovaTabela[L, C] = Tabela[L, C] + NovaTabela[L, C];            //Somam-se as (SCI) com as (SCS) das demais células restantes da tabela original;
                    }
                }
            }
            for (int L = 0; L < Tabela.GetLength(0); L++)      //FOR repassa novos valores obtidos para a Tabela Simplex original;
            {
                for (int C = 0; C < Tabela.GetLength(1); C++)
                {
                    Tabela[L, C] = NovaTabela[L, C];
                }
            }

            //Após executar procedimento de troca necessário trocar de posição a variável não básica com a variável básica, ambas definidas como “Permitidas na tabela anterior;
            int    aux      = 1;    //Variavel auxiliar para verificar os valores das variaveis básicas na tabela simplex;
            string variavel = "";   //Variavel auxiliar que receberá a variavel da Coluna Permitida que será trocada pela variavel da Linha Permitida;

            for (int cont = 0; cont < ValorVariaveis.GetLength(1); cont++)
            {
                if (cont < (Tabela.GetLength(1) - 1))
                {
                    ValorVariaveis[1, cont] = string.Concat(Math.Round(Tabela[0, cont + 1], 2));   //Adicionando na linha2 os valores respectivos as variaveis não-básicas;
                }
                else

                {
                    ValorVariaveis[1, cont] = string.Concat(Math.Round(Tabela[aux, 0], 2));        //Adicionando na linha2 os valores respectivos as variaveis básicas;
                    aux++;
                }
            }
            if (string.Concat(Tabela[0, ControleColuna]) == ValorVariaveis[1, ControleColuna - 1]) //Verifica valor da variavel não basica que será trocada;
            {
                aux      = ControleColuna - 1;                                                     //'-1' para eliminar a coluna "Membro Livre", aux recebe o valor da coluna que contem a variavel que será trocada;
                variavel = ValorVariaveis[0, aux];                                                 //Variavel auxiliar recebe a variavel não basica que será trocada;
            }
            for (int cont = 0; cont < ValorVariaveis.GetLength(1); cont++)                         //Verifica valor da variavel basica que será trocada;
            {
                if ((string.Concat(Tabela[ControleLinha, 0]) == ValorVariaveis[1, cont]) && (cont >= (Tabela.GetLength(1) - 1)))
                {
                    ValorVariaveis[0, aux] = ValorVariaveis[0, cont];  //Troca da variavel nao basica pela basica;
                    aux = cont;                                        //aux recebe o valor da coluna que contem a variavel que será trocada;
                }
            }
            ValorVariaveis[0, aux] = variavel;   //Troca da variavel basica pela não basica;

            //txtresult.Text = "Impressão dos novos valores das variáveis!";
            txtresultvalores = new ParametroFase1();
            for (int L = 0; L < ValorVariaveis.GetLength(0); L++)
            {
                if (L > 0)
                {
                    txtresultvalores.resultvalores += Environment.NewLine;
                }

                for (int C = 0; C < ValorVariaveis.GetLength(1); C++)
                {
                    txtresultvalores.resultvalores += (ValorVariaveis[L, C] + "     ");
                }
            }
            //MessageBox.Show("Pressione ok para para continuar  !!!", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }