36
Programação Estruturada II Aula 03 – Estruturas, Uniões e Enumeração Prof. Thomás da Costa [email protected] Anhanguera – 2015.1

Programação Estruturada 2 - Aula 03

Embed Size (px)

Citation preview

Page 1: Programação Estruturada 2 - Aula 03

Programação Estruturada II

Aula 03 – Estruturas, Uniões e Enumeração

Prof. Thomás da [email protected]

Anhanguera – 2015.1

Page 2: Programação Estruturada 2 - Aula 03

Estruturas, Uniões e Enumeração

ESTRUTURAS, UNIÕES E ENUMERAÇÃO

Prof. Thomás da Costa Programação Estruturada II

Page 3: Programação Estruturada 2 - Aula 03

Estruturas, Uniões e Enumeração

O que é:

É um conjunto de variáveis que representam características de um determinadodomínio ou de um tipo. A estrutura pode definir uma entidade e possui grandesemelhança com registros de banco de dados. O agrupamento de variáveis podeser de qualquer tipo, sendo denominado de membro da estrutura.

Estruturas

Prof. Thomás da Costa Programação Estruturada II

Page 4: Programação Estruturada 2 - Aula 03

Estruturas, Uniões e Enumeração

Exemplo:

Quais são as informações de um Aluno para a Faculdade?- Nome- Matrícula- Série- Turma- Curso

No exemplo acima temos a estrutura Aluno que contém as informações ou ascaracterísticas de um aluno. Muito semelhante a um registro de banco de dados.

Podemos dizer que em uma estrutura, estamos armazenando informações agrupadas logicamente.

Estruturas

Prof. Thomás da Costa Programação Estruturada II

Page 5: Programação Estruturada 2 - Aula 03

Estruturas, Uniões e Enumeração

Mais um exemplo:

Quais as informações de um Funcionário para uma Empresa?- Nome- Dados Pessoais- Data de Admissão- Cargo- Salário- Setor/Área de Atuação

Estruturas

Prof. Thomás da Costa Programação Estruturada II

Vamos ver como fazer uma estrutura em C/C++ !!!

Page 6: Programação Estruturada 2 - Aula 03

Estruturas, Uniões e Enumeração

Estruturas em C/C++:

Estruturas

Prof. Thomás da Costa Programação Estruturada II

struct aluno

{

char nome[255];

int ra;

int serie;

int turma;

char curso[100];

};

Nome da estrutura

Palavra reservada que identifica uma estrutura

Membros da estrutura

Chaves definem o início e o fim da estrutura

Termina com ponto e vírgula

Page 7: Programação Estruturada 2 - Aula 03

Estruturas, Uniões e Enumeração

Memória:

Uma estrutura armazena vários tipos de dados e ocupa a memória de acordo coma quantidade de membros declarados na estrutura.

Estruturas

Prof. Thomás da Costa Programação Estruturada II

struct aluno

{

char nome[255];

int ra;

int serie;

int turma;

char curso[100];

};

Membro Bytes

char nome[255] 255

int ra 4

int serie 4

int turma 4

char curso[100] 100

TOTAL: 367

Page 8: Programação Estruturada 2 - Aula 03

Estruturas, Uniões e Enumeração

Uma curiosidade:

Para saber o tamanho de um tipo de dado ou variável usamos o operador sizeof.Os tamanhos podem variar de computador, compilador e sistema operacional.

Estruturas

Prof. Thomás da Costa Programação Estruturada II

#include <iostream>

using namespace std;

int main()

{

cout << "Tam. do CHAR:" << sizeof(char) << endl;

cout << "Tam. do INT:" << sizeof(int) << endl;

cout << "Tam. do DOUBLE:" << sizeof(double) << endl;

cout << "Tam. do FLOAT:" << sizeof(float) << endl;

}

Page 9: Programação Estruturada 2 - Aula 03

Estruturas, Uniões e Enumeração

Estruturas

Prof. Thomás da Costa Programação Estruturada II

struct aluno

{

char nome[255];

int ra;

int serie;

int turma;

char curso[100];

} aluno_anhanguera;

struct aluno aluno_tecnologia;

aluno aluno_curso;

Declarando uma variável do tipo Estrutura:

