A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

1 Linguagem C Linguagem de Programação VI Tipos de Dados Compostos - structs Joseane Alves Freire 2º Semestre 2009 CST EM ANÁLISE E DESENVOLVIMENTO DE.

Apresentações semelhantes


Apresentação em tema: "1 Linguagem C Linguagem de Programação VI Tipos de Dados Compostos - structs Joseane Alves Freire 2º Semestre 2009 CST EM ANÁLISE E DESENVOLVIMENTO DE."— Transcrição da apresentação:

1 1 Linguagem C Linguagem de Programação VI Tipos de Dados Compostos - structs Joseane Alves Freire 2º Semestre 2009 CST EM ANÁLISE E DESENVOLVIMENTO DE SISTEMA

2 2 Sumário Estruturas Enumerações Typedef

3 3 Resumo dos tipos de dados

4 4 Tipos de dados compostos Além dos tipos de dados já discutidos anteriormente, o programador pode criar tipos personalizados. Permitem organizar os dados e dão mais versatilidade ao programa. São chamados genericamente de estruturas ou, em alguns casos, de registros. Em C o usuário definir dados de cinco formas diferentes: – Estrutura; – Campo de bit; – União; – Enumeração; – Typedef.

5 5 Estruturas –Uma estrutura, serve para agrupar um conjunto de dados não similares, mas que são associados a um mesmo tipo de informação, de modo a criar um novo tipo. –A definição de uma estrutura, serve de modelo ou pré definição para se criar variáveis daquele tipo de estrutura. –Cada variável de uma estrutura é chamada membro da estrutura.

6 6 Estruturas –Forma geral: struct tipo_da_estrutura { tipo_1 nome_1; tipo_2 nome_2; tipo_n nome_n; } variáveis_deste_tipo_de_estrutura; Opcional

7 7 Estruturas - exemplos –Definição de tipo de dados + declaração de variável (variáveis) em instruções diferentes struct CLIENTE { char nome[40]; char morada[60]; long telefone; }; struct CLIENTE x; –Definição de tipo de dados + declaração de variável (variáveis) na mesma instrução struct CLIENTE { char nome[40]; char morada[60]; long telefone; } x;

8 8 Estruturas - exemplos Exemplo: struct est { int i; float f; } a, b; Ou então: struct est { int i; float f; }; struct est a,b; Exemplo estrutura tipo de endereço: struct tipo_endereco { char rua[50]; int numero; char bairro[20]; char cidade[30]; char sigla_estado[3]; long int CEP; }; struct tipo_endereco enderecos;

9 9 Estruturas - exemplos Exemplo de um estrutura de dados pessoais: struct ficha_pessoal { char nome[50]; long int telefone; struct tipo_endereço endereco; } ; struct ficha_pessoal ficha; Note que neste caso declaramos uma estrutura dentro de outra.

10 10 Estruturas – Acessando os dados Para acessar cada membro da estrutura separadamente, é utilizado o operador de seleção ponto (.) Por exemplo: struct data { int dia; char mes[10]; int ano; }; struct data hoje; hoje.ano=2003; hoje.dia++; strcpy(hoje.mes,Novembro);

11 11 Estruturas – Acessando os dados #include struct tipo_endereco { char rua[50]; int numero; char bairro[20]; char cidade[30]; char sigla_estado[3]; long int CEP; }; struct ficha_pessoal { char nome[50]; long int telefone; struct tipo_endereco endereco; }; main (void) { struct ficha_pessoal ficha; strcpy (ficha.nome, Luiz Osvaldo Silva); ficha.telefone = ; strcpy (ficha.endereco.rua, Rua das Flores); ficha.endereco.numero = 10; strcpy (ficha.endereco.bairro, Cidade Velha); strcpy (ficha.endereco.cidade, Belo Horizonte); strcpy (ficha.endereco.sigla_estado, MG); ficha.endereco.CEP = ; return 0; }

12 12 Estruturas – Atribuição A atribuição pode ser feita campo a campo conforme exemplo anterior ficha.telefone = ; Mas, ao contrário dos arrays,também pode ser feita entre estruturas int main () { struct ficha_pessoal ficha; struct ficha_pessoal ficha2; strcpy (ficha.nome, "Luiz Osvaldo Silva"); ficha.telefone = ; strcpy (ficha.endereco.rua, "Rua das Flores"); ficha.endereco.numero = 10; strcpy (ficha.endereco.bairro, "Cidade Velha"); strcpy (ficha.endereco.cidade, "Belo Horizonte"); strcpy (ficha.endereco.sigla_estado, "MG"); ficha.endereco.CEP = ; ficha2=ficha; }

13 13 Estruturas - exemplo #include struct est1 { int i; float f; }; int main () { struct est1 primeira, segunda; primeira.i = 10; primeira.f = ; segunda = primeira; printf ("Os valores armazenados na segunda struct sao: %d e %f ", segunda.i, segunda.f); system ("pause"); return (0); }

14 14 Matrizes de Estruturas Uma estrutura é como qualquer outro tipo em C. Logo, podemos definir um vetor de estruturas. Exemplo: struct ficha_pessoal fichas[100]; –Para acessarmos a segunda letra da sigla de estado da décima terceira ficha, fazendo: fichas[12].endereco.sigla_estado[1];

15 15 Exercício Escreva um programa que crie um estrutura do tipo ponto, contendo os campos x e y.Declare dois pontos, leia a posição de cada um e apresente, como saída (na tela ) a distância entre os dois. ***Pesquisar a fórmula que retorna a distância entre dois pontos!!

