Autor Tema: Algoritmo Javascript para mostrar cantidad de ceros y números pares ingresados  (Leído 795 veces)

leforte

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 7
    • Ver Perfil
Buenas vengo luchando para escribir una sección de código donde muestre la cantidad de ceros ingresados por el usuario(incluyendo los que forman parte de un número, por ej: "30", "100") y mostrar la cantidad de números pares ingresados (sé que la idea es "variable %2 == 0" pero no logro entender cómo y donde ingresar el código).
Espero puedan darme una mano  ;D

Dejo el código HTML y JS para que le echen un vistazo, gracias!


Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Curso Ingreso UTN FRA</title>

<!--Estilos-->
<link rel="stylesheet" type="text/css" href="../estilo.css">
<link rel="stylesheet" type="text/css" href="../animacion.css">
<!--final de Estilos-->

<!--Lógica-Programación-->
<script type="text/javascript" src="jsIteracionesWhile-10.js"></script>
        <!--Final de Lógica-Programación -->

<link rel="icon" type="image/x-icon" href="../favicon.ico">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>


<div class=" animated bounceIn header">
   

     <center><h5>WHILE  <strong> Ejercicio 10</strong> </h5></center>
   <a  class="MiBotonUTNnav" onclick="location.href='index.html'" ><i class="far fa-hand-point-left"></i>Men&uacute; ejercicios</a>

</div>

<div class="row">
  <div class="col-3 col-s-3 menu">
   
  </div>

  <div class="col-6 col-s-9">
  <form class=" animated bounceInLeft FormIngreso">
   <h1>Mostrar con document.write</h1>


    <a  class="MiBotonUTNnav" onclick="mostrar()" >Comenzar el ingreso</a>
</form>
  </div>

  <div class="col-3 col-s-12">
    <div class="aside animated bounceInUp">
    <h2>Enunciado:</h2>

<h3>
Al presionar el bot&oacute;n pedir  n&uacute;meros  hasta que el usuario quiera, mostrar:</br>
1-Suma de los negativos.
2-Suma de los positivos.
3-Cantidad de positivos.
4-Cantidad de negativos.
5-Cantidad de ceros.
6-Cantidad de números pares.
7-Promedio de positivos.
8-Promedios de negativos.
9-Diferencia entre positivos y negativos, (positvos-negativos).
</h3>
     
    </div>
  </div>
</div>

<div class="footer">
 
  <!--a class="MiBotonUTNnav" onclick="location.href='../index.html'" ><i class="fas fa-bars"></i>Men&uacute; Principal</a-->
  <p>Curso de ingreso UTN FRA</p>
</div>

</body>
</html>

Código: [Seleccionar]
function mostrar()
{
let array = ["sumaPositivos", "sumaNegativos", "ceros", "numerosPares", "promedioPositivos", "promedioNegativos", "diferenciaPosNeg"];
let numeros
let respuesta;

numeros = 1;
numerosPares = 0
array [0] = 0; //sumaPositivos
array [1] = 0; //sumaNegativos
array [2] = 0; //ceros
array [3] = 0; //numerosPares
array [4] = 0; //promedioPositivos
array [5] = 0; //promedioNegativos
array [6] = 0; //diferenciaPosNeg

respuesta = "si";

while(respuesta != "no")
{
numeros++;
numeros = parseFloat(prompt("Ingrese un número"));
respuesta = prompt("Desea continuar? Escriba 'si' para continuar, 'no' para salir");

if(numeros >=0)
{
array[0] = array [0] + numeros;
array [4] = array [4] + numeros;
}
else
{
array [1] = array [1] + numeros;
array [5] = array [5] + numeros;
}
/*
if (numbers % 2 == 0) {
return array [3];
}
else
{}
*/

array [6] = array[0] - array [1];
}

document.write("<h1>Resultados:</h1>");
document.write("<br>");
document.write("La suma de los números positivos es :" + array[0]);
document.write("<br>");
document.write("La diferencia entre los números negativos es: " + array [1]);
document.write("<br>");
document.write("Hay " + array [2] + " ceros.");
document.write("<br>");
document.write("La cantidad de números pares es: " + array [3]);
document.write("<br>");
document.write("El promedio entre los números positivos es: " + array [4] / numeros);
document.write("<br>");
document.write("El promedio entre los números negativos es: " + array [5] / numeros);
document.write("<br>");
document.write("La diferencia entre números positivos y negativos es: " + array [6]);

}
« Última modificación: 18 de Octubre 2020, 20:14 por Ogramar »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 737
    • Ver Perfil
