Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Senior++ en 25 Noviembre 2013, 12:00 pm



Título: Duda sobre el bucle do...while(solucionado)
Publicado por: Senior++ en 25 Noviembre 2013, 12:00 pm
Resulta que me encontre con este código:

Código:
<?php

$texto = "Esto es un ejercicio de repaso.";
$i=0;
do {
  $i++;
}while ($texto[$i]!="u" && $i< strlen($texto));
if ($i==strlen($texto))
  echo "En el texto no existe ninguna letra u.";
else
  echo "La hemos encontrado. Está en la posición $i.";
?>

Bueno entiendo casi todo del código, lo que no entiendo es
Código:
$texto[$i]!="u"

Saludos ;-)


Título: Re: Duda sobre el bucle do...while
Publicado por: Mad Antrax en 25 Noviembre 2013, 12:04 pm
while ($texto[$i]!="u" && $i< strlen($texto));

Se puede traducir como:

Mientras el contenido de la variable $texto sea distinto de "u" y el contador sea inferior al tamaño de la variable $texto....

Por lo que veo, el bucle recorre el contenido de una variable de texto y si se encuentra el carácter "u" se detiene.

!= es un operador para comparar. Significa no es igual a


Título: Re: Duda sobre el bucle do...while
Publicado por: Senior++ en 25 Noviembre 2013, 12:35 pm
while ($texto[$i]!="u" && $i< strlen($texto));

Se puede traducir como:

Mientras el contenido de la variable $texto sea distinto de "u" y el contador sea inferior al tamaño de la variable $texto....

Por lo que veo, el bucle recorre el contenido de una variable de texto y si se encuentra el carácter "u" se detiene.

!= es un operador para comparar. Significa no es igual a
gracias por responder..

pero la parte que no entiendo es la parte del [$i],¿es como si fuera un indice? osea el primer caracter que evalua es la 'E'? el recorrido ese lo hace gracias a la variable $i no?


Título: Re: Duda sobre el bucle do...while
Publicado por: Shell Root en 25 Noviembre 2013, 14:16 pm
pero la parte que no entiendo es la parte del [$i],¿es como si fuera un indice? osea el primer caracter que evalua es la 'E'? el recorrido ese lo hace gracias a la variable $i no?
Simon, se comporta como si fuera un array


Título: Re: Duda sobre el bucle do...while
Publicado por: Senior++ en 25 Noviembre 2013, 14:21 pm
Simon, se comporta como si fuera un array

Hola gracias por contestar, entonces si yo hago esto:
Código:
$texto[$i]

quiere decir que es un 'simon'?  :xD

entonces si la cadena en este caso es:
Código:
 $texto = "Esto es un ejercicio de repaso.";
La letra E contiene el indice 1, la s el indice 2 y asi sucesivamente?


Lo siento pero no lo entendí bien...


Título: Re: Duda sobre el bucle do...while
Publicado por: Shell Root en 25 Noviembre 2013, 15:21 pm
A manera de pseudocódigo, sí! Pero en realidad el primer indice es 0, es decir,

Código
  1. $aNick = "shellroot";
  2. for($i=0; $i <= strlen($aNick)-1; $i++):
  3.   echo "Letra [".$aNick[$i]."] en el indice [".$i."] <br/>";
  4. endfor;

Código
  1. # Letra [s] en el indice [0]
  2. # Letra [h] en el indice [1]
  3. # Letra [e] en el indice [2]
  4. # Letra [l] en el indice [3]
  5. # Letra [l] en el indice [4]
  6. # Letra [r] en el indice [5]
  7. # Letra [o] en el indice [6]
  8. # Letra [o] en el indice [7]
  9. # Letra [t] en el indice [8]

Y lo de "simon", es una afirmación, SImon! -veo mucho los simpson :p-


Título: Re: Duda sobre el bucle do...while
Publicado por: Senior++ en 25 Noviembre 2013, 16:35 pm
A manera de pseudocódigo, sí! Pero en realidad el primer indice es 0, es decir,

Código
  1. $aNick = "shellroot";
  2. for($i=0; $i <= strlen($aNick)-1; $i++):
  3.   echo "Letra [".$aNick[$i]."] en el indice [".$i."] <br/>";
  4. endfor;

