algoritmo 2 estrutura de dados

29
ALGORITMOS II Ricardo de Almeida ([email protected])

Upload: emanuelvasco

Post on 11-Sep-2015

8 views

Category:

Documents


0 download

DESCRIPTION

typedf

TRANSCRIPT

  • 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])