es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo hacer un bucle para determinar si 2 números pertenecen a un rango dado.

Estoy teniendo problemas para hacer un bucle que se detenga cuando tanto x como y estén en el rango/intervalo [0,1] en C++.

double x;
double y;

while(condición)
{
    if(x < 0)
    {
        x = -x;
    }
    else
    {
        x = 2 - x;
    }
    if(y < 0)
    {
        y = -y;
    }
    else
    {
        y = 2 - y;
    }

}

Este método con 2 bucles funciona:

while((x < 0) || (x > 1)) {hacer algo}
while((y < 0) || (y > 1)) {hacer algo}

Esto no funciona:

while(!((x >= 0) && (x <= 1)) && !((y >= 0) && (y <= 1))) {hacer algo}

Y esto tampoco funciona:

while(((x < 0) || (x > 1)) && ((y < 0) || (y > 1))) {hacer algo}

Esto crea un bucle infinito (en mi caso):

while(((x < 0) || (x > 1)) || ((y < 0) || (y > 1))) {hacer algo}

Nota: {hacer algo} modifica x e y si es necesario para que eventualmente entren en ese intervalo (igual que en el primer bloque de código).

Nota 2: Cuando digo que no funciona, me refiero a que nunca entra en el bucle cuando x está en el intervalo y y < 0 (y en algunos otros casos).

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Basándonos en el código y la descripción del problema, podemos modificar la condición del bucle while para verificar si tanto x como y están en el rango/intervalo deseado [0,1]. Una forma de lograr esto es:

    while((x < 0 || x > 1) || (y < 0 || y > 1)) {
        // hacer algo
    }
    

    Aquí estamos utilizando el operador lógico OR || para combinar dos condiciones. El bucle continuará siempre y cuando x no esté en el rango [0,1] o y no esté en el rango [0,1]. Una vez que tanto x como y estén en el rango deseado, la condición será falsa y el bucle saldrá.

    Ten en cuenta que el código original estaba utilizando el operador lógico AND && para verificar si tanto x como y estaban en el intervalo [0,1]. Sin embargo, esto resultaría en un bucle infinito si alguno de ellos está fuera del rango, ya que ambas condiciones deben ser verdaderas para que el bucle salga. Al utilizar el operador lógico OR en su lugar, nos aseguramos de que el bucle continuará hasta que tanto x como y estén en el rango.

Comments are closed.