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); } }
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); }