B.1. CÓDIGO ITERACION.CS 3 B.2. CÓDIGO LISTAMAQUINAS.CS 4 B.3. CÓDIGO LISTAOPERACION.CS 6 B.4. CÓDIGO LISTAPIEZAS.CS 8 B.5. CÓDIGO MAQUINARIA.

Tamaño: px
Comenzar la demostración a partir de la página:

Download "B.1. CÓDIGO ITERACION.CS 3 B.2. CÓDIGO LISTAMAQUINAS.CS 4 B.3. CÓDIGO LISTAOPERACION.CS 6 B.4. CÓDIGO LISTAPIEZAS.CS 8 B.5. CÓDIGO MAQUINARIA."

Transcripción

1 Algoritmo de dispatching para la programación de la producción en una planta de fabricación Pág. 1 Indice ANEXO B. Código fuente B.1. CÓDIGO ITERACION.CS 3 B.2. CÓDIGO LISTAMAQUINAS.CS 4 B.3. CÓDIGO LISTAOPERACION.CS 6 B.4. CÓDIGO LISTAPIEZAS.CS 8 B.5. CÓDIGO MAQUINARIA.CS 11 B.6. CÓDIGO MAQUINARIAFORM.CS 13 B.7. CÓDIGO MAQUINARIAFORM.DESIGNER.CS 15 B.8. CÓDIGO OPERACION.CS 18 B.9. CÓDIGO PIEZA.CS 21 B.10. CÓDIGO PIEZAFORM.CS 26 B.11. CÓDIGO PIEZAFORMDESIGNER.CS 29 B.12. CÓDIGO PRINCIPAL.CS 35 B.13. CÓDIGO PRINCIPAL.DESIGNER.CS 48 B.14. CÓDIGO PROGRAM.CS 53 B.15. CÓDIGO SOLUCION.CS 54

2

3 Algoritmo de dispatching para la programación de la producción en una planta de fabricación Pág. 3 B.1. Código Iteracion.cs using System; using System.Collections.Generic; using System.Text; namespace Planificador public class Proceso Operacion _Op; int _Iteracion; public Operacion Op get return _Op; set _Op = value; public int Iteracion get return _Iteracion; set _Iteracion = value; public Proceso(Operacion o, int it) _Op = new Operacion(o); _Iteracion = it;

4 Pág. 4 Anexo B B.2. Código ListaMaquinas.cs using System; using System.Collections.Generic; using System.Text; namespace Planificador public class ListaMaquinas List<Maquinaria> _LMaquinaria; public List<Maquinaria> LMaquinaria get return _LMaquinaria; set _LMaquinaria=value; public ListaMaquinas() _LMaquinaria = new List<Maquinaria>(); public ListaMaquinas(List<Maquinaria> Lm) _LMaquinaria = new List<Maquinaria>(Lm); public Maquinaria Find(Maquinaria m) return LMaquinaria.Find(delegate(Maquinaria Maq) return m.nombre==maq.nombre;); public Maquinaria Find(string m) Maquinaria resultado=null; int indice = 0; while (indice < LMaquinaria.Count) if (LMaquinaria[indice].Nombre == m) resultado = LMaquinaria[indice]; indice++; return resultado; public void Inicializar() int indice = 0; while (indice < _LMaquinaria.Count) _LMaquinaria[indice].Tiempo = 0; indice++;

5 Algoritmo de dispatching para la programación de la producción en una planta de fabricación Pág. 5

6 Pág. 6 Anexo B B.3. Código ListaOperacion.cs using System; using System.Collections.Generic; using System.Text; namespace Planificador public class ListaOperacion List<Operacion> _LOperacion; public List<Operacion> LOperacion get return _LOperacion; set _LOperacion = value; public ListaOperacion() _LOperacion = new List<Operacion>(); public ListaOperacion(List<Operacion> Lo) _LOperacion = new List<Operacion>(Lo); public ListaOperacion(ListaOperacion LOp) _LOperacion = LOp._LOperacion; public ListaOperacion OperacionesActivas() int indice = 0, operacion = -1; ListaOperacion LResultado=new ListaOperacion(); while (indice < _LOperacion.Count) if (!_LOperacion[indice].Finalizado) if (operacion == _LOperacion[indice].Orden operacion == -1) operacion = _LOperacion[indice].Orden; LResultado._LOperacion.Add(LOperacion[indice]); indice++; return LResultado; public void Concatenar(ListaOperacion LOp) int indice = 0;

7 Algoritmo de dispatching para la programación de la producción en una planta de fabricación Pág. 7 while (indice < LOp._LOperacion.Count) _LOperacion.Add(LOp.LOperacion[indice]); indice++; public Operacion Find(Operacion op) return _LOperacion.Find(delegate(Operacion Oper) return (op.orden == Oper.Orden && op.maquina == Oper.Maquina); );

8 Pág. 8 Anexo B B.4. Código ListaPiezas.cs using System; using System.Collections.Generic; using System.Text; namespace Planificador public class ListaPiezas List<Pieza> _LPiezas; public List<Pieza> LPiezas get return _LPiezas; set _LPiezas = value; public ListaPiezas() _LPiezas = new List<Pieza>(); public ListaPiezas(ListaPiezas Lp) _LPiezas = new List<Pieza>(Lp._LPiezas); public ListaPiezas(List<Pieza> Lp) _LPiezas = new List<Pieza>(Lp); public ListaOperacion OperacionesCandidatas() int indice = 0; ListaOperacion LResultado=new ListaOperacion(), LOpAux; while (indice < _LPiezas.Count) LOpAux = _LPiezas[indice].LOperacion.OperacionesActivas(); if (LOpAux!= null) LResultado.Concatenar(LOpAux); LOpAux = null; indice++; return LResultado; public Pieza Find(Pieza p) return _LPiezas.Find(delegate(Pieza pieza) return pieza.nombre==p.nombre;);

9 Algoritmo de dispatching para la programación de la producción en una planta de fabricación Pág. 9 public Pieza Find(string p) return _LPiezas.Find(delegate(Pieza pieza) return pieza.nombre == p; ); public bool Finalizado() bool fin=true; int indice = 0; while (indice < _LPiezas.Count) if (!_LPiezas[indice].Finalizado()) fin = false; indice++; return fin; public Pieza SelecctionarPieza() Pieza p_aux; Pieza p=null; int indice = 0; while (indice < LPiezas.Count) p_aux = LPiezas[indice]; if (!p_aux.finalizado()) if (p == null) p = p_aux; p = Criterios(p, p_aux); indice = indice + 1; return p; private Pieza Criterios(Pieza p, Pieza p_aux) double a = p.restraso / p.cantidad * 100; double b = p_aux.restraso / p_aux.cantidad * 100; if (a < b) return p; if (a > b) return p_aux; return p;

10 Pág. 10 Anexo B

11 Algoritmo de dispatching para la programación de la producción en una planta de fabricación Pág. 11 B.5. Código Maquinaria.cs using System; using System.Collections.Generic; using System.Text; namespace Planificador public class Maquinaria string _Nombre; double _Tiempo; double _Preparacion; #region Propiedades public string Nombre get return _Nombre; set _Nombre = value; public double Tiempo get return _Tiempo; set _Tiempo = value; public double Preparacion get return _Preparacion; set _Preparacion = value; #endregion public Maquinaria(string nombre, double tiempo, double preparacion) _Nombre = nombre; _Tiempo = tiempo; _Preparacion = preparacion;

12 Pág. 12 Anexo B

13 Algoritmo de dispatching para la programación de la producción en una planta de fabricación Pág. 13 B.6. Código MaquinariaForm.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace Planificador public partial class MaquinariaForm : Form public MaquinariaForm() InitializeComponent(); private void MaquinariaForm_Load(object sender, EventArgs e) if (Principal.LMaquinas!= null) TablaMaquinaria.DataSource = Principal.LMaquinas.LMaquinaria; TiempoTxt.Text = "0"; private void InsertarBtn_Click(object sender, EventArgs e) Maquinaria m; if (MaquinaTxt.Text!= "" && TiempoTxt.Text!= "" && PreparacionTxt.Text!= "") m = new Maquinaria((string)MaquinaTxt.Text, double.parse(tiempotxt.text), double.parse(preparaciontxt.text)); if (Principal.LMaquinas == null) Principal.LMaquinas = new ListaMaquinas(); if (Principal.LMaquinas.Find(m) == null) Principal.LMaquinas.LMaquinaria.Add(m); TablaMaquinaria.DataSource = null; TablaMaquinaria.DataSource = Principal.LMaquinas.LMaquinaria; MaquinaTxt.Text = ""; TiempoTxt.Text = "0"; MessageBox.Show("Rellene los campos por favor","error!"); private void TablaMaquinaria_CellContentClick(object sender, DataGridViewCellEventArgs e) private void BorrarBtn_Click(object sender, EventArgs e) Principal.LMaquinas.LMaquinaria.Clear();

14 Pág. 14 Anexo B TablaMaquinaria.DataSource = null; TablaMaquinaria.DataSource=Principal.LMaquinas.LMaquinaria;

15 Algoritmo de dispatching para la programación de la producción en una planta de fabricación Pág. 15 B.7. Código MaquinariaForm.Designer.cs namespace Planificador partial class MaquinariaForm / <summary> / Required designer variable. / </summary> private System.ComponentModel.IContainer components = null; / <summary> / Clean up any resources being used. / </summary> / <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> protected override void Dispose(bool disposing) if (disposing && (components!= null)) components.dispose(); base.dispose(disposing); #region Windows Form Designer generated code / <summary> / Required method for Designer support - do not modify / the contents of this method with the code editor. / </summary> private void InitializeComponent() this.maquinatxt = new System.Windows.Forms.TextBox(); this.tiempotxt = new System.Windows.Forms.TextBox(); this.label1 = new System.Windows.Forms.Label(); this.label2 = new System.Windows.Forms.Label(); this.insertarbtn = new System.Windows.Forms.Button(); this.borrarbtn = new System.Windows.Forms.Button(); this.tablamaquinaria = new System.Windows.Forms.DataGridView(); this.label3 = new System.Windows.Forms.Label(); this.preparaciontxt = new System.Windows.Forms.TextBox(); ((System.ComponentModel.ISupportInitialize)(this.TablaMaquinaria)).BeginInit(); this.suspendlayout(); MaquinaTxt this.maquinatxt.location = new System.Drawing.Point(181, 196); this.maquinatxt.name = "MaquinaTxt"; this.maquinatxt.size = new System.Drawing.Size(139, 20); this.maquinatxt.tabindex = 2; TiempoTxt this.tiempotxt.location = new System.Drawing.Point(181, 231); this.tiempotxt.name = "TiempoTxt"; this.tiempotxt.size = new System.Drawing.Size(139, 20); this.tiempotxt.tabindex = 3; label1 this.label1.autosize = true;

16 Pág. 16 Anexo B this.label1.location = new System.Drawing.Point(59, 199); this.label1.name = "label1"; this.label1.size = new System.Drawing.Size(51, 13); this.label1.tabindex = 4; this.label1.text = "Máquina:"; label2 this.label2.autosize = true; this.label2.location = new System.Drawing.Point(59, 238); this.label2.name = "label2"; this.label2.size = new System.Drawing.Size(73, 13); this.label2.tabindex = 5; this.label2.text = "Tiempo Inicio:"; InsertarBtn this.insertarbtn.location = new System.Drawing.Point(256, 314); this.insertarbtn.name = "InsertarBtn"; this.insertarbtn.size = new System.Drawing.Size(109, 34); this.insertarbtn.tabindex = 6; this.insertarbtn.text = "Añadir"; this.insertarbtn.usevisualstylebackcolor = true; this.insertarbtn.click += new System.EventHandler(this.InsertarBtn_Click); BorrarBtn this.borrarbtn.location = new System.Drawing.Point(12, 314); this.borrarbtn.name = "BorrarBtn"; this.borrarbtn.size = new System.Drawing.Size(109, 34); this.borrarbtn.tabindex = 7; this.borrarbtn.text = "Borrar Lista"; this.borrarbtn.usevisualstylebackcolor = true; this.borrarbtn.click += new System.EventHandler(this.BorrarBtn_Click); TablaMaquinaria this.tablamaquinaria.columnheadersheightsizemode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; this.tablamaquinaria.location = new System.Drawing.Point(12, 12); this.tablamaquinaria.name = "TablaMaquinaria"; this.tablamaquinaria.size = new System.Drawing.Size(353, 163); this.tablamaquinaria.tabindex = 8; label3 this.label3.autosize = true; this.label3.location = new System.Drawing.Point(59, 271); this.label3.name = "label3"; this.label3.size = new System.Drawing.Size(105, 13); this.label3.tabindex = 10; this.label3.text = "Tiempo Preparación:"; PreparacionTxt this.preparaciontxt.location = new System.Drawing.Point(181, 268); this.preparaciontxt.name = "PreparacionTxt"; this.preparaciontxt.size = new System.Drawing.Size(139, 20); this.preparaciontxt.tabindex = 9; MaquinariaForm this.autoscaledimensions = new System.Drawing.SizeF(6F, 13F); this.autoscalemode = System.Windows.Forms.AutoScaleMode.Font;

