From 51c233c7f556bdcb6ada881e1298708a2108ad04 Mon Sep 17 00:00:00 2001 From: Rom4ka Date: Fri, 31 Jul 2026 01:53:26 +0000 Subject: [PATCH] first commit --- .gitignore | 2 ++ Makefile | 11 ++++++++ README.md | 32 ++++++++++++++++++++++ empanada.c | 48 +++++++++++++++++++++++++++++++++ empanada.h | 26 ++++++++++++++++++ horno.c | 26 ++++++++++++++++++ horno.h | 10 +++++++ main.c | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ utils.c | 18 +++++++++++++ utils.h | 8 ++++++ 10 files changed, 260 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 README.md create mode 100644 empanada.c create mode 100644 empanada.h create mode 100644 horno.c create mode 100644 horno.h create mode 100644 main.c create mode 100644 utils.c create mode 100644 utils.h diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a44a2a1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +horno_simulator +*.o diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..855c76c --- /dev/null +++ b/Makefile @@ -0,0 +1,11 @@ +CC=gcc +CFLAGS=-Wall -Wextra -std=c99 +OBJ=main.o horno.o empanada.o utils.o + +all: horno_simulator + +horno_simulator: $(OBJ) + $(CC) $(CFLAGS) -o horno_simulator $(OBJ) + +clean: + rm -f *.o horno_simulator diff --git a/README.md b/README.md new file mode 100644 index 0000000..76f65d6 --- /dev/null +++ b/README.md @@ -0,0 +1,32 @@ +# Horno Simulator 2026 + +Simulador de horno de empanadas desarrollado en C, orientado a consola. + +## Descripción + +Aplicación de consola que simula el proceso de cocción de empanadas en tiempo simulado. Permite crear empanadas con rellenos personalizados y monitorear su estado durante la cocción. + +## Estados de cocción + +Cada empanada puede encontrarse en uno de los siguientes estados: + +- **Cruda** +- **En cocción** +- **Lista** +- **Quemada** +- **Cuántica** +- **Sin relleno** + +## Funcionalidades + +- Creación de empanadas con rellenos definidos por el usuario +- Simulación de cocción en tiempo simulado +- Extracción de empanadas del horno +- Reemplazo de empanadas en el horno + +## Compilación + +```bash +make +./horno_simulator + diff --git a/empanada.c b/empanada.c new file mode 100644 index 0000000..8218e38 --- /dev/null +++ b/empanada.c @@ -0,0 +1,48 @@ +#include "empanada.h" +#include +#include + +void inicializarEmpanada(Empanada* e, const char* relleno) { + strncpy(e->relleno, relleno, 29); + e->tiempo_coccion = 5 + rand() % 6; + e->tiempo_actual = 0; + e->activa = 1; + e->estado = CRUDA; + + int azar = rand() % 100; + if (azar < 5) { + e->estado = CUANTICA; + } else if (azar < 15) { + e->estado = SIN_RELLENO; + e->tiene_relleno = 0; + } else { + e->tiene_relleno = 1; + } +} + +void cocinar(Empanada* e) { + if (e->activa == 0) return; + if (e->estado == CUANTICA || e->estado == SIN_RELLENO || e->estado == QUEMADA) return; + + e->tiempo_actual++; + + if (e->tiempo_actual < e->tiempo_coccion) { + e->estado = EN_COCINA; + } else if (e->tiempo_actual == e->tiempo_coccion) { + e->estado = LISTA; + } else { + e->estado = QUEMADA; + } +} + +const char* estadoToString(Estado estado) { + switch (estado) { + case CRUDA: return "Cruda"; + case EN_COCINA: return "En cocina"; + case LISTA: return "Lista"; + case QUEMADA: return "Quemada"; + case CUANTICA: return "Cuantica"; + case SIN_RELLENO: return "Sin relleno"; + default: return "Desconocido"; + } +} diff --git a/empanada.h b/empanada.h new file mode 100644 index 0000000..68d15b5 --- /dev/null +++ b/empanada.h @@ -0,0 +1,26 @@ +#ifndef EMPANADA_H +#define EMPANADA_H + +typedef enum { + CRUDA, + EN_COCINA, + LISTA, + QUEMADA, + CUANTICA, + SIN_RELLENO +} Estado; + +typedef struct { + char relleno[30]; + int tiempo_coccion; + int tiempo_actual; + Estado estado; + int tiene_relleno; + int activa; +} Empanada; + +const char* estadoToString(Estado estado); +void cocinar(Empanada* e); +void inicializarEmpanada(Empanada* e, const char* relleno); + +#endif diff --git a/horno.c b/horno.c new file mode 100644 index 0000000..c062893 --- /dev/null +++ b/horno.c @@ -0,0 +1,26 @@ +#include +#include "horno.h" + +void mostrarEmpanadas(Empanada horno[], int cantidad) { + int mostradas = 0; + for (int i = 0; i < cantidad; i++) { + if (horno[i].activa == 0) continue; + + printf("Empanada %d: %s - %s (%d/%d)", + i + 1, + horno[i].relleno, + estadoToString(horno[i].estado), + horno[i].tiempo_actual, + horno[i].tiempo_coccion + ); + if (horno[i].tiene_relleno == 0) printf(" [SIN RELLENO]"); + + printf("\n"); + mostradas++; + } + + if (mostradas == 0) { + printf("El horno está vacio!\n"); + } +} + diff --git a/horno.h b/horno.h new file mode 100644 index 0000000..1d24d00 --- /dev/null +++ b/horno.h @@ -0,0 +1,10 @@ +#ifndef HORNO_H +#define HORNO_H + +#include "empanada.h" + +#define MAX_EMPANADAS 10 + +void mostrarEmpanadas(Empanada horno[], int cantidad); + +#endif diff --git a/main.c b/main.c new file mode 100644 index 0000000..5ced2c6 --- /dev/null +++ b/main.c @@ -0,0 +1,79 @@ +#include +#include +#include +#include +#include +#include "empanada.h" +#include "horno.h" +#include "utils.h" + +int main() { + Empanada horno[MAX_EMPANADAS]; + srand(time(NULL)); + + for (int i = 0; i < MAX_EMPANADAS; i++) { + horno[i].activa = 0; + } + + while (1) { + limpiarPantalla(); + imprimirHeader(); + printf("\n1. Agregar empanada\n2. Cocinar 1 segundo\n3. Mostrar horno\n4. Sacar empanada\n5. Salir\n> "); + int opcion; + scanf("%d", &opcion); + getchar(); + + switch (opcion) { + case 1: + char relleno[30]; + printf("Relleno: "); + fgets(relleno, sizeof(relleno), stdin); + relleno[strcspn(relleno, "\n")] = '\0'; + + int index = -1; + for (int i = 0; i < MAX_EMPANADAS; i++) { + if (horno[i].activa == 0) { + index = i; + break; + } + } + if (index != -1) { + inicializarEmpanada(&horno[index], relleno); + } + else { + printf("El horno está lleno.\n"); + } + break; + case 2: + for (int i = 0; i < MAX_EMPANADAS; i++) { + cocinar(&horno[i]); + } + printf("Cocinando...\n"); + sleep(1); + break; + case 3: + mostrarEmpanadas(horno, MAX_EMPANADAS); + pausar(); + break; + case 4: + int cual; + printf("¿Cual queré sacar? [1 a %d]?", MAX_EMPANADAS); + scanf("%d", &cual); + getchar(); + cual--; + + if (cual >= 0 && cual < MAX_EMPANADAS && horno[cual].activa == 1) { + printf("\nQue disfrutes tu empanada de '%s [%s]', campeón", horno[cual].relleno, estadoToString(horno[cual].estado)); + horno[cual].activa = 0; + } else { + printf("Ahi no hay nada!"); + } + pausar(); + break; + case 5: + exit(0); + } + } + + return 0; +} diff --git a/utils.c b/utils.c new file mode 100644 index 0000000..d0e7648 --- /dev/null +++ b/utils.c @@ -0,0 +1,18 @@ +#include "utils.h" +#include +#include + +void limpiarPantalla() { + printf("\033[2J\033[H"); +} + +void pausar() { + printf("\nPresione ENTER para continuar..."); + getchar(); +} + +void imprimirHeader() { + printf("\n"); + printf(" - Horno Simulator 2026 \n"); + printf("\n"); +} diff --git a/utils.h b/utils.h new file mode 100644 index 0000000..d8d313e --- /dev/null +++ b/utils.h @@ -0,0 +1,8 @@ +#ifndef UTILS_H +#define UTILS_H + +void limpiarPantalla(); +void pausar(); +void imprimirHeader(); + +#endif