Ajuda... Questão do Deitel

7 respostas
ajob

Bem ha algum tempo resolvi aprender java, e peguei um livro emprestado que acho que todo mundo ja ouviu falar… Java Como programar - Deitel, estou lendo o 7 capítulo fazendo os exercícios e achando muito legal e tudo mais, porem a questão 7.21 emperrou… se alguem poder me ajudar ou me passar o código para ver se eu entendo ficaria muito grato a questão é:

7.21 (Gráfico tartaruga) A liguangem Logo tornou famoso o conceito de gráfico tartaruga. Imagine uma tartaruga mecânica que caminha no lugar sob o controle de um aplicativo Java. A tartaruga segura uma caneta em uma de duas posições, para cima ou para baixo. Enquanto a caneta está para baixo a tartaruga desenha formas a medida que se move, e enquanto a caneta esta para cima a tartaruga se move quase livremente sem escrever nada. Nesse problema você simulará a operação da tartaruga e criará um bloco de rascunho computadorizado.
Utilize um array de 20 por 20 floor que é inicializado como zeros. Leia comandos a partir de um array que contenha esses comandos. Monitore a posição atual da tartaruga todas as vezes e se a caneta está atualmente para cima ou para baixo. Suponha que a tartaruga sempre inicia na posição(0,0) do chão com sua caneta para cima. O conjunto de comandos de tartaruga que seu aplicativo deve processar é:
Comando Ação
1 Caneta para cima
2 Caneta para baixo
3 vira para direita
4 vira para esquerda
5,10 Avance 10 espaços(Substitua 10 por um número diferente de espaços)
6 Exiba o array 20 por 20
9 Fim dos dados(sentinela)

Suponha que a tartaruga esteja em algum lugar próximo ao centro do chão. O seguinte ‘programa’ desenharia e exibiria um quadrado de 12 por 12 deixando a caneta na posição levantada:

2
5,12
3
5,12
3
5,12
3
5,12
1
6
9

À medida que a tartaruga se moove com a caneta por baixo, configure os elementos apropriados do array floor como 1s. Quando o comando 6(exibir o array) for dado, onde que que haja um 1 no array, exiba um asterisco ou um caractere que você escolher. Onde que que haja um 0, exiba um espaço em branco.
Escreva um aplicativo para implementar as capaciadades dos gráficos de tartaruga discutidos aqui. Escreva vários programas de gráfico tartaruga para desenhar formas interessantes. Adicione outros comandos para aumentar a capacidade de sua linguagem de gráfico de tartaruga.

Uffa… Eis a questão completa e igual ao do livro ela ta xerocopiada, quem poder me ajudar ficaria profundamente agradecido… Detalhe é para usar apenas os conhceimentos ja fornecidos no livro e são eles
1- introdução a classes e objetos
2-instruções de controle
3- metodos
4- arrrays

7 Respostas

ajob

cri cri cri cri cri … ninguem??? alguem pode me dar um ajuda… nada??? gente não quero que resolvam apenas me deem uma ideia ou algo assim… vlw… abração :lol:

Banzai10

Seguinte meu amigo,

este exercicio é para aprender diversos conceitos, quam sabe se tu iniciar criando uma classe Tartaruga,

que contenha a posição atual dela em relação a matrix, depois você terá que guardar, possivelmente em uma Enum

ou em um boleano se a caneta está para cima ou para baixo,

e criar a função mover, que irá substituir os valores da matrix, de 0 para 1, conforme a tartaruga for andando.

Acho que é esta a intenção dele, pense direitinho commo tu poderá criar as classes, isso é muito importante,

pode deixar seu código mais legível e interessante.

ajob

Ai galera depois de muito ralar, estou satisfeito… Consegui resolver o problema… Ai o código

