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??
el !encontrado está diciendole a while que se ejecute si encontrado == false cuando encontrado == true el bucle termina.
Cuando haces:
if(!encontrado){...}
ó
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:
bool encontrado = false;
La condición del while:
while(!encontrado){...}
Se va a cumplir pues encontrado es false
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
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
La cosa se resume en que no entiendo porque !entendido=false si al empezar he puesto bool encontrado=false.
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??
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.
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.
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!!