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
-
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!
<!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ú 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ón pedir nú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ú Principal</a-->
<p>Curso de ingreso UTN FRA</p>
</div>
</body>
</html>
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;
-
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
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:
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.
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.
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.
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;
-
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?
-
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 ;)
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;
}