Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo - Questão 1 public class Imovel{ private String endereco; private double preco; public Imovel(String endereco, double preco){ this.endereco = endereco; this.preco = preco; } public double getPreco(){ return preco; } public String getEndereco(){ return endereco; } } Programação II – Prof. Mateus Raeder Questão 1 public class Velho extends Imovel{ private double desconto; public Velho(String endereco, double preco, double desconto){ super(endereco, preco); this.desconto = desconto; } public void setDesconto(double desconto){ this.desconto = desconto; } public double getDesconto(){ return desconto; } } Programação II – Prof. Mateus Raeder Questão 1 public class Novo extends Imovel{ private double adicional; public Novo(String endereco, double preco, double adicional){ super(endereco, preco); this.adicional = adicional; } public void setAdicional(double adicional){ this.adicional = adicional; } public double getAdicional(){ return adicional; } } Programação II – Prof. Mateus Raeder Questão 1 public class Imobiliaria{ private Imovel[] imoveis; private Teclado teclado; public Imobiliaria(int quantImoveis){ imoveis = new Imovel[quantImoveis]; teclado = new Teclado(); int op = 0; for(int i=0; i<imoveis.length; i++){ while( (op != 1) && (op != 2) ) op = teclado.leInt("[Carro " + i + "] Digite 1 para NOVO e 2 para VELHO:"); if(op == 1) imoveis[i] = new Novo( ("Endereço Novo "+i) , i, i ); else imoveis[i] = new Velho( ("Endereço Velho "+i) , i, -i ); op = 0; } Programação II – Prof. Mateus Raeder Questão 1 for(int i=0; i<imoveis.length; i++){ if(imoveis[i] instanceof Novo){ Novo n = (Novo) imoveis[i]; System.out.println("Preço adicional: R$ "+n.getAdicional()); } else{ Velho v = (Velho) imoveis[i]; System.out.println("Desconto: R$ "+v.getDesconto()); } } } } Programação II – Prof. Mateus Raeder Questão 2 a) Acontece Overflow na linha 10, por tentar adicionar o sexto elemento na lista de capacidade 5. Aconteceria Overflow na linha 11 também, pelo mesmo motivo. O Overflow da linha 11 não ocorre na realidade pois o programa captura a exceção e trata-a, não executando as demais linhas de código do bloco try/catch. Por esta razão, as linhas 11 e 12 não serão executadas. Não ocorre Underflow. b) Ficaria como segue: 1 2 3 4 5 0 1 2 3 4 A remoção da linha 12 não acontece, por causa da exceção capturada na linha 10. Programação II – Prof. Mateus Raeder Questão 3 p1.push(10); p1.push(20); p1.push(30); p1.push(40); //COMPLETE O CÓDIGO for(int i=0; i<4; i++) p1.pop(); //p2 não faço nada p3.push(20); p3.push(10); p3.push(40); p3.push(30); Programação II – Prof. Mateus Raeder Questão 4 /* Questão 4 * método removeLast */ public Object removeLast() throws UnderflowException { if(isEmpty()) throw new UnderflowException(); Object el = list[last]; last--; return el; } Programação II – Prof. Mateus Raeder Questão 5 Ficaria da seguinte maneira: last 2 3 5 2 1 0 1 2 3 4 first Programação II – Prof. Mateus Raeder Questão 6 while(!p1.isEmpty() && !p2.isEmpty()){ try{ if(p1.getTop() < p2.getTop()) p3.push(p1.pop()); else p3.push(p2.pop()); }catch(UnderflowException e){ System.out.println(e.toString()); }catch(OverflowException e){ System.out.println(e.toString()); } } Programação II – Prof. Mateus Raeder Questão 6 while(!p1.isEmpty() && p2.isEmpty()) try{ p3.push(p1.pop()); }catch(UnderflowException e){ System.out.println(e.toString()); }catch(OverflowException e){ System.out.println(e.toString()); } Programação II – Prof. Mateus Raeder Questão 6 while(p1.isEmpty() && !p2.isEmpty()) try{ p3.push(p2.pop()); }catch(UnderflowException e){ System.out.println(e.toString()); }catch(OverflowException e){ System.out.println(e.toString()); } Programação II – Prof. Mateus Raeder Questão 7 /* Questão 7 * método insereOrdenado */ public void insereOrdenado(int valor) throws OverflowException{ if(isFull()) throw new OverflowException(); int posicao = last+1; int numeroDeElementos = 0; for (int i = 0; i <= last; i++) { if(valor < list[i]){ posicao = i; break; } } numeroDeElementos = (last - posicao)+1; if (numeroDeElementos > 0) System.arraycopy(list, posicao, list, posicao+1, numeroDeElementos); list[posicao] = valor; last++; } Programação II – Prof. Mateus Raeder Questão 8 /* Questão 8 * método copyList */ public SequentialListComExcecao copyList(){ SequentialListComExcecao novaLista = new SequentialListComExcecao(list.length); try{ for(int i=0; i<list.length; i++) novaLista.insert(list[i]); }catch(OverflowException e){ System.out.println(e.toString()); } return novaLista; } Programação II – Prof. Mateus Raeder Questão 9 /* Questão 9 * método equals */ public boolean equals(Object o){ SequentialListComExcecao listaParametro = (SequentialListComExcecao) o; if(getSize() != listaParametro.getSize()) return false; if(isEmpty() && listaParametro.isEmpty()) return true; try{ for(int i=0; i<=last; i++) if(get(i) != listaParametro.get(i)) return false; }catch(UnderflowException e){ System.out.println(e.toString()); }catch(ArrayIndexOutOfBoundsException e){ System.out.println(e.toString()); } return true; } Programação II – Prof. Mateus Raeder Questão 10 public class Questao10{ private StrStack pilha; public Questao10(StrStack pilha){ this.pilha = pilha; } Programação II – Prof. Mateus Raeder Questão 10 public void analisa(){ String aux; int abreChaves=0, fechaChaves=0, abreColchetes=0; int fechaColchetes=0, abreParentesis=0, fechaParentesis=0; while(!pilha.isEmpty()){ try{ aux = pilha.pop(); if(aux == "{") abreChaves++; else if(aux == "[") abreColchetes++; else if(aux == "(") abreParentesis++; else if(aux == "}") fechaChaves++; else if(aux == "]") fechaColchetes++; else if(aux == ")") fechaParentesis++; }catch(UnderflowException e){ System.out.println(e.toString()); } Programação II – Prof. Mateus Raeder } Questão 10 if(abreChaves - fechaChaves != 0) System.out.println("[ERRO] Chaves erradas..."); if(abreColchetes - fechaColchetes != 0) System.out.println("[ERRO] Colchetes errados..."); if(abreParentesis - fechaParentesis != 0) System.out.println("[ERRO] Parêntesis errados..."); System.out.println("[Sem mais erros...]"); } Programação II – Prof. Mateus Raeder Questão 10 public static void main(String[] args){ StrStack s = new StrStack(15); //x = (23 - y) * {[10 - 15]} try{ s.push("x"); s.push("="); s.push(")"); s.push("23"); s.push("-"); s.push("y"); s.push(")"); s.push("*"); s.push("{"); s.push("]"); s.push("10"); s.push("-"); s.push("15"); s.push("]"); s.push("}"); }catch(OverflowException e){ System.out.println(e.toString()); } Questao10 q = new Questao10(s); q.analisa(); } Programação II – Prof. Mateus Raeder Questão 11 public class MultiPilha { private Object s[]; private int top1; private int top2; public MultiPilha (int size){ s = new Object[size]; top1 = -1; top2 = s.length; } public boolean isEmpty(){ if(top1 == -1 && top2 == s.length) return true; return false; } Programação II – Prof. Mateus Raeder Questão 11 public boolean isFull(){ if(top1 == top2-1) return true; return false; } Programação II – Prof. Mateus Raeder Questão 11 public boolean push1(Object element) throws OverflowException { if(isFull()) throw new OverflowException(); top1++; s[top1] = element; return true; } public boolean push2(Object element) throws OverflowException { if(isFull()) throw new OverflowException(); top2--; s[top2] = element; return true; } Programação II – Prof. Mateus Raeder Questão 11 public Object pop1() throws UnderflowException { if(top1 == -1){ throw new UnderflowException(); } Object element = s[top1]; top1--; return element; } public Object pop2() throws UnderflowException { if(top2 == s.length){ throw new UnderflowException(); } Object element = s[top2]; top2++; return element; } Programação II – Prof. Mateus Raeder Questão 11 public Object getTop1() throws UnderflowException { if(top1 == -1){ throw new UnderflowException(); } return s[top1]; } public Object getTop2() throws UnderflowException { if(top2 == s.length){ throw new UnderflowException(); } return s[top2]; } Programação II – Prof. Mateus Raeder Questão 11 public void print(){ System.out.println("Pilha 1:"); for(int i=top1; i>=0; i--) System.out.println(s[i]); System.out.println("Pilha 2:"); for(int i=top2; i<s.length; i++) System.out.println(s[i]); } Programação II – Prof. Mateus Raeder Questão 12 /* Questão 12 * método size */ public int size(){ if(isEmpty()) return 0; return((last-first)+1); } Programação II – Prof. Mateus Raeder Questão 13 public Queue reversedQueue(){ if(isEmpty()) return this; Stack p = new Stack(size()); try{ for(int i=first; i<=last; i++) p.push(q[i]); }catch(OverflowException e){ System.out.println(e.toString()); } Queue aux = new Queue(size()); try{ for(int i=first; i<=last; i++) aux.enqueue(p.pop()); }catch(UnderflowException e){ System.out.println(e.toString()); } return aux; } Programação II – Prof. Mateus Raeder