Todas las entradas de Marcos Antonio León Fonseca

10Feb/20

Ventajas y desventajas del Software libre para su implementación en la escuela cubana.

Universidad de Granma.

Ventajas y desventajas del Software libre para su implementación en la escuela cubana.

Autores: MSc. Marcos Antonio León Fonseca. ([email protected])

    MSc. Noralys Muñiz Maldonado. ([email protected])

Resumen

En este artículo los autores describen de forma breve algunas características propias que brinda el Software libre (GNU/Linux) que podrían ser explotadas en la Educación: GNU/Linux es desarrollado por la comunidad. Al ser GNU/Linux SL, entonces se puede compartir o distribuir cualquier software según se necesite. Se potenciará la formación de una comunidad, en la cual participen profesionales de la Educación de las diversas especialidades y con diferentes niveles de preparación, donde un conjunto pueda, por sus conocimientos informáticos, desarrollar una plataforma de desarrollo de materiales educativos, y otros, el desarrollo de los materiales educativos propiamente, con lo que se establecería una estrecha comunicación entre todos, y donde el papel de cada uno estaría dado por sus capacidades de aportar a la comunidad. Que se cumplan las palabras de Dennis Ritchie: “Esto es una familia, es gente que se ayuda y lo único que pide es ayuda”.

Introducción.

En el mundo actual, los centros educacionales tienen grandes limitaciones presupuestarias, en especial, la Educación Pública, lo que conlleva a que no siempre se pueda contar con los recursos financieros para poder adquirir el equipamiento informático necesario, tanto de hardware como de software. Al realizar un simple análisis, salta a la vista que el desembolso que sería necesario realizar para pagar las licencias del software que se requiere en estas instituciones casi es el mismo que habría de realizarse para comprar las PC.

Por tal motivo el Sistema Nacional de Educación se apresta a realizar grandes cambios en el uso de la Informática, en tanto se propone cambiar la plataforma oficial de trabajo del actualmente utilizado Sistema Operativo Microsoft Windows hacia GNU/Linux, basado en los estándares de lo  que se conoce como Software Libre.

Por tales razones se hace necesaria la implementación de políticas, estrategias que permitan elevar el nivel de conocimientos de los docentes para el trabajo con el nuevo Sistema Operativo.

GNU/Linux presenta dos características que lo convierten en una clara opción para el sector educacional: la primera está dada por la posibilidad que tiene de ser instalado en una PC con un rendimiento mucho más bajo que el que sería necesario tener para poder instalar un SO como Windows y la segunda característica está dada por el costo del SO, GNU/Linux es libre, que en este caso, viéndolo desde la perspectiva del costo, equivale a que no se debe de realizar ninguna inversión monetaria para obtenerlo

Desarrollo

GNU/Linux posee varias ventajas que pueden ser utilizadas por el Sistema de  Educación como es la gran cantidad de software disponible. Independientemente de lo que se necesite, se puede contar con encontrar un desarrollo que cumpla al menos los requisitos mínimos para lo que se desee. Además, en el caso particular de la Informática, como objeto de estudio GNU/Linux brinda la posibilidad de poder contar con el código fuente.

Ventajas

  • Bajo costo de adquisición y libre uso.

El software, como mercadería por lo general no está  a la venta. Lo que el usuario adquiere, a través de una erogación monetaria o sin ella, es una licencia respecto de los usos que puede dar a los programas en cuestión. El software no solo cuesta un precio de adquisición de licencia. También cuesta mantenerlo, operarlo, ajustarlo. Es importante para el usuario el poder mantener estos costos bajo control, pues de lo contrario puede llegar a verse impedido de llevar a cabo sus metas, a fuerza de erogaciones no planificadas. El usuario que adquiere software libre lo hace sin ninguna erogación monetaria o a muy bajo costo y ofrece un conjunto de recursos muy amplios. Cualquier persona con una computadora y una conexión a Internet puede utilizar un software libre. Para la mayoría de los usuarios individuales el software libre es una opción atractiva por las libertades que garantiza sin necesidad de verse agobiados por el precio. Sin embargo, en el caso de empresas y la Administración Publica, el costo del software es un factor importante y a veces determinante en la elección de nuevos sistemas informáticos.

  • Innovación tecnológica.

El software libre, tiene como objetivo principal compartir la información, trabajando de manera cooperativa. Este es principalmente el modelo sobre el que la humanidad ha innovado y avanzado. La ideología de los defensores del software libre, es que el conocimiento le pertenece a la humanidad. Por lo tanto, los usuarios tienen un destacado papel al influir decisivamente en la dirección hacía donde evolucionan los  programas: votando los errores que quieren que sean corregidos, proponiendo nueva funcionalidad al programa, o contribuyendo ellos mismos en el desarrollo del software (a finales del año 2004 se publicó una lista de las innovaciones más importantes en software del año 2004. Se considera  como innovación número uno el navegador libre FireFox y de los diez programas mencionados también se encontraba OpenOffice.org.).

  • Requisitos de hardware menores y durabilidad de las soluciones.

Aunque resulta imposible generalizar, sí existen casos documentados que demuestran que las soluciones de software libre tienen unos requisitos de hardware menor, y por lo tanto son más baratas de implementar. Por ejemplo, los sistemas Linux que actúan de servidores pueden ser utiliza dos sin la interfaz gráfica, con la consecuente reducción de requisitos de hardware necesarios.  También es importante destacar que en el software propietario el autor puede decidir en un momento dado no continuar el proyecto para una cierta plataforma, para un hardware que considera antiguo, o descontinuar el soporte para una versión de su software.

En las aplicaciones de software libre, estas decisiones no pueden ser tomadas por una empresa o individuo sino por toda una comunidad, con diferentes intereses. Lo que se traduce en un mejor soporte de manera general para las versiones antiguas de software y de plataformas de hardware o software más minoritarias.

  • Escrutinio público.

El modelo de desarrollo de software libre sigue un método a través de la cual trabajan de forma cooperativa los programadores que en gran parte son voluntarios y trabajan coordinadamente en Internet. Lógicamente, el código fuente del programa está a la vista de todo el mundo, y son frecuentes los casos en que se reportan errores que alguien ha descubierto leyendo o trabajando con ese código.

El proceso de revisión pública al que está sometido el desarrollo del software libre imprime un gran dinamismo al proceso de corrección de errores. Los usuarios del programa de todo el mundo, gracias a que disponen del código fuente de dicho programa, pueden detectar sus posibles errores, corregirlos y contribuir a su desarrollo con sus mejoras. Son comunes los casos en que un error de seguridad en Linux se hace público y con él la solución al mismo. Con el software propietario la solución de los errores no llega hasta que el fabricante del programa puede asignar los recursos necesarios para solventar el problema y publicar la solución.

Estas son un grupo de ventajas que creemos que pudieran ser las más importantes, pero existen muchas otras.

Desventajas

  • 1. La curva de aprendizaje es mayor.

