Download Algoritmo de búsqueda de ternas pitagóricas basado en
Document related concepts
no text concepts found
Transcript
U Algoritmo de búsqueda de ternas pitagóricas basado en programación funcional*1 >$QDOJRULWKPWRVHDUFK3\WKDJRUHDQV QXPEHUVXVLQJIXQFWLRQDOSURJUDPPLQJ@ [Algoritmo de busca baseado em trios SLWDJyULFRVSURJUDPDomRIXQFLRQDO@ OMAR IVÁN TREJOS BURITICÁ2 5HFLER±$SUREDFLyQ Resumen: Se presenta una posible solución a la búsqueda de números que se constituyan en ternas pitagóricas, mediante una implementación con programación funcional bajo las posibilidades técnicas y sintácticas del lenguaje Scheme entorno DrRacket. La metodología se enmarcó en la investigación educativa de carácter cuantitativo. Los resultados de este algoritmo, y su uso, evidencian la posibilidad de encontrar soluciones muy simples, desde la óptica funcional, para resolver problemas con cierta complejidad DVt FRPR DSUHQGL]DMHV PiV VLJQL¿FDWLYRV \ FRQ PD\RU VHQWLGR en el campo de la programación de computadores por parte de los estudiantes. El programa presentado sirve de ejemplo para encontrar una aplicación más a la instancia tecnológica como expresión instrumental de la matemática. Palabras clave: Algoritmo, programación funcional, recursión, ternas pitagóricas. Abstract: The article presents a possible solution to the search for numbers that are formed in Pythagorean triples * Modelo para la citación de este artículo: 75(-26%85,7,&È2PDU,YiQ$OJRULWPRGHE~VTXHGDGHWHUQDVSLWDJyULFDVEDVDGR en programación funcional. En: Ventana Informática No. 35 (jul-dic). Manizales (Colombia): Facultad de Ciencias e Ingeniería, Universidad de Manizales. p. 63-78. ISSN: 0123-9678 $UWtFXOR GH LQYHVWLJDFLyQ SURYHQLHQWH GHO SUR\HFWR Análisis pedagógico, instrumental y conceptual de algunos paradigmas de programación como contenido de la asignatura Programación I del Programa Ingeniería de Sistemas y Computación, ejecutado en el periodo 20.01-15.12.2013, e inscrito en el grupo de investigación Informática d Vicerrectoría de Investigaciones, Innovación y Extensión de la Universidad Tecnológica de Pereira. 2 PhD. en Ciencias de la Educación, MSc. en Comunicación Educativa, Especialista en ,QVWUXPHQWDFLyQ)tVLFD,QJHQLHURGH6LVWHPDV'RFHQWHGHSODQWD8QLYHUVLGDG7HFQROyJLFD de Pereira (Pereira, Risaralda, Colombia) Correo electrónico: omartrejos@utp.edu.co 63 !"#$%&# ' ()*+ b, -. /012303.4-4/5. 7/48 9:.;4/5.-2 1<5=<-00/.= :.>3< 483 technical and syntactical possibilities DrRacket Scheme language environment. The methodology is framed in educational research quantitative. The results of this algorithm and its use, show the SRVVLELOLW\RI¿QGLQJVLPSOHVROXWLRQVIURPWKHIXQFWLRQDOSRLQWRI view, to solve problems with some complexity and more meaningful OHDUQLQJDQGPRUHVHQVHLQWKH¿HOGRIFRPSXWHUSURJUDPPLQJE\ WKHVWXGHQWV7KHSURJUDPSUHVHQWHGLVDQH[DPSOHWR¿QGDPRUH technological application instance and instrumental expression of mathematics. Keywords: Algorithm, functional programming, Pythagorean numbers, recursion. Resumo: O artigo apresenta uma possível solução para a busca de números que são formados em triplos pitagóricos por uma implementação com programação funcional sob o possibilidades técnicas e sintáticos ambiente de idioma Esquema DrRacket. A metodologia está enquadrada em quantitativa pesquisa educacional. Os resultados deste algoritmo e sua utilização mostram a possibilidade de encontrar soluções simples, do ponto de vista funcional, para resolver problemas com alguma FRPSOH[LGDGHHDSUHQGL]DJHPPDLVVLJQL¿FDWLYDHPDLVVHQWLGR no campo da programação de computadores pela os estudantes. O programa apresentado é um exemplo para encontrar uma instância de aplicação tecnológica mais e expressão instrumental da matemática. Palavras-chave: Algoritmo, programação funcional, recursão, trios pitagóricos. Introducción 7UHMRV VHxDOD OD XWLOL]DFLyQ GH OD SURJUDPDFLyQ GH computadores como base para la Ingeniería de Sistemas para HQFRQWUDUVROXFLRQHVDSUREOHPDVTXHSRUVXQDWXUDOH]DWLHQHQFLHUWR QLYHO GH FRPSOHMLGDG \ DVt PLVPR SDUD SHUPLWLU TXH HO FRPSXWDGRU GHVDUUROOHWDUHDVTXHSXGLHUDQVHUDJRWDGRUDVSDUDHOVHUKXPDQR/D E~VTXHGD GH DSOLFDFLRQHV GH OD WHFQRORJtD SDUD UHVROYHU SUREOHPDV de las matemáticas es uno de los terrenos más fértiles en donde los lenguajes de programación han hecho gala no sólo de utilidad sino también de oportunidad. Desde la perspectiva puramente docente, OD SURJUDPDFLyQ GH FRPSXWDGRUHV HV XQ iUHD TXH VLUYH SDUD TXH HO HVWXGLDQWH DSURSLH DVLPLOH DSOLTXH HYDO~H \ UHWURDOLPHQWH ODV posibilidades de la lógica computacional, base para el desarrollo de los 6 ?@ABCDEAFGF FC HG@AIGJCE KGLMJNGF FC OAC@LAGE C P@QC@ACDRG DOJRULWPRVTXHSRVWHULRUPHQWHVHKDQGHFRQYHUWLUHQSURJUDPDVVHJ~Q VHxDODQ9DQ5R\+DULGL1RUPDOPHQWHHOHVWXGLDQWHHQODV asignaturas de programación de computadores, aprende un conjunto de KHUUDPLHQWDVTXHOHSRVLELOLWDQODUHVROXFLyQGHGLIHUHQWHVSUREOHPDV 6LQHPEDUJRVXUJHODLQTXLHWXGH[SXHVWDSRU%UXQHUDFHUFD de ¿cuántas veces en realidad el estudiante se enfrenta a problemas UHDOHVTXHSXHGDUHVROYHUFRQODSURJUDPDFLyQGHFRPSXWDGRUHV"< posiblemente se encuentre en la respuesta más aplicaciones de orden SXUDPHQWHDFDGpPLFRTXHSUiFWLFR /DDSURSLDFLyQDVLPLODFLyQDSOLFDFLyQHYDOXDFLyQ\UHWURDOLPHQWDFLyQ de conceptos derivados de un área de conocimiento se hace PXFKR PiV VHQFLOOD FXDQGR VH DSOLFDQ HQ HMHPSORV \ VLWXDFLRQHV SUiFWLFDVVHJ~QVRVWLHQH$XVXEHODVtODSURJUDPDFLyQ GHFRPSXWDGRUHVHQFXHQWUDHQODPDWHPiWLFDXQHVSDFLRDPSOLR\ bondadoso para resolver problemas por el camino de la tecnología, TXH SHUPLWDQ FRQIHULUOH VLJQL¿FDGR DO FRQRFLPLHQWR DOJRUtWPLFR \ los lenguajes de programación 3. Esta estrategia se contrapone, GHVGHXQDySWLFDPXFKRPiVSUiFWLFD\DSOLFDWLYDDDTXHOODHQOD cual los estudiantes cuando resuelven problemas enfatizan en los SURFHGLPLHQWRVPiVTXHHQHOUD]RQDPLHQWR\HQODOyJLFDGHDFXHUGR FRQ%UXQHU El aprendizaje de los lenguajes de programación está mediado por las UHODFLRQHV GH WHFQRORJtD FRQ ODV VROXFLRQHV LPSOHPHQWDGDV \ HQWUH GLFKDVVROXFLRQHV\ORVSUREOHPDVTXHUHVXHOYHQVHJ~Q3D]3HQDJRV (2011, 216), es donde un estudiante se enfrenta a la retención o DSOLFDFLyQGHORVFRQRFLPLHQWRVDGTXLULGRVFRQWHQLGRVGHODGLVFLSOLQD FRQJUDQIUHFXHQFLDGL¿FXOWDGDSRUODDSURSLDFLyQGHFRQFHSWRV\VX posterior aplicación. 4XH HO HVWXGLDQWH DSOLTXH OD SURJUDPDFLyQ GH FRPSXWDGRUHV HQ la solución de problemas prácticos de otras ciencias es un reto SDUD HO GRFHQWH XQLYHUVLWDULR SULRUL]DQGR HO UD]RQDPLHQWR OyJLFR \ la apropiación del pensamiento algorítmico sobre procedimientos EDVDGRV PiV HQ OD PHPRULD$ HVWR VH OH SXHGH VXPDU TXH H[LVWH la posibilidad de encontrar aplicaciones prácticas al pensamiento DOJRUtWPLFR\DODSURJUDPDFLyQGHFRPSXWDGRUHVHQVt«desde las características de los estilos cognitivos de los estudiantes, favorezca un aprendizaje autónomo con responsabilidad que sea más activo, 3 La programación de computadores es área básica en programas de Ingeniería de sistemas \D¿QHVORTXHLPSOLFDODLPSRUWDQFLDGHVXFRPSUHQVLyQ\DSUHQGL]DMH 65 TV WX Y Z[\]^ Y _]`]acefa g hijk lmlnopqrst rsnlusvlpqwst qmpxvyqzrq{nqmlvqst vx|x}qws ~ lpsvvxnlyst xm HOFXDOORVHVWXGLDQWHVFRQVWUX\DQFRQRFLPLHQWRV\VLJQL¿FDGRVFRQ sentidoª3D]3HQDJRV La pregunta de investigación se plantea en los siguientes términos: ¢HVSRVLEOHHQFRQWUDUDSOLFDFLRQHVSUiFWLFDVHQGLIHUHQWHViUHDVTXH permitan aplicar, de manera concreta, el pensamiento algorítmico \ OD SURJUDPDFLyQ GH FRPSXWDGRUHV SDUD UHVROYHU SUREOHPDV GH GLFKDViUHDVGHIRUPDTXHVHDQWDQJLEOHVHQVXDSOLFDFLyQSDUDORV HVWXGLDQWHV"/DUHVSXHVWDHVHOFRQWHQLGRGHDUWtFXORTXHUHVSRQGH D¿UPDWLYDPHQWHODSUHJXQWD'HDTXtVHLQ¿HUHXQDKLSyWHVLVTXHHQ sintonía con el problema, valida la existencia de diferentes espacios GH SUiFWLFD SDUD OD SURJUDPDFLyQ \ HO SHQVDPLHQWR DOJRUtWPLFR HQ GLIHUHQWHViUHDVWDOTXHSHUPLWDQDOHVWXGLDQWHDSUR[LPDUVHWDQWRD ODDSOLFDFLyQGHOFRQRFLPLHQWRTXHODSURJUDPDFLyQSURYHHFRPRD las diferentes áreas en donde dicho conocimiento es la base para la solución de sus problemas. (O PDUFR GH UHIHUHQFLD GH OD LQYHVWLJDFLyQ HV OD IRUPDFLyQ FLHQWt¿FD \ WHFQROyJLFD HQ LQJHQLHUtD \ VH IXQGDPHQWD HQ ODV WHRUtDV GH DSUHQGL]DMH VLJQL¿FDWLYR GH 'DYLG 3DXO$XVXEHO DSUHQGL]DMH SRUGHVFXEULPLHQWRGH-HURPH6H\PRXU%UXQHU\ODWHQGHQFLD Active Learning a partir de la teoría pedagógica socio-constructivista GH/HY9LJRWVN\\VXDSOLFDFLyQHQHOFDPSRGHODLQJHQLHUtDGH VLVWHPDV\FRPSXWDFLyQHQHOiUHDGHSURJUDPDFLyQGHFRPSXWDGRUHV El contenido del presente artículo propone una forma de establecer UHODFLRQHV HQWUH OD SURJUDPDFLyQ GH FRPSXWDGRUHV \ XQ HQXQFLDGR HVSHFt¿FRGHODVPDWHPiWLFDVDODOX]GHODFRQVWUXFFLyQGHXQSURJUDPD TXHSHUPLWDHOKDOOD]JRGHORVIDFWRUHVTXHVDWLVIDFHQHOWHRUHPDGH 3LWiJRUDVGHVGHODSHUVSHFWLYDTXHODSURJUDPDFLyQIXQFLRQDOSURYHH aprovechando las facilidades de recursividad derivadas del uso del lenguaje de programación Scheme en el entorno DrRacket. 1. Fundamento Teórico El paradigma de programación funcional, de acuerdo con Felleisen HWDOFRQVWLWX\HXQDGHODVDOWHUQDWLYDVSDUDUHVROYHUXQ problema lógico tomando como base la fundamentación matemática GHULYDGDGHOFiOFXOR/DPEGD\HOFRQFHSWRGHIXQFLyQFRPREDVHSDUD la construcción algorítmica de soluciones. La programación funcional EDVDVXWHRUtDSUHFLVDPHQWHHQHOFRQFHSWRGHIXQFLyQTXHGHVGH ODSHUVSHFWLYDWHFQROyJLFDHVXQFRQMXQWRGHLQVWUXFFLRQHVTXHSXHGH SS UHFLELU DUJXPHQWRV SXHGH VHU LGHQWL¿FDGR FRQ XQ QRPEUH \ SXHGH SURFHVDUGDWRVGHIRUPDTXHUHWRUQHYDORUHVVLQDFXGLUDODPHPRULDGHO FRPSXWDGRUFRPRLQWHUPHGLDULRSDUDGH¿QLUHVWDGRVGHDOPDFHQDPLHQWR VHJ~Q9DQ5R\+DULGL/DSURJUDPDFLyQIXQFLRQDOSUHWHQGH poner a disposición de los programadores un conjunto de herramientas TXHSHUPLWDQHOSURFHVDPLHQWRGHGDWRV\UHVSXHVWDVLQPHGLDWDVDSDUWLU GHORVUHVXOWDGRVTXHDUURMHQODVIXQFLRQHVFRPRQ~FOHRSULQFLSDOGH trabajo. En su más simple concepción, un programa construido a partir del paradigma funcional es un conjunto de funciones independientes pero, DODOX]GHOREMHWLYRGHODOJRULWPRLQWHUGHSHQGLHQWHVTXHHQFRQMXQWR resuelven, alcanzan o satisfacen un objetivo. La técnica divide y vencerás4 SHUPLWH XQD DWRPL]DFLyQ GH ODV VROXFLRQHV TXH VLPSOL¿FD ODHVWUXFWXUDGHGLFKDVROXFLyQGHPDQHUDTXHHQFRQWUDUORVHUURUHV OyJLFRVVHDPXFKRPiVVHQFLOORTXHGDUHVXHOWRHOJUDQREMHWLYRJHQHUDO GH DFXHUGR FRQ .OLQH &DGD VROXFLyQ D HVWRV SHTXHxRV REMHWLYRV VH FRQVWLWX\H HQ XQD IXQFLyQ LQGHSHQGLHQWH SHUR FX\RV resultados aportan a la solución general a partir de la interacción con otras funciones. 8QR GH ORV UHFXUVRV PiV SRWHQWHV TXH VH XVDQ HQ SURJUDPDFLyQ IXQFLRQDO SUHFLVDPHQWH SDUD TXH ODV IXQFLRQHV VHDQ DOWDPHQWH funcionales –valga esta redundancia- es el concepto de recursividad. (VWH FRQFHSWR SXHGH GH¿QLUVH GHVGH OR SXUDPHQWH WHFQROyJLFR FRPR OD SRVLELOLGDG TXH RIUHFH XQ OHQJXDMH GH SURJUDPDFLyQ SDUD TXH XQD IXQFLyQ SXHGD OODPDUVH D Vt PLVPD 'HVGH OR PDWHPiWLFR OD UHFXUVLYLGDG VH GH¿QH FRPR OD LQFOXVLyQ GH OD IXQFLyQ GH¿QLGD GHQWURGHODPLVPDGH¿QLFLyQORFXDOHQVtPLVPRHVWDEOHFHXQloop TXH DXQTXH SDUHFLHUD UHGXQGDQWH SXHGH FDSLWDOL]DUVH SDUD TXH ORJUDUREMHWLYRVTXHVHGHULYDQGHSURFHVRVFtFOLFRVTXHVLPSOL¿FDQ\ UHVXHOYHQPXFKRVSUREOHPDVVHJ~QORSODQWHD5RRQH\6H ha acudido a la utilización del lenguaje Scheme en el entorno DrRacket debido a su notable capacidad en procesamiento de datos numéricos, DODSRVLELOLGDGGHPDQHMDUGDWRVVLQWHQHUTXHHVWDUDWDGRVDOFRQFHSWR GHHVWDGR\SRUHQGHGHWLSRVGHGDWRV\DODPDQLSXODFLyQVLPSOH \HIHFWLYDTXHDSDUWLUGHODUHODFLyQHLQWHUDFFLyQHQWUHIXQFLRQHV provee el lenguaje de programación. En idioma inglés divide and conquer GH DFXHUGR FRQ &DOGHUtQ ©consiste en descomponer el problema en un conjunto de subproblemas PiV SHTXHxRV 'HVSXpV VH resuelven estos subproblemas y se combinan las soluciones para obtener la solución para el problema original» por deducción. 67 ¡¢£¤¥¦£ § ¨©ª« ¬ ®¯°±²±³±´µ¶ 2.1 Descripción Para buscar su solución a partir de una propuesta algorítmica funcional se ha escogido el teorema de Pitágoras5. El problema planteado desde OD PDWHPiWLFD FRQVLVWH HQ HQFRQWUDU Q~PHURV HQWHURV TXH FXPSODQ FRQGLFKDHFXDFLyQGHIRUPDTXHVHPXHVWUHQHQSDQWDOODDPDQHUDGH WHUQDVSLWDJyULFDVHVGHFLUHQFRQMXQWRVGHQ~PHURVTXHVDWLVIDFHQ el teorema de Pitágoras, como lo expresa Chabert (2005, 212), donde VXVGRVYDORUHVPHQRUHVFRUUHVSRQGHQDODPHGLGDGHORVFDWHWRV\ HOYDORUPD\RUFRUUHVSRQGHDODPHGLGDGHODKLSRWHQXVDGHDFXHUGR con Stewart (2012, 55). Desde la programación se pretende construir XQSURJUDPDTXHHQFXHQWUHODVWHUQDVSLWDJyULFDV\TXHHQSDQWDOOD despliegue la prueba de su validez frente al teorema planteado dentro de XQUDQJRGHWHUPLQDGRSDUDORFXDOVHDVLJQDXQYDORUWRSH\VHEXVFDQ las ternas pitagóricas en el rango 1 hasta el valor tope establecido. 3DUDODFRQVWUXFFLyQGHODVROXFLyQIXQFLRQDOTXHUHVXHOYDHOSUREOHPD enunciado, se ha planteado la necesidad de pensar en las diferentes SRVLELOLGDGHVGHYDOLGDFLyQTXHVHUHTXLHUHQSDUDFRQ¿UPDUHOKDOOD]JR GHWHUQDVSLWDJyULFDVDFRUGHFRQODGH¿QLFLyQ3DUDHOORVHSHQVyHQ TXHVLHOUDQJRGHUHYLVLyQGHORVQ~PHURVDYHUL¿FDUHVGHDQSDUD un valor de n leído, entonces las posibles combinaciones estarán dadas SRUORVYDORUHVTXHVHPXHVWUDQHQOD7DEOD Tabla 1. Posibles valores a validar (Trejos, 2015, 87) 1ª revisión 122 122 122 . 2ª revisión 222 222 222 . 3ª revisión 322 322 322 . … … … … . N a revisión n22 n22 n22 . . 12Q2 . 22Q2 . 32Q2 . … . n2Q2 'LFKD WDEOD LQGLFD TXH GHEH UHDOL]DUVH XQ SURFHVR TXH VH YD\D SURJUHVLYDPHQWHYHUL¿FDQGRHQFDGDSDUGHQ~PHURVHOFXPSOLPLHQWR (QWpUPLQRVVLPSOHVHVWDEOHFHTXHHQXQWULiQJXORUHFWiQJXORODVXPDGHORVFXDGUDGRVGH ORVFDWHWRVHVLJXDODOFXDGUDGRGHODKLSRWHQXVDFRPRORSODQWHD6SDUNVTXH expresado matemáticamente sería a2E2 F2SDUDYDORUHVDE\FFRPRPHGLGDGHGLFKRV FDWHWRV\GLFKDKLSRWHQXVDVHJ~Q%R\HU 'HEHUHFRUGDUVHVHxDOD5H\3DVWRU%DELQLTXHXQWULiQJXORHVUHFWiQJXORVL uno de sus ángulos internos es igual a 90º. ·¸¹º»¼½¹¾¿¾ ¾» À¿¸¹Á¿Â»½ ÿÄÅÂÆ¿¾ ¾» ǹ»¸Ä¹¿½ » ȸɻ¸¹»¼Ê¿ GHOWHRUHPDGH3LWiJRUDVGHIRUPDTXHVHFXEUDWRGRHOHVSHFWURGH SRVLELOLGDGHV GH ORV Q~PHURV FRPSUHQGLGRV HQWUH \ HO Q~PHUR Q asignado como tope superior. Esto pone de presente la necesidad de SODQWHDUGRVFLFORVDQLGDGRVTXHUHFRUUDQORVSRVLEOHVYDORUHV(QXQ proceso cíclico externo deberá hacerse un recorrido desde 1 hasta n DYDQ]DQGRGHHQ\GHQWURGHHVWHSURFHVRFtFOLFRH[WHUQRGHEH RUJDQL]DUVHXQSURFHVRFtFOLFRH[WHUQRTXHWDPELpQUHFRUUDWRGRVORV valores desde 1 hasta n (avanzando igualmente de 1 en 1). En términos de seudocódigo, la tabla 1 se resume algorítmicamente de la siguiente forma: Para a = 1 hasta n (1) 3DUDE KDVWDQ Validar a2 + b2 Una vez detectada la secuencia numérica se procede a detectar el cumplimiento del teorema de Pitágoras: para Validar a2+b2, se busca si la raíz cuadrada de este resultado es un número entero, para lo cual se acude a la función ÀRRU (del lenguaje SchemeTXHREWLHQHODSDUWH entera de un número real6. Se compara si la parte entera de la raíz cuadrada de la suma a2+b2HVLJXDOGLFKDSDUWHHQWHUDHQFX\RFDVR se ha encontrado una terna pitagórica. En ese momento, se procede a PRVWUDUODWHUQDHQXQIRUPDWRSUHGH¿QLGRTXHDOJRUtWPLFDPHQWHSRGUtD resumirse de la siguiente forma: Calcular el resultado de a2 + b2 Obtener la raíz cuadrada de a2 + b2 Obtener la parte entera de la raíz cuadrada obtenida Comparar la parte entera de dicha raíz con la raíz como tal Si son iguales Mostrar la terna pitagórica Si no lo son Continuar con la siguiente combinación De esta forma, la solución a encontrar se basa en el algoritmo: Para a = 1 hasta n (1) 3DUDE KDVWDQ Calcular el resultado de a2 E2 Obtener la raíz cuadrada de a2 E2 6 6LHOQ~PHURIXHUDDODSOLFDUODIXQFLyQÀRRUVHREWHQGUiHOQ~PHURFRPRUHVSXHVWD TXHFRUUHVSRQGHDODSDUWHHQWHUDGHOYDORUUHDO 69 ÍÎ ÏÐ Ñ ÒÓÔÕÖ Ñ ×ÕØÕÙÚÛÜÙ Ý Þßàá Obtener la parte entera de la raíz cuadrada obtenida Comparar la parte entera de dicha raíz con la raíz como tal Si son iguales Mostrar la terna pitagórica Si no lo son Continuar con la siguiente combinación Fin Si Fin Para Fin Para 2.2 Aplicación (OSURJUDPD7UHMRVHVFULWRHQOHQJXDMHScheme bajo entorno DrRacket versión 6.1 R5RS, cumple con el objetivo planteado. 352*5$0$ 48( (1&8(175$ 7(51$6 3,7$*Ï5,&$6 5$1*2 $ 1 3$5$819$/251'(),1,'2 )XQFLyQVLPSOHTXHFDOFXODODVXPDDAEA GH¿QHVXPDDE H[SWDH[SWE ) )XQFLyQ VLPSOH TXH FRQ¿UPD OD H[LVWHQFLD GH XQD WHUQD pitagórica GH¿QHSLWDJRUDVDE LI VTUWVXPDDEÀRRUVTUWVXPDDE )) ; Función simple que despliega resultados (solo ternas) GH¿QHPRVWUDUDE (display “Terna Pitagórica --> (“) (display a) (display “,”) (display b) (display “,”) GLVSOD\ÀRRUVTUWH[SWDH[SWE (display “)”) (newline) (newline) ) ; Función simple que despliega resultados (completos) GH¿QHPRVWUDUDE (newline) ËÌ âãäåæçèäéêé éæ ëêãäìêíæè îêïðíñêé éæ òäæãïäêè æ óãôæãäæçõê (display a) (display “^2 = “) (display (expt a 2)) (display “, “) (display b) (display “^2 = “) (display (expt b 2)) (newline) (display (expt a 2)) GLVSOD\³³ (display (expt b 2)) (display “ = “) GLVSOD\H[SWDH[SWE (newline) GLVSOD\³5DL]&XDGUDGDGH³ GLVSOD\H[SWDH[SWE (display “ = “) GLVSOD\ÀRRUVTUWH[SWDH[SWE (newline) (display “Terna Pitagórica --> (“) (display a) (display “,”) (display b) (display “,”) GLVSOD\ÀRRUVTUWH[SWDH[SWE (display “)”) (newline) (newline) ) ; Función recursiva (proceso cíclico interno) de búsqueda de números pitagóricos GH¿QHFLFORLQWLMQ LI!MQ 0 (begin LI SLWDJRUDVLM PRVWUDULM ) FLFORLQWLMQ ) ) ) ; Función recursiva (proceso cíclico externo) de búsqueda de números pitagóricos 71 øù úû ü ýþÿ ü (if (> i n) 0 (begin (cicloint i j n) FLFORH[WLMQ ) ) ) ; Función inicial GH¿QHLQLFLRLMQ (cicloext i j n) ) /ODPDGRLQLFLDOHVHOYDORUGH¿QLGRSDUDQ LQLFLR (QOD~OWLPDOtQHDVHHQFXHQWUDHOOODPDGRDODIXQFLyQLQLFLDOTXHDUWLFXOD las funciones para el hallazgo de las ternas pitagóricas. La tabla 2 explica algunas características de cada función. Tabla 2. Descripción de características de las funciones (Trejos, 2015, 90) Función suma pitagoras mostrar2 mostrar1 cicloint cicloext inicio Descripción Esta función calcula el resultado de a2+b2 (VWDIXQFLyQUHWRUQD9HUGDGHURVLORVYDORUHVD\EFRUUHVSRQGHQDGRVGHORVWUHVIDFWRUHV de una terna pitagórica. Retorna Falso (0) si no es cierto Muestra el resultado de la terna pitagórica en formato (a,b,c) Muestra el resultado de la terna pitagórica en formato ampliado (ejemplo) 3^2 = 9, 4^2 = 16 9 + 16 = 25 Raíz Cuadrada de 25 = 5 Terna Pitagórica --> (3,4,5) *HQHUDHOSURFHVRFtFOLFRLQWHUQRTXHSHUPLWDYDOLGDUORVYDORUHVHQHOUDQJRDQGHDFXHUGR a la explicación del numeral 3.1 Descripción *HQHUDHOSURFHVRFtFOLFRH[WHUQRTXHSHUPLWDYDOLGDUORVYDORUHVHQHOUDQJRDQGHDFXHUGR a la explicación del numeral 3.1 Descripción +DFHHOSULPHUOODPDGRGH¿QLHQGRORVYDORUHVSDUDL\MFRPR\SDUDQWRSHGHOUDQJR de validación) 3. Resultados y discusión 3.1 Descripción En cuanto a la ejecución del programa se ha realizado de dos formas: a) mostrando el formato de la función mostrar2 en donde simplemente se despliegan las ternas, b) mostrando el formato de la función mostrar1 en GRQGHVHGHVSOLHJDHOSURFHVRGHYHUL¿FDFLyQ\FDGDWHUQDSLWDJyULFD ö÷ U! "!#!$ %!&'$(! )&! *+,! La tabla 3 muestra algunos resultados con cada llamado. Para efectos de simplicidad se ha ejecutado el programa estableciendo como tope superior del rango de validación el valor 10. Tabla 3. Resultados obtenidos (Trejos, 2015, 91) Función Resultado Obtenido Terna Pitagórica --> (3,4,5) Usando la función mostrar2 Terna Pitagórica --> (4,3,5) Terna Pitagórica --> (6,8,10) Terna Pitagórica --> (8,6,10) Usando la función mostrar1 3^2 = 9, 4^2 = 16 9 + 16 = 25 Raíz Cuadrada de 25 = 5 Terna Pitagórica --> (3,4,5) 4^2 = 16, 3^2 = 9 16 + 9 = 25 Raíz Cuadrada de 25 = 5 Terna Pitagórica --> (4,3,5) 6^2 = 36, 8^2 = 64 36 + 64 = 100 Raíz Cuadrada de 100 = 10 Terna Pitagórica --> (6,8,10) 8^2 = 64, 6^2 = 36 64 + 36 = 100 Raíz Cuadrada de 100 = 10 Terna Pitagórica --> (8,6,10) 6LVHTXLHUHQREWHQHUODVWHUQDVSLWDJyULFDVHQXQUDQJRPiVDPSOLR GHEHFDPELDUVHHOYDORUGH¿QLGRSDUDHODUJXPHQWRn en la última línea GHOSURJUDPDTXHFRUUHVSRQGHDOSULPHUOODPDGRDODIXQFLyQ\TXHSDUD el ejemplo actual tiene un valor de 100. Si por ejemplo, es escribiera el valor 10000 se presentan a continuación los tres primeros resultados \ORVWUHV~OWLPRVUHVXOWDGRVHQIRUPDWRFRPSOHWR A A 5Dt]&XDGUDGDGH Terna Pitagórica --> (3, 4, 5) 73 ./ 01 2 34568 2 96:6;<=>; ? @ABC DEF G HIJ KEF G L 5Dt]&XDGUDGDGH Terna Pitagórica --> (4, 3, 5) A A 5Dt]&XDGUDGDGH 7HUQD3LWDJyULFD! . A A 5Dt]&XDGUDGDGH 7HUQD3LWDJyULFD! A A 5Dt]&XDGUDGDGH 7HUQD3LWDJyULFD! A A 5Dt]&XDGUDGDGH 7HUQD3LWDJyULFD! 3.2 Discusión Si bien la utilización de la recursividad en programación funcional es un posible recurso para resolver un problema, el uso de ciclos también posibilita la solución de los mismos desde una óptica menos desgastante computacionalmente. El uso de un lenguaje de programación como SchemeIDFLOLWDORVFiOFXORVGDGRTXHHVWHOHQJXDMHSHUPLWHXQPDQHMR EDVWDQWHDPSOLRHQFXDQWRDORVGDWRVQXPpULFRV\HVRSHUPLWHTXH QRVHWHQJDQODVOLPLWDFLRQHVTXHRWURVSDUDGLJPDVGHSURJUDPDFLyQ LQYROXFUDQGHELGRDOSUREOHPDGHOHVWDGRFDSDFLGDG\DOPDFHQDPLHQWR de memoria. Si bien la atomización de un programa pudiera parecer un camino más ODUJRSDUDFRQVWUXLUVROXFLRQHV\VDWLVIDFHUREMHWLYRVHVFODURTXHHOJUDQ UpGLWRTXHVHREWLHQHFRQODWpFQLFDdivide y vencerás es la posibilidad de encontrar fácilmente los errores lógicos cuando éstos se presenten. 'HEHDFODUDUVHTXHORVHUURUHVOyJLFRVVRQGLIHUHQWHVDORVGHVLQWD[LV GDGRTXHHVWRVQRSHUPLWHQTXHXQSURJUDPDSXHGDHMHFXWDUVHPLHQWUDV 7- MNOPQRSOTVT TQ WVNOXVYQS ZV[\Y]VT TQ ^OQN[OVS Q _N`QNOQRaV TXHDTXHOORVVtSHURVLQTXHVHJDUDQWLFHQUHVXOWDGRVDFRUGHVFRQODV necesidades. (Q HO SURJUDPD TXH VH SUHVHQWD FRPR VROXFLyQ SXHGH QRWDUVH XQ QLYHO GH DWRPL]DFLyQ VX¿FLHQWH FRPR SDUD GLIHUHQFLDU ODV IXQFLRQHV operativas de las funciones de I/O (Input / Output) o también llamadas funciones de interfaz. En este programa son funciones de interfaz las funciones mostrar2TXHSHUPLWHPRVWUDUHOUHVXOWDGRGHODE~VTXHGDFRQ formato exclusivo de terna pitagórica), mostrar1TXHSHUPLWHPRVWUDU ODWHUQDSLWDJyULFDSHURDGHPiVPXHVWUDHOSURFHVRTXHFRQ¿UPDTXH FXPSOHQFRQHOWHRUHPDGH3LWiJRUDV\ODIXQFLyQinicioFX\RREMHWLYR es establecer los límites tanto inferior como superior para iniciar el SURFHVRGHE~VTXHGD Por su parte, en este programa son funciones puramente operativas o de cálculo la función sumaTXHVHHQFDUJDGHFDOFXODUHOUHVXOWDGR de la expresión a2+b2), la función pitagorasTXHHVODTXHFRQ¿UPDOD H[LVWHQFLDGHXQYDORUHQWHURTXHHTXLYDOHD a 2 b 2 b cde fegehijkl la existencia de una terna pitagórica), la función cicloextTXHGH¿QH HOSURFHVRSDUDTXHVHUHFRUUDGHVGHHOYDORULQLFLDOKDVWDHOYDORU GH¿QLGR Q HQ OD E~VTXHGD GH ORV IDFWRUHV \ OD IXQFLyQ cicloint TXH GH¿QHHOPLVPRSURFHVRSHURFRPRFRPSOHPHQWRDOSULPHUFLFOR(O KHFKRGHSRGHUFODVL¿FDUFODUDPHQWHHVWDVIXQFLRQHVSHUPLWHWHQHUOD SRVLELOLGDGGHHQFRQWUDUIiFLOPHQWHORVHUURUHVTXHVHSXHGDQSUHVHQWDU En el caso de encontrar errores en los procesos de cálculo entonces es claro éstos podrán estar en las funciones operativas suma, pitagoras, cicloext \ cicloint. Las funciones reconocidas como de interfaz son, SUREDEOHPHQWHODVTXHPHQRVLQFLGHQHQORVHUURUHVOyJLFRVVDOYRHQ FDVRVH[FHSFLRQDOHV6LWHQHPRVHQFXHQWDTXHHOSURJUDPDFXHQWD HQWRWDOFRQVLHWHIXQFLRQHV\TXHFXDWURGHHOODVVRQRSHUDWLYDV\TXH DGHPiVVRQDTXHOODVHQGRQGHSXHGHQHVWDUSRWHQFLDOPHQWHORVHUURUHV OyJLFRVHQWRQFHVVHSXHGHGHFLUTXHVHKDUHVXHOWRGDGRTXHXQDVLPSOH revisión somera puede llegar a garantizar las funciones de interfaz. /DV SRVLELOLGDGHV TXH RIUHFH OD SURJUDPDFLyQ IXQFLRQDO UHVXOWD VHU LQWHUHVDQWHFRPRIRUPDGHVROXFLyQDSUREOHPDVTXHODPDWHPiWLFD SURYHH DXQTXH QR VH SXHGH QHJDU TXH OD FRQVWUXFFLyQ GH FLFORV UHFXUVLYRV DQLGDGRV UHVXOWD VHU XQ SRFR PiV FRPSOHMD TXH OD FRQVWUXFFLyQGHFLFORVHVWUXFWXUDGRVDQLGDGRVGDGRTXHpVWRVDFXGHQ DOFRQFHSWRGHHVWDGRSDUDDOPDFHQDUORVGDWRVPLHQWUDVTXHDTXHOORV acuden al proceso como tal sin la intermediación de la memoria como base para el control del programa. 75 op qr s tuvwx s ywzw{|}~{ estudiantes tanto la posibilidad de encontrar nuevos caminos de FRQVWUXFFLyQHQODVVROXFLRQHVDOJRUtWPLFDV\DVtPLVPRODRSFLyQ de encontrar nuevos horizontes de problemas en donde la tecnología, OD DOJRULWPLD \ ORV OHQJXDMHV GH SURJUDPDFLyQ SXHGDQ OOHJDU D VHU solución. Si bien las ternas pitagóricas pueden calcularse de manera PDQXDOHVFODURTXHODLQWHUYHQFLyQGHODFRPSXWDFLyQIDFLOLWDPXFKR HOKDOOD]JRGHGLFKRVQ~PHURV\SHUPLWHTXHHOVHUKXPDQRSXHGD GHGLFDUVHDDQDOL]DU\REWHQHULQIHUHQFLDVDSDUWLUGHORVUHVXOWDGRVTXH HVWRVSURJUDPDVHQWUHJDQTXHUHVXOWDQVHUWDUHDVPiVJUDWL¿FDQWHV FRPSDUDQGRODSRVLELOLGDGHVGHUD]RQDPLHQWR\GHOLEHUDFLyQGHORV seres humanos. )LQDOPHQWHYDOHODSHQDWHQHUHQFXHQWDTXHHVWHWLSRGHHMHUFLFLRV OHFRQ¿HUHQYLGDSUiFWLFDDWDQWRDORVFRQFHSWRVTXHVHGHULYDQGHOD SURJUDPDFLyQGHFRPSXWDGRUHVFRPRDORVSUREOHPDVTXHVHSXHGHQ GHULYDUGHRWUDVFLHQFLDVTXHHQHOFDVRSUHVHQWHVRQODVPDWHPiWLFDV SHUPLWLHQGRTXHXQDVHDDOLPHQWRGHODRWUD\TXHODRWUDVHDVROXFLyQ GHODSULPHUD7RGRHVWRSHUPLWHTXHHOHVWXGLDQWHHQFXHQWUHPD\RU VLJQL¿FDGR\PiVVHQWLGRDORVFRQFHSWRVTXHLQWHQWHDSUHQGHUGHQWUR de un curso de programación de computadores en donde el paradigma funcional sea la base para su contenido temático. (VLPSRUWDQWHGHWHQHUVHXQSRFRSDUDUHYLVDUODOyJLFDGHODTXHSRGUtD llamarse la función principal de este programa, como es la función pitagoras: )XQFLyQ VLPSOH TXH FRQ¿UPD OD H[LVWHQFLD GH XQD WHUQD pitagórica GH¿QHSLWDJRUDVDE LI VTUWVXPDDEÀRRUVTUWVXPDDE )) /DOyJLFDGHHVWDIXQFLyQHVPX\VHQFLOODVLPSOHPHQWHVHFRPSDUDHO resultado de obtener la raíz cuadrada de la suma de los cuadrados con ODSDUWHHQWHUDGHHVDPLVPDUDt](QFDVRGHTXHHVWRVGRVYDORUHV VHDQLJXDOHVVLJQL¿FDTXHH[LVWHXQYDORUHQWHURTXHFRPSOHWDODWHUQD SLWDJyULFDSXHVORVGRVYDORUHVPHQRUHVVHUtDQORVFDWHWRV\HVWHYDORU encontrado correspondería a la hipotenusa del triángulo rectángulo. Se acude a esta como una forma sencilla de encontrar la existencia del tercer elemento de la terna pitagórica. mn ¡¢£ ¤ ¥¢ ¦§¨ 4. Conclusiones 6LHPSUH HV SRVLEOH HQFRQWUDU FDPSRV HQ GLIHUHQWHV iUHDV \ especialmente las matemáticas, de donde se puedan extraer problemas TXH D VX YH] SXHGDQ VHU UHVXHOWRV FRQ ORV FRQRFLPLHQWRV TXH OD programación provee. /D SURJUDPDFLyQ IXQFLRQDO HV XQD DOWHUQDWLYD PX\ LQWHUHVDQWH SDUD HQFRQWUDU VROXFLyQ D SUREOHPDV GH ODV PDWHPiWLFDV \ GH PDQHUD especial el lenguaje SchemeGDGRTXHpVWHSHUPLWHODPDQLSXODFLyQ GHGDWRVQXPpULFRVFRQPXFKDPiVDPSOLWXGTXHODTXHSHUPLWHQORV OHQJXDMHVLPSHUDWLYRVTXHHVWiQVXMHWRVDWDPDxRV\FDUDFWHUtVWLFDVGH DOPDFHQDPLHQWRGH¿QLGDVSRUVXVUHVSHFWLYRVWLSRVGHGDWRV Se hace necesario, desde la óptica de la enseñanza de los lenguajes GHSURJUDPDFLyQTXHVHSURSRQJDQHMHUFLFLRVTXHWHQJDQUHODFLyQFRQ RWUDVFLHQFLDVSDUDTXHVHOHFRQ¿HUDVLJQL¿FDGR\VHQWLGRDDPEDV áreas de conocimiento. La técnica divide y vencerás posibilita la construcción de soluciones TXH VL ELHQ SXHGHQ HVWDU FRQVWUXLGDV VREUH XQD EDVH PX\ YDULDGD SRU OD FDQWLGDG GH IXQFLRQHV TXH LQWHUYLHQHQ WDPELpQ SRVLELOLWDQ OD FRPSUHQVLyQ\HOPDQWHQLPLHQWRGHOSURJUDPDGDGRTXHVXDWRPL]DFLyQ VLPSOL¿FDODVROXFLyQHQVtDFRVWDGHOFyGLJRFRPRWDO La posibilidad de poder probar parcialmente un programa, tal como lo permite el entorno DrRacket usando el lenguaje de programación Scheme, HV XQD IXHUWH KHUUDPLHQWD TXH QRV D\XGD D HQFRQWUDU oportunamente errores tanto lógicos como sintácticos. (O UHFRQRFLPLHQWR FODUR GH ODV IXQFLRQHV TXH VRQ GH LQWHUID] \ ODV IXQFLRQHV TXH VRQ GH FiOFXOR X RSHUDWLYDV SHUPLWH TXH VH SXHGDQ GHWHFWDU\VXSHUDUORVSUREOHPDVOyJLFRVTXHVHSXGLHUHQSUHVHQWDUHQ la ejecución de un programa. 77 «¬ ® ¯ °±²³´ ¯ µ³¶³·¸¹º· » ¼½¾¿ ÀÁÂÁÃÁÄÅÆÇÈ ÉÆÉÊÆËÌÃÍÎÅÇÈ $868%(/'6LFRORJtD(GXFDWLYD8QSXQWRGHYLVWDFRJQRVFLWLYR&LXGDGGH0p[LFR 0p[LFR7ULOODVS,6%1: %2<(5&%+LVWRULDGHOD0DWHPiWLFD0DGULG(VSDxD$OLDQ]D(GLWRULDOS,6%1 %581(5 -6 +DFLD XQ WHRUtD GH OD LQVWUXFFLyQ &LXGDG GH 0p[LFR 0p[LFR +LVSDQRDPHULFDQDS,6%1 %581(5 -6 $FWRV GH VLJQL¿FDGR 0DGULG (VSDxD$OLDQ]D (GLWRULDO S ,6%1 &$/'(5Ë1$%$' < 3URSXHVWD GH DFFLRQHV LQWHUGLVFLSOLQDULDV D GHVDUUROODU GHVGH OD GLQiPLFDGHXQDFODVHGHODDVLJQDWXUD0HWRGRORJtDGHOD,QYHVWLJDFLyQ&LHQWt¿FD^HQOtQHD@ (Q5HYLVWD(OHFWUyQLFD(GX6RO9RO1RMXOVHS*XDQWiQDPR&XED8QLYHUVLGDG de Guantánamo p. 1- 10. ISSN: 1729-8091 <http://edusol.cug.co.cu/index.php/EduSol/article/ YLHZSGIB!>FRQVXOWD@ &+$%(57 -/ $ KLVWRU\ RI DOJRULWKPV )URP WKH 3HEEOH WR WKH 0LFURFKLS +HLGHOEHUJ *HUPDQ\ 6SULQJHU %HUOLQ +HLGHOEHUJ S H,6%1 GRLB!>FRQVXOW@ )(//(,6(10),1'/(55)/$70.5,6+1$0857+,6+RZWRGHVLJQSURJUDPV HG%RVWRQ0$86$0,73UHVVS,6%1 KLINE, M. (2012). El pensamiento matemático de la antiguedad a nuestros días. Madrid (España): $OLDQ]D(GLWRULDOS,6%1 3$=3(1$*26+¢&yPRGHVDUUROODUODPHWDFRJQLFLyQHQODHGXFDFLyQVXSHULRUPHGLDQWH ODUHVROXFLyQGHSUREOHPDV"How to develop metacognition through problem solving in higher education [en línea]. (Q,QJHQLHUtDH,QYHVWLJDFLyQ9RO1RDSU%RJRWi&RORPELD 8QLYHUVLGDG1DFLRQDOGH&RORPELDSH,661KWWSZZZUHGDO\FRUJ SGISGI!>FRQVXOWD@ 3$=3(1$*26+$SUHQGL]DMHDXWyQRPR\HVWLORFRJQLWLYRGLVHxRGLGiFWLFRPHWRGRORJtD \HYDOXDFLyQ(Q5HYLVWD(GXFDFLyQHQ,QJHQLHUtD9RO1RHQHMXQ%RJRWi&RORPELD $VRFLDFLyQ&RORPELDQDGH)DFXOWDGHVGH,QJHQLHUtD$&2),SISSN:1900-8260 <http:// ZZZHGXFDFLRQHQLQJHQLHULDRUJLQGH[SKSHGLDUWLFOHYLHZ!>FRQVXOWD@ 5(<3$6725-%$%,1,-Historia de la Matemática: De la antigüedad a la baja edad PHGLD%DUFHORQD(VSDxD(GLWRULDO*HGLVDS,6%1 5221(<$+LVWRULDGHODV0DWHPiWLFDV'HVGHODFRQVWUXFFLyQGHODVSLUiPLGHVDOD H[SORUDFLyQGHOLQ¿QLWR%DUFHORQD(VSDxD2QLURS,6%1 63$5.6-&7KH3\WKDJRUHDQ7KHRUHP&URZQ-HZHORI0DWKHPDWLFV%ORRPLQJWRQ,1 86$$XWKRU+RXVHS,6%1 67(:$57,+LVWRULDGHODV0DWHPiWLFDVHQORV~OWLPRVDxRV%DUFHORQD(VSDxD (GLWRULDO&UtWLFDS,6%1 75(-26%85,7,&È2,$SUHQGL]DMHHQ,QJHQLHUtDXQSUREOHPDGHFRPXQLFDFLyQ7HVLV 'RFWRUDO'RFWRUHQ&LHQFLDVGHOD(GXFDFLyQ3HUHLUD&RORPELD8QLYHUVLGDG7HFQROyJLFD GH3HUHLUDS 75(-26%85,7,&È2,&RPSDUDFLyQGHGRVDOJRULWPRVSDUDKDOODUWHUQDVSLWDJyULFDV usando dos paradigmas de programación diferentes. En: Entre Ciencia e Ingeniería, Vol. 9, 1RMXOGLF3HUHLUD&RORPELD8QLYHUVLGDG&DWyOLFDGH3HUHLUDSISSN: 1909-8367 9$152<3+$5,',6&RQFHSWV7HFKQLTXHVDQG0RGHOVRI&RPSXWHU3URJUDPPLQJ &DPEULGJH0$86$7KH0,73UHVVS,6%1 ©ª