Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Liinow

Programa_Estatistica

Recommended Posts

Olá caros Imasters.

 

Após inumeras tentativas e dores de cabeça, venho por meio deste tópico pedir ajuda á vocês!

 

Bom... é o seguinte, necessito criar um programa de estatística em C. Mas para isto preciso colocar a seguinte formula em pratica. Segue exemplo abaixo.

 

LRKHM.png

 

Seguindo exemplo do wiki~*

Fiz o seguinte programa:

 

#include <stdio.h>

#include <conio.h>

#include <math.h>

 

typedef struct valores {

int n,k,p1,p2;

} valores;

 

double fatorial (double n1){

int fator,valor=0;

 

for(fator=1;fator<=n1;fator++){

valor*=fator; //valor=valor*fator

}

return valor;

}

 

 

int main (){

double fatorn=0, fatork=0,valorden=0,valordek=0,subtracao=0,valordesub=0,valordaprim=0;

double valorprimtotal=0,valoreleva1=0,valoreleva2=0;

double sub=0;

float div=0,res=0,resfin=0,valorfinal=0,RESULTADO1=0, RESULTADO2=0;

 

valores v;

printf ("\nInforme o valor de N: ");

fflush (stdin);

scanf ("%i",&v.n);

 

printf ("\nInforme o valor de K: ");

fflush (stdin);

scanf ("%i",&v.k);

 

printf ("\nInforme o valor da ocorrencia do elemento: ");

fflush (stdin);

scanf ("%i",&v.p1);

 

printf ("\nInforme a quantidade de elementos no objeto: ");

fflush (stdin);

scanf ("%i",&v.p2);

 

 

 

valorden=fatorial (v.n); //aqui chama o fatorial para o valor de n

valordek=fatorial (v.k); // chama o fatorial para o valor de k

subtracao=(v.n-v.k); // faz a subtração de n-k

valordesub=fatorial(subtracao); // faz o fatorial de n-k

 

valordaprim=valorden*valordesub; //valor da primeira parte(baixo) da equação; valorden (fatorial)*valordesub (fatorial)

 

valorprimtotal= valorden / valordaprim; //Aqui o valor de n! / k!*(n-k)!

 

/*--------------------------------------------------*/

 

valoreleva1=pow(v.p1,v.k); //aqui eleva o valor de 1 por k

valoreleva2=pow(v.p2,v.k); // aqui eleva o valor de 6 po k

 

valorfinal=valoreleva1/valoreleva2; // aqui faz a div de 1/36

 

/*-------------------------------------------------*/

sub=v.n-v.k; //aqui faz subtração de n-k

 

div=v.p1/v.p2; //aqui faz a div de 1/6

 

res=(1-div); //aqui faz 1-1/6

 

resfin=pow(res,sub); // aqui faz a elevação de res por n-k

 

 

RESULTADO1=valorprimtotal * valorfinal;

RESULTADO2= RESULTADO1 * resfin;

 

printf ("\n\n\nO resultado e: %f\n\n", RESULTADO2);

 

getch ();

return 0;

}

 

Neste programa da o seguinte erro:

 

XFLSl.png

 

Aguardo respostas de algum membro imasters :natalhappy:

 

Obrigado pela atenção.

att;

Liinow.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Shurd!

 

Então, eu revisei o programa... mas pelo fato de ser "meio extenso" nao consigo achar o erro.

 

Caso você tenha um tempinho livre, poderia analisar ? ^.^

 

Obrigado pela atenção.

att;

Liinow.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sinceramente eu não tenho certeza, pois nunca usei doubles, então não sei se quando voce atribui float = double funciona.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A distribuição binomial não deve ser difícil de implementar. Sugiro algumas alterações:

 

Separe claramente a parte do seu programa que aplica a fórmula do cálculo das probabilidades de valores de variáveis aleatórias com distribuição binomial. Sugiro o seguinte protótipo:

 

double binomial(double k, double n, double p);

 

A função acima, conforme definido matematicamente pela fórmula da binomial, deve retornar a probabilidade de que um evento A ocorra exatamente k vezes após n repetições de um experimento em que a probabilidade de A ocorrer é p. Sugiro também que você se certifique de que o valor computado para uma probabilidade (e também recebido pela função binomial) seja garantidamente maior que 0 e menor ou igual a 1 (finalize a execução com um erro, alertando para erro de lógica, caso isso não ocorra).

 

Você está usando %i para ler valores de tipo double. Descubra por quê isto é errado e qual a forma certa de fazer o que você quer.

 

Não passe stdin para fflush.

 

Use a tag code.

 

(edit: )Melhor ainda: leia minha assinatura.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.