예제 #1
0
        private void dgvMatriz_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            if (matriz1.ValorDe(e.ColumnIndex, e.RowIndex) != 0)
            {
                matriz1.RemoverDePosicao(e.ColumnIndex, e.RowIndex);
            }

            matriz1.Inserir(new Celula(Convert.ToDouble(dgvMatriz.Rows[e.RowIndex].Cells[e.ColumnIndex].Value), e.RowIndex, e.ColumnIndex, null, null));
        }
예제 #2
0
 public void lerArquivo(DataGridView dgvListar, ref ListaCruzada lista)
 {
     if (dlgAbrirArq.ShowDialog() == DialogResult.OK)
     {
         StreamReader fs     = new StreamReader(dlgAbrirArq.FileName);
         string       linha  = fs.ReadLine();
         string[]     partes = linha.Split(' ');
         lista = new ListaCruzada(Convert.ToInt32(partes[0]), Convert.ToInt32(partes[1]));
         while ((linha = fs.ReadLine()) != null)
         {
             partes = linha.Split(' ');
             lista.Inserir(new Celula(Convert.ToDouble(partes[2]), Convert.ToInt32(partes[1]),
                                      Convert.ToInt32(partes[0]), null, null));
         }
         fs.Close();
         Listar(dgvListar, lista);
     }
 }
예제 #3
0
        /// <summary>
        /// Multiplica duas matrizes
        /// </summary>
        /// <param name="outra">Matriz a ser multiplicada ao this</param>
        /// <returns>Matriz da multiplicação das duas matrizes</returns>
        public ListaCruzada multiplicar(ListaCruzada outra)
        {
            if (qtasColunas != outra.qtasLinhas || outra == null)
            {
                throw new Exception("Não pode ocorrer multiplicação");
            }

            ListaCruzada ret = new ListaCruzada(outra.qtasColunas, qtasLinhas);

            for (int lin = 0; lin < qtasLinhas; lin++)
            {
                for (int col = 0; col < outra.qtasColunas; col++)
                {
                    double valor = 0.0;
                    for (int i = 0; i < qtasColunas; i++)
                    {
                        valor += ValorDe(i, lin) * outra.ValorDe(col, i);
                    }

                    ret.Inserir(new Celula(valor, lin, col, null, null));
                }
            }
            return(ret);
        }
예제 #4
0
        /// <summary>
        /// Soma duas matrizes
        /// </summary>
        /// <param name="lista">Lista a ser somada ao this</param>
        /// <returns>Soma das duas matrizes</returns>
        public ListaCruzada somar(ListaCruzada lista)
        {
            if (lista == null)
            {
                throw new NullReferenceException("lista a ser somada está nula");
            }

            ListaCruzada MaiorColuna, MaiorLinha;
            ListaCruzada MenorColuna, MenorLinha;
            int          maiorColuna, maiorLinha = 0;

            if (this.qtasColunas.CompareTo(lista.qtasColunas) > 0)
            {
                maiorColuna = this.qtasColunas;
                MaiorColuna = this;
                MenorColuna = lista;
            }
            else
            {
                maiorColuna = lista.qtasColunas;
                MaiorColuna = lista;
                MenorColuna = this;
            }
            if (this.qtasLinhas.CompareTo(lista.QtasLinhas) > 0)
            {
                maiorLinha = this.qtasLinhas;
                MaiorLinha = this;
                MenorLinha = lista;
            }
            else
            {
                maiorLinha = lista.qtasLinhas;
                MaiorLinha = lista;
                MenorLinha = this;
            }

            ListaCruzada ret = new ListaCruzada(maiorColuna, maiorLinha);

            int colunas, linhas = 0;

            colunas = MenorColuna.qtasColunas;
            linhas  = MenorLinha.qtasLinhas;

            posicionarEmColuna(0);
            atualColuna = atualColuna.Abaixo;
            posicionarEmLinha(0);
            atualLinha = atualLinha.Direita;

            lista.posicionarEmLinha(0);
            lista.atualColuna = lista.atualColuna.Direita;
            lista.posicionarEmColuna(0);
            lista.atualLinha = lista.atualLinha.Abaixo;

            ret.posicionarEmLinha(0);
            ret.atualColuna = lista.atualColuna.Direita;
            ret.posicionarEmColuna(0);
            ret.atualLinha = lista.atualLinha.Abaixo;

            for (int i = 0; i < colunas; i++)
            {
                for (int j = 0; j < linhas; j++)
                {
                    ret.Inserir(new Celula(ValorDe(i, j) + lista.ValorDe(i, j), j, i, null, null));
                }
                for (int k = linhas; k < maiorLinha; k++)
                {
                    ret.Inserir(new Celula(MaiorLinha.ValorDe(i, k), k, i, null, null));
                }
            }

            for (int w = colunas; w < maiorColuna; w++)
            {
                for (int j = 0; j < linhas; j++)
                {
                    ret.Inserir(new Celula(ValorDe(w, j) + lista.ValorDe(w, j), j, w, null, null));
                }
                for (int k = linhas; k < maiorLinha; k++)
                {
                    ret.Inserir(new Celula(MaiorLinha.ValorDe(w, k), k, w, null, null));
                }
            }
            return(ret);
        }