Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: furciorifa en 6 Enero 2015, 00:06 am



Título: Ayuda: Programación con arreglos
Publicado por: furciorifa en 6 Enero 2015, 00:06 am
Hola! Antes qué nada  ::) feliz año , nunca había publicado en este foro preguntado nada y quisiera saber qué me falta en mi código
EL ENUNCIADO DICE ASÍ:
(http://i2.minus.com/jUXFtfvzCyItB.png)

Código
  1. #include<stdio.h>
  2. #include<math.h>
  3. int main(){
  4.  
  5. int a[4],m,n,i;
  6.  
  7. printf("Introduzca el valor de m\n");
  8.  
  9. scanf("%d",&m);
  10.  
  11. printf("Introduzca el valor de n\n");
  12.  
  13. scanf("%d",&n);
  14.  
  15. for(i=4;i>=1;i--){
  16. printf("Introduzca el valor de x^%d\n",i-1);
  17.  
  18. scanf("%d",&a[i]);
  19. }
  20.  
  21. for(m;m<=n;m++)
  22. eval(&a,m,n);
  23.  
  24. return 0;
  25.  
  26.  }//fin de main
  27.  
  28.  
  29. int eval(int a[],int m,int n){
  30.  
  31. int aux=0;
  32. int i;
  33. for(i=4;i>=1;i--){
  34. aux=aux*m+a[i];
  35. printf("El valor de la funcion cuando f(%d) es : %d\n",m,aux);
  36.  
  37. }
  38. }//fin eval
  39.  
  40.  

Espero qué me puedan decir qué hacer en pocas palabras solamente me falta mandar todas las evaluaciones del polinomio a un arreglo qué compare el mayor y el menor y los regrese pero no sé cómo hacerlo.


Título: Re: Ayuda: Programación con arreglos
Publicado por: Yoel Alejandro en 6 Enero 2015, 02:18 am
Hola furciorita

La idea sería más o menos seguir los siguientes pasos

1.) Recibir a, b, c, d, m, n del teclado. ( Si m > n dar mensaje de error ).
2.) Inicializar r = m. Calcular f(m) e inicializar p = f(m).
3.) Inicializar s = m. Inicializar q = f(m) (ya calculado en el anterior)
4.) Luego en un ciclo, desde x = m + 1 hasta x = n:
     4.1  Si f(x) > p, hacer p = f(x), y hacer también r = x
     4.2  Si f(x) < q, hacer q = f(x), y hacer también s = x

La idea es que p conserve el valor máximo y q el mínimo de los valores evaluados. Si hallas un f(x) mayor que el valor actual de p, entonces p se actualiza a este nuevo valor máximo. Similar lógica respecto al mínimo q.

Luego de recorrer desde x = m + 1 hasta x = n, tendrás los valores p, q, r, s como se pide.

Ah, y recuerda que en C los arreglos comienzan con el índice 0, no el índice 1.

=================================================
Por cierto, la función eval() que defines pareciera querer implementar el llamado "método de Horner" para evaluación de polinomios. Supongo que a[0] representa el coeficiente de menor grado, mientras que a[3] es el de mayor. Pero creo que en este caso está mal implementado, debería ser como:
Código
  1. int eval( int a[], int x ) {
  2.    int aux = 1;      /* no aux = 0 !!! */
  3.    int i;
  4.  
  5.    for ( i = 3; i > 0; i-- )
  6.        aux  = a[i] * aux + a[i-1];
  7.  
  8.    return aux;
  9. }

Recuerda que en C los arreglos comienzan con el índice 0, por lo tanto el recorrido del vector es desde i=0 hasta i=3, no desde i=1 hasta i=4.

Con todo esto creo que ya puedes terminar tu programa, o al menos encaminarte a ello.