• Nenhum resultado encontrado

Aula Teórica 16: Estruturas de Dados Heterogêneas

N/A
N/A
Protected

Academic year: 2021

Share "Aula Teórica 16: Estruturas de Dados Heterogêneas"

Copied!
20
0
0

Texto

(1)

Aula Teórica 16:

Estruturas de Dados

Heterogêneas

Material Didático Unificado

Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Programação de Computadores I - BCC 701 www.decom.ufop.br/bcc701 2014-1 1

Agenda

• Introdução • Struct • List • Cell

• Leitura de Planilhas do Excel

(2)

Introdução

• Problema exemplo:

• Suponha que você deseje armazenar os dados (nome, matrícula, endereço, data de nascimento e coeficiente de rendimento) dos 400 alunos matriculados em BCC 701.

• Possível solução:

• Seu programa poderia armazenar um vetor para cada dado do problema.

• Porém, manipular de forma adequada os vetores, mantendo

seus dados consistentes, se torna trabalhoso. Podemos resolver problemas dessa natureza agrupando os dados relacionados em uma única variável. Isso é possível através da utilização de Variáveis Compostas Heterogêneas.

3

Introdução

• Problema exemplo:

• Suponha que você deseje armazenar os dados (nome, matrícula, endereço, data de nascimento e coeficiente de rendimento) dos 400 alunos matriculados em BCC 701.

• Possível solução:

• Seu programa poderia armazenar um vetor para cada dado do problema.

• Porém, manipular de forma adequada os vetores, mantendo

seus dados consistentes, se torna trabalhoso. Podemos resolver problemas dessa natureza agrupando os dados relacionados em uma única variável. Isso é possível através da utilização de Variáveis Compostas Heterogêneas.

4 for i = 1 : 400

nome(i) = input(“Digite o nome do aluno: ”); matricula(i) = input(“Digite a matricula do aluno: ”); endereco(i) = input(“Digite o endereço do aluno: ”); data(i) = input(“Digite a data de nascimento do aluno: ”); coef(i) = input(“Digite o coeficiente do aluno: ”); end

(3)

Introdução

• Problema exemplo:

• Suponha que você deseje armazenar os dados (nome, matrícula, endereço, data de nascimento e coeficiente de rendimento) dos 400 alunos matriculados em BCC 701.

• Possível solução:

• Seu programa poderia armazenar um vetor para cada dado do problema.

• Porém, manipular de forma adequada os vetores, mantendo

seus dados consistentes, se torna trabalhoso. Podemos resolver problemas dessa natureza agrupando os dados relacionados em uma única variável. Isso é possível através da utilização de Variáveis Compostas Heterogêneas.

5

Introdução

• Variáveis Compostas Heterogêneas (Estruturas Heterogêneas):

• São variáveis que podem armazenar um conjunto de informações de tipos diferentes (números inteiros, números reais, strings, vetores, matrizes, etc.) em uma mesma estrutura.

• Tipos que serão tratados nessa aula:

• Registro (struct)

• Lista (list)

• Célula (cell)

(4)

Struct

7

Struct

• Em alguns problemas há necessidade de definirmos conjuntos onde elementos não sejam do mesmo tipo.

• No exemplo anterior armazenamos as informações dos alunos de BCC 701:

• Nome (conjunto de caracteres)

• Matrícula (número inteiro)

• Endereço (conjunto de caracteres)

• Data de nascimento (conjunto de caracteres)

• Coeficiente de rendimento (número real)

• Uma alternativa à utilização de um vetor para cada dado é a utilização de um registro (struct). Um registro agrupa todas as informações necessárias para representar um conjunto,

(5)

Struct

• A forma padrão para a criação de um registro em Scilab é: -->reg = struct(campo1, valor1, campo2, valor2, ..., campon, valorn);

• Essa função retorna um registro com campos de nomes

campo1, campo2, ..., campon e valores correspondentes valor1, valor2, ..., valorn.

9 Cada variável campo representa um

nome para um dado (informação) do registro e cada variável valor representa o valor para esse dado.

Cada dupla (campo, valor) está associada a uma informação do

conjunto.

Struct

