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

Dúvida sobre função


Thiago_91

Pergunta

Gente, eu estava fazendo um programa, e nele eu usava uma função que criei para converter um angulo de graus para radianos. Fiz um programa simples para testar a função e percebi que só funciona de um determinado jeito, gostaria da ajuda de vocês para entender porque do outro jeito está errado, postarei os 2 jeitos aqui. O compilador que uso é o Dev-C++

Assim o programa funcionou corretamente:

#include <stdio.h>
#include <stdlib.h>

double angulo(float ang)
{double i;
i=ang*3.141592/180;
return i;}

main()
{float x;
double xrad;
      printf("Digite o angulo \n");
      scanf("%f",&x);
      xrad=angulo(x);
      printf("O angulo em radianos e %f \n",xrad);
      
      system("pause");}
Assim o programa não funcionou corretamente:
#include <stdio.h>
#include <stdlib.h>
double angulo(double ang)
{double i;
i=ang*3.141592/180;
return i;}

main()
{
      double x,xrad;
      printf("Digite o angulo \n");
      scanf("%f",&x);
      xrad=angulo(x);
      printf("O angulo em radianos e %f \n",xrad);
      
      system("pause");}

Ele está dando como resultado sempre 0 para o angulo em radianos. A única mudança que fiz foi mudar o parâmetro da função angulo de float para double, e na função main ao invés de declarar x como float, declarei-o como double. Porque assim não funciona corretamente? Não consigo entender onde está o erro, se alguém pudesse me esclarecer seria de grande ajuda.

Grato,

Thiago

Editado por Thiago_91
Adicionar tag's (Jonathan)
Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Sem problemas.

O problema do código estava no modo como você estava lendo/escrevendo variáveis double pela função printf. O correto é "Lf" ao invés de "f".

O código fica assim:

int main()
{
    double x,xrad;
    printf("Digite o angulo \n");
    scanf("%Lf",&x);
    xrad=angulo(x);
    printf("O angulo em radianos e %Lf \n",xrad);
      
    system("pause");
}

Obs.:

Acrescentei o int antes da função main, já que eu estava compilando em C++ e não é possível deixar o tipo de função implícito. De qualquer forma, mesmo compilando em C, é recomendado escrever o tipo de retorno da função.

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado pelo esclarecimento gente, agora deu certo. Tenho outras dúvidas relacionadas, acredito que seja melhor postar aqui mesmo para não criar outro tópico. Essa função para converter graus em radianos eu usei no seguinte problema:

Fazer um programa em C que permita calcular o cosseno de um ângulo (em radianos) baseado na seguinte série: cos(x) = x^0 – x^2/2! + x^4/4! – x^6/6! ...

Este programa deve atender às seguintes condicionantes:

a) x será lido pelo teclado e deverá ser informado em graus;

B) criar uma função que receba o x em graus e o devolva em radianos;

c) o calculo do fatorial deve ser feito por uma função criada para este fim;

d) a série acima deve ter uma quantidade de termos de tal forma que o valor acumulado em cos(x) difira de menos que 1.0 E-12 do valor devolvido pela função embutida “cos(x)” do C (ou seja, quando a diferença entre o valor acumulado da série e o valor da função “cos” do C for menor que 1.0 E-12, a série deve parar).

Irei postar o código do meu programa aqui abaixo, mas só esclarecendo, criei 4 funções, que são as seguintes:

1-mod-calcula o módulo de um número

2-fat-calcula o fatorial de um número

3-angulo-converte um angulo de graus para radianos

4-pot-eleva uma numero real a um expoente inteiro não negativo

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int fat(int num)
{int i,prod;
prod=1;
for(i=1;i<=num;i++)
prod*=i;
return prod;}


double angulo(double ang)
{double i;
i=ang*3.141592/180;
return i;}


double pot(double num,int exp)
{int i;
double res;
res=num;
if(exp==0)
res=1;
else
for(i=1;i<exp;i++)
res*=num;
return res;}

double mod(double x)
{double a;
if(x<0)
a=-x;
else
a=x;
return a;}

int main()
{
int i,sinal=-1;
double x,xrad,cosx=1;
printf("Este programa calcula o cosseno de um angulo, digite o angulo em graus \n");
scanf("%lf",&x);
xrad=angulo(x);
double j=cos(xrad);
printf("o angulo em radianos e %lf e seu cosseno e %lf \n",xrad,j);/*aqui eu imprimo o cosseno calculado pela função da biblioteca math.h para depois poder comparar com o calculado para o programa e ver se o programa funcionou corretamente*/
for(i=2;mod(j-cosx)>1.0E-12;i+=2,sinal=-sinal)
{cosx=cosx + sinal*pot(xrad,i)/fat(i);
printf("%lf \n",mod(j-cosx));/*estou imprimindo este termo apenas para verificar a convergência da série e saber se está parando realmente nas condições estabelecidas pelo problema*/} 
printf("O cosseno de %.3lf é igual a %lf \n",x,cosx);
system("pause");
}

O principal problema é o seguinte: O programa só funciona corretamente para ângulos menores que 50 graus, para angulos de maiores ou iguais a 50 graus o programa imprime: o cosseno de (angulo) e igual a -1.#IND00

Não sei porque está ocorrendo este erro.

Outra dúvida é que quando imprimo mod(j-cosx) para verificar a convergência, esse termo está aparecendo apenas com 6 casas decimais, não tem como fazer aparecer com 12 casas decimais para poder verificar se o laço está encerrando realmente quando a precisão for de 10^-12???

Grato,

Thiago

Editado por Thiago_91
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,4k
×
×
  • Criar Novo...