17 Algoritmo de dispatching para la programación de la producción en una planta de fabricación Pág. 17 this.clientsize = new System.Drawing.Size(377, 360); this.controls.add(this.label3); this.controls.add(this.preparaciontxt); this.controls.add(this.tablamaquinaria); this.controls.add(this.borrarbtn); this.controls.add(this.insertarbtn); this.controls.add(this.label2); this.controls.add(this.label1); this.controls.add(this.tiempotxt); this.controls.add(this.maquinatxt); this.name = "MaquinariaForm"; this.text = "Maquinaria"; this.load += new System.EventHandler(this.MaquinariaForm_Load); ((System.ComponentModel.ISupportInitialize)(this.TablaMaquinaria)).EndInit(); this.resumelayout(false); this.performlayout(); #endregion private System.Windows.Forms.TextBox MaquinaTxt; private System.Windows.Forms.TextBox TiempoTxt; private System.Windows.Forms.Label label1; private System.Windows.Forms.Label label2; private System.Windows.Forms.Button InsertarBtn; private System.Windows.Forms.Button BorrarBtn; private System.Windows.Forms.DataGridView TablaMaquinaria; private System.Windows.Forms.Label label3; private System.Windows.Forms.TextBox PreparacionTxt;

18 Pág. 18 Anexo B B.8. Código Operacion.cs using System; using System.Collections.Generic; using System.Text; namespace Planificador public class Operacion int _Orden; string _Maquina; double _Tiempo; bool _Finalizado; double _Tiempo_Inicio; double _Tiempo_Fin; string _Pieza; #region Propiedades public int Orden get return _Orden; set _Orden = value; public string Maquina get return _Maquina; set _Maquina = value; public double Tiempo get return _Tiempo; set _Tiempo = value; public bool Finalizado get return _Finalizado;

19 Algoritmo de dispatching para la programación de la producción en una planta de fabricación Pág. 19 set _Finalizado = value; public double Tiempo_Inicio get return _Tiempo_Inicio; set _Tiempo_Inicio = value; public double Tiempo_Fin get return _Tiempo_Fin; set _Tiempo_Fin = value; public string Pieza get return _Pieza; set _Pieza = value; #endregion public Operacion(int orden, string maquina, double tiempo, string pieza) _Orden = orden; _Maquina = maquina; _Tiempo = tiempo; _Pieza = pieza; _Finalizado = false; _Tiempo_Inicio = 0; _Tiempo_Fin = 0; public Operacion(Operacion o) _Orden = o._orden; _Maquina = o._maquina; _Tiempo = o._tiempo; _Pieza = o._pieza; _Finalizado = o._finalizado; _Tiempo_Inicio = o._tiempo_inicio;

20 Pág. 20 Anexo B _Tiempo_Fin = o._tiempo_fin;

21 Algoritmo de dispatching para la programación de la producción en una planta de fabricación Pág. 21 B.9. Código Pieza.cs using System; using System.Collections.Generic; using System.Text; namespace Planificador public class Pieza string _Nombre; int _Cantidad; int _DRetraso; double _Demanda_Mensual; double _Duracion_Total; DateTime _Fecha; ListaOperacion _LOperacion; double _Retraso; Operacion _Operacion_Anterior; #region Propiedades public string Nombre get return _Nombre; set _Nombre=value; public int Cantidad get return _Cantidad; set _Cantidad = value; public int DRetraso get return _DRetraso; set _DRetraso = value; public double Demanda_Mensual get

22 Pág. 22 Anexo B return _Demanda_Mensual; set _Demanda_Mensual = value; public DateTime Fecha get return _Fecha; set _Fecha = value; public double Duracion_Total get return _Duracion_Total; set _Duracion_Total = value; public ListaOperacion LOperacion get return _LOperacion; set _LOperacion = value; public double Restraso get return _Retraso; set _Retraso = value; public Operacion Operacion_anterior get return _Operacion_Anterior;

23 Algoritmo de dispatching para la programación de la producción en una planta de fabricación Pág. 23 set _Operacion_Anterior = value; #endregion public Pieza(string nombre, int cantidad, int d_retraso, double demanda, DateTime fecha, double retraso, ListaOperacion Loperacion) _Nombre = nombre; _Cantidad = cantidad; _DRetraso = d_retraso; _Demanda_Mensual = demanda; _Fecha = fecha; _Retraso = retraso; _LOperacion = Loperacion; _Operacion_Anterior = null; _Duracion_Total = DuracionPendiente(); public void Inicializar() int indice = 0; _Operacion_Anterior = null; while (indice < LOperacion.LOperacion.Count) LOperacion.LOperacion[indice].Finalizado = false; LOperacion.LOperacion[indice].Tiempo_Fin = 0; LOperacion.LOperacion[indice].Tiempo_Inicio = 0; indice++; _Duracion_Total = DuracionPendiente(); private double DuracionPendiente() int indice = 0, orden = 1; double duracion = 0, duracion_pendiente = 0; while (indice < _LOperacion.LOperacion.Count) if (orden == _LOperacion.LOperacion[indice].Orden) if (_LOperacion.LOperacion[indice].Tiempo > duracion) duracion = _LOperacion.LOperacion[indice].Tiempo; duracion_pendiente = duracion_pendiente + duracion * _Cantidad; orden = _LOperacion.LOperacion[indice].Orden; duracion = _LOperacion.LOperacion[indice].Tiempo; indice++; duracion_pendiente = duracion_pendiente + duracion * _Cantidad; return duracion_pendiente; public bool Finalizado()

24 Pág. 24 Anexo B int indice = 0; Operacion op_aux; bool fin = false; bool parar = false; if (_Operacion_Anterior!= null) op_aux = _Operacion_Anterior; while (indice < LOperacion.LOperacion.Count &&!parar) if (LOperacion.LOperacion[indice].Orden <= op_aux.orden) LOperacion.LOperacion[indice].Finalizado = true; parar = true; indice++; if (indice == LOperacion.LOperacion.Count &&!parar) fin = true; return fin; public Operacion EjecutarOperacion() int indice = 0; Operacion op=null; Operacion op_aux; Maquinaria m, m1; if (_Operacion_Anterior == null) op = LOperacion.LOperacion[indice]; while (indice < LOperacion.LOperacion.Count) op_aux = LOperacion.LOperacion[indice]; if (op.orden == LOperacion.LOperacion[indice].Orden) m = Principal.LMaquinas.Find(op_aux.Maquina); m1 = Principal.LMaquinas.Find(op.Maquina); if ((m.tiempo + op_aux.tiempo) < (m1.tiempo + op.tiempo)) op = op_aux; indice++; op=_operacion_anterior; while (LOperacion.LOperacion[indice].Orden <= op.orden && indice < LOperacion.LOperacion.Count) indice++; op=loperacion.loperacion[indice]; while (indice < LOperacion.LOperacion.Count) op_aux = LOperacion.LOperacion[indice];

25 Algoritmo de dispatching para la programación de la producción en una planta de fabricación Pág. 25 if (op.orden == LOperacion.LOperacion[indice].Orden) m = Principal.LMaquinas.Find(op_aux.Maquina); m1 = Principal.LMaquinas.Find(op.Maquina); if ((m.tiempo + op_aux.tiempo) < (m1.tiempo + op.tiempo)) op = op_aux; indice++; if (_Operacion_Anterior == null) op.tiempo_inicio = Principal.LMaquinas.Find(op.Maquina).Tiempo; op.tiempo_fin = op.tiempo_inicio + op.tiempo; Principal.LMaquinas.Find(op.Maquina).Tiempo = op.tiempo_fin; op.finalizado = true; _Operacion_Anterior = op; if (_Operacion_Anterior.Maquina == op.maquina) op.tiempo_inicio = Math.Max(Principal.LMaquinas.Find(op.Maquina).Tiempo,_Operacion_Anterior.Tiempo_Fin); op.tiempo_fin = op.tiempo_inicio + op.tiempo; Principal.LMaquinas.Find(op.Maquina).Tiempo = op.tiempo_fin; op.finalizado = true; _Operacion_Anterior = op; if (op.tiempo < _Operacion_Anterior.Tiempo) op.tiempo_inicio = _Operacion_Anterior.Tiempo_Fin - op.tiempo + (( * _Operacion_Anterior.Tiempo) / 60); op.tiempo_fin = op.tiempo_inicio + op.tiempo; Principal.LMaquinas.Find(op.Maquina).Tiempo = op.tiempo_fin; op.finalizado = true; _Operacion_Anterior = op; op.tiempo_inicio = _Operacion_Anterior.Tiempo_Inicio + (( * _Operacion_Anterior.Tiempo) / 60); op.tiempo_fin = op.tiempo_inicio + op.tiempo; Principal.LMaquinas.Find(op.Maquina).Tiempo = op.tiempo_fin; op.finalizado = true; _Operacion_Anterior = op; return (op);

26 Pág. 26 Anexo B B.10. Código PiezaForm.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace Planificador public partial class PiezaForm : Form private static ListaOperacion LOperaciones; public PiezaForm() InitializeComponent(); private void PiezaForm_Load(object sender, EventArgs e) if (Principal.LPiezas.LPiezas.Count > 0) NombreCmb.DataSource = Principal.LPiezas.LPiezas; NombreCmb.DisplayMember = "Nombre"; NombreCmb.ValueMember = "Nombre"; MaquinaCmb.DataSource = Principal.LMaquinas.LMaquinaria; MaquinaCmb.DisplayMember = "Nombre"; MaquinaCmb.ValueMember = "Nombre"; private void NombreCmb_SelectedIndexChanged(object sender, EventArgs e) if (Principal.LPiezas!= null) Pieza p = (Pieza)NombreCmb.SelectedItem; if (Principal.LPiezas.Find(p)!= null) CantidadTxt.Text = p.cantidad.tostring(); DRetrasoTxt.Text = p.dretraso.tostring(); DemandaTxt.Text = p.demanda_mensual.tostring(); RetrasoTxt.Text = p.restraso.tostring(); Fecha.Text = p.fecha.tostring(); LOperaciones = new ListaOperacion(p.LOperacion.LOperacion); TablaOperacion.DataSource = null; TablaOperacion.DataSource = LOperaciones.LOperacion; private void InsertarOrdenBtn_Click(object sender, EventArgs e) if (OrdenTxt.Text!= "" && MaquinaCmb.Text!= "" && TiempoTxt.Text!= "" && NombreCmb.Text!= "") Operacion op; op = new Operacion(int.Parse(OrdenTxt.Text), MaquinaCmb.Text, double.parse(tiempotxt.text), NombreCmb.Text); if (LOperaciones!= null)

