Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: estudiante_1 en 25 Julio 2015, 17:34 pm



Título: Mayor valor de un vector en C
Publicado por: estudiante_1 en 25 Julio 2015, 17:34 pm
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.
No me sale, esto es lo que hecho, ayuda por favor. Gracias :huh:





Código:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>









int main(void){
int v[10];
int i;
int mayor=0;
srand(time(NULL));
for(i=0;i<10;i++){
v[i]=(1+rand()%10);

printf("%d\n",v[i]);
}
for(i=0;i<10;i++){
    if(v[i]>mayor){

        mayor=v[i];
        printf("%d es el mayor. Su posicion es %d\n",mayor,i);
    }
    }










system("pause");
return(0);
}


Título: Re: Mayor valor de un vector
Publicado por: Orubatosu en 25 Julio 2015, 17:43 pm
Especifica el lenguaje si puedes, porque C++ tiene la clase <vector>

No he mirado mucho el programa, pero tal y como está se imprimirá cada valor que sea mayor que el anterior.

La posición no te la guarda, porque el valor i llegará siempre al final y siempre será 9. Debes de crear otra variable de tipo entero para almacenar la posición del mismo modo que guardas el mayor



Título: Re: Mayor valor de un vector en C
Publicado por: estudiante_1 en 25 Julio 2015, 17:50 pm
 Es en C, y cómo hago entonces para saber la posición, no lo entiendo.


Título: Re: Mayor valor de un vector en C
Publicado por: DarK_FirefoX en 25 Julio 2015, 18:02 pm
Tienes este código:

Código
  1. for(i=0;i<10;i++){
  2.    if(v[i]>mayor){
  3.        mayor=v[i];
  4.        printf("%d es el mayor. Su posicion es %d\n",mayor,i);
  5.    }
  6.    }

Coje la linea con el printf y ponla después del ciclo, o sea fuera del ámbito del for, porque como lo tienes estás imprimiendo cada vez que encuentras un elemento mayor que el mayor que ya habías almacenado. Además para guardar la posición, crea otra variable y cuando encuentres un elemento mayor que el mayor que ya tenias guardado, guarda en esa variable su posición.

O sea, sería algo así:

Código
  1. int mayor = v[0];
  2. int posMayor = 0;
  3.  
  4. for(i=1;i<10;i++){
  5.    if(v[i]>mayor){
  6.        mayor=v[i];
  7.        posMayor = i;
  8.    }
  9.    }
  10.        printf("%d es el mayor. Su posicion es %d\n",mayor,posMayor);


Otro consejo, no debes inicializar la variable mayor en 0, porque puedes tener números negativos en un array y este puede no devolverte el mayor como tal del array, lo que debes hacer es inicializar la variable con el valor del primer elemento y por ende la posición de ese elemento (que sería el mayor a priori) es 0:

Código
  1. int mayor = v[i];
  2. int posMayor = 0;

Salu2s

PD: Utiliza las GeSHi si vas a publicar código


Título: Re: Mayor valor de un vector en C
Publicado por: estudiante_1 en 25 Julio 2015, 18:05 pm
Al hacerlo me sigue dando que la posición es 10.


Título: Re: Mayor valor de un vector en C
Publicado por: DarK_FirefoX en 25 Julio 2015, 18:12 pm
Al hacerlo me sigue dando que la posición es 10.

Ya modifiqué mi mensaje con lo de la posición pues lo había olvidado.

 :silbar:

Salu2s


Título: Re: Mayor valor de un vector en C
Publicado por: Orubatosu en 25 Julio 2015, 19:43 pm
No basta que "te salga", debes de entender cual es el error

En primer lugar, necesitabas 2 variables. Una donde almacenar el número mas grande del array, y otro que te indique la posición.

Esos valores deben de mostrarse tras salir del bucle, no dentro del mismo. Si lo haces dentro, aparecerán cada vez que se cumpla la condición que hay dentro del if

Te recomiendo al margen de todo esto, que te acostumbres a la hora de acometer la creación de cualquier código el uso de diagramas de flujo. Antes de picar una sola línea de código plantea sobre papel que vas a hacer y como

¿Porque no funcionaba la primera versión de tu programa?

Veamos este trozo:

Código
  1. for(i=0;i<10;i++){
  2.    if(v[i]>mayor){
  3.  
  4.        mayor=v[i];
  5.        printf("%d es el mayor. Su posicion es %d\n",mayor,i);
  6.    }
  7.    }

Tienes un bucle que usa el valor 1 desde 0 hasta 9. Mientras el valor sea menor, permanecerás dentro.

Luego preguntas si el número que está en la posición "i" es mayor que el almacenado. Ya has visto que lo conveniente es inicializar ese valor con el del primer valor del array en lugar de con cero, por si hay negativos. Poco mas que añadir

Si se cumple esa condición, almacenas en "mayor" el contenido de v[1], pero ¿que ocurre despues?

Pues que lo imprimes, con lo cual imprimirá siempre un valor cada vez que se cumpla la condición.

Es decir: Deberías de hacer como te señalan, usar el bucle para recorrer todos los valores almacenados en v, y en caso de que su valor sea mayor que el anterior cambiar el valor de "mayor" y de "posMayor". Y una vez terminado el bucle, estarás seguro de tener los valores correctos.


Título: Re: Mayor valor de un vector en C
Publicado por: estudiante_1 en 27 Julio 2015, 11:18 am
Gracias,ya me salió el problema y lo entendí.