Como enunciado do EP3 do BCC é o enunciado do ciclo básico com alguns extras, os alunos do BCC já devem começar a fazer o EP a partir do enunciado fornecido. O enunciado final do BCC será fornecido o mais rápido possível.
Olás,
Acabei de fazer mais umas mudanças para o ciclo básico.
No exemplo da seção 1.4 (Graus de liberdade), ficou faltando colocar o número 6 nos valores dos "Números da coluna 5". Os outros valores estão corretos. Dessa forma, o exemplo fica:
Números da linha 3: 2,3,4,8 (inalterado)
Números da coluna 5: 2,3,4,5,6,8,9 (foi adicionado o 6)
Números da caixa 1: 1,2,3,4,5 (inalterado)
Números distintos nas restrições: 1,2,3,4,5,6,8,9 = 8 números distintos (inalterado)
Graus de liberdade da célula (3,5): 1 = 9 - 8 (inalterado)
Números possíveis para a célula (3,5): 7 (inalterado)
Felipe
Arquivo: enunciado_ep3_ciclo_basico.v0.0.3.pdf
Enviado tbm o arquivo sudoku01.txt com o exemplo.
Caso vcs notem algum outro problemas, por favor, informem os monitores.
Atenciosamente,
Ernesto
Existe tambem alguma previsao para a divulgaçao das notas do segundo EP?
Agradeço antecipadamente,
Renato
Opa, nao sou monitor nem nada, mas fiz um sudoku01.txt por mim mesmo, nao sei se ta certo, tive q adaptar algumas coisas pq acho q o enunciado ta errado:
1 4 1
1 5 2
1 8 3
1 9 4
2 4 5
2 5 3
2 8 6
2 9 7
3 1 8
3 2 3
3 3 2
3 4 4
4 3 7
4 4 2
4 5 6
4 7 9
5 2 5
5 3 1
5 5 9
5 7 3
5 8 8
6 3 4
6 5 8
6 6 5
6 7 1
7 6 3
7 7 4
7 8 5
7 9 9
8 1 6
8 2 4
8 5 5
8 6 2
9 1 1
9 2 9
9 5 4
9 6 7
soh copiar e colar num txt com qquer nome...
Re: Enunciado do EP3 entrar pelo arquivo de texto
Para a leitura do arquivo pelo arquivo texto tenho que passar o nome do arquivo de texto como parametro de uma função, não entendo como fazer isso.
Alguem tem idéia?
Obrigado.
Eduardo.
Aproveitando, gostaria de saber qual é a data de entrega do EP3...
Seria bom que soubessemos a data antes do feriado que se inicia nesta quinta-feira (corpus christi).
Grato,
Danny
data de entrega: 29/6/06
foi divulgada na aula de MAC0110 da terça-feira (13/6/06)
http://paca.ime.usp.br/file.php/55/enunciado_ep3_ciclo_basico.v0.0.3.pdf
esquecido o preenchimento de uma celula na tabela da ultima pagina
porem facil de deduzir o seu valor
http://paca.ime.usp.br/file.php/55/sudoku01.txt
erro na no preenchimento da celula (8,6), a qual joga o valor para (6,6)
1) Eu posso fazer uma importação do tipo import.util.* para utilizar o Scanner, numa implementação do programa?
2)Os sudokus do programa são apenas do tipo 9X9?
grato,
Paulo
A sintaxe de uma instrução for aprimorada é:
for ( parâmetro : nomeDoArray )
instrução
Grato,
Diogo José
Eu ja acabei meu EP e, lendo o que deve ser entregue, vi que deve ser entregue um jogo inserido por teclado e três simulações até o fim.
Me desculpem, mas isso é meio desumano, não acham?
Uma coisa é você fazer um jogo de sudoku no papel, e outra no computador,
digitando as linhas, as colunas e os valores a serem preenchidos. considerando que um jogo de sudoku 9X9 tenha metade de suas casas a sere preenchidas, teriamos que preencher 81 casas a cada jogo, ou seja, 243 casas. Como devemos digitar três numeros (linha, coluna e valor), seriam 729 valores a ser preenchidos. Somando o tabuleiro que deve ser digitado, teriamos cerca de 945 números a serem digitados.
Que tal dar um desconto nessas simulações?
Boa noite,
eu tambem fico impressionado com o resultado final do programa que somos capazes de fazer apos o curso ministrado, gerando frutos tao belos. Todavia, gostaria de reiterar a crítica quanto ao número de simulações, que excede e muito um mero documento atestando o funcionamento do programa. Basta compilá-lo e executá-lo para testar as funcionalidades, o que parece muito mais sensato do que ler um imenso documento de simulação. No aguardo de providências a respeito, agradeço antecipadamente.
Não tem a ver com o EP, mas gostaria de poder sanar algumas dúvidas:
1- Quando faço um método "double" ou "int" para retornar matrizes, ou "arrays", é retornado apenas uns caracteres aleatórios (que representa a posição do objeto na memória). Para resolver este problema, estou usando métodos "void", que imprimem o conteúdo dos objetos citados. Existe uma forma de RETORNAR o conteúdo dos objetos "matriz" e "array", assim como era feito com variáveis, usando métodos "int" e/ou "double"? Se sim, como proceder?
2- É possível declarar um array de String? Se sim, como?
Tentei fazer algo do tipo String[ ] a = {"oi", "ola", "opa"} como no caso numérico de arrays, mas não obtive êxito.
3- Como faço para ordenar um array de String?
1) A devolução de vetores e matrizes funciona normalmente, a dificuldade é
que não existe forma padrão de imprimi-los. Logo, veja o seguinte exemplo do painel de interações:
Welcome to DrJava.
> int [] a = {1,3,4}
> a
[I@e2433b
> for (int i = 0; i < a.length; i++)
System.out.println(a[i]);
1
3
4
>
2) Estranho... Veja o trecho seguinte:
> String[ ] s = {"oi", "ola", "opa"}
> s[0]
"oi"
> s[1]
"ola"
> s[2]
"opa"
>
3) Para comparar Strings use o método compareTo
Alfredo
Não entendi bem o problema, pois no enunciado está claro que basta imprimir parte das simulações, e durante o teste do EP serão feitas várias simulações.
"Ao realizar a simulação o aluno não precisa imprimir o tabuleiro e os graus de liberdade a cada jogada, mas deverá fazê-lo necessariamente: i) No início do jogo logo após carregar o tabuleiro; ii) ao fim do jogo, com ele já totalmente preenchido; iii) 2 vezes ao longo de cada jogo."
Mas, concordo que a simulação com a entrada do tabuleiro pelo teclado é excessiva ! Logo, pode ser eliminada.
Alfredo
Caro Alfredo,
agradeço compreensao acerca do 'gigantismo' das simulações propostas. No caso, devo entao copiar num arquivo txt a geraçao aleatoria de um tabuleiro e a leitura de um arquivo com um tabuleiro e suas respectivas resoluções, acompanhadas de eventuais calculos dos graus de liberdade e reimpressoes do tabuleiro?
Ademais, quando estará disponível o recurso "tarefa" aqui no PACA para enviar os arquivos?
Obrigado.
Isto mesmo, copie a geração aleatória, e alguns dos passos para a resolução,
incluindo o cálculo de graus de liberdade.
O recurso "tarefa" será disponibilizado em breve.
Alfredo
Primeiramente gostariamos de parabenizar o Paulo por ter terminado seu EP em tempo recorde!!!
São de pessoas assim, como o PAULO, que a sociedade precisa!
Segundamente, gostaria de saber quando e como será a rec e se as notas dos EPs serão consideradas nela.
Grato,
Bitteti
PS: Paulo, vc tem dupla pro proximo EP??? =)
Eu tento, mas não consigo ser tão bom quanto vcs!
Oi, no trabalho anterior não consegui (na minha máquina) abrir os arquivos para serem encriptados, se consegui fazer isso no cec.
Agora esta me acontecendo o mesmos.
Por exemplo, tenho que fazer Leitor leitor=new LeitorDeArquivo("C:\Meus documentos\sudoku\sudoku01") (sem o txt), segundo o exemplo, mas quando fazo isso, me diz:
TokenMgrError: Lexical error at line 1, column 39. Encountered: "M" (77), after : "C:\
Qué parámetro tenho que colocar para poder abrir o arquivo sudoku01 na minha máquina, suponhamos que o arquivo sudoku01 esta em:
C:\Meus documentos\libros\sudoku\sudoku01.txt
Obrigado.
Eduardo.
Caro colega, você, na hora de chamar um método que abra o respectivo arquivo deve escrever, dentro dos parênteses, o seguinte:
obs.: Vou pegar como exemplo o seu caminho de arquivo.
("C:\\Meus documentos\\libros\\sudoku\\sudoku01.txt")
note que o caminho do arquivo, como se trata de uma String, deve sempre estar entre aspas. E além disso, voce deve acrescentar uma barra a cada barra do caminho, como demonstrado acima.
Fico por aqui, e espero ter solucionado a sua dúvida.
Aparentemente funciona, muito obrigado.
Eduardo.
Oi, quando tenho uma matriz no Dr. Java e mando compilar o programa aparece como erro:
ArrayIndexOutOfBoundsException: 9
Na primeira linha coloco:
{boolean [][] Matriz= new boolean[9][9]
Tenho que declarar de outra forma a matriz.
Obrigado.
Eduardo.
Espero que isso ajude.
Era isso, obrigado.
Eduardo.
Pd.: Podemo confirmar se a data da entrega é o 4 de julho...seria bom, poderiamos comemorar a independencia americana fazendo o trabalho....
Oi, estave pasando como parámetro da função jogadaValida a matriz do sudoku para assim usar ela tanto no sudoku inicial como no sudoku de jogo, mas não esta modificando o sudoku global, pode ser que não se poda colocar como parametro?
void prencheTabuleiro( int [][] nomedotabuleiro, int linha, int coluna,int nro)
Suponhamos que o nome do sudoku inicial é sudokuInicial, esta declarada para toda a clase, mas se preencho o tabuleiro colocando:
prencheTabuleiro(sudokuInicial, 5, 6,7)
não esta modificando a matriz sudokuInicial, não posso então pasar a matriz como parâmetro?
Obrigado.
Eduardo.
Re: passar como parametro de uma função uma matriz
Você pode sim passar uma matriz como parâmetro, o problema é que você não passa a matriz em si, mais sim o valor que aponta para a primeira posição da matriz, eu sei que isso é só um conceito e q na verdade não vai importar na hora de programar, mais é bom ter isso em mente. Segundo, sudokuinicial é o nome do objeto (Sudoku sudokuinicial = new Sudoku()) ou é um dos atributos?! (ou tem o mesmo nome!?!?). Hum.. é, fica difícil pensar no que pode estar acontecendo sem mais detalhes O.o .... Todo caso, posta os detalhes e ai eu volto aqui para tentar ajudar!
Re: passar como parametro de uma função uma matriz
Por exemplo, tenho que validar tanto o tabuleiro inicial como as jogadas que se fazem.Se ao carregar o sudoku testo o que va colocando a pessoa ou o que está no arquivo de texto com a mesma função que para testar jogadaValida, so que coloco o nome do sudoku no qual quero testar a jogada.
se faço:
boolean jogadaValidaColuna( int [][] nomedotabuleiro,
int coluna, int nro)
Então minha idéia é testar cada ingreso num sudoku novo ai testo com:
boolean jogadaValidaColuna( sudokuInicial,
int coluna, int nro)
Se estou testando uma jogada no tabuleiro de jogo mando:
boolean jogadaValidaColuna(sudokuDeJogo,int coluna, int nro)
Por exemplo, so que em uma mando o nome onde tenho o sudoku inicial, para testar que não mude alguma das casas o jogador e na outra com o nome do sudoku para jogar.
Não sei se me expliquei bem.....Meu portuguës não é muito bom também.
Obrigado
Eduardo.
Re: passar como parametro de uma função uma matriz
Tenho dois matrizes uma sudokuInicial e outra sudokuDeJogo.
Obrigado.
Eduardo.
Re: passar como parametro de uma função uma matriz
boolean jogadaValidaColuna( int [][] nomedotabuleiro,
int coluna, int nro)
faça assim, poste o código do método, para eu entender o que você está fazendo e como isso está funcionando, por que (desculpe :P) eu ainda não consigo entender direito o que você deseja.
A sintaxe de uma instrução for aprimorada é:
for ( parâmetro : nomeDoArray )
instrução
Grato,
Diogo José
Aliás, alguém conseguiu fazer o método "void geraTabuleiroAleatorio()" da maneira que é pedido no EP? Complicado abessa...
Se alguém conseguir, postem! Esclareçam-nos!
Para permutar aleatoriamente uma seqüência de valores {a1, a2, a3, ..., an} você pode gerar um vetor de tamanho n, gerar números aleatórios a1, a2, ..., an e verificar se an = an-1, an-2, ..., a1, se sim gere an novamente, senão gere an+1.
Exemplo:
a3 = {1, 2, 3}
gero um número aleatório, 2 por exemplo.
vetor = {2, 0, 0}
gero outro número aleatório, suponhamos que seja 2 novamente.
vetor = {2, 2, 0}
verifico se a2 = a1.
como são iguais gero a2 dinovo, e assim sucessivamente.
Essa é uma maneira de fazer o método "void geraTabuleiroAleatorio()", existem outras.
É isso!
Diogo José
O seu método pode funcionar, mas é bem ineficiente.
Que tal começar com um vetor com os números de 1 a n,
em seguida sorteia-se uma posição entre 0 e n-1, retira-se
o número nesta posição e coloque o último número neste
lugar. Sorteie em seguida um número entre 0 e n-2, e assim
sucessivamente.
Os números retirados vão corresponder a uma permutação.
Alfredo
Sim, todos os monitores provavelmente tem a ultima versao do Java.
Mas só por garantia, seria aconselhavel deixar isso escrito em algum lugar.
Tá muito mau explicado no EP, além de ser complicado abessa... Será que alguém, ou melhor, algum monitor pode nos esclarecer melhor esse método? Aliás, essa semana foi difícil falar com os monitores... Displicencia total..
Para gerar um tabuleiro vc vai precisar de um outro tabuleiro!!!!
Ou seja, vc vai pegar um tabuleiro completamente preenchido e modificá-lo. Como?
1º. Você vai trocar linhas do tabuleiro dentro de caixas. Ex.: Você pode trocar a linha 0 do tabuleiro (completa) com a linha 2, trocar a linha 1 com a linha 2; trocar a linha 5 com a 7... (isso vc vai implementar de uma forma aleatória)
2º. Você vai trocar colunas do tabuleiro dentro de caixas. Ex.: Você pode trocar a coluna 0 (completa) com a coluna 1....... (de uma forma aleatória)
Assim o seu tabuleiro já vai estar meio aleatório... continuando...
3º.: Você vai trocar linhas de caixas. Ex.: Você pode trocar as linhas 0,1,2 (completas) com as linhas 6,7,8 (completas)... (de uma forma aleatória)
4º.: Você vai trocar colunas de caixas. Ex.: Você pode trocar as colunas 0,1,2 (completas) com as colunas 3,4,5 (completas)... (de uma forma aleatória)
5º.: Apagar alguns valores (de forma aleatória) do tabuleiro.
Daí o seu tabuleiro vai estar um pouco (rs*) aleatório...
duvida sobre como preencher as celulas no jogo:
fala no enunciado q tenho q usar esse metodo pra isso
boolean jogadaValida (int linha, int coluna, int valor)
mas pq boolean? toda vez q eu jogar ele fica retornando true c for um jogada valida? nao entendi isso muito bem
e outra duvida, no metodo calculaGrausDeLiberdade , pede pra retornar uma matriz,
mas vai sair aquele codigo todo esquisito la, entao alem de retornar aquele codigo esquisito ele imprime a matriz com seus graus de liberdade de cada casa?
eh isso vlw
Quanto ao método jogada válida, ele retorna o estado do sucesso da jogada para que a interface gráfica faça possa diferenciar quando a tentativa de jogada foi válida. Já que o jogador não faz jogadas, mas sim tentativas de jogada, que podem ser ou não válidas.
pucblic ....
{
...
Jogada novaJogada = new Jogada(x,y,z);
if ( jogadaValida(novaJogada))
{
//Chama metodo(s) que mudam a interface gráfica, sabendo que houve jogada válida
}
else
{
//Chama método(s) que avisam ao jogador que ele executou uma operação ilegal
}
Quanto ao atualiza graus de liberdade, acredito que o método não deva mudar a matriz de graus de liberdade, e que deva ser chamado assim.
matrizGrausDeLiberdade = calculaGrausDeLiberdade();
Talvez isso seja um indício de que o objeto matriz, que vai armazenar os gráus de liberdade, não deva estar dentro da classe sudoku.
Acho que consegui ajudar ^.^
PS: No wiki do bcc (http://julian.com.br/dokuwiki) existem mais discussões sobre o EP3, aconselho uma passada lá ^.^
Pessoal,
Muitos já devem ter notado, mas, para aqueles que não notaram, vale a dica.
A classe Leitor que foi mandada pra gente não entende a leitura de linhas vazias, portanto, se você tiver, por exemplo, dado um enter após a última linha de coordenadas no arquivo sudoku01.txt, é provavél que o drjava, no final da leitura do seu arquivo, acuse um erro do tipo ArraysIndexOutofBounds...
Para evitar essa mensagem, apenas vá no arquivo sudoko01.txt e apague os enters dados no final da lista de valores, caso tenha feito isso. Apague também qualquer espaço dado no final de uma linha.
É isso!
Sim, o método é do tipo int[][].
int[][] calculaGrausDeLiberdade() {
int[][] grausDeLiberdade = new grausDeLiberdade[tamanho][tamanho];
// Faz os cálculos....
return grausDeLiberdade;
}
Diferente dos tipos primitivos (int, float, boolean), os vetores e matrizes (int[], int[][]) em Java são referências para objetos e, portanto , ao imprimir aparece essa coisa feia: array@42a818. Isso não é um erro, e sim o endereco de memória daquele objeto.
Para imprimir a matriz você deve fazer dois lacos para percorrer todas as posicões e imprimir uma a uma.
Espero ter ajudado...
[]s
mas,
pra q devo retornar um int[][] se nao irei fazer uso dele
num era melhor ser void e apenas "imprimir" na tela a matriz com os valores dos graus de liberdade???
Nossa, donde veio este ilustre indivíduo com tantos conhecimentos em Java??
É por acaso monitor??
Danny, obrigado por compartilhar uma migalha de seu infindável conhecimento conosco!!
PS:Está me devendo 5 reais...!
Ontem enviei o programa mas incompleto ja que não consegui acabar-o.
Da para entregar o 4 de Julho se não estou no BCC?
Alguem sabe?
Obrigado.
Eduardo.