27 Algoritmo de dispatching para la programación de la producción en una planta de fabricación Pág. 27 if (LOperaciones.Find(op) == null) LOperaciones.LOperacion.Add(op); TablaOperacion.DataSource = null; TablaOperacion.DataSource = LOperaciones.LOperacion; TablaOperacion.Columns["Maquina"].ToString(); LOperaciones = new ListaOperacion(); LOperaciones.LOperacion.Add(op); TablaOperacion.DataSource = null; TablaOperacion.DataSource = LOperaciones.LOperacion; TablaOperacion.Columns["Maquina"].ToString(); MessageBox.Show("Rellene los campos orden máquina y tiempo", "ERROR!"); private void InsertarBtn_Click(object sender, EventArgs e) Pieza p; Pieza b; if (LOperaciones.LOperacion!=null && NombreCmb.Text!= "" && CantidadTxt.Text!= "" && DRetrasoTxt.Text!= "") p = new Pieza(NombreCmb.Text, int.parse(cantidadtxt.text), int.parse(dretrasotxt.text), double.parse(demandatxt.text), DateTime.Parse(Fecha.Text), double.parse(retrasotxt.text), LOperaciones); if (Principal.LPiezas.LPiezas!= null) b = Principal.LPiezas.Find(p); if (b!= null) b.dretraso = int.parse(dretrasotxt.text); b.cantidad = int.parse(cantidadtxt.text); b.demanda_mensual = double.parse(demandatxt.text); b.fecha = DateTime.Parse(Fecha.Text); b.restraso = double.parse(retrasotxt.text); b.nombre = NombreCmb.Text; b.loperacion = LOperaciones; Principal.LPiezas.LPiezas.Add(p); NombreCmb.DataSource = null; NombreCmb.DataSource = Principal.LPiezas.LPiezas; NombreCmb.ValueMember = "Nombre"; NombreCmb.DisplayMember = "Nombre"; TablaOperacion.DataSource = null; LOperaciones.LOperacion.Clear(); Principal.LPiezas = new ListaPiezas(); Principal.LPiezas.LPiezas.Add(p); NombreCmb.DataSource = null; NombreCmb.DataSource = Principal.LPiezas.LPiezas;

28 Pág. 28 Anexo B NombreCmb.ValueMember = "Nombre"; NombreCmb.DisplayMember = "Nombre"; TablaOperacion.DataSource = null; LOperaciones.LOperacion.Clear(); MessageBox.Show("Debe rellenar todos los campos", "ERROR!"); private void BorrarLstBtn_Click(object sender, EventArgs e) TablaOperacion.DataSource = null; LOperaciones.LOperacion.Clear();

29 Algoritmo de dispatching para la programación de la producción en una planta de fabricación Pág. 29 B.11. Código PiezaFormDesigner.cs namespace Planificador partial class PiezaForm / <summary> / Required designer variable. / </summary> private System.ComponentModel.IContainer components = null; / <summary> / Clean up any resources being used. / </summary> / <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> protected override void Dispose(bool disposing) if (disposing && (components!= null)) components.dispose(); base.dispose(disposing); #region Windows Form Designer generated code / <summary> / Required method for Designer support - do not modify / the contents of this method with the code editor. / </summary> private void InitializeComponent() this.tablaoperacion = new System.Windows.Forms.DataGridView(); this.nombrecmb = new System.Windows.Forms.ComboBox(); this.label1 = new System.Windows.Forms.Label(); this.label2 = new System.Windows.Forms.Label(); this.cantidadtxt = new System.Windows.Forms.TextBox(); this.fecha = new System.Windows.Forms.DateTimePicker(); this.label3 = new System.Windows.Forms.Label(); this.dretrasotxt = new System.Windows.Forms.TextBox(); this.label4 = new System.Windows.Forms.Label(); this.operacionesgrp = new System.Windows.Forms.GroupBox(); this.borrarlstbtn = new System.Windows.Forms.Button(); this.insertarordenbtn = new System.Windows.Forms.Button(); this.label7 = new System.Windows.Forms.Label(); this.tiempotxt = new System.Windows.Forms.TextBox(); this.label6 = new System.Windows.Forms.Label(); this.maquinacmb = new System.Windows.Forms.ComboBox(); this.label5 = new System.Windows.Forms.Label(); this.ordentxt = new System.Windows.Forms.TextBox(); this.insertarbtn = new System.Windows.Forms.Button(); this.demandatxt = new System.Windows.Forms.TextBox(); this.label8 = new System.Windows.Forms.Label(); this.retrasotxt = new System.Windows.Forms.TextBox(); this.label9 = new System.Windows.Forms.Label(); ((System.ComponentModel.ISupportInitialize)(this.TablaOperacion)).BeginInit(); this.operacionesgrp.suspendlayout(); this.suspendlayout(); TablaOperacion

30 Pág. 30 Anexo B this.tablaoperacion.columnheadersheightsizemode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; this.tablaoperacion.location = new System.Drawing.Point(23, 19); this.tablaoperacion.name = "TablaOperacion"; this.tablaoperacion.size = new System.Drawing.Size(540, 132); this.tablaoperacion.tabindex = 0; NombreCmb this.nombrecmb.formattingenabled = true; this.nombrecmb.location = new System.Drawing.Point(107, 19); this.nombrecmb.name = "NombreCmb"; this.nombrecmb.size = new System.Drawing.Size(120, 21); this.nombrecmb.tabindex = 1; this.nombrecmb.selectedindexchanged += new System.EventHandler(this.NombreCmb_SelectedIndexChanged); label1 this.label1.autosize = true; this.label1.location = new System.Drawing.Point(21, 22); this.label1.name = "label1"; this.label1.size = new System.Drawing.Size(47, 13); this.label1.tabindex = 2; this.label1.text = "Nombre:"; label2 this.label2.autosize = true; this.label2.location = new System.Drawing.Point(21, 49); this.label2.name = "label2"; this.label2.size = new System.Drawing.Size(52, 13); this.label2.tabindex = 3; this.label2.text = "Cantidad:"; CantidadTxt this.cantidadtxt.location = new System.Drawing.Point(107, 46); this.cantidadtxt.name = "CantidadTxt"; this.cantidadtxt.size = new System.Drawing.Size(120, 20); this.cantidadtxt.tabindex = 3; Fecha this.fecha.location = new System.Drawing.Point(107, 72); this.fecha.name = "Fecha"; this.fecha.size = new System.Drawing.Size(211, 20); this.fecha.tabindex = 5; label3 this.label3.autosize = true; this.label3.location = new System.Drawing.Point(21, 76); this.label3.name = "label3"; this.label3.size = new System.Drawing.Size(80, 13); this.label3.tabindex = 6; this.label3.text = "Fecha Entrega:"; DRetrasoTxt this.dretrasotxt.location = new System.Drawing.Point(436, 19); this.dretrasotxt.name = "DRetrasoTxt"; this.dretrasotxt.size = new System.Drawing.Size(120, 20); this.dretrasotxt.tabindex = 2;

31 Algoritmo de dispatching para la programación de la producción en una planta de fabricación Pág. 31 label4 this.label4.autosize = true; this.label4.location = new System.Drawing.Point(331, 22); this.label4.name = "label4"; this.label4.size = new System.Drawing.Size(83, 13); this.label4.tabindex = 7; this.label4.text = "Días de retraso:"; OperacionesGrp this.operacionesgrp.controls.add(this.borrarlstbtn); this.operacionesgrp.controls.add(this.insertarordenbtn); this.operacionesgrp.controls.add(this.label7); this.operacionesgrp.controls.add(this.tiempotxt); this.operacionesgrp.controls.add(this.label6); this.operacionesgrp.controls.add(this.maquinacmb); this.operacionesgrp.controls.add(this.label5); this.operacionesgrp.controls.add(this.ordentxt); this.operacionesgrp.controls.add(this.tablaoperacion); this.operacionesgrp.location = new System.Drawing.Point(24, 138); this.operacionesgrp.name = "OperacionesGrp"; this.operacionesgrp.size = new System.Drawing.Size(586, 252); this.operacionesgrp.tabindex = 9; this.operacionesgrp.tabstop = false; this.operacionesgrp.text = "Operaciones:"; BorrarLstBtn this.borrarlstbtn.location = new System.Drawing.Point(388, 219); this.borrarlstbtn.name = "BorrarLstBtn"; this.borrarlstbtn.size = new System.Drawing.Size(90, 27); this.borrarlstbtn.tabindex = 12; this.borrarlstbtn.text = "Borrar Lista"; this.borrarlstbtn.usevisualstylebackcolor = true; this.borrarlstbtn.click += new System.EventHandler(this.BorrarLstBtn_Click); InsertarOrdenBtn this.insertarordenbtn.location = new System.Drawing.Point(490, 219); this.insertarordenbtn.name = "InsertarOrdenBtn"; this.insertarordenbtn.size = new System.Drawing.Size(90, 27); this.insertarordenbtn.tabindex = 10; this.insertarordenbtn.text = "Añadir"; this.insertarordenbtn.usevisualstylebackcolor = true; this.insertarordenbtn.click += new System.EventHandler(this.InsertarOrdenBtn_Click); label7 this.label7.autosize = true; this.label7.location = new System.Drawing.Point(410, 174); this.label7.name = "label7"; this.label7.size = new System.Drawing.Size(45, 13); this.label7.tabindex = 14; this.label7.text = "Tiempo:"; TiempoTxt this.tiempotxt.location = new System.Drawing.Point(461, 171); this.tiempotxt.name = "TiempoTxt"; this.tiempotxt.size = new System.Drawing.Size(71, 20); this.tiempotxt.tabindex = 9;

32 Pág. 32 Anexo B label6 this.label6.autosize = true; this.label6.location = new System.Drawing.Point(206, 174); this.label6.name = "label6"; this.label6.size = new System.Drawing.Size(51, 13); this.label6.tabindex = 12; this.label6.text = "Máquina:"; MaquinaCmb this.maquinacmb.dropdownstyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.maquinacmb.formattingenabled = true; this.maquinacmb.location = new System.Drawing.Point(263, 171); this.maquinacmb.name = "MaquinaCmb"; this.maquinacmb.size = new System.Drawing.Size(120, 21); this.maquinacmb.tabindex = 8; label5 this.label5.autosize = true; this.label5.location = new System.Drawing.Point(20, 174); this.label5.name = "label5"; this.label5.size = new System.Drawing.Size(71, 13); this.label5.tabindex = 10; this.label5.text = "Nº Operación"; OrdenTxt this.ordentxt.location = new System.Drawing.Point(97, 171); this.ordentxt.name = "OrdenTxt"; this.ordentxt.size = new System.Drawing.Size(71, 20); this.ordentxt.tabindex = 7; InsertarBtn this.insertarbtn.location = new System.Drawing.Point(539, 409); this.insertarbtn.name = "InsertarBtn"; this.insertarbtn.size = new System.Drawing.Size(71, 28); this.insertarbtn.tabindex = 11; this.insertarbtn.text = "Guardar"; this.insertarbtn.usevisualstylebackcolor = true; this.insertarbtn.click += new System.EventHandler(this.InsertarBtn_Click); DemandaTxt this.demandatxt.location = new System.Drawing.Point(436, 46); this.demandatxt.name = "DemandaTxt"; this.demandatxt.size = new System.Drawing.Size(120, 20); this.demandatxt.tabindex = 4; label8 this.label8.autosize = true; this.label8.location = new System.Drawing.Point(331, 49); this.label8.name = "label8"; this.label8.size = new System.Drawing.Size(99, 13); this.label8.tabindex = 11; this.label8.text = "Demanda Mensual:"; RetrasoTxt this.retrasotxt.location = new System.Drawing.Point(436, 72); this.retrasotxt.name = "RetrasoTxt";

33 Algoritmo de dispatching para la programación de la producción en una planta de fabricación Pág. 33 this.retrasotxt.size = new System.Drawing.Size(120, 20); this.retrasotxt.tabindex = 6; label9 this.label9.autosize = true; this.label9.location = new System.Drawing.Point(331, 76); this.label9.name = "label9"; this.label9.size = new System.Drawing.Size(58, 13); this.label9.tabindex = 12; this.label9.text = "% Retraso:"; PiezaForm this.autoscaledimensions = new System.Drawing.SizeF(6F, 13F); this.autoscalemode = System.Windows.Forms.AutoScaleMode.Font; this.clientsize = new System.Drawing.Size(622, 449); this.controls.add(this.retrasotxt); this.controls.add(this.label9); this.controls.add(this.demandatxt); this.controls.add(this.label8); this.controls.add(this.insertarbtn); this.controls.add(this.operacionesgrp); this.controls.add(this.dretrasotxt); this.controls.add(this.label4); this.controls.add(this.label3); this.controls.add(this.fecha); this.controls.add(this.cantidadtxt); this.controls.add(this.label2); this.controls.add(this.label1); this.controls.add(this.nombrecmb); this.name = "PiezaForm"; this.text = "Formulario de piezas"; this.load += new System.EventHandler(this.PiezaForm_Load); ((System.ComponentModel.ISupportInitialize)(this.TablaOperacion)).EndInit(); this.operacionesgrp.resumelayout(false); this.operacionesgrp.performlayout(); this.resumelayout(false); this.performlayout(); #endregion private System.Windows.Forms.DataGridView TablaOperacion; private System.Windows.Forms.ComboBox NombreCmb; private System.Windows.Forms.Label label1; private System.Windows.Forms.Label label2; private System.Windows.Forms.TextBox CantidadTxt; private System.Windows.Forms.DateTimePicker Fecha; private System.Windows.Forms.Label label3; private System.Windows.Forms.TextBox DRetrasoTxt; private System.Windows.Forms.Label label4; private System.Windows.Forms.GroupBox OperacionesGrp; private System.Windows.Forms.Label label7; private System.Windows.Forms.TextBox TiempoTxt; private System.Windows.Forms.Label label6; private System.Windows.Forms.ComboBox MaquinaCmb; private System.Windows.Forms.Label label5; private System.Windows.Forms.TextBox OrdenTxt; private System.Windows.Forms.Button InsertarOrdenBtn; private System.Windows.Forms.Button InsertarBtn; private System.Windows.Forms.Button BorrarLstBtn; private System.Windows.Forms.TextBox DemandaTxt;

