Problemas vectores

Iniciado por DickGumshoe, 2 Marzo 2012, 18:50 PM

0 Miembros y 2 Visitantes están viendo este tema.

DickGumshoe

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.

#include<stdio.h>
#include<stdlib.h>

int maximapos (int V[], int n){
   
int i,mejor_valor;

mejor_valor=V[0];

for(i=0;i<n;i++) if (V[i]>mejor_valor) mejor_valor=i;
   
   return(mejor_valor);    
}

int main (void){
   
int V[7]={12,15,3,64,6,2,1};

int mejor_posicion,mejor_valor,i;

mejor_posicion=maximapos(V,7);

mejor_valor=V[mejor_posicion];

printf("El mejor valor es %d y su posicion es %d",mejor_valor,mejor_posicion);

system("pause");
   
}


Muchísimas gracias.

Saludos.

s00rk

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 (c++) [Seleccionar]

#include<stdio.h>
#include<stdlib.h>

int maximapos (int V[], int n)
{

    int mejor_valor;
    mejor_valor=V[0];
    for(int i=1; i < n; i++)
        if(V[i] > mejor_valor)
            mejor_valor = i;
    return mejor_valor;
}

int main ()
{

    int V[] = {12,15,3,64,6,2,1};

    int posicion, maxvalor, tam;

    tam = sizeof(V) / sizeof(int);
    posicion = maximapos(V, tam);
    maxvalor = V[posicion];

    printf("El mejor valor es %d y su posicion es %d \n", maxvalor, posicion);

    system("pause");
}

DickGumshoe

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.

rir3760

El problema se debe a la funcion que encuentra el maximo, falta consistencia:
int maximapos(int V[], int n)
{
   int i,mejor_valor;
   
   mejor_valor = V[0]; /* <== valor */
   
   for (i = 0; i < n; i++)
      if (V[i] > mejor_valor) /* <== valor */
         mejor_valor = i; /* <== indice */

   
   return(mejor_valor);
}

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
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

DickGumshoe

Muchas gracias por responder.

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

Gracias.

Saludos.

rir3760

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:
int maximapos (int V[], int n)
{
   int i, mejor_valor;
   
   mejor_valor = 0;
   for (i = 1; i < n; i++)
      if (V[i] > V[mejor_valor])
         mejor_valor = i;
   
   return mejor_valor;
}

El programa produce la salida esperada.

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

DickGumshoe

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.

Sagrini


#include <stdio.h>

int ordenar (int args [], int n)
{ int mayor=0, i, a;
for (i=0; i<n; i++) if (mayor<args [i]) { mayor=args [i]; a=i; }
return a;
}

int main (int argc, char *argv [])
{ int nums [] = { 5, 7, 10, 4, 9, 12, 15, 19, 3 }; int i = ordenar (nums, 9);
printf ("%d %d\n", i+1, nums [i]);
return 0;
}

Si no te importa, me podrias decir en que universidad estas? ;) Sólo curiosidad haha

DickGumshoe

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.