Buscar

Enum_Typedef_Structs

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 3, do total de 23 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 6, do total de 23 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 9, do total de 23 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Prévia do material em texto

Luís F. Faina / Paulo R. Coelho - 2011 Pg. 1
Cap. 11 – Enum, Typedef e Structs
11.1 – Introdução 
11.2 – Tipos de Dados: Enum e Typedef
11.3 – Structs ou Estrutura de Dados
11.4 – Exercícios Propostos
Luís F. Faina / Paulo R. Coelho - 2011 Pg. 2
Referências Bibliográficas: 
● MOKARZEL, F. e SOMA, N. - Introdução à Ciência de 
Computação, Editora Campus / Elsevier, 2008
● CAPRON, H.L. e JOHNSON, J. A. Introdução à Informática , 
Pearson Prentice Hall, 2006 - 8a. Edição.
● ASCENCIO, Ana F.G. & CAMPOS, Editene A.V. de. 
Fundamentos da Programação de Computadores. Pearson 
Prentice Hall, São Paulo, 2006 - 3a. Edição.
● SCHILDT, H. – C, Completo e Total - , Pearson Prentice Hall, 
São Paulo, 2006 - 3a. Edição.
Luís F. Faina / Paulo R. Coelho - 2011 Pg. 3
11.1 - Introdução
● Até agora, os valores manipulados pelos programas foram 
nrs. inteiros, nrs. reais, caracteres, vetores e matrizes.
● … além disso, usando a diretiva “#define”, constantes 
simbólicas podem ser definidas.
● … no entanto, assim como em outras linguagens e inclusive 
na Ling. C, é possível trabalhar com tipos de dados 
diferentes daqueles apresentados até agora …. 
● … esses tipos são conhecidos como “tipos enumerativos” e 
“structs” ou “estruturas” homogêneas ou heterogêneas.
Luís F. Faina / Paulo R. Coelho - 2011 Pg. 4
11.2 – Tipos de Dados: Enum e Typedef
● tipo enumerativo - consiste em declarar um novo tipo de variável escalar bem 
como os valores a serem atribuídos à variável desse tipo.
● … para declarar tipos enumerativos em C, utilizamos a palavra reservada “enum”, 
p.ex.: enum diasemana {dom, seg, ter, qua, qui, sex, sab};
● … definido o tipo, varáveis podem ser declaradas como sendo desse tipo. 
1 enum diasemana {dom, seg, ter, qua, qui, sex, sab};
2 enum diasemana hoje, ontem, amanha;
3 … … 
4 if( ontem == seg ) {
5 hoje = ter;
6 amanha = qua;
7 }
Luís F. Faina / Paulo R. Coelho - 2011 Pg. 5
… 11.2 - Tipos de Dados: Enum e Typedef
● … os identificadores usados para os valores da declaração de um tipo 
enumerativo são constantes inteiras, ou seja, {1, 2, 3, 4, …, n}
● … a palavra reservada “enum” e obrigatória em tais declarações, mas pode-se 
dispensá-la mediante declarações de tipo, usando a diretiva “typedef”, p.ex.:
1 typedef enum diasemana diasem;
2 enum diasemana {dom, seg, ter, qua, qui, sex, sab};
3 diasem hoje, ontem, amanha;
4 if (ontem == 1) { // se “ontem” == “seg”
5 hoje = ter;
6 amanha = qua;
7 }
Luís F. Faina / Paulo R. Coelho - 2011 Pg. 6
… 11.2 - Tipos de Dados: Enum e Typedef
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4
5 typedef enum diasemana diasem;
6 enum diasemana {dom, seg, ter, qua, qui, sex, sab};
7
8 int main( int argc, char* argv[ ] ) {
9 diasem hj, ontem, amanha;
10 int i; char hojeStr[4];
11 char nomedia[7][4] = {"dom","seg","ter","qua","qui","sex","sab"};
12 printf("entre dia de hoje: "); scanf("%s", hojeStr);
Luís F. Faina / Paulo R. Coelho - 2011 Pg. 7
… 11.2 - Tipos de Dados: Enum e Typedef
13 hj = -1;
14 for( i = 0; i <=6; i++ ) // calculo do dia de hoje
15 if( strcmp( hojeStr, nomedia[i] ) == 0 )
16 hj = i;
17 if( hj != -1 ) {
18 ontem = (hj + 6) % 7;
19 amanha = (hj + 1) % 7;
20 printf("\nHoje eh: %s; Ontem foi: %s;", nomedia[hj], nomedia[ontem] );
21 printf(" Amanha serah: %s.\n", nomedia[amanha] );
22 } else {
23 printf("\nDia da Semana Invalido!\n");
24 }
Luís F. Faina / Paulo R. Coelho - 2011 Pg. 8
… 11.2 - Tipos de Dados: Enum e Typedef
17 if( hj != -1 ) {
18 ontem = (hj + 6) % 7;
19 amanha = (hj + 1) % 7;
20 printf("\nHoje eh: %s; Ontem foi: %s;", nomedia[hj], nomedia[ontem] );
21 printf(" Amanha serah: %s.\n", nomedia[amanha] );
22 } else {
23 printf("\nDia da Semana Invalido!\n");
24 }
25 return 0;
26}
27
28
Luís F. Faina / Paulo R. Coelho - 2011 Pg. 9
11.3 – Structs ou Estruturas de Dados
● Em muitas aplicações é útil a capacidade de se tratar todas 
as informações de uma entidade (p.ex., nome, endereço, 
telefone, sexo, estado civil, cargo, setor, etc.) como sendo 
uma unica unidade de armazenamento, ou seja, uma unica 
variável.
● … além disso, pode ser importante a capacidade de tratar 
cada informação em separado.
● … por outro lado, algumas dessas informações ainda 
englobam outros conjuntos de informações.
Luís F. Faina / Paulo R. Coelho - 2011 Pg. 10
… 11.3 – Structs ou Estruturas de Dados
● Para o caso de informações compostas, p.ex., “endereço 
completo”, ou seja, “logradouro”, “número”, “complemento”, 
“cidade”, “estado”, “país” … ...
● … observa-se que, diferentemente de variáveis indexadas 
(vetores e matrizes), não há homogeneidade quanto aos 
tipos de dados que compõem a “informação composta”;
● … por isso, é necessário mecanismos que tratem tanto dados 
homogêneios como dados heterogêneas.
Luís F. Faina / Paulo R. Coelho - 2011 Pg. 11
… 11.3 – Structs ou Estruturas de Dados
● Na linguagem C, a declaracao struct e destinada a declaração 
de variáveis não-homogêneas; 
● … as informações a serem armazenadas numa variável desse 
tipo são especificadas entre as chaves, dentro das quais são 
declarados os campos da estrutura, p.ex.:
typedef struct endereco end;
struct endereco {
 char logradouro[15];
 int numero;
 char complemento[6], bairro[10];
 char cidade[10], estado[3], pais[10];
};
end end1, end2, end3;
Luís F. Faina / Paulo R. Coelho - 2011 Pg. 12
… 11.3 – Structs ou Estruturas de Dados
● Para acessar um dos campos de uma estrutura, usa-se o operador ’.’ ;
● … diferentemente de variáveis indexadas, variáveis do tipo estrutura 
podem receber o valor de outra do mesmo tipo.
typedef struct endereco end;
struct endereco {
 char logradouro[30];
 int numero;
 char bairro[10];
};
end loja = {"R. dos Ipes", 1200, "Centro"}, minhaCasa, lojaCopia;
strcpy(minhaCasa.logradouro, "Av. Tiradentes");
minhaCasa.numero = 999;
strcpy(minhaCasa.bairro, "Centro");
lojaCopia = loja;
Luís F. Faina / Paulo R. Coelho - 2011 Pg. 13
… 11.3 – Structs ou Estruturas de Dados
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 typedef struct compl complexo;
5 struct compl {
6 float real, imag;
7 };
8
9 int main( int argc, char* argv[ ] ) {
10 int i, j;
11 complexo A[3][3] = { { {1.0, -0.1}, {2.0, -0.2}, {2.0, -0.2} }, 
12 { {4.0, -3.4}, {5.0, 4.1}, {6.0, -2.6} } };
Luís F. Faina / Paulo R. Coelho - 2011 Pg. 14
… 11.3 – Structs ou Estruturas de Dados
13 
14 for( i= 0; i < 3; i++ ) {
15 for( j = 0; j < 3; j++ ) {
16 printf("(%5.1f) + i(%5.1f)", A[i][j].real, A[i][j],imag);
17 }
18 printf("\n");
19 }
20
21 return 0;
22}
23
24
Luís F. Faina / Paulo R. Coelho - 2011 Pg. 15
11.4 – Exercícios Propostos
● Faça um programa em Ling. C para armazenar informações 
de 15 pessoas em m vetor de variáveis do tipo estrutura 
contendo as seguintes informações: 
● nome: string de tamanho 30; 
● sexo: tipo enumerativo - [masc, fem]; 
● idade: valor inteiro; 
● estado civil: tipo enumerativo - [solteiro, casado, separado, vivo].
● salario: valor real.
● Em seguida, imprima o número de homens, número de 
mulheres e informações da pessoa com maior salário.
Luís F. Faina / Paulo R. Coelho - 2011 Pg. 16
… 11.4 – Exercícios Propostos
1 #include <stdio.h>
2 #include <string.h>
3
4 typedef enum sex tSexo;
5 enum sex {masc, fem};
6
7 typedef enum estCiv estado;
8 enum estCiv {solteiro, casado, separado, viuvo};
9
10typedef struct pes pessoa;
11 struct pes {
12 char nome[30];
Luís F. Faina / Paulo R. Coelho - 2011 Pg. 17… 11.4 – Exercícios Propostos
13 tSexo sexo;
14 int idade;
15 estado estadoCivil;
16 float salario;
17};
18
19 int main( int argc, char* argv[ ] ) {
20 pessoa P[15], maisRica;
21 int i, nH, nM;
22 float maiorSal = 0;
23 char sexoString[2][5] = {"masc", "fem"};
24
Luís F. Faina / Paulo R. Coelho - 2011 Pg. 18
… 11.4 – Exercícios Propostos
25 for( i = 0; i < 15; i++ ) {
26 printf("\nNome: "); scanf("%s", P[i].nome);
27 printf("Sexo (0: Masc, 1: Fem): "); scanf("%d", &P[i].sexo);
28 printf("Idade: "); scanf("%d", &P[i].idade);
29 printf("Estado Civil (0: solteiro, 1: casado, 2: separado, 3: viuvo): ");
30 scanf("%d", &P[i].estadoCivil);
31 printf("Salario: "); scanf("%f", &P[i].salario);
32 if( P[i].sexo == masc) nH++;
33 if( P[i].sexo == fem) nM++;
34 if (P[i].salario > maiorSal) {
35 maiorSal = P[i].salario; maisRica = P[i]; }
36 }
Luís F. Faina / Paulo R. Coelho - 2011 Pg. 19
… 11.4 – Exercícios Propostos
37 printf("\nNumero de Homens: %d", nH);
38 printf("\nNumero de Mulheres: %d", nM);
39 printf("\n\tPessoa mais Rica: %s", maisRica.nome);
40 printf("\n\tSalario: %8.2f", maisRica.salario);
41 printf("\n\tSexo: %s\n",sexoString[maisRica.sexo]);
42
43 return 0;
44}
45
46
47
48
Luís F. Faina / Paulo R. Coelho - 2011 Pg. 20
11.4 – Exercícios Propostos
● Faca um programa em Ling. C que leia o nome, duas notas e 
número de faltas de 10 alunos. As informações desses alunos 
devem ser armazenadas em um vetor de variáveis do tipo 
estruturado “aluno” com as informações:
● nome: string de tamanho 30;
● media: numero real resultado da média das duas notas lidas;´
● situacao: caractere representando situacao, isto e, ’A’ (Aprovado), se 
media maior ou igual a 6 e número de faltas menor que 10, e ’R’ 
(Reprovado), caso contrário.
● faltas: número de faltas (valor inteiro).
● Por fim, devem ser impressas as informações de cada aluno.
Luís F. Faina / Paulo R. Coelho - 2011 Pg. 21
… 11.4 – Exercícios Propostos
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 typedef struct aluno aluno;
5 struct aluno {
6 char nome[30];
7 float media;
8 char situacao;
9 int faltas;
10};
11
12 int main( int argc, char* argv[ ] ) {
Luís F. Faina / Paulo R. Coelho - 2011 Pg. 22
… 11.4 – Exercícios Propostos
13 int i; 
14 aluno A[10];
15 float nota1, nota2;
16 for( i = 0; i < 10; i++ ) {
17 printf("\nNome do Aluno: "); scanf("%s", A[i].nome);
18 printf("Nota #1: "); scanf("%f", &nota1);
19 printf("Nota #2: "); scanf("%f", &nota2);
20 printf("Numero de Faltas: "); scanf("%d", &A[i].faltas);
21 A[i].media = (nota1 + nota2) / 2;
22 if (A[i].media >= 6.0 && A[i].faltas < 10 ) A[i].situacao = ’A’;
23 else A[i].situacao = ’R’;
24 }
Luís F. Faina / Paulo R. Coelho - 2011 Pg. 23
… 11.4 – Exercícios Propostos
25 printf("\n\nInformacoes dos Alunos:\n");
26 for( i = 0; i < 10; i++ ) {
27 printf("\tNome: %s\n", A[i].nome);
28 printf("\tMedia: %3.1f\n", A[i].media);
29 printf("\tFaltas: %3d\n", A[i].faltas);
30 printf("\tSituacao: %c\n\n", A[i].situacao);
31 }
32
33 return 0;
34}
35
36
	Slide 1
	Slide 2
	Slide 3
	Slide 4
	Slide 5
	Slide 6
	Slide 7
	Slide 8
	Slide 9
	Slide 10
	Slide 11
	Slide 12
	Slide 13
	Slide 14
	Slide 15
	Slide 16
	Slide 17
	Slide 18
	Slide 19
	Slide 20
	Slide 21
	Slide 22
	Slide 23

Outros materiais