-
María Loreto Arriagada
[email protected] -
Paulina González
[email protected] -
Justo Vargas
[email protected]
- Diego Duhalde
[email protected]
- Aprender a estructurar un programa en varios archivos fuente de manera ordenada, lógica y modular.
- Utilizar herramientas clásicas de apoyo a la programación como GIT, make, debuggers, etc.
- Utilizar punteros y, en especial, punteros a funciones.
- Desarrollar un sistema capaz de leer un archivo CSV y aplicar sobre él varias métricas (fórmulas matemáticas simples).
TICS200 App #1 – Pizzería
Una reconocida pizzería de Namekusei guardó todas sus ventas en un archivo CSV, el cual dispuso para su análisis. Desean un análisis simple, donde las métricas son sólo fórmulas matemáticas básicas.
Se le ha pedido a usted, como experto en C y paradigma procedural, que genere un programa capaz de entregar los valores de las métricas solicitadas por la pizzería.
-
Su programa consistirá en un ejecutable llamado
app1(puede llevar la extensión.exeen Windows). -
Será ejecutado desde una consola (terminal), con el nombre del archivo de ventas como parámetro, seguido de las métricas a calcular.
-
Ejemplo de ejecución (donde
ventas.csves el archivo CSV ymetricaNcorresponde a las distintas métricas que se quieran solicitar):TICS200@localhost:~$ ./app1 ventas.csv metrica0 metrica1 ... -
Formato del archivo CSV (ejemplo):
pizza_id,order_id,pizza_name_id,quantity,order_date,order_time,unit_price,total_price,pizza_size,pizza_category,pizza_ingredients,pizza_name 1.00,1.00,hawaiian_m,1.00,1/1/2015,11:38:36,13.25,13.25,M,Classic,"Sliced Ham, Pineapple, Mozzarella Cheese",The Hawaiian Pizza 2.00,2.00,classic_dlx_m,1.00,1/1/2015,11:57:40,16.00,16.00,M,Classic,"Pepperoni, Mushrooms, Red Onions, Red Peppers, Bacon",The Classic Deluxe Pizza 3.00,2.00,five_cheese_l,1.00,1/1/2015,11:57:40,18.50,18.50,L,Veggie,"Mozzarella Cheese, Provolone Cheese, Smoked Gouda Cheese, Romano Cheese, Blue Cheese, Garlic",The Five Cheese Pizza -
Métricas a pedir (ejecutadas según se especifique en los parámetros de la consola):
pms: Pizza más vendidapls: Pizza menos vendidadms: Fecha con más ventas en términos de dinero (junto a la cantidad de dinero recaudado)dls: Fecha con menos ventas en términos de dinero (junto a la cantidad de dinero recaudado)dmsp: Fecha con más ventas en términos de cantidad de pizzas (junto a la cantidad de pizzas)dlsp: Fecha con menos ventas en términos de cantidad de pizzas (junto a la cantidad de pizzas)apo: Promedio de pizzas por ordenapd: Promedio de pizzas por díaims: Ingrediente más vendidohp: Cantidad de pizzas por categoría vendidas
TICS200@localhost:~$ ./app1 ventas.csv pms pls
TICS200@localhost:~$ Pizza mas vendida: The Hawaiian Pizza
TICS200@localhost:~$ Pizza menos vendida: The classic Deluxe Pizza- El usuario siempre ingresará información válida.
- No habrán campos vacíos en el archivo de ventas.
- El orden en que se piden las métricas por pantalla es el orden en que se muestran.
- Debe usar punteros a funciones para cada métrica (o un arreglo de punteros a funciones), con firma:
char* (metrica)(int *size, struct order *orders);
- No se requieren validaciones extras de los datos de entrada.
- Se aceptan múltiples métricas en una misma ejecución.
- El nombre del ejecutable debe ser
app1.
- Lenguaje: C (sin frameworks externos no estándar).
- Grupos: 2 o 3 personas. (para la sección del día miércoles de Santiago, los grupos son de 4 personas y se entregan la inscripción de grupos por correo a la profesora)
- Fecha de entrega: Sábado 29 de Marzo a las 22:00.
- Por cada día de atraso se descuenta 1 punto, comenzando a las 22:01.
- Compilador a usar:
gccv5.1 o superior.
- La entrega se realiza por la plataforma Webcursos especificando el nombre del repo.
- El repo deberá cumplir con lo especificado en la sección 5 (Ver secciones siguientes para los Formato de Entrega)
-
Informe de diseño y justificación de la solución
- Objetivo: Explicar de manera breve cómo se organizó el código, las estructuras de datos empleadas (
struct order, etc.), la justificación de la modularidad y el uso de punteros a funciones. - Contenido sugerido:
- Diagrama de flujo general que muestre el flujo principal del programa.
- Razones de diseño (por qué se eligió un determinado método de parseo del CSV, cómo se almacenan ingredientes, etc.).
- Explicación de la interacción entre archivos (
main.c,metrics.c,utils.c, etc.). - Referencias a recursos externos utilizados.
- Objetivo: Explicar de manera breve cómo se organizó el código, las estructuras de datos empleadas (
-
Sección de reflexiones finales o autoevaluación
- Cada integrante o el grupo redactará uno o dos párrafos indicando:
- ¿Qué fue lo más complejo o interesante de la tarea?
- ¿Cómo enfrentaron los errores, pruebas y debugging?
- ¿Qué lecciones aprendieron al implementar en C este tipo de lectura de archivos y cálculos de métricas?
- Cada integrante o el grupo redactará uno o dos párrafos indicando:
-
Explicación de cómo usaron IA
- Si se utilizó ChatGPT u otra herramienta, describir qué tipo de ayuda brindó la IA (e.g., sugerencia de estructuras, debug, explicación de errores) y cómo validaron dicha información.
- No se pide incrustar todo el historial de ChatGPT, sino una explicación clara de cómo se integraron o descartaron las ideas propuestas por la IA.
- En caso de no usar ninguna IA, basta con mencionarlo.
-
Fork del repositorio base
- Deberán forkear el siguiente repositorio: App1 en GitHub.
- En ese repositorio forkeado, agregar a todos los integrantes del grupo como colaboradores.
-
Commits balanceados
- Cada integrante del grupo debe tener aproximadamente la misma cantidad de commits.
- Se evaluará la participación equitativa a través del historial de commits (mensaje, fecha, contenido de los cambios, etc.).
-
Estructura del repositorio
- Dentro de la carpeta principal (o la estructura que ustedes definan, pero claramente organizada), deberán incluir:
- Código fuente en C (archivos
.cy.h), siguiendo una división modular y lógica. - Un Makefile que compile la aplicación sin errores (y sin warnings en la medida de lo posible).
- Un Informe de diseño (PDF o Markdown) que explique la arquitectura del proyecto, el uso de punteros a funciones, la estrategia de lectura de CSV, etc.
- Una Sección de reflexiones finales o autoevaluación, que puede ir integrada al mismo informe u en un documento aparte.
- Una Explicación de uso de IA (si se utilizó ChatGPT u otra herramienta), también puede estar en el mismo documento de diseño.
- Un README breve con la información del grupo (nombres, correos, etc.) y la línea de compilación para
app1(en caso de no especificarse ya en el Makefile).
- Código fuente en C (archivos
- Dentro de la carpeta principal (o la estructura que ustedes definan, pero claramente organizada), deberán incluir:
-
Entrega
- La entrega oficial consistirá en la URL del repositorio forkeado.
- Asegúrense de que el repositorio sea público o que el profesor/ayudante tenga acceso.
- Verifiquen que el programa compile y ejecute correctamente al clonar el repositorio y ejecutar
makeseguido de./app1 ventas.csv pms ...(o los parámetros de métricas requeridos).
El proceso de corrección será:
- Se ingresará a la carpeta
tarea1/. - Se ejecutará
make. - Se probará con:
y se evaluará el correcto funcionamiento de cada métrica.
./app1 ventas.csv pms pls dms ...
A continuación, la rúbrica con las ponderaciones finales, integrando los nuevos elementos:
| Criterios generales | Ponderación | Descripción |
|---|---|---|
| 1. Funcionamiento del programa | 40% |
|
| 2. Paradigma Procedural | 25% |
|
| 3. Lenguaje C | 20% |
|
| 4. Informe de diseño, reflexiones finales y uso de IA | 15% |
|
Total: 100%
- Entrega atrasada: Cada día de retraso resta 1 punto al máximo alcanzable (comenzando a las 00:00 del día siguiente a la entrega).
- Menos integrantes que lo propuesto (2-3): Puede existir un bonus o se mantiene la pauta según lo definido por el curso.
- Más integrantes que lo propuesto: -1.0 a la nota final.
- Organización ejemplar en diferentes archivos: Puede haber un leve bonus si está especialmente bien segmentado y documentado.
Como recordatorio, una posible ejecución para verificar las funcionalidades podría ser:
make
./app1 ventas.csv pms pls dms dlsp apo ims ...La salida esperada (en la terminal) deberá mostrar cada resultado en el orden de los parámetros ingresados:
Pizza más vendida: ...
Pizza menos vendida: ...
Fecha con más ventas (dinero) + total recaudado: ...
Fecha con menos ventas (pizzas) + cantidad de pizzas: ...
Promedio de pizzas por orden: ...
Ingrediente más vendido: ...
... etc.
La tarea busca verificar no solo que el programa funcione, sino que el/la estudiante muestre comprensión y reflexión sobre su diseño, uso de punteros a funciones y manejo de archivos CSV en C. El agregado de Informe de diseño, Reflexiones finales y Explicación de IA permitirá evidenciar el proceso de desarrollo, la lógica implementada y la honestidad sobre las herramientas utilizadas.
¡Éxito con la entrega!