93 lines
3.4 KiB
C
93 lines
3.4 KiB
C
/*******************************************************************************
|
|
* 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 <stdio.h>
|
|
|
|
#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;
|
|
}
|
|
|