Código
  1. # Letra [s] en el indice [0]
  2. # Letra [h] en el indice [1]
  3. # Letra [e] en el indice [2]
  4. # Letra [l] en el indice [3]
  5. # Letra [l] en el indice [4]
  6. # Letra [r] en el indice [5]
  7. # Letra [o] en el indice [6]
  8. # Letra [o] en el indice [7]
  9. # Letra [t] en el indice [8]

Y lo de "simon", es una afirmación, SImon! -veo mucho los simpson :p-

Ok ya entendí,gracias

Por cierto vi nas cuantas curiosidades en tu código:

 en esta parte:
Código:
 $i=0; $i <= strlen($aNick)-1; $i++
¿no sería mas facil de ponerlo así
Código:
$i=0; $i < strlen($aNick); $i++
¿seria lo mismo no?

La otra es que inicias un bucle for y lo terminas con un endfor ¿que diferencia hay entre ponerlo así o con {}? así:

Código:
$aNick = "shellroot";
for($i=0; $i <= strlen($aNick); $i++){
   echo "Letra [".$aNick[$i]."] en el indice [".$i."] <br/>";
}
por lo demas todo entendido

Saludos y gracias de nuevo


Título: Re: Duda sobre el bucle do...while
Publicado por: HackID1 en 25 Noviembre 2013, 16:45 pm
En esta parte:
Código:
 $i=0; $i <= strlen($aNick)-1; $i++
¿no sería mas facil de ponerlo así
Código:
$i=0; $i < strlen($aNick); $i++
¿seria lo mismo no?

R= No es lo mismo menor ( < ) a menor igual (<= ) , En el 1 caso entra hasta el último carácter de la cadena ( que es la t ).

En el 2 caso solo mostraría hasta la letra ( o ) faltaría por mostrar la t de root.


La otra es que inicias un bucle for y lo terminas con un endfor ¿que diferencia hay entre ponerlo así o con {}? así:

Código:
$aNick = "shellroot";
for($i=0; $i <= strlen($aNick); $i++){
   echo "Letra [".$aNick[$i]."] en el indice [".$i."] <br/>";
}

Esto es otra variante de hacer un for. solo eso cuestión de gustos.



Título: Re: Duda sobre el bucle do...while
Publicado por: Senior++ en 25 Noviembre 2013, 18:17 pm
while ($texto[$i]!="u" && $i< strlen($texto));

Se puede traducir como:

Mientras el contenido de la variable $texto sea distinto de "u" y el contador sea inferior al tamaño de la variable $texto....

Por lo que veo, el bucle recorre el contenido de una variable de texto y si se encuentra el carácter "u" se detiene.

!= es un operador para comparar. Significa no es igual a

Me liastes con tu respuesta, dices mientras la variables $texto[$i] sea distinto de "u" se ejecuta el código pero que pasa cuando la variable $texto[$i] es igual a "u" ¿por que se sigue ejecutando el bloque de código del bucle while(osea el if)

Saludos


Título: Re: Duda sobre el bucle do...while
Publicado por: Shell Root en 25 Noviembre 2013, 18:57 pm
Código
  1. $aNick = "shelluroot";
  2. for($i=0; $i <= strlen($aNick)-1; $i++):
  3.    if($aNick[$i] === 'u'):
  4.        echo "Letra u! muahahhaha 3:) <br/>";
  5.        exit();
  6.    else:
  7.        echo "Letra [".$aNick[$i]."] en el indice [".$i."] <br/>";
  8.    endif;
  9. endfor;

Tiempo atras, cuando empezaba a programar no me gustaba utilizar el ciclo while, pero despues de un tiempo entendí qué: cada cosa se usa para cada cosa, es decir, hay casos en los que se DEBE de usar while...


Título: Re: Duda sobre el bucle do...while
Publicado por: Senior++ en 25 Noviembre 2013, 20:09 pm
Hola shellroot, enserio muchas gracias por ayudar, tu código con el for lo entiendo perfectamente, osea lo entiendo totalmente, pero no entiendo este código, este en especial del while

Código:
<?

