Capítulo VII – Tipos Enumerativos e Estruturas 7.1 – Tipos enumerativos 7.2 – A necessidade de estruturas 7.3 – Manipulação dos campos de uma estrutura.

Slides:



Advertisements
Apresentações semelhantes
Funções em C.
Advertisements

Java: Comandos Básicos
1 Estruturas de Controle Márcia J. N. Rodrigues Lucena Especialização em Técnicas e Ferramentas de Apoio à Decisão Departamento.
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Capítulo 10 Arrays. 2Capítulo 10 – Arrays Arrays Introdução Tipo do array Tamanho do array Preenchendo o array Varrendo um array Array com 2 dimensões.
PROGRESSÃO ARITMÉTICA P.A.
FORTRAN 90 Denise Yumi Takamura.
DRS*. Selecionar a opção correspondente ao Departamento Regional de Saúde (DRS) na qual o local de execução do projeto encontra-se localizada (de I a.
Estruturas de Dados para projeto de SGBD. Estruturas de dados analisadas Estruturas de nível Esparso Denso Combinadas Arvore B+ Tabela de hash.
Subconsultas em SQL. Subconsulta Estrutura geral SELECT.... FROM.... WHERE [at] OPERADOR ( SELECT... FROM... [WHERE... ]) Declaração SELECT localizada.
Vetores Variável Composta Homogênea Unidimensional
Estrutura de repetição 18/set. Uso Foi construído o problema de ler notas de um aluno e fazer média. E para 5 alunos ????
VI: EQUILÍBRIO RADIATIVO
Prof. Dr. Helder Anibal Hermini
Slide 1 Rede Nacional de Ensino e Pesquisa Treinamento em Gradep - junho 2005 Serviço Collector Treinamento no GRADEp Serviço Collector CollectorDemo e.
Profa. Graziela Santos de Araújo Algoritmos e Programação II, 2010
Conceitos iniciais Hardware/Software
Página de entrada A página de entrada, ou a index, representa um convite para o seu site.
Agregado Homogêneo e Heterogêneo
Sistemas de Tutoria Inteligente (STI) Visam proporcionar instrução de forma adaptada a cada aprendiz. STIs adaptam o processo de instrução a determinadas.
CES-11 LAB 03 Bitmap Quadtree
CES-41 COMPILADORES Capítulo IV Complementos de Análise Léxica.
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo III Comandos de Controle.
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo IX Estruturas e Subprogramas sem Parâmetros.
1.3 – Interpretadores – Compiladores versus Interpretadores
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013
CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo III Declarações e Comandos de Atribuição.
CES-41 COMPILADORES Aulas Práticas
CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo VII Tipos Enumerativos e Estruturas.
CES-10 INTRODUÇÃO À COMPUTAÇÃO
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo VII Variáveis Indexadas Numéricas.
CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo XI Noções de Estruturas de Dados.
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo XI Encadeamento de Estruturas por Ponteiros.
Capítulo IX – Ponteiros 9.1 – Introdução 9.2 – Relação entre ponteiros e variáveis indexadas 9.3 – Alocação dinâmica de memória 9.4 – Variáveis indexadas,
Exemplo: ordenação de uma lista pelo Selection-Sort:
CE-262 Ontologia e Web Semântica Prof. José M Parente de Oliveira Sala 120 – Prédio da Computação Lógica de Descrições.
1 Definição de Dicionário Dicionário é um sistema de informações: Equivalente a um conjunto de elementos não repetidos Equivalente a um conjunto de elementos.
Capítulo I – Conceitos Primários 1.1 – Estrutura de um computador 1.2 – Informações manipuladas por um computador 1.3 – Evolução das linguagens de programação.
Função Gráficos. Domínio e imagem no gráfico.
Variáveis Aleatórias Uma variável aleatória associa um número real a cada resultado de um experimento aleatório. Mais precisamente…
Curso Técnico em Informática La Salle - Canoas
FUNDAÇÃO CARLOS CHAGAS
Representações na base decimal e binária
Desempenho A rápida taxa de melhoria na tecnologia de computadores veio em decorrência de dois fatores: avanços na tecnologia utilizada na construção.
Laboratório de Programação Prof. Oscar Luiz Monteiro de Farias
Recursividade Estrutura de Dados.
Marco Antonio Montebello Júnior
Entendendo as definições de classe
The Data Warehouse Toolkit
Curso de Programação em C++
Curso de Programação em C++ Universidade Federal do Ceará Departamento de Engenharia Estrutural e Construção Civil Prof: Evandro Parente Junior Monitor:
Baseado no documento do Prof. Ronaldo Martins da Costa
LINGUAGENS DE PROGRAMAÇÃO
Baseado no documento do Prof. Ronaldo Martins da Costa
04:27 Introdução Tipos de Fluxo de Dados e de Arquivos Manipulação de Arquivos em Java Classes FileReader e FileWriter Classes FileInputStream e FileOutputStream.
Introdução Ciência da Computação estudo de algoritmos –ÊNFASE ao estudo de DADOS armazenamento manipulação refinamento (a partir de dados cru) estrutura.
1 Seja o resultado de um experimento aleatório. Suponha que uma forma de onda é associada a cada resultado.A coleção de tais formas de ondas formam um.
8. Uma Função de duas Variáveis Aleatórias
APRESENTAÇÃO: GIANCARLO DE GUSMÃO GONÇALVES CURSO DE C AULA 08: Tipos Estruturados.
PROGRAMAÇÃO ESTRUTURADA II
INPE / CAP-315 Airam J. Preto, Celso L. Mendes Aula 30 (1) Empacotamento de Dados em MPI Tópicos: Buffer de Mensagem Empacotamento/Desempacotamento.
Leandro Almeida  Parâmetros são utilizados em computação para possibilitar a construção de subprogramas genéricos.
Fundamentos de Programação 1 Slides 11 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “ Struct, Union, Enum, Typedef ”
Fundamentos de Programação 1 Slides 12 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Union, Enum e Typedef ”
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas
Fundamentos de Programação 1
Fundamentos de Programação 1
Fundamentos de Programação 1
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas – 2019
Transcrição da apresentação:

Capítulo VII – Tipos Enumerativos e Estruturas 7.1 – Tipos enumerativos 7.2 – A necessidade de estruturas 7.3 – Manipulação dos campos de uma estrutura 7.4 – Campos alternativos

7.4 – Campos Alternativos – Utilidade de campos alternativos Seja o cadastramento dos moradores de um prédio Seja o cadastramento dos moradores de um prédio Para todo morador são registrados: o nome, o andar, o número do apartamento e a idade Para todo morador são registrados: o nome, o andar, o número do apartamento e a idade Conforme a idade, outras informações são registradas Conforme a idade, outras informações são registradas

Morador: nome, andar, número do apartamento, idade nome, andar, número do apartamento, idade Zero a 3 anos: número de mamadeiras tomadas por dia Zero a 3 anos: número de mamadeiras tomadas por dia 4 a 11 anos: escolaridade, número de brinquedos que possui; 4 a 11 anos: escolaridade, número de brinquedos que possui; 12 a 17 anos: escolaridade, número de livros que já leu, passatempo predileto 12 a 17 anos: escolaridade, número de livros que já leu, passatempo predileto 18 anos ou mais: escolaridade, profissão, se é ou não casado(a), caso seja casado(a), o nome do cônjuge e o número de filhos 18 anos ou mais: escolaridade, profissão, se é ou não casado(a), caso seja casado(a), o nome do cônjuge e o número de filhos

A seguinte struct poderia ser usada: A seguinte struct poderia ser usada: struct morador { char Nome[30], Escolaridade[10], Passatempo[15], Profissao[15], NomeConjuge[30]; int andar, numapartamento, idade, numeromamadeiras, numbrinquedos, numlivros, numfilhos; logic casado; }; Nenhum morador usaria todos os campos: desperdício de memória Nenhum morador usaria todos os campos: desperdício de memória Solução: Campos Alternativos

Campos Alternativos: campos de uma variável que compartilham um mesmo espaço de memória Campos Alternativos: campos de uma variável que compartilham um mesmo espaço de memória A variável não será do tipo struct, mas sim do tipo union A variável não será do tipo struct, mas sim do tipo union No exemplo dos moradores do prédio, o mesmo espaço de memória pode ser compartilhado por: No exemplo dos moradores do prédio, o mesmo espaço de memória pode ser compartilhado por: nummamadeiras nummamadeiras Escolaridade, numbrinquedos Escolaridade, numbrinquedos Escolaridade, numlivros, Passatempo Escolaridade, numlivros, Passatempo Escolaridade, Profissao, casado, NomeConjuge, numfilhos Escolaridade, Profissao, casado, NomeConjuge, numfilhos

nummamadeiras nummamadeiras Escolaridade, numbrinquedos Escolaridade, numbrinquedos Escolaridade, numlivros, Passatempo Escolaridade, numlivros, Passatempo Escolaridade, Profissao, casado, NomeConjuge, numfilhos Escolaridade, Profissao, casado, NomeConjuge, numfilhos Os campos desse espaço a serem utilizados dependem da idade do morador Os campos desse espaço a serem utilizados dependem da idade do morador O tamanho total desse espaço é o maior dentre aqueles ocupados pelas quatro alternativas O tamanho total desse espaço é o maior dentre aqueles ocupados pelas quatro alternativas

7.4.2 – A declaração union Sejam as seguintes declarações: Sejam as seguintes declarações: union valor { int valint; double valreal; char valchar; }; union valor val; A variável val é do tipo union valor A variável val é do tipo union valor Os campos valint, valreal e valchar compartilham o mesmo espaço de memória Os campos valint, valreal e valchar compartilham o mesmo espaço de memória Então, essa variável pode guardar alternativamente, num dado momento, um inteiro, um real ou um caractere Então, essa variável pode guardar alternativamente, num dado momento, um inteiro, um real ou um caractere Val valint/valreal/valchar

union valor { int valint; double valreal; char valchar; }; union valor val; O espaço por ela ocupado é o de um double, pois dentre os tipos dos três campos, double é o que ocupa maior espaço O espaço por ela ocupado é o de um double, pois dentre os tipos dos três campos, double é o que ocupa maior espaço Tal como nas declarações enum e struct, a variável val poderia ser declarada das seguintes formas alternativas: Tal como nas declarações enum e struct, a variável val poderia ser declarada das seguintes formas alternativas: ou ou union valor { int valint; double valreal; char valchar; } val; typedef union valor valor; union valor { int valint; double valreal; char valchar; }; valor val; Val valint/valreal/valchar

typedef union valor valor; union valor {int valint; double valreal; char valchar;}; valor val; val.valint = 4455; printf ("1) valint = %d, valreal = %lf, valchar = %c", val.valint, val.valreal, val.valchar); val.valreal = ; printf ("\n\n2) valint = %d, valreal = %lf, valchar = %c", val.valint, val.valreal, val.valchar); val.valchar = '*'; printf ("\n\n3) valint = %d, valreal = %lf, valchar = %c", val.valint, val.valreal, val.valchar); Exemplo: seja o trecho de programa à esquerda 1) valint = 4455, valreal = , valchar = g 2) valint = , valreal = , valchar = H 3) valint = , valreal = , valchar = * No vídeo Os mesmos 8 bytes (64 bits) estão sendo vistos de formas diferentes Val valint/valreal/valchar

