none
Arreglos - Pasar informacion de un arreglo a otro teniendo una condicion? RRS feed

  • Pregunta

  • Buenas, venia a preguntar por una situacion que me ha surgido durante la realizacion de un ejercicio, el mismo trata sobre crear un arreglo donde capturar nombre de x personas y su promedio escolar, algo basico creo yo, pero tambien me indica que se deben llenar e imprimir arreglos con los promedios mayores a 8 y promedio menores a 8, es en esto ultimo que ando perdido y me gustaria que alguien me explicara

    el arreglo que hice

        for (int i = 0; i < alumno.Length; i++)
                {
                    Console.WriteLine("nombre del alumno ");
                    alumno[i] = Console.ReadLine();
                    Console.WriteLine("calificacion 1 ");
                    cal1 = int.Parse(Console.ReadLine());
                    Console.WriteLine("calificacion 2 ");
                    cal2 = int.Parse(Console.ReadLine());
                    Console.WriteLine("calificacion 3 ");
                    cal3 = int.Parse(Console.ReadLine());
                    prom = (cal1 + cal2 + cal3) / 3;
                    Console.WriteLine("promedio  " + prom);
                    promedio[i] = prom;
                    Console.WriteLine(" ");
                }

    ///////////////////////////////////////////////////////////

        for (int i = 0; i < promedio.Length; i++)
    {
                        if (promedio[i] >= 8)
                        {
                        

                        }
                        else
                        {


                        }
      }

    Y se supone segun el ejercicio que, por ejemplo, si tengo dos promedio mayores o iguales que 8, debo guardar esos promedios en otro arreglo y que este solo imprima esa informacion.

    he hecho algo asi pero ni siquiera me aparece un resultado

     aprobado = new double[a];

                    for (int i = 0; i < promedio.Length; i++)
                    {
                        if (promedio[i] >= 8)
                        {
                             for (int c = 0; a < aprobado.Length; c++)
                             {
                                aprobado[c] = promedio[i];
                             }



                    }
                        else
                        {


                        }
                    }


             
                for (int c = 0; a < aprobado.Length; c++)
                {
                    Console.Write(aprobado[c] + " ");
                }

    Alguien me podria explicar como se hace ?

    martes, 27 de marzo de 2018 7:11

Respuestas

  • Habría que saber más sobre las restricciones del ejercicio.

    En principio yo no crearía dos Arrays diferentes (uno para los nombres y otro para los promedios), si no que crearía una estructura que mantenga ambos datos:

    public struct Calificacion
    {
        public string Nombre { get; set; }
        public double Promedio { get; set; }
    }


    y crearía un array de elementos de este tipo:

    var alumnos = new Calificacion[10];


    De esta forma tienes en un único elemento el nombre del alumno y su calificación y, si quieres tenerlo en un array diferente no tienes más que pasar este elemento al nuevo array y seguirás disponiendo de toda la información.

    Para crear el array con los alumnos con promedio mayor o igual que 8 lo más cómodo es utilizar LINQ:

    var aprobados = alumnos.Where(c => c.Promedio >= 8).ToArray();

    Mira este ejemplo completo:

        static void Main(string[] args)
        {
    
            var alumnos = new Calificacion[10];
    
            for (var i = 0; i < alumnos.Length; i++)
            {
                Console.WriteLine("nombre del alumno ");
                var nombre = Console.ReadLine();
                Console.WriteLine("calificacion 1 ");
                var cal1 = int.Parse(Console.ReadLine());
                Console.WriteLine("calificacion 2 ");
                var cal2 = int.Parse(Console.ReadLine());
                Console.WriteLine("calificacion 3 ");
                var cal3 = int.Parse(Console.ReadLine());
                var prom = (double)(cal1 + cal2 + cal3) / 3;
                Console.WriteLine("promedio  " + prom);
                alumnos[i] = new Calificacion { Nombre = nombre, Promedio = prom };
                Console.WriteLine(" ");
            }
    
            // Aprobados (promedio mayor o igual a 8)
            var aprobados = alumnos.Where(c => c.Promedio >= 8).ToArray();
            // Suspendidos (promedio menor a 8)
            var suspendidos = alumnos.Where(c => c.Promedio < 8).ToArray();
    
            // Listar aprobados
            Console.WriteLine($"{new string('*', 10)} Aprobados {new string('*', 10)}");
            foreach (var alumno in aprobados)
            {
                Console.WriteLine($"{alumno.Nombre}: {alumno.Promedio}");
            }
            Console.WriteLine();
    
            // Listar suspendidos
            Console.WriteLine($"{new string('*', 10)} Aprobados {new string('*', 10)}");
            foreach (var alumno in suspendidos)
            {
                Console.WriteLine($"{alumno.Nombre}: {alumno.Promedio}");
            }
            Console.WriteLine();
    
            Console.ReadKey();
        }
    
    }
    
    public struct Calificacion
    {
        public string Nombre { get; set; }
        public double Promedio { get; set; }
    }


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Propuesto como respuesta Jorge TurradoMVP martes, 27 de marzo de 2018 9:45
    • Marcado como respuesta Ale3467 viernes, 30 de marzo de 2018 5:04
    martes, 27 de marzo de 2018 8:29