Autor Tema: [c#]Array ordenar de Mayor a Menor, conocer el mayor, menor y su posición  (Leído 63788 veces)

Sixtoex

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 105
    • Ver Perfil
Bueno quiero decir que use el ciclo For, pero te ahorras líneas con el ciclo for each  :-\

  //  Introducir en un array un grupo de numeros desde 0 a 100. Hallar la posicion,el numero mayor y menor .Ordenar los numeros de mayor a menor.
Código: [Seleccionar]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Arrayvideodosbrain
{
    class Program
    {
        static void Main(string[] args)
        {
            //  Introducir en un array un grupo de numeros desde 0 a 100. Hallar la posicion,
            //el numero mayor y menor .Ordenar los numeros de mayor a menor.
            int[] listaNumeros = new int[15]{ 3, 4, 5, 6, 22, 33, 22, 11, 23, 345, 4535, 123, 233, 34, 3 };

           

            Array.Sort(listaNumeros);
            Console.WriteLine("El numero menor es: "+listaNumeros[0]);
             Array.Reverse(listaNumeros);
             Console.WriteLine("El numero mayor es: " + listaNumeros[0]);
             Console.WriteLine();
            for (int i = 0; i < 14;i++ )
            {
                Console.WriteLine("La posicion es: "+i+"  "+listaNumeros[i]);

            }
            }

       

    }
}
« Última modificación: 24 de Octubre 2014, 12:13 por Alex Rodríguez »

Mastermind

  • Experto
  • *****
  • Mensajes: 536
    • Ver Perfil
Re:[c#]Array ordenar de Mayor a Menor y hallar posesión
« Respuesta #1 en: 23 de Octubre 2014, 07:52 »
Hola, el ejercicio está bien resuelto pero cuando se piden este tipo de ejercicios no suele ser para que se utilicen métodos como Array.Sort sino para que el propio alumno implemente su método de ordenación. Por ejemplo como se explica en http://aprenderaprogramar.com/index.php?option=com_content&view=article&id=183:ejercicio-ejemplo-estrategia-resolucion-problema-de-programacion-ordenar-serie-de-numeros-i-cu00119a-&catid=28:curso-bases-programacion-nivel-i&Itemid=59

Depende de lo que te pidan, si simplemente te piden que lo resuelvas, está bien. En cambio si te piden que lo implementes tú tendrías que definir tú cuál es el método de ordenación con instrucciones definidas por tí, y no usar Array.Sort

Saludos!!

Sixtoex

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 105
    • Ver Perfil
Re:[c#]Array ordenar de Mayor a Menor y hallar posesión
« Respuesta #2 en: 23 de Octubre 2014, 20:51 »
 :P

interesante, así es mas dificil  :P

Príncipe_Azul

  • Principiante
  • **
  • Mensajes: 71
    • Ver Perfil
    • Foro ArgentinaIRC - Ayuda de Programación General, IRC y mIRC Scripting!
Re:[c#]Array ordenar de Mayor a Menor y hallar posesión
« Respuesta #3 en: 24 de Octubre 2014, 11:01 »
Hola, bueno te voy a dar una mano, al menos los pasos para poder realizar tu programa.

Lo que necesitás es simple, por lo menos para que te pidan en una universidad, bueno ahí vamos:

1° ¿Porqué vos pusiste manualmente los números?, eso lo deberías hacer de una forma aleatoria, es decir que el mismo programa guarde en una variable X números aleatorios, porque el secreto de esto, es que vos no sepás cuáles números son.

2° ¿Porqué usás la función Sort? El truco es ordenar los números uno mismo y no usar las funciones del programa.

3° ¿Porqué usas esta instrucción:

Código: [Seleccionar]
             Console.WriteLine();
? ¿Deseas ingresar un salto de línea? Bueno para eso no es necesario una instrucción, simplemente usas el método de salto de línea, por ejemplo:

Código: [Seleccionar]
             Console.WriteLine("El numero mayor es: " + listaNumeros[0] + "\n");
4° ¿Porqué usás la función Reverse?, aahhh ya sé, porque vos estás invirtiendo la variable para que en vez de mostrarte el primer número, te muestro el último, pero eso está mal hecho, ya que vos como dije no debés saber en que posiciones están los números, así que lo reverse no deberías usarlo.

5° Para saber cuál es el número mayor de la lista de números, simplemente debés crear una variable de tipo int con el valor de 1 y luego con un bucle for vas comparando que el número siguiente sea mayor que 1, en caso afirmativo, se sobreescribe la variable Int por el nuevo valor que es mayor a 1, por ejemplo supongamos que sea 33, entónces se sigue la comparación hasta buscar un número mayor a 33, y si lo hay, entónces se vuelve a sobreescribir la variable Int por el nuevo valor.

6° Para poder saber cuál es el número menor, simplemente creas otra variable de tipo int y tomás como valor el primer número de la lista de números, que en este caso, es el 3 y empezás la comparación hasta encontrar otro número que sea menor que 3, como en el código que pusiste no existe un número menor que 3, entónces 3 es el menor, así de simple.

7° Bueno para ordenar la lista de mayor a menor, podés usar un bucle infinito ya sea while o for, y empezás la comprobación hasta encontrar el segundo número que sea mayor o igual que todos, en este caso vos ya tenés el número máximo, entónces, seguís buscando el siguiente, que sería el segundo número mayor, osea recorres toda la lista hasta que termine y vas guardando en un variable de tipo Int los valores que sean mayor que otro, cuando lo obtengas, osea cuando obtengas el número, entónces eliminás ese número de esa posición en donde estaba situado, porque puede repetirse, y luego cuado se termine de recorrer toda la variable que contiene los números, entónces, volvés otra vez a hacer otro bucle, esto lo podés hacer de forma recursiva y bueno vas eliminando los números de la lista hasta que la misma quede vacía, cuando ese paso, el programa imprimirá en la consola los números de mayor a menor.

Un consejo amigo, si vos vas guardando en una variable tipo String o Int por ejemplo los números de esta forma (horizontal) y por la consola se muestran tan cuál:

4535 345 233 123 34 33 23 22 22 11 6 5 4 3 3

podés optar simplemente por ir mostrándolos a medida que lo vas agregando en el bucle y dejando un salto de línea, pero también podrías usar una función como replace o algo similar que reemplace los chr(32) que son los espacios, por saltos de línea, entónces quedaría así:

4535
345
233
123
34
33
23
22
22
11
6
5
4
3
3

Por supuesto que podés siempre hacer algo similar, pero mientras que te funcione y que sea algo realmente elaborado por vos, es decir no usar funciones que ordenan los números, todo te saldrá bien, es la primera vez que veo C# y ya algo casi nada he echo, bueno está bien para mi primera vez jajaja.

Disculpame que no dejo código porque realmente no se nada de C#, al menos esta clara idea te va a servir.

Buena suerte con el programa compañero!!

Saludos!!
« Última modificación: 21 de Diciembre 2015, 16:57 por Alex Rodríguez »

Sixtoex

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 105
    • Ver Perfil
[c#]Duda Array ordenar de mayor a menor
« Respuesta #4 en: 24 de Octubre 2014, 16:36 »
c#

7° Bueno para ordenar la lista de mayor a menor, podés usar un bucle infinito ya sea while o for, y empezás la comprobación hasta encontrar el segundo número que sea mayor o igual que todos, en este caso vos ya tenés el número máximo, entónces, seguís buscando el siguiente, que sería el segundo número mayor, osea recorres toda la lista hasta que termine y vas guardando en un variable de tipo Int los valores que sean mayor que otro, cuando lo obtengas, osea cuando obtengas el número, entónces eliminás ese número de esa posición en donde estaba situado, porque puede repetirse, y luego cuado se termine de recorrer toda la variable que contiene los números, entónces, volvés otra vez a hacer otro bucle, esto lo podés hacer de forma recursiva y bueno vas eliminando los números de la lista hasta que la misma quede vacía, cuando ese paso, el programa imprimirá en la consola los números de mayor a menor.

No entiendo nada  :(

¿Alguien me echa alguna mano? no entiendo

Un usuario de aquí me envio esta página: http://aprenderaprogramar.com/index.php?option=com_content&view=article&id=183:ejercicio-ejemplo-estrategia-resolucion-problema-de-programacion-ordenar-serie-de-numeros-i-cu00119a-&catid=28:curso-bases-programacion-nivel-i&Itemid=59

No lo entiendo, nunca e dado pseucodigo y no se como va
« Última modificación: 24 de Octubre 2014, 16:40 por Sixtoex »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Hola Sistoex, si la duda es relacionada con lo que se venía hablando en un tema, debe responderse en el mismo tema en lugar de crear otro nuevo. Si la pregunta no tiene que ver con lo que se venía hablando, debe crearse un nuevo tema. He procedido a unir la pregunta con el tema con el que está relacionado.

Nota sobre la cuestión que comentas: si sigues este curso con pseudocódigo, http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=28&Itemid=59, te será útil para la programación en cualquier lenguaje, incluido C#

Saludos

Sixtoex

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 105
    • Ver Perfil
Código: [Seleccionar]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ejercicioArrays
{
    class Program
    {
        static void Main(string[] args)
        {
            // de mayor a menor
            int[] maxNombres = new int[5]{3,4,10,5,3};
            int cont;
            int[ ] ordenarNombres = new int[5];

           
              for(int i = 0; i < 5-1;i++)
              {
                  // i = 1
                 
                 

                if (maxNombres[i] < maxNombres[i+1])
                {
                    cont = maxNombres[i];
                    maxNombres[i]= maxNombres[i+1];
                    maxNombres[i + 1] = cont;
                   
                }
               
                  if(i == 4){
                  for(int e = 0; e < 5;e++)
                  {
                    Console.WriteLine(maxNombres[e]);
                     
                  }
                  }
               
               
             
              }
            }
           
         
                }
            }

Esta casi casi...

Sixtoex

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 105
    • Ver Perfil
Por fin!!!!!!!!!!!!!! ;D ;D ;D ;D ;D ;D



Código: [Seleccionar]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ejercicioArrays
{
    class Program
    {
        static void Main(string[] args)
        {
            // de mayor a menor
            int[] maxNombres = new int[5]{4564,3454,444,1,99};
            int cont;
            int[ ] ordenarNombres = new int[5];

           
              for(int i = 0; i < 5-1;i++)
              {
                  // i = 1
                 
                 

                if (maxNombres[i] < maxNombres[i+1])
                {
                    cont = maxNombres[i];
                   
                    maxNombres[i]= maxNombres[i+1];
                    maxNombres[i + 1] = cont;
                    if (maxNombres[1] > maxNombres[0])
                    {
                        cont = maxNombres[0];

                        maxNombres[0] = maxNombres[1];
                        maxNombres[1] = cont;
                       
                    }   
                }
               
                 
                  }
            for(int i = 0; i < 5;i++)
            {
                Console.WriteLine(maxNombres[i]);
            }
               
               
             
              }
            }
           
         
                }
           
       
   


Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Hola, te indico lo mismo que te acabo de escribir en otro post del foro porque también es aplicable aquí:

<<Si funciona bien, enhorabuena. Te comento una cosa que deberías mejorar: cuando creas un programa no debes hacerlo para que funcione con un número determinado de datos (por ejemplo 5 datos, ó 10 ó 20 datos). Debes hacerlo para que el programa sea capaz de resolver el problema con n datos (es decir, en este caso por ejemplo que sea capaz de ordenar tanto un array con 5 datos como con 8 datos como con 80 datos. ¿Cómo haces esto? Sustituyendo los datos fijos (por ejemplo el 5) por variables (por ejemplo escribirías numeroDatos=5, y luego en los bucles usarías numeroDatos, etc.).

Puedes fijarte en el ejercicio de la superficie que le corresponde a herederos que hay aquí para ver cómo se puede plantear un problema sin un número de datos cerrado (ver http://aprenderaprogramar.com/index.php?option=com_content&view=article&id=446:ejercicios-resueltos-con-pseudocodigo-y-diagramas-de-flujo-bucles-for-next-y-while-do-cu00161a&catid=28:curso-bases-programacion-nivel-i&Itemid=59)>>




Saludos

Sixtoex

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 105
    • Ver Perfil
Gracias por el consejo, para la próxima vez lo hago como dices
« Última modificación: 25 de Octubre 2014, 21:08 por Alex Rodríguez »

berto

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 4
    • Ver Perfil
Re:[c#]Array ordenar de Mayor a Menor, conocer el mayor, menor y su posición
« Respuesta #10 en: 21 de Diciembre 2015, 15:30 »
Hola Sixtoes gracias por el código, me ha servido de base

Pero creo que te lo has puesto demasiado fácil con int[5]{4564,3454,444,1,99};

¿Has probado a hacer esto int[5]{4564,3454,444,1,99};

Siguiéndolo mentalmente creo que haría esto:

//i=0//[0]99[1]1.../i=1//[1]444[2]1....if[0]444[1]1"[2]1(pierdes el valor 99 "creo" 

Me pasaba en mi caso contrario porque yo necesito de menor a mayor

Y lo he modificado yo estoy con ccs de esta forma: lis[5]//lista[] me gustan nombres cortos

Lo he probado con un array[10] nu=5; valores aleatorios y también funciona

Código: [Seleccionar]
//He quitado algunas cosas para hacer referencia a lo principal
//originalmente l is [ x] seria di s[psz[x]] (dis tancia [pos icion[x]])

Código: [Seleccionar]
.......
unsigned int16 va16,lis[11];
unsigned int8 c1;
.....
void burbuja(){
unsigned int8 c0=0;
for(c0=0;nu>=c0;c0++){//si nu=5---> 0 1 2 3 4 pasadas
c1=c0+1;
//nu=5//90...500....120....370....25.....50//25 es primero
//resultado esperado
//c0=0/lis[0]=90...[1]=500   //c0=1/[1]=120...[2]=500   
//c0=2/[2]=370...[3]=500     //c0=3/[3]=25...[4]=500....(IF[0]>[3])....[0]=25...[3]=90
//C0=4/[4]=50...[5]=500
if(lis[c0]>lis[c1]){//si c0 esta a + distancia k c1 ...c1 tiene prioridad + cercano
va16=lis[c1];//guarda al prioritario(menor valor)
lis[c1]=lis[c0];//pon al secundario en posicion array[mayor++];
lis[c0]=va16; }
if(c0>1){// && c1<nu){//3ª pasada 2 3 4
if(lis[0]>lis[c0]){//si [0]=90 y [3]=25.....
va16=lis[0];
lis[0]=lis[c0];
lis[c0]=va16;
}//.....................[0]=25 y [3]=90
}//3ª pasada
}//si nu=5---> 0 1 2 3 4 5 pasadas
}

Código: [Seleccionar]
El menor valor=25 siempre se guarda en li s [0]

El resultado no es perfecto seria lis[0]=25 [1]=120 [2]=370 [3]=90 [4]=50 [5]=500
pero no se pierde ningún valor lis[x] y todo se corrige a base de efectuar void burbuja()
4ºejecucion burbuja(); es exacto (en este caso)

lis[0-5]={25,50,90,120,370,500}
« Última modificación: 21 de Diciembre 2015, 17:04 por Alex Rodríguez »

berto

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 4
    • Ver Perfil
Re:[c#]Array ordenar de Mayor a Menor, conocer el mayor, menor y su posición
« Respuesta #11 en: 21 de Diciembre 2015, 15:39 »
Citar
Has probado a hacer esto int[5]{4564,3454,444,1,99};

Perdón, queria decir int[5]{99,1,444,300,400};

Esto solo me favorece a mí buscando el menor
« Última modificación: 28 de Diciembre 2015, 21:11 por Ogramar »

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".