39
Algoritmos e Estruturas de Dados Linguagem C Linguagem C - Estruturas - - Estruturas - Prof. Me. Claudio Benossi [email protected]

Algoritmos e Estruturas de Dados Linguagem C - Estruturas - Prof. Me. Claudio Benossi [email protected]

Embed Size (px)

Citation preview

Page 1: Algoritmos e Estruturas de Dados Linguagem C - Estruturas - Prof. Me. Claudio Benossi claudio@beno.com.br

Algoritmos e Estruturas de Dados

Linguagem CLinguagem C- Estruturas -- Estruturas -

Prof. Me. Claudio [email protected]

Page 2: Algoritmos e Estruturas de Dados Linguagem C - Estruturas - Prof. Me. Claudio Benossi claudio@beno.com.br

Estruturas de dadosEstruturas de dadosEstruturas de dadosEstruturas de dados

Uma estrutura (Uma estrutura (structstruct) é uma coleção de uma ou ) é uma coleção de uma ou mais variáveis, possivelmente de tipos mais variáveis, possivelmente de tipos diferentes, agrupadas sob um único nome. diferentes, agrupadas sob um único nome.

Estruturas constituem um recurso importante Estruturas constituem um recurso importante para organizar os dados utilizados por um para organizar os dados utilizados por um programa pois trata um grupo de valores como programa pois trata um grupo de valores como uma única variável.uma única variável.

São chamadas de São chamadas de registrosregistros em outras linguagens em outras linguagens de programação.de programação.

Page 3: Algoritmos e Estruturas de Dados Linguagem C - Estruturas - Prof. Me. Claudio Benossi claudio@beno.com.br

Estruturas (ou registros) são classificados como Estruturas (ou registros) são classificados como variáveis compostas heterogêneasvariáveis compostas heterogêneas, pois , pois podempodem agrupar variáveis de tipos diferentes.agrupar variáveis de tipos diferentes.

Em contraposição, temos os vetores e matrizes, Em contraposição, temos os vetores e matrizes, classificados como variáveis compostas classificados como variáveis compostas homogêneas, pois somente agrupam variáveis do homogêneas, pois somente agrupam variáveis do mesmo tipo.mesmo tipo.

Estruturas de dadosEstruturas de dadosEstruturas de dadosEstruturas de dados

Page 4: Algoritmos e Estruturas de Dados Linguagem C - Estruturas - Prof. Me. Claudio Benossi claudio@beno.com.br

Exemplo:Exemplo:

struct data{ int dia; int mes; int ano;};

struct data{ int dia; int mes; int ano;};

Estruturas de dadosEstruturas de dadosEstruturas de dadosEstruturas de dados

Page 5: Algoritmos e Estruturas de Dados Linguagem C - Estruturas - Prof. Me. Claudio Benossi claudio@beno.com.br

A palavra-chave A palavra-chave structstruct informa ao compilador informa ao compilador que um modelo de estrutura está sendo definido.que um modelo de estrutura está sendo definido.

““data”data” é uma é uma etiquetaetiqueta que dá nome à que dá nome à definiçãodefinição da estrutura.da estrutura.

Uma definição de estrutura é um Uma definição de estrutura é um comandocomando, por , por isso deve terminar em ponto-e-vírgula.isso deve terminar em ponto-e-vírgula.

Estruturas de dadosEstruturas de dadosEstruturas de dadosEstruturas de dados

Page 6: Algoritmos e Estruturas de Dados Linguagem C - Estruturas - Prof. Me. Claudio Benossi claudio@beno.com.br

Os nomes declarados entre as chaves são os Os nomes declarados entre as chaves são os campos (ou membros) campos (ou membros) da estrutura.da estrutura.

Os campos de uma mesma estrutura devem ter Os campos de uma mesma estrutura devem ter nomes diferentesnomes diferentes..

Porém, estruturas diferentes podem conter Porém, estruturas diferentes podem conter campos com o mesmo nomecampos com o mesmo nome..

Estruturas de dadosEstruturas de dadosEstruturas de dadosEstruturas de dados

Page 7: Algoritmos e Estruturas de Dados Linguagem C - Estruturas - Prof. Me. Claudio Benossi claudio@beno.com.br

