0% encontró este documento útil (0 votos)
22 vistas12 páginas

Equipo Matlab 072

Este documento describe un proyecto para simular un nuevo sistema de atención en un banco utilizando algoritmos en MATLAB. El documento explica el problema a resolver, incluyendo los tipos de clientes, criterios de atención y datos de entrada y salida requeridos. También incluye un análisis del problema y la estructura de datos propuesta.

Cargado por

Constanza Soto
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
22 vistas12 páginas

Equipo Matlab 072

Este documento describe un proyecto para simular un nuevo sistema de atención en un banco utilizando algoritmos en MATLAB. El documento explica el problema a resolver, incluyendo los tipos de clientes, criterios de atención y datos de entrada y salida requeridos. También incluye un análisis del problema y la estructura de datos propuesta.

Cargado por

Constanza Soto
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

Facultad de Ingeniería

Universidad de Concepción

Lenguajes de programación
Tarea semestral

GRUPO 72
Integrantes:
-Micaela Alejandra Castillo Vera
-Joaquín Alonso Chavez Oyarzo
-Constanza Antonia Soto Guerrero
-Soledad María Padilla Henríquez
Carrera:
-Ingeniería Ambiental
Curso:
-Lenguaje de Programación (503202-1)

Introducción

En este informe se hablará de cómo resolver un problema mediante un programa que


implique el uso de algoritmos.

Junio de 2021
Los algoritmos son conjuntos de operaciones que permiten encontrar de manera lógica
soluciones a problemas planteados. En programación son las estructuras fundamentales
que permiten la ejecución de diversos programas, mediante líneas de código. Por lo mismo,
estos algoritmos nos ayudan a solucionar problemas y/o a realizar acciones que nos
facilitan la vida.
Estos programas nos permiten realizar simulaciones de cómo funcionarán ciertos
algoritmos, que son fundamentales a la hora de cambiar estructuras de funcionamiento de
cualquier índole.
En base a esto, en este trabajo se requiere realizar una simulación de un nuevo sistema de
atención de un banco. A través de esta simulación se podrá mejorar la calidad de atención
del cliente,
Esta simulación se realizará a través de la plataforma de programación ‘MATLAB’,
generando códigos que permitan desarrollar el programa. De este mismo modo para poder
desarrollar el problema correctamente es necesario una planificación, la cual debe incluir un
resumen, es decir, una explicación que nos permita entender de mejor manera el problema,
y un análisis que nos permita plantearnos cómo llegar al funcionamiento correcto de los
algoritmos.
En base a lo mencionado anteriormente, se realizará un breve resumen del problema,
continuado de un análisis del mismo.
En el nuevo sistema de atención al público se plantea que en dicho banco existen múltiples
cajas que tienen sus respectivas filas, las cuales atienden a un tipo de cliente en específico.
Existen tres tipos de clientes: empresas, titulares de cuentas corrientes y público en general.
Estos clientes, independientemente de su clasificación, tienen un tiempo limitado de
atención.
En el banco existen normativas y criterios que permiten atender de mejor manera a los
clientes. Dentro de estos criterios está el servicio preferencial, en el cual se da prioridad a
personas con movilidad reducida, de la tercera edad y embarazadas, sin embargo, esto
solo aplica a clientes titulares de cuentas corrientes y público general. Otro criterio que tiene
el banco guarda relación con la existencia de cajas desocupadas, este señala que si esto
ocurre, la fila con más clientes tiene una mayor prioridad para poder hacer uso de la caja
desocupada. Cabe señalar, que en el caso de que existiesen filas con una misma cantidad
de clientes se llevaría a cabo un sistema de preferencias, en el cual se atenderá primero a
los clientes de empresas, luego a los titulares de cuentas corrientes y por último el público
en general.
Finalmente, el banco podrá identificar y/o tener un registro de sus clientes cuando el
programa haga correr un algoritmo, que le permitirá saber si sus usuarios terminaron sus
trámites, en cual caja estuvieron, el tiempo que debieron esperar en la fila y el tiempo total
que se demoraron en el banco. Este registro se generará solo cuando todos los clientes
hayan sido atendidos.
Cabe mencionar, que el banco tendrá la opción de generar el registro de sus clientes de dos
maneras distintas: un método lento y un método rápido. En el primer método el usuario será
capaz de leer el registro paso a paso, es decir, mediante éste se podrán ver los
movimientos de los clientes en tiempo real. Mientras que en el otro método solamente se
mostrará el registro final.
Organización “Equipo 072”
Durante la organización de este trabajo, como grupo se decidió designar distintas funciones
para cada uno de los integrantes, entre las cuales se encuentran: la designación de los días
y las horas en que el equipo se reúna; la disciplina durante los días trabajados, vale decir, la
persona encargada de que todos los integrantes se mantengan concentrados durante las
horas estipuladas; la corrección del formato del informe, como por ejemplo, mantener los
párrafos justificado; la correcta redacción y ortografía, etc.; la corrección del código, es
decir, un encargado de revisar el formato del código, con todo lo que ello implique; la
entrega de preguntas planteadas por el equipo hacia los profesores; y por último, un
encargado de la entrega del trabajo.
A continuación, nombraremos a los encargados de cada función.
● Encargado de designar días y horas de trabajo: Soledad Padilla Henríquez
● Encargado de disciplina : Constanza Soto Guerrero
● Encargado del formato del informe:Micaela Castillo Vera
● Encargado del formato del código: Joaquín Chavez Oyarzo
● Encargado de preguntar las dudas a los profesores: Micaela Castillo Vera
Joaquín Chavez Oyarzo.
● Encargado de entregar la tarea: Joaquín Alonso Chavez Oyarzo

Análisis
En el análisis del problema primero nos fijaremos en la entrada de datos, para así poder
realizar un desglose de los datos que ingresan al programa. En la entrada de datos
inicialmente se ingresarán los números de cajas abiertas (CA) en un orden específico, es
decir, en primer lugar se ingresará el número de cajas para público general (G), luego para
titulares de cuentas corrientes (T) y finalmente para empresas (E). Este número se debe
condicionar de tal manera que el número ingresado solo puede ser un número entero,
mayor o igual a 1.
Posteriormente, se ingresarán al programa las identificaciones de los clientes, a los cuales
se les deberá asignar un número entero (n) igual o mayor a 1. En esta parte se tendrán leer
los datos entregados por el archivo creado ‘banco_final.dat’.A continuación de esto, se debe
establecer qué tipo de cliente es, es decir, si es público general (G), titulares de cuentas
corrientes (T) o clientes de empresa (E) del banco. Posteriormente, se debe establecer si el
cliente es de tipo preferencial, de ser así se le asigna el número 1, y si no es preferencial se
le asigna el número 0. Si hubiesen clientes preferenciales, tales como: tercera edad,
embarazada y/o movilidad reducida, se les asignará el primer número que esté en la fila,
mientras que a los clientes que ya estaban en la fila se les enumerara con n+1.
A continuación de esto, se deberá establecer el tiempo de llegada del cliente al banco, el
cual debe ser un número entero mayor o igual a 0. Si dos o más clientes llegasen al mismo
tiempo y se dirigieran hacia la misma caja, el cliente con el número de identificación (n) más
bajo tendrá preferencia sobre el otro cliente. Luego, se deberá definir el tiempo del trámite
bancario, es decir, cuanto se demora en realizar el trámite, donde este número debe ser un
número entero mayor o igual a 1. Es necesario destacar que el tiempo en realizar el trámite
empezará a correr después del tiempo de llegada, pues el tiempo de llegada del cliente
hace referencia al tiempo en que se instala en la caja y no a que en ese instante
comenzará a realizar su trámite. Por ejemplo, si el cliente entra en el tiempo 4 a la caja y se
demora 2 tiempos en realizar el trámite, éste empezará a correr desde el tiempo 5 y saldrá
como cliente despachado en el tiempo 7.
Finalmente, si algún dato no cumple con los valores establecidos del algoritmo, el programa
se detendrá, se descartará y se tendrá que volver a hacer correr el código y,
posteriormente, reingresar nuevos valores correctos. Cabe mencionar, que en la condición
donde los valores no se cumplan será en donde se deberá ingresar un nuevo valor.
En segundo lugar nos fijamos en la salida de datos, la cual va a estar directamente
relacionada con el “tiempo”, es decir, la salida es en función del tiempo, donde el registro
resultante va a ir mostrando los tiempos con las acciones realizadas dentro de este.
A continuación del tiempo, se desplegará el número de personas en las filas, luego el
número de cajas y la identificación del cliente que se está atendiendo en la respectiva caja,
esto irá ordenado respectivamente. Este despliegue va a ir variando dependiendo del tipo
de fila y de caja, es decir, si corresponde al público general, a titulares de cuenta corriente
o a empresas. Por otro lado, si alguna caja no está atendiendo o la fila no tiene clientes se
desplegará un guión “-” .
Finalmente, se desplegará el número de clientes despachados en el “tiempo” respectivo,
donde este número indicará cuántos clientes han terminado su trámite y se retiraron del
banco en ese tiempo y en los anteriores, generando así el registro específico de clientes
despachados en un orden cronológico.

Estructura de datos
En primer lugar, para la lectura de datos, se hizo un archivo de tipo .dat, el cual se llamó
“banco_final.dat”, donde para traspasar este archivo a matlab se usó la función “readtable”,
la cual transforma los datos del archivo en una tabla. Luego, a esta tabla se le asignó el
nombre ‘clientes’, la cual se transformó en un arreglo de tipo celda, utilizando la función
‘table2cell’, donde esta nueva variable se llamó ‘celdadeclientes’.
En el arreglo de celdas las filas tienen distintas labores, donde la primera fila se trató de las
cajas disponibles para cada tipo de cliente, donde en la posición {1,1} de ‘celdadeclientes’
se le asignó la variable ‘caja_general’, la cual indica la cantidad de cajas disponibles para
los clientes de tipo general, mientras que al dato ubicado en la posición {1,2} de la
‘celdadeclientes’ se le asignó la variable a, sin embargo, el dato seleccionado es de tipo
char, por lo que se utilizó la función str2double para poder convertir el dato a uno de tipo
double, el cual se convirtió en una nueva variable de tipo double que se llamó
‘caja_titulares’, por último, al dato ubicado en la posición {1,3} de la celdadeclientes se le
asignó el nombre ‘caja_empresas’.
Por otro lado, las siguientes filas indican información de los clientes a tratar, donde para
poder trabajar de mejor manera con ellos, se creó una nueva variable a partir de
‘celdadeclientes’, en la cual se eliminó la primera fila y, por consiguiente, dejando en ella
solo a los clientes. Dicha variable modificada se llamó ‘c’.
Una vez definidas las variables de entrada se requirieron distintas variables necesarias para
poder resolver el problema.
En primer lugar, se formaron dos variables nuevas, en las cuales se especificó el número de
filas y en la otra el número de columnas de la variable ‘c’, a estas se les asignó
respectivamente, los nombres fila y columna.
A continuación, a partir de los datos de las variables cajas: ‘caja_general’, ‘caja_titulares’,
’caja_empresas’, se generó un vector, que incluye estas variables, el cual se llamó
‘numero_cajas’.
Luego de esto, se creó una matriz para cada tipo de caja, la cual se comporta como un
módulo de atención, donde en la primera columna se trata del número de cajas, la segunda
del número de identificación del cliente y en la tercera columna se especificó la suma entre
el tiempo de llegada y el tiempo de atención del cliente. Estas matrices se llaman: ‘mg’,’mt’ y
‘me', para las ‘caja_general’, ‘caja_titulares’, ‘caja_general’, respectivamente.
Posteriormente, se hicieron las variables para las filas, las cuales fueron guardando la
identificación de los clientes, dichas variables se nombraron como: ‘filag’, ‘filat’ y ‘filae’.
En seguida, se generó otra variable, la cual se llamó ‘contt’, que tuvo un valor igual a 0, ya
que esta nos permitió designar en qué tiempo comenzará a correr el programa.
Después se designó una nueva variable llamada ‘desp’, la cual nos sirve para guardar todos
los clientes despachados en un orden cronológico.
Tras esto, se creó una variable que permitió conocer el tamaño de ‘desp’, a la cual se le
llamó ‘sd’. Esta variable nos ayudó a ir modificando ‘desp’, de tal modo que permitió
asignarle a dicha variable modificada todos los clientes despachados.
A continuación, mediante la variable c se asignó el tiempo de llegada del cliente, el cual
tendrá por nombre ‘e’.
Luego, se generó otra variable llamada ‘ide’, que indica el número de identificación del
cliente.
Seguidamente, se creó una variable llamada ‘tipoe’ la cual señala el tipo de cuenta del
cliente en cuestión, donde dependiendo de este, se le llevó a una fila u otra.
Posteriormente se originaron tres variables ‘sg’,’st’ y ‘se’, las cuales señalan las columnas
de las filas. Mediante este dato, se pudo ir generando las filas. Cabe mencionar que al ir
generando más columnas más disponibilidad habrá en las filas. De la mano de esto, se
generarán otras tres variables más, las cuales tendrán una función específica,el ver si las
filas están vacías o no, estas se llamarán ‘ssg’,’sst’ y ‘sse’.
Después de esto, se generaron distintas variables, entre ellas ‘clienteobservado’, la cual
señala la identificación del cliente a través de la lectura de la matrices: ‘mg’,’mt’ y ‘me’,
también se generó ‘tiempoentrada’, ‘tiempodemora’ y ’tiemposalida’, donde estas muestran
el tiempo de llegada del cliente, la demora del trámite de este, y el tiempo en que sale el
cliente del banco, respectivamente. Además se crearon otras tres variables ‘sfg’, ’sft’ y ‘sfe’,
las cuales ayudan a eliminar al cliente de la fila, para su posterior movimiento hacia una de
las cajas para que lo atiendan.
Algoritmos
En primer lugar, se necesitó un ciclo for para generar el vector ‘numero_cajas’. En este ciclo
se leen la cantidad de cajas para cada tipo de cliente, las cuales se fueron guardando en el
vector anteriormente mencionado. En este mismo ciclo for se creó un if que ve si el tipo de
dato introducido es un número.
Para la creación de las matrices de atención, se generaron tres ciclos for, que le asignan a
cada matriz, es decir, ‘mg’, ’mt’ y ‘me’, x número de cajas. Cabe aclarar que parten sin
ningún cliente dentro de ellas.
Posteriormente, se hizo un gran ciclo while, que incluye todos los procesos que dependan
del tiempo, vale decir, la atención de los clientes y todo lo que esto conlleva, como por
ejemplo, los clientes despachados, el aclarar en qué tiempo llega el cliente, si este tiene
preferencia de atención,etc
También en el interior del while existen tres ciclos for más, los cuales sirvieron para agregar
las personas a las filas, donde a través de condicionales if’s, se vio si el tiempo de llegada
del cliente coincide con el tiempo. De ser así, estos avanzan hacia otro if para detectar qué
tipo de cliente es, es decir si es público general, titular cuenta corriente, o empresa, donde
dependiendo de esto, se le designó una fila u otra.
Dentro de este ciclo while se crearon tres ciclos for para asignar a la variable ‘desp’ todos
los clientes despachados en un tiempo determinado,desde los distintos tipos de cajas. En el
interior de cada uno de estos ciclos for existen condicionales if’s, los cuales ven si el tiempo
y el tiempo de salida del cliente coinciden, donde si es así, estos se despachan.
Finalmente el ciclo while acabá con una aclaración de variable, donde a ‘contt’ se le suma 1
para que el tiempo vaya aumentando de 1 en 1 después de cada ciclo, donde además de
esta aclaración, se despliegan todas las salidas requeridas en el problema, mostrándose
actualizada en cada tiempo, hasta el tiempo final.
Resultados
Los datos de entrada, para la ejecución del programa, fueron desplegados mediante el
archivo ‘banco_final.dat’, los cuales fueron traspasados a una tabla mediante la función
readtable. Por medio de la imagen (1) pudimos observar los datos de las cajas en la primera
fila, mientras que en la columna 1 desde la fila 2 se pudo observar los datos de
identificación de los clientes. En la columna 2 desde la fila 2 se logran identificar los tipos
de clientes que hay. En la columna 3 desde la fila 2 se distinguieron si es que los clientes
tenían prioridad o no. En la columna 4 desde la fila 2 se leyeron los tiempos de llegada de
cada cliente. Finalmente, en la columna 5 desde la fila 2 se mostraron los datos del tiempo
de demora que tuvo el cliente al realizar su trámite.

