Baixe o app para aproveitar ainda mais
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", ¬a1); 19 printf("Nota #2: "); scanf("%f", ¬a2); 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
Compartilhar