Existem 3 formas de declarar uma variável de estrutura:

Page 10: Programação Estruturada 2 - Aula 03

Estruturas, Uniões e Enumeração

Acessando membros de uma estrutura:

Para acessar um membro de uma estrutura utilizamos o operador ponto (.)

Estruturas

Prof. Thomás da Costa Programação Estruturada II

...

struct aluno

{

char nome[255];

int ra;

int serie;

int turma;

char curso[100];

} aluno_anhanguera;

...

int main()

{

cout << aluno_anhanguera.nome << endl;

}

Acessando um membro

O membro “nome” da estrutura será impresso na tela

Page 11: Programação Estruturada 2 - Aula 03

Estruturas, Uniões e Enumeração

Atribuindo valores para membros de uma função:

Estruturas

Prof. Thomás da Costa Programação Estruturada II

#include <iostream>

using namespace std;

struct demonstracao

{

char caracter;

double valor1;

float valor2;

int valor3;

} demo;

int main()

{

demo.caracter = 'A';

demo.valor1 = 3.2;

demo.valor2 = 6.7;

demo.valor3 = 45;

cout << demo.caracter << endl;

cout << demo.valor1 << endl;

cout << demo.valor2 << endl;

cout << demo.valor3 << endl;

}

Atribuição de valores

Page 12: Programação Estruturada 2 - Aula 03

Estruturas, Uniões e Enumeração

Atribuindo valores para membros de uma função:

Estruturas

Prof. Thomás da Costa Programação Estruturada II

#include <iostream>

#include <string.h>

using namespace std;

struct demonstracao

{

char string[100];

int vetor_inteiro[10];

double vetor_double[5];

} demo;

int main()

{

strcpy(demo.string, "Valor da String:");

demo.vetor_inteiro[0] = 1;

demo.vetor_inteiro[2] = 2;

demo.vetor_double[4] = 5.6;

cout << demo.string << endl;

cout << demo.vetor_inteiro[0] << endl;

cout << demo.vetor_inteiro[2] << endl;

cout << demo.vetor_double[4] << endl;

}

Vetor de char usar strcpy

Atribuição de valores em vetores

Page 13: Programação Estruturada 2 - Aula 03

Estruturas, Uniões e Enumeração

Atribuindo valores para membros de uma função:

Estruturas

Prof. Thomás da Costa Programação Estruturada II

#include <iostream>

#include <string.h>

using namespace std;

struct demonstracao

{

char string[100];

char caracter;

int valor_inteiro;

double valor_double;

} demo;

int main()

{

cout << "Digite o valor da string:" << endl;

gets(demo.string);

cout << "Digite os valores:" << endl;

cin >> demo.caracter >> demo.valor_inteiro

>> demo.valor_double;

cout << "Valores digitados:" << demo.string

<< "," << demo.caracter

<< "," << demo.valor_inteiro

<< "," << demo.valor_double << endl;

}

O cin funciona da mesma forma em um membro de uma estrutura

O gets funciona da mesma forma em um membro de uma estrutura

Page 14: Programação Estruturada 2 - Aula 03

Estruturas, Uniões e Enumeração

Resumo:

- É definida pela palavra struct- Possuem um nome- Representa algum domínio, tipo ou uma entidade- Os tipos de uma estrutura são agrupadas logicamente- Composta de membros que são tipos de variáveis (int, double, float, char)- Seus membros são acessados utilizando o ponto (.)- Para atribuir valores (int, double, char e etc), utilizamos o operador igual (=),

idêntico a atribuição de uma variável- Utilizamos o strcpy para atribuir um valor para um vetor de char- Os comandos cin e gets funcionam da mesma forma para os membros de uma

estrutura- Vetores também são acessado da mesma forma, através de seus índices

Estruturas

Prof. Thomás da Costa Programação Estruturada II

Page 15: Programação Estruturada 2 - Aula 03

Estruturas, Uniões e Enumeração

Passando membros de uma estrutura como parâmetro:

Estruturas em Funções

Prof. Thomás da Costa Programação Estruturada II

#include <iostream>

#include <string.h>

using namespace std;

struct aluno

{

char nome[100];

int ra;

} aluno_tecnologia;

