{joseana, rangel}@dsc.ufcg.edu.br
DSC/CCT/UFCG
Prof.: José Eustáquio Rangel de Queiroz
[email protected]
[email protected]
Carga Horária: 60 horas
DSC/CCT/UFCG
{joseana, rangel}@dsc.ufcg.edu.br



Tópicos
Structs
Unions
Enums
2
Structs I
DSC/CCT/UFCG

Arrays  Exigência de todos
elementos do mesmo tipo de dados

Fatos
os
 Necessidade
de
agrupamento
de
informações envolvendo diferentes tipos
de dados
{joseana, rangel}@dsc.ufcg.edu.br

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
3
Structs II
DSC/CCT/UFCG

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)
{joseana, rangel}@dsc.ufcg.edu.br

Uso de structs
4
Structs III
DSC/CCT/UFCG

Struct
 Tipo derivado de dados composto de
membros associados a tipos de dados
elementares ou derivados
 Struct Única
{joseana, rangel}@dsc.ufcg.edu.br

Armazenamento dos dados associados a
um objeto
 Array de structs

Armazenamento dos dados associados a
vários objetos
5
Structs IV
DSC/CCT/UFCG

Declaração de Structs
{joseana, rangel}@dsc.ufcg.edu.br
Sem Alocação de Espaço
struct Exemplo01
{
char nome[40];
char espec[80];
int quant;
};
Com Alocação de Espaço
struct Exemplo01
{
char nome[40];
char espec[80];
int quant;
} Almoxarifado;
6
Structs IV
DSC/CCT/UFCG

Tipos de Dados definidos pelo Usuário
(Typedef)
 Typedef

Facilidade de criação de sinônimos para
nomes de tipos de dados predefinidos
{joseana, rangel}@dsc.ufcg.edu.br
typedef int Quantidade;
(Quantidade torna-se sinônimo do tipo
int)
Quantidade q1, q2;
Quantidade quant[20];
7
Structs V
DSC/CCT/UFCG

Typedef e Struct
 Uso combinado  Declaração de um
{joseana, rangel}@dsc.ufcg.edu.br
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 */
8
Structs VI
DSC/CCT/UFCG

Acesso a membros de uma Struct
 Uso do operador ponto (.)
Estrutura.num_item;
 Uso do operador seta (->)
{joseana, rangel}@dsc.ufcg.edu.br
struct Estrutura *Apont = &num_item;
Apont -> num_item;
(Equivalente a (*Apont).num_item;)
9
DSC/CCT/UFCG
{joseana, rangel}@dsc.ufcg.edu.br

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;
};
10
Structs VIII
DSC/CCT/UFCG

Exemplo 01 (2/2)
{joseana, rangel}@dsc.ufcg.edu.br
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;
11
Unions I
DSC/CCT/UFCG

Union I
 Declaração de um tipo de união e/ou de
uma variável de um tipo de união
{joseana, rangel}@dsc.ufcg.edu.br
 Sintaxe
union [etiqueta]
{
lista_de_membros
} [declaradores];
12
Unions II
DSC/CCT/UFCG

Union II
{joseana, rangel}@dsc.ufcg.edu.br
 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
13
Unions III
DSC/CCT/UFCG

Exemplo 02
{joseana, rangel}@dsc.ufcg.edu.br
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 */
14
DSC/CCT/UFCG

Unions IV
Exemplo 03
{joseana, rangel}@dsc.ufcg.edu.br
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 */
15
Unions V
DSC/CCT/UFCG

Exemplo 04 - Combinação de union e
struct (1/3)
{joseana, rangel}@dsc.ufcg.edu.br
union situacao
{
int col;
char grau[4];
};
struct selecao
{
long inscr;
float nota;
union situacao nivel;
};
struct identidade
{
char nome[40];
struct selecao candidato;
};
16
DSC/CCT/UFCG

Unions VI
Exemplo 04 - Combinação de union e
struct (2/3)
{joseana, rangel}@dsc.ufcg.edu.br
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 */
17
DSC/CCT/UFCG
{joseana, rangel}@dsc.ufcg.edu.br

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 */
18
Enums I
DSC/CCT/UFCG

Enumeração I
 Tipo de dado definido pelo usuário a partir
da palavra-chave enum
{joseana, rangel}@dsc.ufcg.edu.br
 Sintaxe
enum [etiqueta]
{
lista_de_enumeradores
} [declarador];
19
Enums II
DSC/CCT/UFCG

Enumeração II
 Etiqueta  Uso indireto
 Lista_de_enumeradores
 Constantes
simbólicas

Valores inteiros de 0 a n

Exemplo 05
{joseana, rangel}@dsc.ufcg.edu.br
enum dias {Segunda, Terca, Quarta};

Criação de 3 constantes

Segunda é associada ao valor 0

Terca é associada a 1

Quarta é associada a 2
20
Enums III
DSC/CCT/UFCG

Enumeração III
{joseana, rangel}@dsc.ufcg.edu.br
 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
21
Enums IV
DSC/CCT/UFCG

Enumeração IV
{joseana, rangel}@dsc.ufcg.edu.br
 Lista_de_enumeradores

Enumeradores não precisam
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

estar
Os resultados não são definidos
22
DSC/CCT/UFCG
{joseana, rangel}@dsc.ufcg.edu.br

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]);
}
23
Structs em C/ C++ I
{joseana, rangel}@dsc.ufcg.edu.br
DSC/CCT/UFCG
C
C++
Uso
explícito
da
palavra-chave
struct
para
a
declaração/
definição da estrutura
Similaridade com uma
classe
(class)
com
membros
públicos
(public) por definição
Uso desnecessário da
palavra-chave
struct
após
a
declaração/
definição do tipo
24
DSC/CCT/UFCG

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
{joseana, rangel}@dsc.ufcg.edu.br
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;
25
DSC/CCT/UFCG

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
{joseana, rangel}@dsc.ufcg.edu.br
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
26
Unions em C/ C++ I
{joseana, rangel}@dsc.ufcg.edu.br
DSC/CCT/UFCG
C
C++
Uso
explícito
da
palavra-chave
union
para
a
declaração/
definição da união
Uso desnecessário da
palavra-chave
union
após
a
declaração/
definição do tipo
27
Unions em C/ C++ II
DSC/CCT/UFCG

Exemplo 09
union JUNCAO
{
int a, b, c;
float d, e, f;
double g, h, i;
};
{joseana, rangel}@dsc.ufcg.edu.br
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
28
Enums em C/ C++ I
{joseana, rangel}@dsc.ufcg.edu.br
DSC/CCT/UFCG
C
C++
Uso
explícito
da
palavra-chave
enum
para a declaração da
união
Uso apenas da etiqueta
(tag) da enumeração
29
DSC/CCT/UFCG

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
{joseana, rangel}@dsc.ufcg.edu.br
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
30
DSC/CCT/UFCG
José Eustáquio Rangel de Queiroz
[email protected], [email protected]
{joseana, rangel}@dsc.ufcg.edu.br
UNIVERSIDADE FEDERAL DE CAMPINA GRANDE
CENTRO DE CIÊNCIAS E TECNOLOGIA
DEPARTAMENTO DE SISTEMAS E
COMPUTAÇÃO
Download

Notas de Aula 01B - Revisão - Computação UFCG