Foros del Web » Programando para Internet » Javascript »

Ejercicio de javascript

Estas en el tema de Ejercicio de javascript en el foro de Javascript en Foros del Web. Hola chic@s me piden hacer el siguiente ejercicio y no se por donde meterle mano: Hallar la media de unos valores numéricos enteros introducidos por ...
  #1 (permalink)  
Antiguo 20/01/2008, 11:11
 
Fecha de Ingreso: mayo-2007
Mensajes: 13
Antigüedad: 17 años
Puntos: 0
Ejercicio de javascript

Hola chic@s me piden hacer el siguiente ejercicio y no se por donde meterle mano:

Hallar la media de unos valores numéricos enteros introducidos por el usuario.

Mostrar el resultado en una alerta.




La introducción de datos se realizará de tal forma que si se pulsa el botón aceptar el usuario continuará introduciendo valores y si se pulsa cancelar se muestra el resultado.



Se debe comprobar que los valores introducidos son numéricos, si no es así se mostrará un mensaje y se seguirán pidiendo datos.




También se controlará que se haya introducido al menos un valor numérico.


Espero vuestra ayuda porque no se por donde meterle mano, siento mucho el titulo del tema por ser tan especifico pero no sabia que ponerle.

Un saludo
  #2 (permalink)  
Antiguo 20/01/2008, 12:09
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Re: Ejercicio de javascript

Hola pedakitu

Explica qué es lo que te falta o qué errores estás teniendo. Si pones el código que estás usando, podremos ayudarte a corregirlo.

Saludos,
  #3 (permalink)  
Antiguo 20/01/2008, 14:04
 
Fecha de Ingreso: mayo-2007
Mensajes: 13
Antigüedad: 17 años
Puntos: 0
Re: Ejercicio de javascript

Pues me falta todo, no se por donde empezar, estoy aprendiendo y la verdad que despues de leerme el tema, veo este ejercicio y es mucho mas dificil que todos los ejemplos. No se por donde meterle mano, asi que aun no tengo nada de codigo.

  #4 (permalink)  
Antiguo 20/01/2008, 16:07
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: Ejercicio de javascript

Hola pedakitu:

Si el ejercicio es didáctico, supongo que lo mejor que podemos hacer es orientarte antes de hacérte todo el ejercicio, que no tendría sentido.

Para empezar las funciones que vas a necesitar para alertar información es:
alert("Frase que quieres alertar, y un "+cantidad+" número");
Para preguntar datos, necesitarás la función promt():
var respuesta = prompt("Pregunta que quieres realizar", "Texto por defecto");

Para comprobar que un string sea un número, se ha tratado varias veces. Supongo que puedes simplificar utilizando el constructor Number() y comparando lo construído con lo que tenías:
if( Number(elNumero) == elNumero )

Y para calcular la media es fácil, ya sabrás la fórmula matemática.

Uno de los problemas más gordos que tendrás, es el pedir números indefinidamente hasta que el usuario pulse cancelar. El botón cancelar se refleja en la variable respuesta como un valor, null o undefined, no recuerdo bien. Deberías construir un bucle while, por ejemplo.

El almacenamiento de los números es algo complicado. Puedes hacerlo mediante arrays para todos los números, o puedes utilizar una variable sumatorio en la que se vaya almacenando la suma de los números introducidos, y una variable cantidadDeNumeros que refleje lo que su propio nombre indica. media se calculará símplemente así:
var media = sumatorio / cantidadDeNumeros;


Postea tus progresos.

Saludos
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #5 (permalink)  
Antiguo 21/01/2008, 13:51
 
Fecha de Ingreso: mayo-2007
Mensajes: 13
Antigüedad: 17 años
Puntos: 0
Re: Ejercicio de javascript

Le pregunte al profesor que me diera unas nociones y me dijo lo siguiente:

La secuencia del programa podría ser algo así:
________________________________________
Definimos las variables para la suma, el contador y la salida del bucle.