7.4.3 – Estruturas com campos alternativos Campos alternativos são muitíssimo usados dentro de estruturas Campos alternativos são muitíssimo usados dentro de estruturas São frequentes os casos em que o valor de algum campo de uma estrutura determina quais os outros campos da mesma serem preenchidos em seguida São frequentes os casos em que o valor de algum campo de uma estrutura determina quais os outros campos da mesma serem preenchidos em seguida Seja a seguir o exemplo visto dos moradores de um prédio Seja a seguir o exemplo visto dos moradores de um prédio

Declarações dos tipos utilizados: cadastro Cad; // Cad é do tipo cadastro onde struct cadastro { int nmor; morador Moradores[10]; int nmor; morador Moradores[10];}; typedef struct cadastro cadastro; nmor morador Moradores Cad

typedef struct morador morador; struct morador { char Nome[30]; int andar, nap, idade; infoadicionais InfoAdic; }; nmor morador Moradores Cad char - [30]int infoadicionais NomeandarnapidadeInfoAdic O tipo morador

typedef union infoadicionais infoadicionais; union infoadicionais { infozeroa3 Info03; info4a11 Info411; info12a17 Info1217; info18oumais Info18; }; char - [30]int infoadicionais NomeandarnapidadeInfoAdic O tipo morador infozeroa3 / info4a11 / info12a17 / info18oumais Info03 / Info411 / Info1217 / Info18 O tipo infoadicionais

