algoritmo 2 estrutura de dados
DESCRIPTION
typedfTRANSCRIPT
-
ALGORITMOS II
Ricardo de Almeida ([email protected])
-
1. Relembrando...
2. Tipos Estruturados
3. Definio de Novos Tipos
4. Vetores de Estruturas
5. Exerccios de Fixao
6. Reviso
Agenda
-
Quais pontos foram vistos no bimestre anterior?
Estruturas Sequenciais.
Estruturas de Deciso.
Estruturas de Repetio.
Variveis Indexadas Unidimensionais (Vetores).
Variveis Indexadas Bidimensionais (Matrizes).
Caracteres.
Relembrando...
-
Tipos Estruturados
Tipo Estrutura
Vimos inmeras aplicaes onde so necessrios conjuntos de
elementos do mesmo tipo, e para tal utilizamos os vetores e as
matrizes.
No entanto em alguns problemas h necessidade de definirmos
conjuntos onde os elementos no sejam do mesmo tipo.
O registro um conjunto de dados logicamente relacionados e
uma das principais estruturas de dados.
Um registro consiste em trabalhar vrios dados de tipos diferentes
em uma mesma estrutura e por isso considerado heterogneo.
-
Tipos Estruturados
Tipo Estrutura
Na linguagem C, existem os tipos bsicos (char, int, float, etc.) e
seus respectivos ponteiros que podem ser usados na declarao
de variveis.
Para estruturar dados complexos, nos quais as informaes so
compostas por diversos campos, necessitamos de mecanismos
que nos permitam agrupar tipos distintos.
Nesta unidade, apresentaremos estes mecanismos fundamentais
da linguagem C para a estruturao de tipos, usando os tipos
bsicos e seus respectivos ponteiros.
-
Definio do Tipo Estrutura
Exemplos de manipulao de dados compostos ou estruturados:
Ponto no espao bidimensional representado por duas
coordenadas (x e y) mas tratado como um nico objeto (ou tipo).
Dados associados a aluno; onde o aluno representado pelo seu
nome, nmero de matrcula, endereo, etc., estruturados em um
nico objeto (ou tipo).
Tipos Estruturados
-
Definio do Tipo Estrutura
O exemplo abaixo define um registro com trs campos que pode
ser usado para armazenar datas:
uma boa ideia dar um nome, ou seja nomear a esta estrutura
de dados, ou a esse registro, dma parece um nome apropriado:
Tipos Estruturados
struct { int dia; int mes; int ano; };
struct dma { int dia; int mes; int ano; };
-
Declarao do Tipo Estrutura
O exemplo abaixo declara uma estrutura j definida
anteriormente, somente aps a definio possvel declar-la.
E como ficaria se eu invertesse essa ordem???
Tipos Estruturados
struct dma { int dia; int mes; int ano; }; struct dma data;
struct dma data; struct dma { int dia; int mes; int ano; };
-
Inicializao do Tipo Estrutura
Para inicializar os membros das variveis do tipo estrutura
anteriormente definido e declarado visto a seguir:
Elemento acessado atravs do operador de acesso ponto (.)
Tipos Estruturados
struct dma { /* definio da estrutura */ int dia; int mes; int ano; }; struct dma data; /* declarao da estrutura */ data.dia = 23; /* inicializao das variveis da estrutura */ data.mes = 5; data.ano = 2015;
-
Exemplo 3.1: Manipulao do Tipo Estrutura.
#include #include struct dma { /* definio da estrutura */ int dia; int mes; int ano; }; int main (void) { struct dma data; /* declarao da estrutura */ data.dia = 23; /* inicializao das variveis da estrutura */ data.mes = 5; data.ano = 2015; printf("A data de hoje: %i/%i/%i\n", data.dia, data.mes, data.ano); system ("PAUSE"); return 0; }
Tipos Estruturados
-
Exemplo 3.2: Leitura dos Dados do Tipo Estrutura.
#include #include struct dma { /* definio da estrutura */ int dia; int mes; int ano; }; int main (void) { struct dma data; /* declarao da estrutura */ printf("Digite a data de hoje: "); /* leitura das variveis da estrutura */ scanf("%i %i %i", &data.dia, &data.mes, &data.ano); printf("A data de hoje: %i/%i/%i\n", data.dia, data.mes, data.ano); system ("PAUSE"); return 0; }
Tipos Estruturados
-
Exemplo 3.3: Novo Dado do Tipo Estrutura.
#include #include struct dma { /* definio da estrutura */ int dia; int mes; int ano; char bisexto; }; int main (void) { struct dma data; /* declarao da estrutura */ data.dia = 23; /* inicializao das variveis da estrutura */ data.mes = 5; data.ano = 2015; data.bisexto = 'N'; printf("A data de hoje: %i/%i/%i\n", data.dia, data.mes, data.ano); printf("O ano bisexto: %c\n", data.bisexto); system ("PAUSE"); return 0; }
Tipos Estruturados
-
typedef
O comando typedef permite ao programador definir um novo
nome para um determinado tipo. Sua forma geral:
typedef ;
Como exemplo vamos dar o nome de inteiro para o tipo int e o
nome de real para o tipo float:
Definio de Novos Tipos
... int main (void) { typedef int Inteiro; typedef float Real; ...
-
typedef
Permite criar nomes de tipos ou variveis mnemnicas.
til para abreviar nomes de tipos e para tratar tipos complexos.
UChar o tipo char sem sinal.
PInt um tipo ponteiro para int.
Vetor um tipo que representa um vetor de quatro elementos.
typedef unsigned char UChar;
typedef int* PInt;
typedef float Vetor[4];
Vetor v; /* exemplo de declarao usando Vetor */ ... v[0] = 3;
Definio de Novos Tipos
-
typedef
Definio de nomes de tipos para as estruturas:
ponto representa uma estrutura com 2 campos do tipo float.
Ponto representa a estrutura ponto.
PPonto representa o tipo ponteiro para a estrutura Ponto.
struct ponto {
float x;
float y;
};
typedef struct ponto Ponto;
typedef struct ponto *PPonto;
Definio de Novos Tipos
-
typedef
Definio de nomes utilizando um s typedef:
ponto representa uma estrutura com 2 campos do tipo float.
Ponto representa a estrutura ponto.
PPonto representa o tipo ponteiro para a estrutura Ponto.
struct ponto {
float x;
float y;
};
typedef struct ponto Ponto, *PPonto;
Definio de Novos Tipos
-
typedef
Definio de nomes em um s comando typedef:
ponto representa uma estrutura com 2 campos do tipo float.
Ponto representa a estrutura ponto.
comum os programadores de C usarem nomes com as
primeiras letras maisculas na definio de tipos.
Isso no uma obrigatoriedade, apenas um estilo de codificao.
typedef struct ponto {
float x;
float y;
} Ponto;
Definio de Novos Tipos
-
Aninhamento de Estruturas
Os campos de uma estrutura podem ser outras estruturas
previamente definidas. Ex.: Definio de Crculo usando Ponto:
struct ponto { float x; float y; }; typedef struct ponto Ponto;
struct circulo { float x, y; /* centro do crculo */ float r; /* raio do crculo */ }; typedef struct circulo Circulo;
struct circulo { Ponto p; /* centro do crculo */ float r; /* raio do crculo */ }; typedef struct circulo Circulo;
Aninhamento de Estruturas
-
Ex. 3.4 - Programa que verifica se um determinado ponto est
dentro ou fora do crculo.
#include #include #include typedef struct ponto { int x; int y; } Ponto; typedef struct circulo { Ponto p; /* centro do crculo */ int r; /* raio do crculo */ } Circulo; int main (void) { Circulo c; Ponto q; int d;
Aninhamento de Estruturas
-
Aninhamento de Estruturas
printf("Digite as coordenadas do centro e o raio do circulo:\n");
scanf("%i %i %i", &c.p.x, &c.p.y, &c.r);
printf("Digite as coordenadas do ponto:\n");
scanf("%i %i", &p.x, &p.y);
d = sqrt((c.p.x - q.x)*(c.p.x - q.x) + (c.p.y - q.y)*(c.p.y - q.y));
if (d < c.r)
printf(" O ponto (%i , %i) pertence ao circulo!\n", q.x, q.y);
else
printf(" O ponto (%i , %i) NAO pertence ao circulo!\n", q.x, q.y);
system ("PAUSE");
return 0;
}
clculo da distncia: sqrt da biblioteca math.h
-
Vetores de Estruturas
Vetores de Estruturas
Vetores onde os elementos so estruturas podem ser declarados
da mesma forma que outros tipos de vetores j estudados.
A inicializao pode ser feita delimitando-se o contedo do vetor
entre um par de chaves , assim como o contedo a ser atribudo a
cada posio do vetor. O valor para cada um dos membros deve
ser colocados na ordem de declarao, separados por vrgula.
Para acessar um vetor de estruturas, deve-se colocar o ndice,
entre colchetes, logo direita do nome do vetor, antes do ponto.
-
Exemplo 3.5: Cadastro de Aluno
#include #include #define TAM_VET 4 // Declara o Tipo de Estrutura Data typedef struct data { int dia, mes, ano; } Data; // Declara o Tipo de Estrutura Cad_aluno typedef struct aluno{ int matricula; char nome[30]; Data nascimento; } Cad_aluno; int main(void) { Cad_aluno turma[TAM_VET] = {{9991, "Fulano", {10,5,1982}}, {9992, "Cicrano", {23,8,1983}}, {9993, "Beltrano", {14,1,1981}}, {9994, "Individuo", {2,10,1983}}};
Vetores de Estruturas
- // Declarao das variveis locais int i, achou, m; char escolha; do{ printf("Digite uma Matricula: "); scanf("%d", &m); achou = 0; // Busca a matrcula nos registros for (i=0; i
-
// Apresenta a situao da Busca if (achou==0) printf("Nao Encontrado\n"); // Verifica a possibilidade de mudana printf("\nDeseja Continuar a Busca? [S/N]: "); scanf(" %c",&escolha); } while(escolha=='S' || escolha=='s');
system ("PAUSE");
return 0;
}
Vetores de Estruturas
-
E como seria para trabalharmos com Modularizao? o que veremos na prxima aula, quando discutirmos:
Ponteiros
Funes
Tipos Estruturados
-
Exerccios Prticos de Fixao
-
Exerccios
1 Elabore um algoritmo para ler idade e altura de 15 atletas de
uma equipe, calcular a mdia das idades e das alturas, e
finalmente, exibir os dados lidos e as duas mdias calculadas.
2 Escreva um algoritmo que crie uma estrutura para armazenar
as informaes dos alunos, cujos campos so: matricula, nome e
4 notas. O algoritmo deve efetuar a leitura das 4 notas bimestrais
de 8 alunos e calcular a mdia das notas.
3 Escreva um algoritmo que defina um registro para representar
uma operao matemtica. O registro deve armazenar dois
nmeros e um smbolo, que pode ser: + (adio), - (subtrao), *
(multiplicao), / (diviso), ^ (potenciao).
Exerccios Prticos de Fixao
-
Reviso
Quais pontos foram vistos nesta aula?
Tipos Estruturados
Definio de Novos Tipos
Vetores de Estruturas
-
ALGORITMOS II
Ricardo de Almeida ([email protected])