Si ponemos a dos señoras que nunca han tocado una computadora, probablemente tardarán lo mismo en aprender a usar software propietario por ejemplo de Microsoft, que software libre como Gnome o KDE; pero si antes los usuarios ya usaron software propietario generalmente tarda más en aprender a usar un software libre.

  • 2. El software libre no tiene garantía proveniente del autor.
  • 3. La mayoría de la configuración de hardware no es intuitiva.

Se requieren conocimientos previos acerca del funcionamiento del sistema operativo y fundamentos del equipo a conectar para lograr un funcionamiento adecuado. Sin embargo la documentación referente a la configuración del hardware es tan explícita y detallada que permite al usuario neófito profundizar en el conocimiento de su hardware en muy pocas horas y una vez teniendo ese conocimiento la configuración se vuelve trivial.

  • 4. La diversidad de distribuciones, métodos de empaquetamiento, licencias de uso, herramientas con un mismo fin, etc.

Pueden crear confusión en cierto número de personas. Hay quienes ven esto como una fortaleza porque se pueden encontrar desde distribuciones especializadas en sistemas embebidos con muchas limitantes de almacenamiento y dispositivos periféricos de uso especializado hasta distribuciones optimizadas para su uso en servidores de alto rendimiento con varios procesadores y gran capacidad de almacenamiento; pasando por las distribuciones diseñadas para su uso en computadoras de escritorio y entre las cuales se encuentran las diseñadas para el usuario neófito que son muy fáciles de instalar y utilizar y las diseñadas para el usuario avanzado con todas las herramientas necesarias para explotar el software libre en todo su potencial. Cabe notar que la posibilidad de crear distribuciones completamente a la medida para atacar situaciones muy específicas es una ventaja que muy pocas marcas de software propietario pueden ofrecer y que Microsoft ha sido completamente incapaz de hacer.

Estas son las desventajas que más de cerca nos golpean. Pero existen algunas otras que usted pudiera estar pensando ahora mismo que también pudiéramos sumarla al listado.

Comparación entre Windows y GNU/Linux

La rivalidad entre los sistemas operativos existe desde hace muchos años. Desde la existencia de UNIX y MS-DOS, hace ya más de 20 años. Sin embargo no fue hasta el surgimiento de dos modelos diferentes – software libre y software propietario – que las contiendas entre sus máximos exponentes (GNU/GNU/Linux y Windows respectivamente) se hicieron propias de leyendas.

Existen muchos términos por los cuales valorar la superioridad de un sistema operativo sobre otro. Algunos son más rápidos por el propio modelo sobre el cual están construidos, y otros solo se diferencian en el precio bajo el cual se comercializan. Hacerse un criterio depende todo el tiempo del estudio con que se haga, y que necesitamos. Es bueno revisar cada elemento por separado y definir muy bien, no acomodándose a ninguno en específico, ya sea por comodidad o cualquier otra razón.

Criterios para comparar dos sistemas operativos, de manera general, son:

Estabilidad

Aunque existen en GNU/Linux lo que se conoce como versiones inestables, no significa que este sistema operativo lo es en verdad, sino que los software que están en desarrollo son puestos en público para que puedan también ser usadas las mejoras que se están introduciendo por cualquiera de los usuarios.

Estabilidad: GNU/Linux tiene la experiencia de un cuarto de siglo de los sistemas Unix. Tal como IBM lo dice, “GNU/Linux es estable, funcional y ofrece gran valor. Al igual que los sistemas Unix propietarios y mainframes, GNU/Linux es muy estable”. El modelo de OpenSource de GNU/Linux asegura que los bugs sean detectados y corregidos rápidamente.

En Windows se conocen las versiones “alfas” que son las primeras versiones de un sistema operativo Windows, y generalmente tienen muchos fallos. El hecho de que el código sea cerrado impide que la primera persona en encontrar un error pueda arreglarlo, solo puede reportarlo. Una gran diferencia con cualquiera de las distribuciones de GNU/Linux.

Esto mismo sucede con aplicaciones importantes dentro del sistema operativo, como es el caso del navegador Internet Explorer.

Eliminación de procesos: Algo similar ocurre cuando intentamos eliminar un proceso en Windows, muchas veces el sistema está sobrecargado y no permite hacer más nada, cuando ha fallado una aplicación. En GNU/Linux existen varias formas de eliminar los procesos, ya sea ejecutando comandos o en el shell.

Seguridad

En julio del 2006 una de las compañías internacionales de seguridad informática detectó el virus 200 000. Y predijo que en dos años más esta cifra crecería a 400 000. Esa compañía es McAfee. Solo en el 2005 se detectaron 11 000 virus para Windows, y solo unos 450 para GNU/Linux.

Una de las dificultades de usar Windows radica en su vulnerabilidad a los virus. La forma en que está hecho hace que sea débil y muy penetrable. Además la fama de la compañía de Microsoft de hacer trampas a otras compañías ha hecho que tenga muchos enemigos que se dedican a construir virus para este sistema. Aunque existen muchos antivirus para Windows nunca es suficiente, la instalación de estos muchas veces es complicada, hace correr más lenta la máquina y son muy caros.

GNU/Linux en cambio a lo largo de 20 años se conocen solo una docena de ellos. Veamos porqué.

  • Tradicionalmente los programadores y usuarios de sistemas basados en Unix/BSD han considerado la seguridad como una prioridad por lo que hay mayores medidas frente a virus tales como la necesidad de autenticación por parte del usuario como administrador o root para poder instalar cualquier programa adicional al sistema.
  • Los directorios o carpetas que contienen los archivos vitales del sistema operativo cuentan con permisos especiales de acceso por lo que no cualquier usuario y/o programa puede acceder fácilmente a ellos para modificarlos o borrarlos. Existe una jerarquía de permisos y accesos para los usuarios.
  • Relacionado al punto anterior, a diferencia de los usuarios de Windows, la mayoría de los usuarios de sistemas basados en Unix no inician sesiones como usuarios Administradores o root excepto para instalar o configurar software, dando como resultado que si incluso un usuario no administrador ejecuta un virus o algún software malicioso pues este no dañaría completamente el sistema operativo ya que Unix limita el entorno de ejecución a un espacio o directorio reservado llamado comúnmente home.
  • Estos sistemas son mucho menos populares y usados que Windows, razón que los hace menos atractivos para un desarrollo de virus o software malicioso.

Vale destacar que también existen antivirus para GNU/Linux, ejemplo: ClamAV. Por todas las razones explicadas es que la gran parte de los servidores en el mundo usan GNU/Linux, incluso en la propia compañía Microsoft. Otros utilizan UNIX que es rápido y seguro.

Costo:

En Software Libre es gratuito en su gran mayoría. Se puede ganar dinero vendiendo discos, o dando soporte técnico, pero el software es gratuito generalmente. Existen muchas compañías de GNU/Linux que realizan software bajo licencias comerciales, de hecho el movimiento OpenSource valida esta forma de hacer negocios. Siempre en cualquiera de los casos es mucho más barato que cualquier SW propietario.

