Métodos Computacionais. Tipos Estruturados

Documentos relacionados
Introdução a Programação. Ponteiros para Estruturas, Outros Tipos de Estruturas

Módulo 8 Tipos Estruturados

INF1007: Programação 2. 4 Tipos Estruturados. 10/23/09 (c) Dept. Informática - PUC-Rio 1

Introdução a Programação. Tipos Estruturados de Dados

INF 1007 Programação II

INF 1007 Programação II

8. Tipos estruturados

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

REVISÃO DE C. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

Estrutura de dados 2. Ponteiro. Prof. Jesuliana N. Ulysses

Tipos Estruturados. Tipos Estruturados

C Estruturas. Adriano Cruz 21 de julho de Instituto de Matemática Departamento de Ciência da Computação UFRJ

Computação Eletrônica. Aula 08 Estruturas de Dados. Prof: Luciano Barbosa. CIn.ufpe.br

Estruturas de Dados. Introdução Definição de Ponteiros Declaração de Ponteiros em C Manipulação de Ponteiros em C

Algoritmos e Estruturas de dados

Revisão: Ponteiros e Alocação Dinámica

Módulo 5 Vetores e Alocação Dinâmica

Aula 24 Ponteiros, vetores e structs

Tipos Básicos. Operadores de Incremento e Decremento. Operador Sizeof. Estruturas de Dados Aula 2: Estruturas Estáticas

Estruturas de Dados Aula 2: Estruturas Estáticas. Tipos Básicos. Quantos valores distintos podemos representar com o tipo char?

Estruturas de Dados Aula 2: Estruturas Estáticas 02/03/2011

ALGORITMOS E ESRUTRA DE DADOS I. Ponteiros Passagem por Valor e Referência Alocação de Memória

Ponteiros. Baseado nos slides do Prof. Mauro.

Estruturas de Dados. Profa. Juliana Pinheiro Campos

INF1007: Programação 2. 2 Alocação Dinâmica. 17/02/2014 (c) Dept. Informática - PUC-Rio 1

Aula 25: Alocação Dinâmica

Alocação de Memória. Lucas Ferrari de Oliveira Professor Adjunto Universidade Federal do Paraná (UFPR)

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

Introdução a Programação. Ponteiros e Vetores, Alocação Dinâmica

Algoritmos e Programação

Introdução à Computação

Alocação Dinâmica em C

A sintaxe para se declarar uma variável do tipo ponteiro é dada por:

ponteiros INF Programação I Prof. Roberto Azevedo

Estruturas. struct são coleções de dados heterogêneos agrupados em uma mesma estrutura de dados. Ex: armazenar as coordenadas (x,y) de um ponto:

Estrutura de dados 1. Ponteiros

INF 1620 P2-01/11/03 Questão 1 Nome:

Programação de Computadores II. Cap. 5 Alocação Dinâmica

C Estruturas. Section Summary. Adriano Cruz 1 de fevereiro de 2016

Ponteiros e Alocação de Memória

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica

INF 1620 P3-29/06/04 Questão 1 Nome:

Exercício. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal

Ponteiro. Ponteiro. Objetivo. Compreender a definição e dominar a implementação de ponteiros em C.

Ponteiros e Tabelas. K&R: Capítulo 5

5. Vetores e alocação dinâmica

MC-102 Aula 21 Registros

Ponteiros & tabelas (cont.) K&R: Capítulo 5

Métodos Computacionais. Vetores e Matrizes Dinâmicas

Métodos Computacionais. Operadores, Expressões Aritméticas e Entrada/Saída de Dados

PONTEIROS E LISTAS. Kalinka Regina Lucas Jaquie Castelo Branco

INF 1007 Programação II

Programação II. Vetores e Alocação Dinâmica. Bruno Feijó Dept. de Informática, PUC-Rio

O que é um apontador em C (type pointer in C)?

ESTRUTURA DE DADOS (TCC )

11a. Aula Ponteiros e Vetores

Programação II. Vetores e Alocação Dinâmica. Bruno Feijó Dept. de Informática, PUC-Rio

BCC202 - Estrutura de Dados I

Gilberto A. S. Segundo. 24 de agosto de 2011

Programação I Funções. Prof. Carlos Alberto

Métodos Computacionais. Funções, Escopo de Variáveis e Ponteiros

Computação Eletrônica. Struct (Estruturas)