import java.util.Scanner;
public class Comandos{

private boolean pencil = true;
private Scanner ent = new Scanner(System.in);
private int posicaos=0, quant;

public Comandos(){
	array[0][0] = 2;
}
public void setPencil(boolean x){
	pencil = x;
	
}
public boolean getPencil(){
	return pencil;
}

public void menu(){
	System.out.println("Entre com o comando ou digite 9 para sair");
	int x = ent.nextInt();
	
	switch(x){
	case 0:
		exit();
		break;
	case 1:
		setPencil(true);
		menu();
		break;
	case 2:
		setPencil(false);
		menu();
		break;
	case 3:
		posicaos += 1;
		menu();
		break;
	case 4:
		posicaos--;
		menu();
		break;
	case 5:
		System.out.println("Digite a quantidade de quadrados que vc deseja andar:");
		quant = ent.nextInt();
		Andar(quant);
		menu();
		break;
	case 6:
		ImprimirGrade();
		menu();
		break;
	case 9:
		exit();
		break;
	default:
		System.out.println("COmando Invalido, Favor tente de novo");
		exit();
	
	}
}
public void exit(){
	
}

private int array[][] = new int[20][20];


public int getGrade(int i, int j){
	return array[i][j];
}

public void setGrade(int i, int j, int k){
	array[i][j] = k;
}

public void ImprimirGrade(){
	for(int i = 0; i< 20 ; i++){
		for(int j = 0; j<20; j++){
			if(array[j][i]==2)
				System.out.print("T");
			else{
				if(array[j][i]==1)
					System.out.print("*");
				else
					System.out.print(" ");
			}
		}
		System.out.println();
	}
}

public void Andar(int l){
	int i, j;
	if(posicaos>=0)
		posicaos = (posicaos)%4;
	else
		posicaos = posicaos+ 4;
	switch(posicaos){
	case 0:
		i = PosicaoAtualLinha();
			j = PosicaoAtualColuna();
		setGrade(i,j,0);
		if(getPencil()){
			if(l+i>19){
				setGrade(19,j,2);
			}
			else{
				setGrade(i+l, j, 2);
			}
		}
		else{
			if(l+i>19){
				for(int m = i; m<19; m++)
					setGrade(m,j,1);
				setGrade(19,j,2);
			}
			else{
				for(int m = i; m<l+i; m++)
					setGrade(m, j, 1);
				setGrade(i+l, j, 2);
			}
		}
		break;
	case 1:
		i = PosicaoAtualLinha();
		j = PosicaoAtualColuna();
		setGrade(i,j,0);
		if(getPencil()){
			if(l+j>19){
			setGrade(i,19,2);
			}
			else{
				setGrade(i, j+l, 2);
			}
		}
		else{
			if(l+j>19){
				for(int m = j; m<19; m++)
					setGrade(i,m,1);
				setGrade(i,19,2);
			}
			else{
				for(int m = j; m<l+j; m++)
					setGrade(i, m, 1);
				setGrade(i, j+l, 2);
			}
		}
		break;
	case 2:
		
			i = PosicaoAtualLinha();
			j = PosicaoAtualColuna();
			setGrade(i,j,0);
		if(getPencil()){
			if(i-l><0){
				setGrade(0,j,2);
			}
			else{
			setGrade(i-l, j, 2);
			}
		}
		else{
			if(i-l<0){
				for(int m = i; m>0; m--){
					setGrade(m,j,1);
				}
				setGrade(0,j,2);
			}
			else{
				for(int m = i; m>i-l; m--){
					setGrade(m, j, 1);
				}
				setGrade(i-l, j, 2);
			}
		}
		break;
	case 3: 
		i = PosicaoAtualLinha();
		j = PosicaoAtualColuna();
		setGrade(i,j,0);
		if(getPencil()){
			if(j-l<0){
			setGrade(i,0,2);
			}
			else{
				setGrade(i, j-l, 2);
			}
		}
		else{
			if(j-l<0){
				for(int m = j; m>0; m--)
					setGrade(i,m,1);
				setGrade(i,0,2);
			}
			else{
				for(int m = j; m>j-l; m--)
					setGrade(i, m, 1);
				setGrade(i, j-l, 2);
			}
		}
		break;
	}
	
	
}

public int PosicaoAtualLinha(){
	int i=0;
	for(int m = 0 ; m<20; m++){
		for(int n = 0 ; n<20; n++){
			if(array[m][n]==2){
				i = m;
				break;
			}
		}
	}
	return i;
}

public int PosicaoAtualColuna(){
	int i=0;
	for(int m = 0 ; m<20; m++){
		for(int n = 0 ; n<20; n++){
			if(array[m][n]==2){
				i = n;
				break;
			}
		}
	}
	return i;
}

}

public class Execute {

public static void main(String args[]){
	Comandos exeComando = new Comandos();
	
	exeComando.menu();
	
	
	}
}

Bem criticas construtivas seram aceitas… Lembrem-se que sou novato então deve haver centenas de erros ai… Mas o programa funciona direitim… Quem quiser da uma força… tipo o que eu poderia fazer para melhorar e por que que melhora… abraço

airtonarantes

:shock: Creio que você deveria olhar isso :shock:

http://www.guj.com.br/posts/list/50115.java

[]'s

alucardeck

sim…
poste o codigo entre as tags [ code ] [/ code ]

nao testei ele ainda, mas parabens por conseguir resolver o exercicio…

viu como todo mundo é capaz de programar?
eh sempre bom estudar e tentar fazer sozinho… antes de vim pedir ajuda nos foruns
coisa q pouca gente faz… pessoal gosta de tudo mastigado…

ajob

mas eu tentei, estava emperrado nesta questão ja fazia uns 3 dias, por isso pedi ajuda… Então como a unica resposta que tive, era resumidamente, tente outra vez, eu resolvi ficar quebrando a ccabeça… Como não tou acostumado a programar foi dificil organizar e como vcs devem ter notado o codigo esta simplismente bagunçado… quando tentei separar por classes, ele não funcionava e quando juntei e deletei os construtores voltu a funcionar. agora só quero uma ajuda para melhorar… mudar o que e por que… entende… abração

Nivea

Nossa, eu to ressucitando o topico, mas eu queria saber porque vc fez

array[0][0] = 2

?

por que igual a 2?

Criado 10 de julho de 2008
Ultima resposta 11 de out. de 2010
Respostas 7
Participantes 5