typedef struct infozeroa3 infozeroa3; struct infozeroa3 {int nmamads;}; typedef struct info4a11 info4a11; struct info4a11 {escolaridade esc; int nbrinq;}; infozeroa3 / info4a11 / info12a17 / info18oumais Info03 / Info411 / Info1217 / Info18 O tipo infoadicionais int nmamads O tipo infozeroa3 escolaridadeint escnbrinq O tipo info4a11

typedef struct info12a17 info12a17; struct info12a17 { escolaridade esc; int nlivros; char Passatempo[20]; }; infozeroa3 / info4a11 / info12a17 / info18oumais Info03 / Info411 / Info1217 / Info18 O tipo infoadicionais escolaridadeintchar - [20] escnlivrosPassatempo O tipo info12a17

typedef struct info18oumais info18oumais; struct info18oumais { escolaridade esc; char Profissao[20], Conjuge[30]; char ehcasado; int nfilhos; }; infozeroa3 / info4a11 / info12a17 / info18oumais Info03 / Info411 / Info1217 / Info18 O tipo infoadicionais O tipo info18oumais escolaridadecharchar - [20]char - [30]int escehcasadoProfissaoConjugenfilhos A seguir, um programa completo

#include #include /* Declaracoes dos diversos tipos */ typedef enum escolaridade escolaridade; enum escolaridade {nenhuma, basica, media, superior}; typedef struct infozeroa3 infozeroa3; struct infozeroa3 {int nmamads;}; typedef struct info4a11 info4a11; struct info4a11 {escolaridade esc; int nbrinq;};