Evaluemos que ocurre del otro lado en Windows la edición para el hogar cuesta $199. Y la edición Profesional $299. Muchos de los software que se usan a diario son muy caros, y se pagan independiente al sistema operativo, es el caso de: Photoshop ($449), el Dreamweaver ($999), etc. Al mismo tiempo cada actualización de un software puede costar un gran % de dinero. Así por ejemplo si sale al mercado un Dreamweaver nuevo, y usted desea usarlo, y ya había pagado el anterior puede necesitar más de 200 dólares para adquirir la nueva versión.

En Cuba por excepción, y debido al bloqueo norteamericano, no se paga ningún sofware de Microsoft, o sea del sistema operativo Windows. Es por ello que a las escuelas no cuesta, si fuera esta una realidad diferente se hace necesario pagar cada software que usamos, en materia de costo es fácil entender la diferencia con GNU/Linux, si se usara esta no hay necesidad de pagarla.

Otros criterios para hacer una comparación.

Facilidad de Instalación

Una de las mayores ventajas de Windows sobre GNU/Linux es su facilidad para ser instalado. Sin embargo esto dejó de ser una realidad hace un par de años desde que aparecieron los instaladores gráficos de Suse 9.2, Fedora, Mandrake. La última versión de Ubuntu (que está basada en Debian pero más orientada al usuario) permite instalarse con pocos pasos.

Disponibilidad de Software

Al tener mayores posibilidades comerciales algunos apuntan a que la cantidad de software disponible para Windows es mayor. Sin embargo la posibilidad del desarrollo social y colectivo, y la apuesta que han hecho algunas grandes y pequeñas empresas ha hecho que hoy en día se puedan encontrar enormes cantidades de software para GNU/Linux. Así por ejemplo Debian tiene más de 15 000 paquetes.

Vale destacar algunos nombres de aplicaciones importantes alternativas en GNU/Linux: Gimp para el diseño; Firefox, navegador Web, etc. También existen los emuladores que son programas que permiten correr programas de Windows sobre Linux. Estos son muy usados para correr sobre todo Juegos de computadora.

Soporte y mantenimiento de versiones

Una de las ventajas de GNU/Linux es la forma en la que está estructurado el mantenimiento de las aplicaciones, y las versiones de cada software.

En cuanto a las aplicaciones algo que suele ser vital, la existencia de muchos programas que tienen iguales funcionalidades y que consumen menos memoria RAM y por lo tanto son más rápidos. En el caso de las aplicaciones de GNU/Linux por concepto todas pueden ser ejecutadas en cualquier entorno gráfico.

Algo que influye en el rendimiento es la no existencia de virus, y por lo tanto el poco uso de antivirus y recursos hace que el sistema GNU/Linux sea más rápido que Windows y rinda más.

Facilidad para instalar aplicaciones

En el caso de Debian es muy interesante la existencia del Synaptic que es un software para instalar aplicaciones. Algo en lo que Windows saca ventajas a GNU/Linux. Sin embargo a pesar de cada día esta diferencia es menor, en el caso de Windows después de instalado la mayoría de las veces debemos reiniciar la PC para disponer del Software, algo que no es necesario en GNU/Linux, y que permite ahorrar mucho tiempo.

En GNU/Linux existen además los repositorios que son servidores de todas las aplicaciones existentes para una distribución. No hace falta tener el disco de una herramienta para instalarla, y si lo queremos para llevar a casa también puede ser personalizable en un CD o varios.

Tipo de Software

Quizás la mayor diferencia entre ambos sistemas operativos es el tipo de software que lo define generalmente la licencia. En el caso de Windows es software propietario, muy restrictivo. En el caso de GNU/Linux es un sistema libre, no necesariamente gratuito como se ha explicado ya, puede modificarse y expandirse a otros lugares, puede ser regalado a amigos y familiares sin problemas de ninguna índole.

Gestionar los proyectos, organizar grandes proyectos es una de las facilidades del software libre. Existen grandes comunidades, a diferencia de Windows, que desarrollan software y mantienen el software usado por GNU/Linux. Lo que permite muchas veces que tenga mayor calidad, y que exista una variedad mayor

Conclusiones

Se ha de considerar que el uso del software libre en la educación informática tiene muchas ventajas. Pero lo más importante no es simplemente cambiar en la docencia práctica un programa propietario por otro libre, sino cambiar el enfoque de la enseñanza. En lugar de enseñar los detalles del funcionamiento de un programa concreto, enseñar los fundamentos de un tipo de aplicaciones, qué tipo de cosas pueden hacerse con ellas, y cómo realizar tareas típicas utilizándolas. Si se hace este cambio de planteamiento, que es de por sí muy deseable, el paso al uso de programas libres será más fácil, y permitirá un proceso educativo mucho más productivo.

Finalmente se considera que los docentes que enseñan herramientas propietarias debe enseñar herramientas que permitan desarrollar y rechazar modelos que crean alumnos solo consumidores que es lo que quieren los dueños de esos modelos propietarios. Y a los alumnos en todos los niveles que sean capaces de aprovechar todas estas novedades.

Bibliografía

AGUILAR, Luis. Migration Planning for GNU / LINUX Desktop Adoption. http://GNU / LINUX.sys-con.com/read/48557.htm, 2005.

CHICO, J. J. ( 2002.). Guía de administración de Debian  GNU/Linux.  Versión 0.3. Libro Digital. Sitio Web GNU/Linux. Compendio Bibliográfico.

LESSIG, L. (2004). ““Introducción al libro “Software libre para una sociedad libre” de Richard  M. Stallman” “, en LESSIG, L.

Stallman, R. M. (2006). Manifiesto GNU. Disponible en: http://es.gnu.org.

10Feb/20

Algunas consideraciones metodológicas para el tratamiento del concepto tabla en la disciplina Sistemas de Aplicación

Algunas consideraciones metodológicas para el tratamiento del concepto tabla en la disciplina Sistemas de Aplicación.

Autores: MSc. Marcos Antonio León Fonseca. ([email protected])

    MSc. Noralys Muñiz Maldonado. ([email protected])

Resumen.

En este artículo se exponen algunas consideraciones metodológicas para el tratamiento del concepto tabla en la disciplina Sistemas de Aplicación. El mismo es el resultado del Proyecto  Científico Técnico no asociado “La utilización del Software Libre en las educaciones de Granma, una alternativa docente”.

Abstract.

In this article the metodológicas for the treatment of the concept expose some considerations themselves board in discipline Sistemas of Aplicación. The same the result of the correlated Project Científico Técnico is The utilization of Freeware in Granma’s educations, a teaching alternative.

Introducción.

La disciplina Sistemas de Aplicación para la carrera Licenciatura en Informática y Licenciatura en Educación Laboral- Informática está compuesta por las siguientes asignaturas:

  1. Sistema de Aplicación I.
  2. Sistema de Aplicación II
  3. Sistema de gestión de Base de datos I.
  4. Sistema de gestión de Bases de datos II.
  5. Páginas Web I.
  6. Páginas Web II.