INF 1620 P1-13/09/02 Questão 1 Nome:

Fundamentos de Programação

Estruturas. K&R: Capitulo 6. Estruturas IAED, 2014/2015. Introdução às Estruturas Estruturas e Funções Vectores de Estruturas Typedef Exemplo

SSC304 Introdução à Programação Para Engenharias. Ponteiros. GE4 Bio

Ponteiros. prof. Fabrício Olivetti de França

Apontadores/ponteiros

Exercícios. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal

Revisão para Prova 2. Mirella M. Moro

TÉCNICAS DE LINGUAGEM DE PROGRAMAÇÃO

Introdução a Linguagem C (Parte II) UFPA Sistemas de Informação. Roberto Araujo 2013

Princípios de Desenvolvimento de Algoritmos MAC122

19 Vetores, Ponteiros e Funções

a) Implemente uma função que retorne uma aproximação do valor de π, de acordo com a F órmula de Leibniz: ( 1)

Plano de Aula Segunda-feira Tarde 13/10/2014 Objetivo: Introduzir o conceito de alocação dinâmica na memória e registros / structs.

Algoritmos e Estruturas de Dados I 01/2013. Passagem de Parâmetros e Estruturas. Pedro O.S. Vaz de Melo

Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP. Alocação Dinâmica de Memória

Sumário. Introdução à Ciência da Computação. Ponteiros em C. Introdução. Definição. Por quê ponteiros são importantes?

Linguagem C. Ponteiros. Alex Vidigal Bastos.

Conceitos básicos. Computação eletrônica: Gurvan Huiban

INF 1620 P1-04/10/03 Questão 1 Nome:

Programação Estruturada

ESTRUTURA DE DADOS VARIÁVEIS E PONTEIROS

Estruturas (registros)

INF 1620 P2-14/10/05 Questão 1 Nome:

Introdução a Programação. Ponteiros e Passagem de Argumentos por Referência

Computação I - C Prova /10/ Profs. Adriano Cruz e Valeria Bastos

Linguagem de Programação

ALGORITMOS E ESTRUTURAS DE DADOS CES-11

Programação de Computadores II. Cap. 7 Cadeias de Caracteres

Alocação Dinâmica. Introdução à Computação

Aluno: Valor Nota Q1 3.0 Q2 2.5 Q3 2.5 Q4 2.0 Total 10.0

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: tipos de dados definidos pelo programador: struct union enum typedef

Instituto Federal de Educação, Ciência e Tecnologia do RN Câmpus Currais Novos. LINGUAGEM C++ VARIÁVEIS COMPOSTAS Arrays Aula I

Transcrição:

Métodos Computacionais Tipos Estruturados

Tipos Estruturados C oferece tipos primitivos que servem para representar valores simples Reais (float, double), inteiros (int), caracter (char) C oferece também mecanismos para estruturar dados complexos nos quais as informações são compostas por diversos campos Tipos Estruturados! 2