void imprimir_aluno(char *nome, int ra);

int main()

{

cout << "Digite o nome do aluno:";

gets(aluno_tecnologia.nome);

cout << "Digite o RA do aluno:";

cin >> aluno_tecnologia.ra;

imprimir_aluno(aluno_tecnologia.nome,

aluno_tecnologia.ra);

}

void imprimir_aluno(char *nome, int ra)

{

cout << nome << endl;

cout << ra << endl;

}

Passamos os membros como parâmetro para a função

Page 16: Programação Estruturada 2 - Aula 03

Estruturas, Uniões e Enumeração

Parâmetros por referência:

Estruturas em Funções

Prof. Thomás da Costa Programação Estruturada II

...

void troca_aluno(char *nome, int &ra);

int main()

{

...

troca_aluno(aluno_tecnologia.nome,

aluno_tecnologia.ra);

cout << aluno_tecnologia.nome;

cout << aluno_tecnologia.ra;

}

void troca_aluno(char *nome, int &ra)

{

strcpy(nome, "Novo Aluno");

ra = 123456;

}

* e o & definem também, a passagem por referência.

Trocando os valores da estrutura

Page 17: Programação Estruturada 2 - Aula 03

Estruturas, Uniões e Enumeração

Estrutura como parâmetro (Por valor):

Podemos passar uma estrutura inteira como parâmetro de uma função. Osparâmetros podem ser também por valor ou por referência

Estruturas em Funções

Prof. Thomás da Costa Programação Estruturada II

...

void imprimir_aluno(struct aluno alu);

int main()

{

...

imprimir_aluno(aluno_tecnologia);

}

void imprimir_aluno(struct aluno alu)

{

cout << alu.nome << endl;

cout << alu.ra << endl;}

Definindo a passagem de uma estrutura como parâmetro

Passando a estrutura

A palavra struct não é obrigatória na passagem do parâmetro

Page 18: Programação Estruturada 2 - Aula 03

Estruturas, Uniões e Enumeração

Estrutura como parâmetro (Por referência):

Estruturas em Funções

Prof. Thomás da Costa Programação Estruturada II

#include <iostream>

#include <string.h>

using namespace std;

struct aluno

{

char nome[100];

int ra;

};

void ler_aluno(struct aluno &alu);

int main()

{

struct aluno aluno_tecnologia;

ler_aluno(aluno_tecnologia);

cout << aluno_tecnologia.nome << endl;

cout << aluno_tecnologia.ra << endl;

}

void ler_aluno(struct aluno &alu)

{

cout << "Digite o nome do aluno:" << endl;

gets(alu.nome);

cout << "Digite o RA do aluno:" << endl;

cin >> alu.ra;

}

& define, a passagem por referência.

Page 19: Programação Estruturada 2 - Aula 03

Estruturas, Uniões e Enumeração

Vetores de Estruturas:

Estruturas

Prof. Thomás da Costa Programação Estruturada II

#include <iostream>

#include <string.h>

using namespace std;

struct aluno

{

char nome[100];

int ra;

};

int main()

{

struct aluno alunos[10];

cout << "Digite o nome do 1º aluno:" << endl;

gets(alunos[0].nome);

cout << "Nome do 1º aluno:"

<< alunos[0].nome << endl;

}

Declarando um vetor de estruturasUtilizamos índices do

vetor para mostrar o valor de um membro da estrutura

Page 20: Programação Estruturada 2 - Aula 03

Estruturas, Uniões e Enumeração

Estruturas dentro de estruturas:

Estruturas

Prof. Thomás da Costa Programação Estruturada II

struct curso

{

char nome_curso[255];

};

struct aluno

{

char nome[100];

int ra;

struct curso cur;

};

int main()

{

...

cout << alu.nome << endl;

cout << alu.cur.nome_curso << endl;

}

Declarando a estrutura curso dentro de aluno

Mostrando o nome_cursoda estrutura cursodeclarada em aluno

Page 21: Programação Estruturada 2 - Aula 03

Estruturas, Uniões e Enumeração

Prof. Thomás da Costa Programação Estruturada II

Page 22: Programação Estruturada 2 - Aula 03