Estruturas de dadosEstruturas de dadosEstruturas de dadosEstruturas de dados

A definição de uma estrutura A definição de uma estrutura não reservanão reserva qualquer qualquer espaço na memóriaespaço na memória..

Note que, no exemplo dado, nenhuma variável Note que, no exemplo dado, nenhuma variável foi declarada de fato, apenas a forma dos dados foi declarada de fato, apenas a forma dos dados foi definida.foi definida.

Essa definição, porém, Essa definição, porém, cria um novo tipo de cria um novo tipo de dadosdados, que pode ser usado para declarar , que pode ser usado para declarar variáveis.variáveis.

Page 8: Algoritmos e Estruturas de Dados Linguagem C - Estruturas - Prof. Me. Claudio Benossi claudio@beno.com.br

struct data{ int dia; int mes; int ano;};...struct data x;

struct data{ int dia; int mes; int ano;};...struct data x;

Duas maneiras de declarar a variável Duas maneiras de declarar a variável xx do tipo do tipo datadata::

struct data{ int dia; int mes; int ano;} x;

struct data{ int dia; int mes; int ano;} x;

ou

Dois comandos:Dois comandos:•DefineDefine estruturaestrutura como como novo tiponovo tipo•Declara variávelDeclara variável do do novo tipo definidonovo tipo definido

Um comando:Um comando:•DefineDefine estruturaestrutura e e declara variáveldeclara variável do do novo tipo definidonovo tipo definido

Declarando uma estruturaDeclarando uma estruturaDeclarando uma estruturaDeclarando uma estrutura

100

Page 9: Algoritmos e Estruturas de Dados Linguagem C - Estruturas - Prof. Me. Claudio Benossi claudio@beno.com.br

Os campos de uma estrutura podem ser de Os campos de uma estrutura podem ser de qualquer tipoqualquer tipo, inclusive uma estrutura , inclusive uma estrutura previamente definida.previamente definida.

Porém, o tipo dos campos não podem ser o do Porém, o tipo dos campos não podem ser o do próprio tipo que está sendo definido.próprio tipo que está sendo definido.

Declarando uma estruturaDeclarando uma estruturaDeclarando uma estruturaDeclarando uma estrutura

Page 10: Algoritmos e Estruturas de Dados Linguagem C - Estruturas - Prof. Me. Claudio Benossi claudio@beno.com.br

A definição do formato de uma estrutura pode A definição do formato de uma estrutura pode ser feita dentro da função principal (ser feita dentro da função principal (mainmain) ou fora ) ou fora dela.dela.

Usualmente, Usualmente, declara-se fora da função principaldeclara-se fora da função principal, , de modo que outras funções também possam de modo que outras funções também possam “enxergar” a estrutura definida.“enxergar” a estrutura definida.

Declarando uma estruturaDeclarando uma estruturaDeclarando uma estruturaDeclarando uma estrutura

Page 11: Algoritmos e Estruturas de Dados Linguagem C - Estruturas - Prof. Me. Claudio Benossi claudio@beno.com.br

Forma geral de definição de uma estrutura:Forma geral de definição de uma estrutura:

struct <etiqueta> { <tipo> campo_1; <tipo> campo_2; ... <tipo> campo_n;} <variáveis>;

struct <etiqueta> { <tipo> campo_1; <tipo> campo_2; ... <tipo> campo_n;} <variáveis>;

Estruturas de dadosEstruturas de dadosEstruturas de dadosEstruturas de dados

Page 12: Algoritmos e Estruturas de Dados Linguagem C - Estruturas - Prof. Me. Claudio Benossi claudio@beno.com.br

Novos tipos de dados podem ser definidos Novos tipos de dados podem ser definidos utilizando-se a palavra-chave utilizando-se a palavra-chave typedeftypedef..

Declarando uma estrutura utilizando Declarando uma estrutura utilizando typedeftypedefDeclarando uma estrutura utilizando Declarando uma estrutura utilizando typedeftypedef

typedef struct nome_da_estrutura{ <tipo> campo_1; <tipo> campo_2; ... <tipo> campo_n;} nome_do_tipo;

