FUNCIÓN FACTORIAL INITE, S.C. no es responsable del contenido, de la veracidad de los datos, opiniones y acontecimientos vertidos en el presente caso práctico. La finalidad del presente es el desarrollo de competencias y es un material para discusión con efectos didácticos. Instituto Internacional de Investigación de Tecnología Educativa
Problema: Función factorial. Metodología de aprendizaje basado en problemas El aprendizaje basado en problemas (ABPr) es una metodología didáctica en la cual los alumnos se enfrentan a un problema o situación que deben resolver. A diferencia de la enseñanza tradicional, que culmina en un problema después de la instrucción básica sobre hechos y habilidades, el ABPr inicia con un problema, en el que los hechos y habilidades se enseñan en un contexto relevante. Mediante esta metodología de aprendizaje se solicita a los estudiantes que, individualmente o en grupos de trabajo, aborden de forma ordenada y con un trabajo coordinado, las diferentes fases para la resolución o desarrollo del trabajo en torno a la situación. El ABPr se refiere a la resolución de situaciones del mundo real de una manera estructurada. El énfasis se da a la construcción del conocimiento (y no meramente a su recepción), por lo que el papel del profesor cambia, de ser proveedor de conocimientos a guía y facilitador del aprendizaje, y el rol del alumno cambia de receptor de información a investigador activo. El tipo de problemas que se usan para desarrollar el ABPr, son problemas complejos y ambiguos, que no tienen una respuesta prefigurada y única. A este tipo de problemas se les suele denominar problemas no estructurados. En la literatura del ABPr el término no estructurado se usa para describir situaciones que pueden tener múltiples soluciones y que requieren que los estudiantes revisen varias alternativas antes de decidirse por una solución particular. Modelo general del ABPr Proceso Los estudiantes leen y conocen el problema. Los estudiantes discuten y analizan el problema usando su conocimiento previo y los recursos disponibles. El profesor plantea preguntas, por ejemplo: se necesita más información? están seguros de los hechos o será necesaria una revisión? piensan que será útil más información? El profesor promueve que las hipótesis estén científicamente sustentadas. Propósito Enseñar a los estudiantes cómo organizar la información de una manera útil. Permite a los estudiantes encontrar lo que conocen y lo que no conocen. Los conceptos erróneos pueden ser corregidos en la discusión del problema. Imita el contexto de la vida real, con el cual los alumnos se encontrarán como profesionistas. Desarrollo de habilidades cognitivas para el proceso de solución de problemas. Desarrollo de habilidades de automonitoreo para identificar las necesidades de aprendizaje. Desarrollo del hábito para que sea el estudiante quien inicie los cuestionamientos. Problema: Función factorial. 2
Características de los buenos problemas Un problema efectivo debe enganchar el interés de los estudiantes y motivarlos a profundizar la información requerida para resolverlo. Los buenos problemas requieren que los estudiantes tomen decisiones o emitan juicios sustentados en los hechos, la información, la lógica o la racionalización. Se pide a los estudiantes que justifiquen todas las decisiones y razonamientos, basándose en los principios que están aprendiendo. Que definan los supuestos que se necesitan, qué información es relevante y qué etapas y procedimientos se requieren para resolver el problema. La cooperación de todos los miembros del grupo es necesaria para resolver el problema efectivamente y para que no apliqué el proverbio de divide y vencerás. Por ejemplo, si el problema consiste de una serie ordenada de preguntas del tipo fin del capítulo los miembros del grupo podrán asignar una cuota a cada uno para posteriormente reunirlas para la entrega. Las preguntas iniciales del problema deben tener una o más de las siguientes características: Un final abierto, no limitado a una sola respuesta correcta. Relación con el aprendizaje previo. Temas controversiales que provoquen diversas opiniones. Esta estrategia sirve para que los estudiantes funcionen como un grupo, intercambiando ideas y conocimientos. Los objetivos de contenido del curso deberán incorporarse a los problemas, conectando el conocimiento previo con los nuevos conceptos y conectando el nuevo conocimiento con conceptos de otros cursos. La selección de los problemas determina el éxito del curso. Existe una variedad de fuentes que se pueden usar para identificar el contenido del problema. Entre éstas se encuentran los artículos en las revistas especializadas, películas, novelas, problemas de la comunidad, historias de casos y demás. Problema: Función factorial. 3
Protocolo para la elaboración de problemas Apartado Elemento Descripción del contenido Datos generales Datos curriculares (Se sugiere tomar en cuenta estos datos para diseñar los contenidos del problema) Datos de elaboración Título del problema Descripción (Resumen, sumario del proyecto) Materia Asignatura para las cual está diseñado este recurso. Carrera Carrera en la cual se imparte la asignatura. Relación con otras asignaturas. Asignaturas vinculadas (precedentes, consecuentes o vinculadas). Tema o áreas temáticas Temas o áreas temáticas vinculadas (precedentes, consecuentes o vinculadas). Palabras clave Palabras asociadas directamente con el desarrollo del problema. Colaborador Nombre del redactor del problema. Fecha de creación Ciclo en el que se incorpora al sistema. Función factorial Implementar la función factorial en lenguaje de programación C. La función a implementar debe estar en forma recursiva. Matemáticas discretas Ingeniería en sistemas computacionales Materia antecedente: Arquitectura de computadoras. Materia consecuente: Diseño digital. Ciencias, informática Relaciones, funciones, sucesiones, lógica, inducción matemática, definición recursiva y relaciones recursivas. Roberto Miranda Morales Ciclo 09-1. Problema: Función factorial. 4
Desarrollo del problema Introducción Al desarrollar una aplicación o herramienta computacional, independientemente del paradigma de programación que se use en ésta, siempre involucran en su desarrollo módulos que la constituyen; estos módulos pueden agruparse en bibliotecas o incluirse en el programa principal de la aplicación; en cualquier caso, pueden ser tratados como funciones o procedimientos, o métodos si se trata de programación orientada a objetos. Si el módulo puede ser representado como una función, entonces éste tiene todas las propiedades matemáticas de ésta. En este problema se va a implementar una aplicación, que dado un número natural, calcule el factorial de este número, para lo cual se va a desarrollar un módulo que represente la función factorial, la cual se define como: Factorial: N N Factorial(n) = n (n 1)(n 2) (2)(1) El resultado obtenido por la función factorial se denota como: n!, pero este número puede definirse en forma recursiva como: n! = n (n 1)! Implementar la función factorial es sencillo, parte del código principal es el siguiente: x=1; for(i=1; i n; i++) x= x*i; Pero la implementación anterior no corresponde a una forma natural de la función factorial en su forma recursiva. El objetivo del problema es implementar la función factorial en lenguaje de programación C. La implementación debe ser en forma recursiva. Desarrollo de la situación El factorial de un número natural n se define como: n! = n *(n 1)! Es decir, el factorial de n depende del factorial de n 1, el cual a su vez depende del factorial de n 2. Siguiendo este análisis llegaremos a que en última instancia, el factorial de un número natural depende del factorial de 1 el cual es: Pero cuál es el factorial de 0? 1! = 0! Problema: Función factorial. 5
Es importante conocer el factorial de 0, porque este número será la condición de salida de la función factorial que se ha de implementar. Las condiciones de salida dependen a su vez del valor lógico de su argumento, por lo que en el desarrollo del programa deberán aplicarse operaciones sobre proposiciones lógicas. Con las observaciones anteriores y con la definición recursiva de la función factorial, el pseudocódigo de la función queda de la siguiente manera: Función factorial(n) Si n es igual a 0 o n es igual a 1, entonces la función regresa el valor 1 Si n es mayor que 1, entonces la función regresa el valor n *factorial(n 1) Fin de la función. El pseudocódigo anterior corresponde a una función recursiva ya que el factorial de n depende en forma recursiva del factorial de n 1, por lo que el pseudocódigo anterior corresponde en forma natural a la definición recursiva de la función factorial. Lo que queda por hacer es implementar la función en el lenguaje de programación C, para lo cual debes conocer la sintaxis básica del lenguaje, en particular cómo se declaran funciones y cómo funciona el condicional if. Nótese que en el pseudocódigo se incluyen dos proposiciones lógicas, las cuales se deben representar en términos de proposiciones simples y conectivos lógicos para que después halles su representación en el lenguaje C. El programa deberá tener un solo módulo, el que implemente la función, además del módulo main() que llamará al módulo que implementa la función. Planteamiento de preguntas 1. Cuál es el factorial de 0? 2. Qué tipo de conectores lógicos se emplean en el desarrollo del programa? 3. En qué línea del pseudocódigo se halla la parte recursiva del programa? 4. Cómo sería el programa de la misma función pero en forma no recursiva? 5. Qué ventajas tiene el programa en forma recursiva respecto del programa no recursivo? 6. Qué otras funciones recursivas en matemáticas discretas conoces? 7. Cuál es la sucesión que corresponde al factorial de un número natural n? 8. Qué herramienta matemática usarías para demostrar que el programa que has realizado es correcto? 9. Cuál es el orden de complejidad de la función n!? Problema: Función factorial. 6