• Viernes 15 de Noviembre de 2024, 16:46

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - Yesu

Páginas: [1]
1
C/C++ / implementacion metodo de simpson
« en: Domingo 12 de Diciembre de 2010, 07:39 »
Hola gente, para pedir un poco de ayuda en la optimizacion de un programita que hize. Se trata de un codigo que permite resolver integrales por el metodo de Simpson. El programa en si funciona bien, pero cuando se lo mostre a mi profesor, el muy jodido dijo que queria que el programa pida la ecuacion , y no que este embebida en el codigo..

aqui les dejo el codigo para que vean de que hablo:
------------------------------------------------------------------------------------
Código: C
  1. #include <stdio.h> /*para printf(),scanf()*/
  2. #include <conio.h> /*para getch(),clrscr()*/
  3. #include <stdlib.h>/*para exit()*/
  4. #include <math.h>
  5. //#include <dos.h>
  6. //#define NUMEL 20
  7. double f(double x);
  8. void _error(int n);
  9. enum{INTERVALOS};
  10. enum{SIMPSON1_3=1,SALIR};
  11. int n;
  12. float a,b;
  13. //float X[NUMEL],Fx[NUMEL];
  14.  
  15. /*Metodo de Simpson 1/3 dada una funcion*/
  16. void Simpson1_3(double a,double b,int n,double *Area)
  17. {
  18.  register int i;
  19.  double x;
  20.  double S0,S1;
  21.  double h;
  22.  h=(b-a)/(2*n);
  23.  S0=S1=0;
  24.  for(i=1;i<=(2*n-1);++i){
  25.    x=a+((double)i)*h;
  26.    if(!(i%2))
  27.     S0+=f(x);
  28.    else
  29.     S1+=f(x);
  30.  }
  31.  *Area=(h*(f(a)+4*S1+2*S0+f(b))/3.0);
  32.  
  33.   printf("n El area es -> %5.6f nnn",*Area);
  34.   getch();
  35. }
  36. /*Muestra mensaje de error*/
  37. void _error(int n)
  38. {
  39.   static char *msg[]={
  40.              "Error en los subintervalos",
  41.              ""
  42.             };
  43.   printf("n %s",msg[n]);
  44.   getch();
  45. }
  46.   /*Funcion a integrar*/
  47.   double f(double x)
  48.  {
  49.    float y;
  50.     y = -x * x + 200;
  51.     return y;
  52.  }
  53.  
  54.  void LeeDatos(int opc)
  55. {
  56.  if(opc==SIMPSON1_3){
  57. // clrscr();
  58.  
  59.  putchar('n');
  60.  printf("n Numero de intervalos (PAR) -> ");
  61.  }
  62.  
  63.  scanf("%d",&n);
  64.  if((n<1)||((n%2)!=0)){          //numero de iteraciones menor que 0 o impares
  65.   _error(INTERVALOS);
  66.   exit(1);
  67.  }
  68.  else
  69.   printf("n Valor de a =>");
  70.   scanf("%f",&a);
  71.   printf("n Valor de b =>");
  72.   scanf("%f",&b);
  73. }
  74.  /*Muestra el menu en la pantalla*/
  75.  void Menu(char *titulo,char *opciones[])
  76.  {
  77.     int i;
  78. //  clrscr();
  79.     i=0;
  80. //  gotoxy(34,4);
  81.     printf("%snn",titulo);
  82.     for(;*opciones[i];i++)
  83.     printf("tttt %d.- %sn",i+1,opciones[i]);
  84.     printf("tttt %d.- Salirn",i+1);
  85.     putchar('n');
  86.     printf("tttt Opcion: ");
  87.  }
  88. int main(void)
  89. {
  90.   double Area;
  91.  
  92.   int op;
  93.   char *opciones[]={"Simpson 1/3",
  94.  
  95.                     ""
  96.                    };
  97.   do{
  98.  //  clrscr();
  99.    Menu("Metodos de Integracion",opciones);
  100.    scanf("%d",&op);
  101.    switch(op){
  102.      case SIMPSON1_3:    LeeDatos(SIMPSON1_3);
  103.                          Simpson1_3(a,b,n,&Area);
  104.                          break;
  105.  
  106.      case SALIR:
  107.      //     gotoxy(34,20);
  108.                          printf(" Fin de %s",__FILE__);
  109. //
  110.                          exit(0);
  111.                          break;
  112.      default:
  113.      // gotoxy(34,13);
  114.                          printf("Opcion no permitida. nnn" );
  115.                          getch();
  116.                          break;
  117.  
  118.     }
  119.   }while(op!=SALIR);
  120.  
  121. }
  122.  

--------------------------------------------------------------------------------------------------------------

en este caso, la ecuacion que resuelve el programa es -x * x + 200, pero el profesor quiere que resuelva cualquiera, que seria basicamente cambiar esa ecuacion en el codigo.. pero el quiere que el programa la pida y uno la ingrese cuando se ejecute el programa...

Se que no debe ser muy dificil crear una funcion que pida una ecuacion y la resuelva pero estoy un poco perdido asique si me dan una ayudita se los agradecería un monton!!

desde ya muchas gracias!!

Páginas: [1]