Autor Tema: Ejercicio resuelto curso Javascript bucle while por qué se resta uno CU01132E  (Leído 2053 veces)

krakerbrain

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 8
    • Ver Perfil
Saludos. Planteo mi solucion para el ejercicio CU01132E del curso básico de programación JavaScript pdf.

Al resolver el ejercicio me di cuenta que me funcionaba si ponía i=-1. No sé si es lo correcto o estoy cometiendo algún error. Siempre trato de no guiarme por las respuestas de otros estudiantes del curso hasta resolverlo

Gracias por revisarlo

EJERCICIO

1) Crea una función que pida una palabra al usuario y usando un bucle while y el método charAt, muestre cada una de las letras que componen la entrada. Por ejemplo si se introduce “ave” debe mostrar:

Letra 1: a             Letra 2: v             Letra 3: e

Código: [Seleccionar]
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Ejercicio bucle</title>
    <style type="text/css">
    h1{
        color: blue;
        font-family: sans-serif;
           
    }
    h2{
        padding: 10px;
        width: 100px;
        background-color: red;
        text-align: center;
        color: white;
        clear: both;
        border-radius: 40px;

    }
   
    </style>
    <script type="text/javascript">
    function deletrear(){
        var palabra = prompt("Por favor ingrese una palabara");
        i=-1
        while (i<palabra.length-1){i++
        alert("Letra " +[i+1]+": "+palabra.charAt(i))}
        }
   
    </script>
</head>
<body>
<h1>Respuesta a ejercicio: uso de bucle <b style="color: blueviolet;" >While</b> y método <b style="color: blueviolet;">charAt</b></h1>
<h2 onclick="deletrear()"> Presione </h2>
   
</body>
</html>
« Última modificación: 07 de Abril 2021, 19:25 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2662
    • Ver Perfil
Buenas, el ejercicio está bien resuelto. En lo referente al bucle y poner el valor i=-1, no es quizás lo más fácil de interpretar, pero funciona. Lo importante es que comprendas por qué funciona. Comento algo sobre esto:

Código: [Seleccionar]
        i=-1
        while (i<palabra.length-1){i++
        alert("Letra " +[i+1]+": "+palabra.charAt(i))}
        }

Este código inicial i con el valor -1. Entra al bucle si el valor de i es menor que la longitud de la palabra menos 1. Si no introduzco nada y pulso el botón ¿entra al bucle? No, porque la longitud de la palabra que he introducido es cero y al restarle uno me sale menos uno. Como menos uno no es menor que menos uno, no entra al bucle y no me muestra nada.
Si introduzco una letra sola, por ejemplo la e y pulso el botón se muestra "Letra 1: e", porque la longitud de la palabra introducido menos uno es cero, y cero es mayor que menos 1. Por eso entra al bucle.

¿Qué ocurre cuando se entra al bucle? Nada más entrar al bucle el valor de i se incrementa en una unidad con la instrucción i++ a la que por cierto veo preferible ponerle el punto y coma, es decir, escribir i++;
Tras esto se muestra por pantalla el mensaje indicando que la letra i+1 es la que se encuentra en palabra.charAt(i)
La función charAt comienzo contando la primera letra como índice cero, y las siguientes son índice 1,2,3 ... hasta palabra.length-1. Es importante saber interpretar el por qué de palabra.length-1 Esto es porque palabra.length nos devuelve el número de caracteres de 1 a n, mientras que charAt cuenta de 0 a n-1. Por ejemplo para gas los índices que usa charAt son 0, 1 y 2 mientras que length nos devuelve 3.

Entonces si no introducimos nada no se entra al bucle. Si introducimos e nada más entrar i pasa a valer 0, se muestra por pantalla y se vuelve a evaluar si i es menor que palabra.length-1. Como i vale ahora 0 y palabra.length-1 también es cero, en ese caso sólo hay una pasada por el bucle.

Si introducimos una palabra de varias letras habrá tantas pasadas como letras.

Y el resumen de todo esto es que el programa funciona. Para mí no es muy intuitivo el uso que haces de los contadores, yo por ejemplo lo veo más claro con este código: https://aprenderaprogramar.com/foros/index.php?topic=4041.0

Pero si entiendes lo que haces, está bien tanto hacerlo de una manera como de otra. Y para resolver los ejercicios lo adecuado es siempre plantearlo primero como tú creas mejor y sobre todo entendiéndolo. Luego, si consultando otras respuestas consideras que puedes mejorar tu código entendiendo lo que haces, también está bien mejorarlo, pero siempre entendiendo el por qué de las cosas.

Salu2

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".