Professional Documents
Culture Documents
5 Tipos Estruturados
05/03/2014
Tpicos
Tipo estrutura
Definio de novos tipos
Aninhamento de estruturas
Vetores de estruturas
Vetores de ponteiros para estruturas
05/03/2014
Tipo Estrutura
Motivao:
manipulao de dados compostos ou estruturados
Exemplos:
Ponto
X
Y
Aluno
Nome
Matr
End
Rua
No
Compl
05/03/2014
Tipo Estrutura
Tipo estrutura:
tipo de dado com campos compostos de tipos mais simples
Tipo Estrutura
/* Captura e imprime as coordenadas de um ponto qualquer */
#include <stdio.h>
struct ponto {
Basta escrever &p.x em
float x;
lugar de &(p.x).
float y;
O operador de acesso
};
ao campo da estrutura
int main (void)
tem precedncia sobre o
{
operador endereo de
struct ponto p;
printf("Digite as coordenadas do ponto(x y): ");
scanf("%f %f", &p.x, &p.y);
printf("O ponto fornecido foi: (%.2f,%.2f)\n", p.x, p.y);
return 0;
}
05/03/2014
p.x
pp->x
&pp->x
struct ponto p;
struct ponto *pp=&p;
...
(*pp).x = 12.0;
/* formas equivalentes de acessar o valor de um campo x */
pp->x = 12.0;
p.x = 12.0;
(&p)->x = 12.0;
05/03/2014
Pilha de memria
struct ponto {
float x;
float y;
};
7020
7016
int main ( )
{
struct ponto p = { 10.,20};
struct ponto *pp=&p;
...
}
7012
7008
main
20
7004
10
7000
Qual o valor de ?
pp.x
05/03/2014
&(pp->y)
pp->x
p.y
(&p)->x
(c) Dept. Informtica - PUC-Rio
&((&p)->y)
&(p.y)
7
05/03/2014
05/03/2014
10
struct ponto* p;
p = (struct ponto*) malloc (sizeof(struct ponto));
...
p->x = 12.0;
...
free(p);
05/03/2014
11
12
ponto
05/03/2014
13
ponto
05/03/2014
14
struct ponto
05/03/2014
15
Aninhamento de Estruturas
Aninhamento de estruturas:
campos de uma estrutura podem ser outras estruturas
Exemplo:
definio de Crculo usando Ponto
struct circulo {
Ponto p;
float r;
};
/* centro do crculo */
/* raio do crculo */
05/03/2014
16
05/03/2014
17
#include <stdio.h>
#include <math.h>
typedef struct ponto {
float x;
float y;
} Ponto;
typedef struct circulo {
Ponto p;
/* centro do crculo */
float r;
/* raio do crculo */
} Circulo;
int main (void)
{ Circulo c;
Ponto p;
printf("Digite as coordenadas do centro e o raio do circulo:\n");
scanf("%f %f %f", &c.p.x, &c.p.y, &c.r);
printf("Digite as coordenadas do ponto:\n");
scanf("%f %f", &p.x, &p.y);
printf("Pertence ao interior = %d\n", interior(&c,&p));
return 0;
}
05/03/2014
18
Vetores de Estruturas
Exemplo:
funo para calcular o centro geomtrico de conjunto de pontos
entrada: vetor de estruturas definindo o conjunto de pontos
sada:
05/03/2014
19
Vetores de Estruturas
Ponto centro_geom (int n, Ponto* v)
{
int i;
Ponto p = {0.0f, 0.0f}; /* declara e inicializa ponto */
for (i=0; i<n; i++)
{
p.x += v[i].x;
p.y += v[i].y;
Como v um
}
vetor de
p.x /= n;
estruturas
p.y /= n;
return p;
}
20
Vetores de Estruturas
Exemplo:
funo para calcular a rea de um polgono plano
delimitado por uma seqncia de n pontos
a rea do polgono a soma das reas dos trapzios
formados pelos lados do polgono e o eixo x
a rea do trapzio definido pela aresta
que vai do ponto pi ao ponto pi+1 dada por:
a ( xi 1 xi )( yi 1 yi ) / 2
pi+1
pi
yi
yi+1
05/03/2014
xi+1
21
Vetores de Estruturas
float area (int n, Ponto* p)
{
int i, j;
float a = 0;
for (i=0; i<n; i++)
{
j = (i+1) % n;
/* prximo ndice (incremento circular) */
a += (p[ j ].x - p[ i ].x)*(p[ i ].y + p[ j ].y)/2;
}
return fabs(a);
}
fabs
funo definida em math.h
retorna o valor absoluto de um valor real
05/03/2014
22
05/03/2014
matrcula:
nmero inteiro
nome:
endereo:
telefone:
23
Soluo 1:
Aluno
estrutura ocupando 4+81+121+21 = 227 Bytes
tab
vetor de Aluno
representa um desperdcio significativo de memria,
se o nmero de alunos bem inferior ao mximo estimado
struct aluno {
int mat;
char nome[81];
char end[121];
char tel[21];
};
24
struct aluno {
int mat;
char nome[81];
char end[121];
char tel[21];
};
typedef struct aluno Aluno;
#define MAX 100
Aluno* tab[MAX];
05/03/2014
25
05/03/2014
26
27
05/03/2014
28
05/03/2014
29
05/03/2014
30
Programa de teste
#include <stdio.h>
05/03/2014
31
Resumo
struct
typedef
05/03/2014
32
Referncias
Waldemar Celes, Renato Cerqueira, Jos Lucas Rangel,
Introduo a Estruturas de Dados, Editora Campus
(2004)
Captulo 8 Tipos estruturados
05/03/2014
33