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:
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.