Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: leforte en 19 de Julio 2020, 09:28

Título: Ejercicio curso ingreso facultad Javascript programa pedir numeros, sumar y mult
Publicado por: leforte en 19 de Julio 2020, 09:28
Hola compañeros soy nuevito por aca, estoy haciendo un ejercicio para el curso de ingreso de la facultad donde tengo que dejar que el usuario escriba una cantidad de números a elección propia y luego sumar los números positivos y multiplicar los negativos. Algo debo tener mal en el código ya que sólo se esta ejecutando el prompt pidiendo un solo número, la confirmación de continuar y se cierra haciendo una suma incorrecta.
Todo lo que puedan ver mal por favor háganmelo saber ya que recién estoy empezando a programar y todo me sirve  ;D
Les comparto el código HTML y JS a ver si me pueden dar una mano, saludos!

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-08.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 8</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>Ingrese datos.</h1>
 
<INPUT type="text" placeholder="La suma de los positivos" id="txtIdSuma" readonly>
<INPUT type="text" placeholder="El producto de los negativos" id="txtIdProducto" readonly>

    <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,
sumar los que son positivos y multiplicar los 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 contador;
let respuesta;
let sumaPositivos;
let multiplicacionNegativos;
contador = 1;
sumaPositivos=1;
multiplicacionNegativos=1;
respuesta = "si";


while(respuesta != "no")
{
contador++;
contador = parseFloat(prompt("Ingrese un numero positivo o negativo"));
respuesta = prompt("Desea continuar? Escriba 'si' para continuar, 'no' para salir");

if(contador<0)
{
respuesta = respuesta + contador
respuesta = multiplicacionNegativos;
multiplicacionNegativos = multiplicacionNegativos * multiplicacionNegativos;
break;
}
else if(contador>=0)
{
respuesta = respuesta + contador
respuesta = sumaPositivos;
sumaPositivos = sumaPositivos + sumaPositivos;
break;
}
else
{
alert("Ingrese un número válido");
break;
}
}


document.getElementById("txtIdSuma").value = sumaPositivos;
document.getElementById("txtIdProducto").value = multiplicacionNegativos;
Título: Re:Ejercicio Javascript programa pedir numeros, sumar positivos y multiplicar negat
Publicado por: Kabuto en 19 de Julio 2020, 13:09
Hace años que no hago nada con JavaScript, pero la lógica de la programación es común a todos los lenguajes.

Y la lógica que aplicas, pues no es muy lógica la verdad  ;)

Primero incrementas la variable contador, sin motivo aparente, ya que no se te pide contar nada
Citar
contador++;
Ese incremento de contador, no importa de todos modos, porque ahora modificas su valor asignando lo que va a introducir el usuario. Cualquier cosa que hubieras contado, se pierde:
Citar
contador = parseFloat(prompt("Ingrese un numero positivo o negativo"));
Preguntas al usuario si quiere continuar. Quizás sería más lógico preguntarlo después de hacer los cálculos y no antes, pero bueno, la verdad es que no afecta al funcionamiento así que no pasa nada malo.
Citar
respuesta = prompt("Desea continuar? Escriba 'si' para continuar, 'no' para salir");

A continuación, la lógica pierde todo sentido.
En respuesta, donde el usuario te ha dicho si quiere continuar o no, cambias su valor juntando la respuesta más el número introducido.

Pero tampoco importa, porque en la siguiente líneas vuelves a modificar el valor de respuesta asignándole el valor de la variable multiplicacionNegativos, que lo único que tiene es el valor 1 que ha recibido al inicializarse.

Y luego a multiplicacionNegativos, le asignas su valor actual (que es 1) multiplicado por su valor actual (1).
Como 1 * 1 es igual a 1, pues multiplicacionNegativos sigue conservando su valor inicial.
Citar
if(contador<0)
{
   respuesta = respuesta + contador
   respuesta = multiplicacionNegativos;
   multiplicacionNegativos = multiplicacionNegativos * multiplicacionNegativos;
         break;
      }

No necesitas una variable contador, ni necesitas juntar el contador con la respuesta, ni nada de eso.

Prueba con el código como lo escribo a continuación. Yo no lo he probado pero diría que es correcto.
Pregunta si algo no te queda claro, pero creo que a simple vista verás lo que hace, y que es más sencillo de lo que parece.
Un saludo.

Código: [Seleccionar]
function mostrar()
{
let respuesta;
let numero;
        let sumaPositivos;
let multiplicacionNegativos;
numero = 0;
sumaPositivos=0;
multiplicacionNegativos=1;
respuesta = "si";


while(respuesta != "no")
{
numero = parseFloat(prompt("Ingrese un numero positivo o negativo"));

if(numero<0)
{
multiplicacionNegativos = multiplicacionNegativos * numero;
break;
}
else if(contador>=0)
{
sumaPositivos = sumaPositivos + numero;
break;
}
else
{
alert("Ingrese un número válido");
break;
}

respuesta = prompt("Desea continuar? Escriba 'si' para continuar, 'no' para salir");
}


document.getElementById("txtIdSuma").value = sumaPositivos;
document.getElementById("txtIdProducto").value = multiplicacionNegativos;
Título: Re:Ejercicio Javascript programa pedir numeros, sumar positivos y multiplicar negat
Publicado por: leforte en 19 de Julio 2020, 23:06
Primero que nada, muchas gracias Kabuto por responder tan rápido y por ayudarme con esto ya que hay cosas en las que me cuesta entender la lógica de los lenguajes.
Segundo, entiendo a lo que te referís que sería más lógico preguntar si desea continuar introduciendo números después de introducirlos, pero encuentro dos problemas, el primero es que la linea "respuesta = prompt("Desea continuar? Escriba 'si' para continuar, 'no' para salir");" no puede estar dentro de la llave de switch ya que el visual code studio me la oscurece como si no tuviese función alguna, y segundo que de la manera que escribiste el código me abre una ventana modal para introducir un número. luego de confirmación de si quiero continuar o no y se cierra... Cómo tendría que hacer para que luego de la confirmación vuelva otra vez a la sección de código donde puedo introducir datos?
Título: Re:Ejercicio Javascript programa pedir numeros, sumar positivos y multiplicar negat
Publicado por: leforte en 20 de Julio 2020, 00:07
Kabuto logré solucionar el problema que tenía! El error estaba en la ubicación de las dos ventanas prompt, tenían que ir DENTRO del bucle while. Mil gracias por tu ayuda!!  ;D ;)

Código: [Seleccionar]
function mostrar()
{
let respuesta;
let numero;
    let sumaPositivos;
let multiplicacionNegativos;
numero = 0;
sumaPositivos = 0;
multiplicacionNegativos = 1;
respuesta = "si";

while(respuesta != "no")
{
numero = parseFloat(prompt("Ingrese un numero positivo o negativo"));
respuesta = prompt("Desea continuar? Escriba 'si' para continuar, 'no' para salir");

if(numero>=0)
{
sumaPositivos = sumaPositivos + numero;
}
else
{
multiplicacionNegativos = multiplicacionNegativos * numero;
}
}

document.getElementById("txtIdSuma").value = sumaPositivos;
document.getElementById("txtIdProducto").value = multiplicacionNegativos;
}