/******************************************************************************* * TRABAJO PRÁCTICO / EJERCICIO INTEGRADOR: GESTIÓN DE PUNTEROS Y ESTRUCTURAS * * OBJETIVO: * El propósito de este ejercicio es consolidar el manejo de estructuras, * aritmética de punteros, indirección y diseño de funciones conpaso por referencia * en el lenguaje C, evitando el uso de código resuelto y enfocándose en la * especificación formal del problema. * * CONSIGNA: * Desarrolle un programa en Lenguaje C que cumpla rigurosamente con los * siguientes requerimientos técnicos y estructurales: * * 1. Definición del Tipo de Dato (Struct con Punteros Internos): * - Defina una estructura denominada `Persona` que contenga dos campos: * * Un puntero a caracteres (`char *nombre`) destinado a almacenar * dinámicamente o mediante literales la identificación de la persona. * * Un número entero (`int edad`) que represente los años de la persona. * * 2. Estructura de Almacenamiento (Arreglo de Estructuras): * - En la función principal (`main`), declare un arreglo estático con * capacidad exactamente para 3 elementos de tipo `Persona`. * - Inicialice cada uno de los elementos del arreglo asignando valores * válidos tanto para el puntero `nombre` como para la `edad`. * - Implemente una función específica (cuya firma y diseño quedan a su cargo) * que reciba como parámetro el puntero al inicio del arreglo de estructuras * y su tamaño, y se encargue de recorrerlo sistemáticamente para * imprimir en la consola los datos de todos sus elementos. * * 3. Encapsulamiento y Modificación (Funciones Modificadoras / Setters): * - Escriba una función modular de tipo `void` llamada `cambiar_edad` * cuya firma obligatoria sea: * `void cambiar_edad(Persona *p, int nueva_edad)` * - Dicha función debe recibir un puntero a una estructura `Persona` * para actualizar el campo correspondiente de forma segura mediante * el operador de indirección adecuado, reflejando el cambio en el ámbito * del programa principal. * * 4. Pautas de Entrega y Validación: * - El programa debe compilar sin errores ni advertencias bajo un estándar * moderno de C (por ejemplo, -std=c11 o superior). * - No se deben utilizar variables globales; toda la comunicación entre * funciones debe realizarse mediante parámetros y punteros. *******************************************************************************/ #include #define P_LENGTH 3 typedef struct{ char* nombre; int edad; }Persona; void listar_personas(Persona*, int length); void cambiar_edad(Persona *p, int nueva_edad); int main(void){ Persona personas[P_LENGTH] = { { .nombre = "Horacio", .edad = 43 }, { .nombre = "Raquel", .edad = 44 }, { .nombre = "Luna", .edad = 15 } }; listar_personas(personas, P_LENGTH); cambiar_edad(personas, 21); cambiar_edad(personas+1, 22); cambiar_edad(personas+2, -5); listar_personas(personas, P_LENGTH); return 0; } void listar_personas(Persona* p, int length){ for(int i=0; i < length; i++){ printf("%s \t %d \n", (p+i)->nombre, (p+i)->edad); } } void cambiar_edad(Persona *p, int nueva_edad){ p->edad = nueva_edad; }