Programação Estruturada 2 - Aula 03

541 visualizações

Publicada em

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

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
541
No SlideShare
0
A partir de incorporações
0
Número de incorporações
36
Ações
Compartilhamentos
0
Downloads
25
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Programação Estruturada 2 - Aula 03

  1. 1. Programação Estruturada II Aula 03 – Estruturas, Uniões e Enumeração Prof. Thomás da Costa thomasdacosta@gmail.com Anhanguera – 2015.1
  2. 2. Estruturas, Uniões e Enumeração ESTRUTURAS, UNIÕES E ENUMERAÇÃO Prof. Thomás da Costa Programação Estruturada II
  3. 3. Estruturas, Uniões e Enumeração O que é: É um conjunto de variáveis que representam características de um determinado domínio ou de um tipo. A estrutura pode definir uma entidade e possui grande semelhança com registros de banco de dados. O agrupamento de variáveis pode ser de qualquer tipo, sendo denominado de membro da estrutura. Estruturas Prof. Thomás da Costa Programação Estruturada II
  4. 4. 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 as caracterí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
  5. 5. 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++ !!!
  6. 6. 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
  7. 7. Estruturas, Uniões e Enumeração Memória: Uma estrutura armazena vários tipos de dados e ocupa a memória de acordo com a 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
  8. 8. 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; }
  9. 9. 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:
  10. 10. 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
  11. 11. 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
  12. 12. 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
  13. 13. 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
  14. 14. 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
  15. 15. 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
  16. 16. 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
  17. 17. Estruturas, Uniões e Enumeração Estrutura como parâmetro (Por valor): Podemos passar uma estrutura inteira como parâmetro de uma função. Os parâ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
  18. 18. 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.
  19. 19. 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
  20. 20. 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_curso da estrutura curso declarada em aluno
  21. 21. Estruturas, Uniões e Enumeração Prof. Thomás da Costa Programação Estruturada II
  22. 22. 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; }
  23. 23. 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 !!!
  24. 24. Estruturas, Uniões e Enumeração O que é: É um tipo de estrutura, aonde os membros compartilham a mesma posição de memó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
  25. 25. 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++ !!!
  26. 26. 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; };
  27. 27. Estruturas, Uniões e Enumeração Memória: A união tem o tamanho do maior membro declarado, diferente da estrutura que possui o tamanho equivalente a soma de todos os membros. No exemplo abaixo a uniã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
  28. 28. 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; }
  29. 29. Estruturas, Uniões e Enumeração O que é: É um tipo de dado, que possui um conjunto de números inteiros constantes, que definem os possíveis valores válidos para a enumeração. Muito semelhante a um vetor de inteiro. Enumeração Prof. Thomás da Costa Programação Estruturada II
  30. 30. 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 - Carro Essas informações definem uma enumeração chamada despesas. Podemos criar um programa, que efetue o cálculo das despesas mensais, de acordo com o salário digitado 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
  31. 31. 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 - Laranja Essas 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++ !!!
  32. 32. 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 };
  33. 33. 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
  34. 34. 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
  35. 35. 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, somente um “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; }
  36. 36. Estruturas, Uniões e Enumeração Obrigado !!! Prof. Thomás da Costa Programação Estruturada II

×