Buscar

PasseioDoCavalo (1)

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 14 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 14 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 14 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

PASSEIO DO CAVALO 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Ana Izabel Rezende 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
PROBLEMA 
 
Escreva um algoritmo, e o respectivo programa em Java, que faça a simulação do movimento 
do cavalo no tabuleiro de Xadrez. Para isso o programa deverá 
 sortear a casa inicial e marcá-la com o número 1. Em seguida deverá escolher 
 uma das casas disponíveis para ocupação e marcá-la com o próximo número 
 que corresponda à seqüência da jogada. A partir desta nova posição o cavalo 
 deverá fazer novo movimento e assim sucessivamente até percorrer todas as 
 casas do tabuleiro, ou atingir uma casa a partir da qual ele não possa mais 
 avançar. O cavalo não pode ocupar uma casa já visitada. 
 O programa deverá imprimir a matriz que representa o tabuleiro após a 
 simulação, o número total de casas visitadas e o tempo que o programa levou 
 para realizar a simulação. Deverão ser apresentadas pelo menos cinco 
 tentativas para se avaliar se a posição inicial influencia o número de tentativas 
 e o tempo de simulação. 
 
 
 
 
 
 
 
SOLUÇÃO 
A solução deste problema, consiste e em uma classe, para o controle das iterações do cavalo, 
entrada de dados, controle do tempo e geração dos números aleatórios. Que será apresentada 
posteriormente. 
A recursividade foi a técnica utilizada para encontrar a sequência de movimentos, usada 
como tentativa e erro, tentando a combinação de todos os possíveis movimentos 
 
 
CLASSE 
Classe Tabuleiro 
A classe tabuleiro possui uma matriz bidimensional de inteiros para armazenar 
 os valores do tabuleiro, que podem variar de 0 a 64, sendo que zero é uma casa que ainda não 
foi visitada, e se for diferente de 0 a casa já foi visitada na iteração x preenchida na posição. 
A união das matrizes de inteiros movimentoX[] movimentoY[] , armazenam todos os 9 
possíveis movimentos do cavalo. 
 Foi utilizado também as variáveis estáticas e longas limite e iterações, para controlar a 
recursividade também pelo número de iterações e não só pelo número de movimentos, sendo 
que nem sempre, em todas as posições de partida do cavalo é possivel os 64 movimentos caindo 
em um loop infinito, um tabuleiro de xadrez utilizando carácteres especiais e os valores da 
matriz que representa os valores do tabuleiro utilizando do laço for. 
 O método público valida(int contador, int x , int y) , recebe como parâmetro um inteiro 
(contador), a posição x, e a posição y do cavalo, e é chamado recursivamente até que o contador 
seja igual a 65, ou que a quantidade de iterações seja igual a 1000000000. Este método utiliza 
um for para testar todos os possíveis movimentos do cavalo (armazenados em movimentoX[] 
movimentoY[] ) adicionado de x e de y (variáveis de entrada do método) , e atribuí a u e v , 
caso este movimento esteja dentro do tabuleiro, e que a nova casa não tenha sido ocupada 
anteriormente ele atribui ao tabuleiro [posição u][posição v] o valor do contador. É criado um 
teste de validade do método valida (contador +1, a posição x que será testada [no caso u] , a 
posição y que será testada[no caso v ]). Caso o retorno seja verdadeiro, existem novos 
candidatos a movimento e o método é chamado em uma nova execução, caso 
 não ele atribui a posição interação anterior o valor 0 ao tabuleiro e tenta a verificação dos 
movimentos posteriores ao tentando anteriormente. A cada iteração executada, a variável 
iterações e acrescida de 1. 
E um metodo (Main), que controla o tempo de execução, utilizamos o método estático da 
classe System currentTimeMillis() (System.currentTimeMillis()), que retorna o tempo em 
milissegundos(Obtido do sistema) no momento em que a classe é instanciada, e utilizei no 
final da classe o mesmo método, para fazermos a diferença entre os valores dando como 
resultado o tempo de execução em milissegundos. Este valor é impresso na tela. 
Foi criada uma instância da classe Random(java.util.Random). O método utilizado foi o 
random.nextInt() que recebe como parâmetro um inteiro, que no nosso caso foi o número 7, 
que retorna valores aleatórios compreendidos de 0 e o inteiro utilizado, que no nosso caso foi 
o 7. Os valores gerados por esse método estão compreendidos entre 0 e 7, ou seja: 
{0,1,2,3,4,5,6,7}. Este método foi utilizado duas vezes e armazenado em duas variáveis 
(numero1 e numero2), para criar a posição inicial de nosso cavalo de forma aleatória. 
 Foi utilizado o Método println() da Classe System (System.out.println()) que recebe como 
