Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Examen 02

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 4

ESTUDIOS PONTIFICIA

GENERALES UNIVERSIDAD
CIENCIAS CATÓLICA
DEL PERÚ

TÉCNICAS DE PROGRAMACIÓN
SEGUNDO EXAMEN
SEMESTRE ACADÉMICO 2020-1

Horario: Todos Duración: 180 minutos

Elaborado por los profesores del curso.

ADVERTENCIAS:
- Obligatoriamente los alumnos deberán mantener en todo momento el audio de sus computadores abierto de modo que puedan recibir los
comunicados que se hagan durante el examen. De tener algún problema deberán hacérselo saber de inmediato al profesor de su horario por
correo. De no hacerlo, no se aceptarán reclamos alegando que no oyeron las indicaciones.
- SE LES RECUERDA QUE, DE ACUERDO AL REGLAMENTO DISCIPLINARIO DE NUESTRA INSTITUCIÓN, CONSTITUYE
UNA FALTA GRAVE COPIAR DEL TRABAJO REALIZADO POR OTRA PERSONA O COMETER PLAGIO. ESTO, Y EL
HECHO DE ENCONTRAR CUALQUIER ARCHIVO YA SEA .c O .h CON FECHA U HORA DE CREACIÓN ANTERIOR AL
EXAMEN SERÁ CONSIDERADO UNA FALTA DE PROBIDAD Y POR LO TANTO AMERITARÁ LA ANULACIÓN DE LA
PRUEBA.

INDICACIONES:
- CREE EN EL COMPUTADOR UNA CARPETA DE TRABAJO CON EL SIGUIENTE NOMBRE: 2020_01_EXAMEN02_TP. EN ELLA
COLOCARÁ LOS PROYECTOS QUE DEN SOLUCIÓN A LOS PROBLEMAS PLANTEADOS.
- LAS SOLUCIONES DEBERÁN DESARROLLARSE BAJO UN ESTRICTO DISEÑO DESCENDENTE, por lo que NO SE CALIFICARÁN
aquellos módulos que son llamados por otros que estén incompletos. Cada módulo no debe sobrepasar las 30 líneas de código
aproximadamente.
- NO SE PUEDEN EMPLEAR ARCHIVOS AUXILIARES NI VARIABLES GLOBALES.
- En la calificación se tomará en cuenta el buen uso de los nombres de los identificadores, y el eficaz uso de comentarios.
- Si el programa no muestra los resultados o los muestren y no sean correctos, no podrán tener más del 75% de la nota.
- No se calificará el código puesto como comentario.
- No se calificarán aquellas funciones implementadas en el archivo main.c

1. (10 puntos)
Una empresa, desea controlar las horas de trabajo del personal para poder verificar si están cumpliendo
con la jornada asignada o si realizan horas extras. Para ello se tienen los siguientes archivos CSV:
● Empleados.csv
10348929,Justo Perez Sanchez,12,5,2005,123
09784523,Maria Rivera Loayza,5,12,2010,564
78667499,Sonia Salas Flores,3,6,2018,454

En este archivo se almacena la información de los empleados: DNI, nombre y apellidos, fecha de ingreso
a la empresa (día, mes, año) y el área en la que trabaja el empleado.
● Areas.csv
123,Administracion y Finanzas,40
567,Atencion al cliente,45.5
454,Operaciones,47

En este archivo se almacena la información de las áreas en las cuales trabajan los empleados: código,
nombre y cantidad de horas semanales que deben laborar los empleados de un área.
● Horas_Trabajo.csv
10348929,2020,1,2,7,55,0,19,20,15,3,7,50,13,17,30,22,…

09784523,2020,2,1,8,10,15,19,20,10,…,28,7,50,4,18,12,10
10348929,2020,7,1,8,5,12,16,18,59,2,8,55,19,28,30,12,…

