Autor Tema: JavaScript ejemplo Funciones function con parámetros Ejercicio CU01122E tutorial  (Leído 4132 veces)

SOLEARES

  • Sin experiencia
  • *
  • Mensajes: 13
    • Ver Perfil
Hola,

Citar
1. Crea un script donde declares una función obtenerImporteConImpuestos que reciba dos parámetros: el importe sin impuestos (numérico) y el tipo de producto (numérico entero). La función debe mostrar por pantalla el importe sin impuestos más el 21% si el tipo de producto es 1, ó el importe sin impuestos más el 10% si el tipo de producto es 2, ó el importe sin impuestos más el 5% si el tipo de producto es 3.

Ejemplo: obtenerImporteConImpuestos(100, 1) debe mostrar: Para un importe sin impuestos de 100 y tipo de producto 1 el resultado de importe con impuestos es 121. obtenerImporteConImpuestos(100, 2) debe mostrar: Para un importe sin impuestos de 100 y tipo de producto 2 el resultado de importe con impuestos es 110.

2. Crea un script donde declares una función obtenerImporteConImpuestos2 que reciba un parámetro: el importe sin impuestos (numérico). La función debe devolver un array con valor undefined para el índice 0, el importe sin impuestos más el 21% para el índice 1, el importe sin impuestos más el 10% para el índice 2, ó el importe sin impuestos más el 5% para el índice 3. Invoca la función haciendo que se muestre el contenido del array por pantalla.

obtenerImporteConImpuestos(100) debe devolver: resultado[0] = undefined, resultado[1] = 121, resultado[2] = 110, resultado[3] = 105. Por pantalla se debe mostrar: Para precio sin impuestos 100 si el producto es tipo 1 el importe es 121, si el producto es tipo 2 el importe es 110 y si el producto es tipo 3 el importe es 105.

Este ejercicio lo he realizado con el siguiente código:

Código: [Seleccionar]
<html> <head> <title>Curso JavaScript aprenderaprogramar.com</title> <meta charset="utf-8">

<script type="text/javascript">

function ejercicio1(){
var precio = prompt ('Introduce el precio sin impuestos: ');
var producto = prompt ('Introduce el tipo de producto (válido solo 1,2,3): ');
precio = Number(precio);
producto = Number(producto);
if (isNaN (precio) || isNaN (producto)){
alert ('Los parámetros introducidos no son numéricos');
}
else if (producto != 1 && producto !=2 && producto !=3){
alert ('El tipo de producto introducido no es correcto. \nSolo son válidos los valores 1, 2 y 3.');
}
else {obtenerImporteConImpuestos(precio,producto);}
}

function ejercicio2(){
var precio2 = prompt ('Introduce el precio sin impuestos: ');
precio2 = Number(precio2);
if (isNaN (precio2)){
alert ('El precio introducido no es numérico');
}
  else {
  obtenerImporteConImpuestos2(precio2);
    }
}

function obtenerImporteConImpuestos(precio,producto) {
switch (producto) {
case 1:
impuesto = Number(1.21);
break;

case 2:
impuesto = Number(1.1);
break;

case 3:
impuesto = Number(1.05);
break;

default:
break;
}

alert ('Para un importe sin impuestos de ' + precio + ' y tipo de producto ' + producto + ' el resultado del importe con impuestos es de ' + precio*impuesto)

}

function obtenerImporteConImpuestos2(precio2){
var resultado = [undefined, 121, 110, 105];
alert ('resultado[0] = ' + resultado[0] + ', resultado[1] = ' + resultado[1] + ', resultado[2] = ' + resultado[2] + ', resultado[3] = ' + resultado[3] + '.')
alert ('Para un importe sin impuestos de ' + precio2 + ' y tipo de producto 1 el importe es ' + precio2*resultado[2]/100 + ', si el producto es tipo 2 el importe es ' +  precio2*resultado[1]/100 + ' y si el producto es tipo 3 el importe es ' + precio2*resultado[3]/100 + '.');

}

</script>

</head>

<body> <div> <p onclick="ejercicio1()"> Pulsa sobre este texto para calcular el importe con Impuestos en dependencia del tipo de producto.</p>

<img  src="http://i.imgur.com/afC0L.jpg" alt="Notepad++" title="Notepad++, un útil editor de texto">
<p onclick ="ejercicio2()">Pulsa sobre este texto para calcular el importe con Impuestos para los diferentes tipos de productos. </p> </div> </body> </html>

Estoy seguro que esto se puede optimizar bastante.
En la primera parte, cuando introducimos un precio para un producto tipo 2, el resultado sale con muchos decimales, sin embargo esto no ocurre con los otros tipos de productos.No entiendo porqué ocurre solo con este tipo. Agradecería una explicación y si el código requiere corrección, pues bienvenida sea :).

Saludos,
« Última modificación: 15 de Mayo 2015, 08:43 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2662
    • Ver Perfil
Re:JavaScript ejemplo Funciones Ejercicio CU01122E del tutorial web
« Respuesta #1 en: 15 de Mayo 2015, 08:41 »
Hola el ejercicio está bien resuelto. Dentro de la funcion ejercicio1() has hecho una validación de datos que está bien planteada, aunque el ejercicio no lo pedía. Por ejemplo con if (isNaN (precio)) se comprueba si el precio no es un valor numérico y si no lo es se avisa de que no es numérico y no pasa a hacer el cálculo.

Recomendaciones:

en la función obtenerImporteConImpuestos usas la variable impuesto sin haberla declarado. Se recomienda siempre declarar antes (aunque no es obligatorio) en este caso podrías usar var impuesto = 0; al principio de la función.

También has usado impuesto = Number(1.21);

Aquí puedes usar Number pero en realidad no es necesario. Indicar Number es adecuado cuando existe o puede existir duda. Por ejemplo cuando usas un Prompt el tipo devuelto es cadena de texto, en ese caso puede haber duda de si es numérico y por eso debes usar Number pero si escribes impuesto = 1.21; no hay duda y no sería necesario.

Debes mejorar la forma de nombrar variables var resultado = [undefined, 121, 110, 105]; ¿Por qué lo llamas resultado si no es un resultado? El nombre de una variable debe describir qué información porta esa variable, aquí podrías haberlo llamado factorImpuesto ó factorMultiplicador ó similar.

Aquí ¿no has cambiado el orden?

   alert ('Para un importe sin impuestos de ' + precio2 + ' y tipo de producto 1 el importe es ' + precio2*resultado[2]/100 + ', si el producto es tipo 2 el importe es ' +  precio2*resultado[1]/100 + ' y si el producto es tipo 3 el importe es ' + precio2*resultado[3]/100 + '.');

No sería producto 1 el importe es ' + precio2*resultado[1]/100 en vez de producto 1 el importe es ' + precio2*resultado[2]/100

El resultado con muchos decimales que comentas se debe a la forma de representación de los números que utilizan los computadores. Es decir, si introducimos como precio 22 y tipo de producto 2, deberíamos obtener 22*1,1 = 24,2

Sin embargo obtengo 24.200000000000003

Esto se debe a que el computador no trabaja con 22 y 1,1 sino con representaciones de estos números.

Esto se trata más adelante en el curso y también se trata cómo se puede solucionar, cuando avances en el curso lo verás.

Salu2

 

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