Menu
Coddy logo textTech

Recapitulação: Modificando Struct - Ptr

Parte da seção Logic & Flow do Journey de C da Coddy — lição 49 de 63.

challenge icon

Desafio

Fácil

Crie um programa em C que demonstre um sistema completo de gerenciamento de funcionários usando alocação dinâmica de memória, ponteiros para struct e funções. Seu programa deve:

  1. Definir uma struct chamada Employee com os seguintes membros:
    • Um inteiro id para armazenar o ID do funcionário
    • Um array de caracteres name com tamanho 50 para armazenar o nome do funcionário
    • Um array de caracteres department com tamanho 30 para armazenar o nome do departamento
    • Um float salary para armazenar o salário do funcionário
    • Um inteiro yearsOfService para armazenar os anos de serviço
  2. Escrever uma função chamada fillEmployeeData que:
    • Recebe um ponteiro para uma struct Employee como parâmetro
    • Lê as informações do funcionário da entrada nesta ordem: ID, nome, departamento, salário, anos de serviço
    • Atribui os valores aos membros da struct usando o operador de seta
    • Calcula um bônus baseado nos anos de serviço: se anos >= 5, o bônus é 10% do salário, caso contrário, 5% do salário
    • Adiciona o bônus ao salário: empPtr->salary += bonus;
  3. Escrever uma função chamada displayEmployee que:
    • Recebe um ponteiro para uma struct Employee como parâmetro
    • Imprime as informações do funcionário exatamente neste formato:
      • Employee Details:
      • ID: [id]
      • Name: [name]
      • Department: [department]
      • Salary: [salary]
      • Years of Service: [yearsOfService]
  4. Escrever uma função chamada promoteEmployee que:
    • Recebe um ponteiro para uma struct Employee como parâmetro
    • Aumenta o salário em 15% usando o operador de seta
    • Incrementa os anos de serviço em 1
    • Imprime Employee promoted successfully!
  5. Na função main:
    • Declarar um ponteiro para uma struct Employee chamado empPtr
    • Usar malloc() para alocar dinamicamente memória para uma struct Employee
    • Verificar se a alocação de memória foi bem-sucedida:
      • Se empPtr for NULL, imprimir Memory allocation failed e encerrar o programa
      • Se for bem-sucedido, imprimir Memory allocated successfully
    • Chamar fillEmployeeData para preencher os dados do funcionário
    • Imprimir Initial employee data:
    • Chamar displayEmployee para mostrar as informações iniciais do funcionário
    • Chamar promoteEmployee para promover o funcionário
    • Imprimir After promotion:
    • Chamar displayEmployee novamente para mostrar as informações atualizadas
    • Liberar a memória alocada dinamicamente usando free(empPtr)
    • Imprimir Memory freed successfully

Este desafio combina todos os conceitos-chave do capítulo: definição de structs, alocação dinâmica de memória com malloc(), verificação de falha na alocação, passagem de ponteiros de struct para funções, uso do operador de seta para acessar e modificar membros de struct e a limpeza adequada da memória com free(). As funções demonstram como os ponteiros permitem a modificação direta dos dados originais da struct.

Experimente você mesmo

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

// TODO: Defina a struct Employee aqui

// TODO: Implemente a função fillEmployeeData aqui

// TODO: Implemente a função displayEmployee aqui

// TODO: Implemente a função promoteEmployee aqui

int main() {
    // TODO: Declare empPtr e aloque memória
    
    // TODO: Verifique se a alocação de memória foi bem-sucedida
    
    // TODO: Preencha os dados do funcionário, exiba os dados iniciais, promova e exiba após a promoção
    
    // TODO: Libere a memória e imprima uma mensagem de sucesso
    
    return 0;
}

Todas as lições de Logic & Flow