Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

AprendizZ

Ler ficheiro

Mensagens Recomendadas

AprendizZ

Preciso de ajuda. p.f.

Necessito de criar um programa que lê o seguinte ficheiro:

2000.0 1000.0 2000.0 1000.0 1000.0 -1

1000.0 1000.0 2000.0 2000.0 2000.0 1000.0 -1

2000.0 1000.0 2000.0 2000.0 2000.0 -1

1000.0 1000.0 2000.0 1000.0 2000.0 1000.0 -1

2000.0 1000.0 2000.0 -1

para depois calcular a soma dos valores e a média destes.

Só que não estou a conseguir.

De momento a única coisa que me passa pela cabeça é inserir

os valores num array bidimensional, mas não estou a conseguir

fazer através de dois ciclos while, um dentro de outro, um testa

o final da linha com -1, o outro EOF, para depois calcular os valores.

Talvez deve haver outra solução mais prática, mas ainda sou um

pouco verde nestas andanças do C.

Qual será a melhor maneira?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

Não precisas de guardar, fazes logo tudo, lês calculas o que tens de calcular e guardas só o resultado.


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AprendizZ

Mas o ficheiro de resultados tem de ter a mesma forma do ficheiro de entrada acrescido dos resultados de soma e média numa última linha (esqueci-me de mencionar isso).

Acho que está correcto fazer através de dois ciclos while encadeados, não?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

Lês linha a linha e vais escrevendo, no final calculas. Tem mais ou menos esta forma:

read();
calculate();
write();

Dentro de read escreve os dados para o ficheiro (copia os dados), dentro de write abres o ficheiros em append ("a").


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AprendizZ

Obrigado. Mas antes quero experimentar uma abordagem diferente. Procurei um teste mais simples

onde depois verifico onde está o -1 para fazer quebra de linha:

void read_file (FILE *f)
{
int x = 0;
while (fscanf(f, "%f", &matriz[x]) != EOF)
{
	x++;
	nz++;
}
}

void write_file (FILE *f)
{
int y = 0;
for (y = 0;y < nz;y++)
	fprintf(f, "%.1f ", matriz[y]);
}

O problema é que o resultado até agora é uma linha de zeros (0.0 por cada número do ficheiro).

O que é que falta ao meu fprintf? Já coloquei (double)matriz, mas fica igual.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AprendizZ

Descobri. Bastava mudar o tipo de variável do array para float. Está tudo a funcionar agora.

Agora passei a outro problema que procuro meter num array o seguinte:

31 12.1 19.0 20.0 14.8 20.3 11.3 15.6 13.3 10.6 15.9 15.0 18.0 17.1 12.7 16.2 13.2 12.9 19.7 11.3 14.3 10.6 14.8 10.8 11.9 20.4 12.9 16.0 20.6 16.2 14.2 14.3

28 17.9 19.8 15.3 14.7 16.2 18.8 14.8 19.2 14.1 18.7 18.8 14.7 17.5 18.9 18.1 19.5 18.2 15.2 19.3 16.9 16.5 17.6 19.0 19.5 15.6 15.5 16.9 14.3

31 23.8 23.8 22.5 21.2 19.7 19.7 18.3 21.6 21.7 23.4 18.7 20.2 19.4 19.9 19.2 21.5 19.1 21.9 18.1 18.4 22.1 17.6 18.8 21.5 22.1 22.1 23.2 20.4 19.3 22.6 18.6

Estou a pensar criar uma estrutura

while (até EOF)

    for (limitado até ao primeiro nº que é o nº de valores seguntes)

          fscanf (valores -> array)

Só que não sei como testar o EOF do ficheiro no ciclo while?!  :)

Pelo método anterior (while (fscanf(f, "%f", &matriz[x]) != EOF)) não dá.

Alguma ajuda? Eu sei que são coisas básicas, mas... ainda sou novo nestas

andanças. Obrigado.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.