Exercício 16: Modificar o programa do Exercício 15 para não permitir que o usuário realize jogadas cujas coordenadas excedam os limites da matriz de caracteres tal como: 35 (que significa realizar jogada na quarta linha e quinta coluna, ambas inexistentes).

Passo 1

O exercício pede para modificar o programa do Exercício 15 de forma que não aceite jogadas cujas coordenadas ultrapassem os limites da matriz de caracteres (por exemplo, ‘35’ para uma matriz 3×3). O conteúdo envolvido é validação de entrada, extração de dígitos com divisão inteira e módulo, estruturas condicionais e laço de repetição.

Passo 2

Para extrair linha e coluna de uma jogada dada em dois dígitos (como 23), vamos usar divisão inteira e módulo: a linha é o dígito das dezenas e a coluna é o dígito das unidades. Se consideramos índices baseados em 1, subtraímos 1 para usar índices baseados em 0 no vetor.
Precisamos garantir que tanto a linha quanto a coluna fiquem dentro de 0 e SIZE−1 (onde SIZE é o tamanho da matriz). Em C, testamos: linha<0 || linha>=SIZE || coluna<0 || coluna>=SIZE. Se a condição for verdadeira, repetimos o pedido de jogada.

Passo 3

Envolver a leitura da jogada em um laço do…while que só termina quando linha e coluna forem válidas. Dentro do laço, após ler o inteiro, calcula-se linha e coluna e, se inválidas, exibe-se mensagem de erro.
Por fim, após sair do laço, podemos atribuir a jogada ao tabuleiro, pois já estamos certos de que as coordenadas são válidas.

Resposta

// Supondo matriz 3×3
#define SIZE 3
char board[SIZE][SIZE];
int jogada, linha, coluna;
do {
printf(“Entre com a jogada (duas casas, ex: linha=2 coluna=3 → 23): “);
scanf(”%d”, &jogada);
linha = jogada / 10 - 1; // converte dezena em índice 0…2
coluna = jogada % 10 - 1; // converte unidade em índice 0…2
if (linha < 0 || linha >= SIZE || coluna < 0 || coluna >= SIZE) {
printf(“Coordenadas invalidas! Tente novamente.\n”);
}
} while (linha < 0 || linha >= SIZE || coluna < 0 || coluna >= SIZE);
// aqui usamos linha e coluna garantidamente válidas
board[linha][coluna] = jogadorAtual;

Exercícios relacionados