Ir ao conteúdo
  • Cadastre-se

C algoritmo que realize o cálculo de PI para N termos


Ir à solução Resolvido por Lucca Rodrigues,

Posts recomendados

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

void main() {

   double n;
   double i;       
   double x = 1;      
   double pi = 0;   
     
   scanf("%lf",&n);     

   for(i = 1; i <= (n * 2); i += 2){
     pi = pi + x * (4 / i);
     x = -x;
}
   printf("\n %1.5lf\n", pi);  

}

Boa tarde 

preciso de ajuda novamente.

Estou aprendendo o programar em c e tenho de fazer Faça um algoritmo que realize o cálculo de PI para N termos informados pelo usuário. Sendo PI = (4/1)-(4/3)+(4/5)-(4/7)+(4/9)... e a entrada: valor da quantidade de termos será lido em linha, sendo este valor composto por um número inteiro (int), Imprimir o valor de PI com 5 casas decimais. Só consegui a saída como se pede usando "double" não consigo com int. Preciso de ajuda para fazer n ser "int" e dar o mesmo resultado. Desde ja agradeço.

  • Amei 1
Link para o comentário
Compartilhar em outros sites

  • Solução

@Ieybdcbd Çcldcf O padrão é a main() retornar um int, por isso que normalmente a gente vê um "return 0" no final da main(), que significa que a execução foi bem sucedida.

 

1 hora atrás, Ieybdcbd Çcldcf disse:

Faça um algoritmo que realize o cálculo de PI para N termos informados pelo usuário.

"N" então é um inteiro positivo, não double como você declarou. O enunciado pede para usar o tipo inteiro:

1 hora atrás, Ieybdcbd Çcldcf disse:

a entrada: valor da quantidade de termos será lido em linha, sendo este valor composto por um número inteiro (int)

 

1 hora atrás, Ieybdcbd Çcldcf disse:

Imprimir o valor de PI com 5 casas decimais.

Por que colocou 1.5 antes do especificador?

1 hora atrás, Ieybdcbd Çcldcf disse:

printf("\n %1.5lf\n", pi);

Esse "1" não vai fazer diferença, isso é só pra deixar espaços à esquerda caso o mesmo seja um número maior que a quantidade de caracteres do ponto flutuante que você está imprimindo.

  

1 hora atrás, Ieybdcbd Çcldcf disse:

Só consegui a saída como se pede usando "double" não consigo com int. Preciso de ajuda para fazer n ser "int" e dar o mesmo resultado.

Tentou mudar o tipo de double pra int, e usar o especificador d em vez de lf na scanf()? É só isso o que você tem que fazer a mais pra "funcionar", mas é bom fazer as mudanças que eu mencionei.

 

Tente se acostumar a usar nomes de variáveis mais autoexplicativos, é fácil e poupa tempo.

Da uma olhada aí:

#include <stdio.h>
#include <locale.h>

int main()
{
    setlocale(LC_ALL, "Portuguese");
    
    int N;
    int sinal = 1;
    double denominador = 1;
    double PI = 0;   
    
    printf("Insira a quantidade de termos: ");
    scanf("%d", &N);     
    
    for(int i = 0; i < N; i++){
        PI += sinal * (4 / denominador);
        sinal = -sinal;
        denominador += 2;
    }
    
    printf("\nO valor de PI calculado é: %.5lf\n", PI);
    
    return 0;
}
  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

17 horas atrás, Lucca Rodrigues disse:

@Ieybdcbd Çcldcf O padrão é a main() retornar um int, por isso que normalmente a gente vê um "return 0" no final da main(), que significa que a execução foi bem sucedida.

 

"N" então é um inteiro positivo, não double como você declarou. O enunciado pede para usar o tipo inteiro:

 

Por que colocou 1.5 antes do especificador?

Esse "1" não vai fazer diferença, isso é só pra deixar espaços à esquerda caso o mesmo seja um número maior que a quantidade de caracteres do ponto flutuante que você está imprimindo.

  

Tentou mudar o tipo de double pra int, e usar o especificador d em vez de lf na scanf()? É só isso o que você tem que fazer a mais pra "funcionar", mas é bom fazer as mudanças que eu mencionei.

 

Tente se acostumar a usar nomes de variáveis mais autoexplicativos, é fácil e poupa tempo.

Da uma olhada aí:


#include <stdio.h>
#include <locale.h>

int main()
{
    setlocale(LC_ALL, "Portuguese");
    
    int N;
    int sinal = 1;
    double denominador = 1;
    double PI = 0;   
    
    printf("Insira a quantidade de termos: ");
    scanf("%d", &N);     
    
    for(int i = 0; i < N; i++){
        PI += sinal * (4 / denominador);
        sinal = -sinal;
        denominador += 2;
    }
    
    printf("\nO valor de PI calculado é: %.5lf\n", PI);
    
    return 0;
}

Ok. Obrigado.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...