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


🧭 Navegação Pedagógica


🎯 Nível 1: Fundamentos

Problema 13.1 — Operador de Endereço (&) e Desreferenciação (*)

Contexto: Operador de Endereço (&) e Desreferenciação (*) no contexto de Ponteiros Fundamentais, Endereçamento e Referência.

Requisitos de Execução:

  1. Declarar ponteiro int *p = &x, exibir o endereço hexadecimal e modificar o valor de x via ponteiro.

Resultado Esperado

Valor de x modificado indiretamente através do ponteiro.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_13_1_SeuNome
  2. Envie na tarefa: Atividade Cap 13 - Ponteiros Fundamentais, Endereçamento e Referência
🔑 Gabarito de Código & Solução Comentada
#include <stdio.h>

int main(void) {
    int x = 42;
    int *p = &x;
    printf("Endereco de x: %p | Valor original: %d\n", (void*)p, *p);
    *p = 100;
    printf("Novo valor de x: %d\n", x);
    return 0;
}

🔍 Nível 2: Prática

Problema 13.2 — Passagem por Referência (Simulada em C) com Função swap()

Contexto: Passagem por Referência (Simulada em C) com Função swap() no contexto de Ponteiros Fundamentais, Endereçamento e Referência.

Requisitos de Execução:

  1. Implementar função swap(int *a, int *b) que troque os valores de duas variáveis fora de seu escopo local.

Resultado Esperado

Valores trocados com sucesso na função chamadora.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_13_2_SeuNome
  2. Envie na tarefa: Atividade Cap 13 - Ponteiros Fundamentais, Endereçamento e Referência
🔑 Gabarito de Código & Solução Comentada
#include <stdio.h>

void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

int main(void) {
    int v1 = 10, v2 = 20;
    swap(&v1, &v2);
    printf("Apos swap: v1=%d, v2=%d\n", v1, v2);
    return 0;
}

⚡ Nível 3: Integração

Problema 13.3 — Retorno Múltiplo de Valores via Parâmetros de Saída

Contexto: Retorno Múltiplo de Valores via Parâmetros de Saída no contexto de Ponteiros Fundamentais, Endereçamento e Referência.

Requisitos de Execução:

  1. Criar função divisao_inteira(int a, int b, int *quociente, int *resto) preenchendo ambos os resultados.

Resultado Esperado

Quociente e resto calculados e retornados via ponteiros de saída.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_13_3_SeuNome
  2. Envie na tarefa: Atividade Cap 13 - Ponteiros Fundamentais, Endereçamento e Referência
🔑 Gabarito de Código & Solução Comentada
#include <stdio.h>

void dividir(int dividendo, int divisor, int *quo, int *resto) {
    if (divisor != 0) {
        *quo = dividendo / divisor;
        *resto = dividendo % divisor;
    }
}

int main(void) {
    int q, r;
    dividir(17, 5, &q, &r);
    printf("17 / 5 = %d (Resto: %d)\n", q, r);
    return 0;
}

🏆 Nível 4: Desafio Corporativo

Problema 13.4 — Ponteiros Constantes e Ponteiros para Constantes (const int * vs int * const)

Contexto: Ponteiros Constantes e Ponteiros para Constantes (const int * vs int * const) no contexto de Ponteiros Fundamentais, Endereçamento e Referência.

Requisitos de Execução:

  1. Demonstrar proteção de leitura de buffer com const char * e ponteiro fixo com char * const.

Resultado Esperado

Contratos de imutabilidade garantidos em nível de compilação pelo qualificador const.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_13_4_SeuNome
  2. Envie na tarefa: Atividade Cap 13 - Ponteiros Fundamentais, Endereçamento e Referência
🔑 Gabarito de Código & Solução Comentada
#include <stdio.h>

void exibir_somente_leitura(const int *dado) {
    // *dado = 50; // Erro de compilacao garantido!
    printf("Dado protegido: %d\n", *dado);
}

int main(void) {
    int valor = 500;
    exibir_somente_leitura(&valor);
    return 0;
}

⬅️ Voltar ao Índice de Exercícios 📚 Sumário de Tópicos