LPG-I: Tipos Complexos - Estruturas

Slides:



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

Linguagem de Programação VI Tipos de Dados Compostos - structs
Construção de Algoritmos AULA 07
Construção de Algoritmos Professor: Aquiles Burlamaqui Construção de Algoritmos AULA 07 Aquiles Burlamaqui UERN
TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS ESTRUTURAS DE DADOS AVANÇADAS Aula /08/2011 Professor Leomir J. Borba-
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
Programação II Estruturas de Dados
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 C LPG-I – Variáveis Estruturadas – Vetores
LPG - I: Alocação Dinâmica de Memória - Ponteiros
AULA – Linguagem C – Vetores, Ponteiros Estruturas
Algoritmos Escher.
AULA – Linguagem C – Vetores, Ponteiros e Estruturas
LPG - I: Ponteiros e Vetores/Matrizes UDESC - SBS
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.
Universidade de Brasília
Linguagem C Strings.
Estruturas de Dados Heterogêneas (struct)
Vetores, Matrizes e Funções
Estruturas de Dados Heterogêneas (struct)
Matrizes e Funções - Continuação
Fundamentos de Programação 1
Ponteiros.
Escola Secundária c/ 3º CEB da Batalha
1MF. Vectores Tipo de dado usado para representar um CONJUNTO de dados do um mesmo tipo Estrutura de dados homogénea unidimensional Ex: Ler a nota de 3.
Escola Secundária c/ 3º CEB da Batalha
Listas Encadeadas.
Revisão da Linguagem C.
Apontadores ou Ponteiros
Vamos agora aprender a utilizar estruturas.
O Portal do Estudante de Computação
Vetor de Ponteiros Exemplo de Alocação. Escrever Vetor de Vetores de floats int main() { int i, k, n; float **vetor; // vetor de vetores int *tamanho;
APRESENTAÇÃO: GIANCARLO DE GUSMÃO GONÇALVES CURSO DE C AULA 08: Tipos Estruturados.
Definição de Tipos Estruturas e Ponteiros
Construção de Algoritmos Professor: Aquiles Burlamaqui Construção de Algoritmos AULA 07 Aquiles Burlamaqui UERN
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
Argumentos por valor Passagem de valor da variável indicada Não permite alteração de variável indicada Exemplo: int quadrado_de(int ); //protótipo int.
Seminário 1: Revisão de C
UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS
Prof. Ricardo Santos PONTEIROS
Curso de C/C++ Aula 2 Instrutor: Luiz Felipe Sotero
Introdução à Programação Orientada a Objetos com Java Paulo Borba Centro de Informática Universidade Federal de Pernambuco Programação Imperativa (e Ponteiros.
Leandro Almeida  Parâmetros são utilizados em computação para possibilitar a construção de subprogramas genéricos.
Estruturas (struct) Marco Antonio Montebello Júnior Estruturas de Dados.
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
Estruturas de Dados Aula 7: Tipos Estruturados 23/04/2014.
Joaquim José Hangalo  Podemos entender a memória do computador como um conjunto de células que armazenam informações.  Cada célula.
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: _01.
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo IX Subprogramação e Recursividade.
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: _01.
Algoritmos e Programação MC102 Prof. Paulo Miranda IC-UNICAMP Aula 15 Ponteiros.
Estrutura de Dados Revisão Professor Luiz José Hoffmann Filho
Linguagem de Programação
USP – ICMC – SSC SSC0300 2º Semestre 2015 Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Eletrônica ] 1 Prof. Dr. Daniel Rodrigo.
Estrutura de Dados STRUCTS Dilvan Moreira. Objetivos  Entender o que são e como usar:  Estrutura de Dados para a Linguagem C  Structs (Registros)
FUNÇÕES Dilvan Moreira (baseado em material de Z. Liang)
Transcrição da apresentação:

LPG-I: Tipos Complexos - Estruturas UDESC - SBS Departamento de Sistemas de Informação LPG-I: Tipos Complexos - Estruturas Prof. Flavio Marcello Strelow flavio@sbs.udesc.br

Estruturas Tipos básicos: char, int, float, etc. Variáveis guardam um só valor.  Matrizes: char matriz[20] Variáveis guardam coleções de objetos do mesmo tipo.  Como guardar coleções de tipos diversos?

Estruturas Em C, uma Estrutura (Struct )é uma coleção de variáveis referênciadas por um nome. As variáveis que formam a estrutura são chamadas membros/elementos da estrutura. Ex: Nome, endereço e telefone são membros de uma agenda. Structs Podem conter: Informações diversas sobre numa única entidade. Matrizes (e vice-versa). Outras estruturas.

Declaração Formato da declaração: struct nome_da_estrutura { tipo_1 dado_1; tipo_2 dado_2; ... tipo_n dado_n; } lista_de_variaveis; A estrutura pode agrupar um número arbitrário de dados de tipos diferentes Pode-se nomear a estrutura para referência-la

Estruturas Declaração: a estrutura contém 2 variáveis char e uma int; struct agenda { char nome[30]; char endereco [50]; int cep; } pessoa1, pessoa2; // ou struct agenda pessoa1, pessoa2; a estrutura contém 2 variáveis char e uma int; pessoa1 e pessoa2 são duas variáveis tipo struct contendo 3 dados cada.

Nomeando uma Estrutura struct { int x; int y; } p1; } p2; struct ponto define um novo tipo de dado struct ponto { int x; int y; }; struct ponto p1, p2; Repetição Pode-se definir novas variáveis do tipo ponto

