Olá pessoal, quero validar a saida desse programa mas não estou conseguindo. O tamanho de n não pode ser maior que 20 e nem menor que 5, porém ao informar um número superior a esse o programa executa o código. Quando o valor é menor que 5 a mensagem aparece.Quando é maior que 20 ele continua processando.
Obrigado pela atenção.
Aí está o código:
// CIENCIA DA COMPUTACAO - FUMEC
// ESTRUTURA DE DADOS I
// MICHEL MARTINS VILELA
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int n; //tamanho do tabuleiro
struct desloc
{ // Usado para sistemas de pontos,onde há deslocamentos nas direções x e y
int dx;
int dy;
};
// vetor de deslocamentos que define os possíveis
// movimentos do cavalo no tabuleiro de xadrez - maximo de 8 posicoes
desloc mov_cav[8]={{ 2, 1},{ 1, 2},{-1, 2},{-2, 1},
{-2,-1},{-1,-2},{ 1,-2},{ 2,-1}};
int **T; // tabuleiro
int nsq; // número de posiçoes no tabuleiro quando n^2
bool tenta_mov(int i, int x, int y) {
int u,v; // posição do próximo movimento
bool que; // quando true => movimento com sucesso
int k;
k=0;
do {
que=false;
u = x+mov_cav[k].dx;
v = y+mov_cav[k].dy;
k=k+1;
// verifica se a posição é válida no tabuleiro
// e se a posição ainda não foi visitada
if (0 <= u && u < n && 0 <= v && v < n &&
T[u][v]==0) { //valida se posicoes u/v são menores que tam tabuleiro, se não estao
//preenchidas e se o tabuleiro na posicao u/v não esta ocupada
T[u][v]=i; // registra a visita
if (i < nsq) { // i menor que numero de posicoes tabuleiro
// ainda há posições no tabuleiro não visitadas
que = tenta_mov(i+1,u,v);
if (!que) // movimento sem sucesso
T[u][v]=0; // remova o registo de "visita"
}
else que=true;
}
} while (!que && k<8);
return que;
}
int main ( int argc, char **argv ) {
bool ok;
// printf("Tamanho do tabuleiro = ");
// scanf("%d", &n);
if (argc != 2)
exit(-1);
printf("\n Utilizacao: %s %s. \n",argv[0],argv[1]);
//system("PAUSE");
if (n>20){
printf("Faixa valida de 5 a 20!");
}
else
n=atoi(argv[1]);
nsq = n*n;
// Aloca espaço para o tabuleiro
T= new(int* [n]);
for (int i=0; i < n; i++)
T[i]= new(int[n]);
for (int i=0; i < n; i++)
for (int j=0; j < n; j++)
T[i][j]=0;
T[0][0]=1; //primeira posicao ocupada
ok= tenta_mov(2,0,0); // andar mais duas - chama funcao, I=2,x=0,z=0
if (ok) {
for (int i=0; i < n; i++) {
for (int j=0; j < n; j++)
printf("%d ", T[i][j]);
printf("\n");
getch();
}
}
else
printf("Faixa valida de 5 a 20!");
delete T;
getch();
return 0;
}
[/b]
Pergunta
MicheL Vilela
Olá pessoal, quero validar a saida desse programa mas não estou conseguindo. O tamanho de n não pode ser maior que 20 e nem menor que 5, porém ao informar um número superior a esse o programa executa o código. Quando o valor é menor que 5 a mensagem aparece.Quando é maior que 20 ele continua processando.
Obrigado pela atenção.
Aí está o código:
// CIENCIA DA COMPUTACAO - FUMEC // ESTRUTURA DE DADOS I // MICHEL MARTINS VILELA #include <stdio.h> #include <conio.h> #include <stdlib.h> int n; //tamanho do tabuleiro struct desloc { // Usado para sistemas de pontos,onde há deslocamentos nas direções x e y int dx; int dy; }; // vetor de deslocamentos que define os possíveis // movimentos do cavalo no tabuleiro de xadrez - maximo de 8 posicoes desloc mov_cav[8]={{ 2, 1},{ 1, 2},{-1, 2},{-2, 1}, {-2,-1},{-1,-2},{ 1,-2},{ 2,-1}}; int **T; // tabuleiro int nsq; // número de posiçoes no tabuleiro quando n^2 bool tenta_mov(int i, int x, int y) { int u,v; // posição do próximo movimento bool que; // quando true => movimento com sucesso int k; k=0; do { que=false; u = x+mov_cav[k].dx; v = y+mov_cav[k].dy; k=k+1; // verifica se a posição é válida no tabuleiro // e se a posição ainda não foi visitada if (0 <= u && u < n && 0 <= v && v < n && T[u][v]==0) { //valida se posicoes u/v são menores que tam tabuleiro, se não estao //preenchidas e se o tabuleiro na posicao u/v não esta ocupada T[u][v]=i; // registra a visita if (i < nsq) { // i menor que numero de posicoes tabuleiro // ainda há posições no tabuleiro não visitadas que = tenta_mov(i+1,u,v); if (!que) // movimento sem sucesso T[u][v]=0; // remova o registo de "visita" } else que=true; } } while (!que && k<8); return que; } int main ( int argc, char **argv ) { bool ok; // printf("Tamanho do tabuleiro = "); // scanf("%d", &n); if (argc != 2) exit(-1); printf("\n Utilizacao: %s %s. \n",argv[0],argv[1]); //system("PAUSE"); if (n>20){ printf("Faixa valida de 5 a 20!"); } else n=atoi(argv[1]); nsq = n*n; // Aloca espaço para o tabuleiro T= new(int* [n]); for (int i=0; i < n; i++) T[i]= new(int[n]); for (int i=0; i < n; i++) for (int j=0; j < n; j++) T[i][j]=0; T[0][0]=1; //primeira posicao ocupada ok= tenta_mov(2,0,0); // andar mais duas - chama funcao, I=2,x=0,z=0 if (ok) { for (int i=0; i < n; i++) { for (int j=0; j < n; j++) printf("%d ", T[i][j]); printf("\n"); getch(); } } else printf("Faixa valida de 5 a 20!"); delete T; getch(); return 0; } [/b]Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.