34 Pág. 34 Anexo B private System.Windows.Forms.Label label8; private System.Windows.Forms.TextBox RetrasoTxt; private System.Windows.Forms.Label label9;

35 Algoritmo de dispatching para la programación de la producción en una planta de fabricación Pág. 35 B.12. Código Principal.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace Planificador public partial class Principal : Form static ListaMaquinas _LMaquinas; static ListaPiezas _LPiezas; public static ListaMaquinas LMaquinas get return _LMaquinas; set _LMaquinas = value; public static ListaPiezas LPiezas get return _LPiezas; set _LPiezas = value; public Principal() InitializeComponent(); private void Principal_Load(object sender, EventArgs e) LPiezas = new ListaPiezas(); private void MaquinariaBtn_Click(object sender, EventArgs e) MaquinariaForm MF = new MaquinariaForm(); MF.Show(); private void PiezasBtn_Click(object sender, EventArgs e) if (LMaquinas!= null) PiezaForm PF=new PiezaForm(); PF.Show(); MessageBox.Show("Debe existir almenos una maquina", "ERROR!"); private void GenerarBtn_Click(object sender, EventArgs e) string fich_p ListaOperacion LOpAux; Solucion SolucionFinal; List<Solucion> LS= new List<Solucion>(); Operacion op; Proceso p; double aux_fecha=0; int orden; int iteracion = 1; int indice, npiezas, pos_op, npiezasretrasadas;

36 Pág. 36 Anexo B double resultado, aux; SolucionFinal = new Solucion(); if (LPiezas.LPiezas.Count > 0) System.IO.StreamWriter sw = new System.IO.StreamWriter(fich_p); if (!Aleatoridad.Checked) if (RepeticionesTxt.Text!= "1") RepeticionesTxt.Text = "1"; MessageBox.Show("Solamente se hará 1 iteración"); while (iteracion <= int.parse(repeticionestxt.text)) indice = 0; npiezas = 0; npiezasretrasadas = 0; pos_op = 0; resultado = 0; aux = 0; while (!LPiezas.Finalizado()) Seleccion de operaciones LOpAux = _LPiezas.OperacionesCandidatas(); LOpAux = SeleccionSegunReadys(LOpAux); LOpAux = MenorTiempoProceso(LOpAux); op = ElegirOperacion(LOpAux); FinalizarOperacion(op); op.tiempo_inicio = op.tiempo_inicio / 60; op.tiempo_fin = op.tiempo_fin / 60; p = new Proceso(op, iteracion); SolucionFinal.Add_Proceso(p); MessageBox.Show(op.Pieza.ToString() + " " + op.orden.tostring() + " " + op.maquina.tostring() + " " + op.tiempo_inicio.tostring() + " " + op.tiempo_fin.tostring()); op.tiempo_inicio = op.tiempo_inicio * 60; op.tiempo_fin = op.tiempo_fin * 60; LOpAux.LOperacion.Clear(); Calculo de retraso medio de la pieza enésima while (indice < LPiezas.LPiezas.Count) if (LPiezas.LPiezas[indice].Cantidad!= 0) npiezas = npiezas + 1; LOpAux = LPiezas.LPiezas[indice].LOperacion; pos_op = LOpAux.LOperacion.Count - 1; orden = LOpAux.LOperacion[pos_op].Orden; while (orden == LOpAux.LOperacion[pos_op].Orden && LOpAux.LOperacion[pos_op].Tiempo_Fin == 0) pos_op--; switch (LPiezas.LPiezas[indice].Fecha.DayOfWeek.ToString()) case "Monday": aux = 16 * 60; aux_fecha = 7 * 16 * 60; break; case ("Tuesday"): aux = 32 * 60; aux_fecha = 7 * 16 * 60; break; case ("Wednesday"): aux = 48 * 60; aux_fecha = 7 * 16 * 60; break;

37 Algoritmo de dispatching para la programación de la producción en una planta de fabricación Pág. 37 case ("Thursday"): aux = 64 * 60; aux_fecha = 7 * 16 * 60; break; case ("Friday"): aux = 80 * 60; aux_fecha = 7 * 16 * 60; break; case ("Saturday"): aux = 96 * 60; aux_fecha = 7 * 16 * 60; break; case ("Sunday"): aux = 0; aux_fecha = 0 * 16 * 60; break; aux = Math.Max((LOpAux.LOperacion[pos_op].Tiempo_Fin-aux_fecha), 0); aux = Math.Max((LOpAux.LOperacion[pos_op].Tiempo_Fin - aux), 0); if (aux > 0) npiezasretrasadas++; resultado = resultado + aux; aux = aux / 60; sw.writeline(iteracion.tostring() + " " + LOpAux.LOperacion[pos_op].Pieza.ToString() + " " + LOpAux.LOperacion[pos_op].Orden.ToString() + " " + aux.tostring()); MessageBox.Show(LOpAux.LOperacion[pos_op].Pieza.ToString() + " " + LOpAux.LOperacion[pos_op].Orden.ToString() + " " + aux.tostring()); aux = 0; pos_op = 0; indice++; resultado = resultado / npiezas / 60; sw.writeline("nº de piezas en retraso=" + npiezasretrasadas.tostring()); SolucionFinal.AñadirRetrasoMedio(resultado); Fin retraso medio pieza enésima indice = 0; Reseteamos tiempos de maquinas y piezas LMaquinas.Inicializar(); while (indice < LPiezas.LPiezas.Count) LPiezas.LPiezas[indice].Inicializar(); indice++; iteracion = iteracion + 1; Fin Reset sw.close(); SolucionFinal.Save(); MessageBox.Show("Secuenciador Finalizado", "FIN"); Mostrar mejor repeticion indice = 0; pos_op = -1; while (indice < SolucionFinal.RetrasoMedio.Count) if (pos_op < 0) pos_op = indice; if (SolucionFinal.RetrasoMedio[indice] < SolucionFinal.RetrasoMedio[pos_op]) pos_op = indice;

38 Pág. 38 Anexo B indice++; pos_op++; MessageBox.Show("Retraso Medio = " + SolucionFinal.RetrasoMedio[pos_op - 1].ToString(), "Mejor Solución: " + pos_op.tostring()); Fin Mostrar mejor repeticion Reseteamos tiempos de maquinas y piezas LMaquinas.Inicializar(); while (indice < LPiezas.LPiezas.Count) LPiezas.LPiezas[indice].Inicializar(); indice++; iteracion = iteracion + 1; Fin Reset MessageBox.Show("No existe ninguna pieza","error!"); private ListaOperacion MenorTiempoProceso(ListaOperacion LOp) ListaOperacion LResultado = new ListaOperacion(LOp); int indice = 0; int cont = 0, aux=0; double min=0; while (indice < LOp.LOperacion.Count) while (cont < LOp.LOperacion.Count) if (LOp.LOperacion[cont].Pieza == LOp.LOperacion[indice].Pieza) if (LOp.LOperacion[cont].Tiempo <= LOp.LOperacion[indice].Tiempo) min = LOp.LOperacion[cont].Tiempo; aux=cont; cont++; if (LOp.LOperacion[indice].Pieza == LOp.LOperacion[aux].Pieza && LOp.LOperacion[indice].Tiempo > min) LOp.LOperacion.RemoveAt(indice); cont = 0; indice++; return LResultado; private ListaOperacion SeleccionSegunReadys(ListaOperacion LOp) ListaOperacion LResultado=new ListaOperacion(); Pieza pieza_aux; int indice = 0; double ready = -1, ready_aux = 0; Maquinaria maquina_aux; Operacion op_aux; while (indice < LOp.LOperacion.Count)

39 Algoritmo de dispatching para la programación de la producción en una planta de fabricación Pág. 39 op_aux = LOp.LOperacion[indice]; pieza_aux = LPiezas.Find(op_aux.Pieza); maquina_aux = _LMaquinas.Find(op_aux.Maquina); if (pieza_aux.operacion_anterior!= null) if (op_aux.maquina == pieza_aux.operacion_anterior.maquina) ready_aux = pieza_aux.operacion_anterior.tiempo_fin; if (op_aux.tiempo >= pieza_aux.operacion_anterior.tiempo) ready_aux = pieza_aux.operacion_anterior.tiempo_inicio * pieza_aux.operacion_anterior.tiempo; ready_aux = pieza_aux.operacion_anterior.tiempo_fin - (op_aux.tiempo * pieza_aux.cantidad + maquina_aux.preparacion) * pieza_aux.operacion_anterior.tiempo; ready_aux = 0; ready_aux = Math.Max(ready_aux, maquina_aux.tiempo); if (ready_aux <= ready ready == -1) if (ready_aux < ready) LResultado.LOperacion.Clear(); LResultado.LOperacion.Add(LOp.LOperacion[indice]); ready = ready_aux; indice++; return LResultado; private Operacion ElegirOperacion(ListaOperacion LOp) int indice = 1, posicion = 0; Pieza pieza, pieza_aux; pieza = LPiezas.Find(LOp.LOperacion[0].Pieza); while (indice < LOp.LOperacion.Count) pieza_aux = LPiezas.Find(LOp.LOperacion[indice].Pieza); if (Criterios(pieza, pieza_aux)!= pieza) posicion = indice; pieza = pieza_aux; indice++; return (LOp.LOperacion[posicion]); private Pieza Criterios(Pieza p, Pieza p_aux) double a = (double)p.restraso;

40 Pág. 40 Anexo B double b = (double)p_aux.restraso; Pieza resultado=null; Criterio de seleccion de operacion sin aleatoriedad. if (!Aleatoridad.Checked) if (a < b) resultado = p_aux; if (a > b) resultado = p; if (p.dretraso > p_aux.dretraso) resultado = p; if (p.dretraso < p_aux.dretraso) resultado = p_aux; if (p.fecha < p_aux.fecha) resultado = p; if (p.fecha > p_aux.fecha) resultado = p_aux; if (p.duracion_total > p_aux.duracion_total) resultado = p; if (p.duracion_total < p_aux.duracion_total) resultado = p_aux; if (p.demanda_mensual > p_aux.demanda_mensual) resultado = p; resultado = p_aux;

41 Algoritmo de dispatching para la programación de la producción en una planta de fabricación Pág. 41 Criterio de seleccion de pieza con aleatoriedad. Random rnd = new Random(); int n_azar = rnd.next(1, 100); if (n_azar <= int.parse(retrasoporcientotext.text) && n_azar > 0) if (a < b) resultado = p_aux; if (a > b) resultado = p; if (p.dretraso > p_aux.dretraso) resultado = p; if (p.dretraso < p_aux.dretraso) resultado = p_aux; if (p.fecha < p_aux.fecha) resultado = p; if (p.fecha > p_aux.fecha) resultado = p_aux; if (p.duracion_total > p_aux.duracion_total) resultado = p; if (p.duracion_total < p_aux.duracion_total) resultado = p_aux; if (p.demanda_mensual > p_aux.demanda_mensual) resultado = p;

42 Pág. 42 Anexo B resultado = p_aux; n_azar= n_azar - int.parse(retrasoporcientotext.text); if (n_azar <= int.parse(retrasodiastxt.text) && n_azar > 0) if (p.dretraso > p_aux.dretraso) resultado = p; if (p.dretraso < p_aux.dretraso) resultado = p_aux; if (p.fecha < p_aux.fecha) resultado = p; if (p.fecha > p_aux.fecha) resultado = p_aux; if (p.duracion_total > p_aux.duracion_total) resultado = p; if (p.duracion_total < p_aux.duracion_total) resultado = p_aux; if (p.demanda_mensual > p_aux.demanda_mensual) resultado = p; resultado = p_aux;