Para el desarrollo exitoso de  cada una de las asignaturas que la componen, el colectivo de docentes encargados de impartirlas deben tener presente los vínculos existentes entre las diferentes asignaturas así como las formas regulares de la enseñanza de la informática para el tratamiento de los contenidos. En el caso particular de esta disciplina se deben tener presentes las siguientes: la formación de conceptos, la elaboración de procedimientos y la resolución de ejercicios y problemas.

Este artículo tiene como objetivo exponer algunas consideraciones metodológicas a tener presente por el colectivo de docentes que imparten las diferentes asignaturas que componen la disciplina Sistemas de Aplicación para el tratamiento del concepto tabla.

Desarrollo.

Consideraciones metodológicas para el tratamiento del concepto tabla en el tema “procesadores de textos.”

Precisiones iniciales:

  • Este concepto se retoma al iniciar el estudio de este contenido ya que los estudiantes poseen conocimientos acerca de qué es una tabla por haber sido utilizado en asignaturas recibidas desde la enseñanza primaria hasta el preuniversitario.
  • Debe ser ampliado a partir de las exigencias para su uso desde el punto de vista informático al tener en cuenta que:
    • A las columnas se hará referencia por las letras del alfabeto A, B, C … señalando que cuando se inserta el objeto tabla en un documento estas no se muestran encabezando las columnas de la tabla.
    • A las filas se hará referencia por los números naturales 1, 2, 3… señalando que cuando se inserta el objeto tabla en un documento estas no se muestran como etiquetas de filas.
    • Se introduce por vez primera el concepto de celda como la intercepción  de una columna con una fila.
    • Tipo de referencia permisible.
    • Se introduce el concepto de rango y los tipos de rangos permisibles. 
  •  Tipo de información que se pueden introducir en las celdas: 
    • Textos.
    • Números: enteros y decimales.
    • Imágenes.

Uso de las tablas en los procesadores de textos.

  1. Se utilizan con frecuencia para organizar y presentar información.
  2. Como hojas de cálculos con datos numéricos contenidos en una tabla o entre tablas, a partir del uso de las funciones suministradas por el sistema o construidas por los estudiantes.
  3. Para crear diseños de páginas agradables.
  4. Insertar información desde una base de datos u otro origen de datos distinto en un documento existente.

Los ejercicios que se propongan a los estudiantes deben estar en correspondencia con los diferentes usos de las tablas los cuales deben permitir lo siguiente:

  • Cuando se propongan ejercicios que requieran de cálculos deben crearse situaciones problémicas que permitan demostrar las limitaciones que tienen las tablas en los procesadores de textos para este fin y motivarlos para el estudio de las tablas a través de las hojas de cálculo, lo cual permitirá la ampliación del mismo.
  • Al proponer ejercicios que requieran del uso de datos externos (origen de datos de procesadores de textos, hojas de cálculos o bases de datos) se introducirá por vez primera el concepto de base de datos, campo, registro y consulta, lo cual permitirá ampliar el concepto al tener presente los conceptos de campo y registro y crear las condiciones para ser retomados a dar tratamiento al contenido correspondiente a las Bases de datos

Como se puede observar a través del análisis realizado anteriormente, desde que se inicia el estudio de este concepto  los docentes deben tener claridad de su trascendencia a través de la disciplina y no desaprovechar las potencialidades que ofrecen los procesadores de textos para dejar creadas las condiciones para su tratamiento en cada una de las asignaturas que componen la disciplina a partir de los elementos abordados, lo cual permitirá su posterior estudio de una forma más amena y dinámica, evitando repeticiones,  pérdida de tiempo y dar mayor posibilidad de participación de los estudiantes en la construcción de su propio conocimiento.

Consideraciones para el tratamiento del concepto tabla en el tema “hojas de cálculo”.

Al iniciar el estudio de las hojas de cálculo se debe retomar el concepto tabla para luego realizar algunas precisiones respecto a las etiquetas para referenciar las columnas y las filas y profundizar en el mismo en cuanto a:

  • Tipos de datos que se pueden introducir en las celdas.
  • Tipo de referencias: absolutas y relativas, diferencias y referencias tridimensionales.
  • Trabajo con funciones.
  • Filtrado de la información a partir del establecimiento de diferentes tipos de criterios de comparación.
  • Tablas dinámicas.

Consideraciones para el tratamiento del concepto tabla en el tema “presentaciones electrónicas.”

En esta aplicación el concepto tabla se retoma desde su forma más sencilla, es decir, como un objeto compuesto por filas y columnas para ser utilizado como un contenedor para organizar y presentar la información.

Consideraciones para el tratamiento del concepto tabla al realizar el estudio de las Bases de datos.

Al iniciar el estudio del objeto tabla en esta aplicación este concepto debe retomarse para ser reformulado a partir de la incorporación en el mismo de los elementos claves: registros y campos y profundizar en cuanto a los tipos de datos posibles a asignar a los campos y por ser el objeto fundamental para iniciar el proceso de creación de una base de datos, así como las diferentes formas para la creación de tablas.

Consideraciones para el tratamiento del concepto tabla al realizar el estudio de las Páginas Web.

Al iniciar el estudio correspondiente al diseño de páginas Web, se debe retomar el concepto tabla a partir de los elementos estructurales: columnas, filas y celda para ser utilizado en el diseño de las páginas antes de añadir contenido, para una mejor organización y presentación de la información.

Conclusiones.

Las consideraciones metodológicas realizadas en este artículo manifiestan la relevancia del concepto tabla a lo largo de la disciplina Sistemas de Aplicación.

Al tener en cuenta las relaciones existentes entre las asignaturas que componen la disciplina se facilita el aprendizaje de los estudiantes al poder trasmitir los conocimientos  debidamente articulados, superando la fragmentación del saber, a la vez que los capacita para hacer trasferencias de contenidos y aplicarlos en la solución de problemas nuevos.

Bibliografía.

Addine Fernández, F. (2004). Didáctica: teoría y práctica.

Benítez, G. (2003). Folleto docente de Microsoft Access (Vol. I).

Expósito Ricardo, C., & otros. Elementos de Metodología de la Enseñanza de la Informática.

Oceguera Martínez, S., & otros. (2009). Metodología de la Enseñanza. Ciudad de la Habana.

31Ene/18

Archivos de recursos y de configuración en Delphi

Archivos de recursos y de configuración en Delphi

Autores: MsC. Marcos Antonio León Fonseca.

MsC. Noralys Muñiz Maldonado.

MsC. Juan Antonio Fonseca Hernández

Resumen:

En este artículo el autor describe como se crean y utilizan en Delphi los archivos de recursos y de configuración.

Introducción:

Toda aplicación desarrollada con Delphi parte de un proyecto que puede estar compuesto de uno o más formularios (ventanas a partir de las cuales se construyen los programas), módulos de código (cuya finalidad es almacenar código que posteriormente será usado desde otros puntos de la aplicación), archivos de recursos (ficheros que contienen otros elementos usados por la aplicación que formarán parte del ejecutable), y archivos de configuración (ficheros que contienen valores que se usan en la configuración del programa), entre otros.

