Como ler uma Matriz de um arquivo txt em c

Iniciado por yoshiperes94, 20 de Julho de 2013, 17:09

tópico anterior - próximo tópico

yoshiperes94

 Olá pessoal, estou com uma dúvida cruel. Meu professor de programação faltou várias aulas durante o semestre e eu fiquei prejudicado na parte de programação em C.
O infeliz ainda passou um trabalho sobre um assunto que ele não passou. Já pesquisei em vários locais, livros, fóruns e etc, mas nada me ajuda. Tenho um trabalho para entregar até Quarta, dia 24/07/2013.
O trabalho é o seguinte:

Considere que vários terremotos foram registrados por várias estações sismográficas.
Faça um programa que tenha como entrada um arquivo com a identificação do
evento, as coordenadas geográficas (em graus) do evento, identificação da estação, e
as coordenadas geográficas da estação (em graus), e que calcule a distância angular
entre a estação e o terremoto (em graus),  e o azimute entre evento e estação (em
graus).
O  programa deverá solicitar o  nome do  arquivo de entrada, ler os dados deste
arquivo, e imprimir na tela a identificação do evento, identificação da estação, a
distância angular (em graus) e o azimute (em graus), para cada linha do arquivo de
entrada

O cálculo do Azimute e da Distância angular são realizados por fórmulas não tão triviais da Geofísica, que contêm arccos, arcsen e por aí vai. Essas fórmulas não tem nem como escrever aqui.

A matriz a ser lida é a seguinte:

20110202 31.863 -40.976 4000 -15.642 -48.05
20110101 -12.00 -78.00 1000 52.00 -10.25
20111211  33.30  54.30 1000 52.00 -10.25
20110809  24.00  30.50 1000 52.00 -10.25
20111023 -40.00 -60.00 1000 52.00 -10.25
20110101 -12.00 -78.00 2000 59.00 -15.50
20111211  33.30  54.30 2000 59.00 -15.50
20110809  24.00  30.50 2000 59.00 -15.50
20111023 -40.00 -60.00 2000 59.00 -15.50
20110101 -12.00 -78.00 3000 31.00 -45.50
20111211  33.30  54.30 3000 31.00 -45.50
20110809  24.00  30.50 3000 31.00 -45.50
20111023 -40.00 -60.00 3000 31.00 -45.50

onde as colunas representam, respectivamente: data do evento, latitude do evento(em graus), longitude do evento(em graus), identificação da estação, latitude da estação(em graus) e longitude da estação (em graus).

Eu aprecio qualquer ajuda que me derem.
Como eu faria o código para ler essa matriz, imprimi-la na tela e depois realizar os cálculos necessários do azimute e distância angular (finjam que é para somar as latitudes e longitudes).
Sei que eu teria que usar um vetor para armazenar as informações dos cálculos, mas não consigo ler essa matriz do arquivo de jeito nenhum. Se fosse um vetor eu até conseguiria. Alguém pode me ajudar?
Desde já eu agradeço.

irtigor

Você pode usar o fscanf, e o código ficaria basicamente igual a um que fizesse a mesma coisa, mas usando a entrada padrão. Ou podia combinar fgets com sscanf, por exemplo... tente fazer e nos mostre o resultado, assim fica mais fácil de direcionar a ajuda.

gwarah

#2
Para tratamento de arquivos com campos seguindo um padrão definido (pelo que eu entendi este é o caso) eu recomendo awk ou php.

O Awk (ou gwak) já vem nativo em quase todas as distribuições linux. É uma ferramenta que lê cada linha do arquivo e a cada leitura faz uma operação. Possui uma sintaxe muito parecida com o C, só que bem mais fácil. Apesar de mais lento que o C, é bem mais rápido que shell script.

O php nas versões mais recentes também possui uma sintaxe de ler e processar por linha de comando cada linha de um arquivo formatado da mesma forma que o awk, mas ainda não testei.

É quase certeza que estas 2 linguagens possuem funções matemáticas que vc precisa nas versões padrões. No C (pelo menos nas distribuições que trabalhei) não vinha nativamente estas funções. Aí vc tem que incluir também umas bibliotecas matemáticas.

A vantagem de trabalhar com C é a rapidez e a possibilidade de implementar comandos de mais baixo nível. Se não for este o caso, faz o teu parser nestas linguagens.


Espero ter te ajudado.

[]s Luis
"Cantar a beleza de ser um eterno aprendiz" (Gonzaguinha)