43 Algoritmo de dispatching para la programación de la producción en una planta de fabricación Pág. 43 n_azar= n_azar - int.parse(retrasodiastxt.text); if (n_azar <= int.parse(fechatxt.text) && n_azar > 0) if (p.fecha < p_aux.fecha) resultado = p; if (p.fecha > p_aux.fecha) resultado = p_aux; if (p.duracion_total > p_aux.duracion_total) resultado = p; if (p.duracion_total < p_aux.duracion_total) resultado = p_aux; if (p.demanda_mensual > p_aux.demanda_mensual) resultado = p; resultado = p_aux; n_azar = n_azar - int.parse(fechatxt.text); if (n_azar <= int.parse(duraciontxt.text) && n_azar > 0) if (p.duracion_total > p_aux.duracion_total) resultado = p; if (p.duracion_total < p_aux.duracion_total) resultado = p_aux; if (p.demanda_mensual > p_aux.demanda_mensual) resultado = p;

44 Pág. 44 Anexo B resultado = p_aux; n_azar = n_azar - int.parse(duraciontxt.text); if (n_azar <= int.parse(demandatxt.text) && n_azar > 0) if (p.demanda_mensual > p_aux.demanda_mensual) resultado = p; resultado = p_aux; return resultado; private void FinalizarOperacion(Operacion op_aux) Maquinaria m; Pieza p; Operacion op; m = LMaquinas.Find(op_aux.Maquina); p = LPiezas.Find(op_aux.Pieza); op = p.loperacion.find(op_aux); if (p.operacion_anterior!= null) if (op.maquina == p.operacion_anterior.maquina) op.tiempo_inicio = m.tiempo; if (op.tiempo >= p.operacion_anterior.tiempo) op.tiempo_inicio = p.operacion_anterior.tiempo_inicio * p.operacion_anterior.tiempo; if (op.tiempo_inicio < m.tiempo) op.tiempo_inicio = m.tiempo; op.tiempo_inicio = p.operacion_anterior.tiempo_fin - (op.tiempo * p.cantidad + m.preparacion) * p.operacion_anterior.tiempo; if (op.tiempo_inicio < m.tiempo) op.tiempo_inicio = m.tiempo; if (p.cantidad!= 0) op.tiempo_inicio = m.tiempo;

45 Algoritmo de dispatching para la programación de la producción en una planta de fabricación Pág. 45 op.tiempo_inicio = 0; if (p.cantidad!= 0) op.tiempo_fin = op.tiempo_inicio + (op.tiempo * p.cantidad) + m.preparacion; m.tiempo = op.tiempo_fin; op.tiempo_fin = 0; ActivarFinalizacionOrden(op); p.operacion_anterior = op; private void ActivarFinalizacionOrden(Operacion Op) int indice = 0, orden = 0; double duracion=0; Pieza p; p = LPiezas.Find(Op.Pieza); orden = Op.Orden; while (indice < p.loperacion.loperacion.count) if (p.loperacion.loperacion[indice].orden == orden) if (p.loperacion.loperacion[indice].tiempo * p.cantidad > duracion) duracion = p.loperacion.loperacion[indice].tiempo * p.cantidad; p.loperacion.loperacion[indice].finalizado = true; indice++; p.duracion_total = p.duracion_total - duracion; private void SaveBtn_Click(object sender, EventArgs e) string fich_m string fich_p int indice=0, indice_aux=0; System.IO.StreamWriter sw=new System.IO.StreamWriter(fich_m); if (LMaquinas!= null) while (indice < LMaquinas.LMaquinaria.Count) sw.writeline(lmaquinas.lmaquinaria[indice].nombre + " " + LMaquinas.LMaquinaria[indice].Tiempo + " " + LMaquinas.LMaquinaria[indice].Preparacion); indice++; sw.close(); sw = new System.IO.StreamWriter(fich_p); indice = 0; if (LPiezas!= null) while (indice < LPiezas.LPiezas.Count) sw.write(lpiezas.lpiezas[indice].nombre + " "); sw.write(lpiezas.lpiezas[indice].cantidad + " ");

46 Pág. 46 Anexo B sw.write(lpiezas.lpiezas[indice].demanda_mensual + " "); sw.write(lpiezas.lpiezas[indice].restraso + " "); sw.write(lpiezas.lpiezas[indice].dretraso + " "); sw.writeline(lpiezas.lpiezas[indice].fecha); indice_aux = 0; while (indice_aux < LPiezas.LPiezas[indice].LOperacion.LOperacion.Count) sw.write(lpiezas.lpiezas[indice].loperacion.loperacion[indice_aux].pieza + " "); sw.write(lpiezas.lpiezas[indice].loperacion.loperacion[indice_aux].maquina + " "); sw.write(lpiezas.lpiezas[indice].loperacion.loperacion[indice_aux].orden + " "); sw.writeline(lpiezas.lpiezas[indice].loperacion.loperacion[indice_aux].tiempo); indice_aux++; indice++; sw.close(); MessageBox.Show("Maquinas y piezas guardadas", "OK"); private void LoadBtn_Click(object sender, EventArgs e) string fich_m string fich_p string aux=""; string orden, maquina, pieza, preparacion; string nombre = "", cantidad = "", demanda = "", retraso = "", volumen = "", tiempo = ""; Pieza p; Maquinaria m; Operacion op; ListaOperacion LOp; LPiezas = new ListaPiezas(); LMaquinas = new ListaMaquinas(); System.IO.StreamReader sr = new System.IO.StreamReader(fich_m); while (!sr.endofstream) aux = sr.readline(); maquina=aux.substring(0,aux.indexof(' ')); aux = aux.substring(aux.indexof(' ')+1); tiempo = aux.substring(0, aux.indexof(' ')); aux = aux.substring(aux.indexof(' ') + 1); preparacion = aux; m = new Maquinaria(maquina, double.parse(tiempo), double.parse(preparacion)); LMaquinas.LMaquinaria.Add(m); sr.close(); sr = new System.IO.StreamReader(fich_p); nombre = ""; LOp=null; p = null; while (!sr.endofstream) aux = sr.readline(); if (aux.substring(0, aux.indexof(' ')) == nombre) pieza = aux.substring(0, aux.indexof(' ')); aux = aux.substring(aux.indexof(' ') + 1); maquina = aux.substring(0, aux.indexof(' ')); aux = aux.substring(aux.indexof(' ') + 1); orden = aux.substring(0, aux.indexof(' ')); aux = aux.substring(aux.indexof(' ') + 1); op = new Operacion(int.Parse(orden), maquina, double.parse(aux), pieza);

47 Algoritmo de dispatching para la programación de la producción en una planta de fabricación Pág. 47 LOp.LOperacion.Add(op); if (LOp == null) LOp = new ListaOperacion(); p = new Pieza(nombre, int.parse(cantidad), int.parse(volumen), double.parse(demanda), DateTime.Parse(tiempo), double.parse(retraso), LOp); LPiezas.LPiezas.Add(p); LOp = new ListaOperacion(); nombre = aux.substring(0, aux.indexof(' ')); aux = aux.substring(aux.indexof(' ') + 1); cantidad = aux.substring(0, aux.indexof(' ')); aux = aux.substring(aux.indexof(' ') + 1); demanda = aux.substring(0, aux.indexof(' ')); aux = aux.substring(aux.indexof(' ') + 1); retraso = aux.substring(0, aux.indexof(' ')); aux = aux.substring(aux.indexof(' ') + 1); volumen = aux.substring(0, aux.indexof(' ')); aux = aux.substring(aux.indexof(' ') + 1); tiempo = aux; p = new Pieza(nombre, int.parse(cantidad), int.parse(volumen), double.parse(demanda), DateTime.Parse(tiempo), double.parse(retraso), LOp); LPiezas.LPiezas.Add(p); sr.close(); MessageBox.Show("Maquinas y piezas cargadas", "OK");

48 Pág. 48 Anexo B B.13. Código Principal.Designer.cs namespace Planificador partial class Principal / <summary> / Required designer variable. / </summary> private System.ComponentModel.IContainer components = null; / <summary> / Clean up any resources being used. / </summary> / <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> protected override void Dispose(bool disposing) if (disposing && (components!= null)) components.dispose(); base.dispose(disposing); #region Windows Form Designer generated code / <summary> / Required method for Designer support - do not modify / the contents of this method with the code editor. / </summary> private void InitializeComponent() this.maquinariabtn = new System.Windows.Forms.Button(); this.piezasbtn = new System.Windows.Forms.Button(); this.label1 = new System.Windows.Forms.Label(); this.label2 = new System.Windows.Forms.Label(); this.label3 = new System.Windows.Forms.Label(); this.label4 = new System.Windows.Forms.Label(); this.label5 = new System.Windows.Forms.Label(); this.label6 = new System.Windows.Forms.Label(); this.retrasoporcientotext = new System.Windows.Forms.TextBox(); this.retrasodiastxt = new System.Windows.Forms.TextBox(); this.fechatxt = new System.Windows.Forms.TextBox(); this.duraciontxt = new System.Windows.Forms.TextBox(); this.demandatxt = new System.Windows.Forms.TextBox(); this.label7 = new System.Windows.Forms.Label(); this.generarbtn = new System.Windows.Forms.Button(); this.label8 = new System.Windows.Forms.Label(); this.repeticionestxt = new System.Windows.Forms.TextBox(); this.savebtn = new System.Windows.Forms.Button(); this.loadbtn = new System.Windows.Forms.Button(); this.aleatoridad = new System.Windows.Forms.CheckBox(); this.suspendlayout(); MaquinariaBtn this.maquinariabtn.location = new System.Drawing.Point(12, 12); this.maquinariabtn.name = "MaquinariaBtn"; this.maquinariabtn.size = new System.Drawing.Size(116, 35); this.maquinariabtn.tabindex = 0; this.maquinariabtn.text = "Maquinaria";

Código fuente C# Código asociado al formulario Splash

Código fuente C# Código asociado al formulario Splash Código fuente C# Código asociado al formulario Splash using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text;

Más detalles

D:\IDENTIFICADOR_PRODUCTO\Identificador_Prod\Identificador_Prod\Form1.cs // +++++++++ PLATAFORMA BASE DE DATOS PARA TARIFACIÓN DE PRODUCTOS +++++++++

D:\IDENTIFICADOR_PRODUCTO\Identificador_Prod\Identificador_Prod\Form1.cs // +++++++++ PLATAFORMA BASE DE DATOS PARA TARIFACIÓN DE PRODUCTOS +++++++++ // +++++++++ PLATAFORMA BASE DE DATOS PARA TARIFACIÓN DE PRODUCTOS +++++++++ 1 /* El código que precede es el responsable de ejecutar funciones que permiten interactuar a la Base de datos en Microsoft

Más detalles

Tema: Grafos en C#. Objetivos Específicos. Materiales y Equipo. Introducción Teórica. Programación IV. Guía 7

Tema: Grafos en C#. Objetivos Específicos. Materiales y Equipo. Introducción Teórica. Programación IV. Guía 7 Programación IV. Guía 7 1 Tema: Grafos en C#. Facultad: Ingeniería Escuela: Computación Asignatura: Programación IV Objetivos Específicos Definir el concepto de Grafo. A partir de una clase agregar la

Más detalles

Proyecto visual C# 2005 Express Edition: Imprimir Página 1 de 5

Proyecto visual C# 2005 Express Edition: Imprimir Página 1 de 5 Proyecto visual C# 2005 Express Edition: Imprimir Página 1 de 5 PROYECTO Imprimir: Crear un Nuevo Proyecto desde Visual C# 2005 Express Edition, del tipo Aplicación de Escritorio para Windows, con el nombre

Más detalles

.NET Compact Framework

.NET Compact Framework .NET Compact Framework Profesor: Dr. Jesús Soto Carrión (jesus.soto@upsam.net) Master de Ingeniería Web Desarrollo de aplicaciones para dispositivos móviles Contenido de la presentación Introducción Arquitectura

Más detalles

TUTORIAL APLICACIONES EVOLUTION CON ACTIVEX EVOLINK

TUTORIAL APLICACIONES EVOLUTION CON ACTIVEX EVOLINK TUTORIAL APLICACIONES EVOLUTION CON ACTIVEX EVOLINK 1 Introducción... 2 2 Requisitos previos... 2 3 Desarrollo de una aplicación call center.net con ActiveX evolink... 2 3.1 Crear un proyecto inicial...