En este trabajo se describe como se crean y utilizan en Delphi los archivos de recursos y de configuración.

Desarrollo:

Ficheros de configuración (Ficheros Ini).

Por ficheros Ini se entiende todo fichero que tiene extensión Ini, está en formato ASCII y tiene una estructura interior dividida en secciones.

Dentro de cada sección hay valores que se usan en la configuración del programa que gestiona ese fichero. Los nombres de las secciones se indican entre corchetes, e inmediatamente van las variables con sus valores.

Ejemplo:

[Form]

Top = 185

Left = 280

Caption = ‘Ejemplo de uso de los ficheros Ini’

Los ficheros Ini se pueden abrir con el Bloc de Notas, aunque Windows, incluye un programa visor para ver los ficheros del sistema, que se llama SysEdit; si se ejecuta este programa se puede ver el contenido de los ficheros del sistema, entre ellos los de extensión Ini.

Para trabajar con los ficheros Ini, Delphi consta de la Unit IniFiles donde están definidas todas las funciones y los procedimientos necesarios para poder leer y escribir en estos ficheros.

Create (FileName) Para acceder a un fichero

ReadSecTionValues (Sección, Tstring) Lee todas las variables.

ReadSections (Tstring) Lee todas las secciones.

ReadSection (Tstring) Lee una sección

ReadString (Sección, Variable, Defecto) Lee una variable de tipo cadena.

ReadInteger (Sección, Variable, Defecto) Lee una variable de tipo entero

ReadBool (Sección, Variable, Defecto) Lee una variable de tipo boleano

WriteString (Sección, Variable, Valor) Escribe un valor de tipo cadena en una variable.

WriteInteger (Sección, Variable, Valor) Escribe un valor de tipo entero en una variable.

WriteBool (Sección, Variable, Valor) Escribe un valor de tipo boleano en una variable.

Ejemplo:

Incluya IniFiles en la cláusula Uses del formulario.

Var

MiFicheroIni : TIniFile;

begin

