Determinar posiciones en un vector en C#

publicado por: Anonymous

No he encontrado solución para este ejercicio académico que consiste en averiguar la posición donde se encuentra el número de menor valor de un array.

No me muestra posiciones dándome siempre cero y al imprimir la variable “Menor” no tiene sentido el valor que toma.


namespace PRAC09A02
{
    class Program
    {
        static void Main(string[] args)
        {
            const int Valor = 3;
            int[] Vector = new int[Valor];
            int Posicion = 0;
            int Menor = Vector[0];
            Boolean OK = false;

            for (int count = 0; count < Valor; count++)
            {
                OK = false;
                while (OK == false)
                {
                    Console.Write("nINTRODUCIR VALOR: ");

                    if (Int32.TryParse(Console.ReadLine(), out Vector[count]))
                    {
                        OK = true;
                    }
                    else
                        Console.Write("ntNO SE PUDO CONVERTIR A TIPO INT");
                }
            }
            Console.Write(Funciones.PosicionValor(Vector, Posicion, Menor, Valor));
            Console.Write("nPULSAR CUALQUIER TECLA PARA FINALIZAR...");
            Console.ReadKey();

        }
    }
    class Funciones
    {
        public static int PosicionValor (int [] Vector, int Valor,int Posicion, int Menor)
        {
            for(int Contador = 0; Contador < Valor; Contador++){
                if(Vector[Contador] < Menor){
                    Menor = Vector[Contador];
                    Posicion = Contador;
                }
            }
            return (Posicion);
        }


    }
}

solución

Primero, que si necesitas la posición del valor menor del vector no es necesario pasar ni el valor, ni la posición y el menor. Con solo pasar el vector es suficiente para obtener el índice.

Segundo, cuando llamas a PosicionValor en el main el parámetro Valor lo estas colocando de ultimo, pero en la firma del método va de segundo.

Te dejo el método modificado:

public static int PosicionValor(int[] Vector)
{
    int Posicion = 0;

    for (int Contador = 1; Contador < Vector.Length; Contador++)
    {
        if (Vector[Posicion] > Vector[Contador])
        {
            Posicion = Contador;
        }
    }
    return Posicion;
}

Y en el main lo llamas así:

Console.Write(Funciones.PosicionValor(Vector));

Si te fijas el propio vector ya contiene una propiedad Length la cual contiene el tamaño del vector.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *