Aprendiendo a programar programando

    cabecera

terepebernal.com

De Pseudocódigo a JavaScript. Algoritmos hoja de calendario y día de la semana de una fecha

Comparte si quieres

TwitterFacebookLinkedInWhatsApp

En este artículo te voy a mostrar dos algoritmos hechos en pseudocódigo con PSeInt, que han sido «traducidos a JavaScript». Gran parte del código en JS que te voy a mostrar aquí, seguro que podría realizarse de una manera mucho más sencilla y con menos código, simplemente es un ejercicio que he realizado para practicar.

Se trata de dos algoritmos ya publicados en este blog:

Si quieres estar al tanto de las novedades y publicaciones de esta página web

Suscríbete

En el caso del algoritmo del calendario, el resultado se muestra en la consola del navegador, dicho resultado puedes verlo en la imagen siguiente, para los meses de febrero de 1969 y diciembre de 2018:

Resultado Hoja de Calendario en JS

Algoritmo Hoja de calendario en JS

Para poder ejecutar el algoritmo en JavaScript, lo primero es crear un archivo .html, index.html, que haga la llamada a otro archivo .js, functions.js, que estará guardado en una carpeta llamada js y tendrá escrito el algoritmo en JavaScript. Una vez escrito todo el código bastará con abrir el archivo index.html en el navegador para que se ejecute el algoritmo y tener abierta la consola para poder visualizar el resultado. A continuación se muestra el código del archivo .html:

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Hoja de calendario en JavaScript</title>
</head>
<body>
    <script src="js/functions.js"></script>
</body>
</html>

El archivo functions.js contiene el resto de código, que contiene la parte principal y el resto de funciones necesarias para realizar el algoritmo calendario. A continuación te muestro el programa principal, que utilizando las funciones alert y prompt de JS, pide por teclado el mes y el año al usuario, llama a la función drawMonth, que muestra el calendario en la consola y, mediante un bucle while permite seguir mostrando hojas de calendario mientras se pulse la tecla «S».

/*
 *  Muestra por pantalla una hoja de calendario de un mes y año
 *  que se pedirá al usuario por teclado.
 *  El valor del año estará entre 1601 y 3000.
 */

// Declaración de variables
var month, year;
var S;
var seguir;

S = true;
while (S) {
    // Pedir por teclado el mes
    month = prompt("Mes....(1 -12)");
    // Comprueba que el mes es correcto
    if (month >= 1 & month <= 12) {
        // Pedir por teclado el año
        year = prompt("Año......(1601 - 3000)");
        // Comprueba que el año sea correcto
        if (year < 1601 | year > 3000) {
            alert("Año incorrecto");
        } else {
            drawMonth(year, month); // Dibuja la hoja de calendario
        }

    } else {
        alert("Mes incorrecto");
    }
    // Da la opción de seguir o salir del programa
    seguir = prompt("Pulsar la tecla S para continuar....");
    if (seguir == 's' | seguir == 'S') {
        S = true;
    } else {
        S = false;
    }
}

Si lo comparas con el mismo algoritmo hecho en pseudocódigo, comprobarás que se parecen mucho.

Función drawMonth en JS

La función drawMonth es llamada desde el programa principal y se encarga de mostrar la hoja de calendario en la consola, pero para ello utiliza las funciones drawHeader, openMonth, drawFirstWeek, lastDayMonth, drawNextWeek y drawLastWeek, las cuales se encarga de alguna tarea más pequeña. Si quieres puedes comparar el código con el mismo algoritmo hecho en pseudocódigo.

/*
 *  Dibuja la hoja de calendario
 *  del mes (month) y año (year)
 */
function drawMonth(year, month) {
    /**
     * Declara las variables:
     * nDM: día del mes que toca escribir
     * lDM: último día del mes
     */
    var nDM, lDM, nAux;
    lDM = 0;
    nDM = 0;
    var week;

    drawHeader(year, month); // Dibuja la cabecera de la hoja de calendario
    week = openMonth(year, month); // Dibuja los caracteres anteriores a la primera semana
    nDM = drawFirstWeek(year, month, week); // Dibuja la primera semana del mes
    lDM = lastDayMonth(year, month);
    week = "";
    while ((lDM - (nDM - 1)) >= 7) {
        nDM = drawNextWeek(nDM, week);
    }
    if (lDM != (nDM - 1)) {
        week = drawLastWeek(nDM, year, month);
    }
}

Resto de funciones del algoritmo calendario en JS

Las funciones que son llamadas desde drawMonth, mencionadas en el punto anterior, y el resto de funciones que completan el algoritmo calendario en JavaScript puedes verlas y descargarlas de GitHub en el repositorio hojaCalendarioJS. También puedes ver y descargar, si quieres, el repositorio hojaCalendarioPSeInt. Si comparas ambos códigos verás que se parecen mucho.

Algoritmo día de la semana de una fecha en JS

