Ayuda con este ejercicio (C#)

Publicado en 'Programación' por qwerty93xz, 3 Jul 2016.





  1. qwerty93xz

    qwerty93xz Miembro nuevo

    Registro:
    15 Oct 2015
    Mensajes:
    34
    Likes:
    0




    Cargar un vector de n elementos. imprimir el menor y un mensaje si se repite dentro del vector.
    Este es mi códgio:
    Código:
                int[] elem;
                int valor, num;
                Console.Write("Ingrese cantidad de elementos: ");
                valor = int.Parse(Console.ReadLine());
                elem = new int[valor];
                for (int i = 0; i < valor; i++)
                {
                    Console.Write("ingrese valor: ");
                    num = int.Parse(Console.ReadLine());
                    elem[i] = num;
                }
                int menor;
                menor = elem[0];
                string mensaje="";
                for (int j = 1; j < valor; j++)
                {
                    if (elem[j] < menor)
                    {
                        menor = elem[j];
                        if (elem[j] == menor)
                        {
                            mensaje = "si";
                        }
                        else
                        {
                            mensaje = "no";
                        }
                    }
                }
                Console.Write("El menor es: "+menor.ToString());
                Console.Write("\nSe repite dentro del vector?: "+mensaje);
                Console.ReadKey();
    El problema es cuando los primeros elementos que ingreso son iguales. ¿Alguna solución sin tener que usar otro for? :/
     


  2. xavi116

    xavi116 Miembro de bronce

    Registro:
    4 Mar 2010
    Mensajes:
    2,104
    Likes:
    463
    Declara una variable y asignale 0

    Cada ves que envies los datos al vector a tu variables le asignas el valor que va a ingresar y si en algun momento quisieras volver a ingredar un valor identico a la variable haces un break para que pare el proceso y te arroje un mensaje de error

    Lo haces con un if la comparacion del valor a ingresar con el valor que tiene la variable
     
  3. n00b

    n00b Miembro frecuente

    Registro:
    12 Dic 2015
    Mensajes:
    135
    Likes:
    49
    Tienes que darle una revisada a los métodos de Ordenamiento y los de Búsqueda (hay abundante info y ejemplos en la web).
    Mira en este video explican muy claramente los métodos de Ordenamiento


    Tu código sería +/- así (justo después del 1er for):
    PHP:
    OrdenarASC(elem);
    int menor elem[0];

    bool seRepite SeRepiteEnVector(elemmenor);
    string mensaje seRepite "Sí" "No";

    Console.WriteLine("El menor es: {0}"menor);
    Console.WriteLine("Se repite dentro del vector?: {0} "mensaje);
    Console.ReadKey();
    Como ves hay 2 métodos, en OrdenarASC ordenas ascendentemente, es decir el menor iría en la 1era posición; en SeRepiteEnVector devuelves true si el número menor está más de una vez en el vector.
    Osea +/- así:

    PHP:
    public void OrdenarASC(int[] vector)
    {
      
    //aquí escribe sel código según el método de ordenación que vayas a usar
    }

    public 
    bool SeRepiteEnVector(int[] vectorint numero)
    {
      
    //aquí escribe sel código según el método de búsqueda que vayas a usar.
    }
     
  4. eduar2083

    eduar2083 Miembro frecuente

    Registro:
    26 Jul 2011
    Mensajes:
    224
    Likes:
    46
    Con un sólo bucle??
    No se me ocurre otra opción que recurrir a LINQ
    Código:
    class Program
        {
            static void Main(string[] args)
            {
                int[] elements;
                int menor;
                int cantidad;
                bool menorRepetido;
    
                Console.Write("Ingrese cantidad de elementos: ");
                cantidad = Convert.ToInt32(Console.ReadLine());
    
                if (cantidad <= 0)
                    Console.WriteLine("Debe ingresar una cantidad positiva");
                else
                {
                    elements = new int[cantidad];
    
                    menor = int.MaxValue;
                    for (int i = 0; i < elements.Length; ++i)
                    {
                        Console.Write("Ingrese valor: ");
                        elements[i] = Convert.ToInt32(Console.ReadLine());
    
                        if (elements[i] < menor)
                            menor = elements[i];
                    }
    
                    menorRepetido = elements.Where(t => t == menor).Count() > 1;
                 
                    Console.WriteLine($"\nEl menor es {menor}");
                    Console.WriteLine("Se repite dentro del vector?: " + (menorRepetido ? "SI" : "NO"));
                }
            }
        }
    
    Saludos.
     
  5. gnox

    gnox Miembro maestro

    Registro:
    3 Ene 2013
    Mensajes:
    793
    Likes:
    252
    Con un solo for en vez de 3 :
    Código:
      class MainClass
       {
         public static void Main (string[] args){
           Console.Write("Numero de Elementos a Ingresar : ");
           String sNroElem = Console.ReadLine ();
           int nNroElem = int.Parse (sNroElem);
    
           int [] aElementos = new int[nNroElem];
    
           int nUltPos = nNroElem -1;
           int nMenor = int.MaxValue;
           int nRepite = 1;
           int nElemIng = 0;
           for (int i = 0; i < nNroElem; i++) {
             Console.Write ("Ingrese Elemento " + (i+1).ToString() + " :");
             nElemIng = int.Parse (Console.ReadLine ());
             if (nElemIng < nMenor) {
               if (nMenor != int.MaxValue) {
                 aElementos [nUltPos--] = nMenor;
               }
               nMenor = nElemIng;
               aElementos [0] = nMenor;
               nRepite = 1;
             } else if (nElemIng == nMenor) {
               nRepite++;
               aElementos [nUltPos--] = nElemIng;
             } else if (nElemIng > nMenor) {
               aElementos [nUltPos--] = nElemIng;
             }
           }
           Console.WriteLine ("Elemento Menor : " + aElementos [0].ToString ());
           Console.WriteLine ("Se repite : " + nRepite.ToString ());
    
         }
       }