En este archivo se almacena la información detallada de las horas de trabajo diarias de cada empleado,
agrupadas por año y mes: DNI del empleado, año, mes y una lista de valores que tienen el día, la hora de
inicio (hora, minuto, segundo) y la hora de fin (hora, minuto, segundo) de la jornada diaria de trabajo. Por
ejemplo, la primera línea del archivo se debe interpretar de la siguiente manera: DNI: 10348929 del
año:2020 del mes 1 del día 2 (corresponden a los datos del 2 de enero del 2020), hora de ingreso 7:55:00,
Página 1 de 4
salida: 19:20:15, día 3 (corresponden a los datos del 3 de enero del 2020), ingreso: 7:50:13,
salida:17:30:22 y así se continúan con los datos de ingreso y salida del mes para el empleado específico.
En cada línea del archivo se puede tener información como máximo de 28 días por mes.
Se le pide, elaborar un proyecto en Lenguaje C con el nombre “Ex02-Preg01-Horas” que permita
realizar lo siguiente:
a) (2 puntos) Definir las estructuras de datos que permitan cargar los datos de los archivos, los campos
que manejen cadenas de caracteres deben definirse como char*, esto es, como punteros, no como
arreglos, los valores numéricos que aparecen en el archivo deben guardarse como tal, eso es, los
enteros como int y los de punto flotante como double.
Para las áreas se manejará una sola estructura (struct Area), con los campos del archivo áreas.csv y
dos campos adicionales, el primero un puntero a la información de los empleados que trabajan en el
área (struct Empleado*) y el segundo un entero que indique el número de empleados que tiene el
área. La cantidad máxima de empleados por área es de 25.
Para los empleados se manejará una sola estructura (struct Empleado), con los campos del archivo
empleados.csv y dos campos adicionales, el primero un puntero a la información de las horas
trabajadas por mes (struct TotalHoraxMes*) y el segundo un entero que indique el número de meses
para los cuales se tienen registradas las horas de trabajo del empleado.
La estructura que almacena las horas trabajadas por empleado (struct TotalHoraxMes), tiene como
campos: el año trabajado, el mes trabajado y el total de horas trabajadas por año y mes de un
empleado.
b) (1 punto) Cargar los datos de las áreas, en un arreglo del tipo struct Area. La cantidad máxima de
áreas en el archivo es de 20.
c) (1.5 puntos) Cargar los datos de los empleados para cada área, completando la información de struct
Empleado * para cada área.
d) (3 puntos) Solicitar un año y un trimestre al usuario, con esta información completar los datos
necesarios en la estructura TotalHoraxMes para cada empleado. Puede asumir que los datos
ingresados son correctos.
e) (2 puntos) Emitir el siguiente reporte en un archivo de texto, para el año y trimestre ingresado. Para
los datos mostrados se ingresó el año 2020 y el trimestre 1.
f) (0.5 puntos) Liberar todos los espacios de memoria gestionados dinámicamente que contienen la
información en el arreglo del tipo struct Area.
Control_Horas_Trabajadas.txt
CONTROL DE HORAS TRABAJADAS POR AREA
ANIO: 2020
Trimestre: 1 - Enero a Marzo
=====================================================================================================
Area: 123 - Administracion y Finanzas
Horas de la jornada semanal: 40.0
-----------------------------------------------------------------------------------------------------
DNI NOMBRE Fecha de Ingreso HORAS TOTALES HORAS JORNADA HORAS EXTRAS
1) 10348929 Justo Perez Sanchez 12/05/2005 565.55 540.00 25.55

-----------------------------------------------------------------------------------------------------
Total de empleados: 12
Total horas extras en el trimestre: 280.35
=====================================================================================================
Area: 454 - Operaciones
Horas de la jornada semanal: 47.0
-----------------------------------------------------------------------------------------------------
DNI NOMBRE Fecha de Ingreso HORAS TOTALES HORAS JORNADA HORAS EXTRAS
1) 78667499 Sonia Salas Flores 03/06/2018 740.33 634.50 105.83

-----------------------------------------------------------------------------------------------------
Total de empleados: 25
Total horas extras: 1354.67
=====================================================================================================
RESUMEN:

Página 2 de 4
Total de empleados: 99
Total horas extras en el trimestre: 5200.25
=====================================================================================================
La columna “HORAS TOTALES” es la suma de las horas reales trabajadas por el empleado en el
trimestre.
La columna “HORAS JORNADA” es la suma de las horas que debía trabajar el empleado, de acuerdo a
la cantidad de horas semanales que deben laborar los empleados de un área. Debe asumir que, sin
importar el mes, un empleado trabaja 4.5 semanas en un mes.
La columna “HORAS EXTRA” es la diferencia entre los dos cálculos previos, no debe ser negativa.
Consideraciones:
● Todos los archivos solo se pueden leer una vez y los datos no están ordenados.
● Los trimestres se ingresarán con números: 1 (enero a marzo), 2 (abril a junio), 3 (julio a setiembre) o
4 (octubre a diciembre).
● Puede darse el caso que un empleado esté de vacaciones y no asista a trabajar todo un mes, por lo
tanto, no existirá información para ese empleado en el archivo Horas_Trabajo.csv, en el año y mes
que está de vacaciones.
● Toda operación de búsqueda debe realizarse en una función independiente. No se considerará en la
calificación los procesos de búsqueda que estén contenidos en el código de otro proceso. Las
funciones de búsqueda deben considerar la posibilidad que el dato buscado no se encuentre.
2. (10 puntos)
Una entidad bancaria necesita una aplicación en lenguaje C que le permita manejar las cuentas de sus
clientes, Para realizar esta labor se cuenta con dos archivos de tipo CSV: el primero contiene los clientes
de un banco, el segundo las transacciones hechas por los clientes, como se muestra a continuación:
Clientes.csv
71067314,Irma Virginia Maria,Diaz,Correa,2595.32
58673328,Sandro,Chung,Lee,-16518.00
46116115,Shirley Isabel,Cabrea,Luna,0.0

Transacciones.csv
64046470,D,3254.28,D,2133.64,R,4514.11,D,1440.48,D,1006.9,D,687.62,R,4888.15,R,3394.06
20652412,R,1145.65
73012493,D,2747.71,R,12875.98,D,1256.88

En el archivo “Clientes.csv” se almacena en cada línea la información de cada cliente: número de la


