Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Ejercicios de Estructuras

Universidad Nacional de Río Negro

Prerrequisitos y Entorno de Ejecución Requerido

Para compilar y verificar las soluciones de este módulo bajo el estándar C11 estricto de cátedra, se requiere:

Objetivos Pedagógicos y Competencias (Taxonomía de Bloom)

Capítulos de Apunte Correspondientes

Cuestiones de Estilo Aplicables


Modelado Matemático: Fracciones

Ejercicio 2.07.01 - Operaciones Aritméticas con Fracciones ⭐⭐☆☆☆


Ejercicio 2.07.02 - Simplificación de Fracción mediante MCD ⭐⭐☆☆☆


Retorno Múltiple Encapsulado

Ejercicio 2.07.03 - Estructura de División Entera Lenta ⭐⭐⭐☆☆


Normalización y Acarreo de Unidades

Ejercicio 2.07.04 - Normalización y Suma de Tiempos ⭐⭐☆☆☆


Paso por Referencia y Operador Flecha (->)

Ejercicio 2.07.05 - Traslación Espacial de Punto Cartesiano ⭐⭐☆☆☆


Ejercicio 2.07.06 - Ordenamiento de Arreglo de Puntos por Coordenada X ⭐⭐⭐☆☆


Ejercicio 2.07.07 - Encapsulamiento de Arreglo Seguro con Longitud y Capacidad ⭐⭐⭐☆☆


Ejercicio 2.07.08 - Búsqueda Lineal en Arreglo de Estructuras por Clave ⭐⭐☆☆☆


---

(ej_b2_c07_09)=
### Ejercicio 2.07.09 - Ordenamiento de Arreglo de Estructuras por Fecha Cronológica ⭐⭐⭐☆☆

:::{exercise}
:label: ordenar_eventos_cronologico
:enumerator: structs-9

En sistemas de auditoría y bitácoras de eventos (*logging*), los registros deben procesarse en estricto orden cronológico.

Dadas las siguientes estructuras:
```c
typedef struct {
    int anio;
    int mes;
    int dia;
} fecha_t;

typedef struct {
    int id;
    fecha_t fecha;
} evento_t;
```

Implementá dos funciones:
1. `int comparar_fechas(fecha_t a, fecha_t b)`: retorna un entero negativo si $a$ es anterior a $b$, cero si son iguales, o positivo si $a$ es posterior a $b$.
2. `void ordenar_eventos_cronologico(evento_t *eventos, size_t n)`: ordena in-place el arreglo `eventos` de tamaño $n$ en orden cronológico ascendente empleando el algoritmo de ordenamiento por inserción. Si dos eventos coinciden en fecha, deben conservar su orden relativo original (estabilidad).

**Nivel de Bloom:** Nivel 3 (Aplicación) y Nivel 4 (Análisis).  
**Conceptos requeridos:** Structs anidados, composición de comparadores, ordenamiento por inserción in-place, estabilidad algorítmica.

#### Tabla de Vectores de Prueba Obligatorios

| Caso de Prueba | Arreglo de Entrada ($n=3$) | Arreglo Resultante | Justificación Técnica |
| :--- | :--- | :--- | :--- |
| **Años Distintos** | `{{1, {2025, 5, 10}}, {2, {2023, 1, 1}}, {3, {2024, 12, 31}}}` | IDs: `2, 3, 1` | Orden por componente de mayor jerarquía |
| **Mismo Año y Mes** | `{{1, {2024, 3, 20}}, {2, {2024, 3, 5}}, {3, {2024, 3, 15}}}` | IDs: `2, 3, 1` | Desempate por componente día |
| **Estabilidad** | `{{10, {2024, 1, 1}}, {20, {2024, 1, 1}}}` | IDs: `10, 20` | Conservación del orden relativo ante fechas idénticas |

Ejercicio 2.07.10 - Auditoría de Padding y Reordenamiento de Campos en Memoria ⭐⭐⭐☆☆