parâmetro uma string para imprimirmos a posição inicial do cavalo. 
 Foi chamado o método valida () que recebe como parâmetro o número do contador, que no 
nosso caso, vai ser o 1 por ser a primeira iteração do cavalo, a posição x e a posição y. E no 
final da execução da classe é impresso o tabuleiro depois de todas as iterações possíveis, 
utilizando o método imprimeTabuleiro(). 
 
 
 
 
CODIFICAÇÃO 
 
package br.com.xadrez.entidades; 
import java.util.Random; 
public class Tabuleiro { 
 static long iteracoes=0L;static long limite = 1000000000L; 
 private int tabuleiro[][] = new int[8][8]; 
 private int movimentosX[] = {0, 2, 1, -1, -2, -2, -1, 1, 2 }; 
 private int movimentosY[] = {0, 1, 2, 2, 1, -1, -2, -2, -1 }; 
 
 public Tabuleiro() { 
 for (int i = 0; i < 8; i++) { 
 for (int j = 0; j < 8; j++) { 
 tabuleiro[i][j] = 0; 
 } 
 } 
 } 
 public void imprimeTabuleiro() { 
 for (int i = 0; i < 8; i++) { 
 System.out.println("\n+---------+---------+--------+---------+---------+---------+---------+-
--------+"); 
 for (int j = 0; j < 8; j++) { 
 if (tabuleiro[i][j] < 10) { 
 System.out.print("|----" +tabuleiro[i][j] + "----"); 
 } else { 
 System.out.print("|---" + tabuleiro[i][j] + "----"); 
 } 
 } 
 System.out.print("|"); 
 } 
 System.out.println("\n+---------+---------+---------+--------+---------+---------+---------+----
-----+"); 
 } 
 public boolean valida(int contador, int x, int y) { 
 int u, v; 
 iteracoes++; 
 if ((contador == 65) || iteracoes > limite) { 
 if(contador == 65) { 
 System.out.println("\nTodos os 64 movimentosforam encontrados!\n"); 
 }else{ 
 System.out.println("\nNão foi possível encontrar todos os 65 movimentos em 
1.000.000.000L de iterações\n"); 
 System.out.println("\nEncontrado: " + contador + " movimentos \n"); 
 } 
 return true; 
 } 
 for (int k = 0; k < 9; k++) { 
 u = x + movimentosX[k]; 
 v = y + movimentosY[k]; 
 if ((u >= 0 && u < 8) && (v >= 0 && v < 8) &&tabuleiro[u][v] == 0) { 
 tabuleiro[u][v] = contador; 
 if (!valida(contador+1,u,v)) 
 tabuleiro[u][v] = 0; 
 else return true; 
 } 
 } 
 return false; 
 } 
 public static void main(String[] args) { 
 long tempoInicio = System.currentTimeMillis(); 
 Random random = new Random(); 
 Tabuleiro tabuleiro = new Tabuleiro(); 
 int numero1 , numero2 ; 
 numero1= random.nextInt(7); 
 numero2= random.nextInt(7); 
 System.out.println("\nPosição inicial do cavalo: [ "+ numero1 +" , "+ numero2 + " ]\n"); 
 tabuleiro.valida(1, numero1, numero2); 
 tabuleiro.imprimeTabuleiro();System.out.println(""); 
 System.out.println("Tempo Total de execução: "+ (System.currentTimeMillis() - 
tempoInicio) +" Milisegundos"); 
 } 
 
} 
 
 
 
 
 
 
 
 
 
SIMULAÇÕES 
 Simulação 1 
 Posição inicial do cavalo: [ 0 , 0 ] 
 Todos os 64 movimentos foram encontrados. 
Tempo Total de execução: 954 Milissegundos 
 +---------+---------+---------+---------+---------+---------+---------+---------+ 
 |----1----|---60----|---39----|---34----|---31----|---18----|----9----|---64----| 
 +---------+---------+---------+---------+---------+---------+---------+---------+ 
 |---38----|---35----|---32----|---61----|---10----|---63----|---30----|---17----| 
 +---------+---------+---------+---------+---------+---------+---------+---------+ 
 |---59----|----2----|---37----|---40----|---33----|---28----|---19----|----8----| 
 +---------+---------+---------+---------+---------+---------+---------+---------+ 
 |---36----|---49----|---42----|---27----|---62----|---11----|---16----|---29----| 
 +---------+---------+---------+---------+---------+---------+---------+---------+ 
 |---43----|---58----|----3----|---50----|---41----|---24----|----7----|---20----| 
 +---------+---------+---------+---------+---------+---------+---------+---------+ 
 |---48----|---51----|---46----|---55----|---26----|---21----|---12----|---15----| 
 +---------+---------+---------+---------+---------+---------+---------+---------+|---57----|---44----|---
53----|----4----|---23----|---14----|---25----|----6----| 
 +---------+---------+---------+---------+---------+---------+---------+---------+ 
 |---52----|---47----|---56----|---45----|---54----|----5----|---22----|---13----| 
 +---------+---------+---------+---------+---------+---------+---------+---------+ 
 Simulação 2 
 Posição inicial do cavalo: [ 4 , 2 ] 
 Todos os 64 movimentos foram encontrados! 
 Tempo Total de execução: 12348 Milissegundos 
 +---------+---------+---------+---------+---------+---------+---------+---------+ 
 |---31----|---34----|---59----|---46----|---29----|---16----|----7----|---64----| 
 +---------+---------+---------+---------+---------+---------+---------+---------+ 
 |---60----|---45----|---30----|---33----|----8----|---63----|---28----|---15----| 
 +---------+---------+---------+---------+---------+---------+---------+---------+ 
 |---35----|---32----|---61----|---58----|---47----|---26----|---17----|----6----| 
 +---------+---------+---------+---------+---------+---------+---------+---------+ 
 |---44----|---49----|---56----|---25----|---62----|----9----|---14----|---27----| 
 +---------+---------+---------+---------+---------+---------+---------+---------+ 
 |---55----|---36----|----1----|---48----|---57----|---22----|----5----|---18----| 
 +---------+---------+---------+---------+---------+---------+---------+---------+ 
 |---50----|---43----|---52----|---39----|---24----|---19----|---10----|---13----| 
 +---------+---------+---------+---------+---------+---------+---------+---------+ 
 |---37----|---54----|---41----|----2----|---21----|---12----|---23----|----4----| 
 +---------+---------+---------+---------+---------+---------+---------+---------+|---42----|---51----|---
38----|---53----|---40----|----3----|---20----|---11----| 
 +---------+---------+---------+---------+---------+---------+---------+---------+ 
 Simulação 3 
 Posição inicial do cavalo: [ 4 , 5 ] 
 Todos os 64 movimentos foram encontrados! 
 Tempo Total de execução: 1417 Milissegundos 
+---------+---------+---------+---------+---------+---------+---------+---------+ 
 |---54----|---49----|---26----|---61----|---14----|---63----|---24----|----5----| 
 +---------+---------+---------+---------+---------+---------+---------+---------+ 
 |---45----|---60----|---53----|---48----|---25----|----6----|---13----|---64----| 
 +---------+---------+---------+---------+---------+---------+---------+---------+ 
 |---50----|---55----|---46----|---27----|---62----|---15----|----4----|---23----| 
 +---------+---------+---------+---------+---------+---------+---------+---------+ 
 |---59----|---44----|---29----|---52----|---47----|---22----|----7----|---12----| 
 +---------+---------+---------+---------+---------+---------+---------+---------+ 
 |---56----|---51----|---58----|---21----|---28----|----1----|---16----|----3----| 
 +---------+---------+---------+---------+---------+---------+---------+---------+ 
 |---43----|---34----|---37----|---30----|---39----|---18----|---11----|----8----| 
 +---------+---------+---------+---------+---------+---------+---------+---------+ 
 |---36----|---57----|---32----|---41----|---20----|----9----|----2----|---17----| 
 +---------+---------+---------+---------+---------+---------+---------+---------+ 
 |---33----|---42----|---35----|---38----|---31----|---40----|---19----|---10----| 
 +---------+---------+---------+---------+---------+---------+---------+---------+ 
 Simulação 4 
 Posição inicial do cavalo: [ 1 , 1 ] 
 Não foi possível encontrar todos os 65 movimentos em 1.000.000.000L de iterações 
 Encontrado: 49 movimentos 
 Tempo Total de execução: 113175 Milissegundos 
+---------+---------+---------+---------+---------+---------+---------+---------+ 
 |---33----|----0----|---27----|----0----|---15----|----0----|----0----|----8----| 
 +---------+---------+---------+---------+---------+---------+---------+---------+ 
 |---28----|----1----|---32----|----0----|---36----|----9----|---14----|----0----| 
 +---------+---------+---------+---------+---------+---------+---------+---------+ 
 |----0----|---34----|---45----|---26----|---31----|---16----|----7----|----0----| 
 +---------+---------+---------+---------+---------+---------+---------+---------+ 
 |---44----|---29----|----2----|---35----|----0----|---37----|---10----|---13----| 
 +---------+---------+---------+---------+---------+---------+---------+---------+ 
 |---41----|---46----|---43----|---30----|---25----|---12----|---17----|----6----| 
 +---------+---------+---------+---------+---------+---------+---------+---------+ 
 |----0----|----0----|---40----|----3----|---38----|---19----|---22----|---11----| 
 +---------+---------+---------+---------+---------+---------+---------+---------+ 
 |----0----|---42----|---47----|----0----|---21----|---24----|----5----|---18----| 
 +---------+---------+---------+---------+---------+---------+---------+---------+ 
 |---48----|----0----|----0----|---39----|----4----|----0----|---20----|---23----| 
 +---------+---------+---------+---------+---------+---------+---------+---------+ 
 Simulação 5 
 Posição inicial do cavalo: [5 , 0 ] 
 Não foi possível encontrar todos os 65 movimentos em 1.000.000.000L de iterações 
 Encontrado: 55 movimentos. 
Tempo Total de execução: 112249 Milissegundos 
+---------+---------+---------+---------+---------+---------+---------+---------+ 
 |---42----|---49----|----0----|---33----|---30----|---17----|----8----|----0----| 
 +---------+---------+---------+---------+---------+---------+---------+---------+ 
 |----0----|----0----|---41----|---48----|----9----|---32----|---29----|---16----| 
 +---------+---------+---------+---------+---------+---------+---------+---------+ 
 |---50----|---43----|---34----|---31----|----0----|---27----|---18----|----7----| 
 +---------+---------+---------+---------+---------+---------+---------+---------+ 
 |---35----|---40----|----0----|---26----|---47----|---10----|---15----|---28----| 
 +---------+---------+---------+---------+---------+---------+---------+---------+ 
 |---44----|---51----|---46----|---39----|----0----|---23----|----6----|---19----| 
 +---------+---------+---------+---------+---------+---------+---------+---------+ 
 |----1----|---36----|----0----|---54----|---25----|---20----|---11----|---14----|+---------+---------+---------+---------+---------+---------+---------+---------+ 
 |---52----|---45----|---38----|----3----|---22----|---13----|---24----|----5----| 
 +---------+---------+---------+---------+---------+---------+---------+---------+ 
 |---37----|----2----|---53----|----0----|----0----|----4----|---21----|---12----| 
 +---------+---------+---------+---------+---------+---------+---------+---------+ 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
CONCLUSÃO 
 
Com os resultados obtidos, conseguimos concluir que determinadas posições iniciais, a 
solução, utilizando o método implantado é impossível. Também é possível concluir que a 
posição inicial é um fator fundamental para a redução ou aumento do tempo de execução do 
código. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Parte 2 – Pesquisa 
Coesão: Coesão mede a intensidade da associação funcional dos elementos de um módulo. 
Deseja-se módulos altamente coesos, cujos elementos são relacionados um com os outros. 
 Porém, os elementos de um módulo não devem ser fortemente relacionados com os 
elementos de outros módulos, pois isto levaria a um forte acoplamento entre eles. 
A melhor forma de minimizar o acoplamento é ter certeza que todos os módulos possuem boa 
coesão. 
 
Coesão Funcional 
É apresentada em um módulo quando suas funções internas contribuem para exeução de uma 
e apenas uma tarefa relacionada ao problema. 
 
Coesão Sequencial 
É apresentada quando funções internas estão envolvidas em atividades de tal maneira, que os 
dados de saída de uma atividade sirvam como dados de entrada para a próxima. Este fluxo 
estabelece uma sequência de execução das funções, porém, não deve caracterizar o conjunto 
delas como uma única tarefa. 
Um módulo com Coesão Sequencial é caracterizado de fácil manutenção, porém, de baixa 
reutilização, pois possui atividades que são utilizadas juntas. 
 
Coesão Procedural 
 
Quando as funções internas de um módulo executam atividades diferentes e não 
correlacionadas, exceto por serem executadas em uma mesma ordem, nas quais o controle 
flui (e não os dados) de uma atividade para outra. É comum em um módulo com Coesão 
Procedural que os dados de entrada e saída tenham pouca relação, e também que tais módulos 
devolvam resultados parciais, tais como: flags, chaves. 
Coesão Temporal 
 
Quando as funções internas de um módulo executam atividades que estão relacionadas 
apenas com o tempo (as atividades não estão relacionadas entre si). A ordem de execução de 
atividades é mais importante em módulos procedurais do que em módulos temporais. 
Coesão Lógica 
 
Quando as funções internas de um módulo contribuem para atividades da mesma categoria 
geral, onde a atividade é selecionada fora do módulo. Assim, módulos logicamente coesos 
apresentam uma interface descaracterizada. 
 
 
Acoplamento: Mede o grau de interdependência entre os módulos do diagrama. O que se 
deseja são módulos de baixo acoplamento para diminuir o máximo possível o efeito em 
cadeia quando um módulo for alterado. 
 
Acoplamento de dados 
 
Corresponde à comunicação de dados necessária entre módulos. Uma vez que os módulos têm 
que se comunicar, a ligação de dados é inevitável, e não é crítica desde que mantidas as taxas 
mínimas. Deve-se tomar cuidado com o chamado dado migrante (um grupo de informações 
que vaga pelo sistema), indesejável e sem sentido para a maioria dos módulos pelos quais passa. 
Acoplamento de controle 
Dois módulos são acoplados por controle se um passa um grupo de dados (controle) para o 
outro para controlar sua lógica interna. No primeiro exemplo, o acoplamento não é tão crítico 
uma vez que o controle indica uma validação, porém o segundo exemplo exige que o módulo 
que enviou o controle (validar pedido) conheça o outro módulo. 
 
Acoplamento comum 
 
Dois módulos possuem acoplamento comum quando fazem referência a uma área global de 
dados (ex. Working Storage Section da linguagem Cobol). Este tipo de acoplamento não é 
desejável pois: 
- um erro em uma área global pode se propagar por diversos módulos; 
- programas com muitos dados globais são de difícil entendimento; 
- fica difícil descobrir que módulos devem ser alterados quando um dado é modificado. 
 
Acoplamento de conteúdo 
 
Dois módulos apresentam acoplamento de conteúdo (ou patológico) se um faz referência ou 
desvia a sequência de instruções para o interior de um outro módulo (GO TO). Tal acoplamento 
torna o conceito de caixas-pretas sem sentido. 
Acoplamento de carimbo 
Dois módulos apresentam acoplamento de carimbo se uma estrutura de dados for passada na 
forma de um argumento, porém, o módulo é chamado a operar somente sobre alguns dos 
componentes individuais dessa estrutura de dados. 
 
	Acoplamento: Mede o grau de interdependência entre os módulos do diagrama. O que se deseja são módulos de baixo acoplamento para diminuir o máximo possível o efeito em cadeia quando um módulo for alterado.

Outros materiais