Más detalles

Métodos virtuales Los métodos virtuales permiten modificar un método que ha sido heredado de una clase abstracta.

Métodos virtuales Los métodos virtuales permiten modificar un método que ha sido heredado de una clase abstracta. Clases Abstractas Las clases abstractas contienen definiciones que podrán ser heredadas, pero no permitirán instanciar objetos a partir de ellas. Tienen la jerarquía más alta en el grado de abstracción

Más detalles

Aplicaciones Windows con Microsoft Visual Studio 2010...

Aplicaciones Windows con Microsoft Visual Studio 2010... Aplicaciones Windows con Microsoft Visual Studio 2010... Insertar un Link o Vínculo en una Aplicación Windows El presente es un pequeño manual/tutorial que nos indica los pasos que debemos seguir para

Más detalles

Conexión SQL Server y C# (Consola)

Conexión SQL Server y C# (Consola) Conexión SQL Server y C# (Consola) Objetivo: Manejar bases de datos usando SQL Server, creando tablas dentro una base de datos y esto a su vez enlazarlo a una aplicación de C#, haciendo uso del método

Más detalles

Anexo de documentación

Anexo de documentación Anexo de documentación Autor: Daniel Hernández Jané Tutor: Juan Carlos Hernández Palacín Índice 1. Orden de fabricación... 2 1.1. Convertidor ÖBB... 2 1.2. Convertidor Civia... 5 1.3. Convertidor Desiro...

Más detalles

SISTEMA DE ADQUISICIÓN DE DATOS EMPLEANDO UN DISPOSITIVO WINDOWS MOBILE Y UN MICROPROCESADOR

SISTEMA DE ADQUISICIÓN DE DATOS EMPLEANDO UN DISPOSITIVO WINDOWS MOBILE Y UN MICROPROCESADOR UNIVERSIDAD CARLOS III DE MADRID ESCUELA POLITÉCNICA SUPERIOR INGENIERÍA TÉCNICA INDUSTRIAL ELECTRÓNICA INDUSTRIAL PROYECTO FIN DE CARRERA DEPARTAMENTO DE TECNOLOGÍA ELECTRÓNICA SISTEMA DE ADQUISICIÓN

Más detalles

Bases de Datos Access y C#. Insert, select, update, delete. 1. Crea una base de Datos en Access

Bases de Datos Access y C#. Insert, select, update, delete. 1. Crea una base de Datos en Access Bases de Datos Access y C#. Insert, select, update, delete 1. Crea una base de Datos en Access 2. Crea un Nuevo proyecto en C# 3. Agrega una nueva clase llamada Database y a continuación escribe el siguiente

Más detalles

Introducción a las aplicaciones Windows

Introducción a las aplicaciones Windows Introducción a las aplicaciones Windows En la primera parte del libro se ha estudiado las características de C#, pero realmente, se ha hecho una escasa utilización de las clases contenidas en el Framework.NET.

Más detalles

IMPLEMENTACIÓN DE UN PROTOTIPO DE SOFTWARE DE E-LEARNING PARA LA ENSEÑANZA DE SQLSERVER UTILIZANDO MICROSOFT SILVERLIGHT

