Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: TheShocker en 27 Diciembre 2014, 16:02 pm



Título: Maximo y minimo de un vector (Funciones)
Publicado por: TheShocker en 27 Diciembre 2014, 16:02 pm
Estoy aprendiendo a usar funciones y el caso es que ciertas funciones con punteros me resultan algo confusas, así que no sé si lo estoy haciendo bien.

El caso es que el programa funciona bien pero a la hora de meter numeros negativos, por ejemplo:

-10, 2, 4

Me reconoce como maximo el numero negativo (En este caso -10) y como minimo el 2.



Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define DIM 100
  4.  
  5. void leer_vector(int *, int);
  6. void escribir_vector(int *, int);
  7. void max_min_lista(int *, int, int *, int *);
  8.  
  9. int main(int argc, char *argv[])
  10. {
  11.    int dim;
  12.    int vector[DIM];
  13.    int maximo, minimo;
  14.  
  15.    printf("Introduzca la dimension del vector: ");
  16.    scanf("%d",&dim);
  17.  
  18.    leer_vector(vector,dim);
  19.  
  20.    printf("\n");
  21.  
  22.    escribir_vector(vector, dim);
  23.  
  24.    printf("\n");
  25.  
  26.    max_min_lista(vector, dim, maximo, minimo);
  27.  
  28.    printf("\n\n");
  29.  
  30.  
  31.  system("PAUSE");
  32.  return 0;
  33. }
  34.  
  35. void leer_vector(int *v, int dim){
  36.     int i;
  37.     for(i=0;i<dim;i++){
  38.                                      printf("\nElemento (%d): ", i+1);
  39.                                           scanf("%d",&v[i]);
  40.                                           }
  41.     }
  42.  
  43. void escribir_vector(int *v, int dim){
  44.     int i;
  45.     for(i=0;i<dim;i++){
  46.                         printf("%8d ", v[i]);
  47.                         }
  48. }
  49.  
  50. void max_min_lista(int *v, int dim, int *max, int *min){
  51.     int f, c;
  52.  
  53.     min = v[0];
  54.     max = v[0];
  55.  
  56.     for(f=0;f<dim;f++){
  57.                        if(v[f] > max){
  58.                        max = v[f];
  59.                        } else if(v[f] < min){
  60.                        min = v[f];
  61.                        }
  62.                                                              }
  63.  
  64.     printf("Maximo: %d   Minimo: %d", max, min);
  65.                                             }
  66.  


Título: Re: Maximo y minimo de un vector (Funciones)
Publicado por: rir3760 en 27 Diciembre 2014, 17:56 pm
Cuando tengas un problema con uno de tus programas lo primero que debes hacer es compilarlo en el modo mas estricto que permita el compilador ya que esa es la forma mas fácil de detectar errores, como hacerlo se debe describir claramente en su documentación.

Las partes a corregir son:

* En la función main llamas a "max_min_lista" y en esta falta el uso del operador "dirección de" (el '&') con los dos últimos argumentos:
Código
  1. max_min_lista(vector, dim, maximo, minimo);
  2.  
  3. /* Debe cambiarse a: */
  4. max_min_lista(vector, dim, &maximo, &minimo);

* En la función "max_min_lista" falta el uso del operador "*" al utilizar los parámetros "max" y "min" ya que estos son punteros, la susodicha con los cambios termina así:
Código
  1. void max_min_lista(int *v, int dim, int *max, int *min)
  2. {
  3.   int f, c;
  4.  
  5.   *min = v[0];
  6.   *max = v[0];
  7.  
  8.   for(f=0;f<dim;f++){
  9.      if(v[f] > *max){
  10.         *max = v[f];
  11.      } else if(v[f] < *min){
  12.         *min = v[f];
  13.      }
  14.   }
  15.  
  16.   printf("Maximo: %d   Minimo: %d", *max, *min);
  17. }

Por ultimo hay que cambiar la definición de la función main a "int main(void) ..." o bien "int main() ..." y eliminar en la función "max_min_lista" la variable "c" ya que no se utilizan en el programa.

Un saludo


Título: Re: Maximo y minimo de un vector (Funciones)
Publicado por: TheShocker en 27 Diciembre 2014, 20:48 pm
Perfecto, todo claro. Muchas gracias.  ;-)