En este caso pasa lo mismo que en el anterior, para poder ejecutar el algoritmo en JavaScript, lo primero es crear un archivo .html, index.html, que haga la llamada a otro archivo .js, functions.js, que estará guardado en una carpeta llamada js y tendrá escrito el algoritmo en JavaScript. Una vez escrito todo el código bastará con abrir el archivo index.html en el navegador para que se ejecute el algoritmo. El resultado se mostrará por medio de un alert, como se muestra en la siguiente imagen para el 15 de mayo de 2035:

Resultado Algoritmo Dia Semana de Fecha en JS

 

A continuación se muestra el código del archivo .html, que es exactamente igual que en el anterior ejemplo, solo se ha cambiado la etiqueta title:

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Día de la semana de una fecha en JavaScript</title>
</head>
<body>
    <script src="js/functions.js"></script>
</body>
</html>

El archivo functions.js contiene el resto de código, que contiene la parte principal y el resto de funciones necesarias para que el algoritmo funcione.

A continuación te muestro el programa principal, que utilizando las funciones alert y prompt de JS, pide por teclado una fecha al usuario, llama a la función isDateOk, para comprobar que la fecha tiene el formato correcto y es válida, y si sí lo es, se muestra mediante un alert el día de la semana en que cae la fecha introducida por el usuario.

También se utiliza un bucle while que permite seguir introduciendo fechas mientras se pulse la tecla «S», y otras funciones como, parseInt y substring de JS y la función firstDayMonth reutilizada del algoritmo calendario.

/*
 *  Mostrará por pantalla el día de la semana en el que
 *  cae la fecha que se pedirá al usuario por teclado.
 *  El valor del año estará entre 1601 y 3000.
 */

// Declaración de variables
var dateC; // Cadena de texto
var year, month, day, fDM, D, dW; // Enteros
var S, OK; // Booleanos
var seguir; // Caracter

S = true;
while (S) {
    // Pedir por teclado la fecha indicando el formato
    dateC = prompt('FECHA (DD/MM/AAAA)....');
    // Comprobar que la fecha es válida
    OK = isDateOk(dateC);
    if (OK) {;
        // Si la fecha es correcta
        day = parseInt(dateC.substring(0, 2));
        month = parseInt(dateC.substring(3, 5));
        year = parseInt(dateC.substring(6, 10));
        fDM = firstDayMonth(year, month); // Primer día del mes
        D = ((day - 1) % 7);
        dW = fDM + D; // Día de la semana en que cae la fecha
        if (dW > 7) {
            dW = (dW - 7);
        }
        alert("LA FECHA " + dateC + " CAE EN " + dayWeekText(dW));
    } else {
        // Si la fecha no es correcta
        alert("FECHA INCORRECTA. INTÉNTALO DE NUEVO.");

    }
    // Da la opción de seguir o salir del programa
    seguir = prompt("Pulsar la tecla S para continuar....");
    if (seguir == 's' | seguir == 'S') {
        S = true;
    } else {
        S = false;
    }
}

Puedes compararlo con el mismo algoritmo hecho en pseudocódigo.

Resto de funciones del algoritmo día de la semana de una fecha en JS

El resto de las funciones son llamadas por isDateOk y firstDayMonth y son las que completan el algoritmo día de la semana de una fecha en JavaScript. Si quieres puedes verlas y descargarlas de GitHub en el repositorio diaSemanaFechaJS, y si quieres comparar el código con el pseudocódigo, también en GitHub tienes el repositorio diaSemanaFechaPSeInt.

Los enlaces a los algoritmos hechos en pseudocódigo con PSeInt son:

Si quieres estar al tanto de las novedades y publicaciones de esta página web

Suscríbete

Comparte si quieres

TwitterFacebookLinkedInWhatsApp

A V I S O

Hola, si sueles venir por aquí sabrás que desde el 2 de marzo de 2020 no he parado de responder a peticiones de ayuda para ejercicios de algoritmos en PSeint. Tengo que parar de hacerlo, al menos de momento, terminó el confinamiento por el Covid-19 y no me da la vida; he vuelto a trabajar y tengo que recuperar lo no trabajado, y además tengo un proyecto entre manos que no quiero desatender.

Aquí tienes un montón de ejemplos que te pueden servir de ayuda para resolver tu ejercicio. Si pulsas CTRL+F (buscar) y añades las palabras adecuadas puedes moverte por la página y encontrar lo que buscas.

Aún me queda por responder algunos comentarios y lo haré. Pero a partir de hoy (14 de Junio de 2020) desactivo los comentarios temporalmente, porque no voy a poder atenderlos, y tampoco contestaré a peticiones de ayuda que me lleguen al correo electrónico o redes sociales y que consistan en realizar ejercicios, no me importará ponerte un enlace a algún ejercicio que ya esté hecho y que crea que es similar y pueda ayudarte, pero poco más.

Lo siento, yo también estoy aprendiendo e intento ganarme la vida con esto.

El que aprende y aprende y no practica lo que sabe, es como el que ara y ara y no siembra.- (Platón)