Ejemplo n.º 1
0
 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
     }
 }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
 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
     }
 }
Ejemplo n.º 4
0
 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
     }
 }