public partial class Form1 : Form { public Form1() { InitializeComponent(); Cuarto = new Almacen(3, 5); Cuarto.AgregarCaja(1, "RED"); Cuarto.AgregarCaja(2, "RED"); Cuarto.AgregarCaja(3, "RED"); Cuarto.AgregarCaja(4, "RED"); Cuarto.AgregarCaja(5, "RED"); Cuarto.AgregarCaja(6, "RED"); Cuarto.AgregarCaja(7, "RED"); Cuarto.AgregarCaja(8, "RED"); Cuarto.AgregarCaja(9, "RED"); Cuarto.AgregarCaja(10, "RED"); Cuarto.AgregarCaja(11, "RED"); Cuarto.AgregarCaja(12, "RED"); Cuarto.AgregarCaja(13, "RED"); Cuarto.RemoverCaja(55); } public Almacen Cuarto; } public class Almacen { public Contenedor[] Contenedores; public Almacen(int Cantidad, int Capacidad) { Contenedores = new Contenedor[Cantidad]; for (int i = 0; i < Cantidad; i++) { Contenedores[i] = new Contenedor(Capacidad); } } public void AgregarCaja(int ID,string Nombre) { Caja C = new Caja(Nombre, ID); for (int i = 0; i < Contenedores.Length; i++) { if (Contenedores[i].Count < Contenedores[i].Cap) { Contenedores[i].Añadir(C); return; } } } public void RemoverCaja(int ID) { if (VerificarDisponibilidad(ID)) { int ContenedorOrigen = Buscar(ID); if (ContenedorOrigen != -1) { Caja[] Reacomodo = Contenedores[ContenedorOrigen].Quitar(ID); if (Reacomodo.Length > 0) for (int R = 0; R < Reacomodo.Length; R++) { for (int i = 0; i < Contenedores.Length; i++) { if (i != ContenedorOrigen) { if (Contenedores[i].Count < Contenedores[i].Cap) { Contenedores[i].Añadir(Reacomodo[R]); break; } } } } } } } public int Buscar(int ID) { bool busqueda = false; for (int i = 0; i < Contenedores.Length; i++) { busqueda = Contenedores[i].Buscar(ID); if (busqueda == true) { return i; } } return -1; } public bool VerificarDisponibilidad(int ID) { int disponiblidad = 0; int Contenedor = -1; for (int i = 0; i < Contenedores.Length; i++) { if (Contenedores[i].Buscar(ID) == false) { disponiblidad = disponiblidad + (Contenedores[i].Cap - Contenedores[i].Count); } else { Contenedor = i; } } if (Contenedor != -1 && Contenedores[Contenedor].Disponibilidad(ID) <= disponiblidad) return true; return false; } } public class Contenedor { public Caja[] Cajas; public int Cap = 0; public int Count = 0; public Contenedor(int Capacidad) { Cajas = new Caja[Capacidad]; Cap = Capacidad; } public void Añadir( Caja Obj) { if (Count < Cap) { Caja[] newCajas = new Caja[Cap]; newCajas[0] = Obj; int _Count = 1; for (int i = 0; i < Cajas.Length -1; i++) { newCajas[_Count] = Cajas[i]; if (Cajas[i] != null) _Count++; } Cajas = newCajas; Count++; } } public Caja[] Quitar(int ID) { Caja[] Reacomodo = null; int Disp = Disponibilidad(ID); if (Disp != -1) { Reacomodo = new Caja[Disp]; for (int i = 0; i < Cajas.Length; i++) { if (i <= Disp) { if (Cajas[i].ID != ID) { Reacomodo[i] = Cajas[i]; Cajas[i] = null; Count--; } } if (Cajas[i] != null && Cajas[i].ID == ID) { Caja[] NewCajas = new Caja[Cap]; Cajas[i] = null; int _count = 0; for (int x = 0; x < Cap; x++) { NewCajas[_count] = Cajas[x]; if (Cajas[x] != null) _count++; } Cajas = NewCajas; Count--; return Reacomodo; } } } return Reacomodo; } public int Disponibilidad(int ID) { for (int i = 0; i < Cajas.Length; i++) { if (Cajas[i].ID == ID) { return i; } } return -1; } public bool Buscar(int ID) { for (int i = 0; i < Cap; i++) { if (Cajas[i] != null && Cajas[i].ID == ID) return true; } return false; } } public class Caja { public string Nombre = ""; public int ID = 0; public Caja(string nombre, int id) { Nombre = nombre; ID = id; } }