Ayuda con PROMPT de JS

Leirlux

Buenas; tengo un problemilla a la hora de imprimir datos dentro de un ejercicio de clase y ya no sé como hacerlo. El enunciado del ejercicio es el siguiente:

Introducir valores en prompt de JavaScript y devolver:

  • nº de valores introducidos
  • nº de valores numéricos introducidos
  • media de los valores numéricos introducidos
  • valor max y min de los numeros[/b]

Tengo los 3 primeros apartados hechos (hasta la media de los valores introducidos), pero no se me ocurre como sacar el valor máximo y mínimo de los valores que yo mismo he introducido. El código que tengo hasta el momento es el siguiente:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
	<meta http-equiv="content-type" content="text/html; charset=utf-8">

<html>
<head>
  <link rel="stylesheet" type="text/css" href="css.css">
</head>

<body>
<h1>Mi trabajo</h1>
<br>
<script type="text/javascript">

  var error="Todav&iacute;a no sale :'(";
  


/* valor introducido */ var valnum; /* total de valores introducidos */ var cont=0; /* total de valores numéricos introducidos */ var contnum=0; /* suma de los valores introducidos (mas adelante la media) */ var sumanum=0;

/* prompt para pedir valores */ valnum=prompt('Ingrese un valor','');


/* Inicio de bucle */ while (valnum!=null) {
document.write('<p class="resultado">Valor introducido: '+valnum+'</p>'); cont++; if (valnum=parseFloat(valnum)) { var sumanum=sumanum+valnum; contnum++; var media=sumanum/contnum; } valnum=prompt('Ingrese un valor',''); }; /* Fin de bucle */
document.write('<p class="enun">INFORMACIÓN GENERAL</p>');
/* Inicio de impresión de datos */ document.write('<center><table border="1" style="width:300px">'); document.write('<tr>'); document.write('<td>TOTAL VALORES<br> INTRODUCIDOS</td>'); document.write('<td>TOTAL VALORES<br> NUM&Eacute;RICOS INTRODUCIDOS</td>'); document.write('<td>MEDIA VALORES<br> NUM&Eacute;RICOS INTRODUCIDOS</td>'); document.write('<td>MAYOR VALOR<br> NUM&Eacute;RICO INTRODUCIDOS</td>'); document.write('<td>MENOR VALOR<br> NUM&Eacute;RICO INTRODUCIDOS</td>'); document.write('</tr>'); document.write('<tr>'); document.write('<td>'+cont+'</td>'); document.write('<td>'+contnum+'</td>'); document.write('<td>'+media+'</td>'); document.write('<td>'+error+'</td>'); document.write('<td>'+error+'</td>'); document.write('</tr>'); document.write('</table></center>');
document.write('<h1> Fin del documento<br>'); /* prompt devuelve valor con ACEPTAR o null si CANCELAR */ </script> </body> </html>

He estado dándole vueltas y no soy capaz de almacenar el máximo valor ni el mínimo. No sé como hacerlo y estoy bastante quemado con ésto. ¿Alguna ayuda? Gracias chic@s.

EDIT1: acabo de darme cuenta de que la estructura debería estar dentro del if >

if (valnum=parseFloat(valnum))
CrIpI

#1 No me he leido mucho el código pero lo que entiendo es que quieres almacenar el máximo y el mínimo de una cadena de números.

Te creas una variable auxiliar por ejemplo maximo. Cuando leas un número si es mayor que máximo pues lo sustituyes. Algo asi:

aux = leerNumero();
if(aux > maximo){
maximo = aux;
}

Espero que te sirva.

1 respuesta
Leirlux

#2 Tengo la variable valnum que es la que recoje valores que tu le des al PROMPT.

El código que acabo de crear es algo como ésto, pero no sé por qué, no me cuadra y no creo que funcione:

var maxnum=Number.MIN_VALUE;
var minnum=Number.MAX_VALUE;
  
while (valnum!=null) {
document.write('<p class="resultado">Valor introducido: '+valnum+'</p>'); cont++; if (valnum=parseFloat(valnum)) { var sumanum=sumanum+valnum; contnum++; var media=sumanum/contnum; if (valnum>maxnum) { maxnum=valnum; } if (valnum<minnum) { minnum=valnum; } } valnum=prompt('Ingrese un valor',''); };

He declarado las variables previamente.

EDIT1: vale #2, muchas gracias, acabo de conseguir hacerlo, y sí, está bien, pero tenía que cerrar el parentesis del if (valnum<minnum nada más.

Muchas gracias ^^

Leirlux

Acabo de darme cuenta de que el código está mal planteado: si se ponen 2 números que sean positivos, el valor de minnum será 0 siempre, o en el caso contrario, si se ponen 2 números que sean negativos, el valor máximo será siempre 0.

¿Alguna idea para arreglar ésto?

O

Hay va una pequeña ñapa, el primer número que metas (sólo el primero), lo igualas al máximo y al mínimo, de tal forma que al entrar en los if's ya no comparas con cero, sino con el primer número con el que trabajas.

var primernumero = 1;

if (primernumero == 1){
maxnum=minnum= valnum;
primernumero = 0;
}

Ya me cuentas... un saludo.

Usuarios habituales