$texto = "Esto es un ejercicio de repaso.";
$i=0;
do {
  $i++;
}while ($texto[$i]!="u" && $i< strlen($texto));
if ($i==strlen($texto))
  echo "En el texto no existe ninguna letra u.";
else
  echo "La hemos encontrado. Está en la posición $i.";
?>

de ese código lo que no me entra en la cabeza es este codigo en especial:
Código:
while ($texto[$i]!="u"

Mientras $texto sea DISTINTO a "u"...

ok pero  que pasa si $texto[$i] llega al valor 8 osea $texto[8], osea en el valor 8 se encuentra el caracter "u", y el while dice: mientras $texto sea DISTINTO, osea no es distinto ¿por que se sigue ejecutando todo lo que hay detras del bucle while? osea el if en ese momento no se deberia de ejecutar ¿por que se ejecuta?

En resumen: cuando llegue al indice 8 por que se ejecuta lo que hay detras del bucle while? si $texto[8] no es distinto al caracter 'u' , es igual


Título: Re: Duda sobre el bucle do...while
Publicado por: Shell Root en 25 Noviembre 2013, 20:34 pm
En el while se tiene la condición! En este caso es,
Código
  1. # SNIP
  2. while( ($texto[$i] != "u") && ($i < strlen($texto)) ):
  3. # SNIPP

Ahora lo que debes de entender es la logica de programación, operadores tales como: OR, AND, Xor, Not,... Para este ejemplo, se tiene el operador AND ( && ).

Entonces para el while se tienen 2 condiciones,
1er Condición: El caracter en la posición indice ($i) sea diferente de 'u'.
Y
2da Condición: El tamaño de caracteres debe de ser menor del texto recorrido.

Para que el while funcione, se deben de cumplir las dos condiciones, cuando una de ellas sea falsa, el ciclo termina! -caso diferente al tener el operador OR (||, que es cuando se cumplen 1 de las 2 condiciones)-


Título: Re: Duda sobre el bucle do...while
Publicado por: Senior++ en 25 Noviembre 2013, 20:57 pm
En el while se tiene la condición! En este caso es,
Código
  1. # SNIP
  2. while( ($texto[$i] != "u") && ($i < strlen($texto)) ):
  3. # SNIPP

Ahora lo que debes de entender es la logica de programación, operadores tales como: OR, AND, Xor, Not,... Para este ejemplo, se tiene el operador AND ( && ).

Entonces para el while se tienen 2 condiciones,
1er Condición: El caracter en la posición indice ($i) sea diferente de 'u'.
Y
2da Condición: El tamaño de caracteres debe de ser menor del texto recorrido.

Para que el while funcione, se deben de cumplir las dos condiciones, cuando una de ellas sea falsa, el ciclo termina! -caso diferente al tener el operador OR (||, que es cuando se cumplen 1 de las 2 condiciones)-

entiendo todo eso, pero para que usted lo entienda a lo que me refiero con un codigo mas sencillo:

Código:
$i = 1;
while($i != 10){
$i++;
echo $i."<br />";

}

¿por que imprime en pantalla el numero 10, si el 10 no es distinto de 10?


Título: Re: Duda sobre el bucle do...while
Publicado por: #!drvy en 25 Noviembre 2013, 21:21 pm
·_·

Cuestion de logica. Incrementas y imprimes antes de comprobar el numero. Osease...  el while llega a 9!=10 y ejecuta lo que hay dentro, inmediatamente se suma uno (10) y se impime.

Código
  1. $i = 1;
  2. while($i != 10){echo $i."<br />";  ++$i;}

Saludos


Título: Re: Duda sobre el bucle do...while
Publicado por: Senior++ en 25 Noviembre 2013, 21:54 pm
 :xD era un ejemplo para que entendiera lo que queria decirle del código anterior...
bueno ya entendí todo

Gracias


Título: Re: Duda sobre el bucle do...while(solucionado)
Publicado por: Shell Root en 25 Noviembre 2013, 23:02 pm
A mi me imprime sólo hasta 9  :silbar:

Código
  1. $i = 1;
  2. while($i != 10):
  3.    echo $i."<br />";
  4.    $i++;
  5. endwhile;

Código:
1
2
3
4
5
6
7
8
9