typedef struct nome_da_estrutura{ <tipo> campo_1; <tipo> campo_2; ... <tipo> campo_n;} nome_do_tipo;

Page 13: Algoritmos e Estruturas de Dados Linguagem C - Estruturas - Prof. Me. Claudio Benossi claudio@beno.com.br

Exemplo:Exemplo:

Declarando uma estrutura utilizando Declarando uma estrutura utilizando typedeftypedefDeclarando uma estrutura utilizando Declarando uma estrutura utilizando typedeftypedef

typedef struct data{ int dia; int mes; int ano;} tipoData;

typedef struct data{ int dia; int mes; int ano;} tipoData;

Page 14: Algoritmos e Estruturas de Dados Linguagem C - Estruturas - Prof. Me. Claudio Benossi claudio@beno.com.br

Declarando uma estrutura utilizando Declarando uma estrutura utilizando typedeftypedefDeclarando uma estrutura utilizando Declarando uma estrutura utilizando typedeftypedef

O uso mais comum de O uso mais comum de typedeftypedef é com estruturas é com estruturas de dados, pois evita que a palavra-chave de dados, pois evita que a palavra-chave structstruct tenha de ser colocada toda vez que uma tenha de ser colocada toda vez que uma estrutura é declarada.estrutura é declarada.

struct data dia_de_hoje;

tipoData dia_de_hoje;

struct data dia_de_hoje;

tipoData dia_de_hoje;

101

Page 15: Algoritmos e Estruturas de Dados Linguagem C - Estruturas - Prof. Me. Claudio Benossi claudio@beno.com.br

<nome_da_variável><nome_da_variável>..<campo><campo><nome_da_variável><nome_da_variável>..<campo><campo>

Acessando os campos de uma estruturaAcessando os campos de uma estruturaAcessando os campos de uma estruturaAcessando os campos de uma estrutura

102

Podemos acessar Podemos acessar individualmenteindividualmente os os campos de uma determinada estrutura campos de uma determinada estrutura como se fossem variáveis comuns.como se fossem variáveis comuns.

A sintaxe para A sintaxe para acessaracessar e e manipularmanipular campos de estruturas é a seguinte:campos de estruturas é a seguinte:

Page 16: Algoritmos e Estruturas de Dados Linguagem C - Estruturas - Prof. Me. Claudio Benossi claudio@beno.com.br

printf (“Digite o nome do aluno: ”);scanf (“%s”, &aluno.nome);

printf (“Digite a idade do aluno: ”);scanf (“%d”, &aluno.idade);

printf (“Digite o nome do aluno: ”);scanf (“%s”, &aluno.nome);

printf (“Digite a idade do aluno: ”);scanf (“%d”, &aluno.idade);

A leitura dos campos de uma estrutura a partir A leitura dos campos de uma estrutura a partir do teclado deve ser feita campo a campo, como do teclado deve ser feita campo a campo, como se fosse variáveis independentes.se fosse variáveis independentes.

Leitura dos campos de uma estruturaLeitura dos campos de uma estruturaLeitura dos campos de uma estruturaLeitura dos campos de uma estrutura

Page 17: Algoritmos e Estruturas de Dados Linguagem C - Estruturas - Prof. Me. Claudio Benossi claudio@beno.com.br

Um campo de uma estrutura pode ser uma outra Um campo de uma estrutura pode ser uma outra estrutura.estrutura.

Quando isso ocorre, temos uma Quando isso ocorre, temos uma estrutura estrutura aninhadaaninhada..

O padrão ANSI C especifica que as estruturas O padrão ANSI C especifica que as estruturas podem ser aninhadas até podem ser aninhadas até 15 níveis15 níveis, mas a , mas a maioria dos compiladores permite mais. maioria dos compiladores permite mais.

Estruturas aninhadasEstruturas aninhadasEstruturas aninhadasEstruturas aninhadas

103

Page 18: Algoritmos e Estruturas de Dados Linguagem C - Estruturas - Prof. Me. Claudio Benossi claudio@beno.com.br

Ponteiros para estruturasPonteiros para estruturasPonteiros para estruturasPonteiros para estruturas

