agrego practicas
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
/*******************************************************************************
|
||||
* 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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user