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

AprendizZ

Arredondar números decimais!

Mensagens Recomendadas

AprendizZ

Caros amigos,

sou novo na programação de C e preciso de fazer uma função para um exercício de avaliação

O que se pretende é arredondar números decimais sendo dado o número e as casas decimais.

Exemplos: rounded(10.5891, 0) = 11.0,  rounded(10.5891, 1) = 10.6, rounded(10.5891, 3) = 10.589.

Já fiz uma função que separa a parte inteira da parte decimal:

double decimal_part (double real)

{

int inteiro = real;

double decimal = real-inteiro;

return decimal;

}

mas apoiando-me nesta função não sei como dar a volta ao que preciso.

Agradeço toda a ajuda possível.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

Podes utilizar um ponteiro char * que percorre o número e verifica qual é o número depois da virgula.

Acho que com um casting simples o programa não assume automaticamente o arredondamento.

p.s. Não sei se pode ajudar mas tens a função round da math.h que te faz isso. Round Function


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AprendizZ

Obrigado pelas sugestões, mas tenho que só utilizar operações matemáticas simples e recursividade.

Ainda não posso utilizar #includes como o math.h

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
IRX773

Colocando %.1f  acho que já arredonda para 1 casa decimal. Eu pelo menos usei isso recentemente e funcionou-me. O problema é que não dá para passar parâmetros para o %f..... acho. Embora uma programação à là labrego e com if's até 10 casas decimais funciona-se :thumbsup:

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

Ele quer uma função que arredonde mesmo, não uma função que mostre o número arredondado. Acho que com casting não vai lá.

Um char * talvez resolva.


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Miketo

Assim dá. Só imprime uns zeros nas casas decimais seguintes, mas a ideia de como fazeres está aqui. E só precisas da stdio.h.

float rounded(float num, int dec){

float pot=1;
int temp,i;
float arredondado;

for(i=0; i<dec; i++){
	pot=pot*10;
}
temp=num*pot;
arredondado=temp/pot;

return arredondado;
}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AprendizZ

Porreiro, ajudou. Um obrigado a todos.

E se não é pedir muito, também estou à rasca com uma função para calcular a formula de Fibonacci.

Alguma ideia?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AprendizZ

int fib (int n)
{
return n == 0 || n == 1 ? 1 : fib(n-1) + fib(n-2);
}

int branch_generation (int n)
{
return n < 0 ? 0 : fib(n);
}

mas esta rotina não dá.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Miketo

epa... desculpa mas não consigo entender que fizeste...

Porque não tentas fazer algo mais simples apenas com if's e for's?

Uma ajuda, vai ao link que o Baderous te indicou e tenta aplicar aquilo.

Depois diz-me o que conseguiste...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
TheDark

Estás mesmo quase lá. Mas se o argumento for 0, a função fib deverá retornar 0, e não 1 como estás a fazer.


Desaparecido.

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.