Example #1
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);
            }
        }
Example #2
0
        private void ExibirInformacoes(ListaCruzada qualMatriz, int l, int c)
        {
            colunaUpDown.Text = c + "";                        //Configura o colunaUpDown para permitir que o usuário escolha apenas colunas que existam na matriz determinada, evitando que algum método receba como parâmetro algum índice fora dos limites
            linhaUpDown.Text  = l + "";                        //Configura o colunaUpDown para permitir que o usuário escolha apenas linhas que existam na matriz determinada, evitando que algum método receba como parâmetro algum índice fora dos limites
            numeroUpDown.Text = qualMatriz.ValorDe(l, c) + ""; //Recebe o valor de determinada célula, mesmo que esta não exista(neste caso, o método retornará zero), e o exibe para o usuário

            if (qualMatriz == matrizA)                         //Seleciona automaticamente o rgbMA caso seja a matrizA que esteja sendo manipulada
            {
                rgbMA.Enabled = true;
                rgbMA.Checked = true;
            }
            else                        //Seleciona automaticamente o rgbMA caso seja a matrizA que esteja sendo manipulada
            {
                rgbMB.Enabled = true;
                rgbMB.Checked = true;
            }
        }
Example #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
     }
 }
Example #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
     }
 }