lunes, 15 de abril de 2013

Arreglo Tridimensional Consola C# (Calificaciones)



//CLASE CUBO


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Cubos_Consola
{
    class ClaseCubo
    {
        // Tamaño del arreglo tridimensional
        private readonly int maxrenglones;
        private readonly int maxcolumnas;
        private readonly int maxplanos;

        // Cantidad de dimensiones ocupadas
        private int renglones;
        private int columnas;
        private int planos;

        // Método para consultar el tamaño de renglones
        public int MaxEstudiantes()
        {
            return (maxrenglones);
        }

        // Método para consultar el tamaño de columnas
        public int MaxMaterias()
        {
            return (maxcolumnas);
        }

        // Método para consultar el tamaño de planos
        public int MaxPeriodos()
        {
            return (maxplanos);
        }

        // Propiedad para acceder a la cantidad de renglones ocupados
        public int Estudiantes
        {
            get
            {
                return (renglones);
            }
            set
            {
                renglones = value;
            }
        }

        // Propiedad para acceder a la cantidad de columnas ocupadas
        public int Materias
        {
            get
            {
                return (columnas);
            }
            set
            {
                columnas = value;
            }
        }

        // Propiedad para acceder la cantidad de planos ocupados  
        public int Periodos
        {
            get
            {
                return (planos);
            }
            set
            {
                planos = value;
            }
        }

        // Declaración del arreglo tridimensional
        private double[, ,] Cubo;

        // Constructor sin parámetros
        public ClaseCubo()
        {
            // Se define el tamaño fijo del cubo
            maxrenglones = 10;
            maxcolumnas = 10;
            maxplanos = 10;

            // Se inicializa el cubo vacío
            Estudiantes = 0;
            Materias = 0;
            Periodos = 0;

            // Creación del arreglo tridimensional
            Cubo = new double[maxrenglones, maxcolumnas, maxplanos];
        }

        // Constructor con parámetros
        public ClaseCubo(int r, int c, int p)
        {
            // Se define el tamaño del cubo con los parámetros recibidos
            maxrenglones = r;
            maxcolumnas = c;
            maxplanos = p;

            // Se inicializa el cubo vacío
            Estudiantes = 0;
            Materias = 0;
            Periodos = 0;

            // Creación del arreglo tridimensional
            Cubo = new double[maxrenglones, maxcolumnas, maxplanos];
        }

        // Propiedad pública para acceder los datos del cubo
        public double this[int r, int c, int p]
        {
            get
            {
                return (Cubo[r, c, p]);
            }
            set
            {
                Cubo[r, c, p] = value;
            }
        }

        // Método para detectar si el cubo está vacío
        public bool EstaVacio()
        {
            if (renglones==0 && columnas==0 && planos==0)
                return (true);
            else
                return (false);
        }

        // Método para calcular el promedio de un estudiante
        public double CalcularPromedioEstudiante(int r)
        {
            // Inicializa la sumatoria
            double Suma = 0.0;

            for (int c = 0; c <= columnas - 1; c++) // Ciclo de columnas
                for (int p = 0; p <= planos - 1; p++)  // Ciclo de planos
                    Suma += Cubo[r, c, p];  // Sumatoria

            // Cálculo del promedio
            double Promedio = Suma / (columnas * planos);
            return (Promedio); // Devuelve el resultado
        }

        // Método para calcular el promedio de una materia
        public double CalcularPromedioMateria(int c)
        {
            // Inicializa la sumatoria
            double Suma = 0.0;

            for (int r = 0; r <= renglones - 1; r++)  // Ciclo de renglones
                for (int p = 0; p <= planos - 1; p++)  // Ciclo de planos
                    Suma += Cubo[r, c, p];  // Sumatoria

            // Cálculo del promedio
            double Promedio = Suma / (renglones * planos);
            return (Promedio);  // Devuelve el resultado
        }

        // Método para calcular el promedio de un periodo escolar
        public double CalcularPromedioPeriodo(int p)
        {
            // Inicializa la sumatoria
            double Suma = 0.0;

            for (int r = 0; r <= renglones - 1; r++)  // Ciclo de renglones
                for (int c = 0; c <= columnas - 1; c++)  // Ciclo de columnas
                    Suma += Cubo[r, c, p];  // Sumatoria

            // Cálculo del promedio
            double Promedio = Suma / (renglones * columnas);
            return (Promedio);  // Devuelve el resultado
        }

        // Método para encontrar la mayor calificación de un estudiante
        public void ObtenerMayorCalificacionEstudiante(int Estudiante, ref int Materia, ref int Periodo, ref double CalificacionMayor)
        {
            // Inicializa la calificación mayor
            CalificacionMayor = Cubo[Estudiante, 0, 0];
            Materia = 0;  // Inicializa los índices
            Periodo = 0;

            // Recorre el cubo por columnas y planos
            for(int c=0; c<=columnas-1; c++)
                for (int p = 0; p <= planos - 1; p++)
                    if (Cubo[Estudiante, c, p] > CalificacionMayor)  // Comparación
                    {
                        CalificacionMayor = Cubo[Estudiante, c, p];
                        Materia = c;
                        Periodo = p;
                    }
        }

        // Método para encontrar la mayor calificación de una materia
        public void ObtenerMayorCalificacionMateria(int Materia, ref int Estudiante, ref int Periodo, ref double CalificacionMayor)
        {
            // Inicializa la calificación mayor
            CalificacionMayor = Cubo[0, Materia, 0];
            Estudiante = 0;  // Inicializa los índices
            Periodo = 0;

            // Recorre el cubo por renglones y planos
            for (int r = 0; r <= renglones - 1; r++)
                for (int p = 0; p <= planos - 1; p++)
                    if (Cubo[r, Materia, p] > CalificacionMayor)  // Comparación
                    {
                        CalificacionMayor = Cubo[r, Materia, p];
                        Estudiante = r;
                        Periodo = p;
                    }
        }

        // Método para encontrar la mayor calificación de un periodo escolar
        public void ObtenerMayorCalificacionPeriodoEscolar(int Periodo, ref int Estudiante, ref int Materia, ref double CalificacionMayor)
        {
            // Inicializa la calificación mayor
            CalificacionMayor = Cubo[0, 0, Periodo];
            Estudiante = 0;  // Inicializa los índices
            Materia = 0;

            // Recorre el cubo por renglones y columnas
            for (int r = 0; r <= renglones - 1; r++)
                for (int c = 0; c <= columnas - 1; c++)
                    if (Cubo[r, c, Periodo] > CalificacionMayor)  // Comparación
                    {
                        CalificacionMayor = Cubo[r, c, Periodo];
                        Estudiante = r;
                        Materia = c;
                    }
        }
    }
}


