tipos de dados compostos - núcleo de computação...

23
Tipos de Dados Compostos Estruturas, Enumerações, Uniões

Upload: dinhliem

Post on 11-Feb-2019

214 views

Category:

Documents


0 download

TRANSCRIPT

Tipos de Dados Compostos Estruturas, Enumerações, Uniões

Tipo de Dados •  Em aulas anteriores dissemos que os TIPOS de

DADO podem ser classificados em: •  básicos ou primitivos •  compostos ou construídos

2

Tipos Compostos •  Arranjos (matrizes e vetores) •  Ponteiros •  Definidos pelo usuário

•  Estruturas •  Uniões •  Enumerações •  Campos de bits •  typedefs

3

Estruturas

4

Estruturas

5

Estruturas

6

Estruturas

7

Exemplos - Estrutura 1.  struct ponto { /*declaração de estrutura*/ 2.  int coord_x; /*coordenadas*/ 3.  int coord_y; 4.  };

5.  int main() { 6.  struct ponto P; /*P é uma variável do tipo

Ponto */ 7.  p.coord_x = 1; /*atribuição de valores*/ 8.  p.coord_y = 5; 9.  }

8

Exemplo - Estrutura 1.  struct ponto { /*declaração de estrutura*/ 2.  int coord_x; /*coordenadas*/ 3.  int coord_y; 4.  };

5.  struct linha { /*definição de uma linha */ 6.  struct ponto p0; /*ponto inicial da linha */ 7.  struct ponto pn; /*ponto final da linha*/ 8.  }; 9.  ...... 10.  struct linha L1; /*exemplo de atribuição*/ 11.  L1.p0.coord_x = 5; 12.  L1.p0.coord_y = 6; 9

Uniões

10

União Exemplo 1.  #define  ENTER    13  2.  #define  ESC        27  3.  #define  RTARR    77  4.  #define  LTARR    75  5.  #define  UPARR    72  6.  #define  DWARR    80  

7.  union    u_type{          8.             int  i;  9.             char  ch;  10.  }  ich;  

11.  void  loopMenu()  {  

12.    while  (  1  )  {  13.       14.                 ich.i  =  getch();  15.                 switch  (  ich.ch  )  {  16.                               case  ENTER:    17.    ....   11

Enumerações •  Uma enumeração é uma extensão da

linguagem C acrescentada pelo padrão ANSI. •  Uma enumeração é uma declaração de um

novo tipo de dados que consiste em um conjunto de constantes inteiras que especficam todos os valores legais que uma variável desse tipo pode ter.

•  Enumerações são definidas de forma semelhante a estruturas; no entanto, utiliza-se a palavra-chave enum para assinalar o início de um tipo de enumeração.

12

Forma Geral enum identificador { Simbolo_1,

Simbolo_2, ... Simbolo_n } var_1, var_2, ..., var_n;

13

Valores •  Em uma enumaração cada Simbolo_i representa

um valor inteiro. •  Cada símbolo recebe um valor maior em uma

unidade do precedente. •  Por default, o valor do primeiro símbolo é 0. •  No entanto, você pode especificar o valor de um ou

mais símbolos usando um inicializador. •  O símbolos que aparecem após os inicializadores

recebem valores maiores que o da inicialização precedente.

14

Enumeração - Exemplos 1.  enum  dt_wday  {    2.    Sunday      ,  3.    Monday      ,  4.    Tuesday    ,  5.    Wednsday  ,  6.    Thursday  ,  7.    Friday      ,  8.    Saturday    9.  };  

15

Enumeração - Exemplos 1.  enum  dt_month{  2.    January    =  1  ,  3.    February    ,  4.    Mars            ,  5.    April          ,  6.    May              ,  7.    June            ,  8.    July            ,  9.    August        ,  10.    September  ,  11.    October      ,  12.    November    ,  13.    December  14.  };  

16

Enumeração - Exemplos 1.  #include  <stdio.h>  

2.  enum  coin  {  3.         penny,  4.         nickel,  5.         dime,  6.         quarter=100,  7.         hal_dollar,  8.         dollar  9.  };  

10.  int  main  ()  {  11.         enum  coin  money;  12.         money  =  dollar;  

13.         switch  (money)  {  14.           case  penny:  prin`  ("penny");  break;  15.           case  nickel:  prin`  ("nickel");  break;  16.           case  dollar:  prin`  ("dollar");  break;  17.         }  18.  }  

17

Campos de Bits

18

Campos de Bits

19

Campos de Bits - Exemplo 1.  struct  {    

unsigned  mday  :  5;    unsigned  month:  4;    unsigned  year  :22;    unsigned  isBCE:  1;    }  bi`;  

20

Typedef

21

Exemplo – menu.h 1.  #ifndef  MENU_H  2.  #define  MENU_H  

3.  typedef  struct  item  {  4.    char  *  str;  5.    void(*  fun)(void);  6.    struct  item  *  sub;  7.    struct  item  *  sup;  8.    struct  item  *  nxt;  9.    struct  item  *  prv;  10.  }  Item;  

11.  void  addMenuItem  (const  char  *  str,  void(*  fun)(void));  12.  void  addMenuSubItem  (const  char  *  str_i,const  char  *  str_si,  void(*  fun)(void));  

13.  void  loopMenu(void);  

14.  #endif   22

Exemplo – menu.c 1.  /**  menu.c  */  

2.  #include  <stdlib.h>  3.  #include  <stdio.h>  4.  #include  <conio.h>  5.  #include  "buffer.h"  6.  #include  "menu.h"  

7.  Item  *  menu;  8.  Item  *  menu_sel;  9.  int  sub_items_visible;  

10.  ...   23