Re:Algoritmo Javascript para mostrar cantidad de ceros y números pares
« Respuesta #1 en: 20 de Julio 2020, 12:42 »
Hola de nuevo.
No necesitas incrementar la variable numeros cada vez que se repite el while.

Citar
while(respuesta != "no")
   {
      numeros++;
      numeros = parseFloat(prompt("Ingrese un número"));

Ni lo necesitas, ni sirve de nada, porque justo después de incrementarlo, eliminas su valor al usar esa misma variable para pedir al usuario que introduzca un número.
Si realmente necesitaras hacer esos incrementos, los estarías perdiendo. En todo caso tendrías que hacerlos con una variable distinta de la que usas para pedir dato al usuario, pero vamos, que en realidad no lo necesitas.

Otra cosa, cuando el número es positivo, en array[0] quieres ACUMULAR(sumar) este número y en array[4] lo que que queremos es CONTAR.
Tenemos que CONTAR cuántos positivos recibimos, para después, cuando el while() haya terminado porque el usuario ya no quiere seguir, será entonces cuando podamos calcular el promedio.

Pero si te fijas, en ambos casos estás ACUMULANDO, en array[4] no estás CONTANDO

Citar
      if(numeros >=0)
      {
      array[0] = array[ 0] + numeros;
      array [4] = array [4] + numeros;
      }

Si lo que queremos es CONTAR, lo que hay que hacer es incrementar en 1 y no sumar el número que nos han dado.

Podemos hacerlo así:
Citar
      if(numeros >=0)
      {
      array[0] = array[ 0] + numeros;
      array[4] = array[4] + 1;
      }

O así, viene a ser lo mismo
Citar
      if(numeros >=0)
      {
      array[0] = array[ 0] + numeros;
      array[4]++;
      }

Para los negativos, te pasa lo mismo, en array[5] hay que CONTAR, no ACUMULAR.

Sobre contar los 0.
Yo creo que el enunciado se refiere a que hay que contar solo cuando el usuario introduce el valor 0, ya que no es ni positivo ni negativo, pues se cuenta por separado en su propia variable.
Creo que no se refiere a que también cuentes los 0 si el usuario teclea por ejemplo: 200, 1000,...
Se podrían contar, pero el código se complica bastante más y repito que creo que no es lo que se pide.

En cualquier caso, te propongo que de momento solo cuentes cuando el usuario introduzca el valor 0.
Y luego, cuando el código ya esté terminado y funcionando bien, se puede intentar hacer lo de contar los 0 de cualquier número introducido.

De momento, cuenta solo el valor 0, y para ello hay que ampliar el if

Citar
while(respuesta != "no")
   {
      numeros = parseFloat(prompt("Ingrese un número"));
      respuesta = prompt("Desea continuar? Escriba 'si' para continuar, 'no' para salir");

      if (numeros == 0)
      {
      array[2]++;
      }
      else
if(numeros >=0)
      {
      array[0] = array[ 0] + numeros;
      array[4]++;
      }
      else
      {
      array[1] = array[1] + numeros;
      array[5]++;
      }
      /*
      if (numbers % 2 == 0) {
         return array [3];
      }
      else
      {}
      */
   }

Siguiente, contar los números pares.
Esta parte del código casi la tenías hecha, no se por qué luego no lo has visto claro e incluso has puesto una sentencia return.
La lógica del programa a seguir sería:

- Pedir número al usuario.
- Compruebo si es 0, y lo cuento en caso afirmativo
- Compruebo si es positivo, y en caso afirmativo, lo acumulo y lo cuento
- Compruebo si es negativo, y en caso afirmativo, lo acumulo y lo cuento
- Compruebo si es par, y en caso afirmativo, lo cuento


Este es el "guión" que estamos siguiendo. Así que tras comprobar si es 0, positivo o negativo. Lo siguiente es comprobar si es par:

Citar
while(respuesta != "no")
   {
      numeros = parseFloat(prompt("Ingrese un número"));
      respuesta = prompt("Desea continuar? Escriba 'si' para continuar, 'no' para salir");

      if (numeros == 0)
      {
      array[2]++;
      }
      else if(numeros >=0)
      {
      array[0] = array[ 0] + numeros;
      array[4]++;
      }
      else
      {
      array[1] = array[1] + numeros;
      array[5]++;
      }
      
      if (numeros % 2 == 0) {
         array[3]++;
      }

   }

Bien, el guión que hemos seguido hasta ahora, es el que hay que realizar MIENTRAS el while() esté funcionando.
Algunos de los computos que nos piden, no se pueden hacer hasta que el usuario haya terminado de introducir números, es decir, hay que hacerlos FUERA del bucle while()

Vamos a especificar mejor el guión a seguir:


MIENTRAS el usuario introduce números:
    - Pedir número al usuario.
    - Compruebo si es 0, y lo cuento en caso afirmativo
    - Compruebo si es positivo, y en caso afirmativo, lo acumulo y lo cuento
    - Compruebo si es negativo, y en caso afirmativo, lo acumulo y lo cuento
    - Compruebo si es par, y en caso afirmativo, lo cuento

DESPUÉS de que el usuario haya introducido números:
    - Calcular promedio de positivos (positivos acumulados / positivos contados)
    - Calcular promedio de negativos(negativos acumulados / negativos contados)
    - Calcular diferencia entre positivos y negativos (positivos acumulados - negativos acumulados)

MOSTRAR los resultados al usuario


En programación es muy útil escribir previamente un guión de los pasos que necesitamos seguir.

Bien, los cómputos que nos piden DESPUÉS de la inserción de números, tenemos dos opciones:
- Calcular primero y mostrar después.
- Calcular al mismo tiempo que los vamos a mostrar.

Como son cálculos sencillos, podemos hacerlos al mismo tiempo que mostramos resultados, tal y como lo estabas haciendo tú.
Para estos cálculos NO debemos usar la variable "numeros" en ningún momento.
Esa variable solo sirve para pedir un dato al usuario y computarlo.
No sirve para nada más, no nos sirve para calcular promedios, ya que esta variable "numeros" solo conserva el último dato que introdujo el usuario. No tiene nada más.

Citar
   document.write("<h1>Resultados:</h1>");
   document.write("<br>");
   document.write("La suma de los números negativos es :" + array[1]);
   document.write("<br>");
   document.write("La suma de los números positivos es :" + array[0]);
   document.write("<br>");
   document.write("Cantidad de números positivos :" + array[4]);
   document.write("<br>");
   document.write("Cantidad de números negativos :" + array[5]);
   document.write("<br>");
   document.write("Hay " + array [2] + " ceros.");
   document.write("<br>");
   document.write("La cantidad de números pares es: " + array [3]);
   document.write("<br>");
   document.write("El promedio entre los números positivos es: " + (array[0] / array[4]));
   document.write("<br>");
   document.write("El promedio entre los números negativos es: " + (array[1] / array[5]));
   document.write("<br>");
   document.write("La diferencia entre números positivos y negativos es: " + (array[0] - array[1]));
« Última modificación: 20 de Julio 2020, 12:44 por Kabuto »
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

leforte

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 7
    • Ver Perfil
Re:Algoritmo Javascript para mostrar cantidad de ceros y números pares
« Respuesta #2 en: 20 de Julio 2020, 22:56 »
Kabuto MUCHISIMAS GRACIAS por dedicar tu tiempo en explicarme todo esto, en serio! No entendía el procedimiento hasta que me lo explicaste y una vez que leí todo dije "Wow! Era tan simple y me lo compliqué innecesariamente!" Si bien me había resultado relativamente fácil otros ejercicios de while con condicionales, en este me compliqué porque no realice un plan antes de comenzar, voy a empezar a aplicar este método así puedo organizarme antes de empezar. Te estoy muy agradecido ya que ahora comprendo el procedimiento lógico y puedo aplicarlo para futuros trabajos. Otra vez, te estoy eternamente agradecido por tu tiempo y paciencia al explicarme. Sos lo más!!!  ;D

leforte

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 7
    • Ver Perfil
Re:Algoritmo Javascript para mostrar cantidad de ceros y números pares
« Respuesta #3 en: 20 de Julio 2020, 23:08 »
Kabuto, una última pregunta... al realizar todos estos cambios me pasa lo que me pasaba antes, que el prompt se ejecuta una sola vez y al pedir confirmación para continuar se cierra, en este caso cómo puedo hacer? Porque según el bucle lógico cuando llega al último IF debería repetirse el proceso hasta que el usuario ingrese "no" pero al parecer el bucle se rompe luego de la primera confirmación

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 737
    • Ver Perfil
Re:Algoritmo Javascript para mostrar cantidad de ceros y números pares
« Respuesta #4 en: 21 de Julio 2020, 01:02 »
Si lo tienes tal y como lo puse yo, debería funcionar.

Mira, he escrito un HTML rapidito con un botón para lanzar el script de pedir números.
Y me funciona sin problema el bucle, pide números hasta que introduzco "no".

Código: [Seleccionar]
<html>

<head>

<title>Pedir números</title> <meta charset="utf-8">

<script type="text/javascript">

function mostrar() {

let array = [];
let numeros
let respuesta;

numeros = 1;
numerosPares = 0
array [0] = 0; //sumaPositivos
array [1] = 0; //sumaNegativos
array [2] = 0; //ceros
array [3] = 0; //numerosPares
array [4] = 0; //promedioPositivos
array [5] = 0; //promedioNegativos

respuesta = "si";

while(respuesta != "no")
   {
      numeros = parseFloat(prompt("Ingrese un número"));
      respuesta = prompt("Desea continuar? Escriba 'si' para continuar, 'no' para salir");

      if (numeros == 0)
      {
      array[2]++;
      }
      else if(numeros >=0)
      {
      array[0] = array[0] + numeros;
      array[4]++;
      }
      else
      {
      array[1] = array[1] + numeros;
      array[5]++;
      }
     
      if (numeros % 2 == 0) {
         array[3]++;
      }
   }

   document.write("<h1>Resultados:</h1>");
   document.write("<br>");
   document.write("La suma de los números negativos es :" + array[1]);
   document.write("<br>");
   document.write("La suma de los números positivos es :" + array[0]);
   document.write("<br>");
   document.write("Cantidad de números positivos :" + array[4]);
   document.write("<br>");
   document.write("Cantidad de números negativos :" + array[5]);
   document.write("<br>");
   document.write("Hay " + array [2] + " ceros.");
   document.write("<br>");
   document.write("La cantidad de números pares es: " + array [3]);
   document.write("<br>");
   document.write("El promedio entre los números positivos es: " + (array[0] / array[4]));
   document.write("<br>");
   document.write("El promedio entre los números negativos es: " + (array[1] / array[5]));
   document.write("<br>");
   document.write("La diferencia entre números positivos y negativos es: " + (array[0] - array[1]));


}

</script>

</head>

<body>

<button onclick="mostrar()">Pedir números</button>

</body>

</html>
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

leforte

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 7
    • Ver Perfil
Re:Algoritmo Javascript para mostrar cantidad de ceros y números pares
« Respuesta #5 en: 21 de Julio 2020, 01:14 »
Creo que el problema estaba en que todavia en la variable array tenia entre [] declaradas las variables y no las encontraba, borre eso y funcionó. Mil gracias por toda tu ayuda! Sos un crack!

 

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".