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

Slides:



Advertisements
Apresentações semelhantes
Programação em Java Prof. Maurício Braga
Advertisements

Programação em Java Prof. Maurício Braga
Métodos, Parâmetros, Argumentos e Contratos
Introdução à Programação usando Processing Programação Gráfica 2D Estrutura de Seleção Exercício Estrutura de Seleção 2º Semestre 2009 > PUCPR > Design.
03/08/2011 Professor Leomir J. Borba- –
Nivelamento de C: Tipos Estruturados de Dados
Listas encadeadas Prof. Rosana Palazon.
Programação II Estruturas de Dados
Algoritmos e Estrutura de Dados I
Introdução à Programação
Introdução a Programação
1 Tipos definidos O programador pode definir seus próprios tipos de dados tipos complexos usados da mesma forma que os simples declaram-se variáveis utilizando-se.
Alocação Dinâmica de Memória
Programação II Estruturas, uniões e enumerações
Linguagem de Programação 1
Algoritmos Escher.
LPG - I: Ponteiros e Vetores/Matrizes UDESC - SBS
LPG-I: Tipos Complexos - Estruturas
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Universidade Federal do Espírito Santo Programação II Estruturas Professora: Norminda Luiza.
Aula 6 Subprogramas Universidade do Vale do Rio dos Sinos
Estruturas de Dados Heterogêneas (struct)
Armazenamento de Dados em Arquivos
Armazenamento de Dados em Arquivos
Estruturas de Dados Heterogêneas (struct)
Matrizes e Funções - Continuação
Fundamentos de Programação 1
Ponteiros.
VETORES, STRINGS E MATRIZES
Tratamento de Ficheiros
Escola Secundária c/ 3º CEB da Batalha
Listas Encadeadas.
Revisão da Linguagem C.
Classes e objetos Arrays e Sobrecarga
Classes e objetos P. O. O. Prof. Grace.
Apontadores ou Ponteiros
Vamos agora aprender a utilizar estruturas.
APRESENTAÇÃO: GIANCARLO DE GUSMÃO GONÇALVES CURSO DE C AULA 08: Tipos Estruturados.
Análise Semântica e Representação Intermédia
PROGRAMAÇÃO ESTRUTURADA II
Definição de Tipos Estruturas e Ponteiros
Ordenação e Pesquisa de Dados Marco Antonio Montebello Júnior
Salas de Matemática.
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Estrutura de Dados Avançada
LINGUAGEM C Centro Federal de Educação Tecnológica da Paraíba Coordenação de Informática Professor: Lafayette B. Melo.
Tipos Estruturados de Dados
Seminário 1: Revisão de C
Prof. Ricardo Santos PONTEIROS
Computação Eletrônica
1 2 Observa ilustração. Cria um texto. Observa ilustração.
Vetores e Matrizes Ameliara Freire
Leandro Almeida  Parâmetros são utilizados em computação para possibilitar a construção de subprogramas genéricos.
Vetor Prof. Guilherme Baião S. Silva Adaptações:
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Aula P.02 – BCC202 Revisão sobre Ponteiros Túlio Toffolo
Introdução à Linguagem C
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: _01.
PCI- Registros Profa. Mercedes Gonzales Márquez. Conceito Variáveis compostas heterogêneas (não homogêneas) Estruturas: variáveis que podem conter uma.
Linguagem de Programação II
Estrutura de Dados Revisão Professor Luiz José Hoffmann Filho
Linguagem de Programação
Computação – Informática Aula N. 05 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Matrizes em C”
Fundamentos de Programação 1 Slides 11 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “ Struct, Union, Enum, Typedef ”
FUNÇÕES Dilvan Moreira (baseado em material de Z. Liang)
DHD – Desenvolvimento em Hardware
Transcrição da apresentação:

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

Sumário Estruturas Enumerações Typedef

Resumo dos tipos de dados

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.

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.

Estruturas Forma geral: struct tipo_da_estrutura { tipo_1 nome_1; ...... tipo_n nome_n; } variáveis_deste_tipo_de_estrutura; Opcional

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;

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;

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.

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”);

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 = 4921234; 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 = 31340230; return 0; }

Estruturas – Atribuição A atribuição pode ser feita campo a campo conforme exemplo anterior ficha.telefone = 4921234; 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 = 31340230; ficha2=ficha; }

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 = 3.1415; segunda = primeira; printf ("Os valores armazenados na segunda struct sao: %d e %f ", segunda.i, segunda.f); system ("pause"); return (0); }

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];

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!!

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) { ..... }

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!!!

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 !!!

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);

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).

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.

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

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);

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.

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;

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

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;