Aula 03Fundamentos

Dados, registros e estruturas

Programas transformam dados. Para fazer isso com clareza, primeiro damos tipo e significado aos valores, depois agrupamos campos relacionados em registros e finalmente organizamos muitos registros em uma estrutura de dados.

Objetivo 01Distinguir valor, tipo e significado
Objetivo 02Construir registros com campos
Objetivo 03Organizar registros para operar
01

Primeiro nível

Um dado é um valor interpretado por um tipo e um contexto

O valor 19 sozinho não informa se representa idade, quantidade ou temperatura. O tipo determina quais valores e operações são válidos; o nome do campo oferece o significado usado pelo programa.

int matricula = 1042;1042 identifica um aluno.
string nome = "Ana";Ana nomeia a pessoa.
double media = 8.7;8.7 representa um resultado.
bool aprovado = true;true representa uma condição.
02

Segundo nível

Um registro reúne campos sobre a mesma entidade

Matrícula, nome, idade e média descrevem aspectos diferentes de um único aluno. Agrupá-los evita que essas informações circulem separadas e percam sua relação.

1

Campos possuem nomes

O nome registra o papel de cada valor e evita depender da posição em que ele aparece.

2

Campos podem ter tipos diferentes

Um registro é uma estrutura heterogênea: combina inteiros, textos, decimais e outros tipos.

3

O conjunto representa uma entidade

Os cinco campos juntos formam um valor do tipo Aluno.

registro_aluno.cpp
struct Aluno {
    int matricula;
    std::string nome;
    int idade;
    double media;
    bool aprovado;
};

Aluno ana{1042, "Ana", 19, 8.7, true};
03

Terceiro nível

Uma estrutura organiza vários dados para permitir operações

Depois de modelar um aluno, precisamos guardar uma turma inteira. A estrutura define como os registros se relacionam e como o algoritmo irá inseri-los, percorrê-los, buscá-los ou removê-los.

InserirAdicionar um registro à coleção.
BuscarLocalizar um registro por posição ou chave.
AtualizarModificar campos preservando a organização.
RemoverExcluir um registro e reajustar a estrutura.
OrdenarReorganizar segundo um critério.

Por que ela existe? Porque o custo de uma operação depende da organização. A mesma coleção pode ser rápida para busca por índice, busca por chave ou remoção em uma extremidade — mas dificilmente será a melhor em tudo ao mesmo tempo.

04

Decisão de projeto

A pergunta determina a estrutura

Antes de escolher uma estrutura, descubra qual operação será mais frequente. O mesmo conjunto de registros pode receber organizações diferentes.

Coleção de alunosO que o programa precisa fazer com mais frequência?
Acessar por posição e percorrer

vector<Aluno>

Registros contíguos e acesso direto por índice.

Procurar rapidamente por matrícula

unordered_map

A matrícula funciona como chave para chegar ao registro.

Atender na ordem de chegada

queue<Aluno>

O primeiro registro inserido será o primeiro removido.

Retirar sempre a maior nota

priority_queue

O registro de maior prioridade permanece acessível no topo.

05

Experimente

Do formulário ao vetor de registros

Preencha campos para criar um registro. Ao adicioná-lo, o registro passa a fazer parte da estrutura. Depois use operações sobre a coleção inteira.

Novo registroAluno
Registro que será criadoAluno{104, "Davi", 20, 7.9}
Estrutura atualvector<Aluno> turma3 registros

A estrutura contém três registros do mesmo tipo.

06

Programa completo

Registro + estrutura + algoritmos em C++

O programa declara o formato de cada registro, cria uma coleção, insere um novo aluno, ordena por média e busca por matrícula.

turma.cpp
#include <algorithm>
#include <iomanip>
#include <iostream>
#include <string>
#include <vector>

// Um registro: campos relacionados descrevem um aluno.
struct Aluno {
    int matricula;
    std::string nome;
    int idade;
    double media;
};

// Busca um registro dentro da estrutura.
const Aluno* buscarPorMatricula(
    const std::vector<Aluno>& turma,
    int matricula
) {
    auto encontrado = std::find_if(
        turma.begin(), turma.end(),
        [matricula](const Aluno& aluno) {
            return aluno.matricula == matricula;
        }
    );

    return encontrado == turma.end()
        ? nullptr
        : &(*encontrado);
}

int main() {
    // Uma estrutura: vários registros do tipo Aluno.
    std::vector<Aluno> turma{
        {101, "Ana",  19, 8.7},
        {102, "Bia",  21, 9.2},
        {103, "Caio", 18, 7.4}
    };

    turma.push_back({104, "Davi", 20, 7.9});

    std::sort(turma.begin(), turma.end(),
        [](const Aluno& a, const Aluno& b) {
            return a.media > b.media;
        }
    );

    std::cout << std::fixed << std::setprecision(1);
    for (const Aluno& aluno : turma) {
        std::cout << aluno.matricula << " | "
                  << aluno.nome << " | "
                  << aluno.media << '\n';
    }

    if (const Aluno* aluno = buscarPorMatricula(turma, 102)) {
        std::cout << "Encontrada: " << aluno->nome << '\n';
    }
}
1

struct Aluno define quais campos pertencem a cada registro.

2

vector<Aluno> organiza vários registros em uma coleção indexada.

3

push_back, sort e find_if realizam operações sobre a estrutura.

07

Fechamento

Do valor isolado ao programa organizado

Dado8.7

Um valor com tipo e significado.

RegistroAluno{...}

Campos relacionados sobre uma entidade.

Estruturavector<Aluno>

Uma organização que permite operar sobre muitos registros.

Por que não guardar nomes, idades e médias em três vetores separados?

É possível, mas a relação entre os campos passa a depender de índices sincronizados. Um registro mantém os valores da mesma entidade juntos e reduz o risco de inconsistência.

Todo registro precisa estar dentro de um vetor?

Não. Um registro pode existir sozinho ou ser organizado por vetor, lista, tabela hash, árvore ou outra estrutura adequada às operações necessárias.

O que deve ser escolhido primeiro: o registro ou a estrutura?

Primeiro modele a entidade e seus campos. Depois observe as operações do problema para escolher como os registros serão organizados.

08

Pesquisa utilizada

Fontes acadêmicas

As definições e a progressão didática desta aula foram fundamentadas nas referências abaixo.