UFLA

🎓 Aula 10

Registros e Vetores de Registros

Prof. Paulo Rettore

Universidade Federal de Lavras

GAC124 — Introdução aos Algoritmos

🎯 Uma entidade, vários dados

Um registro reúne informações de tipos diferentes que descrevem a mesma entidade.

Aluno

Nome, matrícula e notas.

Produto

Código, descrição e preço.

Livro

Título, autor e ano.

Em C++, registros são criados com struct.

🧱 Criando uma struct

struct Aluno {
    string nome;
    int matricula;
    double nota1;
    double nota2;
};

Os campos de uma struct podem ter tipos diferentes, mas todos pertencem ao mesmo aluno.

🔎 Acessando campos

Aluno a;
a.nome = "Ana";
a.matricula = 20260001;
a.nota1 = 85.0;

double media = (a.nota1 + a.nota2) / 2.0;

Use o operador ponto . para acessar os campos de uma variável do tipo registro.

⌨️ Leitura de um registro

Aluno a;
cout << "Matrícula: ";
cin >> a.matricula;
cin.ignore();
cout << "Nome: ";
getline(cin, a.nome);
cin >> a.nota1 >> a.nota2;

Ao misturar cin e getline(), descarte a quebra de linha com cin.ignore().

📚 Vetor de registros

const int N = 3;
Aluno turma[N];

for (int i = 0; i < N; i++) {
    cin >> turma[i].matricula;
    cin.ignore();
    getline(cin, turma[i].nome);
}

O vetor representa várias entidades; cada posição é um registro completo.

🧮 Funções com registros

double media(const Aluno& a) {
    return (a.nota1 + a.nota2) / 2.0;
}

void imprime(const Aluno& a) {
    cout << a.nome << ": " << media(a);
}

O const Aluno& evita cópia desnecessária e informa que a função não deve alterar o registro.

📦 Atribuição de registros

Aluno origem = {"Ana", 20260001, 80, 90};
Aluno copia;

copia = origem;
copia.nome = "Bia";

A atribuição copia todos os campos. Depois, os dois registros são independentes.

🧠 Uma nota sobre memória

Um registro ocupa espaço para todos os seus campos. O compilador pode incluir pequenos espaços internos para alinhar os dados na memória.

Para a maior parte dos programas introdutórios, a prioridade é modelar os dados com clareza; detalhes de alinhamento aparecem em situações mais avançadas.

🧩 Prática em aula

Modele um Produto com código, nome e preço. Leia três produtos e mostre o mais caro.

Gabarito orientador: Crie uma struct, armazene os registros em um vetor e percorra as posições procurando o maior preço.

📚 Referências e materiais

Use estas fontes para consultas pontuais depois da aula:

Os slides completos, o Campus Virtual e o DREDD continuam sendo as fontes principais da disciplina.

🧾 Um vetor de registros

Um struct agrupa dados relacionados; um vetor de registros organiza várias pessoas.

Aluno 0

nome: Ana

matrícula: 2026001

nota: 8.5

Aluno 1

nome: Bruno

matrícula: 2026002

nota: 7.0

Aluno 2

nome: Carla

matrícula: 2026003

nota: 9.2

struct Aluno { string nome; int matricula; double nota; };
Aluno turma[3];
cout << turma[1].nome;

🧭 Lendo registros passo a passo

O ponto central é alternar a leitura do texto e dos números sem deixar a quebra de linha pendente.

getline(cin, aluno.nome);
cin >> aluno.matricula >> aluno.nota;
cin.ignore();

Use uma função como lerAluno(Aluno& a) para concentrar a leitura e reaproveitar o código.

🔗 Complementos online

📌 Resumo da aula

  • struct agrupa campos relacionados de tipos diferentes.
  • O operador ponto acessa os campos do registro.
  • Vetor de registros representa várias entidades.
  • Funções podem receber registros por referência constante.

PRÓXIMA AULA

⏭️ Próxima aula

Redimensionamento de vetores

Prof. Paulo Rettore

GAC124 — Introdução aos Algoritmos