private void btnSomarColuna_Click(object sender, EventArgs e) //Método que soma todos os itens de uma coluna com o número escolhido pelo usuário no valorUpDown, na coluna indicada no cbxColuna { if (cbxColuna.SelectedItem == null) //Verifica se o usuário escolheu uma coluna para manipular, caso não tenha esoclhido, não é possível realizar a operação, portanto lançamos uma exceção avisando o usuário do erro { MessageBox.Show("Selecione uma coluna", "Erro ao somar", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else if (rgbMA.Checked) //Verifica se o usuário quer manipular a matriz A { matrizA.SomarColuna(int.Parse(valorUpDown.Value.ToString()), Convert.ToInt32(cbxColuna.SelectedItem)); //Chama o método da ListaCruzada com os parâmetros do número a somar e a coluna escolhidos pelo usuário matrizA.Listar(dgvA); //Lista a matriz A após ser alterada } else //Verifica se o usuário quer manipular a matriz B { matrizB.SomarColuna(int.Parse(valorUpDown.Value.ToString()), Convert.ToInt32(cbxColuna.SelectedItem)); //Chama o método da ListaCruzada com os parâmetros do número a somar e a coluna escolhidos pelo usuário matrizB.Listar(dgvB); //Lista a matriz B após ser alterada } }
private void LerMatriz(ref ListaCruzada lista, DataGridView dgv, RadioButton qualRb) //Método para ler um arquivo e construir uma matriz a partir de seus dados { try { if (dlgAbrir.ShowDialog() == DialogResult.OK) //Verifica se o 'openFileDialog' foi aberto corretamente { txtErro.Items.Clear(); var arquivo = new StreamReader(dlgAbrir.FileName); //Seleção do arquivo pelo usuário string numeroLinhaColuna = arquivo.ReadLine(); //variável do tipo string que guarda a linha inteira lida lista = new ListaCruzada(int.Parse(numeroLinhaColuna.Substring(0, 5)), int.Parse(numeroLinhaColuna.Substring(5, 5))); //Instanciação da matriz passada como parâmetro com os valores lidos da primeira linha do arquivo, que guarda o número de linhas e de colunas que a matriz deve ter AjustarDataGridView(dgv, lista.NumLinhas, lista.NumColunas); //Chama o método que adapta o DataGridView escolhido ao tamanho da matriz lida IniciarControles(true); //Habilitar os botões que agora(após a instanciação da matriz) podem ser selecionados bool teveErro = false; //Variável do tipo boolean que é usada para informar o programa e o usuário na ocorrência de algum erro while (!arquivo.EndOfStream) //Loop que garante que todas as linhas do arquivo serão lidas { Celula lida = Celula.LerRegistro(arquivo); //Uma nova célula é criada a partir dos dados lidos, por meio do método da classe Celula LerRegistro, que se encarrega de criar uma nova celula ao ler uma linha por vez if (lida.Coluna < 0 || lida.Linha < 0 || lida.Linha >= lista.NumLinhas || lida.Coluna >= lista.NumColunas) //Caso os índices de posicionamento da célula seja inválido, a celula não será criada e o erro aparecerá para o usuário { teveErro = true; txtErro.Items.Add($"({lida.Linha}, {lida.Coluna})"); continue; } lista.InserirElemento(lida.Linha, lida.Coluna, lida.Valor); //Caso não haja erro, a célula será criada e o loop continuará } if (teveErro) //Em caso de erro, uma mensagem será apresentada ao usuário { lblErro.Text = "Células com index não suportados pela matriz: "; //Mensagem de erro específica à invalidação do posicionamento da célula lida } arquivo.Close(); //Depois do fim da leitura do arquivo, o arquivo é fechado lista.Listar(dgv); //Listagem da matriz lida no dgv escolhido ExibirInformacoes(lista, 0, 0); if (lista == matrizA) { dgvB.ClearSelection(); } else { dgvA.ClearSelection(); } qualRb.Checked = true; } } catch (Exception e) { MessageBox.Show("Selecione um arquivo texto correto", "Erro na leitura da matriz", MessageBoxButtons.OK, MessageBoxIcon.Information); } }
private void btnSomarMatrizes_Click(object sender, EventArgs e) //Método chamado se o usuário deseja somar as duas matizes a ele apresentadas { if (matrizA == null || matrizB == null) //Caso o usuário não tenha escolhido duas matrizes, não será possível soma-las, então uma mensagem de erro é mostrada ao usuário { MessageBox.Show("Para somar matrizes é necessário duas desta", "Erro ao somar", MessageBoxButtons.OK, MessageBoxIcon.Information); } else if (matrizA.EstaDesalocada || matrizB.EstaDesalocada) //Verifica se as duas matrizes estão bem organizadas(com os ponteiros funcionando corretamente) { MessageBox.Show("Matriz desalocada", "Erro ao multiplicar matrizes", MessageBoxButtons.OK, MessageBoxIcon.Information); } else if (matrizA.NumLinhas != matrizB.NumLinhas || matrizA.NumColunas != matrizB.NumColunas) //Se as duas matrizes { MessageBox.Show("Para somar matrizes, ambas precisam ter a mesma dimensão", "Erro ao somar", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { AjustarDataGridView(dgvResultado, dgvA.RowCount, dgvA.ColumnCount); //Ajustamos o tamanho do dgvResultado ao tamanho da matriz que nele será exibida após a soma ListaCruzada soma = matrizA.SomarMatrizes(matrizB); //Chama o método da classe ListaCruzada e atribui seu retorno à nova lista criada, soma soma.Listar(dgvResultado); //Após a soma feita, listamos o resultado para o usuário } }
private void btnMultiplicarMatrizes_Click(object sender, EventArgs e) //Método responsável por multiplicar as linhas e colunas das duas matrizes sendo exibidas { if (matrizA == null || matrizB == null) //Nenhuma multiplicação entre matrizes deve ser feita se o usuário não tiver selecionado duas matrizes { MessageBox.Show("Para multiplicar matrizes é necessário duas desta", "Erro ao multiplicar", MessageBoxButtons.OK, MessageBoxIcon.Information); } else if (matrizA.EstaDesalocada || matrizB.EstaDesalocada) { MessageBox.Show("Matriz desalocada", "Erro ao multiplicar matrizes", MessageBoxButtons.OK, MessageBoxIcon.Information); } else if (matrizA.NumLinhas != matrizB.NumColunas || matrizA.NumColunas != matrizB.NumLinhas) //Verifica se o número de linhas e colunas das matrizes é igual, em caso negativo, nenhuma multiplicação deve ser feita { MessageBox.Show("O número de linhas de uma precisa ser igual ao número de colunas da outra matriz", "Erro ao multiplicar matrizes", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { AjustarDataGridView(dgvResultado, dgvA.RowCount, dgvB.ColumnCount); //Ajusta o tamanho do dgvResultado de acordo com o tamanho das matrizes(que devem ser iguais) ListaCruzada result = matrizA.MultiplicarMatrizes(matrizB); //Atribuição da matriz resultante à uma nova matiz, que será exibida no dgvResultado result.Listar(dgvResultado); //Exibe o resultado no dgvResultado } }