Como outros tipos de dados, ponteiros para Como outros tipos de dados, ponteiros para estruturas são declarados colocando-se o estruturas são declarados colocando-se o operador operador * * na frente do nome da variável na frente do nome da variável estrutura:estrutura:

struct data *ap_ontem;

tipoData *ap_amanha;

struct data *ap_ontem;

tipoData *ap_amanha;

Page 19: Algoritmos e Estruturas de Dados Linguagem C - Estruturas - Prof. Me. Claudio Benossi claudio@beno.com.br

Ponteiros para estruturasPonteiros para estruturasPonteiros para estruturasPonteiros para estruturas

104

Para acessar uma estrutura com ponteiros Para acessar uma estrutura com ponteiros pode-se usar duas sintaxes:pode-se usar duas sintaxes: Operador ponto:Operador ponto:

Operador seta:Operador seta:

*<ponteiro_estrutura>.<campo>*<ponteiro_estrutura>.<campo>

<ponteiro_estrutura>-><campo><ponteiro_estrutura>-><campo>

Page 20: Algoritmos e Estruturas de Dados Linguagem C - Estruturas - Prof. Me. Claudio Benossi claudio@beno.com.br

Vetor de estruturasVetor de estruturasVetor de estruturasVetor de estruturas

105

Usado quando precisamos de diversas cópias de Usado quando precisamos de diversas cópias de uma estrutura.uma estrutura.

Por exemplo, cada cliente de uma locadora de Por exemplo, cada cliente de uma locadora de vídeo constitui um elemento de um vetor, cujo vídeo constitui um elemento de um vetor, cujo tipo é uma estrutura de dados que define as tipo é uma estrutura de dados que define as características de cada cliente.características de cada cliente.

structstruct etiqueta variável[dimensão]; etiqueta variável[dimensão];structstruct etiqueta variável[dimensão]; etiqueta variável[dimensão];

Page 21: Algoritmos e Estruturas de Dados Linguagem C - Estruturas - Prof. Me. Claudio Benossi claudio@beno.com.br

Passando estruturas para funçõesPassando estruturas para funçõesPassando estruturas para funçõesPassando estruturas para funções

Podemos passar Podemos passar estruturas inteiras ou apenas estruturas inteiras ou apenas camposcampos destas como argumento para funções ou destas como argumento para funções ou procedimentos.procedimentos.

Tal passagem pode ser realizada Tal passagem pode ser realizada por valorpor valor ou ou por por referênciareferência..

As estruturas manipuladas por mais de uma As estruturas manipuladas por mais de uma função devem ser declaradas globalmente, função devem ser declaradas globalmente, antesantes da definição da função.da definição da função.

Page 22: Algoritmos e Estruturas de Dados Linguagem C - Estruturas - Prof. Me. Claudio Benossi claudio@beno.com.br

Passando estruturas para funçõesPassando estruturas para funções:: Passando :: Passando campos por valorcampos por valorPassando estruturas para funçõesPassando estruturas para funções:: Passando :: Passando campos por valorcampos por valor

Este processo é realizado da Este processo é realizado da mesma forma que mesma forma que para variáveis simplespara variáveis simples, atentando-se para as , atentando-se para as peculiaridades das estruturas de dados.peculiaridades das estruturas de dados.

106

// Chamadafuncao(estrutura.campo, ...);

// Definicao formal<tipo> funcao(<tipo> variavel, ...)

// Chamadafuncao(estrutura.campo, ...);

// Definicao formal<tipo> funcao(<tipo> variavel, ...)

Page 23: Algoritmos e Estruturas de Dados Linguagem C - Estruturas - Prof. Me. Claudio Benossi claudio@beno.com.br

Passando estruturas para funçõesPassando estruturas para funções:: Passando :: Passando campos por referênciacampos por referênciaPassando estruturas para funçõesPassando estruturas para funções:: Passando :: Passando campos por referênciacampos por referência

Da mesma forma que acontece para variáveis Da mesma forma que acontece para variáveis simples, deve-se pôr o operador simples, deve-se pôr o operador && antes do nome antes do nome da estrutura na chamada da função.da estrutura na chamada da função.

107

// Chamadafuncao(&estrutura.campo, ...);

