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

Arredondar números decimais!

Recommended Posts

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.

Share this post


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

Share this post


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

Share this post


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

Share this post


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

Share this post


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

Share this post


Link to post
Share on other sites
Localhost

Lol, nem pensei nessa maneira simples. Segue o código do Miketo :thumbsup:


here since 2009

Share this post


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

Share this post


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

Share this post


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

Share this post


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

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.