Archivo := ExtracFileDir (Paramstr (0) + ‘\Fichero.Ini’;

MiFicheroIni := TIniFile, Create (Archivo);

Form1.Left := MiFicheroIni.ReadInteger (‘Form’, ‘Left’, 0);

Form1.Top := MiFicheroIni.ReadInteger (‘Form’, ‘Top’, 0);

Form1.Caption := MiFicheroIni.ReadStribg (‘Form’, ‘Caption’, ‘Sin Título’);

MiFicheroIni.Free;

end;

En el procedimiento genérico anterior (se puede poner dentro de cualquier procedimiento), se crea una variable de tipo IniFile (MiFicheroIni) que se inicializa en la segunda línea indicando que el fichero con el que se va a trabajar se llama Fichero.Ini y que se encuentra en el mismo directorio en que se encuentra la aplicación.

En la primera línea se indica el nombre del fichero con la ruta completa ya que de no hacerlo se asume que este está en el directorio de Windows, y no donde se está ejecutando el programa.

En la tercera y cuarta línea se le asigna a las propiedades Left y Top del primer formulario los valores de las variables del mismo nombre que se encuentran en la sección Form del fichero Ini.

En la línea final se libera la variable creada, para que no ocupe memoria.

Nota: Cuando el fichero no se encuentra, este es creado.

Ficheros de recursos (Ficheros Res).

Los archivos de recursos tienen extensión Res y contienen elementos de la aplicación que no son ni controles, ni código (imágenes de mapas de bits, sonidos, cursores, iconos, etc).

En un archivo de recursos cada uno de los recursos existentes tiene asignado un identificador único que servirá posteriormente para referirnos a él en tiempo de ejecución.

Para crear un archivo de recursos se necesita un editor de recursos que permita editar los recursos en formato ASCII, siendo necesario posteriormente realizar una compilación para obtener los mismos en formato Res.

Para crear un archivo de recursos, se deben dar los siguientes pasos:

.

1. Se crea un fichero en un editor de textos (Bloc de Notas), por ejemplo:

Imagen Bitmap Dibujo.bmp

Sonido Wave Musica.wav

Puntero Cursor Lápiz.cur

Icono Icon Bandera.ico

Nota: Separe una columna de la otra utilizando la tecla TAB.

2. Se grava con extensión RC, por ejemplo Recursos.rc

3. Se compila el fichero creado, siguiendo los siguientes pasos:

    • Se ponen en el mismo directorio tanto las imágenes (Dibujo.bmp), sonidos (Musica.wav), cursores (Lápiz.cur) e iconos (Bandera.ico), como el fichero creado (recursos.rc).
    • Se activa el compilador BRC32 que se encuentra dentro del subdirectorio BIN del directorio de Delphi pasándole como parámetro el fichero creado (Recursos.rc).

BRC32.exe Recursos.rc

con lo que se generará el archivo de recurso Recursos.res

Para usar los recursos se que utilizan una serie de funciones especiales de Delphi.

Ejemplo:

Incluya MMSystem en la cláusula Uses del formulario y agregue la directiva {$R Recursos.res}

Coloque el siguiente código en el evento OnActivate del formulario

Conts

MiCursor = 5;

begin

PlaySound (PChar (‘Sonido’), Hinstance, SND_Resource Or SND_ASYNC);

Image1.Picture.Bitmap.Handle := LoadBitmap (Hinstance, ‘Imagen’);

Screen.Cursors [MiCursor] := LoadCursor (Hinstance, ‘Puntero’);

Screen.Cursor := MiCursor;

Application.Icon.Handle := LoadIcon (Hinstance, ‘Icono’);end;

En el procedimiento anterior, con la instrucción de la primera línea se escuchará el sonido y sin esperar a que este termine se le asignará, en la segunda línea, la imagen al control Image1.

En la tercera y cuarta línea se le asigna al puntero del mouse el cursor y en la quinta línea se le asigna el icono a la aplicación.

Si se desea que se espere a que termine el sonido para cargar la imagen entonces se deberá cambiar la primera línea por:

PlaySound (PChar (‘Sonido’), Hinstance, SND_Resource Or SND_SYNC);

Conclusiones:

  1. La utilización de archivos de recursos, en el desarrollo de aplicaciones, permite generar ficheros ejecutables que contienen todos los recursos necesarios para su correcto funcionamiento sin necesidad de utilizar ficheros adicionales para suministrar los mismos en tiempo de ejecución evitando, al mismo tiempo, que usuarios indeseados puedan manipularlos.
  2. La utilización de archivos de configuración, en el desarrollo de aplicaciones, permite que cada usuario pueda configurar el programa de acuerdo a sus intereses y necesidades.

Bibliografía:

Díaz Iglesias, Jack y Pérez González, Franklin. Delphi 5 Básico.– Ciudad de la Habana : Editorial Pueblo y Educación, 2001

Charte Ojeda, Francisco. Visual Basic 6– Madrid: Ediciones Anaya Multimedia, 2002

Curso por correo electrónico sobre Borland Delphi.

 

02Dic/16

Conservación de la Información en C++

CONSERVACIÓN DE LA INFORMACIÓN EN C++

 

Autores: MsC. Marcos Antonio León Fonseca.

MsC. Noralys Muñiz Maldonado.

 

Introducción:

 

La conservación permanente de información, requiere de la utilización de archivos de datos ya que el almacenamiento de estos en variables se pierde al terminar la ejecución del programa.

 

En este trabajo se aborda la creación, actualización y procesamiento de los archivos de datos en C++.

 

Desarrollo:

 

En programación un registro es una colección de variables relacionadas bajo un nombre, que puede contener variables de varios tipos diferentes de datos a los cuales se les denomina campo. Por ejemplo, un registro para un Profesor pudiera estar formado por los siguientes campos:

 

  • Número de carné de identidad.
  • Nombres.
  • Especialidad.
  • Asignatura que imparte.
  • Años de experiencia.

 

Al conjunto de registros relacionados, se le denomina archivo.

 

Para facilitar la recuperación de los registros almacenados en un archivo, es necesario que al menos un campo de cada registro sea seleccionado como campo clave, es decir un campo que identifique en particular a cada registro. Por ejemplo, en el registro Profesor pudiera ser el Número del carné de identidad dado que a cada profesor se le asigna un número que lo identifica a él y solo a él.

 

Las formas de organizar los registros dentro de un archivo son variadas. Los tipos de organizaciones más utilizados son:

 

  • Archivo de acceso secuencial.
  • Archivo de acceso directo.

 

Archivos de acceso secuencial.

 

En el archivo de acceso secuencial los registros se almacenan en orden en correspondencia con el campo clave y no necesariamente tienen que ser de la misma longitud. Por ejemplo, en el archivo Profesores, los registros se almacenarían por el número de identidad. El primer registro es el que tenga el menor número de identidad y los siguientes se irán entrando en orden ascendente.

 

El siguiente programa crea el archivo secuencial Profesores:

 

#include <cstdlib>

#include <iostream>

using namespace std;

 

int main(int argc, char *argv[])

{

int Clave;

char Nombres [30];

char Especialidad [30];

char Asignatura [30];

int Experiencia;

FILE *Fichero;

 

if ((Fichero = fopen (“Profesores.dat”, “w”)) == NULL)

cout << “El fichero no puede ser abierto.” << endl;

else {

cout << “Entre el indicador de fin de archivo (<CTRL-Z> <RETURN>) para finalizar” << endl;

cout << “Entre la clave: “;

cin >> Clave;

 

while (!feof (stdin)) {

gets (Nombres);

cout << “Entre el nombre del profesor: “;

gets (Nombres);

cout << “Entre la especialidad: “;

gets (Especialidad);

cout << “Entre la asignatura: “;

gets (Asignatura);

cout << “Entre los a\244os de experiencia: “;

cin >> Experiencia;

fprintf (Fichero, “%d %s %s %s %d\n”, Clave, Nombres, Especialidad, Asignatura, Experiencia);

cout << “Entre la clave: “;

cin >> Clave;

}

fclose (Fichero);

}

}

 

Analicemos el programa:

 

El enunciado: FILE *Fichero declara a Fichero como un puntero a la estructura FILE.

 

En la línea:   if ((Fichero = fopen (“Profesores.dat”, “w”)) == NULL) se utiliza el puntero Fichero para crear el archivo “Profesores.dat”.

 

La función fopen recibe dos argumentos: el nombre del archivo y el modo en que se va a abrir. El modo “w” indica que se va a abrir para escritura.

Otros modos de apertura de un archivo son:

 

“r”        para abrir un archivo existente para lectura.

“a”       para añadir registros al final de un archivo.

“r+” para actualizar registros.

“w+” para crear un archivo para actualizar.

“a+” para agregar, abrir o crear un archivo para actualizar.

 

Si un archivo es abierto con fopen para escribir y no existe, es creado y si existe el contenido del mismo es borrado sin advertencias.

 

La estructura de control if se utiliza para saber si el archivo no está abierto, es decir si el puntero al archivo es NULL.

 

La línea while (¡feof (stdin)) se utiliza para determinar si se introduce la combinación de teclas de fin de archivo.

 

El siguiente programa lee los registros almacenados en el archivo  de acceso secuencial “Profesores.dat”:

 

#include <cstdlib>

#include <iostream>

 

using namespace std;

 

int main(int argc, char *argv[])

{

int Clave;

char Nombres [30];

char Especialidad [30];

char Asignatura [30];

int Experiencia;

FILE *Fichero;

 

if ((Fichero = fopen (“Archivo.dat”, “r”)) == NULL)

cout << “El fichero no puede ser abierto.” << endl;

else {

cout << “Clave     Nombres     Especialidad     Asignatura     Experiencia” << endl;

fscanf (Fichero, “%d%s%s%s%d”, &Clave, Nombres, Especialidad, Asignatura, &Experiencia);

 

while (!feof (Fichero)) {

cout << Clave << ” ” << Nombres << ” ” << Especialidad  << ” “<< Asignatura  << ” “<< Experiencia  << ” “<< endl;

fscanf (Fichero, “%d%s%s%s%d”, &Clave, Nombres, Especialidad, Asignatura, &Experiencia);

}

fclose (Fichero);

}

system(“PAUSE”);

}

Cuando se recuperan los datos de un archivo secuencial, se comienza a leer desde el principio del archivo y se leen todos los datos en forma consecutiva hasta que se encuentren los datos deseados. La estructura FILE cuenta con un puntero de posición de archivo que va especificando la posición en el archivo donde ocurrirá la próxima lectura o escritura por lo que si se quiere procesar los datos secuencialmente en un archivo varias veces desde el principio, se debe posicionar el apuntador de posición de archivo al inicio del mismo, esto se logra con el enunciado: rewind (Fichero).

 

En un fichero secuencial la actualización de los datos corre el riesgo de borrar otros datos dentro del archivo ya que, por ejemplo, si el nombre del profesor “Juan” necesita ser modificado por “Juan Antonio”, el nuevo nombre es más largo que el original por lo que los caracteres más allá de la letra “n” sobrescribirían los datos de la Especialidad.

 

Para llevar a cabo la modificación se deberá copiar a un nuevo archivo los registros anteriores a “Juan”, escribir el nuevo registro y copiar los registros existentes después de “Juan” al nuevo archivo, o sea, habría que procesar todos los registros.

 

Archivos de acceso directo.

 

En un archivo de acceso directo, los registros son de longitud fija y se puede tener acceso directamente a ellos sin tener que buscar a través de otros. También es posible insertar, actualizar y borrar registros sin destruir otros datos del archivo.

 

El siguiente programa crea el archivo de  acceso directo Profesores:

 

#include <cstdlib>

#include <iostream>

 

using namespace std;

 

struct Datos {

int Clave;

char Nombre [30];

char Especialidad [30];

char Asignatura [30];

int Experiencia;

};

 

int main(int argc, char *argv[])

{

FILE *Fichero;

Datos Informacion;

if ((Fichero = fopen (“Profesores.dat”, “w”)) == NULL)

cout << “El fichero no puede ser abierto.” << endl;

else {

cout << “Entre el n\243mero de Clave (1 hasta 100; 0 para finalizar): “;

cin >> Informacion.Clave;

while (Informacion.Clave != 0) {

gets (Informacion.Nombre);

cout << “Entre el Nombre del profesor: “;

gets (Informacion.Nombre);

cout << “Entre la Especialidad: “;

gets (Informacion.Especialidad);

cout << “Entre la Asignatura: “;

gets (Informacion.Asignatura);

cout << “Entre los a\244os de Experiencias: “;

cin >> Informacion.Experiencia;

fseek (Fichero, (Informacion.Clave – 1) * sizeof (struct Datos), SEEK_SET);

fwrite (&Informacion, sizeof (struct Datos), 1, Fichero);

cout << “Entre el n\243mero de Clave (1 hasta 100; 0 para finalizar): “;

cin >> Informacion.Clave;

}

fclose (Fichero);

}

}

 

La combinación fseek y fwite se utiliza para escribir los datos en el archivo. La función fseek ubica el puntero en la posición específica del archivo y fwite escribe los datos en esa posición.

 

El enunciado fseek (Fichero, (Información.Clave – 1) * sizeof (struct Datos), SEEK_SET) coloca el puntero en la posición que se obtiene de multiplicar (Información.Clave – 1) por sizeof (struct Datos).

 

La constante simbólica SEEK_SET indica que el puntero se coloca en relación con el principio del archivo.

 

El enunciado fwrite (&Información, sizeof (struct Datos), 1, Fichero) hace que la estructura datos de tamaño sizeof (Struct datos) se escriba al archivo al cual apunta Fichero.

 

El siguiente programa lee los registros almacenados en el archivo de acceso directo “Profesores.dat”:

 

#include <cstdlib>

#include <iostream>

 

using namespace std;

 

struct Datos {

int Clave;

char Nombre [30];

char Especialidad [30];

char Asignatura [30];

int Experiencia;

};

int main(int argc, char *argv[])

{

FILE *Fichero;

Datos Informacion;

if ((Fichero = fopen (“Profesores.dat”, “r”)) == NULL)

cout << “El fichero no puede ser abierto.” << endl;

else {

cout << “Clave     Nombre     Especialidad     Asignatura     Experiencia” << endl;

fread (&Informacion, sizeof (struct Datos), 1, Fichero);

while (!feof (Fichero)) {

cout <<Informacion.Clave << Informacion.Nombre << Informacion.Especialidad << Informacion.Asignatura << Informacion.Experiencia << endl;

fread (&Informacion, sizeof (struct Datos), 1, Fichero);

}

fclose (Fichero);

}

system(“PAUSE”);

}

 

El siguiente programa actualiza los años de experiencias de los registros almacenados en el archivo de acceso directo “Profesores.dat”:

 

#include <cstdlib>

#include <iostream>

 

using namespace std;

 

struct Datos {

int Clave;

char Nombre [30];

char Especialidad [30];

char Asignatura [30];

int Experiencia;

};

 

int Registro;

int Actualizacion;

 

int main(int argc, char *argv[])

{

FILE *Fichero;

struct Datos Informacion;

if ((Fichero = fopen (“Archivo.dat”, “r+”)) == NULL)

cout << “El fichero no puede ser abierto.” << endl;

else {

cout << “Entre el n\243mero de Clave del registro a actualizar: “;

cin >> Registro;

fseek (Fichero, (Registro – 1) * sizeof (struct Datos), SEEK_SET);

fread (&Informacion, sizeof (struct Datos), 1, Fichero);

if (Informacion.Clave == 0)

cout << “Ese registro no existe.” << endl;

else {

cout << Informacion.Clave << ” ” << Informacion.Nombre << ” ” << Informacion.Especialidad << ” ” << Informacion.Asignatura << ” ” << Informacion.Experiencia << endl;

cout << “Entre los a\244os de Experiencias Actualizados: “;

cin >> Actualizacion;

Informacion.Experiencia = Actualizacion;

cout << Informacion.Clave << ” ” << Informacion.Nombre << ” ” << Informacion.Especialidad << ” ” << Informacion.Asignatura << ” ” << Informacion.Experiencia << endl;

fseek (Fichero, (Informacion.Clave – 1) * sizeof (struct Datos), SEEK_SET);

fwrite (&Informacion, sizeof (struct Datos), 1, Fichero);

}

fclose (Fichero);

}

system(“PAUSE”);

}

 

El siguiente programa borra registros almacenados en el archivo de acceso directo “Profesores.dat”:

 

#include <cstdlib>

#include <iostream>

 

using namespace std;

 

struct Datos {

int Clave;

char Nombre [30];

char Especialidad [30];

char Asignatura [30];

int Experiencia;

};

 

int Registro;

 

int main(int argc, char *argv[])

{

FILE *Fichero;

struct Datos Informacion;

struct Datos BlankInformacion = {0, “”, “”, “”, 0};

if ((Fichero = fopen (“Archivo.dat”, “r+”)) == NULL)

cout << “El fichero no puede ser abierto.” << endl;

else {

cout << “Entre el n\243mero de Clave del registro a borar: “;

cin >> Registro;

fseek (Fichero, (Registro – 1) * sizeof (struct Datos), SEEK_SET);

fread (&Informacion, sizeof (struct Datos), 1, Fichero);

if (Informacion.Clave == 0)

cout << “Ese registro no existe.” << endl;

else {

fseek (Fichero, (Registro – 1) * sizeof (struct Datos), SEEK_SET);

fwrite (&BlankInformacion, sizeof (struct Datos), 1, Fichero);

}

fclose (Fichero);

}

system(“PAUSE”);

}

 

El siguiente programa agrega registros al archivo de acceso directo “Profesores.dat”:

 

#include <cstdlib>

#include <iostream>

 

using namespace std;

 

struct Datos {

int Clave;

char Nombre [30];

char Especialidad [30];

char Asignatura [30];

int Experiencia;

};

 

int main(int argc, char *argv[])

{

int Registro;

FILE *Fichero;

Datos Informacion;

if ((Fichero = fopen (“Archivo.dat”, “r+”)) == NULL)

cout << “El fichero no puede ser abierto.” << endl;

else {

cout << “Entre el n\243mero de Clave (1 hasta 100): “;

cin >> Registro;

fseek (Fichero, (Registro – 1) * sizeof (struct Datos), SEEK_SET);

fread (&Informacion, sizeof (struct Datos), 1, Fichero);

if (Informacion.Clave != 0)

cout << “Ese registro existe.” << endl;

else {

Informacion.Clave = Registro;

gets (Informacion.Nombre);

cout << “Entre el Nombre del profesor: “;

gets (Informacion.Nombre);

cout << “Entre la Especialidad: “;

gets (Informacion.Especialidad);

cout << “Entre la Asignatura: “;

gets (Informacion.Asignatura);

cout << “Entre los a\244os de Experiencias: “;

cin >> Informacion.Experiencia;

fseek (Fichero, (Informacion.Clave – 1) * sizeof (struct Datos), SEEK_SET);

fwrite (&Informacion, sizeof (struct Datos), 1, Fichero);

}

fclose (Fichero);

}

system(“PAUSE”);

}

 

Conclusiones:

 

El conocimiento y la utilización de los archivos de datos en nuestros programas, permite la conservación permanente de la información procesada por estos.

 

Bibliografía:

 

Deitel, H. M. y Deitel., P. J. (2005). Cómo Programar en C/C++. Santiago de Cuba., PROGRAF.

Katrib Mora, M. (1986). Lenguajes de programación y Técnicas de compilación. Ciudad de la Habana., Editorial Pueblo y Educación.

Lipschutz, S. (1989). Estructura de datos. Ciudad de la Habana., Edición Revolucionaria.

 

 

02Dic/16

Aprendizaje de matemáticas por medio de la programación

 

 

APRENDIZAJE DE MATEMÁTICAS POR MEDIO DE LA PROGRAMACIÓN

 

Autores: MsC. Marcos Antonio León Fonseca.

MsC. Noralys Muñiz Maldonado.

 

Introducción:

 

En el mundo informático es un criterio generalizado que el aprendizaje de la programación ejerce una influencia positiva en el desarrollo del pensamiento y en la capacidad para la solución de problemas transferibles a otros dominios del conocimiento.

 

Aprender a programar, es aprender a solucionar problemas, pero a su vez, la solución de problemas obliga a la reflexión acerca de los aspectos esenciales del fenómeno en cuestión por lo que la contribución que la programación puede aportar al entendimiento de otros temas, las matemáticas en especial, es significativo.

 

El propósito de este artículo consiste en demostrar, a través de ejemplos, que la programación favorece el aprendizaje de las matemáticas.

 

Desarrollo:

 

Ejemplos:

 

Los lenguajes de programación tienen implementada una estructura de control de extraordinario valor, llamada recursividad, la cual permite que un procedimiento se llame a sí mismo como un subprocedimiento. Utilizando los recursos que brinda el lenguaje de programación C++, elabore funciones recursiva que permitan:

 

  1. a) Hallar el factorial de un número.

 

