Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
AprendizZ

Ler ficheiro

Recommended Posts

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?

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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?

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.