Baixe o app para aproveitar ainda mais
Prévia do material em texto
1 Registros ou Estruturas 2 Variáveis Compostas Heterogêneas Conjuntos de dados logicamente relacionados, mas de tipos diferentes (numérico, literal, lógico). Conhecidos como registros ou estruturas. 3 Variáveis Compostas Heterogêneas Os registros correspondem a conjuntos de posições de memória conhecidos por um mesmo nome e individualizados por identificadores associados a cada conjunto de posições. Na variável composta homogênea, a individualização de um elemento é feita através de índices, já no registro cada componente é individualizado pela explicitação de seu identificador. 4 Variáveis Compostas Heterogêneas Um registro é, portanto, uma coleção de campos, em que cada campo pode ser de um tipo diferente. A linguagem C++ também oferece outros dois mecanismos para a criação de variáveis compostas heterogêneas: uniões e classes. 5 Variáveis Compostas Heterogêneas Por meio da palavra-chave struct define-se um novo tipo de dado. Definir um tipo de dado significa informar ao compilador o seu nome, o seu tamanho em bytes e o formato em que ele deve ser armazenado e recuperado da memória. Informa como ele está organizado e quais são os seus membros. A definição de um registro não cria a variável, somente informa ao compilador as características do novo tipo. Não há reserva de memória. 6 Variáveis Compostas Heterogêneas Em C/C++ esta declaração é realizada da seguinte forma: struct Nome_da_estrutura { tipo identificador1; tipo identificador2; ... tipo identificadorN; } variáveis; Variáveis Compostas Heterogêneas 8 Variáveis Compostas Heterogêneas - Exemplo Nome do Registro Componentes do Registro Struct Cliente { string Nome; string Rua; int Numero; string CEP; char Sexo; string Nascimento; string CPF; String RG; } ; Variáveis Compostas Heterogêneas – Declaração de Variáveis Depois de definir um novo tipo de dado, este pode ser usado para declarar variáveis de modo análogo a qualquer tipo simples. Sintaxe: tipoDeDadoRegistro nomeDaVariável; Exemplos: Funcionario funcionario; // variável funcionario do tipo Funcionario Cliente C[10]; //Vetor de 10 posições do tipo Cliente Variáveis Compostas Heterogêneas – Acesso aos membros de um registro Pelo fato de o registro conter várias informações, para acessar um campo individualmente é necessário indicar o nome da variável e o nome do campo desejado, separados pelo operador ponto. Sintaxe: Variáveis Compostas Heterogêneas – Acesso aos membros de um registro Exemplos: Funcionario funcionario; cout << funcionario.nome; // Imprime o nome do funcionário cout << funcionario.nome[0]; // Imprime o primeiro caracter do nome Funcionario funcionarios[10]; cout << funcionarios[9].nome; // Imprime o nome do último funcionário cout << funcionarios[0].nome[0]; /* Imprime o primeiro caracter do nome do primeiro funcionário*/ Variáveis Compostas Heterogêneas – Inicialização de variáveis do tipo registro É possível inicializar uma variável do tipo registro de forma semelhante a uma matriz. Os valores a serem atribuídos a seus membros devem ser colocados na ordem em que foram definidos, separados por vírgulas e entre chaves. struct Data{ int dia; int mes; int ano; }; Data natal = {25,12,2013}; Data aniversario = {12,8,2013}; Variáveis Compostas Heterogêneas – Atribuições entre registros Uma variável do tipo registro pode ser atribuída à outra variável do mesmo tipo por meio de uma atribuição simples. Os valores de todos os membros de um registro são atribuídos aos membros de outro registro. struct Data{ int dia; int mes; int ano; }; Data anoNovo = {1, 1, 2012}; Data aniversarioCris = anoNovo; 14 Variáveis Compostas Heterogêneas - Exemplo Em um certo município, vários proprietários de imóveis estão em atraso com o pagamento do imposto predial. Desenvolver um programa que calcule e escreva o valor da multa a ser paga por esses proprietários considerando que: Os dados de cada imóvel: identificação (string), valor do imposto e número de meses em atraso serão digitados; As multas devem ser calculadas a partir do valor do imposto e de acordo com a tabela. 15 Variáveis Compostas Heterogêneas - Exemplo 16 Variáveis Compostas Heterogêneas - Exemplo /*ProgC078 - Programa para apresentação de estruturas em C*/ #include <iostream> int main(){ struct {int Id; float Imp; int Meses;} Imovel; float Multa; char resp = 'S'; while(resp == 'S') { std::cout << "\nDigite os dados do imovel (Identificador, Imposto e Meses): "; std::cin >> Imovel.Id >> Imovel.Imp >> Imovel.Meses; if (Imovel.Imp <= 50) Multa = 1; else if (Imovel.Imp <= 180) Multa = 2; else if (Imovel.Imp <= 500) Multa = 3; else Multa = 5; Multa = ((Multa * Imovel.Imp) / 100) * Imovel.Meses; std::cout << "\nImovel: " << Imovel.Id << "\tMulta: " << Multa << "\n"; std::cout << "Deseja Continuar (S/N)? "; std::cin >> resp; } return 0; } Declaração de estrutura. Leitura da estrutura. Teste de componente da estrutura Escrita da estrutura. 17 Variáveis Compostas Heterogêneas - Exemplo /*ProgC079 - Programa para apresentação de vetores de estruturas em C*/ #include <iostream> #include <cstdlib> using namespace std; struct Venda{ int pecas; float preco; }; Venda Vendas[5]; int main(){ int cont = 1; while (cont <= 5) { cout << "Digite a Peca " << cont << ": "; cin >> Vendas[cont].pecas; cout << "Digite o preco " << cont << ": "; cin >> Vendas[cont].preco; cont++; } cont = 1; while (cont <= 5) { cout << "A Peca " << Vendas[cont].pecas << " tem valor = " << Vendas[cont].preco << "\n"; cont++; } system ("PAUSE > 0"); return 0; } Declaração de estrutura. Declaração de vetor de estrutura. 18 Variáveis Compostas Heterogêneas - Exemplo /*ProgC080.cpp - Outra forma de declarar estrutura*/ #include <iostream> #include <cstdlib> #include <cstdio> using namespace std; typedef struct Produto{ int cod; float valor; char nome[30]; }; int main(){ Produto Prod; cout << "Digite o codigo do produto: "; cin >> Prod.cod; cout << "Digite o valor do produto: "; cin >> Prod.valor; fflush(stdin); cout << "Digite o nome do produto: "; gets(Prod.nome); cout << "Apresentacao da Entrada de Dados \n\n\tCodigo: " << Prod.cod; cout << "\n\tValor: " << Prod.valor; cout << "\n\tNome: " << Prod.nome; system ("pause>0"); return 0; } Outra forma de declarar registro 19 Variáveis Compostas Heterogêneas – Passando registro para funções Variáveis do tipo registro podem ser passados como parâmetro de funções da mesma maneira que foi trabalhado com as demais variáveis (simples, vetores ou matrizes). 20 Variáveis Compostas Heterogêneas – Passando registro para funções /*ProgC081.cpp - Registro e funções*/ #include <iostream> #include <cstdio> using namespace std; struct Funcionario { int codigo; char nome[30]; float salario; char sexo; }; void cadastra(Funcionario &f); void exibe(Funcionario f); int main() { Funcionario funcionario; cadastra(funcionario); exibe(funcionario); return 0; } void cadastra(Funcionario &f) { cout << "Entre com o código: "; cin >> f.codigo; cout << "Entre com o nome: "; fflush(stdin); gets(f.nome); cout << "Entre com o salário: "; cin>> f.salario; cout << "Entre com o sexo: "; cin >> f.sexo; } void exibe(Funcionario f){ cout << "\nCódigo: " << f.codigo; cout << "\nNome: " << f.nome; cout << "\nSalário: " << f.salario; cout << "\nSexo: " << f.sexo; } Declaração de registro Protótipos Passagem por referência Passagem por valor 21 Variáveis Compostas Heterogêneas – Passando registro para funções A sintaxe de passar um vetor ou matriz de registros é semelhante a de passar vetor ou matriz de variáveis simples. Na chamada a uma função deve-se escrever apenas o nome do vetor ou matriz. No cabeçalho de definição da função declaram-se normalmente os vetores/matrizes de registros. 22 Variáveis Compostas Heterogêneas – Passando registro para funções /*ProgC082.cpp - Registro e Função*/ #include <iostream> #include <cstdio> using namespace std; struct Funcionario{ int codigo; char nome[30]; float salario; char sexo; }; void cadastra(Funcionario f[]); void exibe(Funcionario f[]); int main(){ Funcionario funcionarios[10]; cadastra(funcionarios); exibe(funcionarios); return 0; } void cadastra(Funcionario f[10]){ for(int i=0; i<10; i++) { cout << i+1 << "o. FUNCIONARIO\n"; cout << "Entre com o código: "; cin >> f[i].codigo; cout << "Entre com o nome: "; fflush(stdin); gets(f[i].nome); cout << "Entre com o salário: "; cin >> f[i].salario; cout << "Entre com o sexo: "; cin >> f[i].sexo; } } void exibe(Funcionario f[10]){ for(int i=0; i<10; i++) { cout << i+1 << "o. FUNCIONARIO\n"; cout << "\nCódigo: " << f[i].codigo; cout << "\nNome: " << f[i].nome; cout << "\nSalário: " << f[i].salario; cout << "\nSexo: " << f[i].sexo; } } Declaração de registro Protótipos Vetor Parâmetro vetor 23 Variáveis Compostas Heterogêneas – Passando registro para funções Pode-se retornar um registro completo para outra função, como pode ser observado na função novaVenda() no exemplo a seguir. 24 Variáveis Compostas Heterogêneas – Passando registro para funções /*ProgC083.cpp - Função e registro*/ #include <iostream> using namespace std; struct Venda{ int quantPecas; float preco; }; Venda novaVenda(){ Venda v; cout << "\nNova Venda\n"; cout << "\nInsira o numero de peças: "; cin >> v.quantPecas; cout << "\nInsira o preço: "; cin >> v.preco; return v; } void listaTotalVendas(Venda &v1, Venda &v2){ cout << "\nVenda Total\n"; cout << "\nTotal de peças: " << (v1.quantPecas + v2.quantPecas); cout << "\nPreço Total: " << (v1.preco + v2.preco); } int main() { Venda venda1, venda2; venda1 = novaVenda(); venda2 = novaVenda(); listaTotalVendas(venda1, venda2); return 0; } Declaração de registro 25 Variáveis Compostas Heterogêneas – Registros Aninhados Podem-se definir tipos de dados registro cujos membros são outros registros. Variáveis Compostas Heterogêneas – Registros Aninhados /*ProgC084.cpp - Registro aninhado*/ #include <iostream> #include <cstdio> using namespace std; struct Data{ int dia; int mes; int ano;}; struct Venda{ int quantPecas; float preco; Data dtVenda;}; int main(){ Venda v = {15, 130.50, {27, 5, 2011}}; cout << "Quantidade de peças: " << v.quantPecas << endl << "Preço: " << v.preco << endl << "Data da venda: " << v.dtVenda.dia << "/" << v.dtVenda.mes << "/" << v.dtVenda.ano; return 0; } Declaração de registro Aninhamento 27 Exercícios Criar um programa que crie o registro a seguir e faça a entrada de dados deste registro, apresentando a entrada realizada: Cliente – codigo, nome, produto comprado, valor comprado, data entrega, data pagamento, tipo pagamento. Slide 1 Slide 2 Slide 3 Slide 4 Slide 5 Slide 6 Slide 7 Slide 8 Slide 9 Slide 10 Slide 11 Slide 12 Slide 13 Slide 14 Slide 15 Slide 16 Slide 17 Slide 18 Slide 19 Slide 20 Slide 21 Slide 22 Slide 23 Slide 24 Slide 25 Slide 26 Slide 27
Compartilhar