Duda con algoritmo secuencial usando booleanos

Iniciado por DeIMachine, 20 Noviembre 2015, 14:29 PM

0 Miembros y 1 Visitante están viendo este tema.

DeIMachine

Código (cpp) [Seleccionar]

int i = 0;
       int n = 2;
       int p=3;
       bool encontrado = false;
while (!encontrado && i < n) {
if (t[i]) == p) {
encontrado = true;
}
else {
i++;
}

Mi duda esta en los booleanos, el codigo esta bien lo que no entiendo es lo siguiente: Si tu declaras el booleano encontrado como falso, usando la exclamacion lo estas negando y estas diciendo que mientras sea true que se ejecute el bucle, pero cuando encontrado sea cierto va a pararse, el while no tendria que ser encontrado sin negarlo??
La tradición es la mortaja de la sabiduría.

0xFer

el !encontrado está diciendole a while que se ejecute si encontrado == false  cuando encontrado == true el bucle termina.
Código (java) [Seleccionar]
int getRandomNumber(){
    return 4; //chosen by fair dice roll
              //guaranteed to be random
}

DarK_FirefoX

Cuando haces:

Código (cpp) [Seleccionar]
if(!encontrado){...}

ó

Código (cpp) [Seleccionar]
while(!encontrado){...}

Estás diciendo que si/mientras la variable encontrado sea falsa (false) ejecutar el bloque de código dentro del if/while.

Si lo declaras:

Código (cpp) [Seleccionar]
bool encontrado = false;

La condición del while:


Código (cpp) [Seleccionar]
while(!encontrado){...}

Se va a cumplir pues encontrado es false

DeIMachine

Ahí esta lo que no entiendo si tu declaras la variable booleana bool encontrado = false
al utilizar en el bucle while !encontrado no estas diciendo que mientras bool sea verdadera se ejecute el bucle?? Gracias de antemano
La tradición es la mortaja de la sabiduría.

0xFer

Cita de: DeIMachine en 21 Noviembre 2015, 00:16 AM
no estas diciendo que mientras bool sea verdadera se ejecute el bucle?? Gracias de antemano

No, es mientras encontrado sea falso, si el "!" no estuviera allí entonces si sería mientras encontrado sea verdadero. El while ejecuta código siempre y cuando el valor que esté dentro de los paréntesis sea verdadero, pero el "!" niega todo, es decir, si encontrado es falso entonces lo vuelve verdadero y si es verdadero lo vuelve falso.


   while( true ){
       //el código de aquí dentro se ejecutará porque lo que está entre los parentesis del while es "true"
    }

   while( !true ){
       //el código no se ejecuta porque al negar a true lo que está dentro de los parentesis es falso.
    }


Así creo que se entiende mejor:


   !true es lo mismo que false
  !false es lo mismo que true
Código (java) [Seleccionar]
int getRandomNumber(){
    return 4; //chosen by fair dice roll
              //guaranteed to be random
}

DeIMachine

#5
La cosa se resume en que no entiendo porque !entendido=false si al empezar he puesto bool encontrado=false.
La tradición es la mortaja de la sabiduría.

DeIMachine

#6
La cosa se resume en que no entiendo porque !entendido=false si al empezar he puesto bool encontrado=false.
No importa el valor que le de antes a bool encontrado??
La tradición es la mortaja de la sabiduría.

0xFer

#7
si encontrado = false entonces !encontrado = true, así de simple

Cita de: DeIMachine en 21 Noviembre 2015, 01:23 AM
No importa el valor que le de antes a bool encontrado??

Si importa, al crear la variable encontrado ésta es false, luego !encontrado = true, pero encontrado sigue siendo false, no es que el "!" cambie el valor de encontrado, lo que cambia es la expresión. creo que por eso te hice confudir.
Código (java) [Seleccionar]
int getRandomNumber(){
    return 4; //chosen by fair dice roll
              //guaranteed to be random
}

DeIMachine

#8
Lo siento por ser tan pesado pero sigo sin entenderlo, declaras bool encontrado=false luego comienza el bucle while que dice que mientras sea !encontrado se ejecute, el bucle se ejecuta para cuando bool=false pero !encontrado en ese caso no le cambia el valor no se por que.
Veo que while(!encontrado) es lo mismo que while(encontrado==false)
pero no se por qué en este caso no se coge el contrario. Saludos y gracias.
La tradición es la mortaja de la sabiduría.

DeIMachine

Vale ya lo tengo mas claro, muchas gracias while(!encontrado) se inicializa como true entonces cuando encontrado=true, !encontrado es false y el bucle se para, muchas gracias!!
La tradición es la mortaja de la sabiduría.