- Mientras una variable x sea 0 permanecemos en el siguiente bucle:
bucle:

Preguntamos sobre el número
Miramos a ver si existe una respuesta
Si existe la respuesta:
Analizamos si la respuesta es letra
Si la respuesta es letra sólo hacemos que se muestre el mensaje correspondiente
Si no es letra convertimos el carácter numérico en numero (parseInt) y sumamos la cantidad e incrementamos el contador de números introducidos

Si no existe respuesta:
Analizamos si el contador de números introducidos es >0
Si es mayor de 0 Presentamos la media y ponemos la variable x a 1 para salir del while
Si no es mayor de 0 mostramos la alerta de que no se han introducido números.
Cerramos el bucle
________________________________________
• Para realizar bien el ejercicio y distinguir cuando se introduce letra o número sería conveniente utilizar, como tu mismo bien indicas, la función isNaN(valor), que nos devolverá cierto si es un letra y falso si es un número.
• Para realizar el bucle, como también has comentado, utilizaremos la sentencia while.

El diseño de esta práctica se salta un poquito el orden lógico del libro, las demás, más o menos, van más acorde con los contenidos de los capítulos, por eso te lo comento. la estructura while la verás en el punto 3.2.1 (pág. 37). Te aconsejo que utilices while y no do..while, aunque se puede hacer con ambos.
Es un poco más difícil encontrar la función isNaN, así que te diré los números de página, la verás en la página 67 y un ejemplo en la 146.

Una aclaración respecto a prompt:
prompt nos devuelve una cadena de caracteres. La cadena de caracteres puede ser de tipo numérico o letras y símbolos. Un carácter numérico no es un número con el que podamos operar. Para detectar si el tipo de carácter es numérico usaremos isNaN, y si lo es y necesitamos convertirlo en número, la manera más fácil es usar parseInt.

Yo he empezado el codigo por la mitad, es decir, por lo escrito en verde, pero no se como hacer la suma del nuevo numero mas los numeros que se encuentren almacenados en el bucle, ademas para el incremento no se si lo suyo seria colocar algo asi: 1++ para que se incremente cada vez que el bucle vuelve.

Este es el codigo que llevo:


Código HTML:
<html>
<head></head>

<body>
<script language="javascript">
var numero;
numero=prompt("Introduce un valor entero y pulsa aceptar o pulsa cancelar para ver la media","");


if(isNaN(numero)) {
alert("Has de introducir un numero en el campo");
}
else
{parseInt(numero);
}

</script>
</body></html> 
Un saludo y gracias por las ayudas.
  #6 (permalink)  
Antiguo 21/01/2008, 14:46
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: Ejercicio de javascript

Hola de nuevo pedakitu:
Vas haciendo progresos, te voy a ayudar un poco con la estructura, que es lo más complicado. Lo que queremos es preguntar indefinidamente, y parar si respuesta es null o si respuesta es true en la función isNaN(respuesta). Eso sugiere un bucle while. Se pueden utilizar las dos condiciones, pero voy a usar sólo una para simplificar el problema:

La estructura sería: while(respuesta !== null) { ... }
Pero como no tenemos respuesta definida, podemos definirla cada vez dentro del condicional:
Código PHP:
var respuesta;
var 
cantidadDeNumeros;
var 
sumatorioDeNumeros;
while( (
respuesta=prompt("pregunta","respuesta default")) !== null ) {
    
// si respuesta es un número
        // añadimos 1 a cantidadDeNumeros
        // añadimos a sumatorioDeNumeros el valor de respuesta
    // en caso contrario
        // salimos del bucle con break con naturalidad
}

// si cantidadDeNumeros > 0 mostramos la media
// si no mostramos una alerta diciendo que no se han entregado números 
También podríamos utilizar un do {...} while() para no ensuciar tanto la condicional, no hay problema.

La condicional para saber si es un número la tienes bien, pero hay que hacer algo con el parseInt(numero); que puesto así no hace nada, se volatiliza en cuanto se calcula.