• Criando uma estrutura (registro) para armazenar as informações de um aluno:

-->aluno = struct("nome", "Jose da Silva", "matricula", 2014001, "endereco", "Rua Alfa 15", "nasc", "10/01/1995", "coef", 8.7) aluno =

nome: "Jose da Silva" matricula: 2014001 endereco: "Rua Alfa 15" nasc: "10/01/1995" coef: 8.7

(6)

Struct

• Para acessar um valor de um campo do registro, usamos o nome da variável seguido por um ponto e o nome do campo:

-->aluno.coef ans =

8.7

• Para alterar um valor de um campo: -->aluno.endereco = "Rua Beta 35" aluno =

nome: "Jose da Silva" matricula: 2014001 endereco: "Rua Beta 35" nasc: "10/01/1995" coef: 8.7 11 Acessando o campo do coeficiente de rendimento do aluno.

Struct

• Inserindo um campo no registro: -->aluno.cpf = "123.456.789-00" aluno =

nome: "Jose da Silva" matricula: 2014001 endereco: "Rua Beta 35" nasc: "10/01/1995" coef: 8.7

cpf: "123.456.789-00"

12 Nesse exemplo é criado

um campo para representar o CPF do aluno. A criação é feita da

mesma forma que a alteração de um valor de

um campo. Se o campo acessado não existe, ele é

(7)

Struct

• Criando um vetor de registros:

-->aluno1 = struct("nome", "Jose da Silva", "coef", 7.9); -->alunos(1) = aluno1;

-->aluno2 = struct("nome", "Maria", "coef", 8.3); -->alunos(2) = aluno2;

-->aluno3 = struct("nome", "Joao", "coef", 6.4); -->alunos(3) = aluno3;

-->alunos alunos =

3x1 struct array with fields: nome

coef

13 Cria um vetor de alunos com campos nome e coeficiente de rendimento. A criação e manipulação é feita da

mesma forma vista na aula de vetores.

Struct

• Acessando elementos do vetor de registros: -->alunos.nome ans = ans(1) Jose da Silva ans(2) Maria ans(3) Joao

• Acessando elementos por índice: -->alunos(2).nome

ans = Maria

14 Retorna todos os valores

do campo nome, armazenados no vetor

(8)

Struct - Exemplo

• Crie um programa que armazene os dados (nome, matrícula,

endereço, data de nascimento e coeficiente de rendimento) de 10 alunos de uma turma. O programa deve calcular a média dos coeficientes dos alunos. Em seguida, o programa deve mostrar o nome e coeficiente de rendimento dos alunos que estão com coeficiente abaixo da média da turma.

15

Struct - Exemplo

(9)

List

17

List

• Uma lista é um conjunto de dados não necessariamente do mesmo tipo:

• Matrizes, listas, tipos primitivos, etc.

• São úteis para definir dados estruturados:

• Dados que possuam uma série de informações que devem ser armazenadas.

Uma lista é definida no Scilab pelo comando list, que possui a seguinte forma geral:

list(a1, a2, ... , an)

Onde a1, a2, ... , an são elementos da lista.

(10)

List

• Uma lista é um conjunto de dados não necessariamente do mesmo tipo:

• Matrizes, listas, tipos primitivos, etc.

• São úteis para definir dados estruturados:

• Dados que possuam uma série de informações que devem ser armazenadas.

Uma lista é definida no Scilab pelo comando list, que possui a seguinte forma geral:

list(a1, a2, ... , an)

Onde a1, a2, ... , an são elementos da lista.

19 Dados de um aluno (Nome, matrícula,

endereço, etc.), livro (Título, Autores, Ano, Editora, Volume, etc.), funcionários (Nome, Endereço, Data de Nascimento, Cargo, Data

de admissão, salário, etc.)

List

• Criando uma lista:

-->nome = “Fulano”; -->matricula = 12345; -->notas = [ 8.7 9.2 7.5 10 ];

-->lista = list(nome, matricula, notas);

• Uma vez criada, é possível acessar o i-ésimo elemento da lista:

-->lista(1) ans = Fulano -->lista(2) ans = 12345. -->lista(3) ans = 8.7 9.2 7.5 10. -->lista(3)(2) 20

