Distribucion binomial en C


SUBMITTED BY: almon

DATE: Dec. 18, 2015, 5:22 p.m.

FORMAT: Text only

SIZE: 6.8 kB

HITS: 1421

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4. #include <math.h>
  5. #include <ctype.h>
  6. float factorial(float);
  7. float combinacion(float, float);
  8. main()
  9. {
  10. float x, x_1, x_2, number;
  11. float n, p, q, suma = 0;
  12. float binomial = 0, sumatoria = 0;
  13. char opcion, salida;
  14. do{
  15. system("cls");
  16. printf("\tDistribucion binomial \n\n");
  17. printf("[a]-Funcion individual.\n");
  18. printf("[b]-Funcion acumulada.\n\n");
  19. printf("*Selecciona la funcion que desee calcular: ");
  20. scanf("%s", &opcion);
  21. switch(opcion)
  22. {
  23. case 'a': printf("\n\n\a-Funcion individual de distribucion binomial f(x).-\n");
  24. printf("*Ingrese el numero de eventos 'n': ");
  25. scanf("%f", &n);
  26. do{
  27. printf("\n*Ingrese la probabilidad de exito %: ");
  28. scanf("%f", &p);
  29. if(p > 1)
  30. p /= 100;
  31. q = 1 - p;
  32. suma = p + q;
  33. }while(suma != 1);
  34. do{
  35. printf("\n*Ingrese el valor de 'x': ");
  36. scanf("%f", &x);
  37. if(x > n)
  38. printf("ERROR 658: 'x' no puede ser mayor a 'n'\n");
  39. if(x < 0)
  40. printf("ERROR 725: 'x' no puede ser menor a cero.\n");
  41. }while( -((x > n) || (x < 0)) );
  42. printf("\n\n-Resultados del modelo binomial.-\n\n");
  43. binomial = combinacion(n, x) * pow(p, x) * pow(q, n-x);
  44. printf(" B(%2.0f, %2.0f, %2.0f) = %4.6f = %4.2f %", x, n, p, binomial, binomial * 100);
  45. break;
  46. case 'b': printf("\n\n\a-Funcion acumulada de distribucion binomial F(x).-\n");
  47. printf("*Ingrese el numero de eventos ´n´");
  48. scanf("%f", &n);
  49. do{
  50. printf("\n*Ingrese la probabilidad de exito %: ");
  51. scanf("%f", &p);
  52. if(p > 1)
  53. p /= 100;
  54. q = 1 - p;
  55. suma = p + q;
  56. }while(suma != 1);
  57. do{
  58. printf("*Ingresa x_1: ");
  59. scanf("%f", &number);
  60. x_1 = number;
  61. if(x_1 < 0)
  62. printf("\nERROR 458: El intervalor x_1 no puede ser menor a cero.\n");
  63. if(x_1 > n)
  64. printf("\nERROR 218: El intervalo x_1 no puede ser mayor a 'n'.\n\n");
  65. }while( -( (x_1 < 0)||(x_1 > n) ) );
  66. do{
  67. printf("*Ingresa x_2: ");
  68. scanf("%f", &x_2);
  69. if(x_2 < x_1)
  70. printf("\nERROR 147: El intervalo x_2 no puede ser menor a x_1.\n");
  71. if(x_2 > n)
  72. printf("\nERROR 231: El intervalo x_2 no puede ser mayor a 'n'.\n");
  73. }while( -( (x_2 < x_1)||(x_2 > n) ) );
  74. printf("\n\n-Resultados del modelo binomial.-\n\n");
  75. for(x_1 = number; x_1 <= x_2; x_1++){
  76. binomial = combinacion(n, x_1) * pow(p, x_1) * pow(q, n - x_1);
  77. printf(" B(%2.0f, %2.0f, %2.2f) = %4.6f\n", x_1, n, p, binomial);
  78. sumatoria += binomial;
  79. }
  80. printf("\n Probabilidad final.");
  81. printf("\n F(x) = (x; %2.0f, %2.0f) = %4.4f = %4.2f%", n, p, sumatoria, sumatoria * 100);
  82. break;
  83. default: printf("\nERROR 254: caracter de opcion mal introducido, intentelo de nuevo.\n");
  84. break;
  85. }//fin del menu opcion
  86. printf("\n\n¿Desea un nuevo calculo(S/N)?");
  87. salida = getch();
  88. salida = tolower(salida);
  89. binomial = 0;
  90. sumatoria = 0;
  91. }while(salida == 's');
  92. system("cls");
  93. printf("\tModelo binomial \n\n");
  94. printf("\n\nVuelve pronto...");
  95. getch();
  96. return 0;
  97. }//fin de main
  98. float combinacion(float a, float b)
  99. {
  100. float combinacion;
  101. combinacion = ( factorial(a) /( factorial(b) * factorial(a-b) ));
  102. return combinacion;
  103. }
  104. float factorial(float number)
  105. {
  106. float factorial = 1, counter;
  107. for(counter = number; counter >= 1; counter--)
  108. factorial *= counter;
  109. return factorial;
  110. }

comments powered by Disqus