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)); }
private void Listar(DataGridView dgv, ListaCruzada matriz) { dgv.Rows.Clear(); dgv.Columns.Clear(); for (int i = 0; i < matriz.QtasColunas; i++) { dgv.Columns.Add(i.ToString(), i.ToString()); } string[] linha = new string[matriz.QtasColunas]; for (int i = 0; i < matriz.QtasLinhas; i++) { for (int w = 0; w < matriz.QtasColunas; w++) { linha[w] = matriz.ValorDe(w, i).ToString(); } dgv.Rows.Add(linha); } }
/// <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); }
/// <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); }