public void LerArquivo() { if (dlgAbrir.ShowDialog() == DialogResult.OK) { StreamReader arquivo = new StreamReader(dlgAbrir.FileName); int linhas = int.Parse(arquivo.ReadLine()); //Lê-se as quantidade de linhas e colunas do arquivo int colunas = int.Parse(arquivo.ReadLine()); ListaLigadaCruzada li = new ListaLigadaCruzada(linhas, colunas); //Cria-se uma nova para não ser necessário //escrever o código duas vezes while (!arquivo.EndOfStream) { string texto = arquivo.ReadLine(); int linha = int.Parse(texto.Substring(1, 2));//Busca de dentro da string os valores necessários para a inclusão int col = int.Parse(texto.Substring(4, 2)); double valor = double.Parse(texto.Substring(7, 5)); li.InserirElemento(valor, linha, col); } if (rbLista1.Checked) //Caso foi solicitado pelo usuário que esse arquivo seja a lista1, exibi-la no primeiro DGV { lista = li; lista.ExibirDataGridview(dgvUm); } else //Caso não, exibi-lo no segundo { lista2 = li; lista2.ExibirDataGridview(dgvDois); } } }
/// <summary> /// Faz a multiplicação de duas matrizes esparsas. /// </summary> /// <param name="outraMatriz"></param> /// <returns>Uma matriz esparsa representando a multiplicação.</returns> public ListaLigadaCruzada MultiplicarMatrizes(ListaLigadaCruzada outraMatriz) { if (this.Colunas != outraMatriz.Linhas) { throw new ArgumentException("Número de colunas de uma matriz deve ser igual o número de linhas da outra"); } ListaLigadaCruzada matrizResultado; matrizResultado = new ListaLigadaCruzada(this.Linhas, outraMatriz.Colunas); double total = 0; for (int i = 0; i < this.Linhas; i++) { for (int j = 0; j < outraMatriz.Colunas; j++) { total = 0; int k; for (k = 0; k < this.Colunas; k++) { total += this.ValorDe(i, k) * outraMatriz.ValorDe(k, j); } if (total != 0) { matrizResultado.InserirElemento(total, i, j); } } } return(matrizResultado); }
private void frmMatrizEsparsa_Load(object sender, EventArgs e) { // linhas e colunas iniciarão com o valor 1 (respectivos NumericUpDown) int linhas = Convert.ToInt32(numLinhas.Value); int colunas = Convert.ToInt32(numColunas.Value); // primeira matriz do programa terá 1 linha e 1 coluna matrizEsparsa = new ListaLigadaCruzada(linhas, colunas); matrizEsparsa.ExibirDataGridView(dgMatrizEsparsa); }
private void CriarMatriz(object sender, EventArgs e) { switch (Convert.ToInt32(((Button)sender).Tag)) { case 0: { if (numColunasMatriz1.Value > 0 && numLinhasMatriz1.Value > 0) { int linhas = Convert.ToInt32(numLinhasMatriz1.Value); int colunas = Convert.ToInt32(numColunasMatriz1.Value); matrizEsparsa1 = new ListaLigadaCruzada(linhas, colunas); matrizEsparsa1.ExibirDataGridView(dgMatrizEsparsa1); // atualiza os campos necessários numLinhaInsercaoMatriz1.Maximum = matrizEsparsa2.Linhas - 1; numColunaInsercaoMatriz1.Maximum = matrizEsparsa2.Colunas - 1; } else { MessageBox.Show("Não é possível criar a matriz com esses valores! " + " Verifique se os valores das linhas e colunas são válidos.", "Atenção!", MessageBoxButtons.OK, MessageBoxIcon.Error); } break; } case 1: { if (numColunasMatriz2.Value > 0 && numLinhasMatriz2.Value > 0) { int linhas = Convert.ToInt32(numLinhasMatriz2.Value); int colunas = Convert.ToInt32(numColunasMatriz2.Value); matrizEsparsa2 = new ListaLigadaCruzada(linhas, colunas); matrizEsparsa2.ExibirDataGridView(dgMatrizEsparsa2); // atualiza os campos necessários numLinhaInsercaoMatriz2.Maximum = matrizEsparsa2.Linhas - 1; numColunaInsercaoMatriz2.Maximum = matrizEsparsa2.Colunas - 1; } else { MessageBox.Show("Não é possível criar a matriz com esses valores! " + " Verifique se os valores das linhas e colunas são válidos.", "Atenção!", MessageBoxButtons.OK, MessageBoxIcon.Error); } break; } } }
/// <summary> /// Lê um arquivo contendo os dados da matriz esparsa (coordenadas e células diferente de 0). /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnLerArquivo_Click(object sender, EventArgs e) { MessageBox.Show("O arquivo deve conter as coordenadas que a matriz terá e depois" + " as células diferentes de 0 (elemento, linha, coluna). Exemplo: \n" + " 3 3 \n 10 0 0 \n 15 0 2", "Orientações de arquivo de matriz esparsa:", MessageBoxButtons.OK, MessageBoxIcon.Information); if (openFileDialog1.ShowDialog() == DialogResult.OK) { StreamReader sr = new StreamReader(openFileDialog1.FileName); string linhaArquivo = sr.ReadLine(); while (linhaArquivo.Contains("//")) // usado para pular comentários no arquivo { linhaArquivo = sr.ReadLine(); } string[] coordenadas = linhaArquivo.Split(' '); int linhas = Convert.ToInt32(coordenadas[0]); int colunas = Convert.ToInt32(coordenadas[1]); matrizEsparsa = new ListaLigadaCruzada(linhas, colunas); while ((linhaArquivo = sr.ReadLine()) != null) { if (linhaArquivo.Contains("//")) // pular comentários durante a inserção de células { continue; } string[] celula = linhaArquivo.Split(' '); double elemento = Convert.ToDouble(celula[0]); int linha = Convert.ToInt32(celula[1]); int coluna = Convert.ToInt32(celula[2]); matrizEsparsa.InserirElemento(elemento, linha, coluna); } sr.Close(); // atualiza os campos necessários numLinhas.Value = matrizEsparsa.Linhas; numColunas.Value = matrizEsparsa.Colunas; numLinhaPesquisa.Maximum = numLinhaInsercao.Maximum = matrizEsparsa.Linhas - 1; numColunaPesquisa.Maximum = numColunaInsercao.Maximum = matrizEsparsa.Colunas - 1; matrizEsparsa.ExibirDataGridView(dgMatrizEsparsa); } }
private void frmOperacoes_Load(object sender, EventArgs e) { // linhas e colunas iniciarão com o valor 1 int linhas = 1; int colunas = 1; // matrizes do formuláro iniciarão com 1 linha e 1 coluna matrizEsparsa1 = new ListaLigadaCruzada(linhas, colunas); matrizEsparsa2 = new ListaLigadaCruzada(linhas, colunas); matrizEsparsa3 = new ListaLigadaCruzada(linhas, colunas); matrizEsparsa1.ExibirDataGridView(dgMatrizEsparsa1); matrizEsparsa2.ExibirDataGridView(dgMatrizEsparsa2); matrizEsparsa3.ExibirDataGridView(dgMatrizEsparsa3); }
/// <summary> /// Faz a soma de duas matrizes esparsas. /// </summary> /// <param name="outraMatriz"></param> /// <returns>Uma matriz esparsa representando a soma.</returns> public ListaLigadaCruzada SomarMatrizes(ListaLigadaCruzada outraMatriz) { if (this.linhas != outraMatriz.linhas || this.colunas != outraMatriz.colunas) { throw new ArgumentException("As Matrizes dever ser de mesma dimensão!"); } ListaLigadaCruzada soma = new ListaLigadaCruzada(this.linhas, this.colunas); Celula atual = this.cabecaPrincipal.Abaixo.Direita; // Copia a matriz this na matriz soma for (int l = 0; l < this.linhas; l++) { for (int c = atual.Coluna; c >= 0; c = atual.Coluna) { if (atual.Valor != null) { atual = atual.Direita; soma.InserirElemento(this.ValorDe(l, c), l, c); } } atual = atual.Abaixo.Direita; } atual = outraMatriz.cabecaPrincipal.Abaixo.Direita; for (int l = 0; l < outraMatriz.linhas; l++) { for (int c = atual.Coluna; c >= 0; c = atual.Coluna) { if (atual.Valor != null) { double elem = soma.ValorDe(l, c) != 0 ? soma.ValorDe(l, c) + outraMatriz.ValorDe(l, c) : outraMatriz.ValorDe(l, c); soma.InserirElemento(elem, l, c); atual = atual.Direita; } } atual = atual.Abaixo.Direita; } return(soma); }
private void btnCriar_Click(object sender, EventArgs e) { if (numColuna.Value == 0 || numLinha.Value == 0) { MessageBox.Show("Não é possível criar matriz vazia"); } //Cria-se uma nova, pelo mesmo motivo anteriror ListaLigadaCruzada lis = new ListaLigadaCruzada(Convert.ToInt32(numLinha.Value), Convert.ToInt32(numColuna.Value)); if (rbLista1.Checked) { lista = lis; //Caso seja solicitado a lista1 lista.ExibirDataGridview(dgvUm); } else { lista2 = lis; //Caso seja a lista2 lista2.ExibirDataGridview(dgvDois); } }
/// <summary> /// Cria a matriz esparsa de acordo com as coordenadas indicadas no programa. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnCriarMatrizEsparsa_Click(object sender, EventArgs e) { if (numColunas.Value > 0 && numLinhas.Value > 0 && numColunas.Value < 656 && numLinhas.Value < 656) { int linhas = Convert.ToInt32(numLinhas.Text); int colunas = Convert.ToInt32(numColunas.Text); matrizEsparsa = new ListaLigadaCruzada(linhas, colunas); matrizEsparsa.ExibirDataGridView(dgMatrizEsparsa); // atualiza os campos necessários numLinhaRemocao.Maximum = numLinhaPesquisa.Maximum = numLinhaInsercao.Maximum = matrizEsparsa.Linhas - 1; numColunaSoma.Maximum = numColunaRemocao.Maximum = numColunaPesquisa.Maximum = numColunaInsercao.Maximum = matrizEsparsa.Colunas - 1; matrizEsparsa.ExibirDataGridView(dgMatrizEsparsa); } else { MessageBox.Show("Não é possível criar uma matriz esparsa! Verifique os valores dos campos de linha/coluna", "Atenção!", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
private void LerMatriz(object sender, EventArgs e) { if (openFileDialog1.ShowDialog() == DialogResult.OK) { StreamReader sr = new StreamReader(openFileDialog1.FileName); string linhaArquivo = sr.ReadLine(); while (linhaArquivo.Contains("//")) // usado para pular comentários no arquivo { linhaArquivo = sr.ReadLine(); } string[] coordenadas = linhaArquivo.Split(' '); int linhas = Convert.ToInt32(coordenadas[0]); int colunas = Convert.ToInt32(coordenadas[1]); switch (Convert.ToInt32(((Button)sender).Tag)) { case 0: { matrizEsparsa1 = new ListaLigadaCruzada(linhas, colunas); break; } case 1: { matrizEsparsa2 = new ListaLigadaCruzada(linhas, colunas); break; } } while ((linhaArquivo = sr.ReadLine()) != null) { if (linhaArquivo.Contains("//")) // pular comentários durante a inserção de células { continue; } string[] celula = linhaArquivo.Split(' '); double elemento = Convert.ToDouble(celula[0]); int linha = Convert.ToInt32(celula[1]); int coluna = Convert.ToInt32(celula[2]); switch (Convert.ToInt32(((Button)sender).Tag)) { case 0: { matrizEsparsa1.InserirElemento(elemento, linha, coluna); // Atualiza os campos necessários numLinhaInsercaoMatriz1.Maximum = matrizEsparsa1.Linhas - 1; numColunaInsercaoMatriz1.Maximum = matrizEsparsa1.Colunas - 1; numLinhasMatriz1.Value = matrizEsparsa1.Linhas; numColunasMatriz1.Value = matrizEsparsa1.Colunas; matrizEsparsa1.ExibirDataGridView(dgMatrizEsparsa1); break; } case 1: { matrizEsparsa2.InserirElemento(elemento, linha, coluna); // Atualiza os campos necessários numLinhaInsercaoMatriz2.Maximum = matrizEsparsa2.Linhas - 1; numColunaInsercaoMatriz2.Maximum = matrizEsparsa2.Colunas - 1; numLinhasMatriz2.Value = matrizEsparsa2.Linhas; numColunasMatriz2.Value = matrizEsparsa2.Colunas; matrizEsparsa2.ExibirDataGridView(dgMatrizEsparsa2); break; } } } sr.Close(); } }