Imagen 1. Tabla del archivo ”Banco_final.dat”

En la siguiente imagen (2) se mostrarán las salidas de datos del programa realizado, en
donde se puede observar una gran similitud con el código esperado, dado que a pesar de
que no está completo, se ve que el código termina con todos los clientes despachados en
un orden cronológico.
Imagen 2.”Salidas despachadas del programa”
Conclusión
Con respecto a la ejecución del programa, podemos concluir que no logramos cumplir con
éxito el objetivo del problema, pues durante la realización del código no conseguimos
realizar algunas estructuras y/o plantear métodos que nos permitieran obtener las
condiciones que se nos pedían en la tarea. Dentro de las condiciones que no pudimos
obtener están: Los clientes preferenciales, un mecanismo para que el programa detecte
cuantos ciclos debe realizar, y condicionales para los tipos de datos que necesita el
programa, pues agregar dichas condiciones que trajeron consigo ciertos errores en el
código que no fuimos capaces de solucionar.
Esto fue debido a que nos faltó aprender algunas funciones que nos permitieran trabajar de
mejor manera el programa, ya que la información aprendida por nuestro grupo no abarcó los
contenidos necesarios. Por otro lado, no logramos generar métodos lógicos que pudieran
lograr los algoritmos faltantes.
Sin embargo, estas falencias no impidieron que el programa funcionara, debido a que
muestra un orden cronológico de los clientes entrando y saliendo de las cajas. Esto se
consiguió, gracias a los contenidos vistos en clases, tales como: algunas funciones, arreglos
de celdas, estructuras, tablas, ciclos, etc.
Otra cosa que nos facilitó la realización del código fue la organización grupal que se decidió,
ya que mediante esta pudimos intercambiar ideas, opiniones y conocimientos. que nos
permitieron complementarnos al momento de ver posibles soluciones para el código.
Gracias a esto, pudimos aprender a trabajar en equipo y, por consiguiente, solucionar, en
gran parte, las fallas y/o dificultades que nos presentaron en la tarea.

Instrucciones:
Joaquin Alonso Chavez Oyarzo.
Micaela Alejandra Castillo Vera.
Soledad Maria Padilla Henriquez.
Constanza Antonia Soto Guerrero.
Ingeniería Ambiental.
Lenguaje de programación.
Sección 1 (503202-1).
1) En primer lugar, asegurarse que los archivos se descargaron correctamente, debido
a que puede llegar a generarse algún error.
2) A la hora de hacer correr el código, asegurarse que se haya descargado el archivo
‘banco_final.txt’ que contiene los datos de entrada, ya que si se descarga con un
nombre distinto no correrá.
3) Es importante mencionar que si se cambian los datos de entrada hay que
asegurarse de cambiar cuántos tiempos realizará el ciclo, puesto que no logramos
generar dentro del mismo código un algoritmo que lo haga automáticamente.

También podría gustarte