Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: DickGumshoe en 2 Marzo 2012, 18:50 pm



Título: Problemas vectores
Publicado por: DickGumshoe en 2 Marzo 2012, 18:50 pm
Hola.

Tengo un problema con los vectores. El enunciado del ejercicio es el siguiente:

Escribir una función que busque en un vector de números el máximo valor, e indique
su valor y posición. Se supone que el vector está desordenado.

Esto es lo que yo he intentado. Cuando compruebo el resultado no está bien.

Código
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. int maximapos (int V[], int n){
  5.  
  6. int i,mejor_valor;
  7.  
  8. mejor_valor=V[0];
  9.  
  10. for(i=0;i<n;i++) if (V[i]>mejor_valor) mejor_valor=i;
  11.  
  12.    return(mejor_valor);    
  13. }
  14.  
  15. int main (void){
  16.  
  17. int V[7]={12,15,3,64,6,2,1};
  18.  
  19. int mejor_posicion,mejor_valor,i;
  20.  
  21. mejor_posicion=maximapos(V,7);
  22.  
  23. mejor_valor=V[mejor_posicion];
  24.  
  25. printf("El mejor valor es %d y su posicion es %d",mejor_valor,mejor_posicion);
  26.  
  27. system("pause");
  28.  
  29. }
  30.  

Muchísimas gracias.

Saludos.


Título: Re: Problemas vectores
Publicado por: s00rk en 2 Marzo 2012, 19:44 pm
Pues yo le veo bien a exepcion de un for que tienes de mas en el codigo, ademas de que al crar la variable V agregas directamente el tamaño, bueno yo lo haria asi:

Asi solamente cambio o agrego o quito numeros en el vector y ya no cambio nada mas puesto que ahi mismo agregue la funcion que me indique el tamaño del vector y asi enviar ese resultado a la otra funcion donde sera utilizado, para el for.
Código
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. int maximapos (int V[], int n)
  5. {
  6.  
  7.    int mejor_valor;
  8.    mejor_valor=V[0];
  9.    for(int i=1; i < n; i++)
  10.        if(V[i] > mejor_valor)
  11.            mejor_valor = i;
  12.    return mejor_valor;
  13. }
  14.  
  15. int main ()
  16. {
  17.  
  18.    int V[] = {12,15,3,64,6,2,1};
  19.  
  20.    int posicion, maxvalor, tam;
  21.  
  22.    tam = sizeof(V) / sizeof(int);
  23.    posicion = maximapos(V, tam);
  24.    maxvalor = V[posicion];
  25.  
  26.    printf("El mejor valor es %d y su posicion es %d \n", maxvalor, posicion);
  27.  
  28.    system("pause");
  29. }
  30.  


Título: Re: Problemas vectores
Publicado por: DickGumshoe en 2 Marzo 2012, 22:20 pm
Muchas gracias por responder.

Ese for que puse al final era que había hecho una prueba y se me olvidó borrarlo. Ahora edito el mensaje.

Respecto a tu código... Tiene el mismo error que el mío. No sé por qué, pero sale que el mayor valor es 6...

Gracias.

Saludos.


Título: Re: Problemas vectores
Publicado por: rir3760 en 2 Marzo 2012, 22:26 pm
El problema se debe a la funcion que encuentra el maximo, falta consistencia:
Código
  1. int maximapos(int V[], int n)
  2. {
  3.   int i,mejor_valor;
  4.  
  5.   mejor_valor = V[0]; /* <== valor */
  6.  
  7.   for (i = 0; i < n; i++)
  8.      if (V[i] > mejor_valor) /* <== valor */
  9.         mejor_valor = i; /* <== indice */
  10.  
  11.  
  12.   return(mejor_valor);
  13. }
Eso lo solucionas en un par de minutos.

Por cierto la sentencia de retorno "return(mejor_valor);" es solo eso: una sentencia. Los parentesis en ella estan de mas.

Un saludo


Título: Re: Problemas vectores
Publicado por: DickGumshoe en 2 Marzo 2012, 22:41 pm
Muchas gracias por responder.

Con eso ya probé (y he vuelto a probar), pero sigue saliendo que el máximo es 6...

Gracias.

Saludos.


Título: Re: Problemas vectores
Publicado por: rir3760 en 2 Marzo 2012, 23:03 pm
Si solo dices "Eso ya lo probé, eso no es" no hay forma de comprobar lo dicho.

Supongo habrás cometido algún error ya que si la función se corrige solucionando la falta de consistencia que te mencione:
Código
  1. int maximapos (int V[], int n)
  2. {
  3.   int i, mejor_valor;
  4.  
  5.   mejor_valor = 0;
  6.   for (i = 1; i < n; i++)
  7.      if (V[i] > V[mejor_valor])
  8.         mejor_valor = i;
  9.  
  10.   return mejor_valor;
  11. }
El programa produce la salida esperada.

Un saludo


Título: Re: Problemas vectores
Publicado por: DickGumshoe en 2 Marzo 2012, 23:11 pm
Muchas gracias. El fallo que tenía antes era que ponía al principio que el mejor valor era V[0], y debía poner 0.

Saludos.


Título: Re: Problemas vectores
Publicado por: Sagrini en 2 Marzo 2012, 23:25 pm
Código
  1. #include <stdio.h>
  2.  
  3. int ordenar (int args [], int n)
  4. { int mayor=0, i, a;
  5. for (i=0; i<n; i++) if (mayor<args [i]) { mayor=args [i]; a=i; }
  6. return a;
  7. }
  8.  
  9. int main (int argc, char *argv [])
  10. { int nums [] = { 5, 7, 10, 4, 9, 12, 15, 19, 3 }; int i = ordenar (nums, 9);
  11. printf ("%d %d\n", i+1, nums [i]);
  12. return 0;
  13. }
  14.  
Si no te importa, me podrias decir en que universidad estas? ;) Sólo curiosidad haha


Título: Re: Problemas vectores
Publicado por: DickGumshoe en 2 Marzo 2012, 23:38 pm
Gracias por el código.

Yo todavía no tengo edad para estar en la Universidad, tengo 14 años. Como me gustaría estudiar Ingeniería Informática, ayudo a mi hermana, que está estudiando Matemáticas en la Universidad de Cádiz.

Saludos.