cuenta, sus nombres, apellido paterno, apellido materno y monto inicial de la cuenta. Este último valor
puede ser positivo, negativo o también cero.
En el archivo “Transaccciones.csv” se almacenan las transacciones hechas por los clientes (depósitos y
retiros) en un período de tiempo, en cada línea tenemos: el código de la cuenta seguido de una serie de
operaciones. Cada operación está dada por el tipo de transacción (D: depósito, R: retiro) y el monto de la
transacción, este último siempre será un valor positivo.
Se pide elaborar un proyecto en Lenguaje C con el nombre “Ex02-Preg02-Banco” que permita realizar
lo siguiente:
a) Cree un archivo binario denominado “Clientes.bin” a partir del archivo “Clientes.csv”. El archivo
binario debe tener como campos: el número de cuenta (entero), el nombre del cliente (cadena de
caracteres de la forma: ApellidoPaterno/ApellidoMaterno/Nombres), el monto inicial (valor de
punto flotante), el campo “haber” de la cuenta (valor de punto flotante), el campo “debe” de la cuenta
(valor de punto flotante) y el estado de la cuenta (cadena de caracteres). El monto inicial debe
colocarlo tal como está en el archivo.
Por otro lado, si el monto inicial es positivo entonces debe copiarse en el campo “haber”, en el campo
“estado” debe colocar la palabra “HABILITADO” y el campo “debe” deberá quedar en cero. Si el

Página 3 de 4
monto inicial es negativo debe copiarlo en el campo “debe” como un valor positivo, en el estado la
palabra “INHABILITADO” y el campo “haber” debe quedar en cero.
b) Empleando el archivo “Transacciones.csv”, actualice los campos “haber”, “debe” y “estado” de las
cuentas en el archivo binario “Clientes.bin”. Debe tener en cuenta que una misma cuenta puede
aparecer varias veces en el archivo y una cuenta puede tener varios movimientos en una línea. El
monto inicial no debe modificarse. En esta tarea debe considerar lo siguiente:
- Si la operación es un depósito deberá verificar qué campo tiene el monto, si está en el “haber”
deberá sumárselo y si está en el “debe” deberá restarlo. En este último caso si el valor se torna
negativo deberá moverlo a “haber” como positivo y el “debe” deberá quedar en cero, luego, debe
cambiar el “estado” de “INHABILITADO” por “HABILITADO”.
- Si la operación es un retiro deberá verificar qué campo tiene el monto, si está en el “haber” deberá
restárselo y si está en el “debe” deberá sumarlo. En el primer caso si el valor se torna negativo
deberá moverlo a “debe” como positivo y el “haber” deberá quedar en cero, luego debe cambiar el
“estado” de “HABILITADO” por “INHABILITADO”.
c) Finalmente, a partir del archivo “Clientes.bin” deberá emitir dos reportes:
“EstadosDeCuentasHabiles.txt” y “EstadosDeCuentasNoHabiles.txt” similares a los que se
muestran a continuación, el archivo solo lo podrá leer una sola vez en esta tarea:
Reporte 1: EstadosDeCuentaHabiles.txt
BANCO ABC: ESTADOS DE CUENTAS HABILES
===================================================================================
CUENTA TITULAR SALDO INICIAL SALDO FINAL
===================================================================================
71067314 Diaz/Correa/Irma Virginia María 2595.32 1709.34
46116115 Cabrea/Luna/Shirley Isabel 0.00 5600.50
36548102 Sanchez/Quispe/Felipe -760.80 120695.33

Reporte 2: EstadosDeCuentaNoHabiles.txt
BANCO ABC: ESTADOS DE CUENTAS HABILES
===================================================================================
CUENTA TITULAR SALDO INICIAL SALDO FINAL
===================================================================================
58673328 Chung/Lee/Sandro -16518.00 -1709.34
77885533 Lopez/Quilla/Luz Constanza 23290.90 -12587.65
12345678 Juvenal/Ramirez/Carlos Daniel Luis 0.00 -10345.67

Consideraciones:
● La estructura de datos que permita almacenar la información el archivo binario deberá almacenar los
valores numéricos como tal, esto es, los enteros como int y los de punto flotante como double y los
campos que manejan cadenas de caracteres deben definirse como tal.
● Los archivos CSV solo se pueden leer una vez.
● NO podrá cargar los datos de los archivos en arreglos.
● Toda operación de búsqueda debe realizarse en una función independiente. No se considerará en la
calificación los procesos de búsqueda que estén contenidos en el código de otro proceso. Las
funciones de búsqueda deben considerar la posibilidad que el dato buscado no se encuentre.

ADVERTENCIAS:
- Obligatoriamente debe desarrollar su proyecto bajo NetBeans en Windows, no podrá desarrollarlo empleando otro
IDE ni otro sistema operativo.
- -Al finalizar el laboratorio, comprima1 la carpeta en un archivo de tipo .zip y súbalo a la tarea programa en Paideia
para este laboratorio.

San Miguel, 22 de julio del 2020

1
Para evitar problemas en la corrección de la prueba, utilice el programa de compresión que viene por defecto en
el Windows (Zip) no use RAR, 7z, etc.
Página 4 de 4

También podría gustarte