Transcript

Registos

Escola Secundária Filipa de Vilhena

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

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

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;

};

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;

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

#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++

É 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

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.

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;

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

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]

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”); }

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;

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> }

… struct dados { int idade ; float peso; } ; int main() { dados d1 ; d1.idade = 17; d1.peso = 70.5 ; altera (d1) ; cout << “Dentro de main\n”; 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ção\n”; 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 …

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 …


Recommended