Questão 03 - Implemente uma função para verificar se um dado ponto está dentro ou fora de um retângulo. Essa função deve receber como argumentos o vértice inferior esquerdo
e o vértice superior direito
que definem o retângulo. A função deve receber também o ponto (
) que será avaliado, retornando 1 se o ponto é interior, ou zero caso contrário. Fazer o módulo principal checando os seguintes casos:
a) Retângulo:
- Ponto (0.5,0.1);
a) Retângulo:
Passo 1
O enunciado pede que a gente implemente uma função que verifique se um ponto está dentro ou fora de um retângulo. Precisamos receber como argumentos os vértices que definem o retângulo e o ponto a ser testado, e retornar
se o ponto for interior e
caso contrário. O enunciado também pede que o módulo principal cheque o caso específico:
Retângulo:
— Ponto
.
Informações relevantes dadas:
- Vértice inferior esquerdo do retângulo:
. - Vértice superior direito do retângulo:
. - Ponto a verificar:
. - Deve retornar
se o ponto for interior, ou caso contrário. - Caso de teste a) com valores numéricos acima.
Passo 2
O que significa “ponto interior” e como verificar isso com desigualdades (a parte teórica, mastigada):
- Um retângulo alinhado aos eixos é definido pelos intervalos das coordenadas
e . Se o vértice inferior esquerdo tem coordenadas e o vértice superior direito tem coordenadas , então o conjunto de pontos do retângulo é todos os tais que
e
- Essas desigualdades significam: o ponto tem coordenada
entre os limites horizontais do retângulo e coordenada entre os limites verticais. - Observação importante: há duas interpretações comuns de “interior”:
- Inclusiva (usada aqui por padrão): aceita pontos na borda; usa desigualdades não estritas (
). - Estrita: só aceita pontos estritamente dentro, não na borda; usa desigualdades estritas (
).
- Inclusiva (usada aqui por padrão): aceita pontos na borda; usa desigualdades não estritas (
- Se na entrada o programador der
ou por engano, uma boa prática é normalizar trocando os valores para garantir que e . Vou mostrar isso no código.
Passo 3
Algoritmo simples (explicando cada linha):
- Receber
. - Se
então trocar e (garante ordem). - Se
então trocar e . - Verificar as duas condições:
e - Se ambas forem verdadeiras, retornar
; caso contrário, retornar .
Agora mostro uma implementação em C (muito comum neste tipo de exercício). O código é curto e direto; comentários explicam as partes didaticamente.
#include <stdio.h>
int ponto_dentro(double x1, double y1, double x2, double y2, double x, double y) {
/* Normaliza os vértices para garantir x1<=x2 e y1<=y2 */
if (x1 > x2) {
double tmp = x1; x1 = x2; x2 = tmp;
}
if (y1 > y2) {
double tmp = y1; y1 = y2; y2 = tmp;
}
/* Verifica inclusão (aqui: inclusão de borda) */
if (x1 <= x && x <= x2 && y1 <= y && y <= y2) return 1;
else return 0;
}
int main(void) {
double x1 = 0.0, y1 = 0.0, x2 = 1.0, y2 = 1.0;
double x = 0.5, y = 0.1;
int resultado = ponto_dentro(x1,y1,x2,y2,x,y);
printf("%d\n", resultado); /* Esperamos imprimir 1 para este caso */
return 0;
}
Explicação do código linha a linha:
- A função
ponto_dentrorecebe os seis valores. Usamosdoublepara aceitar pontos com casas decimais. - As trocas
if (x1 > x2)eif (y1 > y2)garantem que as desigualdades abaixo façam sentido mesmo se os vértices vierem fora de ordem. - A condição
x1 <= x && x <= x2 && y1 <= y && y <= y2implementa exatamente as desigualdades matemáticas que vimos: o ponto está entre os limites horizontais e verticais. - A
maintesta o caso pedido e imprime o resultado.
Passo 4
Como raciocinar isso “na prova” sem código (ou se tiver que explicar rapidamente):
- Pegue os números e cheque cada desigualdade uma a uma.
- Para o eixo
: verifique se . - Para o eixo
: verifique se . - Se ambas verdadeiras, ponto interior; senão, fora.
- Se pedirem interior estrito, troque
por .
Passo 5
Aplicando ao caso específico pedido (fazendo as contas passo a passo e explicando):
- Retângulo:
. - Ponto:
. - Verificação em
: -
é verdadeiro. -
é verdadeiro. - Logo a condição em
é verdadeira.
-
- Verificação em
: -
é verdadeiro. -
é verdadeiro. - Logo a condição em
é verdadeira.
-
- Como ambas são verdadeiras, o ponto é interior (na interpretação inclusiva) e a função retorna
.
Passo 6
Saída esperada e observações finais:
- Se você compilar e rodar o programa acima, verá que ele imprime:
indicando que o ponto está dentro do retângulo.1 - Se o enunciado quiser excluir pontos na borda, altere as comparações para
x1 < x && x < x2 && y1 < y && y < y2. - Dica prática para prova: escreva as desigualdades explicitamente com os números e verifique cada uma; isso evita erros bobos.
Resposta
1