Maximo y minimo de un vector (Funciones)

Iniciado por TheShocker, 27 Diciembre 2014, 16:02 PM

0 Miembros y 1 Visitante están viendo este tema.

TheShocker

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 (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#define DIM 100

void leer_vector(int *, int);
void escribir_vector(int *, int);
void max_min_lista(int *, int, int *, int *);

int main(int argc, char *argv[])
{
   int dim;
   int vector[DIM];
   int maximo, minimo;
   
   printf("Introduzca la dimension del vector: ");
   scanf("%d",&dim);
   
   leer_vector(vector,dim);
   
   printf("\n");
   
   escribir_vector(vector, dim);
   
   printf("\n");
   
   max_min_lista(vector, dim, maximo, minimo);
   
   printf("\n\n");
   
 
 system("PAUSE");
 return 0;
}

void leer_vector(int *v, int dim){
    int i;
    for(i=0;i<dim;i++){
                                     printf("\nElemento (%d): ", i+1);
                                          scanf("%d",&v[i]);
                                          }
    }
   
void escribir_vector(int *v, int dim){
    int i;
    for(i=0;i<dim;i++){
                        printf("%8d ", v[i]);
                        }
}

void max_min_lista(int *v, int dim, int *max, int *min){
    int f, c;
   
    min = v[0];
    max = v[0];
   
    for(f=0;f<dim;f++){
                       if(v[f] > max){
                       max = v[f];
                       } else if(v[f] < min){
                       min = v[f];
                       }
                                                             }
   
    printf("Maximo: %d   Minimo: %d", max, min);
                                            }

rir3760

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:
max_min_lista(vector, dim, maximo, minimo);

/* Debe cambiarse a: */
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í:
void max_min_lista(int *v, int dim, int *max, int *min)
{
   int f, c;

   *min = v[0];
   *max = v[0];

   for(f=0;f<dim;f++){
      if(v[f] > *max){
         *max = v[f];
      } else if(v[f] < *min){
         *min = v[f];
      }
   }

   printf("Maximo: %d   Minimo: %d", *max, *min);
}


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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

TheShocker