Estruturas, Uniões e Enumeração

Exemplo (Média):

Estruturas

Prof. Thomás da Costa Programação Estruturada II

#include <iostream>

#include <string.h>

using namespace std;

struct aluno

{

char nome[100];

double nota_b1;

double nota_b2;

};

double media(double nota_b1, double

nota_b2);

int main()

{

struct aluno alu;

cout << "Nota B1:" << endl;

cin >> alu.nota_b1;

cout << "Nota B2:" << endl;

cin >> alu.nota_b2;

cout << "Media:" <<

media(alu.nota_b1, alu.nota_b2);

}

double media(double nota_b1, double nota_b2)

{

return (nota_b1 + nota_b2) / 2;

}

Page 23: Programação Estruturada 2 - Aula 03

Estruturas, Uniões e Enumeração

Exemplo (Aumentar Salário):

Estruturas

Prof. Thomás da Costa Programação Estruturada II

#include <iostream>

#include <string.h>

using namespace std;

struct funcionario

{

char nome[255];

char cargo[255];

double salario;

int idade;

};

void aumentar_salario(double &salario,

int percen);

int main()

{

struct funcionario func;

cout << "Digite o salário:" << endl;

cin >> func.salario;

aumentar_salario(func.salario, 20);

cout << "Novo salário:" << func.salario;

}

void aumentar_salario(double &salario,

int percen)

{

double val = (percen / 100.0);

salario = salario * (1 + val);

}

Todo mundo gosta desse exemplo !!!

Page 24: Programação Estruturada 2 - Aula 03

Estruturas, Uniões e Enumeração

O que é:

É um tipo de estrutura, aonde os membros compartilham a mesma posição dememória, criando código portável independente de máquina. Em sua forma geral,as uniões possuem algumas características das estruturas.

Uniões

Prof. Thomás da Costa Programação Estruturada II

Page 25: Programação Estruturada 2 - Aula 03

Estruturas, Uniões e Enumeração

Como funciona:

- As uniões utilizam o mesmo espaço de memória para todas as variáveis- Quando declaradas, o compilador cria um espaço de memória grande o

suficiente para guardar o maior tipo de variável- Como o espaço é compartilhado entre os membros da união, precisamos nos

preocupar com as informações que estão sendo gravadas- As uniões possuem algumas características das estruturas- A forma de acessar os membros e atribuir valores em um união, são iguais aos

mostrados em estruturas

Uniões

Prof. Thomás da Costa Programação Estruturada II

Vamos ver como fazer uma união em C/C++ !!!

Page 26: Programação Estruturada 2 - Aula 03

Estruturas, Uniões e Enumeração

Uniões em C/C++:

Uniões

Prof. Thomás da Costa Programação Estruturada II

Nome da união

Palavra reservada que identifica uma união Membros da união

Chaves definem o início e o fim da união

Termina com ponto e vírgula

union valor

{

int valor_1;

float valor_2;

double valor_3;

char valor_4;

};

Page 27: Programação Estruturada 2 - Aula 03

Estruturas, Uniões e Enumeração

Memória:

A união tem o tamanho do maior membro declarado, diferente da estrutura quepossui o tamanho equivalente a soma de todos os membros. No exemplo abaixo aunião possui 8 bytes.

Uniões

Prof. Thomás da Costa Programação Estruturada II

union valor

{

int valor_1;

float valor_2;

double valor_3;

char valor_4;

};

Membro Bytes

int valor_1 4

float valor_2 4

double valor_3 8

char valor_4 1

TOTAL: 8

Page 28: Programação Estruturada 2 - Aula 03

Estruturas, Uniões e Enumeração

Exemplo:

Uniões

Prof. Thomás da Costa Programação Estruturada II

#include <iostream>

using namespace std;

union valor_union

{

int valor_1;

float valor_2;

double valor_3;

char valor_4;

} valor;

void imprimir();

int main()

{

cin >> valor.valor_1;

imprimir();

cin >> valor.valor_2;

imprimir();

cin >> valor.valor_3;

imprimir();

cin >> valor.valor_4;

imprimir();

}

void imprimir()

