Spec Sistemas Com C • Trilha Progressiva em 4 Níveis


🎯 Nível 1: Fundamentos

Problema 14.1 — Navegação em Vetores com Aritmética de Ponteiros (*(p + i))

Contexto: Navegação em Vetores com Aritmética de Ponteiros (*(p + i)) no contexto de Aritmética de Ponteiros, Ponteiros Duplos e Callbacks.

Requisitos de Execução:

  1. Percorrer vetor utilizando incremento de ponteiro p++ sem usar operadores de indexação [].

Resultado Esperado

Vetor percorrido com deslocamento aritmético de ponteiro.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_14_1_SeuNome
  2. Envie na tarefa: Atividade Cap 14 - Aritmética de Ponteiros, Ponteiros Duplos e Callbacks
🔑 Gabarito de Código & Solução Comentada
#include <stdio.h>

int main(void) {
    int arr[4] = {100, 200, 300, 400};
    int *p = arr;
    for (int i = 0; i < 4; i++) {
        printf("Elemento %d: %d (Endereco: %p)\n", i, *(p + i), (void*)(p + i));
    }
    return 0;
}

🔍 Nível 2: Prática

Problema 14.2 — Ponteiros Duplos (Ponteiro para Ponteiro - int **)

Contexto: Ponteiros Duplos (Ponteiro para Ponteiro - int **) no contexto de Aritmética de Ponteiros, Ponteiros Duplos e Callbacks.

Requisitos de Execução:

  1. Modificar o endereço apontado por um ponteiro passando int **ptr para uma função auxiliar.

Resultado Esperado

Endereço do ponteiro modificado com sucesso pela função.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_14_2_SeuNome
  2. Envie na tarefa: Atividade Cap 14 - Aritmética de Ponteiros, Ponteiros Duplos e Callbacks
🔑 Gabarito de Código & Solução Comentada
#include <stdio.h>

void redefinir_alvo(int **ptr, int *novo_alvo) {
    *ptr = novo_alvo;
}

int main(void) {
    int a = 10, b = 20;
    int *p = &a;
    redefinir_alvo(&p, &b);
    printf("Ponteiro agora aponta para: %d\n", *p);
    return 0;
}

⚡ Nível 3: Integração

Problema 14.3 — Ponteiros de Função (Function Pointers) como Callbacks

Contexto: Ponteiros de Função (Function Pointers) como Callbacks no contexto de Aritmética de Ponteiros, Ponteiros Duplos e Callbacks.

Requisitos de Execução:

  1. Criar função de transformação genérica mapear(int arr[], int tam, int (*fn)(int)) aplicando função a cada elemento.

Resultado Esperado

Callback de dobra de valores aplicado a cada elemento do vetor.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_14_3_SeuNome
  2. Envie na tarefa: Atividade Cap 14 - Aritmética de Ponteiros, Ponteiros Duplos e Callbacks
🔑 Gabarito de Código & Solução Comentada
#include <stdio.h>

int dobrar(int x) { return x * 2; }

void mapear(int arr[], int tam, int (*operacao)(int)) {
    for (int i = 0; i < tam; i++) {
        arr[i] = operacao(arr[i]);
    }
}

int main(void) {
    int v[3] = {1, 2, 3};
    mapear(v, 3, dobrar);
    printf("Valores mapeados: %d, %d, %d\n", v[0], v[1], v[2]);
    return 0;
}

🏆 Nível 4: Desafio Corporativo

Problema 14.4 — Tabela de Despacho de Funções (Dispatch Table) para Protocolos

Contexto: Tabela de Despacho de Funções (Dispatch Table) para Protocolos no contexto de Aritmética de Ponteiros, Ponteiros Duplos e Callbacks.

Requisitos de Execução:

  1. Implementar array de ponteiros de funções para executar comandos de protocolo de rede sem if/else.

Resultado Esperado

Comando despachado em O(1) através da tabela de ponteiros de função.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_14_4_SeuNome
  2. Envie na tarefa: Atividade Cap 14 - Aritmética de Ponteiros, Ponteiros Duplos e Callbacks
🔑 Gabarito de Código & Solução Comentada
#include <stdio.h>

typedef void (*ComandoHandler)(void);

void cmd_ping(void) { puts("PONG!"); }
void cmd_status(void) { puts("STATUS: OK"); }

int main(void) {
    ComandoHandler tabela[2] = {cmd_ping, cmd_status};
    int cmd_id = 0; // PING
    tabela[cmd_id]();
    return 0;
}