Trabalho Prático 5 - Leitura e Escrita de Arquivos Texto

Ir em baixo

Trabalho Prático 5 - Leitura e Escrita de Arquivos Texto

Mensagem por Evandro Abu Kamel em Qui 23 Abr 2009, 16:34

Olá pessoal, quanto tempo hein?! Laughing
Bem, confesso esse trabalho foi um pouco mais complicado que os outros, mas quando se pega o jeito fica mais fácil.

Pressuponho que todos tenham lido o arquivo do trabalho, com a introdução e o exemplo sobre como manipular arquivos texto. Então já vou passando umas dicas de como usar aqueles conceitos nesse trabalho, recomendo ler tudo para não ficar perdido no meio do caminho. Não se esqueça de incluir a biblioteca "System.IO" no início do código.


Dica 1 - Ler um Arquivo Texto: Para ler um arquivo texto, é bem simples. Criaremos, por exemplo, uma variável "m01" do tipo "TextReader", que quer dizer "Leitor de Texto", e essa variável "m01" receberá o conteúdo de um arquivo texto, sua localização pode variar. Para quem estiver usando o Visual Studio, coloque a pasta "matrizes" (a que contém os 17 arquivos TXT com os números das matrizes) dentro da pasta Projects, assim todos os projetos poderão acessá-la usando o mesmo endereço, que será "../../../../matrizes/m01.txt" para o arquivo "m01.txt". Então o comando que lerá um arquivo texto ficará assim:

Código:
TextReader m01 = new StreamReader("../../../../matrizes/m01.txt");

Mas creio que é possível colocar os arquivos a serem lidos pelo programa na pasta "Projects\<projeto>\<projeto>\bin\Debug\" aí não é necessários especificar o diretório onde eles estão como no exemplo anterior.


Dica 2 - Criando uma Matriz: Agora vamos criar e inicializar uma matriz a partir da leitura das linha de um arquivo. Sabemos que a primeira linha do arquivo contém o número de linhas da matriz e a segunda linha contém o número de colunas da matriz, as linhas seguintes do arquivo contém os valores que preencherão a matriz. Então as duas primeiras linhas serão lidas individualmente, e seus valores serão guardados em variáveis, obviamente variáveis que receberão o número de linha e o número de colunas da matriz.

Código:
int ln1 = int.Parse(m01.ReadLine());  // numero de linhas da matriz 01
int cl1 = int.Parse(m01.ReadLine());  // numero de colunas da matriz 01
int[,] mat01 = new int[ln1, cl1];

Saibam que o "m01" é um objeto do tipo texto, portanto ele possui o método (ou função) "ReadLine()", por isso usamos o "int.Parse()" para converter esse texto para tipo inteiro e assim criar uma matriz do tipo inteiro.
Quando usamos o "ReadLine()" o programa lê uma linha do arquivo e passa para a próxima linha, que, por sua vez, será lida pelo próximo "ReadLine()". Assim nós lemos as duas primeiras linhas do arquivo "m01" de forma individual, as próximas linhas serão lidas dentro de um laço for().


Dica 3 - Preenchendo a Matriz: Lidas as duas primeiras linhas do arquivo, vamos agora preencher a matriz "mat01" com os valores contidos nas próximas linhas do arquivo "m01". Para isso utilizaremos a mesma estrutura de for() que foi usada em outros trabalhos com matriz, e usaremos como variáveis comparativas "ln1" e "cl1". Dentro do for() de dentro, a "mat01" em determinada posição (estabelecida pelos for()) receberá o valor lido da próxima linha do arquivo, convertida para inteiro. Nosso a estrutura ficará mais ou menos assim:

Código:
Console.WriteLine("\n Matriz 01 ["+ln1+","+cl1+"]");
for (int lna = 0; lna < ln1; lna++)
{
    for (int cla = 0; cla < cl1; cla++)
    {                   
        mat01[lna, cla] = int.Parse(m01.ReadLine());
        Console.Write(" | "+mat01[lna,cla]);
    }
    Console.WriteLine("");
}
O "Console.Write()" é só pra exibir os valores da matriz em forma de tabela, pra ficar mais bonitinho.
Não se esqueça de fechar o arquivo com "m01.Close();".


Dica 4 - Escrevendo em Arquivo Texto: Feita a leitura dos arquivos e o preenchimento das matrizes, vamos agora calcular a matriz resultante e gravar em um outro arquivo texto seguindo o padrão dos arquivos lidos. Antes de tudo, devemos criar uma matriz e um variável que irá receber os valores que serão escritos no arquivo texto, essa variável deve ter um nome diferente do nome da matriz resultante. Em seguida, vamos escrever aquelas duas primeiras linhas que tem em todos os arquivos, lembrando que a primeira linha do arquivo contém o número de linhas da matriz e a segunda linha contém o número de colunas da matriz. Depois disso, dentro de um laço for(), faremos a operação pedida pelo exercício, como nos outros trabalhos, e escrevemos o resultado em uma nova linha do arquivo texto que foi criado. Ao final, fora dos for(), feche o arquivo. Ficará como abaixo:

Código:
int[,] MatSoma = new int[ln1, cl1];  // matriz da soma das matrizes
TextWriter SomaText = new StreamWriter("soma_m01_m02_m03.txt");  // cria um novo arquivo texto
SomaText.WriteLine(ln1);  // escreve na primeira linha do arquivo
SomaText.WriteLine(cl1);  // escreve na segunda linha do arquivo
Console.WriteLine("\nMatriz Soma ["+ln1+","+cl1+"]");  // imprime o título da matriz no Console
for (int lnr = 0; lnr < ln1; lnr++)  // percorre a matriz MatSoma
{
    for (int clr = 0; clr < cl1; clr++)
    {
          MatSoma[lnr, clr] = mat01[lnr, clr] + mat02[lnr, clr] + mat03[lnr, clr];  // posicao da matriz recebe a soma
          SomaText.WriteLine(MatSoma[lnr, clr]);  // escreve um valor na linha atual do arquivo
          Console.Write(" | " + MatSoma[lnr, clr]);  // imprime o valor no Console
    }
    Console.WriteLine("");
}
SomaText.Close();  // fecha o arquivo

Dica 5 - Caso da Multiplicação de Matrizes: Este exercício é semelhante ao da soma, porém, devemos lembrar de como é feita a multiplicação de matrizes e quais são as condições para que ela ocorra.

-> A primeira matriz dever ter o número de colunas igual ao número de linhas da segunda matriz; a matriz resultante tem o número de linhas igual ao da primeira matriz e o número de colunas igual ao da segunda matriz. Esquematizando: A[LN,Z] x B[Z,COL] = RES[LN,COL].

É só colocar a cabeça pra funcionar e criar essas três matrizes usando os comandos anteriores. Na hora de percorrer a matriz resultante, para calcular os valores dos elementos, lembram que há um terceiro for()? Pois é, esse terceiro for() deverá ser comparado com aquela variável 'Z' do esquema da multiplicação.
O resto, escrever no arquivo e tudo mais, é semelhante aos anteriores.

Bem, é isso aí. Smile
Quem tiver alguma dúvida, poste aqui para que eu possa responder com mais detalhes, pois por MSN fica um pouco limitado. E, por favor, não esperem pra pedir ajuda às 22 horas de sábado, pois eu ficarei fora quase o dia todo e da última vez eu estava conversando com 5 pessoas ao mesmo tempo, com dúvida no mesmo exercício. Razz

Obrigado. Cool


Última edição por Evandro Abu Kamel em Dom 26 Abr 2009, 00:47, editado 3 vez(es)

_________________
"Faça as coisas o mais simples que você puder,
porém, não as mais simples." Albert Einstein

avatar
Evandro Abu Kamel
Administrador
Administrador

Número de Mensagens : 222
Idade : 28
Data de inscrição : 11/03/2009

Ver perfil do usuário http://forum.clubedosistema.com

Voltar ao Topo Ir em baixo

Re: Trabalho Prático 5 - Leitura e Escrita de Arquivos Texto

Mensagem por filipibc em Qui 23 Abr 2009, 16:37

Boaa Evandro
Ja que agente nao tem professor de ATP LAB, vc ensina agente.
hehehe

_________________
Filipi Braga
avatar
filipibc
Moderador
Moderador

Número de Mensagens : 12
Data de inscrição : 11/03/2009

Ver perfil do usuário http://www.filipibc.freevar.com

Voltar ao Topo Ir em baixo

Re: Trabalho Prático 5 - Leitura e Escrita de Arquivos Texto

Mensagem por Ceechin em Sab 25 Abr 2009, 00:53

Evandro, só uma coisa:

em for (int lnr = 0; lnr < ln1; lnr++) // percorre a matriz MatSoma

e for (int clr = 0; clr < cl1; clr++)

Os elementos sublinhados nao estao sendo lidos aqui comigo, eu esqueci de algo ou pus algo errado.
Estou achando que, como a matriz MatSoma nao tem tamanho definido e depende das matrizes que serao somadas, estes elementos nao tem um numero definido, logo MatSoma nao pode ser criada.

Tem como me explicar onde que eu errei por favor? Very Happy

Ceechin
Membro
Membro

Número de Mensagens : 1
Data de inscrição : 25/04/2009

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Trabalho Prático 5 - Leitura e Escrita de Arquivos Texto

Mensagem por Evandro Abu Kamel em Sab 25 Abr 2009, 19:02

Seguinte Ceechin, essas variáveis sublinhadas são declaradas dentro dos for() e seus valores iniciais são 0.

As variáveis 'ln1' e 'cl1' que determinam as posições que os for() percorrem nas matrizes, veja que essas são as mesmas variáveis de tamanho da matriz 'mat01', e na soma de matriz, a matriz resultado tem o mesmo tamanho das matrizes que são somadas, ou seja, todas as matrizes tem o mesmo tamanho.

Logo, se você seguiu o exemplo, seu código deve estar correto.
Mas muito cuidado para não confundir as variáveis e nomes que são usadas no código.

Flw.

_________________
"Faça as coisas o mais simples que você puder,
porém, não as mais simples." Albert Einstein

avatar
Evandro Abu Kamel
Administrador
Administrador

Número de Mensagens : 222
Idade : 28
Data de inscrição : 11/03/2009

Ver perfil do usuário http://forum.clubedosistema.com

Voltar ao Topo Ir em baixo

Re: Trabalho Prático 5 - Leitura e Escrita de Arquivos Texto

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum