Aula Teste INFNET terça-feira, 11 de janeiro de 2011 IMPLEMENTAÇÃO DA TORRE DE HANOI NA LINGUAGEM JAVA Prof. Alex Avellar contato@aavellar.com
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
Pré-requisitos Conhecimentos em Programação Conhecimentos em comandos básicos da linguagem Java
Apresentações Experiência Expectativa Motivação Material de Apoio: www.aavellar.com
Sumário Objetivo Fundamentos da Torre de Hanoi Descrição do Algoritmo Conceitos da Linguagem Java Implementação da solução Conclusão
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
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 64 Níveis De Parville Templo de Bernares Centro do Mundo Hastes de Diamante e Discos finos como o corpo de uma abelha
Limitações
2. Algoritmo
Algoritmo
3. Implementação
Implementação da Torre de Hanoi na linguagem Java import java.util.*; public class Hanoi { 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); } } 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(""); }
Implementação da Torre de Hanoi na linguagem Java import java.util.*; public class Hanoi { 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); } } 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(""); }
Implementação da Torre de Hanoi na linguagem Java import java.util.*; public class Hanoi { 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); } } 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(""); }
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]); } }
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]); } }
Implementação da Torre de Hanoi na linguagem Java // 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]); } } 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(); }
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]); } }
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); } } 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(""); }
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); } }
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); } } 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(""); }
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); } }
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