// Definicao formal<tipo> funcao(<tipo> *variavel, ...)

// Chamadafuncao(&estrutura.campo, ...);

// Definicao formal<tipo> funcao(<tipo> *variavel, ...)

Page 24: Algoritmos e Estruturas de Dados Linguagem C - Estruturas - Prof. Me. Claudio Benossi claudio@beno.com.br

Passando estruturas para funçõesPassando estruturas para funções:: Passando :: Passando estruturas inteiras por valorestruturas inteiras por valorPassando estruturas para funçõesPassando estruturas para funções:: Passando :: Passando estruturas inteiras por valorestruturas inteiras por valor

Ao contrário de arrays, estruturas podem ser Ao contrário de arrays, estruturas podem ser passadas passadas por valorpor valor como argumentos de função. como argumentos de função.

Para estruturas grandes, há o problema da cópia Para estruturas grandes, há o problema da cópia de valores na pilha de memória.de valores na pilha de memória.

108

// Chamadafuncao(estrutura, ...);

// Definicao formal<tipo> funcao(struct <etiqueta> estrutura, ...)

// Chamadafuncao(estrutura, ...);

// Definicao formal<tipo> funcao(struct <etiqueta> estrutura, ...)

Page 25: Algoritmos e Estruturas de Dados Linguagem C - Estruturas - Prof. Me. Claudio Benossi claudio@beno.com.br

Passando estruturas para funçõesPassando estruturas para funções:: Passando :: Passando estruturas inteiras por estruturas inteiras por referênciareferência

Passando estruturas para funçõesPassando estruturas para funções:: Passando :: Passando estruturas inteiras por estruturas inteiras por referênciareferência

Permite alteração da estrutura sem necessidade Permite alteração da estrutura sem necessidade de criação de uma cópia na memória.de criação de uma cópia na memória.

109

// Chamadafuncao(&estrutura, ...);

// Definicao formal<tipo> funcao(struct <etiqueta> *estrutura, ...)

// Chamadafuncao(&estrutura, ...);

// Definicao formal<tipo> funcao(struct <etiqueta> *estrutura, ...)

Page 26: Algoritmos e Estruturas de Dados Linguagem C - Estruturas - Prof. Me. Claudio Benossi claudio@beno.com.br

Passando estruturas para funçõesPassando estruturas para funções:: Passando :: Passando vetor de estruturasvetor de estruturasPassando estruturas para funçõesPassando estruturas para funções:: Passando :: Passando vetor de estruturasvetor de estruturas

Funciona de forma semelhante a vetor de Funciona de forma semelhante a vetor de variáveis simples.variáveis simples.

Permite apenas passagem de parâmetros por Permite apenas passagem de parâmetros por referência, pois trata-se, afinal, de um vetor.referência, pois trata-se, afinal, de um vetor.

110

// Chamadafuncao(vetor, ...);

// Definicao formal<tipo> funcao(struct <etiqueta> vetor[], ...)

// Chamadafuncao(vetor, ...);

// Definicao formal<tipo> funcao(struct <etiqueta> vetor[], ...)

Page 27: Algoritmos e Estruturas de Dados Linguagem C - Estruturas - Prof. Me. Claudio Benossi claudio@beno.com.br

Passando estruturas para funçõesPassando estruturas para funçõesPassando estruturas para funçõesPassando estruturas para funções

111

O tipo das estruturas O tipo das estruturas reaisreais (chamadas) e das (chamadas) e das formaisformais (definição) (definição) deve ser o mesmodeve ser o mesmo, ainda que , ainda que sejam semelhantes.sejam semelhantes.

Page 28: Algoritmos e Estruturas de Dados Linguagem C - Estruturas - Prof. Me. Claudio Benossi claudio@beno.com.br

A Linguagem C possui um método específico A Linguagem C possui um método específico para para acessar um único bit dentro de um byteacessar um único bit dentro de um byte..

Tal método é baseado em estruturas.Tal método é baseado em estruturas.

Um campo de bits é um tipo de elemento da Um campo de bits é um tipo de elemento da estrutura que define o estrutura que define o comprimentocomprimento do campo do campo em bits.em bits.