typedef struct info12a17 info12a17; struct info12a17 { escolaridade esc; int nlivros; char Passatempo[20]; }; typedef struct info18oumais info18oumais; struct info18oumais { escolaridade esc; char Profissao[20], Conjuge[30]; char ehcasado; int nfilhos; };

typedef union infoadicionais infoadicionais; union infoadicionais { infozeroa3 Info03; info4a11 Info411; info12a17 Info1217; info18oumais Info18; }; typedef struct morador morador; struct morador { char Nome[30]; int andar, nap, idade; infoadicionais InfoAdic; }; typedef struct cadastro cadastro; struct cadastro { int nmor; morador Moradores[10]; int nmor; morador Moradores[10];};

/* Cabecalho e declaracoes das variaveis */ void main () { cadastro Cad; int i; char c; /* Inicio da entrada de dados */ printf ("CADASTRO DE MORADORES DE UM PREDIO"); printf ("\n\nNumero de moradores: "); scanf ("%d", &Cad.nmor); for (i = 0; i < Cad.nmor; i++) { /* Leitura das informacoes comuns a cada morador */ printf ("\n\nMorador n.o %d:", i+1); printf ("\n\tNome: "); fflush (stdin); gets (Cad.Moradores[i].Nome); printf ("\tAndar: "); scanf ("%d", &Cad.Moradores[i].andar); printf ("\tApto: "); scanf ("%d", &Cad.Moradores[i].nap); printf ("\tIdade: "); scanf ("%d", &Cad.Moradores[i].idade);

/* Leitura das informacoes dos moradores com idade de zero a 3 anos */ if (Cad.Moradores[i].idade >= 0 && Cad.Moradores[i].idade = 0 && Cad.Moradores[i].idade <= 3) { printf ("\tNumero de Mamadeiras: "); scanf ("%d", &Cad.Moradores[i].InfoAdic.Info03.nmamads); } /* Leitura das informacoes dos moradores com idade de 4 a 11 anos */ else if (Cad.Moradores[i].idade >= 4 && Cad.Moradores[i].idade = 4 && Cad.Moradores[i].idade <= 11) { printf ("\tEscolaridade "); printf ("(0 - Nenhuma, 1 - Basica, 2 - Media, 3 - Superior): "); scanf ("%d", &Cad.Moradores[i].InfoAdic.Info411.esc); printf ("\tNumero de Brinquedos: "); scanf ("%d", &Cad.Moradores[i].InfoAdic.Info411.nbrinq); }

/* Leitura das informacoes dos moradores com idade de 12 a 17 anos */ else if (Cad.Moradores[i].idade>=12 && Cad.Moradores[i].idade =12 && Cad.Moradores[i].idade<=17) { printf ("\tEscolaridade "); printf ("(0 - Nenhuma, 1 - Basica, 2 - Media, 3 - Superior): "); scanf ("%d", &Cad.Moradores[i].InfoAdic.Info1217.esc); printf ("\tNumero de Livros Lidos: "); scanf ("%d", &Cad.Moradores[i].InfoAdic.Info1217.nlivros); printf ("\tPassatempo Predileto: "); fflush (stdin); gets (Cad.Moradores[i].InfoAdic.Info1217.Passatempo); }

/* Leitura das informacoes dos moradores com idade de 18 anos ou mais */ else { printf ("\tEscolaridade "); printf ("(0 - Nenhuma, 1 - Basica, 2 - Media, 3 - Superior): "); scanf ("%d", &Cad.Moradores[i].InfoAdic.Info18.esc); printf ("\tProfissao: "); fflush (stdin); gets (Cad.Moradores[i].InfoAdic.Info18.Profissao); printf ("\tEh casado? (s/n): "); c = Cad.Moradores[i].InfoAdic.Info18.ehcasado = getche (); if (c == 's' || c == 'S') { printf ("\n\tNome do conjuge: "); fflush (stdin); gets (Cad.Moradores[i].InfoAdic.Info18.Conjuge); printf ("\tNumero de Filhos: "); scanf ("%d", &Cad.Moradores[i].InfoAdic.Info18.nfilhos); } else printf ("\n"); else printf ("\n");}}

/* Listagem das informacoes digitadas */ printf ("\nListagem dos Moradores:\n"); printf ("\nListagem dos Moradores:\n"); for(i = 0; i < Cad.nmor; i++) { /* Informacoes comuns */ printf("\n%d) Nome: %-21s; Andar: %4d; Apto: %5d; Idade: %4d", i+1, Cad.Moradores[i].Nome, Cad.Moradores[i].andar, Cad.Moradores[i].nap, Cad.Moradores[i].idade); /* Moradores de zero a 3 anos */ if (Cad.Moradores[i].idade >= 0 && Cad.Moradores[i].idade = 0 && Cad.Moradores[i].idade <= 3) { printf ("\n\tMamadeiras: %d;", Cad.Moradores[i].InfoAdic.Info03.nmamads); }

/* Moradores de 4 a 11 anos */ else if (Cad.Moradores[i].idade >= 4 && Cad.Moradores[i].idade = 4 && Cad.Moradores[i].idade <= 11) { printf ("\n\tEscolaridade: %d; Brinquedos: %d", Cad.Moradores[i].InfoAdic.Info411.esc,Cad.Moradores[i].InfoAdic.Info411.nbrinq);} /* Moradores de 12 a 17 anos */ else if (Cad.Moradores[i].idade>=12 && Cad.Moradores[i].idade =12 && Cad.Moradores[i].idade<=17) { printf ("\n\tEscolaridade: %d; Livros: %d; Passatempo: %s", Cad.Moradores[i].InfoAdic.Info1217.esc,Cad.Moradores[i].InfoAdic.Info1217.nlivros,Cad.Moradores[i].InfoAdic.Info1217.Passatempo);}

/* Moradores de 18 anos ou mais */ else { printf ("\n\tEscolaridade %d; Profissao %s; Casado: %c;", Cad.Moradores[i].InfoAdic.Info18.esc,Cad.Moradores[i].InfoAdic.Info18.Profissao,Cad.Moradores[i].InfoAdic.Info18.ehcasado); c = Cad.Moradores[i].InfoAdic.Info18.ehcasado; if (c == 's' || c == 'S') { printf ("\n\tConjuge: %s, Filhos: %d", Cad.Moradores[i].InfoAdic.Info18.Conjuge,Cad.Moradores[i].InfoAdic.Info18.nfilhos);} }} /* Fechamento da tela */ printf ("\n\nDigite algo para encerrar: "); getch(); printf ("\n\nDigite algo para encerrar: "); getch();}

Exercícios 7.4: 1)Seja o programa ao lado contendo estruturas e campos alternativos. Mostrar o que será escrito no vídeo pela sua execução. #include typedef char str2[2]; typedef char str4[4]; struct ss {str2 x[4]; str4 y[2];}; typedef struct ss ss; typedef char str16[16]; typedef char str8[8]; union uu {ss a; str16 b; str8 c;} uniao; void main () { str16 palavra = "ABCDEFGHIJKLMNOP"; str8 numero = " "; int i, j; for (i=0; i<16; i++) uniao.b[i] = palavra[i]; for (i=0; i<8; i++) uniao.c[i] = numero[i]; for (i=0; i<4; i++) { for (j=0; j<2; j++) printf ("%c%c", uniao.a.x[i][j], uniao.a.y[j][i]); printf ("\n"); } printf ("\n\nDigite algo para encerrar: "); getch(); }