Tipos Estruturados Exemplo de um tipo estruturado: Considere um ponto representado por duas coordenadas: x e y Sem mecanismos para agrupar as duas coordenadas, teríamos: float x ; float y ; Uma estrutura em C serve para agrupar diversas variáveis dentro de um único contexto struct ponto { float x ; float y ; 3

Tipos Estruturado: Ponto A estrutura ponto passa a ser um tipo Então, podemos declarar uma variável deste tipo da seguinte forma: struct ponto p ; Elementos de uma estrutura são acessados via o operador de acesso (. ) Para acessar as coordenadas: p. x = 10.0 ; p. y = 5.0 ; 4

Utilizando otipo Estruturado Ponto */ programa que captura e imprime coordenadas*/ #include <stdio.h> struct ponto { float x ; float y ; ; Na declaração de variável, o tipo é struct ponto int main ( void ){ struct ponto p ; printf( \ndigite as coordenadas do ponto (x,y) ) ; scanf ( %f %f, &p.x, &p.y ) ; printf( O ponto fornecido foi:(%f,%f)\n,p.x, p.y); return 0 ; variávelpnão precisa de parênteses 5

Usando Ponteiro para Estruturas Ponteiro para estruturas Declaração da variável struct ponto *p ; p armazena o endereço para uma estrutura Para acessar os campos de uma estrutura por meio de um ponteiro, usa-se o operador (->): p -> x = 12.0 ; (*p).x = 12.0 p -> y = 10.0 ; Precisa de parênteses para variável p 6

Passagem de Estruturas para Funções Considere a função abaixo: void imprime ( struct ponto p ){ printf( O ponto fornecido foi:(%f,%f)\n,p.x,p.y); Valores da estrutura não podem ser modificados Cópia da estrutura na pilha não é eficiente. É mais conveniente passar apenas o ponteiro da estrutura 7

Passagem de Ponteiros para Estruturas para Funções Uma função para imprimir as coordenadas void imprime ( struct ponto* p ){ printf( O ponto fornecido foi:(%f,%f)\n,p->x,p->y); Uma função para ler as coordenadas void captura ( struct ponto *p ) { printf( Digite as coordenadas do ponto (x,y): ) ; scanf ( %f %f, &p->x, &p->y ) ; Permite modificar o valor da variável p 8

Usando Ponteiros para Estruturas int main ( ) { struct ponto p ; captura ( &p ) ; imprime ( &p ) ; return 0 ; Alocação dinâmica de estruturas struct ponto *p ; p =(struct ponto *)malloc ( sizeof ( struct ponto )); 9

Definição de novos tipos Usando typedef C permite criar nomes de tipos É útil para abreviar nomes de tipos ou tipos complexos Exemplo: typedef float Real ; Define um novo tipo Real Definição de nomes de tipos para estruturas struct ponto { float x ; float y ; ; typedef struct ponto PONTO ; Representa a estrutura ponto 10

Após a definição de novos tipos, pode-se declarar variáveis destes tipos PONTO p ; Usando typedef Pode-se definir uma estrutura e associar um nome de tipo a ela em um único comando typedef struct ponto { float x ; float y ; PONTO ; 11

Tipos Estruturados Mais Complexos Aninhamento de estruturas Campos de uma estrutura podem ser outras estruturas previamente definidas Exemplo: Considere a estrutura PONTO e a distância entre dois pontos (x1, y1) e (x2, y2) d = ( x y 2 2 2 x1 ) + ( y 2 1 ) float distancia ( PONTO *p, PONTO *q ){ float d = sqrt((q->x p->x )*(q->x p->x)+ (q->y p->y)*(q->y p->y)) ; return d ; 12

Tipos Estruturados Mais Complexos Como temos o tipo PONTO definido, então ele pode ser usado na definição da estrutura circulo struct circulo { PONTO p ; /* centro do circulo*/ float r ; ; /* raio do circulo*/ typedef struct circulo CIRCULO ; /* Determina se um dado ponto está no circulo int interior ( CIRCULO *c, PONTO *p ){ float d = distancia ( &c->p, p ) ; return ( d <= c->r ) ; Endereço do centro do círculo 13

Vetores de Estruturas Considere o cálculo de um centro geométrico de um conjunto de pontos x n xi = 1 e y = n i i= 1 = PONTO centrogeometrico ( int n, PONTO *v ){ int i ; PONTO p = { 0.0, 0.0 ; for ( i = 0 ; i < n ; i++ ){ p.x += v [ i ].x ; p.y += v [ i ].y ; p.x /= n ;p.y /= n ; return p ; n n y i Endereço inicial do vetor de pontos 14

Vetores de Estruturas A função centrogeometrico retorna uma estrutura PONTO centrogeometrico(int n,ponto* v); No entanto, não é conveniente retornar estruturas grandes Deve-se, quando possivel, escrever funções que retornem ponteiros para as estruturas 15

Vetores de Ponteiros para Estruturas São úteis quando temos de tratar um conjunto de elementos complexos Exemplo: Tabela de alunos Matricula: número inteiro ; Nome: cadeia com 80 caracteres ; Endereço: cadeia com 120 caracteres ; Telefone: cadeia com 20 caracteres ; Em C podemos representar aluno: struct aluno { int mat ; char nome [81] ; char end [121] ; char tel [ 21 ] ; ; typedef struct aluno ALUNO ; 16

Vetores de Ponteiros para Estruturas Se montarmos a tabela de alunos usando um vetor com um número máximo de alunos: #define MAX 100 ALUNO tab[max]; tab[i].mat =9912222; Tipo ALUNO ocupa pelo menos 227(=4+81+121+21) bytes Se for usado um número de alunos inferior ao máximo estimado, a declaração de um vetor dessa estrutura representa um desperdício significativo de memória Uma solução é: #define MAX 100 ALUNO* tab[max]; 17

Usando Vetores de Ponteiros para Estruturas #define MAX 100 struct aluno { int mat ; char nome [81]; char end [121] ; char tel [21] ; ; typedef struct aluno ALUNO; ALUNO *tab [ MAX ] ; void inicializa (int n,aluno **tab){ int i ; for(i=0 ;i< n;i++) tab [i] = NULL ; Todas as posições do vetor de ponteiros guardam endereços nulos 18

Usando Vetores de Ponteiros para Estruturas void preenche(int n,aluno **tab,int i ){ if ((i < 0) (i >= n)){ printf ( Indice fora do limite do vetor \n ); exit(1); if (tab[i] == NULL ){ tab[i]= ( ALUNO*) malloc (sizeof(aluno)); printf ( \nentre com a matricula: ); scanf ( %d, &tab[i]->mat) ; printf ( \nentre com o nome: ) ; scanf ( %80[^\n], tab[i]->nome) ; printf ( \nentre com o endereco: ) ; scanf ( %120[^\n], tab[i]->end) ; printf ( \nentre com o telefone: ) ; scanf ( %20[^\n], tab[i]->tel) ; Espaço alocado para um novo aluno e endereço é armazenado no vetor 19

Usando Vetores de Ponteiros para Estruturas void retira(int n,aluno** tab,int i ) { if ((i < 0) (i >= n)){ printf( Indice fora do limite do vetor\n ); exit (1); /* aborta o programa */ if (tab[i]!= NULL) { free(tab[i]); tab[i] = NULL; 20

Usando Vetores de Ponteiros para Estruturas void imprime(int n,aluno** tab,int i ){ if ((i < 0) (i >= n)){ printf ( Indice fora do limite do vetor \n ); exit (1) ; /* aborta o programa */ if (tab[i]!= NULL){ printf ( Matricula: %d\n,tab[i]->mat); printf ( Nome: %s\n,tab[i]->nome); printf ( Endereço: %s\n,tab[i]->end); printf ( Telefone: %s\n,tab[i]->tel); 21

Usando Vetores de Ponteiros para Estruturas void imprime_tudo(int n,aluno** tab){ int i; for(i = 0; i < n; i++) imprime(n,tab,i); 22

Usando Vetores de Ponteiros para Estruturas #include <stdio.h> int main(){ ALUNO *tab[10]; inicializa(10,tab); preenche(10,tab,0); preenche(10,tab,1); preenche(10,tab,2); imprime_tudo(10,tab); retira(10,tab,0); retira(10,tab,1); retira(10,tab,2); return 0 ; 23

Tipo Estruturado Union Armazena valores heterogêneos em um mesmo espaço de memória Apenas um único elemento de uma união pode estar armazenado em um determinado instante pois a atribuição a um campo da união sobrescreve o valor anteriormente atribuído a qualquer outro campo A definição de um tipo união é dada por: union exemplo { int i ; char c ; Declaração de uma variável deste tipo union exemplo v ; 24

Tipos Estruturado Union Outro exemplo de declaração de variável union exemplo { int i ; char c ; Ocupa o espaço necessário para union exemplo v2; armazenar o maior de seus campos que neste caso é um inteiro. Acesso aos elementos de uma união Diretamente ( Operador. ): v2.i = 10 ; Via um ponteiro (Operador -> ): union exemplo *v3 ; v3->c = x ; 25

Tipos Estruturado Enumeração É uma forma mais elegante de organizar constantes Considere a criação de um tipo booleano #define FALSE 0 #define TRUE 1 typedef int BOOL;/*pode armazenar qualquer inteiro*/ Criação de um tipo booleano usando o tipo enumeração enum bool { FALSE,/*O valor 0 é atribuído a FALSE */ TRUE /*O valor 1 é atribuído a TRUE */ ; typedef enum bool BOOL ; 26

Tipos Estruturado Enumeração Criação de um tipo booleano usando o tipo enumeração (Cont.) Os valores são atribuídos conforme a ordem em que os elementos são definidos em uma enumeração enum bool { TRUE = 1, /*O valor 1 é atribuído a TRUE */ FALSE = 0 /*O valor 0 é atribuído a FALSE */ ; typedef enum bool BOOL ; BOOL result ; Declara uma variável do tipo BOOL 27