INTRODUCCIÓN
Una de las aplicaciones más interesantes y potentes de la memoria dinámica y de
los punteros son, sin duda, las estructuras dinámicas de datos. En muchas
ocasiones se necesitan estructuras que puedan cambiar de tamaño durante la
ejecución del programa. Por supuesto, podemos crear arrays dinámicos, pero una
vez creados, tu tamaño también será fijo, y para hacer que crezcan o disminuyan
de tamaño, deberemos reconstruirlos desde el principio.
Las estructuras dinámicas nos permiten crear estructuras de datos que se adapten
a las necesidades reales a las que suelen enfrentarse nuestros programas. Pero
no sólo eso, como veremos, también nos permitirá crear estructuras de datos muy
flexibles, ya sea en cuanto al orden, la estructura interna o las relaciones entre los
elementos que las componen.
Las estructuras de datos están compuestas de otras pequeñas estructuras a las
que llamaremos nodos o elementos, que agrupan los datos con los que trabajará
nuestro programa y además uno o más punteros autorreferenciales, es decir,
punteros a objetos del mismo tipo nodo.
En esta investigación crearemos y documentaremos un módulo de control de
colas o turnos en java.
Presentamos esta investigación basados en investigación y dudas que se nos
han planteado, que tiene como finalidad reforzar los conocimientos de colas, pilas
y memoria dinámica en Lenguaje java para aplicarlos a necesidades específicas
de la materia estructura de datos.
MARCO CONCEPTUAL
Las razones que nos llevaron a realizar esta investigación principalmente fue
validar los conocimientos básicos del curso de estructura de datos, recibidos
durante nuestros estudios en la Universidad Mariano Gálvez en forma lógica,
crítica y analíticamente para la solución de problemas en los diferentes
necesidades que se plantearan a lo largo de la carrera, con modelos de solución
sencilla. Facilitarles a los estudiantes el entendimiento del manejo de pilas, colas y
memoria dinámica para que el aprendizaje de las estructuras de datos, mediante
el uso de documentación de un módulo de control de colas o turnos en java, en el
trabajo. Le mostramos al estudiante paso a paso como se construye el programa
así estimulando el pensamiento crítico. Proporcionamos un programa de control
de colas o turnos que ejercita la construcción de conocimiento, que permita
discernir sobre la base conceptual manejo de memoria dinámica. En el trabajo
también Exploramos herramientas moderna con el uso de java convencional en
los que se pida al estudiante su interpretación y análisis como un medio para
entender relaciones matemáticas.
La importancia de los temas investigados es principalmente que nos permite
Reforzar los conceptos de manejo colas, pilas y memoria dinámica, sus relaciones
y sus aplicaciones a problemas orientados hacia la ingeniería. Solucionar
problemas a través de las diferentes estrategias de programación y mediante la
solución de problemas, usando modelos de programación de java para una
optimización de los recursos que tenga a su disposición
MARCO METODOLÓGICO
El propósito fundamental de la presente investigación, es contribuir al
entendimiento de pilas, colas y memoria dinámica, ya que generalmente traemos
problemas desde la programación básica, a través de una propuesta que propicie
el desarrollo de habilidades de lógica para todo estudiante de Ingeniería que
comienza, revisar y desarrollar conceptos y procedimientos de programación.
METODOLOGÍA
Se consideró el método científico porque proporciona lineamientos lógicos en la
investigación, con la finalidad de alcanzar los resultados concluyentes que fueron
analizados científicamente, lo que nos permitió determinar las causas que
originaron el problema del estudio.
Se elaboró un trabajo de forma Explicativa y explicativa y concluyente en el área
de estructura de datos de la Universidad Mariano Gálvez.
MARCO TEÓRICO
Todo problema de investigación se da dentro de un conjunto de proposiciones
más o menos relacionadas entre sí, que definen términos de programación que se
logran aplicar a la carrera de ingeniería. De acuerdo con sus contenidos y con sus
niveles de elaboración, está diseñado con el fin de poder explicar lo más mínimo y
lograr luego un nivel más profesional con el entendimiento. Ya que la información
que se encuentra plasmada con el ideal de poder de poder facilitar el aprendizaje
personal como profesional en el uso de java, pilas, colas y memoria dinámica.
INFORME DE INVESTIGACIÓN
PUNTOS DEL PROGRAMA RELACIONADOS CON EL TEMA
El foco de nuestra investigación está dirigido únicamente a un tema en específico
del programa de estructura de datos de la universidad mariano Gálvez, como lo
es pilas, colas y memoria dinámica, nuestra investigación se centra en la
explicación breve y bien formulada de los conceptos básicos documentando el
programa, en la investigación se utiliza lo visto en curso de estructura de datos
como lo son secuencias, pasos y estructura de la solución de problemas.
JUSTIFICACIÓN DE LA INVESTIGACIÓN
Decidimos el siguiente proyecto de investigación debido a que prácticamente toda
teoría en las ciencias de la comunicación e ingeniería es formulada en términos
de programación, por lo que es fundamental para todo estudiante de Ingeniería
que comienza, revisar y desarrollar conceptos y estructuras de programación
avanzada.
VENTAJA COMPETITIVA DE LA INVESTIGACIÓN
El plus que aporta nuestra investigación es que el estudiante cuenta con ella con
una documentación completa módulo de control de colas o turnos en java.
con una recopilación de los puntos más importantes para seguir los pasos a
seguir para realizar y solucionar problemas de estructura de datos y memoria
dinámica .
También ayuda a que el estudiante desarrolle su capacidad de análisis y
pensamiento lógico para emplearlos en la formulación y resolución de problemas
de programación de Ingeniería, haciendo énfasis en los conceptos que servirán
como base para el estudio la memoria dinámica y programación avanzada.
OBJETIVOS DE APRENDIZAJE DE LA INVESTIGACIÓN
Identificar la forma correcta de manejar Memoria Dinámica, pilas y colas.
Decidir de manera correcta y de la forma más eficiente, para manejar la
estructura de datos cuando y como se deben de aplicar.
Justificar cada paso que realizan, cuando se encuentren frente a un ejercicio
en el cual deban aplicar pilas, colas y memoria dinámica dentro de una
estructura de datos en la programación de java.
/*clase para generar las estaciones */package Datos;
/** * * @author George */public class Estaciones {
public String getEstatus() { return estatus; }
public void setEstatus(String estatus) { this.estatus = estatus; }
String estatus; public String getId_estacion() { return id_estacion; }
public void setId_estacion(String id_estacion) { this.id_estacion = id_estacion; }
public String getNombre_estacion() { return nombre_estacion; }
public void setNombre_estacion(String nombre_estacion) { this.nombre_estacion = nombre_estacion; } String id_estacion; String nombre_estacion; }
/*clase para poder generar los servicios * * . */package Datos;
/** * * @author George */public class Servicios {
public String getId() { return id; }
public void setId(String id) { this.id = id; }
public String getNombre_servicio() { return nombre_servicio; }
public void setNombre_servicio(String nombre_servicio) {
this.nombre_servicio = nombre_servicio; } String id; String nombre_servicio; }
/*Clase para generar los tickets */package Datos;
/** * * @author George */public class Ticket {
// estructura de fecha YYYY-MM-DD Estructura minutos HH:MM:SS hora final default 00:00:00 //variable interna de contador private int ticket;private String servicio;private String hora_inicio;private String hora_final; String No_ticket;
//Campos para controlar la funcionalidad String usuario; String Estatus; String fecha; // opciones del camo Estatus "1. EN COLA, ATENDIENDO, FINALIZADO" public void setEstatus(String Estatus) { this.Estatus = Estatus; } public String getEstatus() { return Estatus; }
public String getFecha() { return fecha; }
public void setFecha(String fecha) { this.fecha = fecha; }
public String getUsuario() { return usuario; }
public void setUsuario(String usuario) { this.usuario = usuario; }
// generador de tickets public void Genera_No_ticket(String servicio, int ticket) { No_ticket=servicio+ticket+""; this.No_ticket = No_ticket; }
//lectura de tickets desde DB public void setNo_ticket(String No_ticket) { this.No_ticket = No_ticket; }
public String getNo_ticket() { return No_ticket; }
public String getHora_final() { return hora_final; }
public void setHora_final(String Hora_final) { if (Hora_final.equals("")){ this.hora_final="00:00:00"; }else { this.hora_final = Hora_final; }}
public String getHora_inicio() { return hora_inicio; }
public void setHora_inicio(String Hora_inicio) { if (Hora_inicio.equals("")){ this.hora_inicio="00:00:00"; } else{ this.hora_inicio = Hora_inicio; }}
public String getServicio() { return servicio; } }
/* * To change this template, choose Tools | Templates * and open the template in the editor. */package Funcionalidad;
/** * * Aca se encuentra toda la funcionalidad para consultar y grabar en la base de datos */
import Datos.Estaciones;import Datos.Servicios;import Datos.Ticket;
import java.sql.*;import java.util.Vector;
public class ConexionBasedatos { // variables para conexion
public String db="costumer_service"; public String url="jdbc:mysql://127.0.0.1/"+db; public String user="root"; public String pass="root"; Connection link=null; public Connection Conectar(){ try{ Class.forName("org.gjt.mm.mysql.Driver"); link=DriverManager.getConnection(this.url,this.user, this.pass); } catch(Exception e){ System.out.println(e); } return link; } // metodos para la parte de record public void graba_ticket(Ticket x){ Conectar(); if (x!=null){ try{ Statement stmt=link.createStatement(); stmt.executeUpdate("INSERT INTO transacciones(fecha, no_ticket, hora_inicio, hora_final, " + "usuario, Estatus)" +"VALUES('"+x.getFecha()+"','"+x.getNo_ticket()+"','"+x.getHora_inicio()+"','" +x.getHora_final()+"','"+x.getUsuario()+"','"+x.getEstatus()+"')"); }catch (SQLException e){System.out.println(e);} }else System.out.println("no hay datos para grabar"); } public Vector Consulta_servicios(){ Vector respuesta=null; Conectar(); Servicios lista=null; Vector listado_servicios=null; try{ Statement stmt= link.createStatement();
ResultSet rs=stmt.executeQuery("SELECT * FROM servicios "); listado_servicios = new Vector(); while(rs.next()){ Servicios temp=new Servicios(); temp.setId(rs.getString("id")); temp.setNombre_servicio(rs.getString("nombre_servicio")); listado_servicios.addElement(temp); } }catch(SQLException e){ System.out.println(e); } return listado_servicios; } //Query para estaciones public void Consulta_Estaciones(){ Conectar(); Vector listado_Estaciones=null; Estaciones lista=null; try{ Statement stmt= link.createStatement(); ResultSet rs=stmt.executeQuery("SELECT * FROM estaciones "); listado_Estaciones = new Vector(); while(rs.next()){ Estaciones temp=new Estaciones(); temp.setId_estacion(rs.getString("id_estacion")); temp.setNombre_estacion(rs.getString("nombre_Estacion")); temp.setEstatus(rs.getString("estatus")); listado_Estaciones.addElement(temp); } }catch(SQLException e){ System.out.println(e); } for (int i=0; i<listado_Estaciones.size(); i++){ lista = (Estaciones) listado_Estaciones.elementAt(i); System.out.println(lista.getId_estacion()); System.out.println(lista.getNombre_estacion()); System.out.println(lista.getEstatus()); } } public Vector Lista_de_tickets(String x){ Conectar(); Vector listado_Ticket=null; Ticket lista=null; try{ Statement stmt= link.createStatement();
ResultSet rs=stmt.executeQuery("SELECT * FROM transacciones WHERE Estatus='"+x+"' "); listado_Ticket = new Vector(); while(rs.next()){ Ticket temp=new Ticket(); temp.setFecha(rs.getString("fecha")); temp.setNo_ticket(rs.getString("no_ticket")); temp.setHora_inicio(rs.getString("hora_inicio")); temp.setHora_final(rs.getString("hora_final")); temp.setUsuario(rs.getString("usuario")); temp.setEstatus(rs.getString("estatus")); listado_Ticket.addElement(temp); } }catch(SQLException e){ System.out.println(e); } return listado_Ticket; } public void InsertaServicio(String x , String y){ Conectar(); if (x!=null&& y!= null){ try{ Statement stmt=link.createStatement(); stmt.executeUpdate("INSERT INTO servicios(id, " + " nombre_servicio)" +"VALUES('"+x+"','"+y+"')"); }catch (SQLException e){System.out.println(e);} }else System.out.println("no hay datos para grabar"); } public void UpdateServicio(String x , String y,String xx , String yy){ Conectar(); if (x!=null && y!= null && xx!=null && yy!=null){ try{ Statement stmt=link.createStatement(); // Prepare a statement to update a record //String sql = "UPDATE servicios SET id='"+xx+"' WHERE id = '"+x+"'" ; String sql= "UPDATE servicios SET nombre_servicio='"+yy+"' WHERE nombre_servicio = '"+y+"'" ; String sql2= "UPDATE servicios SET id='"+xx+"' WHERE id = '"+x+"'" ;
// Execute the insert statement int updateCount = stmt.executeUpdate(sql); int updateCount2= stmt.executeUpdate(sql2); //int updateCount2= stmt.executeUpdate(sql1) ; // updateCount contains the number of updated rows }catch (SQLException e){System.out.println(e);} }else System.out.println("no hay datos para grabar"); } public void DeleteServicio(String x ){ Conectar(); if (x!=null){ try{ String sql = "DELETE FROM servicios WHERE id = ?"; String Id = x; // Create a statement object. We use PreparedStatement here. PreparedStatement statement = link.prepareStatement(sql); // Pass a value of a userId that will tell the database which // records in the database to be deleted. Remember that when // using a statement object the indext parameter is start from // 1 not 0 as in the Java array data type index. statement.setString(1, Id); // Tell the statement to execute the command. The executeUpdate() // method for a delete command returns number of records deleted // as the command executed in the database. If no records was // deleted it will simply return 0 int rows = statement.executeUpdate(); System.out.println(rows + " record(s) deleted."); }catch(Exception e){} }else System.out.println("no hay datos para grabar"); } public void InsertaUsuario(String x , String y,String w, String z){ Conectar(); // if (x!=null&& y!= null){ try{
Statement stmt=link.createStatement(); stmt.executeUpdate("INSERT INTO usuarios (user_id, " + " password,nombre,apellido)" +"VALUES('"+x+"','"+y+"','"+w+"','"+z+"')"); }catch (SQLException e){System.out.println(e);} //}else //System.out.println("no hay datos para grabar"); } public void DeleteUsuario(String x ){ Conectar(); if (x!=null){ try{ String sql = "DELETE FROM usuarios WHERE user_id = ?"; String Id = x; // Create a statement object. We use PreparedStatement here. PreparedStatement statement = link.prepareStatement(sql); // Pass a value of a userId that will tell the database which // records in the database to be deleted. Remember that when // using a statement object the indext parameter is start from // 1 not 0 as in the Java array data type index. statement.setString(1, Id); // Tell the statement to execute the command. The executeUpdate() // method for a delete command returns number of records deleted // as the command executed in the database. If no records was // deleted it will simply return 0 int rows = statement.executeUpdate(); System.out.println(rows + " record(s) deleted."); }catch(Exception e){} }else System.out.println("no hay datos para grabar"); } public void Actualiza_Estatusticket(String user, String Ticket, String Estatus){ GeneraTicket hora_final =new GeneraTicket(); String Hora_final; if (Estatus.equals("Atendiendo")){ Hora_final="00:00:00"; }else {
Hora_final=hora_final.regresa_hora(); } Conectar(); if (Ticket !=null) { try{ Statement stmt=link.createStatement(); stmt.executeUpdate("UPDATE transacciones set usuario='"+user+"', Estatus='"+Estatus+"', hora_final='"+Hora_final+"'" + "WHERE no_ticket='"+Ticket+"'" ); }catch (SQLException e){System.out.println(e);} }else System.out.println("no hay datos para grabar"); } public void InsertarEstacion(String x , String y,String w){ Conectar(); if (x!=null&& y!= null){ try{ Statement stmt=link.createStatement(); stmt.executeUpdate("INSERT estaciones(id_estacion, " + " nombre_estacion,estatus)" +"VALUES('"+x+"','"+y+"','"+w+"')"); }catch (SQLException e){System.out.println(e);} }else System.out.println("no hay datos para grabar"); } }
/* * To change this template, choose Tools | Templates * and open the template in the editor. */package Funcionalidad;
/** * * @author George */import Sonido.separaString;import Datos.Ticket;import Login.Principal;
import forms.Funcionalidad_DispensaTicket;import java.awt.print.PrinterException;import java.awt.print.PrinterJob;import java.util.*;import java.util.Date;import java.sql.*;import java.util.logging.Level;import javax.swing.JDialog;import javax.swing.JFrame;
public class Estructuras_final { Vector servicios=null; Connection conn=null;
/** * Aqui se encuentra el metodo principal de main donde está el acceso a la conexión y la llamada a todos lo objetos de l */las clases. public static void main(String[] args) { // TODO code application logic here
// separaString voz = new separaString();// voz.Obtener_sonido("A1548978"); new Principal().setVisible(true);
GeneraTicket generador_ticket=new GeneraTicket();Ticket temp = new Ticket();temp=generador_ticket.generar_ticket("B"); //ingresa el servicio del que quiere generar el ticket
System.out.println("hora "+temp.getHora_inicio());System.out.println("ticket "+temp.getNo_ticket());System.out.println("fecha 1 "+generador_ticket.regresa_fecha());
ConexionBasedatos conexion = new ConexionBasedatos();temp.setFecha(generador_ticket.regresa_fecha()); //YYY-MM-DD//conexion.graba_ticket(temp);System.out.println(temp.getFecha()+" esta es la fecha");//conexion.Conectar();
conexion.Consulta_servicios();conexion.Consulta_Estaciones();conexion.Lista_de_tickets("Atendiendo");
cola cola1 = new cola();
// Logger.getLogger(PrintMe.class.getName()).log(Level.SEVERE, null, ex); } }
/* * * clase que genera los tickets. */package Funcionalidad;
import Datos.Ticket;import java.util.Calendar;
import java.util.Random;
/** * * @author George */public class GeneraTicket { int auxx;
public int generarNumero(){ auxx++; int aux=auxx; return aux;
}
public Ticket generar_ticket(String Servicio){ Ticket respuesta=new Ticket();//correlativo para ticket// int aux;// aux=generarNumero(); Random rnd = new Random(); int aux= rnd.nextInt(100) ; //asignacion de valores a variables
respuesta.Genera_No_ticket( Servicio,aux);respuesta.setHora_inicio(regresa_hora());respuesta.setHora_final("");respuesta.setUsuario("");respuesta.setEstatus("En cola");respuesta.setUsuario("");return respuesta; }
// regresa hora del sistema cuando se genero el ticket
public String regresa_hora(){ String hora_inicio=null;
Calendar calendario =Calendar.getInstance();int hora= calendario.get(Calendar.HOUR);int min=calendario.get(Calendar.MINUTE);int sec=calendario.get(Calendar.SECOND);
hora_inicio=(hora+":"+min+":"+sec);return hora_inicio;} public String regresa_fecha(){ String fecha= null; Calendar calendario =Calendar.getInstance(); int anio =calendario.get(Calendar.YEAR); int mes=calendario.get(Calendar.MONTH); int dia =calendario.get(Calendar.DAY_OF_MONTH); fecha =(anio+"/"+mes+"/"+dia);
return fecha; } }
/* * * Genera nuevos servicios para ser agregados a la base de datos. */package Funcionalidad;
/** * * @author George */public class ServiciosDisponibles { ConexionBasedatos conexion= new ConexionBasedatos(); public void muesra_servicios(){ } }
/* * * Objeto que manda a la imprimir el ticket generado. */
package Impresiones;
import java.awt.Graphics;import java.awt.print.PageFormat;import java.awt.print.Printable;
public class PrintObject implements Printable { private String gg; public PrintObject(String g){ gg=g; } @Override public int print (Graphics g, PageFormat f, int pageIndex) { if (pageIndex == 0) { g.drawString(gg, 100,100); // Draw the letter 1 at pixel coordinates (100,100) return PAGE_EXISTS; }else return NO_SUCH_PAGE; }}
/* * Clase que hace la consulta si el usuario exite * */package Login;
import Funcionalidad.*;
import java.sql.*;import java.util.logging.Level;import java.util.logging.Logger;import javax.swing.JOptionPane;
/** * @author heinz */public class Consultas { // objeto para conectar ConexionBasedatos con=new ConexionBasedatos(); //variables de conectar Connection conect=null; Statement st=null; ResultSet rs=null; String query; public boolean verificar (String user, String pwr) { int sw=0; query = "select * from usuarios where nombre='"+user+"' and password='"+pwr+"'"; try { conect=con.Conectar(); st=conect.createStatement(); rs=st.executeQuery(query); while (rs.next()){ if (rs.getString(1)==null) sw=0; else sw=1; } } catch (SQLException ex) { JOptionPane.showMessageDialog(null,"Error sql"+ ex); } if (sw==1)return true; else return false; }}
/* * Clase principal para reproducir el audio en la llamada de tickets. * */
ackage Sonido;
import javazoom.jl.player.Player; public class Sonido { public void reproducirAudio(String archivo) {try {Player player = new Player(getClass().getResourceAsStream(archivo));player.play();player.close();} catch (Exception e) {
System.out.println("Error al reproducir el audio");}} }
import javax.swing.*;
public class separaString {
public void Obtener_sonido(String x){ char numero1; numero1=x.charAt(1);
char letra[]=new char[10];Sonido sonido1 = new Sonido();sonido1.reproducirAudio("/recursos/ticket.mp3");
for ( int j=0; j < x.length(); j++) {
letra[j]= x.charAt (j);switch(letra[j]) { case '1': sonido1.reproducirAudio("/recursos/UNO.mp3"); break; case '2': sonido1.reproducirAudio("/recursos/DOS.mp3"); break; case '3': sonido1.reproducirAudio("/recursos/TRES.mp3"); break; case '4': sonido1.reproducirAudio("/recursos/CUATRO.mp3"); break; case '5': sonido1.reproducirAudio("/recursos/CINCO.mp3"); break; case '6': sonido1.reproducirAudio("/recursos/SEIS.mp3"); break; case '7': sonido1.reproducirAudio("/recursos/SIETE.mp3"); break; case '8': sonido1.reproducirAudio("/recursos/OCHO.mp3"); break; case '9': sonido1.reproducirAudio("/recursos/NUEVE.mp3"); break; case '0': sonido1.reproducirAudio("/recursos/CERO.mp3"); break; case 'A': sonido1.reproducirAudio("/recursos/A.mp3"); break; case 'B': sonido1.reproducirAudio("/recursos/B.mp3"); break; case 'C': sonido1.reproducirAudio("/recursos/C.mp3"); break;
}// fin de swithc
} sonido1.reproducirAudio("/recursos/pasar.mp3");
switch(numero1) { case '1': sonido1.reproducirAudio("/recursos/UNO.mp3"); break; case '2': sonido1.reproducirAudio("/recursos/DOS.mp3"); break; case '3': sonido1.reproducirAudio("/recursos/TRES.mp3"); break; case '4': sonido1.reproducirAudio("/recursos/CUATRO.mp3"); break; case '5': sonido1.reproducirAudio("/recursos/CINCO.mp3"); break; case '6': sonido1.reproducirAudio("/recursos/SEIS.mp3"); break; case '7': sonido1.reproducirAudio("/recursos/SIETE.mp3"); break; case '8': sonido1.reproducirAudio("/recursos/OCHO.mp3"); break; case '9': sonido1.reproducirAudio("/recursos/NUEVE.mp3"); break; case '0': sonido1.reproducirAudio("/recursos/CERO.mp3"); break; case 'A': sonido1.reproducirAudio("/recursos/A.mp3"); break; case 'B': sonido1.reproducirAudio("/recursos/B.mp3"); break; case 'C': sonido1.reproducirAudio("/recursos/C.mp3"); break;
}// fin de swithc}
}
Pantallazos dela ejecución del programa
Costo del desarrollo del proyecto
Costo de Desarrollo Costo QuetzalesCurso de universidad Mariano Galvez Estructura de datos(mensualidades e inscripcion) Q9,275Curso Gastos Dia Sabado (Gasolina, almuerzo,refaccion, gastos varios) Q8,000comunicaciones (Celular, Internet) Q400tiempo dedicado dentro de horario laboral (144 horas) Q900Tiempo dedicado fuetra de horario laboral Reunion todos los integrantes (12 Horas) Q75Tiempo dedicado fuera de horario laboral (Casa personal) Q500Comida reunion todos los integrantes(pizza, bebidas,cenas) Q195Documentacion(cd, encuadernado,presentacion) Q35Total de desarrollo Q19,380
UNIVERSIDAD MARIANO GÁLVEZ DE GUATEMALA
FACULTAD DE INGENIERA
INGENIERA EN SISTEMAS DE INFORMACIÓN Y CIENCIAS DE LA
COMPUTACIÓN
ESTRUCTURA DE DATOS
PLAN FIN DE SEMANA
MODULO DE CONTROL DE COLAS O TURNOS
GUATEMALA, JUNIO DEL 2012
CATEDRATICO(A): INGENIERO RICARDO BELTRAN.INTEGRANTE CARNET EMAIL TELÉFONO
Luis Fernando Escobar Morales 0900-10-11306 [email protected] 5403-0957
Juan Carlos Lopez Huertas 0900-10-703 [email protected] 5633-8269
Heinz Richard Turcios Lam 0900-10-1132 [email protected] 4336-6815
Jorge Barrera Barrera 0900-10-12569 [email protected] 5825-2770