Matemáticamente se define como factorial de un número n al producto de los enteros positivos desde 1 hasta n y se denota por n!

 

n! = 1 . 2 . 3 . 4 . 5 . . . (n – 2) (n – 1) n

 

también se define 0! = 1, de forma que la función está definida para todos los enteros no negativos. Así tenemos que:

 

0! = 1     1! = 1     2! = 1 . 2 = 2     3! = 1 . 2 . 3 = 6

4! = 1 . 2 . 3 . 4 = 24     5! = 1 . 2 . 4 . 5 = 120

 

y así sucesivamente.

 

 

Observe que:

 

5! = 5 . 4! = 5 . 24 = 120    6! = 6 . 5! = 6 . 120 = 720

 

esto se cumple para cualquier entero n positivo; o sea,

 

n! = n (n – 1)!

 

de acuerdo con esto, la función factorial se puede definir también como :

 

Si n < 2 entonces n! = 1

Si n ≥ 2 entonces n! = n (n – 1)!

 

Por ejemplo, 4! sería:

 

4! = 4 . 3!

3! = 3 . 2!

2! = 2 . 1!

1! = 1 . 0!

0! = 1

1! = 1 . 1 = 1

2! = 2 . 1 = 2

3! =  3 . 2 = 6

4! = 4 . 6 = 24

 

