Está en la página 1de 11

Instituto Politécnico

Nacional
Escuela Superior de Cómputo

Departamento de Ciencias e Ingeniería de la


Computación

Paradigmas de Programación

Profesor: Miguel Ángel Rodríguez Castillo


Grupo:3CV2
Práctica 1: Programación funcional
Equipo:
•Enriquez Ballesteros Daniela Montserrat
•Flores Sánchez Diego de Jesús

Fecha de entrega: 19/03/2021


Objetivo: Aplicar los conocimientos adquiridos para el
desarrollo de programas en los paradigmas imperativo y
declarativo, a fin de comprender los elementos básicos de los
paradigmas de programación, utilizando las buenas prácticas de
programación en el diseño, implementación, pruebas y
depuración de estos.
Antes de comenzar
Para esta práctica, se ha programado un menú en donde las
opciones contienen el procedimiento y la solución de cada
ejercicio.
Entrada: Se recibe un dato de tipo entero por parte del usuario
Proceso: La estructura de control “switch” se encargará de dirigir al
usuario según su opción:
Caso 1: Lo enviará al método ContarenListaDeclarativo(); y posteriormente
a ContarenListaImperativo(); (correspondientes al ejercicio 1).
Caso 2: Lo enviará al método BuscarRedDeclarativo(); y posteriormente a
BuscarRedImperativo(); (correspondientes al ejercicio 2).
Caso 3: Lo enviará al método ModuloDeclarativo(); y posteriormente a
ModuloImperativo(); (correspondientes al ejercicio 3).
Caso 4: dado la condición del do-while(opcion!=4) el programa terminará
Default: Imprimirá el mensaje “su opción no es válida”, en caso de que el
parámetro enviado por el usuario no recaiga en los casos anteriores.

Ejercicio 1
Planteamiento del problema: Se deberá realizar un programa
para conocer la cantidad de elementos mayores a 10, para ello
se utiliza la librería java.util.List (ubicada en la línea 8 del
programa).
Solución imperativa
Entrada: Una lista de enteros con números aleatorias
Proceso: el ciclo (for), pasa por los valores de la lista verificando si cada
uno de los valores son mayores al número 10, y si es el caso, aumenta en
uno al contador.
Salida: se imprime el número de cantidades superiores a 10 en la lista
Implementación de la solución:
Solución declarativa
Entrada: Una lista de enteros con números aleatorias
Proceso: Se declarará una variable de tipo Long llamada result que
almacenará el resultado de pasar a la lista numeros por .stream().filter(num
-> num>10).count(); que devolverá la cantidad de números superiores a 10
Salida: se imprime la variable result que contiene los números mayores a
10 de la lista.
Implementación de la solución:

Ejercicio 2
Planteamiento del problema: Encontrar una lista de colores si
tenemos el color red, para ello nuevamente se utilizará la
librería java.util.List (ubicada en la línea 8 del programa).
Solución imperativa
Entrada: se recibe una lista de cadenas que contiene diferentes colores.
Proceso: el ciclo (for) nos ayuda a recorrer las posiciones de la lista, un
condicional (if) nos ayuda a buscar si alguna posición de la lista contiene la
palabra “red”, si es verdad, cambia a la declaración de booleana a true, si
no, la mantiene en false.
Salida: Imprime al usuario la expresión booleana resultado del proceso.
Implementación de la solución:
Solución declarativa
Entrada: se recibe una lista de cadenas que contiene diferentes colores.
Proceso: Verifica si el color red está en la lista a través de la función
colores.contains(“red”);
Salida: Imprime al usuario la expresión booleana resultado del proceso.
Implementación de la solución:

Ejercicio 3
Planteamiento del problema: Programar el cálculo del módulo
en base 2
Solución declarativa
Entrada: se recibe un valor entero definido por el usuario
Proceso: Se envía a la función Math.floorMod el valor previamente
introducido por el usuario.
Salida: Se imprime el módulo del valor proporcionado por el usuario
utilizando la función Math.floorMod.
Implementación de la solución:

Solución imperativa
Entrada: se recibe un valor entero definido por el usuario
Proceso: Se calcula el módulo base 2 con el operador, quedando como
número del usuario%2.
Salida: Se imprime el módulo del valor proporcionado por el usuario
Implementación de la solución:

Funcionamiento de los ejercicios:


Ejercicio 1
Prueba de escritorio de la solución imperativa:
List<Integer>numeros=List.of (18,5.4.14.13.16.12)
numero contador
18 1
5 1
4 1
14 2
13 3
16 4
12 5

Prueba de escritorio de la solución declarativa:


List<Integer>numeros=List.of (18,5.4.14.13.16.12)
numeros.stream().filter(num -> result
num>10).count();
18 1

5 1
4 1
14 2
13 3
16 4
12 return 5
Resultados de salida:

Ejercicio 2
Prueba de escritorio de la solución imperativa:
List<String>colores=List.of (“Green”, ”Red”, “Orange”, “Violet”, ”Pink”, ”Gray”)
String Color Boolean i

