//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();
}
}
}
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