09. REGISTROS OU ESTRUTURAS
27 pág.

09. REGISTROS OU ESTRUTURAS


DisciplinaProgramacao Modular91 materiais1.043 seguidores
Pré-visualização2 páginas
1
Registros ou Estruturas
2
Variáveis Compostas 
Heterogêneas
\uf06e Conjuntos de dados logicamente 
relacionados, mas de tipos diferentes 
(numérico, literal, lógico).
\uf06e Conhecidos como registros ou 
estruturas.
3
Variáveis Compostas 
Heterogêneas
\uf06e 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.
\uf06e 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
\uf06e Um registro é, portanto, uma coleção 
de campos, em que cada campo pode 
ser de um tipo diferente.
\uf06e 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
\uf06e Por meio da palavra-chave struct define-se 
um novo tipo de dado.
\uf06e 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.
\uf06e Informa como ele está organizado e quais 
são os seus membros.
\uf06e 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
\uf06e 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 
\u2013 Declaração de Variáveis
\uf06e Depois de definir um novo tipo de dado, este 
pode ser usado para declarar variáveis de modo 
análogo a qualquer tipo simples.
\uf06e Sintaxe:
tipoDeDadoRegistro nomeDaVariável;
\uf06e Exemplos:
\uf06e Funcionario funcionario; // variável funcionario do tipo Funcionario
 Cliente C[10]; //Vetor de 10 posições do tipo Cliente
Variáveis Compostas Heterogêneas \u2013 
Acesso aos membros de um registro
\uf06e 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.
\uf06e Sintaxe:
Variáveis Compostas Heterogêneas \u2013 
Acesso aos membros de um registro
\uf06e 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 \u2013 
Inicialização de variáveis do tipo registro
\uf06e É possível inicializar uma variável do tipo registro de 
forma semelhante a uma matriz. 
\uf06e 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 \u2013 
Atribuições entre registros
\uf06e Uma variável do tipo registro pode ser atribuída à 
outra variável do mesmo tipo por meio de uma 
atribuição simples. 
\uf06e 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
\uf06e 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:
\uf0a1 Os dados de cada imóvel: identificação (string), 
valor do imposto e número de meses em atraso 
serão digitados;
\uf0a1 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 << &quot;\nDigite os dados 
do imovel (Identificador, Imposto e 
Meses): &quot;;
 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 << &quot;\nImovel: &quot; << 
Imovel.Id << &quot;\tMulta: &quot; << Multa << 
&quot;\n&quot;;
 std::cout << &quot;Deseja Continuar 
(S/N)? &quot;;
 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 << &quot;Digite a Peca &quot; << cont << 
&quot;: &quot;;
 cin >> Vendas[cont].pecas;
 cout << &quot;Digite o preco &quot; << cont 
<< &quot;: &quot;;
 cin >> Vendas[cont].preco;
 cont++;
 }
 cont = 1;
 while (cont <= 5) {
 cout << &quot;A Peca &quot; << 
Vendas[cont].pecas << &quot; tem valor = &quot; 
<< Vendas[cont].preco << &quot;\n&quot;;
 cont++;
 }
 system (&quot;PAUSE > 0&quot;);
 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 << &quot;Digite o codigo do produto: 
&quot;;
 cin >> Prod.cod;
 cout << &quot;Digite o valor do 
produto: &quot;;
 cin >> Prod.valor;
 fflush(stdin);
 cout << &quot;Digite o nome do 
produto: &quot;;
 gets(Prod.nome);
 cout << &quot;Apresentacao da 
Entrada de Dados \n\n\tCodigo: &quot; 
<< Prod.cod;
 cout << &quot;\n\tValor: &quot; << 
Prod.valor;
 cout << &quot;\n\tNome: &quot; << 
Prod.nome;
 system (&quot;pause>0&quot;);
 return 0;
}
Outra forma de 
declarar registro 
19
Variáveis Compostas Heterogêneas \u2013 
Passando registro para funções
\uf06e 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 \u2013 
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 << &quot;Entre com o código: &quot;;
 cin >> f.codigo;
 cout << &quot;Entre com o nome: &quot;;
 fflush(stdin);
 gets(f.nome);
 cout << &quot;Entre com o salário: &quot;;
 cin