Esta definición de n! es recursiva  ya que se refiere a sí misma cuando invoca (n – 1) !

 

Luego nuestra función podría ser:

 

int Factorial (int n) {

if (n < 2)

return 1;

else

return n * Factorial (n – 1);

}

 

  1. b) Encontrar el término n-ésimo Fn de la secuencia de Fibonacci.

 

La celebre secuencia de Fibonacci designada por F0, F1, F2, …, es:

 

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, …

O sea:

 

F0 = 0 y F1 = 1 y cada término sucesivo es la suma de los dos términos precedentes, por ejemplo, los dos términos que siguen a la secuencia anterior son:

34 + 55 = 59      y      55 + 89 = 144

por lo que una definición formal de esta función es la siguiente:

 

Si n = 0 o n = 1, entonces Fn = n

Si n > 1, entonces Fn = Fn-2 + Fn-1

 

Este es otro ejemplo de definición recursiva, ya que la definición se refiere a sí misma en Fn-2  y  Fn-1

 

Nuestra función podría ser:

 

int Fibonacci (int n) {

if (n == 0 || n == 1)

return n;

else

return Fibonacci (n – 2) + Fibonacci (n – 1);

}

 

  1. c) Encontrar un valor determinado para la función de Ackermann.

 

La función de Ackermann es una función con dos argumentos a los cuales se le pueden asignar cualquier número entero no negativo: 0,1, 2, 3, 4, …

 

Esta función se define como:

 

Si m = 0, entonces A (m, n) = n + 1

Si m ≠ 0, pero n = 0, entonces A (m, n) = A (m – 1, 1)

Si m ≠ 0 y n  ≠ 0, entonces A (m, n) = A (m – 1, A (M, n – 1))

 

Por ejemplo, el valor de A (1, 3) sería:

 

A (1, 3) = A (0, A (1, 2))

A ( 1, 2) = A (0, A (1, 1))

A (1, 1) = A (0, A (1, 0))

A (1, 0) =  A (0, 1)

A (0, 1) = 1 + 1 = 2

A (1, 1)  = A (0, 2)

A (0, 2) = 2 + 1 = 3

A (1, 1) = 3

A (1, 2) = A (0, 3)

A (0, 3) = 3 + 1 = 4

A (1, 2) = 4

A (1, 3) = A (0, 4)

A (0, 4) = 4 + 1 = 5

A (1, 3) = 5

 

Una vez más tenemos una definición recursiva, ya que se refiere a sí misma en  A (m – 1, 1) y A (m – 1, A (M, n – 1)).

 

 

Por lo que nuestra función podría ser:

 

int Ackermann (int m, int n) {

if (m == 0)

return n + 1;

else

if (m != 0 && n == 0)

return Ackermann (m – 1, 1);

else

if (m != 0 && n != 0)

return Ackermann (m – 1, Ackermann (m, n – 1));

}

 

Como se puede notar la implementación de las funciones en el lenguaje de programación requiere del análisis de los aspectos esenciales de los contenidos matemáticos que se abordan favoreciéndose con ello su aprendizaje.

 

Conclusiones:

 

La contribución que la programación puede aportar al aprendizaje de contenidos  matemáticos, es significativo.

 

Bibliografía:

Deitel, H. M. y Deitel., P. J. (2005). Cómo Programar en C/C++. Santiago de Cuba., PROGRAF.

Katrib Mora, M. (1986). Lenguajes de programación y Técnicas de compilación. Ciudad de la Habana., Editorial Pueblo y Educación.

Lipschutz, S. (1989). Estructura de datos. Ciudad de la Habana., Edición Revolucionaria.