Ir para conteúdo
Fórum Script Brasil
  • 0

Conferindo Código


rxc

Pergunta

Considere a existência de um arquivo, chamado “entrada.txt”, que contém uma seqüência

de descrições de objetos geométricos (círculos, retângulos e triângulos). Este arquivo de

entrada é um arquivo texto com a descrição de um objeto por linha. Cada linha se inicia por

uma letra ‘C’, ‘c’, ‘R’, ‘r’, ‘T’ ou ‘t’ indicando um círculo, um retângulo ou um triângulo.

As linhas que têm o caractere # como primeiro caractere não branco representam

comentário e devem ser desconsideradas na leitura dos dados. Para linhas que representam

um triângulo ou um retângulo são especificadas a base e a altura (dois números reais). No

caso da linha representar um círculo, apenas um número real, o raio, é especificado. O

quadro abaixo mostra um exemplo de um arquivo de entrada.

# representacao de figuras geometricas

R 10.0 20.0

T 20.0 5.0

C 4.0

# R 10.0 10.0

r 2.0 3.0

R 1.0 0.5

c 1.0

t 1.0 1.0

Formato do arquivo

Este trabalho consiste em escrever um programa que leia as informações armazenadas no

arquivo “entrada.txt”, e escrever um arquivo texto “saída.txt” com as descrições dos

mesmos objetos geométricos agrupados por tipo e em ordem crescente de área. Assim, o

arquivo de saída deve primeiro apresentar os círculos em ordem crescente de área, seguidos

dos retângulos, também em ordem crescente de área, seguidos, por fim, dos triângulos em

ordem crescente de área. Para o cálculo da área do círculo, use o valor de igual a 3.14. O

formato do arquivo de saída é análogo ao formato utilizado no arquivo de entrada com as

seguintes particularidades:

•deve-se utilizar apenas caracteres maiúsculos (C, R ou T) para indicar o

tipo de objeto

•deve-se apresentar os números reais com precisão de duas casas decimais

•não se deve gerar nenhuma linha de comentário

Por exemplo, se o arquivo “entrada.txt” for dado pelo apresentado acima, o arquivo

“saida.txt” deve conter:

C 1.00

C 4.00

R 1.00 0.50

R 2.00 3.00

R 10.00 20.00

T 1.00 1.00

T 20.00 5.00

Trabalho de Estruturas de Dados – PUC-Rio 2/2

As fórmulas para cálculo das áreas são:

Retângulo: base b, altura h b*h

Triângulo: base b, altura h (b*h)/2

Círculo: raio r 3.14 * (r*r)

Deve ser previsto o caso de um arquivo de entrada vazio ou inexistente. Se o arquivo for

inexistente, não se deve gerar nenhum arquivo de saída. Se o arquivo de entrada for vazio,

isto é, sem nenhum dado ou composto apenas por linhas de comentários, a saída gerada

deve ser um arquivo vazio. Considera-se ainda que nunca existirão mais do que 1000

figuras geométricas ao todo descritas em um arquivo de entrada.

Sugestão:

Implemente as funções pedidas aos poucos, testando cada uma delas antes de passar para a

próxima. Por exemplo, implemente primeiro uma função para ler e reproduzir na tela os

dados lidos. A seguir, armazene os dados lidos numa estrutura de dados, faça a ordenação

destes dados e os imprima na tela. Finalmente, gere o arquivo de saída seguindo o formato

especificado.

Critério de avaliação:

A correção do trabalho será feita comparando a saída gerada pelo programa com a saída

esperada. Portanto, o arquivo de saída deve obedecer exatamente o formato exemplificado acima.

E o meu código é esse aqui q está compilando ok, mas séra q ele está de acordo com o que está sendo pedido? eu não sei como testa-lo também

sad.gif

#include <stdio.h>

int main (void)

{

char c;

float b, h, r;

float a;

FILE* ent=fopen("entrada.txt", "rt");

FILE* sai=fopen("saida.txt", "rt");

if ((ent==NULL) || (sai==NULL)) {

printf("problemas com os arquivos\n");

return 0;

}

while (fscanf(ent," %c %f %f %f",&c,&b,&h,&r) == 4) {

if (c == 'R')

a = (b*h);

if (c == 'T')

a = (b*h)/2;

if (c == 'C')

a = 3.14*(r*r);

}

fclose(ent);

fclose(sai);

return 0;

}

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

#include <stdio.h>

int main (void)

{

char c;

float b, h, r;

float a;

FILE* ent=fopen("entrada.txt", "r");

FILE* sai=fopen("saida.txt", "r");

if ((ent==NULL) || (sai==NULL)) {

printf("problemas com os arquivos\n");

return 0;

}

while (sscanf(ent," %c %f %f %f",&c,&b,&h,&r) == 4) {

if (c == 'R')

a = (b*h);

if (c == 'T')

a = (b*h)/2;

if (c == 'C')

a = 3.14*(r*r);

}

fclose(ent);

fclose(sai);

return 0;

}

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...