O acesso aos elementos é feito de forma similar a um vetor.

O terceiro elemento da lista é um vetor de 4 posições. Nesse exemplo é acessada a segunda posição do terceiro

(11)

List

• Da mesma forma, é possível atribuir valores aos elementos da lista: -->lista(2) = 54321 lista = lista(1) Fulano lista(2) 54321. lista(3) 8.7 9.2 7.5 10.

• O número de elementos em uma lista pode ser obtido com a função

size: -->size(lista) ans = 3. 21 Resultado da atribuição do número 54321 ao segundo elemento da lista. Retorna um único inteiro, que representa o tamanho da lista.

List

• É possível percorrer os elementos de uma lista através de um laço de repetição: for i = 1 : size(lista) elem = lista(i); printf("Elemento #%g: ", i); disp(elem); end • De forma direta:

for elem = lista disp(elem); end

22 A cada iteração, o valor de

elemé alterado para o próximo elemento da lista. Essa forma elimina o uso de

(12)

List

• Uma lista permite a inserção de elementos dinamicamente, inserindo elementos no final:

-->lista($+1) = "30/06/2014"; -->lista($+1) = sum(lista(3));

23 ($+1) indica que um elemento

será inserido ao final da lista. Se a lista possuía tamanho 3, agora ela terá tamanho 4. O último elemento (índice 4) será definido

pelo valor da expressão do lado direito da igualdade.

List - Exemplo

• Codifique um programa para manipular os dados dos alunos de uma turma. Para isso, o programa deve pedir ao usuário a quantidade de alunos da turma e depois deve preencher uma lista com os números de matrículas dos alunos e suas

respectivas notas finais. O programa deve informar as matrículas de todos os alunos que obtiveram nota acima da média da turma. Não é necessário validar os dados.

• Dica: cada dupla (matrícula, nota) também pode ser representada por uma lista.

(13)

List - Exemplo

25

(14)

Cell

• Uma célula é um tipo de variável que permite armazenar matrizes de naturezas diferentes em uma única estrutura. • Para criar uma célula, utiliza-se o comando cell:

-->celula = cell(2, 2) celula = !{} {} ! ! ! !{} {} ! 27 Cria uma célula de dimensão 2x2.

Nota: aqui os parâmetros usados na construção da célula (2, 2)

indicam as dimensões, diferentemente da lista, em que os parâmetros são os elementos

que irão compor a lista.

Cell

• Inserindo elementos:

-->celula(1, 1).entries = eye(2, 2);

-->celula(1, 2).entries = “matriz identidade 2x2”; -->celula(2, 1).entries = 2;

-->celula(2, 2).entries = [ 1 2 3 ]; -->celula

!{2x2 constant} "matriz identidade 2x2" !

! !

!2 [1,2,3] !

28 Para alterar os valores da

célula é necessário usar o campo entries.

A função eye cria uma matriz identidade com as dimensões passadas

(15)

Cell

• Acessando elementos: -->celula(1, 1).entries ans = 1. 0. 0. 1. • Removendo elementos: -->celula(2, 1).entries = [ ] celula =

!{2x2 constant} "matriz identidade 2x2" ! ! ! !{} [1,2,3] !

• Retornando o tamanho da célula: -->size(celula)

ans =

2. 2. 29

Para acessar os valores da célula é necessário usar o campo

entries.

Deleta um elemento, usando uma matriz vazia.

A função size retorna o tamanho de cada dimensão da célula.

Cell

• É possível extrair uma parte da célula, de forma similar à usada em matrizes:

-->x = celula(1, 1:2); -->x

x =

!{2x2 constant} "matriz identidade 2x2" ! • O comando anterior retorna uma nova célula.

• É possível retornar os elementos em formato de lista, utilizando entries.

30 Atribui à variável x os

elementos contidos na linha 1 e colunas 1 e 2 da célula.

(16)

Cell

• Uma célula pode ser usada para representar arrays multi-indexados (matrizes):

-->m = cell(2, 3, 4)

• Esse comando cria uma matriz tridimensional 2x3x4.

