Autor Tema: function Javascript llamar o invocar a una función con parámetros CU01122E  (Leído 2738 veces)

JurreNawijn

  • Sin experiencia
  • *
  • Mensajes: 32
    • Ver Perfil
Buenas noches, dejo la respuesta al siguiente ejercicio (CU01122E).

Creo que hice lo que pedía el enunciado del ejercicio.

Código: [Seleccionar]
<DOCTYPE html>
<html> <head> <title>Curso JavaScript aprenderaprogramar.com</title> <meta charset="utf-8">
<script type="text/javascript">
    function obtenerImporteConImpuestos(importeSinImpuesto, tipoDeProducto) {
        // Recoge datos
        tipoDeProducto = Number(prompt("Menú: \n\n 1) 21% IVA.\n 2) 10% IVA.\n 3) 5% IVA. \n\n Debes escoger unas de las tres opciones. "));
        var msg = "El importe sin impuesto es: " + (importeSinImpuesto) + "\n";
        var msg2 = "El importe con impuesto es: ";
        // Arroja datos
        switch (tipoDeProducto) {
            case 1: alert(msg + msg2 + (importeSinImpuesto*1.21)); break;
            case 2: alert(msg + msg2 + (importeSinImpuesto*110/100)); break;
            case 3: alert(msg + msg2 + (importeSinImpuesto*1.05)); break;
            default: alert("Por favor, inserta un valor entre 1 y 3."); break;
               
        }
}
    function obtenerImporteConImpuestos2(importeSinImpuesto)
    {
       
        importeSinImpuesto = Number(prompt("Inserta un valor entre 1 y 3."));
        if (importeSinImpuesto >= 4) {
            alert("Error: Solo hay tres tipos.");
        } else {
        resultado = [undefined, (100*1.21) ,(100*110/100),(100*1.05)];
        alert("El importe sin impuesto es : 100\n" + "El importe con impuesto es: " + resultado[importeSinImpuesto]);
        }
    }

</script>
</head>
<body> <div> <p>Los ejercicios</p>
<img onclick="obtenerImporteConImpuestos(100)" src="http://2.bp.blogspot.com/-hU25nwadhPI/TV1TNKRmBYI/AAAAAAAAAH8/dKxiSpvhsPE/s1600/600px-MA_Route_1_svg.png" alt="Ejercicio 1" title="Ejercicio 1" width="200px" height="150px" />
    <img onclick="obtenerImporteConImpuestos2()" src="http://cliparwolf.com/images/2/2-06.jpg" alt="Ejercicio 2" title="Ejercicio 2" width="200px" height="150px" /> </div> </body> </html>
« Última modificación: 07 de Febrero 2016, 11:59 por Ogramar »
¿Por qué programo? Me gusta programar porqué me hace sentir que tengo el control de la situación. Así me siento cuando programo. JurreNawijn

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Buenas JurreNawijn las cosas mejorables serían

- El ejercicio pide que la función obtenerImporteConImpuestos reciba dos parámetros. Aunque tú has definido que recibe dos parámetros, en realidad es como si la hubieras definidio recibiendo sólo uno, porque después redefines tipoDeProducto en la línea

tipoDeProducto = Number(prompt("Menú: \n\n 1) ...

De este modo no estás usando el segundo parámetro, es como si hubieras escrito function obtenerImporteConImpuestos(importeSinImpuesto) de modo que no cumples con lo que se pide

- Igual que haces la operación importeSinImpuesto*110/100 deberías hacer el resto de operaciones, debes mantener un criterio homogéneo, no hacerlo en unos sitios de ese modo y en otros importeSinImpuesto*1.21 (aquí si seguimos el mismo criterio debería ser importeSinImpuesto*121/100)

- Cada función debe encargarse de una tarea y no de varias (principio de cohesión). Por ello es preferible que la petición de datos tenga lugar en una función y los cálculos de impuestos en otro. Puedes fijarte en cómo se hace aquí donde hay un mejor diseño: https://www.aprenderaprogramar.com/foros/index.php?topic=3259.0 (todavía podría mejorarse separando en otra función el mostrar resultados)

Salu2

JurreNawijn

  • Sin experiencia
  • *
  • Mensajes: 32
    • Ver Perfil
Aquí dejo el código corregido.

Código: [Seleccionar]
<DOCTYPE html>
<html> <head> <title>Curso JavaScript aprenderaprogramar.com</title> <meta charset="utf-8">
<script type="text/javascript">
    function RecogeDatos() {
        var Cantidad = Number(prompt("Escribe el importe sin impuesto: "));
        var Tipo = Number(prompt("Menú: \n\n 1) 21% IVA.\n 2) 10% IVA.\n 3) 5% IVA. \n\n Debes escoger unas de las tres opciones. "));
        obtenerImporteConImpuestos(Cantidad,Tipo);
    }
   
    function obtenerImporteConImpuestos(importeSinImpuesto, tipoDeProducto) {
        var msg = "El importe sin impuesto es: " + (importeSinImpuesto) + "\n";
        var msg2 = "El importe con impuesto es: ";
        // Arroja datos
        switch (tipoDeProducto) {
            case 1: alert(msg + msg2 + (importeSinImpuesto*121/100)); break;
            case 2: alert(msg + msg2 + (importeSinImpuesto*110/100)); break;
            case 3: alert(msg + msg2 + (importeSinImpuesto*105/100)); break;
            default: alert("Por favor, inserta un valor entre 1 y 3."); break;
               
        }
}
    function obtenerImporteConImpuestos2(importeSinImpuesto)
    {
        importeSinImpuesto = Number(prompt("Inserta un valor entre 1 y 3."));
        if (importeSinImpuesto >= 4) {
            alert("Error: Solo hay tres tipos.");
        } else {
        resultado = [undefined, (100*1.21) ,(100*110/100),(100*1.05)];
        alert("El importe sin impuesto es : 100\n" + "El importe con impuesto es: " + resultado[importeSinImpuesto]);
        }
    }

</script>
</head>
<body> <div> <p>Los ejercicios</p>
<img onclick="RecogeDatos()" src="http://2.bp.blogspot.com/-hU25nwadhPI/TV1TNKRmBYI/AAAAAAAAAH8/dKxiSpvhsPE/s1600/600px-MA_Route_1_svg.png" alt="Ejercicio 1" title="Ejercicio 1" width="200px" height="150px" />
    <img onclick="obtenerImporteConImpuestos2()" src="http://cliparwolf.com/images/2/2-06.jpg" alt="Ejercicio 2" title="Ejercicio 2" width="200px" height="150px" /> </div> </body> </html>
¿Por qué programo? Me gusta programar porqué me hace sentir que tengo el control de la situación. Así me siento cuando programo. JurreNawijn

bermartinv

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 298
    • Ver Perfil
Hola JurreNawijn,
en la llamada a la función obtenerImporteConImpuestos2, te sucede lo mismo que te comentaba Ogramar, no te hace falta crear la función con un argumento que todavía no esta definido. Puedes crear la función " function obtenerImporteConImpuestos2()".
Otra cosa que te recomiendo es que nombres de una forma más clara a las funciones segúnsus acciones, ya que en el primer onclick llama a la función RecogeDatos y luego esta a la funcion de obtenerImporteConImpuestos.

 

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