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

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

Linguagem de Programação VI Tipos de Dados Compostos - structs

Apresentações semelhantes


Apresentação em tema: "Linguagem de Programação VI Tipos de Dados Compostos - structs"— Transcrição da apresentação:

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

2 Sumário Estruturas Enumerações Typedef

3 Resumo dos tipos de dados

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 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 Estruturas Forma geral: struct tipo_da_estrutura { tipo_1 nome_1;
...... tipo_n nome_n; } variáveis_deste_tipo_de_estrutura; Opcional

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 } x;

8 Estruturas - exemplos Exemplo: Exemplo estrutura tipo de endereço:
struct est { int i; float f; } a, b; • Ou então: }; 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 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 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 Estruturas – Acessando os dados
#include <stdio.h> #include <string.h> 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; 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 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"); 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 Estruturas - exemplo #include <stdlib.h>
#include <stdio.h> 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 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 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 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 Exemplo Obs.: Passagem de parâmetros é feita por cópia!!!
#include <stdlib.h> #include <stdio.h> 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 Exemplo Passagem por referência !!! 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 Comparação entre vetor e 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[]); float produtoInterno(float *a, float *b);

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 Retorno de uma estrutura
#include <stdlib.h> #include <stdio.h> 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 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 Enumerações #include <stdio.h>
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 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 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 Comando typedef #include <stdio.h> 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 Exemplo #include <stdio.h> #include <stdlib.h>
#include <string.h> 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) { strcpy(e.rua, "Rua Ferreira Viana"); e.num = 893; e.complemento = 101; return e;


Carregar ppt "Linguagem de Programação VI Tipos de Dados Compostos - structs"

Apresentações semelhantes


Anúncios Google