Green False

Red True
Orange True
Violet True
Pink True
Gray True

Prueba de escritorio de la solución declarativa:


List<String>colores=List.of (“Green”, ”Red”, “Orange”, “Violet”, ”Pink”, ”Gray”)
Colores Colores.contains(red)

Green False

Red return True


Resultados de salida:

Ejercicio 3
Pruebas de escritorio de la solución imperativa:
Cuando a = 5
Solución Imperativa
a Operación Salida
- a%2 *Introduzca un número*
5 5%2 -
5 1 El modulo base 2 es 1

Resultados de salida:

Cuando a = 16
Solución Imperativa
a Operación Salida
- a%2 *Introduzca un número*
16 16%2 -
16 0 El modulo base 2 es 0

Resultados de salida:
Pruebas de escritorio de la solución declarativa:
Cuando a=5
Solución Declarativa
a Operación Salida
Math.floorMod(x,2)
- Math.floorMod(x,2) *Introduzca un número*
5 Math.floorMod(5,2) -
5 1 El modulo base 2 es 1

Resultados de salida:

Cuando a=16
Solución Declarativa
a Operación Salida
Math.floorMod(x,2)
- Math.floorMod(x,2) *Introduzca un número*
16 Math.floorMod(16,2) -
16 0 El modulo base 2 es 0

Resultados de salida:
Conclusiones:
Para los ejercicios realizados en esta práctica, se han utilizado los
conceptos de programación imperativa y declarativa, los cuáles
son paradigmas de la programación que ya hemos visto en clase.

Programación imperativa:
Es un paradigma de programación que describe la programación
en términos del estado del programa y sentencias que cambian
dicho estado. Los programas imperativos son un conjunto de
instrucciones que le indican al computador cómo realizar una
tarea.
Programación declarativa:
Radica en la descripción del resultado final que se busca. Por lo
tanto, en primera línea se encuentra el “qué” del resultado y no el
“cómo” de los pasos que llevan a la solución, como es el caso en
la programación imperativa. Esto provoca que el código de la
programación declarativa sea más difícil de comprender debido
al alto grado de abstracción, aunque resulta muy corto y preciso.
Identificando los conceptos de los criterios utilizados, se
presentaron complicaciones al momento de programar cada
ejercicio para su programación imperativa, o declarativa. Un
ejemplo es que el operador que se desarrolló en el programa era
considerado por nosotros como “declarativo”.
Se debe seguir practicando y programando en este nuevo lenguaje
para nosotros, ya que no habíamos tenido la oportunidad de
realizar algún tipo de programación y este lenguaje es
desconocido para nosotros. Como solución hemos recurrido a
algunos cursos de Java, videos y/o páginas web en donde se
explica alguna función o fundamento en Java, así como consultar
dudas o reforzar conocimiento de este lenguaje con ayuda de
compañeros de la clase.
Para el ejercicio 3, tuvimos que investigar a detalle para encontrar
la solución de este. Aplicamos el concepto de paradigma
funcional para relacionar la solución del ejercicio con las
alternativas presentes, por lo que se describe a continuación
brevemente que el concepto.
Programación funcional:
La programación funcional es un paradigma declarativo. Nos
enfocaremos en "qué" estamos haciendo y no en "cómo" se está haciendo
que fuera el enfoque imperativo. Esto quiere decir que nosotros
expresaremos nuestra lógica sin describir controles de flujo; no usaremos
ciclos o condicionales.
Aún se deben seguir mejorando aspectos para comenzar a
dominar las herramientas, funciones, librerías y operaciones que
este lenguaje, desconocido para nosotros, nos pueda ofrecer. Nos
hemos quedado satisfechos con el trabajo que hemos realizado
en el desarrollo de esta práctica, sabiendo nuestros errores y el
cómo solucionarlos, así como en mejorar o reforzar los aspectos
o cualidades que hemos adquirido hasta el momento.
Bibliografía
1.- 1&1 IONOS España S.L.U. (2021, 18 febrero). Paradigmas de
programación. IONOS Digitalguide.
https://www.ionos.es/digitalguide/paginas-web/desarrollo-
web/paradigmas-de-programacion/
2.- Corvo, H. S. (2020b, marzo 19). Programación funcional:
características, ejemplos, ventajas, desventajas. Lifeder.
https://www.lifeder.com/programacion-funcional/
3.- Picand, Y. D. D. (2013). Programación imperativa : definición
de Programación imperativa y sinónimos de Programación
imperativa (español). sensagent - 2005-2015.
http://diccionario.sensagent.com/Programaci%C3%B3n%20imper
ativa/es-
es/#:%7E:text=La%20programaci%C3%B3n%20imperativa,%20en%
20contraposici%C3%B3n%20a%20la%20programaci%C3%B3n,le%2
0indican%20al%20computador%20c%C3%B3mo%20realizar%20un
a%20tarea.

También podría gustarte