São frequentemente utilizados para manipular São frequentemente utilizados para manipular entradas de dispositivos de hardware (portas entradas de dispositivos de hardware (portas seriais e paralelas).seriais e paralelas).

Campos de bitsCampos de bitsCampos de bitsCampos de bits

Page 29: Algoritmos e Estruturas de Dados Linguagem C - Estruturas - Prof. Me. Claudio Benossi claudio@beno.com.br

Um campo de bit deve ser declarado dentro da Um campo de bit deve ser declarado dentro da estrutura como estrutura como unsignedunsigned, , signedsigned ou ou intint..

Se o comprimento do campo for de 1 bit, só pode Se o comprimento do campo for de 1 bit, só pode ser declarado como ser declarado como unsignedunsigned..

Campos de bitsCampos de bitsCampos de bitsCampos de bits

112

struct status_type {int campo1: 2;signed campo2: 1;unsigned campo3: 6;

};

struct status_type {int campo1: 2;signed campo2: 1;unsigned campo3: 6;

};

Page 30: Algoritmos e Estruturas de Dados Linguagem C - Estruturas - Prof. Me. Claudio Benossi claudio@beno.com.br

É válido misturar elementos normais de É válido misturar elementos normais de estruturas com elementos de campos de bits.estruturas com elementos de campos de bits.

Campos de bitsCampos de bitsCampos de bitsCampos de bits