{

cout << "Valores:" << endl;

cout << valor.valor_1 << endl;

cout << valor.valor_2 << endl;

cout << valor.valor_3 << endl;

cout << valor.valor_4 << endl;

}

Page 29: Programação Estruturada 2 - Aula 03

Estruturas, Uniões e Enumeração

O que é:

É um tipo de dado, que possui um conjunto de números inteiros constantes, quedefinem os possíveis valores válidos para a enumeração. Muito semelhante a umvetor de inteiro.

Enumeração

Prof. Thomás da Costa Programação Estruturada II

Page 30: Programação Estruturada 2 - Aula 03

Estruturas, Uniões e Enumeração

Vamos pensar:

Quais são as nossas despesas mensais?- Aluguel- Faculdade- Celular- Internet- Conta de Água- Conta de Luz- CarroEssas informações definem uma enumeração chamada despesas. Podemos criarum programa, que efetue o cálculo das despesas mensais, de acordo com o saláriodigitado do usuário.

Essa enumeração define um tipo ou uma faixa de tipos constantes que podemos utilizar no nosso programa.

Enumeração

Prof. Thomás da Costa Programação Estruturada II

Page 31: Programação Estruturada 2 - Aula 03

Estruturas, Uniões e Enumeração

Vamos pensar:

Quais são as cores de uma caixa de lápis de cor?- Azul- Vermelho- Amarelo- Verde- Preto- Branco- LaranjaEssas informações definem uma enumeração chamada cores.

Enumeração

Prof. Thomás da Costa Programação Estruturada II

Vamos ver como fazer uma enumeração em C/C++ !!!

Page 32: Programação Estruturada 2 - Aula 03

Estruturas, Uniões e Enumeração

Enumerações em C/C++:

Enumeração

Prof. Thomás da Costa Programação Estruturada II

Nome do enum

Palavra reservada que identifica um enum

Valores inteiros de um enum

Chaves definem o início e o fim do enum

Termina com ponto e vírgula

enum despesas

{

ALUGUEL,

FACULDADE,

CELULAR,

INTERNET,

CONTA_AGUA,

CONTA_LUZ

};

Page 33: Programação Estruturada 2 - Aula 03

Estruturas, Uniões e Enumeração

Exemplo:

Enumeração

Prof. Thomás da Costa Programação Estruturada II

#include <iostream>

using namespace std;

enum despesas

{

ALUGUEL,

FACULDADE

};

int main()

{

int valor;

cout << "Digite o tipo da despesa:" << endl;

cin >> valor;

switch (valor) {

case ALUGUEL: {

cout << "Aluguel";

break;

}

case FACULDADE: {

cout << "Faculdade";

break;

}

default: {

cout << "Não encontrado";

break;

}

}

}

No enum os valores dos membros começam com 0 e segue a sequência numérica

Page 34: Programação Estruturada 2 - Aula 03

Estruturas, Uniões e Enumeração

Exemplo:

Vamos modificar o programa feito no laboratório para utilizar enumeração.(Exercício 4 do nível básico).

Enumeração

Prof. Thomás da Costa Programação Estruturada II

...

enum opcoes

{

INCLUIR = 1,

LISTAR = 2,

SAIR = 0

};

...

if (opcao == INCLUIR)

{

cout << "Digite o produto:" << endl;

cin >> produto;

incluir_produto(produto);

}

if (opcao == LISTAR)

listar_produto();

if (opcao == SAIR)

break;

system("cls");

...

Podemos atribuir valores fixos para o enum

Page 35: Programação Estruturada 2 - Aula 03

Estruturas, Uniões e Enumeração

Definição:

Quando precisamos definir novos nomes a determinados tipos de dados,utilizamos o operador typedef. Não criamos um novo tipo de variável, somenteum “apelido” para um tipo existente.

Tipos definidos pelo Usuário

Prof. Thomás da Costa Programação Estruturada II

#include <iostream>

#include <strings.h>

using namespace std;

typedef char valores[100];

int main()

{

valores val;

strcpy(val, "Programação Estruturada II");

cout << "Tipo do usuário:" << val;

}

Page 36: Programação Estruturada 2 - Aula 03

Estruturas, Uniões e Enumeração

Obrigado !!!

Prof. Thomás da Costa Programação Estruturada II