Liinow 0 Denunciar post Postado Dezembro 3, 2011 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. 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: Aguardo respostas de algum membro imasters :natalhappy: Obrigado pela atenção. att; Liinow. Compartilhar este post Link para o post Compartilhar em outros sites
Shurd 0 Denunciar post Postado Dezembro 3, 2011 Nao olhei direito, mas chuto associação de variaveis diferentes. Compartilhar este post Link para o post Compartilhar em outros sites
Liinow 0 Denunciar post Postado Dezembro 3, 2011 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
Shurd 0 Denunciar post Postado Dezembro 3, 2011 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
guidjos 65 Denunciar post Postado Dezembro 3, 2011 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