struct empregado { struct addr address; float salario; unsigned lay_off : 1; // ativo ou inativo unsigned hourly : 1; // pago por hora ou mes unsigned deducoes : 3; // deducoes de impostos};

struct empregado { struct addr address; float salario; unsigned lay_off : 1; // ativo ou inativo unsigned hourly : 1; // pago por hora ou mes unsigned deducoes : 3; // deducoes de impostos};

Page 31: Algoritmos e Estruturas de Dados Linguagem C - Estruturas - Prof. Me. Claudio Benossi claudio@beno.com.br

Não se pode obter Não se pode obter endereçoendereço de uma variável de de uma variável de campos de bits.campos de bits.

Não podem ser organizadas em Não podem ser organizadas em matrizesmatrizes..

A soma dos comprimentos de todos os campos A soma dos comprimentos de todos os campos não pode ultrapassar o tamanho de um inteironão pode ultrapassar o tamanho de um inteiro..

A disposição dos bits (esquerda para direita ou A disposição dos bits (esquerda para direita ou direita para esquerda) direita para esquerda) variavaria de máquina para de máquina para máquina.máquina.

Campos de bitsCampos de bits:: Restrições:: RestriçõesCampos de bitsCampos de bits:: Restrições:: Restrições

Page 32: Algoritmos e Estruturas de Dados Linguagem C - Estruturas - Prof. Me. Claudio Benossi claudio@beno.com.br

UnionUnionUnionUnion

Uma Uma unionunion é uma posição de memória é uma posição de memória que é compartilhada por duas ou mais que é compartilhada por duas ou mais variáveis diferentes, geralmente de tipos variáveis diferentes, geralmente de tipos diferentes, em momentos diferentes.diferentes, em momentos diferentes.

Sua definição é semelhante à de Sua definição é semelhante à de estrutura:estrutura:

union <identificador> { <tipo> campo_1; <tipo> campo_2; ... <tipo> campo_n;} <variáveis>;

union <identificador> { <tipo> campo_1; <tipo> campo_2; ... <tipo> campo_n;} <variáveis>;

Page 33: Algoritmos e Estruturas de Dados Linguagem C - Estruturas - Prof. Me. Claudio Benossi claudio@beno.com.br

UnionUnion:: Exemplo:: ExemploUnionUnion:: Exemplo:: Exemplo

O espaço ocupado por uma union na memória O espaço ocupado por uma union na memória corresponde ao corresponde ao maior tamanho de variável maior tamanho de variável que que ela contém. Exemplo:ela contém. Exemplo:

struct exemplo {int a;char b;double c;

}

struct exemplo {int a;char b;double c;

}

union exemplo {int a;char b;double c;

}

union exemplo {int a;char b;double c;

} 113

Page 34: Algoritmos e Estruturas de Dados Linguagem C - Estruturas - Prof. Me. Claudio Benossi claudio@beno.com.br

UnionUnion:: Exemplo:: ExemploUnionUnion:: Exemplo:: Exemplo

Código para guardar um Código para guardar um floatfloat e um e um inteirointeiro em uma mesma posição de memória:em uma mesma posição de memória:

union ieee754 {float num_real;int num_hexa;

};

union ieee754 {float num_real;int num_hexa;

};

115114

Page 35: Algoritmos e Estruturas de Dados Linguagem C - Estruturas - Prof. Me. Claudio Benossi claudio@beno.com.br

Palavra chave Palavra chave enumenumPalavra chave Palavra chave enumenum

enumenum é a abreviação de ENUMERATE. é a abreviação de ENUMERATE.

Podemos usar esta palavra chave para Podemos usar esta palavra chave para declarar e inicializar uma declarar e inicializar uma seqüência de seqüência de constates inteirasconstates inteiras..

Sua principal vantagem é quando não se Sua principal vantagem é quando não se quer inicializar todas as constantes e cada quer inicializar todas as constantes e cada uma precisa ter um valor único.uma precisa ter um valor único.

Por padrão, a primeira constante equivale Por padrão, a primeira constante equivale a a zerozero. As restantes equivalem à anterior . As restantes equivalem à anterior incrementada em umincrementada em um..

Page 36: Algoritmos e Estruturas de Dados Linguagem C - Estruturas - Prof. Me. Claudio Benossi claudio@beno.com.br

Palavra chave Palavra chave enumenum:: Exemplo:: ExemploPalavra chave Palavra chave enumenum:: Exemplo:: Exemplo

colorscolors é o nome dado para o grupo de é o nome dado para o grupo de constantes (opcional).constantes (opcional).

Se não é atribuído um valor para as constantes, o Se não é atribuído um valor para as constantes, o valor padrão atribuído para o valor padrão atribuído para o primeiro elementoprimeiro elemento na lista (RED em nosso caso) será 0 (na lista (RED em nosso caso) será 0 (zerozero).).

As demais constantes com valor indefinido terão As demais constantes com valor indefinido terão valor o da constante anterior mais 1 (um).valor o da constante anterior mais 1 (um).

No nosso caso, No nosso caso, GREEN = 1GREEN = 1 e e BLUE = 2BLUE = 2..

enum colors {RED, GREEN, BLUE};enum colors {RED, GREEN, BLUE};

116

Page 37: Algoritmos e Estruturas de Dados Linguagem C - Estruturas - Prof. Me. Claudio Benossi claudio@beno.com.br

Palavra chave Palavra chave enumenumPalavra chave Palavra chave enumenum

Pode-se atribuir valores para as constantes.Pode-se atribuir valores para as constantes.

Agora Agora RED = 1RED = 1, , YELLOW = 2YELLOW = 2, , GREEN = 6GREEN = 6 e e BLUE = 7BLUE = 7. .

Geralmente usa-se letras Geralmente usa-se letras maiúsculas maiúsculas para para dar nome às constantes.dar nome às constantes.

enum colors {RED = 1, YELLOW, GREEN = 6, BLUE};

enum colors {RED = 1, YELLOW, GREEN = 6, BLUE};

Page 38: Algoritmos e Estruturas de Dados Linguagem C - Estruturas - Prof. Me. Claudio Benossi claudio@beno.com.br

Variáveis Variáveis enumenumVariáveis Variáveis enumenum

Constantes enumeradas são do tipo Constantes enumeradas são do tipo inteirointeiro, então , então int x = RED;int x = RED; está correto. está correto.

Porém, você pode criar o seu próprio tipo Porém, você pode criar o seu próprio tipo de dado, por exemplo de dado, por exemplo colorscolors..

Declara uma variável chamada Declara uma variável chamada corfundocorfundo, , a qual é do tipo de dado enumerado a qual é do tipo de dado enumerado colorscolors..

117

enum colors corfundo;enum colors corfundo;

Page 39: Algoritmos e Estruturas de Dados Linguagem C - Estruturas - Prof. Me. Claudio Benossi claudio@beno.com.br

QuestõesQuestõesQuestõesQuestões