Suponha que você precise representar os valores indicados nos itens abaixo em um programa escrito na Linguagem C. Indique o tipo de dado mais adequado para cada caso, explicando o porquê da escolha.
Área de um terreno
Área de um terreno
Passo 1
O enunciado pede que eu indique o tipo de dado em C mais adequado para representar a “Área de um terreno”. Informação fornecida: o dado a representar é exatamente “Área de um terreno” — não há unidade explicitada nem limites numéricos no enunciado. Vou então tratar o que um “área de terreno” normalmente significa (valores possíveis, sinal, necessidade de casas decimais) para escolher o tipo mais apropriado.
Passo 2
O que é a área, numericamente?
- Área é uma grandeza contínua, não-negativa (ou seja,
). - Normalmente mede-se em unidades como
, (hectare), etc. Ex.: um lote pode ter 10,5 (um valor com parte fracionária). - Conclusão prática: precisamos de um tipo que aceite números reais (com parte fracionária) e que possibilite representar desde valores pequenos (frações de metro quadrado) até valores muito grandes (áreas rurais extensas).
Passo 3
Posso usar inteiro (int/long) ou ponto flutuante (float/double)?
- Inteiros não permitem representar frações (por exemplo,
12,5 ); por isso, em geral, inteiros simples (int) são inadequados. - Uma alternativa com inteiro é armazenar a área em uma unidade menor e inteira (ex.: centímetros quadrados) usando um inteiro de 64 bits para garantir exatidão. Isso dá exatidão absoluta, mas complica conversões de unidade e pode causar overflow para áreas gigantes.
- A opção direta e prática em C é usar ponto flutuante:
, ou .
Passo 4
Comparando
,
e
:
-
: precisão ≈ 7 dígitos decimais; alcance ≈ . Pode perder casas decimais importantes quando números são grandes. Ex.: para uma área de 12345,67 , um normalmente consegue representar com algumas casas decimais, mas se a área for da ordem de milhões, a precisão relativa cai. -
: precisão ≈ 15–16 dígitos decimais; alcance enorme ( ). Para medidas de terreno (até milhares ou milhões de ou mesmo ), mantém precisão suficiente para centímetro ou milímetro relativo em praticamente todos os casos práticos. -
: precisão maior (depende da implementação), mas raramente necessária para dados de terreno e tem portabilidade/uso menos comum.
Passo 5
Exemplos numéricos para intuir por que escolher
- Lote urbano típico:
100,00 — precisa de duas casas decimais. - Fazenda grande:
1{,}000{,}000{,}00 (cem hectares = 1{,}000{,}000 ). Mesmo aqui, quereríamos manter precisão de, digamos, 0,01 — isso exige algo como 8 a 9 dígitos totais, bem dentro do . - Área de países: ordem de
10^{12} . consegue representar esses valores, embora a precisão absoluta (em metros quadrados) vá diminuir para números tão grandes — mas quase nunca precisamos de precisão em centímetros para áreas continentais.
Conclusão prática:
é o tipo que oferece o melhor equilíbrio entre precisão, alcance e simplicidade de uso em C para representar áreas de terreno.
Passo 6
Observações práticas de implementação em C (como usar corretamente):
- Declaração típica:
double area; - Inicialização/exemplo:
area = 1234,56; (em C você escreveria 1234.56 no código; aqui a vírgula é usada nos textos para separar decimais) - Entrada e saída:
- Para ler: use scanf("%lf", &area);
- Para imprimir com, por exemplo, duas casas decimais: printf("%.2f\n", area);
- Se você precisar de exatidão inteira (sem erros de representação binária) e trabalhar sempre com uma unidade fixa (por ex., centímetros quadrados), outra alternativa é usar um inteiro de 64 bits (long long) e armazenar a área em centímetro quadrado — mas isso exige cuidado com unidades e possíveis overflows.
Passo 7
Resumo final e recomendação curta
- Para representar a área de um terreno em um programa C, o mais apropriado na maioria dos casos é usar
: ele permite frações, tem precisão suficiente para medidas práticas de terreno e é simples de usar com as funções padrão de I/O. Se houver requisito estrito de exatidão decimal (por exemplo, valores monetários atrelados à área) ou regra de unidade inteira, avaliar usar inteiro de 64 bits com unidade fixa; caso contrário, é a escolha correta.
Resposta
double