• Nenhum resultado encontrado

Bac004 - Parte 9

N/A
N/A
Protected

Academic year: 2021

Share "Bac004 - Parte 9"

Copied!
27
0
0

Texto

(1)

1

(2)

2

Variáveis Compostas

Heterogêneas

Conjuntos de dados logicamente

relacionados, mas de tipos diferentes

(numérico, literal, lógico).

Conhecidos como registros ou

(3)

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

(4)

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)

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)

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;

(7)

Variáveis Compostas

Heterogêneas

(8)

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

(9)

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

(10)

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.

(11)

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

(12)

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

(13)

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)

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

(15)

15

Variáveis Compostas

(16)

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

(17)

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.

(18)

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)

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,

(20)

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)

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)

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)

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)

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)

25

Variáveis Compostas Heterogêneas –

Registros Aninhados

Podem-se definir tipos de dados

registro cujos membros são outros

registros.

(26)

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

(27)

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.

Referências

Documentos relacionados

Sempre que as entidades adjudicantes recorrerem à possibilidade prevista no n.º 3, alínea a), de formular especificações técnicas em termos de desempenho ou de

Morgado, como era chamado pelos seus colegas, Ana Cristina Pereira Morgado, sua filha, assumiu a presidéncia da Associacao no ano de 2017.Atualmente, a Associacao tem sede propria

Além de possibilitar o escrutínio das “peculiaridades do racismo à brasileira que, como todos os racismos, tem armadilhas que não podem ser evitadas

Este novo desenho de procedimentos permite, ainda, a criação de instrumentos que clarifiquem o processo de equivalência respeitante a habilitações adquiridas em escolas

Pilosidade densa na face, principalmente na região parocular inferior composta por pelos plumosos; nos machos, pilosidade da fronte e mesoscuto mais densa e com pelos mais

Nesse contexto, vários estudos já foram realizados para elucidar os fatores ambientais e comportamentais associados ao aumento da ocorrência de sobrepeso e de obesidade na

8.4.4 No caso de não ativação do CHIP CLARO em até 30 (trinta) dias contados da contratação dos serviços do COMBO MULTI INTERNET, o cliente passa a ser considerado

Estes resultados comprovam a eficiência do modelo fuzzy em predizer as respostas produtivas para frangos de corte diante das variáveis ambientais analisadas, pois