Menu
Coddy logo textTech

Resumen: Modificar estructuras - Ptr

Parte de la sección Logic & Flow del Journey de C de Coddy — lección 49 de 63.

challenge icon

Desafío

Fácil

Crea un programa en C que demuestre un sistema completo de gestión de empleados utilizando asignación dinámica de memoria, punteros a estructuras y funciones. Tu programa debe:

  1. Definir un struct llamado Employee con los siguientes miembros:
    • Un entero id para almacenar el ID del empleado
    • Un arreglo de caracteres name con tamaño 50 para almacenar el nombre del empleado
    • Un arreglo de caracteres department con tamaño 30 para almacenar el nombre del departamento
    • Un float salary para almacenar el salario del empleado
    • Un entero yearsOfService para almacenar los años de servicio
  2. Escribir una función llamada fillEmployeeData que:
    • Reciba un puntero a una estructura Employee como parámetro
    • Lea la información del empleado desde la entrada en este orden: ID, nombre, departamento, salario, años de servicio
    • Asigne los valores a los miembros de la estructura utilizando el operador flecha
    • Calcule un bono basado en los años de servicio: si los años son >= 5, el bono es el 10% del salario, de lo contrario es el 5% del salario
    • Sume el bono al salario: empPtr->salary += bonus;
  3. Escribir una función llamada displayEmployee que:
    • Reciba un puntero a una estructura Employee como parámetro
    • Imprima la información del empleado en este formato exacto:
      • Employee Details:
      • ID: [id]
      • Name: [name]
      • Department: [department]
      • Salary: [salary]
      • Years of Service: [yearsOfService]
  4. Escribir una función llamada promoteEmployee que:
    • Reciba un puntero a una estructura Employee como parámetro
    • Incremente el salario en un 15% utilizando el operador flecha
    • Incremente los años de servicio en 1
    • Imprima Employee promoted successfully!
  5. En la función principal (main):
    • Declare un puntero a una estructura Employee llamado empPtr
    • Use malloc() para asignar memoria dinámicamente para una estructura Employee
    • Verifique si la asignación de memoria fue exitosa:
      • Si empPtr es NULL, imprima Memory allocation failed y finalice el programa
      • Si tiene éxito, imprima Memory allocated successfully
    • Llame a fillEmployeeData para completar los datos del empleado
    • Imprima Initial employee data:
    • Llame a displayEmployee para mostrar la información inicial del empleado
    • Llame a promoteEmployee para promover al empleado
    • Imprima After promotion:
    • Llame a displayEmployee nuevamente para mostrar la información actualizada
    • Libere la memoria asignada dinámicamente usando free(empPtr)
    • Imprima Memory freed successfully

Este desafío combina todos los conceptos clave del capítulo: definición de estructuras, asignación dinámica de memoria con malloc(), verificación de fallos en la asignación, paso de punteros de estructuras a funciones, uso del operador flecha para acceder y modificar miembros de la estructura, y la limpieza adecuada de la memoria con free(). Las funciones demuestran cómo los punteros permiten la modificación directa de los datos de la estructura original.

Pruébalo tú mismo

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// TODO: Definir la estructura Employee aquí

// TODO: Implementar la función fillEmployeeData aquí

// TODO: Implementar la función displayEmployee aquí

// TODO: Implementar la función promoteEmployee aquí

int main() {
    // TODO: Declarar empPtr y asignar memoria
    
    // TODO: Verificar si la asignación de memoria fue exitosa
    
    // TODO: Llenar los datos del empleado, mostrar los datos iniciales, ascender y mostrar después del ascenso
    
    // TODO: Liberar memoria e imprimir mensaje de éxito
    
    return 0;
}

Todas las lecciones de Logic & Flow