Foros del Web » Programando para Internet » PHP »

Ciclo WHILE se sale antes

Estas en el tema de Ciclo WHILE se sale antes en el foro de PHP en Foros del Web. Que tal ya me quebre la cabeza buscando por que este ciclo WHILE se sale antes de cumplir la condicion, a ver si mas ojos ...
  #1 (permalink)  
Antiguo 18/11/2007, 09:05
 
Fecha de Ingreso: octubre-2006
Ubicación: Guadalajara, Mexico
Mensajes: 177
Antigüedad: 17 años, 5 meses
Puntos: 0
Ciclo WHILE se sale antes

Que tal

ya me quebre la cabeza buscando por que este ciclo WHILE se sale antes de cumplir la condicion, a ver si mas ojos ven el error que yo no veo

A veces solo me muestra una respueta falsa cuando le digo que se ejecute hasta que sean 3 o menos y que la verdadera sea <1 a veces ni la verdadera se ejecuta una vez

gracias


$NoRespuestasFalsas=0;
$NoRespuestasVerdaderas=0;

$NoRespuestaAnterior=0;
while($NoRespuestasFalsas<3 and $NoRespuestasVerdaderas<1) {
$FalsaVerdadera=rand(0,1); <------ Coloco una respuesta falsa o Verdadera segun el valor del random
if(!$FalsaVerdadera)
{
if($NoRespuestasFalsas <3)
{
$NoRespuesta=rand(1,6);
if ($NoRespuesta <> $NoRespuestaAnterior)
{
$cmdBuscaRespuesta="SELECT * FROM RespuestasFalsas WHERE NoRespuesta = ".$NoRespuesta;
$rsRespuesta=mysql_query($cmdBuscaRespuesta,$link) ;
$registro= mysql_fetch_array($rsRespuesta);
$NoRespuestaAnterior= $NoRespuesta;
$NoRespuestasFalsas++; }
}
}
else if($FalsaVerdadera)
{

if($NoRespuestasVerdaderas<1)
{
$NoRespuesta=rand(1,2);
$cmdBuscaRespuesta="SELECT * FROM RespuestaVerdadera WHERE NoRespuesta = ".$NoRespuesta;
$rsRespuesta=mysql_query($cmdBuscaRespuesta,$link) ;
$registro= mysql_fetch_array($rsRespuesta);
$NoRespuestasVerdaderas++;
$imagen=$registro[imagen];
}
}

//echo "<option value='".$registro[NoRespuesta]."'>".utf8_encode($registro[Respuesta])."</option>";
echo utf8_encode($registro[Respuesta])."\n";
}
echo $NoRespuestasFalsas."\n".$NoRespuestasVerdaderas." \n";
  #2 (permalink)  
Antiguo 18/11/2007, 10:04
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: Ciclo WHILE se sale antes

Tu problema es tu condicion:
Código PHP:
 while($NoRespuestasFalsas<and $NoRespuestasVerdaderas<1) { 
Le estas diciendo al programa, mientras el $NoRespuestasFalsas sea menor a 3 Y $NoRespuestasVerdaderas sea menor a 1, ejecuta el ciclo.

Para que te condicione si es verdad o esta falsa la respuesta debes de usar OR (o el operador ||), para que sea:

Mientras $NoRespuestasFalsas sea menor que 3 O $NoRepuestasVerdaderas sea menor que 1, así tu ciclo solo entrara las veces necesarias.

Saludos.
  #3 (permalink)  
Antiguo 18/11/2007, 10:33
 
Fecha de Ingreso: octubre-2006
Ubicación: Guadalajara, Mexico
Mensajes: 177
Antigüedad: 17 años, 5 meses
Puntos: 0
Re: Ciclo WHILE se sale antes

Cita:
Iniciado por GatorV Ver Mensaje
Tu problema es tu condicion:
Código PHP:
 while($NoRespuestasFalsas<and $NoRespuestasVerdaderas<1) { 
Le estas diciendo al programa, mientras el $NoRespuestasFalsas sea menor a 3 Y $NoRespuestasVerdaderas sea menor a 1, ejecuta el ciclo.

Para que te condicione si es verdad o esta falsa la respuesta debes de usar OR (o el operador ||), para que sea:

Mientras $NoRespuestasFalsas sea menor que 3 O $NoRepuestasVerdaderas sea menor que 1, así tu ciclo solo entrara las veces necesarias.

Saludos.


Gracias gatorV pero lo que quiero es que las dos condiciones se cumplan no una o la otra
  #4 (permalink)  
Antiguo 18/11/2007, 11:53
Avatar de jorgedx  
Fecha de Ingreso: junio-2005
Ubicación: Chile, Los Andes
Mensajes: 406
Antigüedad: 18 años, 10 meses
Puntos: 4
Re: Ciclo WHILE se sale antes

prueba colocando un if con la condicion menor con un break;
__________________
Nuevamente a las pistas ...
  #5 (permalink)  
Antiguo 18/11/2007, 12:24
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: Ciclo WHILE se sale antes

Lo que te dice Gatorv es cierto. Veamos, entiendo que tu quieres que de todas maneras haya como mínimo 3 falsas y 1 verdadera no?... En ese caso, aunque parezca que no suena lógico, debes usar un operador OR y no uno AND, te diré porque...

Antes de empezar el ciclo tienes:

$falsas = 0
$verdaderas = 0

En el primer ciclo obtienes una falsa... entonces

$falsas = 1
$verdaderas = 0

Se cumple la condicion? V<1 (si) y F<3 (si), entonces ejecuta nuevamente el ciclo

Segundo ciclo, obtienes una verdadera:

$falsas = 1
$verdaderas = 1

Se cumplira ahora la condicion? V<1 (NO) y F<3 (si)... Como usas un operador AND, el bucle ya no se ejecuta nuevamente, pues ya no se cumplen las dos condiciones. Así, sólo obtienes una V y una F... Si usaras un operador OR:

Se cumplira ahora la condicion? V<1 (NO) ó F<3 (si)... Cómo se cumple una de dos, seguimos el bucle

etc. etc. etc...

Así, cuando ya tengas 3 F o más, y 1 V o más, al fin el ciclo se detendrá, pues ya no se cumple ninguna de las dos condiciones...

Prueba usando el OR, o ||, y nos cuentas como te va

Un saludo,
  #6 (permalink)  
Antiguo 18/11/2007, 22:21
 
Fecha de Ingreso: octubre-2006
Ubicación: Guadalajara, Mexico
Mensajes: 177
Antigüedad: 17 años, 5 meses
Puntos: 0
Re: Ciclo WHILE se sale antes

Si, tienen TODA LA RAZON Y VERDAD DEL MUNDO


Una disculpa y muchas gracias
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:26.