Sigue en tus progresos.

Saludos
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #7 (permalink)  
Antiguo 22/01/2008, 00:17
 
Fecha de Ingreso: mayo-2007
Mensajes: 13
Antigüedad: 17 años
Puntos: 0
Re: Ejercicio de javascript

Por ahora llevo esto y no se que le falla, que le sobra o que le falta...

Código HTML:
<html>
<head></head>

<body>
<script language="javascript">
var suma=0;
var ct=0;
var numero=prompt("Introduce un valor entero y pulsa aceptar o pulsa cancelar para ver la media","");

while((numero)!==null)
{
	
	
	if(isNaN(!numero))
	{
	suma=suma+parseInt(numero);
		ct++;	
	}
	else
	{
		
	alert("Has de introducir un numero en el campo");
	}
}

if(ct>0) 
{alert("La media es: "+ suma/ct)};
else 
{alert("No hay numeros")};
</script>
</body></html> 
  #8 (permalink)  
Antiguo 22/01/2008, 04:05
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: Ejercicio de javascript

Hola de nuevo:

Casi lo tienes, pero me temo que has creado un bucle infinito hagamos lo que hagamos, ya que numero siempre va a valer lo mismo: Lo que hayamos tecleado o null.

Lo que hay que hacer es setear numero en cada iteración, se puede hacer así, como te he dicho antes:
while( (respuesta=prompt("pregunta","respuesta default")) !== null ) { .. }
En el que ya incluímos el condicional. Se puede hacer también con un do { ... } while(), que igual lo ves mejor:

Código PHP:
var numero;
var 
ct=0;
var 
suma=0;
do {
    
numero prompt("Introduce un valor entero y pulsa aceptar o pulsa cancelar para ver la media","");
    if( 
numero!=null ) {
        if( 
Number(numero) == parseFloat(numero) ) {
            
alert("Sumo el numero "+numero);
            
suma=suma+parseFloat(numero);
            
ct++;
        }
        else {
            
alert("Has de introducir un numero en el campo, o pulsar cancelar.");
        }
    }
} while( 
numero!==null );

if(
ct>0
{
alert("La media es: "suma/ct)};
else 
{
alert("No hay numeros.")}; 
He tenido que utilizar la condicional
if( Number(numero) == parseFloat(numero) )
porque el isNaN() no me daba el resultado que yo quería...


Supongo que ya lo tendríamos terminado.

Saludos.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #9 (permalink)  
Antiguo 22/01/2008, 08:21
 
Fecha de Ingreso: mayo-2007
Mensajes: 13
Antigüedad: 17 años
Puntos: 0
Re: Ejercicio de javascript

Gracias derkenuke, pero he copiado el codigo que has puesto y a mi no me rula...
  #10 (permalink)  
Antiguo 22/01/2008, 10:07
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: Ejercicio de javascript

Sí, es cierto, le sobra un ;, te lo dice la consola de errores de FF (un buen uso de esta consola te ahorra quebraderos de cabeza). Está aqui:
Código:
if(ct>0) 
{alert("La media es: "+ suma/ct)}; 
Internet Explorer sí se lo tragaba, pero Firefox por ejemplo no. Recuerda que una llave } ya finaliza la sentencia, y podemos escribir todo en una línea sin problema:
Código PHP:
a=b=true;
= new Function();
if(
a) { f(); } else { g(); } alert("u"); 
Y si cabe poner un punto y coma, sería después del else:
Código PHP:
a=b=true;
= new Function();
if(
a) { f(); } else { g(); }; alert("u"); 


Saludos, y espero que hayas sacado algo en limpio
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #11 (permalink)  
Antiguo 26/01/2008, 13:06
 
Fecha de Ingreso: mayo-2007
Mensajes: 13
Antigüedad: 17 años
Puntos: 0
Re: Ejercicio de javascript

Muchas gracias por el ejercicio anterior, pero ahora estoy realizando otro y me he quedado atascado. El ejercicio pide lo siguiente:

