Prácticas con JavaScript
Desarrollo de Aplicaciones Telemáticas, 2021-2022
Grado en Ingeniería en Tecnologías de la Telecomunicación
Grado en Ingeniería en Sistemas de Telecomunicación
Escuela Técnica Superior de Ingeniería de Telecomunicación
Universidad Rey Juan Carlos
22 de marzo. Práctica 3.10. Donde decía quitaespacios.js ahora dice quitaEspacios.js
Estos ejercicios deberán estar escritos en ECMAScript 6, preparado para ejecutarse en node.js, en modo estricto.
Los enunciados te pedirán una o varias funciones. Para probarlas, incluye en el propio fichero diversas llamadas a cada función, con diversos valores. Muestra por salida estándar el resultado. Ejemplo:
'use strict'
function suma(x,y){
return(x+y);
}
let a,b;
a=2;
b=2;
console.log(suma(a,b));
a=0.15;
b=0.50;
console.log(suma(a,b));
a=-1;
b=0;
console.log(suma(a,b));
a=undefined;
b=0;
console.log(suma(a,b));
(etc)
Naturalmente, cuando un enunciado pida una función que haga algo, esa función a su vez podrá llamar a todas las funciones necesarias para tener un diseño razonable.
Escribe en un fichero ~/dat/practica03/test01.js
un programa JavaScript similar a los ejemplos de las transparencias (pero no igual) que haga conversiones entre distintos tipos de datos y que detecte el valor NaN.
Escribe en un fichero ~/dat/practica03/test02.js
un programa JavaScript similar a los ejemplos de las transparencias (pero no igual) para probar ejemplos básicos de expresiones aritméticas y expresiones booleanas, con el doble igual y con el triple igual.
Escribe en un fichero ~/dat/practica03/test03.js
un programa JavaScript similar a los ejemplos de las transparencias (pero no igual) con funciones que ilustren que en JavaScript el paso de valores a las funciones es por valor y no por referencia. También el uso de valores por omisión de un parámetro (al estilo ECMAScript 6).
Escribe en un fichero ~/dat/practica03/test04.js
un programa JavaScript similar a los ejemplos de las transparencias (pero no igual) con una función sencilla con notación tradicional, y una función equivalente con notación flecha.
Escribe en un fichero ~/dat/practica03/test05.js
un programa JavaScript similar a los ejemplos de las transparencias (pero no igual) que tenga una función que use switch. Y otra función, equivalente, basada en if then.
Escribe en un fichero ~/dat/practica03/test06.js
un programa JavaScript similar a los ejemplos de las transparencias (pero no igual) que tenga una función que use for. Y otra función equivalente, basada en while.
Escribe un fichero ~/dat/practica03/js01.js
que contenga:
Una función que reciba una distancia en metros y la devuelva en centímetros.
Una función que reciba una distancia en metros y la devuelva en pulgadas. (Una pulgada son 0.0254 metros)
Una función que reciba una distancia en metros y la devuelva en yardas. (Un yarda son 0.9144 metros)
Escribe en un fichero ~/dat/practica03/convierte.js
un programa JavaScript que tenga una función que reciba dos parámetros:
Una distancia expresada en metros. Este parámetro podrá ser tanto un número como una cadena
Una cadena que podrá tomar los valores m
, cm
, in
o yd
.
Los valores han de ser exactamente estos y no otros similares. No se admiten variaciones en mayúculas/minúsculas o espacios. Si el programador omite este parámetro, tu programa deberá detectarlo.
La función devolverá
Una cadena (no un número) con la distancia de entrada, convertida a las unidades expresadas en el segundo argumento (metro, centímetro, pulgada o yarda).
Si ha habido algún problema con los parámetros de entrada, la función devolverá una cadena que empezará por Error:
(La primera letra en mayúscula), y que a continuación explicará la causa del error: que falten argumentos, que los argumentos sean incorrectos, etc
Escribe un programa en JavaScript 6 llamado ~/dat/practica03/quitaEspacios.js
que tenga una función que reciba una cadena, y que devuelva esa misma cadena, pero reemplazando los espacios por barras bajas (_). Observa que el nombre del programa es quitaEspacios.js
, en notación dromedario.
Escribe en un fichero ~/dat/practica03/buscaObjeto.js
un programa en JavaScript que:
Tenga una función que cree y devuelva un plain object. Iniciando sus propiedades a partir de los parámetros de esa función, como los ejemplos siguientes:
crea_alumno(nombre, apellidos, dni, expediente);
crea_coche(marca, modelo, matricula);
crea_asignatura(id, nombre, titulacion, cuatrimestre);
Piensa una función similar a estas, pero no idéntica. Basta con una. Observa que el nombre del programa es buscaObjeto.js
, en notación dromedario, con una mayúscula (solo una) separando las palabras. Como en todos los ficheros de esta asignatura, si lo escribes de otra forma, aunque solo cambie una mayúscula, tu práctica será un no presentado.
Tenga otra función que reciba un array de objetos, y haga alguna búsqueda sobre ellos, devolviendo los que cumplan cierta condición. O la lista vacía si ninguno la cumple. Ejemplo:
A partir de una lista de objetos alumno, devolver una lista con todos los que tengan el dni 01234 (solo deberia ser uno, pero la función no lo tiene en cuenta).
A partir de una lista de coches, devoler todos los de marca Seat.
A partir de una lista de asignaturas, devolver todas las del primer cuatrimestre.
En estos ejemplos, 01234, seat o 1 serían un parámetro de la función de búsqueda, no un valor constante en esa función.
Escribe en un fichero ~/dat/practica03/buscaCadena.js
un programa en JavaScript que tenga una función que:
Reciba dos parámetros, que serán cadenas. La primera cadena de longitud 1, la segunda de longitud arbitraria (lo que incluye la longitud 1)
Eleve las excepciones adecuadas si los parámetros no cumplen lo especificando en el punto anterior (no son dos, no son cadenas, la primera no es de longitud 1)
Devuelve el número de veces que la primera cadena aparece en la segunda. Ejemplos
Para los parámetros "x", "xyz"
devolvería 1
Para los parámetros "1", "xyz"
devolvería 0
Para los parámetros "a", "ababA"
devolvería 2
Escribe en un fichero ~/at/practica03/valida.js
un programa JavaScript que tenga una función que indique si una contraseña tiene la fortaleza requerida
Recibirá los siguientes parámetros:
La contraseña.
La longitud total que deberá tener la contraseña para que se considere válida.
El número mínimo de minúsculas exigidas. Puede ser 0. Por letra minúscula entenderemos todas las letras inglesas minúsculas, mas la eñe minúscula. Las letras con tilde o con diéresis no las consideramos letras a estos efectos.
Ejemplo: si el número mínimo de minúsculas exigido es 2, la cadena ESPAña sería válida. Pero CAñóN no, porque la ó con tilde no se considera en este caso correcta (podría ser un carácter especial si así lo especificara el usuario de la librería)
El número mínimo de mayúsculas. Puede ser 0. Como en el apartado anterior, consideramos letra mayúscula todas las letras inglesas, más la eñe mayúscula. Y no consideramos letra las letras con tilde o con diéreses.
Del mismo modo, si se exigieran por ejemplo al menos 2 mayúsculas, espAÑA sería correcto tendría 3 mayúsculas. Pero ÑandÚ no, porque la Ú no la contaríamos como letra mayúscula.
El número mínimo de números exigidos. (Puede ser 0)
El número mínimo de caracteres especiales exigido. (Puede ser 0)
Una cadena que contendrá todos los caracteres que serán considerados especiales. P.e.
,.-{}[]!"·$%&/()=?¿¡'
Si la contraseña contiene algún carácter especial no incluido en esta lista, se considerará incorrecta.
Si esta cadena que especifica lo que se considera especial contiene números o letras ordinarias, puedes hacer lo que prefieras: comprobarlo o no, dar un error, ignorarlo, considerarlo un carácter especial, etc
Devolverá
La cadena ok, en minúscula, si todos los parámetros son correctos, todos los caracteres de la contraseña son correctos y la contraseña tiene la fortaleza requerida.
En otro caso, una cadena de error. La cadena empezará por Error: (primera con mayúscula), y a continuación describirá el problema: la contraseña no tiene suficientes números, no tiene suficientes minúsculas, tiene un carácter especial no permitido, etc
Observaciones adicionales:
La función debe detectar si el programador que la usa se ha equivocado y alguno de los 7 parámetros es incorrecto
Por no ser del tipo adecuado. Por ejemplo que el programador que usa la librería exija una contraseña con jkrr minúsculas. (Esto no tiene sentido, jkrr es una cadena, no un número)
Por no ser un valor correcto. Por ejemplo negativo, o indefinido.
En estos casos, el programa levantará una excepción. Este es un comportamiento bastante habitual: si el usuario se equivoca, no es un verdadero error, no es un error importante, es algo normal, los usuarios se equivocan. Esta situación se describe en un parámetro de salida.
Lo que no debería suceder es que el programador que usa la librería la invoque de forma incorrecta. En este caso se levanta una excepción.
Para el punto 7 tendrás que hacer una función que cuente cuántas veces aparece en la contraseña cada uno de los caracteres de una cadena. Esta misma función te servirá para contar números, usando como cadena 1234567890. También para contar minúsculas, usando como cadena abcdefg... y mayúsculas con ABCDEFG... Reutiliza el código de la práctica anterior.
Sea un conjunto aleatorio de personas. ¿Cuál es la probabilidad de que al menos dos de ellas cumplan años el mismo día? La llamada paradoja del cumpleaños (https://es.wikipedia.org/wiki/Paradoja_del_cumplea%C3%B1os) nos dice que si hay al menos 23 personas, la probabilidad es superior al 50%. Si hay al menos 41, la probabilidad es superior al 90% y si son 57, superior al 99%.
Escribe un programa llamado ~/dat/practica03/paradoja.js
que tenga:
Una función que genere una lista aleatoria de fechas de cumpleaños. El tamaño dependerá de un parámetro de entrada.
Una función que a partir de una lista de fechas de cumpleaños, indique cuántas personas tienen el mismo cumpleaños.
Una función que vaya generando estas listas, de tamaño incremental. Esto es: dos personas, tres, cuatro.... Y que se detenga cuando haya dos con el mismo cumpleaños.
Observaciones:
Naturalmente, puedes usar las funciones adicionales que veas conveniente.
Ignora los años bisiestos.
Aunque las personas indicamos nuestro cumpleaños en formato mes y dia, para este ejercicio es mucho más cómodo que, internamente, las funciones siempre manejen una fecha como un entero entre 1 y 365. Ejemplo: el 1 sería el 1 de enero, el 32 el 1 de febrero y el 365, el 31 de diciembre.
Escribe ejemplos que muestren el funcionamiento de tu código. Pero usando el formato mes y dia. Por tanto, necesitarás una función que apartir de una fecha como dia del año, devuelva mes y día. Esto es algo muy común en cualquier programa: usar cierto formato para el proceso interno, y un formato distinto para presentarlo a las personas. Esta conversión debe hacerse en el último momento, esto es, inmediatamente antes de presentase al usuario. Esta función puedes programarla a partir de lo visto en clase, o simplemente googlear un poco, hay muchos ejemplos en internet. En este caso, asegúrate de comprender bien el código que copias.