O documento discute estruturas de dados compostas em C++, especificamente registos. Apresenta exemplos de declaração e utilização de registos, incluindo a combinação de registos com vectores. Explica como passar registos para funções.
2. Conceito de Estruturas de Dados Compostas
Vector vs Registo
Declaração de Registos como tipo de dados
Declaração de registos como variáveis
Utilização de registos
Combinação de registos com vectores
Passagem de registos para funções
3. Um tipo de dados estruturados que permite agrupar elementos de vários tipos
diferentes, sob a forma de campos, numa mesma estrutura.
Estas estruturas são habitualmente designadas por registos (record).
Exemplos:
Esta organização não o faz lembrar de nada??? Ai essa memória …
Então essas Bases de Dados … tabelas … campos … façamos esse exercício para os
exemplos acima.
Pessoa
Nome
Idade
Naturalidade
Profissão
Artigo
Código
Nome
Preço
Quantidade
4. Olhando para os exemplos anteriores, os campos daquelas estruturas têm todas os
mesmo tipo???Qual o tipo que atribuiria a cada um dos campos???
Esta é A diferença entre vectores e estruturas: os tipos de dados …
Vectores: elementos do mesmo tipo de dados
Registos: elementos de diferentes tipos de dados
Forma de acesso aos dados
Declaração de registos como tipo de dados
struct nome_da_estrutura {
tipo_dados campo_1;
tipo_dados campo_2;
…………………
tipo_dados campo_n;
};
5. Declaração de registos como variáveis
No momento da criação da estrutura
struct nome_da_estrutura {
tipo_dados campo_1;
tipo_dados campo_2;
…………………
tipo_dados campo_n;
} var1, var2, …, varn;
Posteriormente à criação da estrutura
nome_da_estrutura var1, var2, … varn;
6. Exemplo de declaração de estrutura (com declaração de variáveis):
Exemplo de declaração de variáveis:
Agora que sabe criar um estrutura …
haja confiança … coloca-se um
problema, mais um uma vez que já
eram poucos :o)
Como aceder a uma estrutura
(registo) ou campo dessa estrutura?
Muito simples, para aceder a:
Registo var1 a1
Campo var1.campo_1 a1.nome
7. #include <string.h>
#include <iostream>
using namespace std;
struct atleta {
char nome[30] ;
int idade ;
} a1, a2 ;
int main() {
a1.idade = 18 ;
cout << “Escreva o nome: “ ;
gets (a1.nome) ;
cout << a1.nome << “n’”;
strcpy (a2.nome, “Joana Lemos”) ;
a2.idade = a1.idade ;
a1 = a2 ;
cout << a1.nome << “t” ;
cout << a1.idade << “n” ;
system (“PAUSE”) ;
}
Atribuição de valor para o campo idade do atleta 1 (a1)
Leitura do campo nome do atleta 1 (a1)
Escrita do campo nome do atleta 1 (a1)
Cópia de “Joana Lemos” para o campo nome do atleta 2 (a2)
Atribuição entre
campos da
estrutura (idade
neste caso)
Cópia integral
(atribuição) das
variáveis de
estrutura e todos
os seus campos
Este é o estado em que se fica
quando se leva uma tareia de C++
8. É altura do faça você mesmo com um exemplo muito simples:
Implemente uma estrutura que guarde a data introduzida pelo utilizador e que no
final a apresente da seguinte forma:
Hoje e: Dia / Designação do Mês / Ano
Vejamos um exemplo:
Input:
Dia: 7
Mês: 6
Ano: 2011
Output:
Hoje e: 7 / Junho / 2011
Utilize uma função para fazer a correspondência entre:
Mês Ano
1 Janeiro
2 Fevereiro
…
12 Dezembro
9. Será que percebeu mesmo??? Mesmo, mesmo, mesmo???
Vamos lá ver isso com mais uma actividade …
… é que é já a seguir.
Implemente uma estrutura semelhante àquela que representa a pessoa mas com o
nome aluno e respectivos campos (que ache específicos).Tenha em atenção os
seguintes aspectos:
Um dos campos deve ser obrigatoriamente o campo: idade;
Crie dois registos para aluno, em que deve ser pedido ao utilizador para
preencher toda a informação para cada um deles;
Deve comparar a idade dos dois alunos e ar um dos seguintes resultados:
<Nome Aluno 1> é mais novo;
<Nome Aluno 2> é mais novo;
Alunos têm a mesma idade.
10. Para dissipar mesmo todas as duvidas, parece que já vos ouço a pedir …
Só mais uma … só mais uma … e os vossos desejos são ordens … nada de exagerar.
Implemente uma estrutura que represente um artigo genérico e respectivos campos.
Tenha em atenção os seguintes aspectos:
Deve ter pelo menos 3 campos obrigatório: nome, preço e quantidade;
Crie dois registos para a estrutura artigo e peça ao utilizador para preencher todos
os campo;
No final deve apresentar o valor em stock de cada um dos artigos;
11. Peguemos novamente na estrutura atleta, se não for muito pesada, utilizada
anteriormente … imagine que pretende criar o registo de dez atletas, como o
poderia fazer sem estar a recorrer a dez variáveis do tipo estrutura atleta???
Excelente raciocínio, ai se desse para utilizar o melhor de dois mundos …
… vectores … estruturas …
Tenho uma óptima noticia para vos dar, ou mesmo vender, é mesmo possível …
As estruturas podem funcionar como vectores. Como??? É só ver o slide seguinte …
Atleta 1 Atleta 2 Atleta 3 Atleta 4 Atleta 5 Atleta 6 Atleta 7 Atleta 8 Atleta 9 Atleta 10
12. Exemplo de declaração de um vector
Exemplo de declaração de estrutura (com declaração de um vector)
Sintaxe para referência de
vectores tipo registo:
Para o registo como vector
var[ i ]
Para o campo do registo
como vector
var[ i ].campo
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]
…
…
13. Implemente o seguinte programa completando-o e elabore o enunciado correspondente:
…
struct artigos {
char nome[30] ;
float preco, quant ;
} pretende-se registar no máximo 10 artigos
int main() {
int i;
for (i = 0; i < 10; i++) {
cout << “Dados relativos ao artigo “ << i+1<< “n” ;
cout << “Nome: “ ;
gets (guarda nome do artigo) ;
cout << “Preço: “ ;
cin >> guarda preço do artigo;
cout << “Quantidade: “ ;
cin >> guarda quantidade do artigo; }
for (i = 0; i < 10; i++) {
cout << “Valor em stock do artigo “ << i+1<< “: “;
cout << imprimir valor total deste artigo que ainda estão em stock << “n”;
}
system (“PAUSE”);
14. Actividade 5:
Aproveite a estrutura pessoa e proceda às alterações necessárias de forma a criar um
vetor de registos aluno. Elabore um programa que permita descobrir qual o nome do
aluno mais novo de uma turma de 19 alunos.
Actividade 6:
A partir de uma estrutura identifica, crie um vetor de registos pessoa.A estrutura deve
conter obrigatoriamente um campo sexo, de forma a poder implementar um programa
que proceda a alguns cálculos estatísticos, como por exemplo:
Média de idades de pessoas do sexo feminino;
Média de idades de pessoas do sexo masculino;
…
15. Já que estamos a interligar matéria e não gostamos que ninguém se sinta
marginalizado, vamos ver como é que se podem passar estruturas para funções.
E pensam vocês, mas que grande confusão …
… nada disso, muito simples e com toda a lógica … ou não …
Que tal utilizar a estratégia “by example”, que vocês tanto gostam???
Antes disso, relembrar muito rapidamente o esquema genérico de uma função:
<tipo_dados> <nome_função>(tipo_argumentos argumentos, … ) {
<conjunto_de_instruções>
}
16. …
struct dados {
int idade ;
float peso;
} ;
int main() {
dados d1 ;
d1.idade = 17;
d1.peso = 70.5 ;
altera (d1) ;
cout << “Dentro de mainn”;
cout << “Idade: “ << d1.idade << “t” ;
cout << “Peso: “ << d1.peso << “t” ;
system (“PAUSE”) ;
}
Chamada à função altera
Com 1 argumento: d1 (estrutura)
Neste caso, a função altera recebe uma
estrutura do tipo dados em d … E não
retorna valores uma vez que apenas
escreve nos campos da própria estrutura.
void altera (dados d) {
d.idade ++ ;
d.peso = d.peso * 1.1 ;
cout << “Dentro da funçãon”;
cout << “Idade: “ << d.idade << “t”;
cout << “Peso: “ << d.peso << “t” ;
}
Depois de efectuadas as instruções
dentro da função, retorna ao mesmo local
no main() e continua …
17. Actividade 7:
No aproveitar é que está o ganho, aproveite a estrutura atleta e proceda às alterações
necessárias de forma a criar um vetor de registos jogador. Elabore um programa que
permita recolher informações como:
Pesquisar jogador pelo seu número;
Saber qual o jogador mais velho e mais novo e mais novo da equipa;
Saber a média da altura dos jogadores;
Média de pontos marcados pela equipa;
…
Dica: Incluir em atleta os campos relativos aos pontos anteriores.
É preciso é confiança …