Ordenar una matriz (array) de nombres introducidos por el usuario.

La introducción de datos se realizará de tal forma que si se pulsa el botón aceptar el usuario continuará introduciendo nombres y si se pulsa cancelar se muestran los nombres en el orden introducido en pantalla, y seguidamente los nombres ordenados alfabéticamente, en la propia ventana.

Se debe comprobar que no se introducen números y que ha sido introducido al menos un nombre.


Yo aun no le he implementado el ultimo punto de que se haya introducido al menos un nombre y que no sean numeros y tengo lo siguiente:

Código HTML:
var lista = new Array ();
while( lista!==null )
{
    lista[0++] = prompt("Introduce un nombre y pulsa aceptar o pulsa cancelar para ver los nombres introducidos","");
    
    }

for (i = 0; i < lista.length; i = i + 1)
 {
document.write(lista[i] + "*");
}
Ya se que la entrada al bucle while no se realiza porque de inicio el valor de lista es null, con lo cual me falla la forma de entrar al bucle y no se me ocurre otra cosa...

Echarme una mano dioses del javascript.
  #12 (permalink)  
Antiguo 27/01/2008, 08:50
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: Ejercicio de javascript

Hola de nuevo pedakitu:

Creo que todavía tienes fallos en conceptos iniciales... es fácil solventarlos si empiezas con javascript poco a poco, leyendo ejemplos, sin empezar "a lo bruto". Mucho de tu código no tiene sentido

En tu nuevo ejercicio la estructura del while es invariable al anterior ya que queremos lo mismo: Introducir hasta que se pulsa cancelar.

Existe mucho escrito sobre el manejo de los arrays. Insertar un nuevo elemento al final es fácil: Método push(). Ayúdate de google en estos casos. También se puede hacer sin problemas:
Código PHP:
miArray[miArray.length] = miElementoNuevoAlFinal
Ya que miArray.length representa un entero con la cantidad de elementos que contiene miArray, pero coincide con el primer índice no usado después de todos los que tenemos usados.

Para ordenar no hay que comerse mucho la cabeza: Método sort() directamente.


Un saludo y suerte
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #13 (permalink)  
Antiguo 29/01/2008, 13:35
 
Fecha de Ingreso: mayo-2007
Mensajes: 13
Antigüedad: 17 años
Puntos: 0
Re: Ejercicio de javascript

Gracias derkenuke por toda la ayuda que me estas brindando, googleando he llegado a conseguir hacer el siguiente codigo:

Código HTML:
var ct=0;
var lista = new Array();
while(1)
{
	lista[ct] = prompt("Introduce un nombre y pulsa aceptar o pulsa cancelar para ver los nombres introducidos","");
	if (lista[ct] == null ) break;
	ct++;
}
if (ct > 0)
{
	for (i = 0; i < lista.length; i++)
	{
		document.write(lista[i] + "*");
	}
}
else alert("No has introducido ningún nombre");
La cuestion que cuando pulso en cancelar, me muestra todo el array, pero me incluye como ultimo valor del array, el valor null y no se como evitarlo.
  #14 (permalink)  
Antiguo 29/01/2008, 15:13
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: Ejercicio de javascript

Hola de nuevo:

El código ha mejorado bastante. Para no mostrar el último valor puedes llegar con el bucle en vez de hasta lista.length hasta lista.length-1.

Pero normalmente en vez de crear errores y luego enmendarlos o disimularlos, suele ser más cómodo no crearlos (además de más elegante). Simplemente si la respuesta es null, no la incluyas en el array:
Código PHP:
var ct=0;
var 
lista = new Array();
while(
1)
{
    var 
pregunta prompt("Introduce un nombre y pulsa aceptar o pulsa cancelar para ver los nombres introducidos","");
    if (
pregunta == null
        break;
    else 
        
lista[ct] = pregunta;
    
ct++;

Así nos ahorramos el problema.


Un saludo
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:44.