IMPLEMENTACIÓN DE UN PROTOTIPO DE SOFTWARE DE E-LEARNING PARA LA ENSEÑANZA DE SQLSERVER UTILIZANDO MICROSOFT SILVERLIGHT MANUAL TÉCNICO IMPLEMENTACIÓN DE UN PROTOTIPO DE SOFTWARE DE E-LEARNING PARA LA ENSEÑANZA DE SQLSERVER UTILIZANDO MICROSOFT SILVERLIGHT 1. Introducción El sitio web es una Aplicación RIA (Rich Internet

Más detalles

Control personalizado, velocímetro con C#

Control personalizado, velocímetro con C# Control personalizado Velocímetro con C# Control personalizado Velocímetro con C# Se trata de crear un control de usuario personalizado para poder utilizar un control de tipo velocímetro. Abrimos una Biblioteca

Más detalles

JavaScript. Contenidos. Introducción El lenguaje Validación de formularios. Programación en Internet 2005-2006. DLSI - Universidad de Alicante 1

JavaScript. Contenidos. Introducción El lenguaje Validación de formularios. Programación en Internet 2005-2006. DLSI - Universidad de Alicante 1 Departamento de Lenguajes y Sistemas Informáticos JavaScript Programación en Internet Curso 2005-2006 Contenidos Introducción El lenguaje Validación de formularios DLSI - Universidad de Alicante 1 Introducción

Más detalles

GUÍA DE TRABAJO N 11 LENGUAJE C# Programación de Software Articulación SENA Grado 10 Ing. Néstor Raúl Suarez Perpiñan Página 2 de 11

GUÍA DE TRABAJO N 11 LENGUAJE C# Programación de Software Articulación SENA Grado 10 Ing. Néstor Raúl Suarez Perpiñan Página 2 de 11 Página 1 de 11 GUIA N 11 - DESARROLLO DE SOFTWARE A TRES CAPAS Objetivo: Desarrollar una aplicación de software con tres capas (Presentación Lógica Persistencia) donde se establezca una conexión con una

Más detalles

EVALUACIÓN. Programa de trabajador

EVALUACIÓN. Programa de trabajador EVALUACIÓN Programa de trabajador Universidad Tecnológica de Puebla Tecnologías de la información y comunicación Programación 2 D Marco Antonio Marín Fernández Planteamiento Se desea visualizar el incremento

Más detalles

Taller de procesamiento digital de imágenes mediante Aforge.net

Taller de procesamiento digital de imágenes mediante Aforge.net Taller de procesamiento digital de imágenes mediante Aforge.net Aforge es una librería gratuita para.net que permite utilizar algoritmos de procesamiento digital de imágenes e inteligencia artificial.

Más detalles

GUÍA DE TRABAJO GRADO 11 Programación de. Software Ing. Néstor Raúl Suarez Perpiñan Página 1 de 8

GUÍA DE TRABAJO GRADO 11 Programación de. Software Ing. Néstor Raúl Suarez Perpiñan Página 1 de 8 Página 1 de 8 TEMA: FORM DE INICIO, SEGURIDAD Y LISTADOS EN COMBOX - LENGUAJE C# Objetivo: Programar el ingreso a una aplicación realizando verificación de usuarios /contraseñas y cargar listados de desde

Más detalles

Soluciones Ejercicios Tema 3

Soluciones Ejercicios Tema 3 1 Soluciones Ejercicios Tema 3 Germán Moltó gmolto@dsic.upv.es Estructuras de Datos y Algoritmos Escuela Técnica Superior de Ingeniería Informática Universidad Politécnica de Valencia Solución Ejercicio

Más detalles

GUÍA DE TRABAJO N 7 LENGUAJE C# Educación Media Fortalecida Programación de Software Grado 11 Ing. Néstor Raúl Suarez Perpiñan Página 1 de 8

GUÍA DE TRABAJO N 7 LENGUAJE C# Educación Media Fortalecida Programación de Software Grado 11 Ing. Néstor Raúl Suarez Perpiñan Página 1 de 8 Página 1 de 8 TEMA: FORM DE INICIO, FORM DE SEGURIDAD Y CARGUE DE LISTADOS EN COMBOBOX USANDO EL LENGUAJE C# Objetivo: Programar ingreso a una aplicación realizando verificación de usuarios/contraseñas

Más detalles

Practica 7 Conexión a su base de datos. Optativa II

Practica 7 Conexión a su base de datos. Optativa II 1. Inicie sesión en su manejador de base de datos y agregue los procedimientos de almacenados mediante los cuales manejaremos las tablas agregadas en la práctica anterior. 2. Colóquese en su base de datos.

Más detalles

/) 0! () 5!2 /)( 1! "!"# 2 ()/ $% $!" !! " #!!!$!!% &!!' ' ' "! ()()/ & $!" ()()(' (!(

/) 0! () 5!2 /)( 1! !# 2 ()/ $% $! !!  #!!!$!!% &!!' ' ' ! ()()/ & $! ()()(' (!( !! " #!!!$!!%!!' ' ' "! ) *)+#)))!(---) ) (. /) 0! /)/#"!"# /)( 1! "!"# /)3 1' 40 () 5! ()/ $% $!" ()(4 ()()/ $!" ()()(' (!( package ejemplos.tema.gestiondefigurasinexcepciones; public class TestituacionesInesperadas

Más detalles

Realizar ejercicios de cifrado por medio de los cuales se comprenderá el funcionamiento e importancia del mismo.

Realizar ejercicios de cifrado por medio de los cuales se comprenderá el funcionamiento e importancia del mismo. Programación III, Guía 11 1 Facultad : Ingeniería Escuela : Computación Asignatura: Programación III Tema: CIFRADO. Objetivo Realizar ejercicios de cifrado por medio de los cuales se comprenderá el funcionamiento

Más detalles

UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO

UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO INTRODUCCIÓN Para poder trabajar con archivos en formularios windows C# cuenta con dos objetos que vienen ya diseñados el OpenFileDialog (para abrir) y el SaveFileDialog (para guardar). OpenFileDialog

Más detalles

[Titulo] : Creacion de un Troyano de Conexion Inversa [Lenguaje] : C# [Autor] : Doddy Hackman. [Temario]

[Titulo] : Creacion de un Troyano de Conexion Inversa [Lenguaje] : C# [Autor] : Doddy Hackman. [Temario] [Titulo] : Creacion de un Troyano de Conexion Inversa [Lenguaje] : C# [Autor] : Doddy Hackman [Temario] -- =================-------- 0x01 : Introduccion 0x02 : Creacion del servidor 0x03 : Creacion del

Más detalles

Procesar datos con C#

Procesar datos con C# Procesar datos con C# Procesar datos con C# Se trata de crear una aplicación para poder abrir un archivo de texto, obtener su contenido y procesar la información que hay en él para poder utilizarla. Abrimos

Más detalles

Taller: Introducción a Windows Communication Foundation

Taller: Introducción a Windows Communication Foundation Taller: Introducción a Windows Communication Foundation Autor: Carlos Milán Figueredo Nivel: 100 (Principiante) Pre-requisitos: Visual Studio 2008 Email: cmilanf@dotnetclubs.com Web: http://www.dotnetclubs.com

Más detalles

Fundamentos de Programación CAPÍTULO 3 EL LENGUAJE C# Ing. Bruno López Takeyas, M.C. 1

Fundamentos de Programación CAPÍTULO 3 EL LENGUAJE C# Ing. Bruno López Takeyas, M.C.  1 CAPÍTULO 3 EL LENGUAJE C# 2 http://www.itnuevolaredo.edu.mx/takeyas 1 Preguntas detonadoras Qué es el framework.net? Cómo está organizado? Para qué sirve? Cuál es la herramienta de software necesaria para

Más detalles

Tutorial : Hacer Combos Dependientes tipo Departamento Ciudad en ASP. Net

Tutorial : Hacer Combos Dependientes tipo Departamento Ciudad en ASP. Net Tutorial : Hacer Combos Dependientes tipo Departamento Ciudad en ASP. Net Hola amigos, les traigo una manera muy muy sencilla hacer combos o listas desplegables dependientes tipo departamento ciudad utilizando

Más detalles

Dentro del.net los eventos se utilizan para notificar a nuestros objetos que se ha producido algún tipo de hecho al que nos hemos suscrito.

Dentro del.net los eventos se utilizan para notificar a nuestros objetos que se ha producido algún tipo de hecho al que nos hemos suscrito. Eventos ala.net Recientemente ha surgido en los grupos de C# una duda sobre si los eventos que usa el.net son del mismo tipo que los que nosotros podemos crear y usar. La respuesta obvia y evidente es

Más detalles

UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO

UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO La Programación Orientada a Objetos Los lenguajes de programación siempre se han diseñado en torno a dos conceptos fundamentales: los datos y el código que opera sobre ellos. Anteriormente los lenguajes

Más detalles

Introducción a Java LSUB. 15 de enero de 2015 GSYC

Introducción a Java LSUB. 15 de enero de 2015 GSYC Introducción a LSUB GSYC 15 de enero de 2015 (cc) 2014 Laboratorio de Sistemas, Algunos derechos reservados. Este trabajo se entrega bajo la licencia Creative Commons Reconocimiento - NoComercial - SinObraDerivada

Más detalles

FIUBA - 7507 Algoritmos y programación 3

FIUBA - 7507 Algoritmos y programación 3 FIUBA - 7507 Algoritmos y programación 3 Trabajo práctico 2: Algo Hero 2010 1er cuatrimestre, 2010 1er entrega (trabajo grupal) Integrantes: 90365, Nahuel Lucero, nahuel.bm6@gmail.com 91299, Diego Meller,

Más detalles

Programación Orientada a Objetos en C#.NET CAPÍTULO 8 E V E N T O S. Ing. Bruno López Takeyas, M.C. http://www.itnuevolaredo.edu.

Programación Orientada a Objetos en C#.NET CAPÍTULO 8 E V E N T O S. Ing. Bruno López Takeyas, M.C. http://www.itnuevolaredo.edu. CAPÍTULO 8 E V E N T O S 2 http://www.itnuevolaredo.edu.mx/takeyas 1 Preguntas detonadoras Quéesunevento? Paraquésirve? Qué temas se deben dominar para implementar aplicaciones con eventos? Qué se requiere

Más detalles

Tema: Clases y Objetos en C++.

Tema: Clases y Objetos en C++. 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación II Tema: Clases y Objetos en C++. Objetivos Específicos Aplicar clases, objetos, propiedades, métodos y mensajes. Poner en práctica

Más detalles

Programación para dispositivos móviles con.net CF... Comunicaciones por Bluetooth

Programación para dispositivos móviles con.net CF... Comunicaciones por Bluetooth Programación para dispositivos móviles con NET CF Comunicaciones por Bluetooth Objetivos Desarrollar aplicaciones que comuniquen vía Bluetooth; Material a utilizar Visual Studio 2005 + Pocket PC 2005 SDK;

Más detalles

Implementar un notificador de Workflows en error

Implementar un notificador de Workflows en error How to Implementar un notificador de Workflows en error Versión: 2.0 Fecha de publicación 11-04-2011 Aplica a: Q-flow 3.1 Índice Introducción... 3 Definiciones... 3 Event Handler... 3 Roles de Template...

Más detalles

INTELIGENCIA EN REDES DE COMUNICACIONES PRÁCTICA FINAL. Ignacio Ribas Ramos Miguel Flecha Lozano Ingeniería de Telecomunicaciones

INTELIGENCIA EN REDES DE COMUNICACIONES PRÁCTICA FINAL. Ignacio Ribas Ramos Miguel Flecha Lozano Ingeniería de Telecomunicaciones INTELIGENCIA EN REDES DE COMUNICACIONES PRÁCTICA FINAL BLACKJACK Ignacio Ribas Ramos Miguel Flecha Lozano Ingeniería de Telecomunicaciones 1. Explicación del juego de cartas del Blackjack El Blackjack

Más detalles

Elementos léxicos del lenguaje de programación Java

Elementos léxicos del lenguaje de programación Java Elementos léxicos del lenguaje de programación Java Elementos léxicos del lenguaje de programación Java Palabras reservadas Identificadores Literales Operadores Delimitadores Comentarios Apéndices Operadores

Más detalles

Tema 2. El lenguaje de programación Java (Parte 1)

Tema 2. El lenguaje de programación Java (Parte 1) Programación en Java Tema 2. El lenguaje de programación Java (Parte 1) Luis Rodríguez Baena Facultad de Informática Elementos del lenguaje (I) El juego de caracteres. No utiliza ASCII, sino Unicode de

Más detalles

Introducción al desarrollo de RIA's con Adobe Flex 3.0 Dia 4

Introducción al desarrollo de RIA's con Adobe Flex 3.0 Dia 4 Introducción al desarrollo de RIA's con Adobe Flex 3.0 Dia 4 by S. Muñoz-Gutiérrez stalinmunoz@yahoo.com, informes@grupolinda.org Grupo LINDA Facultad de Ingeniería UNAM México Octubre-Diciembre 2009 Identificando

Más detalles

3.- Desarrollo e implementación del sistema.

3.- Desarrollo e implementación del sistema. 3.- Desarrollo e implementación del sistema. 3.1.- Funcionalidad de entrar al sistema Para poder acceder al sistema el alumno tendrá que escribir su nombre de usuario y su password, a continuación se muestra

Más detalles

Text Mining: Distancia de Levenshtein

Text Mining: Distancia de Levenshtein Text Mining: Distancia de Levenshtein La distancia de Levenshtein es un potente algoritmo que puede ser aplicado para tareas de Text Mining. Determina una medida de similaridad o cercanía entre dos cadenas

Más detalles

Análisis de tráfico DNS mediante herramienta visual

Análisis de tráfico DNS mediante herramienta visual Escola Tècnica Superior d Enginyeria Informàtica Universitat Politècnica de València Análisis de tráfico DNS mediante herramienta visual Proyecto Final de Carrera Ingeniería Técnica en Informática de Gestión

Más detalles

Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java

Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java Identificadores Las variables se utilizan en programación para almacenar temporalmente

Más detalles

SEGUNDO PARCIAL INFORMATICA II

SEGUNDO PARCIAL INFORMATICA II SEGUNDO PARCIAL INFORMATICA II Tema 1 Hacer un programa en C++ que realice lo siguiente: a. Generar los primeros 100 números enteros comenzando en 1 y guardar los impares en una pila y los pares en una

Más detalles

Encender y apagar un Led con Arduino y Visual Studio 2015

Encender y apagar un Led con Arduino y Visual Studio 2015 Encender y apagar un Led con Arduino y Visual Studio 2015 Ángel Acaymo M. G. Electrónica PIC http://electronica-pic.blogspot.com.es Índice: Qué necesitamos?.. 2. Código Arduino... 7. Probando Monitor Serie..

Más detalles

Manejo de una Base de Datos Microsoft SQL Server. a través de Visual C #, vía instrucciones SQL.

Manejo de una Base de Datos Microsoft SQL Server. a través de Visual C #, vía instrucciones SQL. Manejo de una Base de Datos Microsoft SQL Server a través de Visual C #, vía instrucciones SQL. M.C. Enrique Ruiz Díaz. Estoy titulado en la Maestría en Ciencias de la Computación, Misma que estudié en

Más detalles

Compiladores e Intérpretes Proyecto N 1 Sintaxis de MiniJava Segundo Cuatrimestre de 2015

Compiladores e Intérpretes Proyecto N 1 Sintaxis de MiniJava Segundo Cuatrimestre de 2015 Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Compiladores e Intérpretes Proyecto N 1 Sintaxis de MiniJava Segundo Cuatrimestre de 2015 1. Introducción Este documento

Más detalles

Trabajo Práctico N 4: Diseño por Contratos

Trabajo Práctico N 4: Diseño por Contratos 1. Defina los contratos de las siguientes clases: Trabajo Práctico N 4: Diseño por Contratos a. La clase Fecha representa una fecha en el formato dia, mes y año. Especificar los contratos para asegurar

Más detalles

ALGORITMICA Y PROGRAMACION POR OBJETOS I

ALGORITMICA Y PROGRAMACION POR OBJETOS I ALGORITMICA Y PROGRAMACION POR OBJETOS I Nivel 2 Definiendo situaciones y manejando casos Marcela Hernández Hoyos Qué vamos a aprender en este nivel: Diferencia entre clase y objeto Modelar características

Más detalles

Tema 3: Genericidad en Java. Tema 3: Genericidad en Java. Objetivos y Bibliografía. Modelos de Datos Genéricos

Tema 3: Genericidad en Java. Tema 3: Genericidad en Java. Objetivos y Bibliografía. Modelos de Datos Genéricos Tema 3: Genericidad en Java Tema 3: Genericidad en Java Germán Moltó Escuela Técnica Superior de Ingeniería Informática Universidad Politécnica de Valencia Índice general: 1. Definición y Ventajas de la

Más detalles

Creando un Troyano en C# En este tuto voy a enseñar cómo crear el principio de un RAT de conexión inversa.

Creando un Troyano en C# En este tuto voy a enseñar cómo crear el principio de un RAT de conexión inversa. Creando un Troyano en C# En este tuto voy a enseñar cómo crear el principio de un RAT de conexión inversa. En mi caso usaré visual studio ultimate 2012 pero obviamente puede utilizar algún otro IDE. ***************Creando

Más detalles

Primer Parcial Septiembre 5 de 2009

Primer Parcial Septiembre 5 de 2009 Primer Parcial Septiembre 5 de 2009 Algoritmos y Lenguajes II Reglas del juego Tal como se le dijo antes, durante este examen usted no puede pedir ABSOLUTAMENTE nada prestado a sus compañeros, ni hablar

Más detalles

Programación Orientada a Objetos con C#

Programación Orientada a Objetos con C# Programación Orientada a Objetos con C# Microsoft Certified Professional Email: javier@softwareandina.com Agenda Historia Estándares Componentes de C# Microsoft Certified Professional 1 Historia de C#

Más detalles

Introducción a GDI+ El namespace System.Drawing

Introducción a GDI+ El namespace System.Drawing Introducción a En este capítulo se introduce la programación gráfica utilizando las clases del Graphics Device Interface (). es la evolución de GDI, que resultaba compleja de utilizar. En Visual Studio.NET,

Más detalles

Tema: Grafos en C#. Objetivos Específicos. Materiales y Equipo. Introducción Teórica. Programación IV. Guía No. 7

Tema: Grafos en C#. Objetivos Específicos. Materiales y Equipo. Introducción Teórica. Programación IV. Guía No. 7 Programación IV. Guía No. 7 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación IV Tema: Grafos en C#. Objetivos Específicos Definir el concepto de Grafo. A partir de una clase agregar

Más detalles

Programación Orientada a Objetos en C#.NET CAPÍTULO 5 H E R E N C I A. Ing. Bruno López Takeyas, M.C. http://www.itnuevolaredo.edu.

Programación Orientada a Objetos en C#.NET CAPÍTULO 5 H E R E N C I A. Ing. Bruno López Takeyas, M.C. http://www.itnuevolaredo.edu. CAPÍTULO 5 H E R E N C I A 2 http://www.itnuevolaredo.edu.mx/takeyas 1 Preguntas detonadoras Qué ventajas ofrece la herencia a un programador? Cuál es la diferencia entre herencia simple y herencia múltiple?

Más detalles

Consumo de Platino desde.net con clases proxy

Consumo de Platino desde.net con clases proxy Interoperabilidad de los servicios telemáticos de la Administración Pública de la CAC Página 1 de 9 Consumo de Platino desde.net con clases proxy Rev. Fecha Descripción 0 23/07/2010 Redacción inicial Documento

Más detalles

FUNDAMENTOS DE PROGRAMACIÓN. SEPTIEMBRE 2005

FUNDAMENTOS DE PROGRAMACIÓN. SEPTIEMBRE 2005 Dpto. de Ingeniería de Sistemas Telemáticos E.T.S.I. Telecomunicación Universidad Politécnica de Madrid FUNDAMENTOS DE PROGRAMACIÓN. SEPTIEMBRE 2005 Normas de examen: Con libros y apuntes Duración: 2 horas

Más detalles

Prácticas de Programación

Prácticas de Programación Prácticas de Programación Tema 1. Introducción al análisis y diseño de programas Tema 2. Clases y objetos Tema 4. Tratamiento de errores Tema 5. Aspectos avanzados de los tipos de datos Tema 6. Modularidad

Más detalles

Eventos. Nota: Los eventos poseen las siguientes características:

Eventos. Nota: Los eventos poseen las siguientes características: Eventos Los Eventos habilitan a una clase u objeto con la capacidad de notificar otras clases u objetos cuando algo de interés ha ocurrido. La clase que produce el evento envía (o dispara) el evento el

Más detalles

Creación de un sistema ABC

Creación de un sistema ABC Creación de un sistema ABC Altas - Bajas - Cambios Generalidades de código -SQL Server 2005 Express Ed. -Microsoft Visual C# 2008 Por: Juan Francisco González Reyes 07230471 ITSL Durango, México Cómo hacer

Más detalles

Base de Datos SQL Server. create database CRUD; use CRUD;

Base de Datos SQL Server. create database CRUD; use CRUD; Base de Datos SQL Server create database CRUD; use CRUD; create table EMPLEADOS ( NOMBRE varchar(20), USUARIO varchar(15) not null, CONTRASEÑA varchar(6) not null, ROL varchar (15) not null, primary key

Más detalles

Programa Java. El lenguaje de programación Java. Comentarios. Programa Java. Palabras reservadas. Identificadores

Programa Java. El lenguaje de programación Java. Comentarios. Programa Java. Palabras reservadas. Identificadores El lenguaje de programación Java Programa Java Un programa Java está formado por un conjunto de clases que interactúan entre sí La clase es la unidad básica de programación La ejecución depende de la clase

Más detalles

Tema 3: Herencia en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle

Tema 3: Herencia en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle Tema 3: Herencia en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle Contenido Tipos de herencia Herencia y niveles de visibilidad Herencia y creación Redefinición de métodos Conversión

Más detalles

Uso del control ZedGraph en C#

Uso del control ZedGraph en C# Uso del control ZedGraph en C# Uso del control ZedGraph en C# Se trata de implementar un gráfico en nuestro formulario. Para realizar este proyecto es necesario descargar la referencia ZedGraph, que se

Más detalles

Para leer la entrada de consola, lo primero que se hace es construir un Scanner que este asociado al flujo de entrada estándar System.

Para leer la entrada de consola, lo primero que se hace es construir un Scanner que este asociado al flujo de entrada estándar System. CICLO: 01/2010 Universidad Don Bosco Materia: Lenguaje de Programación III Contenido: 1-Lectura de Datos de entrada. 2-Introduccion a JOPTIONPANE. 3-Estructuras de Control. ->LECTURA DE DATOS DE ENTRADA

Más detalles

GUÍA DE TRABAJO GRADO 11. Articulación SENA Programación de Software Ing. Néstor Raúl Suarez Perpiñan Página 1 de 6

GUÍA DE TRABAJO GRADO 11. Articulación SENA Programación de Software Ing. Néstor Raúl Suarez Perpiñan Página 1 de 6 Página 1 de 6 Tema: PROCEDIMIENTOS ALMACENADOS SQL SERVER Objetivo: Adquirir los conocimientos necesarios para desarrollar e implementar procedimientos almacenados utilizando SQL Server y lenguaje C# I.

Más detalles

class Nombre_Clase extends Nombre_SuperClase { cuerpo de la clase extendida }

class Nombre_Clase extends Nombre_SuperClase { cuerpo de la clase extendida } REUTILIZACIÓN DE CLASES:MODELO DE HERENCIA EN JAVA Java soporta herencia simple pero no múltiple. Lo hace mediante el mecanismo de extensión de clase. A partir de él, una subclase se extiende (hereda)

Más detalles

Tema: Árboles Binarios de Búsqueda (ABB).

Tema: Árboles Binarios de Búsqueda (ABB). PED104. Guía N 6 Página 1 Facultad: Escuela: Asignatura: Ingeniería Computación Programación con Estructuras de Datos Tema: Árboles Binarios de Búsqueda (ABB). Competencia o Desarrolla sistemas de información

Más detalles

Algoritmos y Estructuras de Datos Iteradores. Guillermo Román Díez

Algoritmos y Estructuras de Datos Iteradores. Guillermo Román Díez Algoritmos y Estructuras de Datos Iteradores Guillermo Román Díez groman@fi.upm.es Universidad Politécnica de Madrid Curso 2015-2016 Guillermo Román, UPM AED: Introducción 1/26 Iteradores Es muy común

Más detalles

Inteligencia Artificial, Práctica 1. Felix Marquardt & Daniel Clemente 08 nov 05 19:54 Trabajo.java

Inteligencia Artificial, Práctica 1. Felix Marquardt & Daniel Clemente 08 nov 05 19:54 Trabajo.java 08 nov 05 19:54 Trabajo.java Pàgina 1/1 public class Trabajo { int id; int hora; int tamano; int izquierda; int derecha; //la hora en la que el trabajo empieza realmente en un horario int empieza; public

Más detalles

PROBLEMA DE INGENIERÍA

PROBLEMA DE INGENIERÍA UNIVERSIDAD TECNOLOGICA NACIONAL FACULTAD REGIONAL SAN NICOLAS INGENIERIA EN ELECTRONICA PROBLEMA DE INGENIERÍA TECNICAS DIGITALES III ADQUISIDOR GENÉRICO USB Integrantes: Docentes: Chiodín Sebastián Fernández

Más detalles

INDICE DEL CURSO APRENDER PROGRAMACIÓN JAVA DESDE CERO. PROGRAMACIÓN ORIENTADA A OBJETOS (CU00601B)

INDICE DEL CURSO APRENDER PROGRAMACIÓN JAVA DESDE CERO. PROGRAMACIÓN ORIENTADA A OBJETOS (CU00601B) APRENDERAPROGRAMAR.COM INDICE DEL CURSO APRENDER PROGRAMACIÓN JAVA DESDE CERO. PROGRAMACIÓN ORIENTADA A OBJETOS (CU00601B) Sección: Cursos Categoría: Curso Aprender programación Java desde cero Fecha revisión:

Más detalles

Creación de controles de usuario

Creación de controles de usuario 197 Capítulo 11 Creación de controles de usuario 1. Introducción Creación de controles de usuario El desarrollo de aplicaciones se basa principalmente en los controles, que proporcionan las distintas funcionalidades

Más detalles

Práctica 3 mtp. metodoloxía e tecnoloxía da programación. Presentar detalles básicos sobre la sintaxis del lenguaje de programación Java.

Práctica 3 mtp. metodoloxía e tecnoloxía da programación. Presentar detalles básicos sobre la sintaxis del lenguaje de programación Java. Práctica 3 mtp metodoloxía e tecnoloxía da programación Objetivos: Duración: Presentar detalles básicos sobre la sintaxis del lenguaje de programación Java. 1 semana 1.- Identificadores Los identificadores

Más detalles

APRENDE A CREAR UNA PÁGINA WEB CON HTML

APRENDE A CREAR UNA PÁGINA WEB CON HTML APRENDE A CREAR UNA PÁGINA WEB CON HTML Introducción a PHP INTRODUCCIÓN PHP es una lenguaje de programación del lado del servidor. En este curso, lo usaremos para recibir los datos de un formulario, realizar

Más detalles

2) Cual modificador limita el acceso a un método de una clase pública a los miembros de la misma clase?

2) Cual modificador limita el acceso a un método de una clase pública a los miembros de la misma clase? PRTIIPNT: MPRS: H: xamen de iagnóstico Programador Java Instrucciones: Lea cada pregunta cuidadosamente y marque la(s) respuesta(s) que sean correctas. 1) ada la siguiente clase: 1. class rrayopy3{ 2.

Más detalles

Introducción a las aplicaciones Windows

Introducción a las aplicaciones Windows Introducción a las aplicaciones Windows En la primera parte del libro se ha estudiado las características de C#, pero realmente, se ha hecho una escasa utilización de las clases contenidas en el Framework.NET.

Más detalles

Tema: Arreglos de Objetos en C++.

Tema: Arreglos de Objetos en C++. Programación II. Guía 5 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación II Tema: Arreglos de Objetos en C++. Objetivos Específicos Describir la implementación de arreglos de Objetos.

Más detalles

Pontificia Universidad Católica de Chile Escuela de Ingeniería Departamento de Ciencia de la Computación

Pontificia Universidad Católica de Chile Escuela de Ingeniería Departamento de Ciencia de la Computación Pontificia Universidad Católica de Chile Escuela de Ingeniería Departamento de Ciencia de la Computación Competencias IIC1103 Introducción a la Programación (I/2010) Interrogación 1 13 de Abril de 2010

Más detalles

Implementando Transparent Application Failover sobre Aplicaciones.NET

Implementando Transparent Application Failover sobre Aplicaciones.NET Implementando Transparent Application Failover sobre Aplicaciones.NET Por Francisco Riccio Introducción Oracle Database ha venido ofreciendo durante versiones anteriores su tecnología Oracle Real Application

Más detalles

Objective C (Desarrollo con Apple)

Objective C (Desarrollo con Apple) 1 Objective C (Desarrollo con Apple) para programación en Iphone SDK: Similitudes y Diferencias entre Objective C con C/C++ y Java Dr. Moisés Alencastre Miranda, malencastre@itesm.mx 2 Introducción al

Más detalles

15. ANEXO # 5 GAMEPLAYOBJECT

15. ANEXO # 5 GAMEPLAYOBJECT 15. ANEXO # 5 GAMEPLAYOBJECT A continuación se muestra el constructor de la clase GameplayObject public GameplayObject(Camera camera, int rows, int columns, GraphicsDevice dispositivo, bool invertir =

Más detalles

Comunicaciones RS-232 (Puerto Serie)

Comunicaciones RS-232 (Puerto Serie) Comunicaciones RS-232 (Puerto Serie) El puerto serial, como su nombre lo indica envía su información de manera serial, es decir, como un tren de pulsos, utilizando el protocolo RS-232. Para la transmisión

Más detalles

Tema: Árboles Binarios

Tema: Árboles Binarios 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación III Tema: Árboles Binarios Objetivo Implementar la estructura de datos Árbol en C# Desarrollar las operaciones más comunes en árboles.

Más detalles

Programación orientada a objetos

Programación orientada a objetos Repaso Programación orientada a objetos Curso INEM. Programación en Java Santiago Muelas Pascual smuelas@fi.upm.es! Clase! Objeto! Atributo o variable de instancia! Método! Instanciar/crear un objeto!

Más detalles

Tema: Conexión a Base de Datos.

Tema: Conexión a Base de Datos. Sistemas Expertos e Inteligencia Artificial. Guía 6B 1 Tema: Conexión a Base de Datos. Facultad: Ingeniería Escuela: Computación Asignatura: Sistemas Expertos e Inteligencia Artificial Objetivo Específico

Más detalles

PROGRAMACION I Archivos directos

PROGRAMACION I Archivos directos PROGRAMACION I Archivos directos Un archivo relativo (directo) consiste en una colección de registros de longitud fija almacenados uno al lado del otro en un dispositivo de almacenamiento de acceso directo.

Más detalles

También añado a la clase Libro los siguientes métodos: (que programaré más adelante)

También añado a la clase Libro los siguientes métodos: (que programaré más adelante) 1.Creación de la capa de negocios La capa del Dominio de Negocios consta de una clase creada a partir de la tabla Libro a la que le he añadido los atributos no persistentes: CodPais, artic y digcontrol.

Más detalles

Conexión a Base de Datos.

Conexión a Base de Datos. Base de datos I Facultad: Ingeniería Escuela: Computación Asignatura:BDI Conexión a Base de Datos. Objetivo Crear una interfaz gráfica con Visual C#.NET de manera básica Utilizar las sentencias de DML

Más detalles

Programació amb C#.NET

Programació amb C#.NET Programació amb C#.NET Tema 5 (g): ADO.NET Jordi Linares i Pellicer Índice! Introducción! Qué es ADO.NET?! Clases y Objetos de ADO.NET! Explorador de Servidores! Orígenes de Datos! Interfaz Conectada a

Más detalles

Tema: Arboles en C#. Objetivos Específicos. Materiales y Equipo. Introducción Teórica. Definición de Árbol Binario. Programación IV.

Tema: Arboles en C#. Objetivos Específicos. Materiales y Equipo. Introducción Teórica. Definición de Árbol Binario. Programación IV. Programación IV. Guía 6 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación IV Tema: Arboles en C#. Objetivos Específicos Definir el concepto de la estructura de datos Árbol. Implementar

Más detalles

Aprender los conceptos, manejo, usos y aplicación de heaps a fin de utilizarlos para el desarrollo de aplicaciones

Aprender los conceptos, manejo, usos y aplicación de heaps a fin de utilizarlos para el desarrollo de aplicaciones Programación III, Guía 12 1 Facultad : Ingeniería Escuela : Computación Asignatura: Programación III Tema: HEAPS. Objetivo Aprender los conceptos, manejo, usos y aplicación de heaps a fin de utilizarlos

Más detalles

1. Ejemplo de clase : La clase Cuenta 2. Uso de la clase Cuenta. 3. Métodos y objetos receptores de mensajes (Importante)

1. Ejemplo de clase : La clase Cuenta 2. Uso de la clase Cuenta. 3. Métodos y objetos receptores de mensajes (Importante) 1. : La clase Cuenta. Uso de la clase Cuenta 3. Métodos y objetos receptores de mensajes (Importante) 1 Una clase para cuentas de un banco Vamos a modelar con una clase, un nuevo tipo de datos, donde los

Más detalles