Você está na página 1de 28

Lgica de Programao

Estruturas de Dados Heterogneas

Prof. Vincius Breda

Estruturas Homogneas

At agora estudamos apenas estrutura


homogneas, ou seja, uma estrutura que
permite agrupar vrios dados de um mesmo
tipo em uma varivel. Essas estruturas
homogneas so chamadas de matrizes.

Estruturas Heterogneas

As estruturas heterogneas tambm servem


para agrupar vrios dados sob um nico nome,
porm estes dados podem ser de tipos
diferentes.
uma coleo de uma ou mais variveis de
diferentes tipos.

Ex: Podemos agrupar dados do tipo inteiro,


real e cadeia.

Chamaremos essas estruturas heterogneas


apenas de estruturas ou registros.

Estruturas

Imagine um programa em que deva ser


cadastrado o nome e as quatro notas de um aluno
de uma escola. Podemos criar a seguinte
Estrutura:
Cadastro de Notas Escolares
Nome: __________________
Primeira Nota: ____________
Segunda Nota: ____________
Terceira Nota: ____________
Quarta Nota: _____________

Sendo assim, a estrutura ser formada pelos campos:


Nome, Primeira Nota, Segunda Nota, Terceira Nota e
Quarta Nota. Podemos chamar esta estrutura de
Cad_Aluno.

Declarao de Estruturas

As estruturas devem ser declaradas antes das


variveis, pois pode ocorrer a necessidade de
declarar uma varivel como o tipo da estrutura
anteriormente declarada.
A declarao das estruturas em pseudocdigo
deve ser feita antes da palavra incio.
Nos diagramas de blocos no feita a declarao
das estruturas (assim como no feita a das
variveis), apenas ser feito meno a utilizao
de um determinado campo de uma estrutura.