Estruturas Para ter acesso aos dados: Ex: nome_struct.nome_do_elemento p1.x = 10; /*atribuição */ p2.y = 15; if (p1.x >= p2.x) && (p1.y >= p2.y) ...

Atribuição de Estruturas Inicialização de uma estrutura: struct ponto p1 = { 220, 110 }; Atribuição entre estruturas do mesmo tipo: struct ponto p2; p2 = p1; /* p2.x = p1.x e p2.y = p1.y */ Os campos correspondentes das estruturas são automaticamente copiados do destino para a fonte.

Atribuição de Estruturas Atenção para estruturas que contenham ponteiros: struct aluno { char *nome; int idade; } a1, a2; a1.nome = "Afranio"; a1.idade = 32; a2 = a1; Agora a1 e a2 apontam para o mesmo string nome: a1.nome == a2.nome == "Afranio"

Composição de Estruturas // estrurura ponto struct ponto { int x; int y; }; struct ponto p1, p2; struct retangulo { struct ponto inicio; struct ponto fim; }; struct retangulo r = { { 10, 20 }, { 30 , 40 } }; Acesso aos dados: r.inicio.x += 10; r.inicio.y -= 10;

Estruturas como parâmetros struct ponto cria_ponto (int , int ) ; //protótipo main () { struct ponto p = cria_ponto(10, 20); } struct ponto cria_ponto (int x, int y) { struct ponto tmp; tmp.x = x; tmp.y = y; return tmp;

Operações operações entre membros das estruturas devem ser feitas membro a membro: /* retorna uma cópia de p1 = p1 + p2 */ struct soma_pts (struct ponto p1, struct ponto p2) { p1.x += p2.x; p1.y += p2.y; return p1; /* retorna uma copia de p1 */ }

Ponteiros para Estruturas estruturas grandes são passadas como parâmetro de forma mais eficiente através de ponteiros struct ponto *pp; struct ponto p1 = { 10, 20 }; pp = &p1; printf("Ponto P1: (%d %d)\n", (*pp).x, (*pp).y}; acesso via operador "->": printf("Ponto P1: (%d %d)\n", pp->x, pp->y};

Vetor de Estruturas struct ponto arp[10]; /* cria um array de 10 pontos */ arp[1].x = 5; /*atribui 5 a coordenada x do 2º ponto */ struct jogador { char *nome; int idade; }; struct jogador Brasil[11] = { "Felix", 32, "Carlos Alberto", 24, ...

Espaço Ocupado por uma Estrutura struct aluno { char *nome; /* ponteiro 4 bytes */ short idade; /* 2 bytes */ char matricula[8]; /* array 8 bytes */ }; struct aluno al; al.nome = "Xexeo"; al.idade = 30; strcpy(al.matricula, "00/0001");

Espaço Efetivo struct aluno { char *nome; /* 4 bytes */ short idade; /* 2 bytes */ char matricula[3]; /* 3 bytes */ }; /* sizeof(aluno) = 9 bytes */

Espaço Efetivo struct aluno1 { char *nome; /* 4 bytes */ short idade; /* 2 bytes */ char matricula[5]; /* 5 bytes */ }; /* sizeof(aluno1) = 11 bytes */

Espaço Efetivo struct aluno2 { char *nome; /* 4 bytes */ short idade; /* 2 bytes */ char matricula[7]; /* 7 bytes */ }; /* sizeof(aluno2) = 13 bytes */

Exemplo Escrever a definição da estrutura agenda globalmente. Seja a estrutura para descrever uma agenda de endereços, contendo os seguintes campos: nome: string de tamanho 30 idade: inteiro telefone: string de tamanho 10 Escrever a definição da estrutura agenda globalmente. Ler UM registro.

Solução #include <stdio.h> #include <stdlib.h> struct agenda { char nome[30]; int idade; char telefone[10]; }; void main() { struct agenda Dagenda; printf("\n Digite Nome : "); scanf("%s", Dagenda.nome); printf("\n Digite Idade : "); scanf("%i", &Dagenda.idade); printf("\n Digite Telefone : "); scanf("%s", Dagenda.telefone); // A impressão dos dados não era necessária. printf("\n Nome : %s", Dagenda.nome); printf("\n Endereco : %i", Dagenda.idade); printf("\n Telefone : %s", Dagenda.telefone); printf("\n\n"); }

OBRIGADO