1 / 31

Prof.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.br rangeldequeiroz@gmail

Structs, Unions e. Enums em C e C++. Técnicas de Programação. Prof.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.edu.br rangeldequeiroz@gmail.com. Carga Horária: 60 horas. Tópicos. Structs Unions Enums. Structs I.

jacie
Download Presentation

Prof.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.br rangeldequeiroz@gmail

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Structs, Unions e Enums em C e C++ Técnicas de Programação Prof.:José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.edu.br rangeldequeiroz@gmail.com Carga Horária:60 horas

  2. Tópicos • Structs • Unions • Enums

  3. Structs I • Arrays Exigência de todos os elementos do mesmo tipo de dados • Fatos • Necessidade de agrupamento de informações envolvendo diferentes tipos de dados • Exemplo  Lista de materiais de um almoxarifado • Inclusão do nome, especificação, quantidade disponível e datas de entrada e de saída de cada item

  4. Structs II • Fatos • Possibilidade de estruturação de dados em C and C++ de modo a armazenar combinações de caracteres, inteiros, variáveis de ponto flutuante and e dados do tipo enumerado (enum) • Uso de structs

  5. Structs III • Struct • Tipo derivado de dados composto de membros associados a tipos de dados elementares ou derivados • Struct Única • Armazenamento dos dados associados a um objeto • Array de structs • Armazenamento dos dados associados a vários objetos 

  6. Structs IV • Declaração de Structs

  7. Structs IV • Tipos de Dados definidos pelo Usuário (Typedef) • Typedef • Facilidade de criação de sinônimos para nomes de tipos de dados predefinidos typedef int Quantidade; (Quantidadetorna-se sinônimo do tipoint) Quantidade q1, q2; Quantidade quant[20];

  8. Structs V • Typedef e Struct • Uso combinado  Declaração de um sinônimo (ou codinome) para uma struct typedef struct /* Definicao de uma estrutura */ { int num_item; char nome_item[30]; char espec_item[60] ; } Estrutura;/* Codinome da struct */ Estrutura est1; /* Criação de uma variavel do tipo Estrutura */

  9. Structs VI • Acesso a membros de uma Struct • Uso do operador ponto (.) Estrutura.num_item; • Uso do operador seta (->) struct Estrutura *Apont = &num_item; Apont -> num_item; (Equivalente a (*Apont).num_item;)  

  10. Structs VII • Exemplo 01 (1/2) #include <stdio.h> struct TecProg/* Criacao de uma struct sem alocacao de espaco */ { long mat; float nota; } ; struct identidade /* Criacao de uma segunda struct que inclui a primeira */ { char nome[40]; struct TecProg aluno; } ;

  11. Structs VIII • Exemplo 01 (2/2) void main ( ) { struct identidade aluno1 = {“Alberto Pontes"}, *apont = &aluno1 ; aluno1.aluno.mat = 20411032; aluno1.aluno.nota = 7.8 ; printf ("%s %ld %f\n", aluno1.nome, aluno1.TecProg.id, aluno1.TecProg.nota) ; printf ("%s %ld %f\n", apont->nome, apont->aluno.id, apont->TecProg.nota) ; return 0; }

  12. Unions I • Union I • Declaração de um tipo de união e/ou de uma variável de um tipo de união • Sintaxe union [etiqueta] { lista_de_membros } [declaradores];

  13. Unions II • Union II • Definição do tipo de dados pelo usuário • Possibilidade de armazenamento de valores de diferentes tipos em diferentes instantes do processamento • Similaridade com uma struct, exceto pelo fato de todos os membros ocuparem a mesma locação de memória • Possibilidade de contenção de apenas um dos membros de cada vez • Tamanho  Função do maior membro

  14. Unions III • Exemplo 02 union Exemplo02 /* Declaracao de um tipo union */ { char caractere; int inteiro; long int_longo; float pto_flut; double dupla_prec; } TipoUniao; /* Declaracao opcional da variavel union */

  15. Unions IV • Exemplo 03 typedef union{ int intval; float realval; } inteiro_ou_real; inteiro_ou_real num; num.intval = 3; /* x como variavel int */ num.realval = 3.1416; /* x como variavel float sobrescreve o valor int */

  16. Unions V • Exemplo 04 - Combinação de union e struct (1/3) union situacao { int col; char grau[4]; }; struct selecao { long inscr; float nota; union situacao nivel; }; struct identidade { char nome[40]; struct selecao candidato; };

  17. Unions VI • Exemplo 04 - Combinação de union e struct (2/3) int main( ) { struct identidade cand2 = {“Álvaro Guedes"}, *apont = &cand2 ; cand2. candidato.inscr = 20411038; cand2. candidato.nota = 5.7; printf (“Digite status do candidato (A ou R)\n"); scanf("%c", &A_R); if(A_R == ‘A') { printf(“Digite colocacao (inteiro de 1 a 40)\n"); scanf("%d", &cand2.candidato.nivel.col); printf("%s eh nivel %d\n”, cand2.nome, cand2.candidato.nivel.col); } /* Fim do if */

  18. Unions VII • Exemplo 04 - Combinação de union e struct (3/3) else { printf (“Digite o grau (Ms ou Gr\n"); scanf ("%s", &cand2.candidato.nivel.grau); printf ("%s eh um %s candidato\n”, cand2.nome , cand2.candidato.nivel.grau); } /* Fim do else */ printf ("%s %ld %f\n” , cand2.nome , cand2.candidato.id, cand2.candidato.inscr); printf("%s%ld %f\n” , apont->nome , apont->candidato.id , apont->candidato.inscr); } /* Fim do programa */

  19. Enums I • Enumeração I • Tipo de dado definido pelo usuário a partir da palavra-chaveenum • Sintaxe enum [etiqueta] { lista_de_enumeradores } [declarador];

  20. Enums II • Enumeração II • Etiqueta Uso indireto • Lista_de_enumeradores Constantes simbólicas • Valores inteiros de 0 a n • Exemplo 05 enum dias {Segunda, Terca, Quarta}; • Criação de 3 constantes • Segunda é associada ao valor 0 • Terca é associada a 1 • Quarta é associada a 2

  21. Enums III • Enumeração III • Lista_de_enumeradores • Primeiro enumerador  Atribuição do valor 0 • Cada enumerador sucessivo  Atribuição de um valor maior do que o de seu predecessor • Possibilidade de especificação explícita de um valor para um enumerador particular

  22. Enums IV • Enumeração IV • Lista_de_enumeradores • Enumeradores não precisam estar associados a valores únicos • O nome de cada enumerador deve ser único no escopo de definição da enum • A conversão de um inteiro para um enumerador requer um cast explícito • Os resultados não são definidos

  23. Enums V • Exemplo 06 - Uso de tipos de dados enumerados para acesso aos itens de um array #include <stdio.h> int main( ) { int Novembro[5][7]={{0,0,1,2,3,4,5},{6,7,8,9,10,11,12}, {13,14,15,16,17,18,19},{20,21,22,23,24,25,26}, {27,28,29,30,0,0,0}}; enum dias {Domingo, Segunda, Terca, Quarta, Quinta, Sexta, Sabado} enum semana {semana01, semana02, semana03, semana04, semana05}; printf (“Quinta da primeira semana de Novembro eh dia %d\n", Novembro [semana01][Quinta]); }

  24. Structs em C/ C++ I

  25. Structs em C/ C++ II • Exemplo 07 struct INDIVIDUO // Declaracao do tipo struct INDIVIDUO { int idade;// Declaracao dos tipos dos membros char nome[40]; float altura; float peso; } membro_da_familia; // Definicao da variavel do tipo INDIVIDUO struct INDIVIDUO pai; // Declaracao da estrutura em C INDIVIDUO mae, tio, prima; // Declaracao da estrutura em C++ mae.altura = 1.69; // Atribuicao de valores aos membros pai.idade = 76; prima.nome = {“Julia Lemos de Andrade”}; tio.peso = 87;

  26. Structs em C/ C++ III • Exemplo 08 (Inicialização) struct PONTO // Declaracao da estrutura PONTO { int x; // Definicao de membros da estrutura PONTO int y; } alvo = {20, 40}; // Atribuicao dos valores x = 20, // y = 40 ah variavel alvo struct PONTO ponto1; // Declaracao de variavel do tipo PONTO struct FOCO // Declaracao do campo de bits FOCO { unsigned caractere: 8; // 00000000 ???????? unsigned foreground: 3; // 00000??? 00000000 unsigned intensidade: 1; // 0000?000 00000000 unsigned background: 3; // 0???0000 00000000 unsigned pisca: 1; // ?0000000 00000000 } tela[25][80]; // Array de campos de bits

  27. Unions em C/ C++ I

  28. Unions em C/ C++ II • Exemplo 09 union JUNCAO { int a, b, c; float d, e, f; double g, h, i; }; union JUNCAO v1; // Declaracao da estrutura em C JUNCAO v2; // Declaracao da estrutura em C++ v1.b = 5; // Uso da variavel como int v2.d = 5.13; // Uso da variavel como float v1.h = 7.256; // Uso da variavel como double

  29. Enums em C/ C++ I

  30. Enums em C/ C++ II • Exemplo 10 enum Dias // Declaracao do tipo enum Dias { Sabado, // Sabado = 0 (por definicao) Domingo = 0, // Domingo = 0 (por atribuicao do usuario) Segunda, // Segunda = 1 Terca, // Terca = 2 Quarta, // Quarta = 3 Quinta, // Quinta = 4 Sexta // Sexta = 5 } Hoje; // Criacao da variavel Hoje do tipo Dias int Sexta; // Definicao incorreta (redefinicao de Sexta) enum Dias Ontem; // Correta em C e C++ Dias Amanha; // Correta apenas em C++ Ontem = Quinta; int d = Quinta; // Correta (atribuicao de 2 a d) Ontem = 0; // Incorreta (sem conversao de tipo) Ontem = (Dias)0; // Correta, mas com resultados indefinidos

  31. José Eustáquio Rangel de Queiroz UNIVERSIDADE FEDERAL DE CAMPINA GRANDE CENTRO DE CIÊNCIAS E TECNOLOGIA DEPARTAMENTO DE SISTEMAS E COMPUTAÇÃO rangel@dsc.ufcg.edu.br, rangeldequeiroz@gmail.com

More Related