Declarao de Estruturas
Estrutura <nome_da_estrutura>
<lista dos campos e seus tipos>
fim_estrutura
incio
Em C++: (deve ser declarado antes do main)
Struct <nome_da_estrutura> {
<lista dos campos e seus tipos>
};
int main() { .

Declarao de Estruturas Exemplo


Estrutura Cad_Aluno
Cadeia Nome;
Real Nota1, Nota2, Nota3, Nota4;
fim_estrutura
Em C++:
Struct Cad_Aluno {
String Nome;
Float Nota1, Nota2, Nota3, Nota4;
};

Declarao de Variveis do Tipo


da Estrutura

Aps a estrutura ter sido declarada, ela se


comporta como se fosse um novo tipo de varivel.
Ento podemos declarar variveis desse novo
tipo. Ex: baseando-se na estrutura Aluno
declarada anteriormente, podemos declarar a
seguinte varivel:
Pseudocdigo

Incio
Var Cad_Aluno Aluno;

C
Int main() {
Struct Cad_Aluno Aluno;

Nesse caso declaramos uma varivel do tipo Cad_Aluno. Em


Pseudocdigo a declarao de uma varivel do tipo de uma estrutura
heterognia igual a declarao para os tipos comuns. Em C devemos
preceder o tipo pela palavra Struct.

Acesso aos Campos de uma


Estrutura
Declarada uma varivel de um tipo de estrutura,
como a varivel Aluno do tipo Cad_Aluno, do
exemplo anterior, podemos acessar seus campos
atravs do nome da varivel e seu campo
correspondente separado por um caractere .
ponto. Ento
Aluno.Nome = Juca;
Aluno.Nota1 = 7.4;
Atribuem a cadeia Juca ao campo Nome, e o
valor 7.4 ao campo Nota1 da varivel Aluno.

Leitura e Escrita em Estruturas


A leitura e escrita nos campos das variveis do
tipo de estrutura ser feita de modo semelhante a
uma varivel comum.
Ex:
Leia(Aluno.Nome);
Escreva(Aluno.Nota1);
Primeiramente ser armazenado o que o usurio
digitar no campo Nome da varivel Aluno.
Posteriormente ser escrito na tela o valor do
campo Nota1 da varivel Aluno.

Declarao, Leitura e Escrita de


Estruturas Exemplo Diagrama de
Blocos
Incio
Aluno.Nome
Aluno.Nota1
Aluno.Nota2
Aluno.Nota3

Aluno.Nome
Aluno.Nota1
Aluno.Nota2
Aluno.Nota2
Aluno.Nota2

Aluno.Nota4

Fim

Declarao, Leitura e Escrita de


Estruturas Exemplo Pseudocdigo
Algortimo Exemplo
Estrutura Cad_Aluno
Cadeia Nome;
Real Nota1, Nota2, Nota3, Nota4;
fim_estrutura
Incio
Var Cad_Aluno Aluno;
Leia(Aluno.Nome);
Leia(Aluno.Nota1);
Leia(Aluno.Nota2);
Leia(Aluno.Nota3);
Leia(Aluno.Nota4);

Escreva(Aluno.Nome);
Escreva(Aluno.Nota1);
Escreva(Aluno.Nota2);
Escreva(Aluno.Nota3);
Escreva(Aluno.Nota3);
fim

Declarao, Leitura e Escrita de


Estruturas Exemplo C++
#include <stdio.h>
#include <stdlib.h>

int main( ) {
struct Cad_Aluno Aluno;

#include<iostream>
using std::cout;
using std::endl;
using std::cin;

getline(Aluno.Nome);
scanf(%f, &Aluno.Nota1);
scanf(%f, &Aluno.Nota2);
scanf(%f, &Aluno.Nota3);
scanf(%f, &Aluno.Nota4);

#include<string>
using std::string;
using std::getline;
Struct Cad_Aluno
{
string Nome;
float Nota1, Nota2, Nota3, Nota4;
};

cout << Aluno.Nome << endl;


cout << Aluno.Nota1 << endl;
cout << Aluno.Nota2 << endl;
cout << Aluno.Nota3 << endl;
cout << Aluno.Nota4 << endl;
return 0;
}

Estruturas com Matriz

Pode-se utilizar estruturas homogneas dentro


dos campos de uma estrutura heterognea, ou
seja, possvel declarar campos de uma estrutura
heterognea como sendo matrizes.
Utilizando o exemplo anterior da estrutura que
armazena as notas do aluno, poderamos criar um
vetor para armazenar as notas:
Estrutura Cad_Aluno
Cadeia Nome;
Real Notas[4];
fim_estrutura

Leitura de Estruturas com


Matriz

A leitura de uma Estrutura com Matriz efetuada


com a instruo Leia, geralmente dentro de um
lao de repetio.
Incio
Aluno.Nome
I = 0, I < 4, I=I+1

Aluno.Notas[I]

Fim

Leitura de Estruturas com


Matriz
Algortimo Leitura
Estrutura Cad_Aluno
Cadeia Nome;
Real Notas[4];
fim_estrutura
Incio
Var Cad_Aluno Aluno;
Inteiro I;
Leia(Aluno.Nome);
Para( I = 0, I<4, I = I+1) faa
Leia(Aluno.Notas[I]);
fim_para
fim

Escrita de Estruturas com


Matriz

A escrita de uma Estrutura com Matriz efetuada


com a instruo Escreva, de forma semelhante a
leitura.
Incio
Aluno.Nome
I = 0, I < 4, I=I+1
Aluno.Notas[I]

Fim

Escrita de Estruturas com


Matriz
Algortimo Escrita
Estrutura Cad_Aluno
Cadeia Nome;
Real Notas[4];
fim_estrutura
Incio
Var Cad_Aluno Aluno;
Inteiro I;
Escreva(Aluno.Nome);
Para( I = 0, I<4, I = I+1) faa
Escreva(Aluno.Notas[I]);
fim_para
fim

Matriz de Estruturas

Como j foi visto, podemos criar matrizes para


variveis de determinado tipo. O mesmo vlido
para estruturas heterognas, ou seja, aps ter
declarado uma estrutura, podemos declarar um
vetor ou matriz para aquele tipo de estrutura.
Ex: Supondo a estrutura Cad_Aluno dos
exemplos anteriores foi declarada e se deve
cadastrar 100 alunos. No precisamos de uma
varivel para cada aluno, mas apenas declarar um
vetor de tamanho 100.

Matriz de Estruturas
Algortimo Leitura
Estrutura Cad_Aluno
Cadeia Nome;
Real Notas[4];
fim_estrutura
Incio
Var Cad_Aluno Aluno[100];
...
fim

Leitura de um Vetor de
Estruturas

A leitura ser feita de forma semelhante s


formas anteriores. No entanto, sero
utilizados dois loopings, pois alm de
controlar a entrada das quatro notas de
cada aluno, necessrio controlar a entrada
dos 100 alunos. Esta estrutura bastante
similar a uma matriz de duas dimenses.

Leitura de um Vetor de
Estruturas
Incio
I = 0, I < 100, I=I+1
Aluno[I].Nome
J = 0, J < 4, J=J+1

Aluno[I].Notas[J]

Fim

Leitura de um Vetor de
Estruturas
Algortimo Leitura
Estrutura Cad_Aluno
Cadeia Nome;
Real Notas[4];
fim_estrutura
Incio
Var Cad_Aluno Aluno[100];
Inteiro I, J;
Para( I = 0, I<100, I = I+1) faa
Leia(Aluno[I].Nome);
Para( J = 0, J<4, J = J+1) faa
Leia(Aluno[I].Notas[J]);
fim_para
fim_para
fim

Escrita de um Vetor de
Estruturas

O processo de escrita de um Vetor de Estruturas


similar aos modos anteriores.
Incio
I = 0, I < 100, I=I+1
Aluno[I].Nome
J = 0, J < 4, J=J+1
Aluno[I].Nome[J]
Fim

Escrita de um Vetor de
Estruturas
Algortimo Escrita
Estrutura Cad_Aluno
Cadeia Nome;
Real Notas[4];
fim_estrutura
Incio
Var Cad_Aluno Aluno[100];
Inteiro I, J;
Para( I = 0, I<100, I = I+1) faa
Escreva(Aluno[I].Nome);
Para( J = 0, J<4, J = J+1) faa
Escreva(Aluno[I].Notas[J]);
fim_para
fim_para
fim

Exerccio de Aprendizagem 1
Efetuar a leitura das 4 notas bimestrais de 8 alunos,
apresentando no final os dados dos alunos
calssificados por nome.

Exerccio de Aprendizagem 2
Dever ser criado um programa que efetue a leitura de
uma tabela de cargos e salrios. Em seguida, o
programa dever solicitar que seja fornecido o cdigo
de um determinado cargo. Esse cdigo dever estar
entre 1 e 17. O operador do programa poder fazer
quantas consultas desejar. Sendo o cdigo vlido, o
programa dever apresentar o cargo e o respectivo
salrio. Caso seja o cdigo invlido, o programa deve
avisar o operador da ocorrncia.
Para dar entrada no cdigo de cargos/salrios, observe
a tabela seguinte:

Exerccio de Aprendizagem 2
Cdigo

Cargo

Salrio

Analista de Salrios

9.00

Auxiliar de Contabilidade

6.25

Chefe de Cobrana

8.04

Chefe de Expedio

8.58

Contador

15.60

Gerente de Diviso

22.90

Escriturrio

5.00

Faxineiro

3.20

Gerente Administrativo

10.30

10

Gerente Comercial

10.40

11

Gerente de Pessoal

10.29

12

Gerente de Treinamento

10.68

13

Gerente Financeiro

16.54

14

Contnuo

2.46

15

Operador de Micro

6.05

16

Programador

9.10