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: [email protected]
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 ~ lpsvvx€nlyst 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
©ª