• Viernes 24 de Febrero de 2017, 15:57

Autor Tema:  Arreglos Multidimensionales y ordenamiento  (Leído 2446 veces)

DanielC#

  • Miembro activo
  • **
  • Mensajes: 39
  • Nacionalidad: ar
    • Ver Perfil
Arreglos Multidimensionales y ordenamiento
« en: Sábado 24 de Agosto de 2013, 20:57 »
0

Publicidad 
Hola a todos.
Estoy tratando de aprender un poco más sobre matrices, el caso es que con una dimensión logro hacerlo correctamente pero cuando quiero agregarle otra para insertar los códigos no me sale.-
Otra cosita que me falta es, como debo hacer para que al ordenar por el nombre se corran los códigos como se muestra a continuación?.-
   
    Ingreso por teclado                  Ordenado por nombre

    01 - Daniel Virgili                      06 - Celeste Cid
    02 - Rosita Scardino                 04 - Claudio Raimonda
    03 - Pedro Cimarelli                   01 - Daniel Virgili
    04 - Claudio Raimonda               05 - Pedro Carestia
    05 - Pedro Carestia                   03 - Pedro Cimarelli
    06 - Celeste Cid                       02 - Rosita Scardino

Código: [Seleccionar]
using System;
using System.Text.RegularExpressions;

namespace ArrayDaniel
{
    class AgregarNombres
    {
        public void agrNombres()
        {
            int cant = 0;
            while(true)
            {
                Console.SetCursorPosition(02,02);
                Console.Write("Ingrese la cantidad de personas(máximo 10)...:");
                if(Int32.TryParse(Console.ReadLine(), out cant))
                {
                    if (cant > 0 && cant < 11) { break; }
                }
            }
           
            Regex reg = new Regex("^[A-Za-z ]+$");
            byte _top = 4;
            string[] nombres = new string[cant];
            for(int i = 0; i<cant; i++)
            {
                while(true)
                {
                    Console.SetCursorPosition(02, _top);
                    Console.Write("Ingrese nombre....:");
                    string linea = Console.ReadLine();
                    if (!string.IsNullOrEmpty(linea) && reg.IsMatch(linea))
                    {
                        nombres[i] = linea;
                        break;
                    }
                }
                _top += 2;
            }
           
            Array.Sort(nombres);
            _top += 2;
            Console.SetCursorPosition(02,_top);
            Console.Write(" ----- Se muestran los nombres ordenados ----- ");
            _top += 2;
            int a = 0;
            foreach(String i in nombres)
            {
                Console.SetCursorPosition(02, _top);
                Console.Write("Código...:      Nombres...:{0}", nombres[a]);
                a++;
                _top ++;
            }
        }
    }
}
Espero puedan ayudarme realmente estoy estancado.-
Saludos.
Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

gabio2

  • Miembro MUY activo
  • ***
  • Mensajes: 401
  • Nacionalidad: mx
    • Ver Perfil
Re:Arreglos Multidimensionales y ordenamiento
« Respuesta #1 en: Domingo 25 de Agosto de 2013, 05:10 »
0
@gabio87

DanielC#

  • Miembro activo
  • **
  • Mensajes: 39
  • Nacionalidad: ar
    • Ver Perfil
Re:Arreglos Multidimensionales y ordenamiento
« Respuesta #2 en: Domingo 25 de Agosto de 2013, 19:30 »
0
Hola gabio2.
En primer lugar tengo 61 años y en mis tiempos de primaria/secundaria ni por las tapas el inglés sólo ahora estoy alternando el estudio del lenguaje y el idioma siempre de forma autodidacta, no obstante la traducción de Google fue casi perfecta, voy a leerlo detenidamente para ver que obtengo.-
Sí te pido un favor más, me podes decir si esta es la forma más eficiente para insertar los códigos en mi array?, teniendo en cuenta que el mismo es de string.-

Código: C#
  1. using System;
  2.  
  3. public class MainClass
  4. {
  5.         public static void Main ()
  6.         {
  7.                 string miVaSt = "";
  8.                 for(byte i = 1; i<10; i++)
  9.                 {
  10.                         miVaSt = Convert.ToString(i);
  11.                         Console.Write("\n {0}", miVaSt);
  12.                 }
  13.  
  14.                 Console.ReadLine();
  15.         }
  16. }
  17.  
Desde ya muchas gracias por tú tiempo.-
Saludos.
Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

gabio2

  • Miembro MUY activo
  • ***
  • Mensajes: 401
  • Nacionalidad: mx
    • Ver Perfil
Re:Arreglos Multidimensionales y ordenamiento
« Respuesta #3 en: Domingo 25 de Agosto de 2013, 20:25 »
0
Que tal, mira yo creo que tu ejemplo a lo mejor y lo que necesitas es un diccionario mira este link http://msdn.microsoft.com/es-es/library/xfhwa508.aspx , ahora bien en tu código tu variable miVaSt no es un vector, sólo es un objeto de tipo string, para ser un vector tendría que ser declarado así:
// vector de 5 lugares. Del 0 al 4
string[] miVaSt = new string[5];

Saludos :)
@gabio87

DanielC#

  • Miembro activo
  • **
  • Mensajes: 39
  • Nacionalidad: ar
    • Ver Perfil
Re:Arreglos Multidimensionales y ordenamiento
« Respuesta #4 en: Domingo 25 de Agosto de 2013, 20:53 »
0
Hola
Citar
ahora bien en tu código tu variable miVaSt no es un vector, sólo es un objeto de tipo string, para ser un vector tendría que ser declarado así:
No me referia a
Código: C#
  1. string miVaSt = "";
