Aula Teste INFNET terça-feira, 11 de janeiro de 2011 IMPLEMENTAÇÃO DA TORRE DE HANOI NA LINGUAGEM JAVA Prof. Alex Avellar [email protected] Objetivo Apresentar os conceitos fundamentais da Torre de Hanoi Apresentar o algoritmo para resolução do problema Realizar uma implementação em Linguagem Java do Algoritmo proposto 2 Pré-requisitos Conhecimentos em Programação Conhecimentos em comandos básicos da linguagem Java 3 Apresentações Experiência Expectativa Motivação Material de Apoio: www.aavellar.com 4 Sumário Objetivo Fundamentos da Torre de Hanoi Descrição do Algoritmo Conceitos da Linguagem Java Implementação da solução Conclusão 5 Bibliografia 1) PREISS, Bruno R. , Estruturas de Dados e Algoritmos: padrões de projetos orientados a objetos com java, 2000. 2) FURGERI, S., Java 6 – Desenvolvendo e Implementando Aplicações, Érica , 2009. 3) SEDGEWICK, R., Algorithms in Java, Addison – Wesley, 2003. 4) TOWER OF HANOI: Fascinating Facts (LHS): http://www.lhs.berkeley.edu/Java/Tower/towerhistory.html 6 1. Torre de Hanoi Fundamentos da Torre de Hanoi Fonte: TOWER OF HANOI Edouard Lucas Lenda Hindu Torre de Bramanismo Jovens Monges Discos de Ouro De Parville 64 Níveis Templo de Bernares Centro do Mundo Hastes de Diamante e Discos finos como o corpo 8 de uma abelha Limitações 2. Algoritmo Algoritmo 12 3. Implementação Implementação da Torre de Hanoi na linguagem Java import java.util.*; else public class Hanoi { { System.out.println("Pino 1: "+ t1 ); System.out.println("Pino 2: "+ t2 ); System.out.println("Pino 3: "+ t3 ); System.out.println(""); public void movimentar (int ndiscos, Stack t1, Stack t2, Stack t3) { if( ndiscos == 1 ) { t3.push(t1.peek()); t1.pop(); System.out.println("Pino 1: "+ t1 ); System.out.println("Pino 2: "+ t2 ); System.out.println("Pino 3: "+ t3 ); System.out.println(""); } movimentar (ndiscos -1, t1, t3, t2); t3.push(t1.peek()); t1.pop(); movimentar (ndiscos -1, t2, t1, t3); } } 14 Implementação da Torre de Hanoi na linguagem Java import java.util.*; else public class Hanoi { { public void movimentar (int ndiscos, Stack t1, Stack t2, Stack t3) { System.out.println("Pino 1: "+ t1 ); System.out.println("Pino 2: "+ t2 ); System.out.println("Pino 3: "+ t3 ); System.out.println(""); if( ndiscos == 1 ) movimentar (ndiscos -1, t1, t3, t2); t3.push(t1.peek()); t1.pop(); { t3.push(t1.peek()); t1.pop(); System.out.println("Pino 1: "+ t1 ); System.out.println("Pino 2: "+ t2 ); System.out.println("Pino 3: "+ t3 ); System.out.println(""); } movimentar (ndiscos -1, t2, t1, t3); } } 15 Implementação da Torre de Hanoi na linguagem Java import java.util.*; else public class Hanoi { { public void movimentar (int ndiscos, Stack t1, Stack t2, Stack t3) { System.out.println("Pino 1: "+ t1 ); System.out.println("Pino 2: "+ t2 ); System.out.println("Pino 3: "+ t3 ); System.out.println(""); if( ndiscos == 1 ) movimentar (ndiscos -1, t1, t3, t2); t3.push(t1.peek()); t1.pop(); { t3.push(t1.peek()); t1.pop(); System.out.println("Pino 1: "+ t1 ); System.out.println("Pino 2: "+ t2 ); System.out.println("Pino 3: "+ t3 ); System.out.println(""); } movimentar (ndiscos -1, t2, t1, t3); } } 16 Implementação da Torre de Hanoi na linguagem Java public static void main(String args[]) { Hanoi obj = new Hanoi (); // Numero total de discos int ndiscos = 3; // Instancia Vetor pinos Stack Pino[] = new Stack [3]; // Instancia Pinos for (int i = 0; i < 3; i++) { Pino[i] = new Stack(); } // Entra com valores for (int i = ndiscos; i > 0; i--) { Pino[0].push(new Integer(i)); } obj.movimentar(ndiscos, Pino[0], Pino[1], Pino[2]); } } 17 Implementação da Torre de Hanoi na linguagem Java public static void main(String args[]) { Hanoi obj = new Hanoi (); // Numero total de discos int ndiscos = 3; // Instancia Vetor pinos Stack Pino[] = new Stack [3]; // Instancia Pinos for (int i = 0; i < 3; i++) { Pino[i] = new Stack(); } // Entra com valores for (int i = ndiscos; i > 0; i--) { Pino[0].push(new Integer(i)); } obj.movimentar(ndiscos, Pino[0], Pino[1], Pino[2]); } } 18 Implementação da Torre de Hanoi na linguagem Java public static void main(String args[]) { Hanoi obj = new Hanoi (); // Numero total de discos int ndiscos = 3; // Entra com valores for (int i = ndiscos; i > 0; i--) { Pino[0].push(new Integer(i)); } // Instancia Vetor pinos obj.movimentar(ndiscos, Pino[0], Pino[1], Pino[2]); // Instancia Pinos for (int i = 0; i < 3; i++) { } Stack Pino[] = new Stack [3]; Pino[i] = new Stack(); } } 19 Implementação da Torre de Hanoi na linguagem Java public static void main(String args[]) { Hanoi obj = new Hanoi (); // Numero total de discos int ndiscos = 3; // Instancia Vetor pinos Stack Pino[] = new Stack [3]; // Instancia Pinos for (int i = 0; i < 3; i++) { Pino[i] = new Stack(); } // Entra com valores for (int i = ndiscos; i > 0; i--) { Pino[0].push(new Integer(i)); } obj.movimentar(ndiscos, Pino[0], Pino[1], Pino[2]); } } 20 Implementação da Torre de Hanoi na linguagem Java public void movimentar (int ndiscos, Stack t1, Stack t2, Stack t3) { if( ndiscos == 1 ) { t3.push(t1.peek()); t1.pop(); System.out.println("Pino 1: "+ t1 ); System.out.println("Pino 2: "+ t2 ); System.out.println("Pino 3: "+ t3 ); System.out.println(""); } else { System.out.println("Pino 1: "+ t1 ); System.out.println("Pino 2: "+ t2 ); System.out.println("Pino 3: "+ t3 ); System.out.println(""); movimentar (ndiscos -1, t1, t3, t2); t3.push(t1.peek()); t1.pop(); movimentar (ndiscos -1, t2, t1, t3); } } 21 Implementação da Torre de Hanoi na linguagem Java public void movimentar (int ndiscos, Stack t1, Stack t2, Stack t3) { if( ndiscos == 1 ) { t3.push(t1.peek()); t1.pop(); System.out.println("Pino 1: "+ t1 ); System.out.println("Pino 2: "+ t2 ); System.out.println("Pino 3: "+ t3 ); System.out.println(""); } else { System.out.println("Pino 1: "+ t1 ); System.out.println("Pino 2: "+ t2 ); System.out.println("Pino 3: "+ t3 ); System.out.println(""); movimentar (ndiscos -1, t1, t3, t2); t3.push(t1.peek()); t1.pop(); movimentar (ndiscos -1, t2, t1, t3); } } 22 Implementação da Torre de Hanoi na linguagem Java else public void movimentar (int ndiscos, Stack t1, Stack t2, Stack t3) { { if( ndiscos == 1 ) { t3.push(t1.peek()); t1.pop(); System.out.println("Pino 1: "+ t1 ); System.out.println("Pino 2: "+ t2 ); System.out.println("Pino 3: "+ t3 ); System.out.println(""); } System.out.println("Pino 1: "+ t1 ); System.out.println("Pino 2: "+ t2 ); System.out.println("Pino 3: "+ t3 ); System.out.println(""); movimentar (ndiscos -1, t1, t3, t2); t3.push(t1.peek()); t1.pop(); movimentar (ndiscos -1, t2, t1, t3); } } 23 Implementação da Torre de Hanoi na linguagem Java else { System.out.println("Pino 1: "+ t1 ); System.out.println("Pino 2: "+ t2 ); System.out.println("Pino 3: "+ t3 ); System.out.println(""); movimentar (ndiscos -1, t1, t3, t2); t3.push(t1.peek()); t1.pop(); movimentar (ndiscos -1, t2, t1, t3); } } 24 • Exercício – Reescreva o algoritmo da Torre de Hanoi apresentado a solução de forma iterativa, ou seja usando estrutura de repetições (laços) – Codifique em Linguagem Java – Entre no link abaixo e envie o algoritmo criado e o programa final – www.aavelar.com 5. Conclusões e Perguntas