//CLASE PROGRAM

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Cubos_Consola
{
    class Program
    {
        // Declaración del objeto
        static ClaseCubo GrupoDeEstudiantes = new ClaseCubo();
        
        static void Main(string[] args)
        {
            UInt16 opcion;
            do
            {
                Console.Clear();
                Console.WriteLine("ARREGLO TRIDIMENSIONAL\n");
                Console.WriteLine("1.- Capturar datos");
                Console.WriteLine("2.- Calcular Promedio de Estudiante");
                Console.WriteLine("3.- Calcular Promedio de Materia");
                Console.WriteLine("4.- Calcular Promedio de Periodo Escolar");
                Console.WriteLine("5.- Obtener mayor Calificación de Estudiante");
                Console.WriteLine("6.- Obtener mayor Calificación de Materia");
                Console.WriteLine("7.- Obtener mayor Calificación de Periodo Escolar");
                Console.WriteLine("0.- Salir");
                Console.Write("\nOpción ? ");
                opcion = UInt16.Parse(Console.ReadLine());

                switch (opcion)
                {
                    case 1: CapturarCubo(); break;
                    case 2: PromedioEstudiante(); break;
                    case 3: PromedioMateria(); break;
                    case 4: PromedioPeriodo(); break;
                    case 5: MayorCalificacionEstudiante(); break;
                    case 6: MayorCalificacionMateria(); break;
                    case 7: MayorCalificacionPeriodoEscolar(); break;
                }
            } while (opcion != 0);
        }

        public static void CapturarCubo()
        {
            Console.Clear();
            Console.WriteLine("CAPTURAR DATOS DEL ARREGLO TRIDIMENSIONAL\n");

            // Captura y verifica la cantidad de Estudiantes
            do
            {
                Console.Write("\nCantidad de estudiantes (renglones) ? ");
                GrupoDeEstudiantes.Estudiantes = int.Parse(Console.ReadLine());

                if (GrupoDeEstudiantes.Estudiantes < 1 || GrupoDeEstudiantes.Estudiantes > GrupoDeEstudiantes.MaxEstudiantes())
                    Console.WriteLine("Capture un valor entre 1 y " + GrupoDeEstudiantes.MaxEstudiantes());
            } while (GrupoDeEstudiantes.Estudiantes < 1 || GrupoDeEstudiantes.Estudiantes > GrupoDeEstudiantes.MaxEstudiantes());

            // Captura y verifica la cantidad de Materias
            do
            {
                Console.Write("\nCantidad de materias o cursos (columnas) ? ");
                GrupoDeEstudiantes.Materias = int.Parse(Console.ReadLine());

                if (GrupoDeEstudiantes.Materias < 1 || GrupoDeEstudiantes.Materias > GrupoDeEstudiantes.MaxMaterias())
                    Console.WriteLine("Capture un valor entre 1 y " + GrupoDeEstudiantes.MaxMaterias());
            } while (GrupoDeEstudiantes.Materias < 1 || GrupoDeEstudiantes.Materias > GrupoDeEstudiantes.MaxMaterias());

            // Captura y verifica la cantidad de Periodos Escolares
            do
            {
                Console.Write("\nCantidad de periodos escolares (planos) ? ");
                GrupoDeEstudiantes.Periodos = int.Parse(Console.ReadLine());

                if (GrupoDeEstudiantes.Periodos < 1 || GrupoDeEstudiantes.Periodos > GrupoDeEstudiantes.MaxPeriodos())
                    Console.WriteLine("Capture un valor entre 1 y " + GrupoDeEstudiantes.MaxPeriodos());
            } while (GrupoDeEstudiantes.Periodos < 1 || GrupoDeEstudiantes.Periodos > GrupoDeEstudiantes.MaxPeriodos());


            // Ciclos anidados para la captura de las calificaciones y almacenarlas en el cubo del objeto
            for(int r=0; r<= GrupoDeEstudiantes.Estudiantes-1; r++)
                for(int c=0; c<= GrupoDeEstudiantes.Materias-1; c++)
                    for (int p = 0; p <= GrupoDeEstudiantes.Periodos - 1; p++)
                    {
                        Console.Write("Calificación del Estudiante: " + r + ", Materia: " + c + ", Periodo: " + p + " ? ");
                        GrupoDeEstudiantes[r, c, p] = double.Parse(Console.ReadLine());
                    }
        }

        public static void PromedioEstudiante()
        {
            int Estudiante;
            Console.Clear();
            Console.WriteLine("CALCULAR PROMEDIO DE ESTUDIANTE\n");

            if (!GrupoDeEstudiantes.EstaVacio()) // Si no está vacío ...
            {
                // Captura y verifica el número del estudiante (renglón) deseado
                do
                {
                    Console.Write("\nAnote el número de estudiante (renglón) ? ");
                    Estudiante = int.Parse(Console.ReadLine());

                    if (Estudiante < 0 || Estudiante > GrupoDeEstudiantes.Estudiantes-1)
                        Console.WriteLine("Capture un valor entre 0 y " + (GrupoDeEstudiantes.Estudiantes-1).ToString());
                } while (Estudiante < 0 || Estudiante > GrupoDeEstudiantes.Estudiantes - 1);

                // Invoca el método correspondiente
                double Promedio = GrupoDeEstudiantes.CalcularPromedioEstudiante(Estudiante);

                Console.WriteLine("\nEl promedio de calificaciones del estudiante " + Estudiante + " es " + Promedio);
            }
            else
                Console.WriteLine("Arreglo tridimensional vacío. Primero debe capturar sus datos ...");
            Console.ReadKey();
        }

        public static void PromedioMateria()
        {
            int Materia;
            Console.Clear();
            Console.WriteLine("CALCULAR PROMEDIO DE MATERIA\n");

            if (!GrupoDeEstudiantes.EstaVacio()) // Si no está vacío ...
            {
                // Captura y verifica el número de la materia (columna) deseada
                do
                {
                    Console.Write("\nAnote el número de materia (columna) ? ");
                    Materia = int.Parse(Console.ReadLine());

                    if (Materia < 0 || Materia > GrupoDeEstudiantes.Materias - 1)
                        Console.WriteLine("Capture un valor entre 0 y " + (GrupoDeEstudiantes.Materias-1).ToString());
                } while (Materia < 0 || Materia > GrupoDeEstudiantes.Materias - 1);

                // Invoca el método correspondiente
                double Promedio = GrupoDeEstudiantes.CalcularPromedioMateria(Materia);

                Console.WriteLine("\nEl promedio de calificaciones de la materia " + Materia + " es " + Promedio);
            }
            else
                Console.WriteLine("Arreglo tridimensional vacío. Primero debe capturar sus datos ...");
            Console.ReadKey();
        }

        public static void PromedioPeriodo()
        {
            int Periodo;
            Console.Clear();
            Console.WriteLine("CALCULAR PROMEDIO DE PERIODO ESCOLAR\n");

            if (!GrupoDeEstudiantes.EstaVacio())  // Si no está vacío ...
            {
                // Captura y verifica el número del periodo escolar (plano) deseado
                do
                {
                    Console.Write("\nAnote el número de periodo escolar (plano) ? ");
                    Periodo = int.Parse(Console.ReadLine());

                    if (Periodo < 0 || Periodo > GrupoDeEstudiantes.Periodos - 1)
                        Console.WriteLine("Capture un valor entre 0 y " + (GrupoDeEstudiantes.Periodos-1).ToString());
                } while (Periodo < 0 || Periodo > GrupoDeEstudiantes.Periodos - 1);

                // Invoca el método correspondiente
                double Promedio = GrupoDeEstudiantes.CalcularPromedioPeriodo(Periodo);

                Console.WriteLine("\nEl promedio de calificaciones del periodo escolar " + Periodo + " es " + Promedio);
            }
            else
                Console.WriteLine("Arreglo tridimensional vacío. Primero debe capturar sus datos ...");
            Console.ReadKey();
        }

        public static void MayorCalificacionEstudiante()
        {
            int Estudiante, Materia=0, Periodo=0;
            double CalificacionMayor=0.0;

            Console.Clear();
            Console.WriteLine("OBTENER LA MAYOR CALIFICACIÓN DE UN ESTUDIANTE\n");

            if (!GrupoDeEstudiantes.EstaVacio())  // Si no está vacío ...
            {
                // Captura y verifica el número de estudiante (renglón) deseado
                do
                {
                    Console.Write("\nAnote el número de estudiante (renglón) ? ");
                    Estudiante = int.Parse(Console.ReadLine());

                    if (Estudiante < 0 || Estudiante > GrupoDeEstudiantes.Estudiantes - 1)
                        Console.WriteLine("Capture un valor entre 0 y " + (GrupoDeEstudiantes.Estudiantes - 1).ToString());
                } while (Estudiante < 0 || Estudiante > GrupoDeEstudiantes.Estudiantes - 1);

                // Invoca el método correspondiente
                GrupoDeEstudiantes.ObtenerMayorCalificacionEstudiante(Estudiante, ref Materia, ref Periodo, ref CalificacionMayor);

                Console.WriteLine("\nCalificación mayor: " + CalificacionMayor + "\nEstudiante: "+Estudiante+"\nMateria: " + Materia + "\nPeriodo Escolar: " + Periodo);
            }
            else
                Console.WriteLine("Arreglo tridimensional vacío. Primero debe capturar sus datos ...");
            Console.ReadKey();
        }

        public static void MayorCalificacionMateria()
        {
            int Estudiante=0, Materia, Periodo = 0;
            double CalificacionMayor = 0.0;

            Console.Clear();
            Console.WriteLine("OBTENER LA MAYOR CALIFICACIÓN DE UNA MATERIA\n");

            if (!GrupoDeEstudiantes.EstaVacio())  // Si no está vacío ...
            {
                // Captura y verifica el número de la materia (columna) deseada
                do
                {
                    Console.Write("\nAnote el número de materia (columna) ? ");
                    Materia = int.Parse(Console.ReadLine());

                    if (Materia < 0 || Materia > GrupoDeEstudiantes.Materias - 1)
                        Console.WriteLine("Capture un valor entre 0 y " + (GrupoDeEstudiantes.Materias - 1).ToString());
                } while (Materia < 0 || Materia > GrupoDeEstudiantes.Materias - 1);

                // Se invoca el método correspondiente
                GrupoDeEstudiantes.ObtenerMayorCalificacionMateria(Materia, ref Estudiante, ref Periodo, ref CalificacionMayor);

                Console.WriteLine("\nCalificación mayor: " + CalificacionMayor + "\nEstudiante: " + Estudiante + "\nMateria: " + Materia + "\nPeriodo Escolar: " + Periodo);
            }
            else
                Console.WriteLine("Arreglo tridimensional vacío. Primero debe capturar sus datos ...");
            Console.ReadKey();
        }

        public static void MayorCalificacionPeriodoEscolar()
        {
            int Estudiante = 0, Materia=0, Periodo;
            double CalificacionMayor = 0.0;

            Console.Clear();
            Console.WriteLine("OBTENER LA MAYOR CALIFICACIÓN DE UN PERIODO ESCOLAR\n");

            if (!GrupoDeEstudiantes.EstaVacio())  // Si no está vacío ...
            {
                // Captura y verifica el número de periodo escolar (plano)
                do
                {
                    Console.Write("\nAnote el número de periodo escolar (plano) ? ");
                    Periodo = int.Parse(Console.ReadLine());

                    if (Periodo < 0 || Periodo > GrupoDeEstudiantes.Periodos - 1)
                        Console.WriteLine("Capture un valor entre 0 y " + (GrupoDeEstudiantes.Periodos - 1).ToString());
                } while (Periodo < 0 || Periodo > GrupoDeEstudiantes.Periodos - 1);

                // Se invoca el método correspondiente
                GrupoDeEstudiantes.ObtenerMayorCalificacionPeriodoEscolar(Periodo, ref Estudiante, ref Materia, ref CalificacionMayor);

                Console.WriteLine("\nCalificación mayor: " + CalificacionMayor + "\nEstudiante: " + Estudiante + "\nMateria: " + Materia + "\nPeriodo Escolar: " + Periodo);
            }
            else
                Console.WriteLine("Arreglo tridimensional vacío. Primero debe capturar sus datos ...");
            Console.ReadKey();
        }

    }
}

1 comentario:

  1. Muy buen post, y si quisiera en c# ingresar nombre de alumnos con sus cursos secciones años y notas y que al final me muestre el promedio por seccion año y curso. como lo haria te agradeceria si resuelves mi duda. gracias

    ResponderBorrar

Es muy importante tu comentarios: