Você está na página 1de 39

sexta-feira, 18/10/2013

Estrutura de Dados

Trabalho Prtico

#1

Exerccio 1:
pacotes

01

Visando uma melhor organizao dos componentes desta aplicao, foram criados trs pacotes, que desempenham o papel de agrupar as classes que possuem funcionalidades similares ou relacionadas.
Descrio dos pacotes: Dado: agrega a classe que realiza a manipulao da fila de clientes. Formulrios: agrega as classes que implementam a interface grfica da aplicao para adio e visualizao dos dados. Principal: agrega a classe principal, responsvel por inicializar a aplicao.

Exerccio 1:

02

funcionalidades das classes


Resumo da funcionalidade de cada classe da aplicao: Classe Principal: Classe central do programa; Contm o mtodo principal, a ser iniciado com a execuo da aplicao. Classe FormularioPrincipal: Implementa interface principal da aplicao; Verificao do andamento da fila de clientes; Link para os demais formulrios (Atendimento e Adio de clientes)

Exerccio 1:
Classe Adicionar:

03

funcionalidades das classes

Implementa formulrio para adio de clientes na fila de atendimento. Classe Atender: Implementa formulrio para atendimento de clientes; Mostra o nome do prximo cliente da fila; Boto para efetivar atendimento. Classe AtenderAdicionar: Realiza todas operaes relacionadas com a fila de clientes.

Exerccio 1:
package Principal;

04

detalhamento do cdi o da classe Principal


Especificao do pacote que contm a classe.

import Formularios.FormularioPrincipal; import Dado.AtenderAdicionar;

Declarao da classe.
public class Principal { public static void main(String[] args) {

Importao das classes FormularioPrincipal e AtenderAdicionar.

Mtodo principal, a iniciar a aplicao.


. . .

Exerccio 1:

05

detalhamento do cdi o da classe Principal


Criao do objeto atenderAdicionar, instncia da classe AtenerAdicionar.
. . . AtenderAdicionar atenderAdicionar; atenderAdicionar = new AtenderAdicionar(); FormularioPrincipal formularioPrincipal; formularioPrincipal = new FormularioPrincipal(atenderAdicionar); formularioPrincipal.setVisible(true);

Torna visvel o formulrio (JFrame) principal.

Criao do objeto formularioPrincipal, instncia da classe FormularioPrincipal, que recebe como argumento a referncia para o objeto da classe AtenderAdicionar, criado anteriormente.

Exerccio 1:
JButtons

06

detalhamento do cdi o da classe FormularioPrincipal


JFrame

JLabels

Formulrio implementado pela classe FormularioPrincipal em execuo. package Formularios;

Especificao do pacote que contm a classe. Importao das classes Atender adicionar e JOptionPane*, do pacote visual Swing.

import Dado.AtenderAdicionar; import javax.swing.JOptionPane; . . .

*permite a criao de caixas de dilogo.

Exerccio 1:

07

detalhamento do cdi o da classe FormularioPrincipal


Declarao da classe. Estende a classe JFrame* do pacote visual Swing
. . .

Criao do atributo atenderAdicionar, do tipo AtenderAdicionar

public class FormularioPrincipal extends javax.swing.JFrame { private AtenderAdicionar atenderAdicionar; public FormularioPrincipal(AtenderAdicionar atenderAdicionar) { this.atenderAdicionar = atenderAdicionar; initComponents(); . . . } Construtor chamado pelo mtodo

Arranja (dispe), inicializa e determina valores dos componentes

*permite a criao de formulrios (JFrame).

main da classe Principal. Recebe como parmetro a referncia para o objeto de AtenderAdicionar

Exerccio 1:

08

detalhamento do cdi o da classe FormularioPrincipal


Evento ActionPerformed h espao na fila? atenderAdicionar.haEspacoFila() N S adicionar cliente criao de objeto da classe Adicionar; passagem da referncia do objeto de AtenderAdicionar e FormularioPrincipal ao recm criado.

criao de caixa de dilogo com mensagem ao usurio

Exerccio 1:

09

detalhamento do cdi o da classe FormularioPrincipal


Evento ActionPerformed h cliente na fila? atenderAdicionar.haClienteFila() N S atender cliente criao de objeto da classe Atender; passagem da referncia do objeto de AtenderAdicionar e FormularioPrincipal ao recm criado.

criao de caixa de dilogo com mensagem ao usurio.

Exerccio 1:
JLabel JButton

10

detalhamento do cdi o da classe Adicionar


JFrame

JTextField

Formulrio implementado pela classe Adicionar em execuo. package Formularios;

Especificao do pacote que contm a classe. Importao das classes Atender adicionar e JOptionPane*, do pacote visual Swing.

import Dado.AtenderAdicionar; import javax.swing.JOptionPane; . . .

*permite a criao de caixas de dilogo.

Exerccio 1:

11

detalhamento do cdi o da classe Adicionar


Criao dos atributos atenderAdicionar, do tipo AtenderAdicionar e . . . formularioPrincipal, public class Adicionar extends javax.swing.JFrame do tipo { private AtenderAdicionar atenderAdicionar; FormularioPrincipal
private FormularioPrincipal formularioPrincipal; public Adicionar(AtenderAdicionar atenderAdicionar, FormularioPrincipal formularioPrincipal) { this.atenderAdicionar = atenderAdicionar; Construtor chamado this.formularioPrincipal = formularioPrincipal; pelo mtodo main initComponents(); . . . da classe Principal. Recebe como }

Declarao da classe. Estende a classe JFrame* do pacote visual Swing

*permite a criao de formulrios (JFrame).

Arranja (dispe), inicializa e determina valores padro dos componentes

parmetro as referncias para os objetos de AtenderAdicionar e de FormularioPrincipal.

Exerccio 1:

12

detalhamento do cdi o da classe Adicionar


Evento ActionPerformed N o campo de texto est vazio? textAdicionar.getText().isEmpty() S adicionar cliente recuperao do texto digitado; atualizao do JLabel da fila de clientes do formulrio principal pelo acionamento do mtodo AtualizarLabelLista, do objeto da classe AtenderAdicionar. termina a execuo do objeto fechando o formulrio

criao de caixa de dilogo com mensagem ao usurio

Exerccio 1:
+
Enter

13

detalhamento do cdi o da classe Adicionar


Evento ActionPerformed N adicionar cliente recuperao do texto digitado; atualizao do JLabel da fila de clientes do formulrio principal pelo acionamento do mtodo AtualizarLabelLista, do objeto da classe AtenderAdicionar. termina a execuo do objeto fechando o formulrio.

o campo de texto est vazio? textAdicionar.getText().isEmpty() S

criao de caixa de dilogo com mensagem ao usurio

Exerccio 1:
JLabel JButton

14

detalhamento do cdi o da classe Atender


JFrame

Formulrio implementado pela classe Atender em execuo. package Formularios;

Especificao do pacote que contm a classe. Importao das classes Atender adicionar e JOptionPane*, do pacote visual Swing.

import Dado.AtenderAdicionar; import javax.swing.JOptionPane; . . .

*permite a criao de caixas de dilogo.

Exerccio 1:

15

detalhamento do cdi o da classe Atender


Declarao da classe. Estende a classe JFrame* do pacote visual Swing
. . . public class Adicionar extends javax.swing.JFrame

Criao dos atributos atenderAdicionar, do tipo AtenderAdicionar e formularioPrincipal, do tipo FormularioPrincipal Atualizao do JLabel para exibio do primeiro cliente da fila.

private AtenderAdicionar atenderAdicionar; private FormularioPrincipal formularioPrincipal; public Adicionar(AtenderAdicionar atenderAdicionar, FormularioPrincipal formularioPrincipal)

this.atenderAdicionar = atenderAdicionar; this.formularioPrincipal = formularioPrincipal; labelAtender.setText("Atender: "+atenderAdicionar.getvetFila()[0]); initComponents(); . . .

*permite a criao de formulrios (JFrame).

Arranja (dispe), inicializa e determina valores padro dos componentes.

Construtor chamado pelo mtodo main da classe Principal. Recebe como parmetro as referncias para os objetos de AtenderAdicionar e de FormularioPrincipal.

Exerccio 1:

16

detalhamento do cdi o da classe Atender


Evento ActionPerformed

atender primeiro cliente da fila chamada do mtodo Atender, da classe AtenderAdicionar atualizao do JLabel da fila de clientes do formulrio principal pelo acionamento do mtodo AtualizarLabelLista, do objeto da classe AtenderAdicionar. termina a execuo do objeto, fechando o formulrio.

Exerccio 1:
package Dado;

17

detalhamento do cdi o da classe AtenderAdicionar


Especificao do pacote que contm a classe. Importao da classe Atender adicionar.

import Formularios.FormularioPrincipal;

public class AtenderAdicionar { private String[] vetFila = new String[0]; private String[] vetNovaFila; . . .

Criao de dois vetores de Strings, referenciados por vetFila e VetNovaFila, responsveis pelo armazenamento do nome e ordem dos clientes na fila de atendimento e pelo armazenamento temporrio dos dados durante as operaes com a fila.

Exerccio 1:

18

detalhamento do cdi o da classe AtenderAdicionar


mximo 10 posies

mximo 10 posies

vetFila vetNovaFila

(referncia ao vetor que armazena a fila de clientes) (referncia ao vetor que armazena temporariamente os dados da fila, durante as operaes)

Exerccio 1:
. . .

19

detalhamento do cdi o da classe AtenderAdicionar

public String[] getvetFila() { return (vetFila); } public boolean haClienteFila() { if (vetFila.length > 0) return (true); else return (false); } . . .

Mtodo retorna o vetor principal, que armazena a fila de clientes.

Mtodo testa a existncia de algum cliente na fila de atendimento, retornando verdadeiro ou falso, de acordo com o resultado obtido.

Exerccio 1:
. . .

20

detalhamento do cdi o da classe AtenderAdicionar


Mtodo realiza a operao de atendimento de clientes da fila. Verificao da existncia de clientes na fila, atravs mtodo haClienteFila

public void Atender() { if (haClienteFila()) {

vetNovaFila = new String[vetFila.length-1]; for (int i =0; i<vetNovaFila.length; i++) { vetNovaFila[i] = vetFila[i+1]; Criao de novo vetor de } Strings com uma posio vetFila = vetNovaFila;
. . .

a menos que o vetor referenciado por vetFila.

vetFila passa a referenciar este novo vetor.

Novo vetor recebe todos os valores do vetor vetFila, com execesso do primeiro, que foi atendido.

Exerccio 1:
. . .

21

detalhamento do cdi o da classe AtenderAdicionar

public boolean haEspacoFila() { if (vetFila.length < 10) return (true); else Mtodo testa se h menos de 10 return (false); clientes na fila de atendimento, } ou seja, se a fila no encontra-se } . . . cheia, retornando verdadeiro

ou falso, de acordo com o resultado obtido.

Exerccio 1:

22

detalhamento do cdi o da classe AtenderAdicionar


Mtodo realiza a operao de adio de clientes da fila.
public void Adicionar(String textAddCliente) { Verificao da existncia de espao if (haEspacoFila()) { na fila, atravs mtodo haEspacoFila vetNovaFila = new String[vetFila.length+1]; for (int i =0; i<vetFila.length; i++) { Criao de novo vetor de Strings vetNovaFila[i] = vetFila[i]; com uma posio a mais. } vetNovaFila[vetNovaFila.length-1] = textAddCliente; vetFila = vetNovaFila;

Novo vetor recebe todos os valores do vetor vetFila.

O novo cliente adicionado na ltima posio do novo vetor e vetFila passa a referenciar este novo vetor.

Exerccio 1:

23

detalhamento do cdi o da classe AtenderAdicionar


Mtodo retorna String a ser utilizada para atualizar o JLabel da fila de clientes.
public String AtualizarLabelLista() Caso no haja cliente na fila, { retornar a String Fila: if (vetFila.length < 1) { return("Fila:"); } Caso haja else clientes na fila, { String stringLista = "Fila: "; varre-se o vetor stringLista = stringLista + vetFila[0]; vetFila e for (int i = 1; i < vetFila.length; i++) concatena-se { stringLista = stringLista+", "+vetFila[i]; todos os valores encontrados em } return(stringLista); uma String, que } retornada }

Exerccio 2:
Mtodo principal, a iniciar a aplicao

24

detalhamento do cdi o

public class TrabPraticoExer2 { public static void main (String[] args) { int[] vetor = {0, 5, 8, 12, 17, 26, 30, 33, 45, 60}; TrabPraticoExer2 trabPraticoExer2 = new TrabPraticoExer2(); trabPraticoExer2.ImprimeImparesVetor(vetor); } . . .

Declarao de vetor de inteiros com n nmeros aleatrios.

Criao de objeto da prpria classe.

Acesso ao mtodo ImprimeImparesVetor, passando como parmetro a referncia ao vetor de inteiros criado.

Exerccio 2:

25

detalhamento do cdi o
Mtodo ImprimeImparesVetor, que testa a possibilidade de cada elemento do vetor ser mpar.
. . . public void ImprimeImparesVetor(int[] vetor) { int n = vetor.length; for (int i = 0; i< n; i++) { if ((vetor[i] % 2) != 0) System.out.println(vetor[i]); } }

mpar 5 1 2 2 0

Verificao se o resto da diviso do elemento do vetor por 2 tem valor diferente de 0, o que indica que o mesmo mpar.

Exerccio 2:

26

anlise do al oritmo: instrues primitivas


Transformao do algoritmo do mtodo ImprimeImparesVetor implementado anteriormente em Java em instrues primitivas: Supondo o pior caso
vetor n

.............................................. t(n) = 8n + 5

vetor

tamanho do vetor

......................................................... 1 iterao ........................................ 2 iteraes

for i

n+ 1

se ((resto de vetor[i] por 2) != 0)..

0 to i < n

.............................................. 2 iteraes + n iteraes

n
i

imprima vetor[i] .......................................

3.n iteraes 2.n iteraes

i + 1 ............................................................ 2.n iteraes

Exerccio 2:

27

anlise assinttica do al oritmo


Observando a funo obtida da anlise a partir do nmero de instrues primitivas, assumindo o comportamento limitante desta funo, quando o argumento tende a infinito, pode-se verificar, utilizando-se da notao Big-O, qual o termo mais interfere, assintoticamente, no desempenho do algoritmo.

Segundo a notao Big-O ..................................... O(n) = n

Exerccio 3:

28

detalhamento do cdi o
import java.util.Random;

Importao da classe Random, do pacote util. Permite gerar nmeros pseudoaleatrios.

public class TrabPraticoExer3 { public static void main (String[] args) Mtodo principal. { int[] vetor = new int[200000]; Random gerador = new Random(); Declarao de um vetor for (int i = 0; i < 200000; i++) { de inteiros com 200.000 vetor[i] = gerador.nextInt(50); elementos. } . . .

Criao de um objeto da classe Random

Lao utilizado para popular o vetor com nmeros aleatrios.

Exerccio 3:

29

detalhamento do cdi o
TrabPraticoExer3 trabPraticoExer3 = new TrabPraticoExer3(); System.out.println("Md 1 - 1000 trabPraticoExer3.medias1(vetor, System.out.println("Md 2 - 1000 trabPraticoExer3.medias2(vetor, elem."); 1000); elem."); 1000);

Criao de objeto da classe trabPraticoExer3. Chamada dos mtodos medias1 e medias2 passando-lhes como parmetros o vetor de elementos randomicos e a quantidade de elementos a ser considerada.

System.out.println("-------------------"); System.out.println("Md 1 -100000 elem."); trabPraticoExer3.medias1(vetor, 100000); System.out.println("Md 2 - 100000 elem."); trabPraticoExer3.medias2(vetor, 100000); System.out.println("-------------------"); System.out.println("Md 1 - 200000 elem."); trabPraticoExer3.medias1(vetor, 200000); System.out.println("Md 2 - 200000 elem."); trabPraticoExer3.medias2(vetor, 200000);

Exerccio 2:

30

detalhamento do cdi o
public int[] medias1(int[] X, int n) { long tempoInicio = System.currentTimeMillis(); int[] A = new int[n]; int a, i, j; Mtodo mdias1, que implementa for (i = 0; i < n; i++) o clculo de mdias pr-fixadas, { de acordo com o visto em sala de a = 0; for (j = 0; j <= i; j++) aula na apresentao Sequncia 12 a = a + X[j]; Anlise de Algoritmos 5. A[i] = a / (i+1); } System.out.println("Tempo de execuo: " + (System.currentTimeMillis() - tempoInicio) + " milisegundos\n"); Impresso do tempo gasto em return (A); milissegundos, obtido pela diferena entre }

o tempo inicial e final do sistema, (retornado pela funo currentTimeMillis)

Exerccio 3:

31

detalhamento do cdi o
public int[] medias2(int[] X, int n) { long tempoInicio = System.currentTimeMillis(); int[] A = new int[n]; int s = 0; Mtodo mdias2, que implementa int i; o clculo de mdias pr-fixadas, for (i = 0; i < n; i++) de acordo com o visto em sala de { aula na apresentao Sequncia 12 s = s + X[i]; A[i] = s / (i + 1); Anlise de Algoritmos 5. } System.out.println("Tempo de execuo: " + (System.currentTimeMillis() - tempoInicio) + " milisegundos\n"); return (A); Impresso do tempo gasto em milissegundos, }

obtido pela diferena entre o tempo inicial e final do sistema, (retornado pela funo currentTimeMillis).

Exerccio 3:
x n A

32

anlise do al oritmo mdias1: instrues primitivas


Transformao do algoritmo do mtodo mdias1 implementado anteriormente em Java em instrues primitivas:
vetor de n elementos t(n) = 3n+13n* numero de elementos novo vetor n elementos....................................... n iteraes
n

quando analisamos o algoritmo como um todo, foram desconsideradas.

*As instrues primitivas, a compor o termo independente da funo, no exercendo grande implicao

for i 0 to (n-1) .................................................................. n iteraes n a 0 ............................................................................................ n iteraes n for j 0 to i ....................................... n + (n(n+1)/2) iteraes (n(n+1)/2) 1 1 1 a a + x[j] ........................................ 3 . (n(n+1)/2) iteraes 1 1 x n(n+1)/2 j j + 1 ........................................ 2 . (n(n+1)/2) iteraes n n n n A[i] a /(i+1) ................................................................... 4.n iteraes n n i i + 1 .................................................................................. 2.n iteraes retorne A

Exerccio 3:

33

anlise assinttica do al oritmo medias1


Observando a funo obtida da anlise a partir do nmero de instrues primitivas, assumindo o comportamento limitante desta funo, quando o argumento tende a infinito, pode-se verificar, utilizando-se da notao Big-O, qual o termo mais interfere, assintoticamente, no desempenho do algoritmo.

Segundo a notao Big-O ..................................... O(n) = n

Exerccio 3:

34

anlise do al oritmo mdias2: instrues primitivas


Transformao do algoritmo do mtodo mdias1 implementado anteriormente em Java em instrues primitivas:
x n A s
1

t(n) = 11n + 6

vetor de n elementos ........................................................ 1 iterao 1 numero de elementos ............................................................ 1 iteraes n novo vetor n elementos ................................................. n iteraes 1 0 ............................................................................................................ 1 iterao
1
n+1

for i 0 to n(n-1) ............................................................................. n + 2 iteraes n n sn s + x[i] .................................................................................. 3.n iteraes n n n A[i] s / (i + 1)................................................................... 4.n iteraes n n i i + 1........................................................................................... 2.n iteraes 1 retornar A ................................................................................................... 1 iterao

Exerccio 3:

35

anlise assinttica do al oritmo medias2


Observando a funo obtida da anlise a partir do nmero de instrues primitivas, assumindo o comportamento limitante desta funo, quando o argumento tende a infinito, pode-se verificar, utilizando-se da notao Big-O, qual o termo mais interfere, assintoticamente, no desempenho do algoritmo.

Segundo a notao Big-O ..................................... O(n) = n

Exerccio 3:

36

tempo de execuo calculado com System.currentTimeMillis()


Seguem abaixo as sadas do terminal geradas pela execuo da classe TrabPraticoExer3 na IDE BlueJ. Estas revelam o tempo calculado em milissegundos pelo mtodo System.currentTimeMillis(). OBS: Os valores apresentados podem variar a cada execuo, j que o tempo de execuo afetado por caractersticas do ambiente de hardware e software de onde a aplicao executada.

Exerccio 3:
mdias2

37

qual al oritmo melhor?

Baseado na anlise emprica, o tempo gasto pelo algoritmo medias2 foi bem menor para valores elevados como 100.000 e 200.000 do que o gasto pelo algoritmo medias1. Tambm foi menor o tempo gasto por medias2 para o valor de 1.000; A anlise assinttica mostrou que medias1 uma funo quadrtica e medias2 uma funo linear, por isso medias2 melhor para valores altos de n.

Grupo:
Adriano Cardoso Daniel Costa Paulo Henrique Rafael Carvalho

Obri ado!

Você também pode gostar