Пример #1
0
        private void btnProcurar_Click(object sender, EventArgs e)
        {
            //Ele tenta converter os valores dos textboxes,
            //caso os campos não estejam preenchidos corretamente,
            //jogamos uma exceção informando o usuário
            try
            {
                int coluna = int.Parse(txtColuna.Text.Trim());
                int linha  = int.Parse(txtLinha.Text.Trim());

                //Caso os parâmetros estejam corretos,
                //chamamos o método Procurar da classe MatrizEsparsa
                if (coluna != default(int) && linha != default(int) && coluna != 0 && linha != 0)
                {
                    //Verificamos em qual matriz devemos procurar pelo dado desejado
                    if (cbxMatrizInserir.SelectedItem.ToString() == "Matriz 1")
                    {
                        if (matriz1.Procurar(int.Parse(txtColuna.Text.Trim()), int.Parse(txtLinha.Text.Trim())) != default(Celula))
                        {
                            txtValor.Text = matriz1.Procurar(int.Parse(txtColuna.Text.Trim()), int.Parse(txtLinha.Text.Trim())).Valor.ToString();
                        }
                        else
                        {
                            MessageBox.Show("Valor não encontrado!", "Operações com Matriz Esparsa | Erro de procura", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
                    }
                    else
                    {
                        if (matriz2.Procurar(int.Parse(txtColuna.Text.Trim()), int.Parse(txtLinha.Text.Trim())) != default(Celula))
                        {
                            txtValor.Text = matriz2.Procurar(int.Parse(txtColuna.Text.Trim()), int.Parse(txtLinha.Text.Trim())).Valor.ToString();
                        }
                        else
                        {
                            MessageBox.Show("Valor não encontrado!", "Operações com Matriz Esparsa | Erro na procura", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
                    }
                }
                else
                {
                    MessageBox.Show("Coordenadas fora do intervalo!", "Operações com Matriz Esparsa | Erro na procura", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            catch
            {
                MessageBox.Show("Parâmetros não passados corretamente!", "Operações com Matriz Esparsa | Erro na procura", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
Пример #2
0
        public MatrizEsparsa MultiplicarMatrizes(MatrizEsparsa matriz1, MatrizEsparsa matriz2)
        {
            MatrizEsparsa resultado;

            //Verifica se as matrizes estão em condições ideias para efetuar a multiplicação
            if (matriz1.NumeroColunas == matriz2.NumeroLinhas && matriz1 != null && matriz2 != null)
            {
                //Geramos uma terceira matriz para armazenar o resultado da multiplicação
                resultado = new MatrizEsparsa(matriz1.NumeroLinhas, matriz2.NumeroColunas);

                //Variável para armazenar a soma dos elementos multiplicados
                //que serão dispostos em uma célula da matriz resultante
                double valorCelulaAInserir = 0;

                //Índice auxiliar que percorrerá tanto as colunas da matriz1,
                //quanto as linhas da matriz2
                int quantoPercorrer = matriz1.NumeroColunas;

                //Percorre uma linha da matriz resultante
                for (int linha = 1; linha <= resultado.NumeroLinhas; linha++)
                {
                    //Percorre uma linha da matriz resultante
                    for (int coluna = 1; coluna <= resultado.NumeroColunas; coluna++)
                    {
                        //Percorre uma coluna da matriz1 e uma linha da matriz2 em paralelo
                        for (int indice = 1; indice <= quantoPercorrer; indice++)
                        {
                            //Caso o objeto retornado seja nulo, isso significado
                            //que o valor da célula é zero
                            if (matriz1.Procurar(indice, linha) == default(Celula))
                            {
                                if (matriz2.Procurar(coluna, indice) == default(Celula))
                                {
                                    valorCelulaAInserir += 0;
                                }
                                else
                                {
                                    valorCelulaAInserir += 0 * matriz2.Procurar(coluna, indice).Valor;
                                }
                            }
                            else
                            if (matriz2.Procurar(coluna, indice) == default(Celula))
                            {
                                valorCelulaAInserir += matriz1.Procurar(indice, linha).Valor * 0;
                            }
                            else
                            {
                                valorCelulaAInserir += matriz1.Procurar(indice, linha).Valor *matriz2.Procurar(coluna, indice).Valor;
                            }
                        }
                        //Após efetuar a multiplicação, inserimos o a somatória das multiplicações
                        //na linha e coluna atual, caso ele seja diferente de zero, pois não há
                        //necessidade de armazenar o zero
                        if (valorCelulaAInserir != 0)
                        {
                            resultado.Inserir(new Celula(valorCelulaAInserir, linha, coluna, null, null));
                        }
                        //reiniciamos a variável que armazena a somatória das multiplicações
                        valorCelulaAInserir = 0;
                    }
                }
            }
            else
            {
                throw new Exception("O número de colunas da matriz A não corresponde ao número de linhas da matriz B!");
            }

            return(resultado);
        }