Ir ao conteúdo
  • Cadastre-se

C Programa sem erro em C e não funcionando


yDuba

Posts recomendados

Olá. tenho um código em C que não apresenta nenhum erro, entretanto não funciona, apenas aparece para ler a o primeiro scanf, após não acontece mais nada, fica livre para digitar.. Ajuda?

<

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

int main()
{ int k, pi, prec, pianterior;

    printf("Digite a precisao:\n");
    scanf("%d",&prec);
        pi=0;
        k=0;
            do{
                pianterior=pi;
                pi= pi+((2*(-1)^k)*3^((1/2)-k))/(2*k+1);
                k=k+1;
            }while (abs(pi-pianterior)<=prec);

            printf("Valor com sua precisao: \n");
            printf("%d",pi);
    return 0;
    getchar();
}

>

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

1 minuto atrás, isrnick disse:

Pi é um número irracional, e sua aproximação não pode ser armazenada como inteiro, precisa guardar como número de ponto flutuante logo o tipo das variáveis deve ser double (ou float).

sim, tentei fazer isso, porém quando coloco sendo float, aparece o seguinte erro > error: invalid operands to binary ^ (have 'int' and 'float')|

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

25 minutos atrás, isrnick disse:

^ não é um operador de potência em C.

 

Em C ^ é um operador binário OU EXCLUSIVO, e realmente não vai funcionar com float.

 

Para calcular potência precisa usar a função pow() da biblioteca math.h (onde xn é calculado fazendo pow(x, n)).

neste caso meu pi  para todos os numeros q coloco da 0,31... apenas o numero 1 q muda o valor...  a expressão esta corre  pi=pi+( 2*pow(1,k)*pow(3,0.5-k))/(2*5+1); ?

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

5 horas atrás, isrnick disse:

Está tentando usar essa fórmula?

 

NumberedEquation3.gif

Fonte: http://mathworld.wolfram.com/PiFormulas.html

 

Então tem algumas coisas erradas, deveria ser assim:


pi = pi + 2 * pow(-1, k) * pow(3, 0.5-k) / (2 * k + 1);

 

é esta mesmo, estava 'estão' estressada que errei alguns termos.. obrigada ..  fiz o teste na primeira vez rodou beleza, segunda vez n funciona apenas aparece para digitar a precisão e fica nisto;-; já abri ele no bloco de notas e executei e tal e nada... 

to com um outro programa com a mesma questão entretanto apenas para saber o valor de pi, como resultado me da 

"

Digite a quantidade de termos que deseja:
4
Resultado de PI:
 -1.#IND00
Process returned 0 (0x0)   execution time : 1.546 s
Press any key to continue.


"

Link para o comentário
Compartilhar em outros sites

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{ float k, pi, prec, pianterior;

    printf("Digite a precisao:\n");
    scanf("%f",&prec);
        pi=0;
        k=0;
            do{
                pianterior = pi;
       pi = pi + 2 * pow(-1,k) * pow(3,0.5-k) / (2 * k + 1);
                k = k +1;
            }while ( abs(pi-pianterior) <= prec);

            printf("Valor com sua precisao: \n");
            printf("%f",pi);
    return 0;
    getchar();
}
4 minutos atrás, isrnick disse:

Você precisa postar o código como está atualmente pra vermos qual é o problema e podermos te ajudar.

(Leia minha assinatura abaixo para ver como postar códigos no fórum.)

 

Link para o comentário
Compartilhar em outros sites

A condição do while está errada, o ciclo do while deve continuar enquanto o erro for maior ou igual a precisão (não menor ou igual).

 

E como postei na primeira resposta a função abs() é para o tipo int, para double a função para obter o valor absoluto é fabs(), e para float a função é fabsf().

 

https://en.cppreference.com/w/c/numeric/math/fabs -> valor absoluto dos tipos de ponto flutuante

https://en.cppreference.com/w/c/numeric/math/abs -> valor absoluto do tipos inteiros

 

Link para o comentário
Compartilhar em outros sites

5 minutos atrás, isrnick disse:

A condição do while está errada, o ciclo do while deve continuar enquanto o erro for maior ou igual a precisão (não menor ou igual).

 

E como postei na primeira resposta a função abs() é para o tipo int, para double a função para obter o valor absoluto é fabs(), e para float a função é fabsf().

 

https://en.cppreference.com/w/c/numeric/math/fabs -> valor absoluto dos tipos de ponto flutuante

https://en.cppreference.com/w/c/numeric/math/abs -> valor absoluto do tipos inteiros

 

muitooo obrigada, estou com o algoritmo que o professor passou, algumas coisas erradas, valeu

adicionado 5 minutos depois
9 minutos atrás, isrnick disse:

A condição do while está errada, o ciclo do while deve continuar enquanto o erro for maior ou igual a precisão (não menor ou igual).

 

E como postei na primeira resposta a função abs() é para o tipo int, para double a função para obter o valor absoluto é fabs(), e para float a função é fabsf().

 

https://en.cppreference.com/w/c/numeric/math/fabs -> valor absoluto dos tipos de ponto flutuante

https://en.cppreference.com/w/c/numeric/math/abs -> valor absoluto do tipos inteiros

 

Se não for pedir muito, poderia me ajudar nesta também ?  o erro é o seguinte 

"

Digite a quantidade de termos:
5
Valor de pi:
-1.#IND00
--------------------------------
Process exited after 1.609 seconds with return value 0
Pressione qualquer tecla para continuar. . ."

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

int main()
{
    double k,pi,numtermos;
     printf("Digite a quantidade de termos: \n");
     scanf("%lf",&numtermos);
     do {
               pi = pi + 2 * pow(-1,k) * pow(3,0.5-k) / (2 * k + 1);
     		k=k+1;
     } while (k==numtermos);

     printf("Valor de pi:\n");
     printf("%lf",pi);
     getch();
    return 0;
}

 

Link para o comentário
Compartilhar em outros sites

12 minutos atrás, isrnick disse:

Falta inicializar k e pi, fazendo que comecem com valor 0, e a condição do do while também está errada, deve continuar enquanto k for menor que a quantidade de termos.

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

 main()
{
    double k,pi,numtermos;
     printf("Digite a quantidade de termos: \n");
     scanf("%lf",&numtermos);
     pi=0;
     k=0;
     do {
               pi = pi + 2 * powf(-1,k) * powf(3,0.5-k) / (2 * k + 1);
     		k=k+1;
     } while (k < numtermos);

     printf("Valor de pi:\n");
     printf("%lf",pi);
 getch();
    return 0;
}

continua com o mesmo erro tanto se eu colocar < ou <= , >=,> ...

Link para o comentário
Compartilhar em outros sites

Está funcionando corretamente:

https://onlinegdb.com/SykbmxWSV

 

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

int main()
{
    double k,pi,numtermos;
    printf("Digite a quantidade de termos: \n");
    scanf("%lf",&numtermos);
    pi=0;
    k=0;
    do {
        pi = pi + 2 * pow(-1,k) * pow(3,0.5-k) / (2 * k + 1);
     	k=k+1;
    } while (k < numtermos);
    
    printf("Valor de pi:\n");
    printf("%lf",pi);
    getchar();
    return 0;
}
Digite a quantidade de termos:
5
Valor de pi:
3.142605

...Program finished with exit code 0
Press ENTER to exit console.

 

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...