si a esto
Código: C#
  1. string[] nombres = new string[cant];
Bueno seguiré investigando, lo único que me falta es ordenar el array y mover los códigos.-

Saludos.
Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

DanielC#

  • Miembro activo
  • **
  • Mensajes: 39
  • Nacionalidad: ar
    • Ver Perfil
Re:Arreglos Multidimensionales y ordenamiento
« Respuesta #5 en: Lunes 26 de Agosto de 2013, 18:58 »
0
Hola a todos.
Bueno creo haber logrado lo que pretendía, seguramente se puede mejorar pero para mis conocimientos actuales me sirve.-
Dejo el programa porque considero que puede ser de ayuda para algún principiante, gracias gabio2 por tú tiempo.-

Código: C#
  1. using System;
  2.  
  3. namespace ArrayDaniel
  4. {
  5.     class Entorno
  6.     {
  7.         public void entorno()
  8.         {
  9.             Console.Title = " Array ordenado";
  10.             Console.WindowHeight = 30;
  11.             Console.WindowWidth  = 70;
  12.             Console.BackgroundColor = ConsoleColor.Blue;
  13.             Console.ForegroundColor = ConsoleColor.Yellow;
  14.             Console.Clear();
  15.         }
  16.     }
  17. }

Código: C#
  1. using System;
  2.  
  3. namespace ArrayDaniel
  4. {
  5.     class ProgramaApp
  6.     {
  7.         static void Main(string[] argumentos)
  8.         {
  9.             Entorno ent = new Entorno();
  10.             ent.entorno();
  11.             AgregarNombres anc = new AgregarNombres();
  12.             anc.agrNombres();
  13.  
  14.             Console.ReadKey();
  15.         }
  16.     }
  17. }

Código: C#
  1. using System;
  2. using System.Text.RegularExpressions;
  3.  
  4. namespace ArrayDaniel
  5. {
  6.     class AgregarNombres
  7.     {
  8.         public void agrNombres()
  9.         {
  10.             int cant = 0;
  11.             while(true)
  12.             {
  13.                 Console.SetCursorPosition(02,02);
  14.                 Console.Write("Ingrese la cantidad de personas(máximo 10)...:");
  15.                 if(Int32.TryParse(Console.ReadLine(), out cant))
  16.                 {
  17.                     if (cant > 0 && cant < 11) { break; }
  18.                 }
  19.             }
  20.            
  21.             Regex reg = new Regex("^[A-Za-z ]+$");
  22.             byte _top = 4;
  23.             string[,] nombres = new string[cant,2];
  24.             string codigo = "";
  25.             byte auxCodigo = 0;
  26.             for(byte i = 0; i<cant; i++)
  27.             {
  28.                 auxCodigo++;
  29.                 codigo = Convert.ToString(auxCodigo);
  30.                 while (true)
  31.                 {
  32.                     Console.SetCursorPosition(02, _top);
  33.                     Console.Write("Ingrese nombre....:");
  34.                     string linea = Console.ReadLine();
  35.                     if (!string.IsNullOrEmpty(linea) && reg.IsMatch(linea))
  36.                     {
  37.  
  38.                         nombres[i, 0] = linea;
  39.                         nombres[i, 1] = codigo;
  40.                         break;
  41.                     }
  42.                 }
  43.                 _top += 2;
  44.             }
  45.             Ordenar OrdenarArray = new Ordenar();
  46.             OrdenarArray.ordenar(nombres);
  47.         }
  48.     }
  49. }

Código: C#
  1. using System;
  2.  
  3. namespace ArrayDaniel
  4. {
  5.     class Ordenar
  6.     {
  7.         public void ordenar(string [,] _array)
  8.         {
  9.             bool huboCambio = true;
  10.             byte _top = 2, col = 0;
  11.             int maxim = _array.Length/2;
  12.             while (huboCambio)
  13.             {
  14.                 huboCambio = false;
  15.                 for (byte Row = 0; Row < maxim-1; Row++)
  16.                 {
  17.                     if (_array[Row, col].CompareTo(_array[Row+1, col]) > 0)
  18.                     {
  19.                         string auxNomb  = _array[Row, col];
  20.                         _array[Row, col] = _array[Row+1, col];
  21.                         _array[Row+1, col] = auxNomb;
  22.                         huboCambio = true;
  23.                         string auxCodi = _array[Row, col+1];
  24.                         _array[Row, col+1] = _array[Row + 1, col+1];
  25.                         _array[Row + 1, col+1] = auxCodi;
  26.                     }
  27.                 }
  28.             }
  29.             Console.Clear();
  30.             Console.SetCursorPosition(02, _top);
  31.             Console.Write(" === Ordenado por nombre ===");
  32.             _top +=2;
  33.             Console.SetCursorPosition(02,_top);
  34.             Console.Write(" Código    nombre");
  35.             _top +=2;
  36.            
  37.             for (byte Row = 0; Row < maxim; Row++)
  38.             {
  39.                 Console.SetCursorPosition(02, _top);
  40.                 Console.WriteLine("      {0}    {01}", _array[Row, 1], _array[Row, 0]);
  41.                 _top++;
  42.             }
  43.         }
  44.     }
  45. }

Saludos.
Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

gabio2

  • Miembro MUY activo
  • ***
  • Mensajes: 401
  • Nacionalidad: mx
    • Ver Perfil
Re:Arreglos Multidimensionales y ordenamiento
« Respuesta #6 en: Martes 27 de Agosto de 2013, 04:09 »
0
DanielC# muyyy bien, tú solución hasta hoy es la mejor que conozco.

excelente. :)
@gabio87