[RESOLUCIÓN EJERCICIOS MÓDULO 5 – LIBRERÍAS DE CÓDIGO]
11 de mayo de 2018
Ejercicio 1. Enunciado: Desarrolla una librería Croupier que tenga una función para barajar cartas. Para barajar, intercambiamos una carta aleatoria dentro de nuestra baraja por otra. Y esto lo hacemos 100 veces. Se recomienda usar la librería Math.random. Por ejemplo, intercambiar la carta en la posición 7 por la carta en la posición 24.
Código // CONSTANTES // Número de cartas por palo. // Los valores son 1 = Ás, 11 = J, 12 = Q, 13 = K var NUM_CARTAS_PALO = 13; // trece // trece cartas por los cuatro palos var NUM_CARTAS = 52; /* Función crearBaraja. * Devuelve un array de cartas, cada carta se representa como un hash o * direccionario con la pareja de "valor" y "palo". * Ej.: {valor: 1, palo: "C"} */ function crearBaraja() { var baraja = []; // C = Corazón, D = Diamantes, P = Picas, T = Trébol var palos = ["C", "D", "P", "T"]; var numPalos = palos.length; // Número de cartas por palo. Los valores son 1 = Ás, 11 = J, 12 = Q, 13 = K for (var i = 0; i < NUM_CARTAS_PALO; i = i + 1) { for (var j = 0; j < numPalos; j = j + 1) { baraja[i * 4 + j] = {valor: i+1, palo: palos[j]}; } } return baraja; } /* Función mostrarCartas. * Devuelve cadena con las cartas que se le pasan como parámetro */ function mostrar(cartas) { var cadena = ""; for (var i = 0; i < cartas.length; i++) { cadena = cadena + cartas[i].valor + cartas[i].palo + " "; } return cadena; }
1
Santiago Barquero López
[RESOLUCIÓN EJERCICIOS MÓDULO 5 – LIBRERÍAS DE CÓDIGO]
11 de mayo de 2018
/* Función barajar. * Baraja las cartas que se le pasan como párametro y devuelve el array * barajado. */ function barajar(cartas) { var numeroIntercambios = 100; // Posiciones de Dos cartas para hacer el intercambio var pos1 = 0; // posición de la primera carta var pos2 = 0; // posición de la segunda carta var aux = null; // variable temporal que almacena carta en intercambio for (var i = 0; i < 100; i = i + 1) { do { // bucle que evita la posibilidad que pos1 y pos 2 sean iguales pos1 = Math.floor(Math.random() * NUM_CARTAS); pos2 = Math.floor(Math.random() * NUM_CARTAS); } while (pos1 === pos2); // si son iguales vuelve a obtener las posiciones aux = cartas[pos1]; cartas[pos1] = cartas[pos2]; cartas[pos2] = aux; } return cartas; } /* Libreria Croupier */ var Croupier = { muestra: mostrar, baraja: barajar }
Prueba // crear baraja var cartas = crearBaraja(); // muestra baraja por consola console.log(Croupier.muestra(cartas)); // barajamos las cartas cartas = Croupier.baraja(cartas); console.log(Croupier.muestra(cartas));
2
Santiago Barquero López
[RESOLUCIÓN EJERCICIOS MÓDULO 5 – LIBRERÍAS DE CÓDIGO]
11 de mayo de 2018
Captura de la prueba
Ejercicio 2. Enunciado: Desarrolla nuevas funciones de la librería Croupier: Repartir, que toma la carta en primera posición de la baraja y la elimina del array Puntuar que, dada una mano de 4 cartas sume su valor. Pero si todas las cartas son iguales, multiplica el valor por 10.
Código
Además del código del ejercicio 1 añado las siguientes funciones: // CONSTANTES // Número de cartas por mano var NUM_CARTAS_MANO = 4; /* Funcion repartir * Devuelve la primera carta disponible en la baraja */ function repartir() { var carta = ""; if (cartas.length != 0) { carta = cartas[0]; var aux = []; // array donde almaceno el nuevo con la carta menos
3
Santiago Barquero López
[RESOLUCIÓN EJERCICIOS MÓDULO 5 – LIBRERÍAS DE CÓDIGO]
11 de mayo de 2018
for (var i = 0; i < cartas.length - 1; i = i + 1) { aux[i] = cartas[i + 1]; } cartas = aux; // modifico el array global } else { // Si no quedan cartas devuelve una cadena varía y muestra mensaje console.log("No quedan más cartas"); } return carta; } /* Función darMano * Recibe las cartas disponibles de la baraja y devuelve una mano de cuatro * cartas en un array */ function darMano() { var mano = []; for (var i = 0; i < NUM_CARTAS_MANO; i = i + 1) { mano[mano.length] = Croupier.reparte();; } return(mano); } /* Función puntuar * Puntúa la mano de cartas recibidas */ function puntuar(cartas) { var puntuacion = 0; var anterior = 0; // puntuación anterior var actual = 0; // puntuación actual // parto de la suposición que las cartas son iguales. // Encuanto haya una diferente iguales será false y no seguiré comprobando. var iguales = true; for (var i = 0; i < NUM_CARTAS_MANO; i = i +1) { actual = cartas[i].valor // comprobamos la igualdad de la carta actual con la anterior // excepto que sea la primera carta (anterior != 0) if (iguales === true && anterior != 0 && anterior != actual) { iguales = false; // una vez false no se cumplirá nunca la condición } if (actual === 1) { // si es un 1 = "As" la puntuación vale 20 puntuacion = puntuacion + 20 ; } else { puntuacion = puntuacion + actual; } anterior = actual; } if (iguales === true) { puntuacion = puntuacion * 10;
4
Santiago Barquero López
[RESOLUCIÓN EJERCICIOS MÓDULO 5 – LIBRERÍAS DE CÓDIGO]
11 de mayo de 2018
} return puntuacion; }
Además modifico la librería Croupier /* Libreria Croupier */ var Croupier = { muestra: mostrar, baraja: barajar, reparte: repartir, daMano: darMano, puntua: puntuar }
Prueba // Creamos una baraja nueva var cartas = crearBaraja(); console.log("Baraja nueva completa"); console.log(Croupier.muestra(cartas)); // Pedimos al Croupier que baraje las cartas cartas = Croupier.baraja(cartas); console.log("Cartas barajadas"); console.log(Croupier.muestra(cartas)); // Pedimos al Croupier que reparta una carta var carta = repartir(); console.log("Primera carta: " + carta.valor + carta.palo); console.log("Cartas restantes: " + cartas.length); // Pedimos al Croupier que reparta una carta var carta = repartir(); console.log("Segunda carta: " + carta.valor + carta.palo); console.log("Cartas restantes: " + cartas.length); console.log(Croupier.muestra(cartas)); // Pedimos una mano de cuatro cartas var mano = Croupier.daMano(); console.log("Mano de 4 cartas: " + Croupier.muestra(mano)); // Pedimos la puntuación console.log("Puntuación: " + Croupier.puntua(mano)); console.log("Cartas restantes: " + cartas.length); console.log(Croupier.muestra(cartas));
5
Santiago Barquero López
[RESOLUCIÓN EJERCICIOS MÓDULO 5 – LIBRERÍAS DE CÓDIGO]
11 de mayo de 2018
Captura de la prueba
6
Santiago Barquero López
[RESOLUCIÓN EJERCICIOS MÓDULO 5 – LIBRERÍAS DE CÓDIGO]
11 de mayo de 2018
Ejercicio 3. Desarrolla una librería Calculadora que calcula las longitudes de varias figuras geométricas como cuadrados, rectángulos y círculos.
Código function perimetroCuadrado(lado) { return lado * 4; } function perimetroRectangulo(base, alto) { return alto * 2 + base * 2; } function perimetroCirculo(radio) { return 2 * radio * Math.PI; } var Calculadora = { cuadrado: perimetroCuadrado, rectangulo: perimetroRectangulo, circulo: perimetroCirculo }
Prueba console.log(Calculadora.cuadrado(15)); // Resultado 60 console.log(Calculadora.rectangulo(10, 15)); // Resultado 50 console.log(Calculadora.circulo(7)); // Resultado 43.982297150257104
7
Santiago Barquero López
[RESOLUCIÓN EJERCICIOS MÓDULO 5 – LIBRERÍAS DE CÓDIGO]
11 de mayo de 2018
Captura de la prueba
8
Santiago Barquero López