• Vantagem em relação à matrizes: célula pode conter tipos diferentes.

• Vantagem em relação à lista: célula pode ser acessada da mesma forma que uma matriz.

31

Cell - Exemplo

• Faça um programa que gerencie o consumo de energia

elétrica dos eletrodomésticos de uma casa. O programa deve pedir ao usuário a quantidade de eletrodomésticos contidos na casa. Em seguida, o usuário deve informar o nome, potência(em kW) e o tempo ativo por dia (em horas) de cada um dos eletrodomésticos. Ao final, o usuário deve informar o tempo decorrido (em dias). O programa deve calcular e mostrar o consumo total de energia elétrica da casa e o consumo relativo (porcentagem) de cada eletrodoméstico (consumo/consumo total) nesse período de tempo.

(17)

Cell - Exemplo

33

(18)

Leitura de Planilhas do Excel

O Scilab permite que as planilhas gravadas em

arquivos do MS-Excel (extensão .xls) possam ser

acessadas e lidas no seu ambiemte de trabalho.

O comando usado para isto é:

readxls(“caminho_do_arquivo/nome_do_arquivo.xls”);

O valor retornado é uma variável que contém

todas planilhas do documento xls.

35

Leitura de Planilhas do Excel

• Exemplo de manipulação:

-->planilhas = readxls('caminho_do_arquivo/nome_do_arquivo.xls'); -->plan1 = planilhas(1);

Agora temos na variável plan1 uma matriz 4x6, onde a primeira linha é o cabeçalho da matriz e as outras linhas são: o número de

matrícula, nota da prova 1, nota da prova 2, nota da prova 3 e

atividades dos alunos. 36

Matrícula Nome Prova 1 Prova 2 Prova 3 Atividades

2014227 Joao da

Silva 8,00 9,50 7,50 6,00

2014331 Carlos

Eduardo 7,80 7,30 9,00 7,00

(19)

Leitura de Planilhas do Excel

Considerando a tabela apresentada com as notas

das provas e atividades da disciplina, vamos

construir um programa em Scilab para

apresentar a situação de cada aluno. Isto é, se

ele está aprovado ou reprovado, considerando a

média igual a 7.

37

Leitura de Planilhas do Excel

38

Matrícula Nome Prova 1 Prova 2 Prova 3 Atividades

2014227 Joao da

Silva 8,00 9,50 7,50 6,00

2014331 Carlos

Eduardo 7,80 7,30 9,00 7,00

(20)

Referências

• Programming in Scilab. Michael Baudin. Setembro, 2011.

http://forge.scilab.org/index.php/p/docprogscilab/downloads /get/progscilab_v0.9.pdf

• Fundamentos de Scilab. Frederico F. Campos Filho. Universidade Federal de Minas Gerais. Agosto, 2010.

http://homepages.dcc.ufmg.br/~ffcampos/Numerico/scilab_2 01008.pdf

Referências

Documentos relacionados

cadastrados dos alunos são código de matrícula, data de matrícula, nome, endereço, telefone, data de nascimento, altura e peso (massa corpórea). Caso um aluno desejar

• Árvores são ideais para armazenar hierarquias, além de serem mais rápidas e eficientes do que as estruturas de dados lineares... • É formada por um “conjunto de

– Os elementos devem estar ordenados – Realizar a busca pelo meio do vetor.

• Estas árvore podem assumir diferentes formas quando criadas ou modificadas. – A ordem de inserção ou remoção influem no formato

É relevante, ainda, considerar que os termos “reciclagem/ formação” indiciam a vontade que o especialista, reconhecido como portador de um saber, tem de

Apesar de o mercado acionário brasileiro ter se tornado mais importante para a economia brasileira, sobretudo entre o período de 2002 para 2005 (Tabela 3), sua repre- sentatividade

Para análise da susceptibilidade à erosão dos solos que compunham as paredes da voçoroca, foram realizados ensaios de Pinhole (Furo de Agulha), Desagregação e Dispersão

Finalizando a entrevista, Custódio Fampa declara: “Que- ro agradecer muito ao senhor Arnaldo Pereira, por que quando fui para São Paulo, em 1992, não tinha condições de pagar