16 16 Passando uma estrutura como parâmetro de função Podemos passar uma estrutura inteira para uma função, assim como passamos uma variável de outro tipo. void PreencheFicha (struct ficha_pessoal ficha) {..... }

17 17 Exemplo #include struct VECTOR { float x; float y; }; float produtoInterno(struct VECTOR a, struct VECTOR b); int main () { struct VECTOR p = {5.0,10.0}; struct VECTOR q = {6.0,9.0}; float p_q; p_q = produtoInterno(p,q); printf("Poduto interno = %f",p_q); system ("pause"); return (0); } float produtoInterno(struct VECTOR a, struct VECTOR b){ return (a.x * b.x + a.y * b.y); } Obs.: Passagem de parâmetros é feita por cópia!!!

18 18 Exemplo struct VECTOR{ float x; float y; }; float produtoInterno(struct VECTOR *a, struct VECTOR *b); void alteraCoordenadaX(struct VECTOR *a, float novoX); int main () { struct VECTOR p = {5.0,10.0}; struct VECTOR q = {6.0,9.0}; float p_q; p_q = produtoInterno(&p,&q); printf("Poduto interno = %f\n",p_q); printf("Vector X antes: (%.2f, %.2f)\n", p.x, p.y); alteraCoordenadaX(&p, 6.0); printf("Vector X depois: (%.2f, %.2f)\n", p.x, p.y); system ("pause"); return (0); } float produtoInterno(struct VECTOR *a, struct VECTOR *b){ return (a->x * b->x + a->y * b->y); } void alteraCoordenadaX(struct VECTOR *a, float novoX){ a->x = novoX; } Passagem por referência !!!

19 19 Comparação entre vetor e estruturas ESTRUTURAS: –RECEBE CÓPIAS DE 2 ESTRUTURAS float produtoInterno(VECTOR a, VECTOR b); –RECEBE CÓPIAS DE 2 ENDEREÇOS PARA ESTRUTURAS float produtoInterno(VECTOR *a, VECTOR *b); ARRAYS: –RECEBE CÓPIAS DE 2 ENDEREÇOS DE ARRAYS float produtoInterno(float a[], float b[]); –RECEBE CÓPIAS DE 2 ENDEREÇOS DE ARRAYS float produtoInterno(float *a, float *b);

20 20 Retorno de uma estrutura O retorno ou saída duma estrutura : –alternativa 1: retorna-se o nome da estrutura, o que implica a cópia da estrutura local da função para uma estrutura local da função invocadora (p.ex. main). –alternativa 2: retorna-se o endereço da estrutura local à função para uma variável apontadora que é local à função invocadora (p.ex. main). (Veremos mais tarde).

21 21 Retorno de uma estrutura #include struct VECTOR{ float x; float y; }; struct VECTOR soma(struct VECTOR, struct VECTOR); int main(){ struct VECTOR p = {5.0,10.0};VECTOR q = {6.0,9.0}; struct VECTOR s; s = soma(p,q); printf("Vector soma = {%f,%f}",s.x, s.y); system ("pause"); return (0); } struct VECTOR soma(struct VECTOR a, struct VECTOR b){ VECTOR vs; vs.x = a.x + b.x; vs.y = a.y + b.y; return vs; } É retornada uma CÓPIA dos dados de vs para s.

22 22 Enumerações Numa enumeração podemos dizer ao compilador, quais os valores uma variável pode assumir. Forma geral: enum nome_do_tipo_da_enum {lista_valores}; Exemplo: enum dias_da_semana {segunda, terca, quarta,quinta, sexta, sabado, domingo};

23 23 Enumerações #include enum dias_da_semana {segunda, terca, quarta, quinta, sexta, sabado, domingo}; main (void) { enum dias_da_semana d1, d2; d1 = segunda; d2 = sexta; if (d1 == d2) { printf ("O dia é o mesmo\n"); } else { printf ("Sao dias diferentes !\n"); } system ("pause"); return (0); }

24 24 Enumerações O compilador pega a lista de valores a associa cada um, a um valor inteiro, iniciando por 0. Assim, no exemplo, segunda recebe 0, terca recebe 1, e assim sucessivamente. As variáveis declaradas são do tipo int.

25 25 Comando typedef Permite ao programador que defina um novo nome a um determinado tipo. Forma geral: typedef antigo_nome novo_nome; Exemplo: –typedef int inteiro;

26 26 Comando typedef #include typedef struct tipo_endereco { char rua[50]; int numero; char bairro[20]; char cidade[30]; char sigla_estado[3]; long int CEP; } TEndereco; typedef struct ficha_pessoal { char nome[50]; long int telefone; TEndereco endereco; } TFicha; int main (void) { TFicha *ex;.... return (0); } **Refaça o exemplo do slide 17 usando typedef

27 27 Exemplo #include typedef struct endereco { char rua[40]; int num; int complemento; }TEndereco; TEndereco InicDados(void); int main() { TEndereco e; e = InicDados(); printf("\n%s %d/%d", e.rua, e.num, e.complemento); system ("pause"); return (0); } TEndereco InicDados(void) { TEndereco e; strcpy(e.rua, "Rua Ferreira Viana"); e.num = 893; e.complemento = 101; return e; }


Carregar ppt "1 Linguagem C Linguagem de Programação VI Tipos de Dados Compostos - structs Joseane Alves Freire 2º Semestre 2009 CST EM ANÁLISE E DESENVOLVIMENTO DE."

Apresentações semelhantes


Anúncios Google