{"id":677,"date":"2014-04-07T22:15:47","date_gmt":"2014-04-07T21:15:47","guid":{"rendered":"http:\/\/descartesjs.org\/documentacion\/?p=677"},"modified":"2021-08-07T16:08:26","modified_gmt":"2021-08-07T15:08:26","slug":"funciones","status":"publish","type":"post","link":"https:\/\/reddescartes.org\/documentacion\/funciones\/","title":{"rendered":"Funciones"},"content":{"rendered":"<p style=\"text-align: justify;\">Las <strong>funciones<\/strong> se definen en el apartado de <strong>Definiciones. <\/strong>Las<strong> funciones<\/strong><strong>\u00a0<\/strong><span style=\"line-height: 1.5em;\">asignan un n\u00famero real a cada\u00a0<\/span><i style=\"line-height: 1.5em;\">valor<\/i><span style=\"line-height: 1.5em;\">\u00a0de su\u00a0<\/span><i style=\"line-height: 1.5em;\">variable<\/i><span style=\"line-height: 1.5em;\">\u00a0(o a cada\u00a0<\/span><i style=\"line-height: 1.5em;\">conjunto de valores<\/i><span style=\"line-height: 1.5em;\">\u00a0de sus variables). Las funciones tienen un identificador (o nombre), una o m\u00e1s\u00a0<\/span><i style=\"line-height: 1.5em;\">variables<\/i><span style=\"line-height: 1.5em;\">\u00a0(que no son m\u00e1s que una lista de identificadores) y\u00a0 una expresi\u00f3n en t\u00e9rminos de esas variables.<\/span><\/p>\n<p>Estos son ejemplos de funciones de una variable con sus identificadores y sus variables:<\/p>\n<div align=\"center\">\n<table style=\"background-color: lightblue; font-size: 16px; color: black; height: 250px; width: 450px;\" border=\"1\" cellpadding=\"0\">\n<tbody>\n<tr style=\"background-color: #73a53e;\" align=\"center\" valign=\"middle\">\n<td style=\"background-color: #73a53e; border: 1px solid #000000;\">\n<p align=\"center\"><strong>Expresi\u00f3n<\/strong><\/p>\n<\/td>\n<td style=\"background-color: #73a53e; border: 1px solid #000000;\">\n<p align=\"center\"><strong>Identificador<\/strong><\/p>\n<\/td>\n<td style=\"background-color: #73a53e; border: 1px solid #000000;\">\n<p align=\"center\"><strong>Variable<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"background-color: #eeeeee;\">\n<p align=\"center\"><b>f(x)=sen(3*x+2)<\/b><\/p>\n<\/td>\n<td style=\"background-color: #eeeeee;\">\n<p align=\"center\"><b>f<\/b><\/p>\n<\/td>\n<td style=\"background-color: #eeeeee;\">\n<p align=\"center\"><b>x<\/b><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"background-color: #eeeeee;\">\n<p align=\"center\"><b>g(y)=A*exp(-(y^2)\/(s^2))<\/b><\/p>\n<\/td>\n<td style=\"background-color: #eeeeee;\">\n<p align=\"center\"><b>g<\/b><\/p>\n<\/td>\n<td style=\"background-color: #eeeeee;\">\n<p align=\"center\"><b>y<\/b><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"background-color: #eeeeee;\">\n<p align=\"center\"><b>Area(radio)=(pi*radio^2)\/2<\/b><\/p>\n<\/td>\n<td style=\"background-color: #eeeeee;\">\n<p align=\"center\"><b>Area<\/b><\/p>\n<\/td>\n<td style=\"background-color: #eeeeee;\">\n<p align=\"center\"><b>radio<\/b><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>Estos son ejemplos de funciones de dos o m\u00e1s variables con sus identificadores y sus variables:<\/p>\n<div align=\"center\">\n<table style=\"background-color: lightblue; font-size: 16px; color: black; width: 450px;\" border=\"1\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td style=\"border: 1px solid #000000; background-color: #73a53e;\">\n<p align=\"center\"><strong>Expresi\u00f3n<\/strong><\/p>\n<\/td>\n<td style=\"border: 1px solid #000000; background-color: #73a53e;\">\n<p align=\"center\"><strong>Identificador<\/strong><\/p>\n<\/td>\n<td style=\"border: 1px solid #000000; background-color: #73a53e;\">\n<p align=\"center\"><strong>Variables<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"background-color: #eeeeee;\">\n<p align=\"center\"><b>f(x,y)=ra\u00edz(x^2+y^2)<\/b><\/p>\n<\/td>\n<td style=\"background-color: #eeeeee;\">\n<p align=\"center\"><b>f<\/b><\/p>\n<\/td>\n<td style=\"background-color: #eeeeee;\">\n<p align=\"center\"><b>x, y<\/b><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"background-color: #eeeeee;\">\n<p align=\"center\"><b>Fun(x,y,z)<\/b><\/p>\n<\/td>\n<td style=\"background-color: #eeeeee;\">\n<p align=\"center\"><b>Fun<\/b><\/p>\n<\/td>\n<td style=\"background-color: #eeeeee;\">\n<p align=\"center\"><b>x, y, z<\/b><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"background-color: #eeeeee;\">\n<p align=\"center\"><b>Volumen(a,b,c)=4*pi*a*b*c\/3<\/b><\/p>\n<\/td>\n<td style=\"background-color: #eeeeee;\">\n<p align=\"center\"><b>Volumen<\/b><\/p>\n<\/td>\n<td style=\"background-color: #eeeeee;\">\n<p align=\"center\"><b>a, b, c<\/b><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p style=\"text-align: justify;\">Los nombres espec\u00edficos de las variables de una funci\u00f3n no son importantes, s\u00f3lo sirven para identificar las variables dentro de la expresi\u00f3n y asignarles all\u00ed un papel.\u00a0Las funciones se eval\u00faan nada m\u00e1s cuando son llamadas expl\u00edcitamente (por ejemplo por un\u00a0<b>algoritmo<\/b>, por un\u00a0<b>gr\u00e1fico<\/b>, por la\u00a0<b>animaci\u00f3n<\/b>\u00a0o por la constricci\u00f3n de un control gr\u00e1fico que se mueve).\u00a0El panel de configuraci\u00f3n de una funci\u00f3n tiene este aspecto:<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/descartesjs.org\/documentacion\/wp-content\/uploads\/2014\/04\/panel_funcion.png\"><img class=\"wp-image-707 aligncenter\" src=\"https:\/\/descartesjs.org\/documentacion\/wp-content\/uploads\/2014\/04\/panel_funcion.png\" alt=\"panel_funcion\" width=\"601\" height=\"383\" srcset=\"https:\/\/reddescartes.org\/documentacion\/wp-content\/uploads\/2014\/04\/panel_funcion.png 834w, https:\/\/reddescartes.org\/documentacion\/wp-content\/uploads\/2014\/04\/panel_funcion-300x191.png 300w\" sizes=\"(max-width: 601px) 100vw, 601px\" \/><\/a><\/p>\n<p style=\"text-align: left;\">En las siguientes escenas, podemos verificar el funcionamiento de algunas funciones y la forma como fueron creadas en el panel de configuraci\u00f3n.<\/p>\n<p style=\"text-align: left; color: #00f;\"><span style=\"color: #73a53e;\"><b>Escena con funciones de una sola variable.<\/b><\/span><\/p>\n<p style=\"text-align: center;\">\n<!-- iframe plugin v.4.5 wordpress.org\/plugins\/iframe\/ -->\n<iframe src=\"https:\/\/descartesjs.org\/repositorio\/documentacion_4D\/Funciones_JS\/funcion1.html\" width=\"610\" height=\"420\" scrolling=\"yes\" class=\"iframe-class\" frameborder=\"0\"><\/iframe>\n<\/p>\n<p style=\"text-align: center;\">(Todas las escenas de este art\u00edculo puede descargarlas desde <a href=\"https:\/\/descartesjs.org\/repositorio\/documentacion_4D\/Funciones_JS.zip\">este enlace<\/a>)<\/p>\n<p style=\"text-align: left; color: #00f;\"><span style=\"color: #73a53e;\"><b>Escena con funciones de dos o m\u00e1s variables:<\/b><\/span><\/p>\n<p style=\"text-align: center;\">\n<!-- iframe plugin v.4.5 wordpress.org\/plugins\/iframe\/ -->\n<iframe src=\"https:\/\/descartesjs.org\/repositorio\/documentacion_4D\/Funciones_JS\/funcion2.html\" width=\"610\" height=\"440\" scrolling=\"yes\" class=\"iframe-class\" frameborder=\"0\"><\/iframe>\n<\/p>\n<p style=\"text-align: left;\">Cada uno de los elementos del panel de configuraci\u00f3n, se explican en la siguiente tabla:<\/p>\n<div align=\"center\">\n<table style=\"background-color: lightblue; font-size: 15px; color: black; height: 250px; width: 580px;\" border=\"1\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td style=\"background-color: #eeeeee;\">\n<p align=\"center\"><b>id<\/b><\/p>\n<\/td>\n<td style=\"background-color: #eeeeee;\">Consta de dos campos de texto. En el primero se especifica el identificador de la funci\u00f3n y debe incluir los\u00a0par\u00e1metros de los que dependa escritos entre par\u00e9ntesis y\u00a0separados por comas. Por ejemplo:\u00a0<strong>f(x, y, z)<\/strong>. En el segundo se detalla una expresi\u00f3n que ser\u00e1 el valor a asignara como imagen a esa funci\u00f3n.<\/td>\n<\/tr>\n<tr>\n<td style=\"background-color: #eeeeee;\">\n<p align=\"center\"><b>dominio<\/b><\/p>\n<\/td>\n<td style=\"background-color: #eeeeee;\">Es una expresi\u00f3n booleana que determina el dominio de la funci\u00f3n. Cualquier intento de evaluar la funci\u00f3n fuera de su dominio\u00a0lanzar\u00e1 una excepci\u00f3n, con lo cual, por ejemplo, su gr\u00e1fica no se\u00a0dibuja en los puntos que no est\u00e1n en el dominio.El valor por defecto es vac\u00edo, lo cual se interpreta como que el\u00a0dominio no est\u00e1 restringido.<\/td>\n<\/tr>\n<tr>\n<td style=\"background-color: #eeeeee;\">\n<p align=\"center\"><b>algoritmo<\/b><\/p>\n<\/td>\n<td style=\"background-color: #eeeeee;\">Selector que indica si la funci\u00f3n, para evaluarse, debe usar un\u00a0algoritmo, es decir, si necesita los c\u00e1lculos indicados en\u00a0\u00abinicio\u00bb, \u00abhacer\u00bb y \u00abmientras\u00bb (ver, al final, un ejemplo para el c\u00e1lculo del factorial).<\/td>\n<\/tr>\n<tr>\n<td style=\"background-color: #eeeeee;\">\n<p align=\"center\"><b>inicio<\/b><\/p>\n<\/td>\n<td style=\"background-color: #eeeeee;\">En el campo \u00abinicio\u00bb pueden escribirse una serie de asignaciones\u00a0y llamadas a funciones separadas por punto y coma \u00ab;\u00bb. Todo lo que haya en este campo se ejecuta al inicio del c\u00e1lculo.<\/td>\n<\/tr>\n<tr>\n<td style=\"background-color: #eeeeee;\">\n<p align=\"center\"><b>hacer<\/b><\/p>\n<\/td>\n<td style=\"background-color: #eeeeee;\">En el campo \u00abhacer\u00bb puede escribirse una serie de asignaciones y\u00a0llamadas a funciones separadas por saltos de l\u00ednea. Lo que hay en \u00abhacer\u00bb se ejecuta repetidamente mientras la\u00a0condici\u00f3n \u00abmientras\u00bb sea v\u00e1lida.<\/td>\n<\/tr>\n<tr>\n<td style=\"background-color: #eeeeee;\">\n<p align=\"center\"><b>mientras<\/b><\/p>\n<\/td>\n<td style=\"background-color: #eeeeee;\">En el campo \u00abmientras\u00bb se debe escribir una expresi\u00f3n booleana. Lo que hay en \u00abhacer\u00bb se ejecuta repetidamente mientras la\u00a0condici\u00f3n \u00abmientras\u00bb sea v\u00e1lida.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"text-align: justify;\">El campo donde aparece el identificador de la funci\u00f3n (a la izquierda del signo = ) debe incluir los identificadores de las variables entre par\u00e9ntesis y separados por comas, para dar sentido a la expresi\u00f3n que aparece al lado derecho. La expresi\u00f3n que aparece a la derecha del signo = puede ser, o incluir, un t\u00e9rmino\u00a0<b>condicional<\/b>, por ejemplo:<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0<b>func(x)=(x&lt;0)?0:1<\/b><\/p>\n<p style=\"text-align: justify;\">es la funci\u00f3n que vale\u00a0<b>0<\/b>\u00a0para<b>\u00a0<\/b><b>x&lt;0<\/b>\u00a0y\u00a0<b>1<\/b>\u00a0para\u00a0<b>x&gt;=0<\/b>. Una\u00a0<b>expresi\u00f3n booleana<\/b>\u00a0vale\u00a0<b>1<\/b>\u00a0cuando es verdadera y\u00a0<b>0<\/b>\u00a0cuando es falsa por lo cual la funci\u00f3n anterior tambi\u00e9n podr\u00eda escribirse como<\/p>\n<p><b>func(x)=(x&gt;=0)<\/b>,<\/p>\n<p style=\"text-align: left;\">o bien usando la funci\u00f3n indicadora ind, tambi\u00e9n podr\u00eda escribirse como:<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0<b>func(x)=ind(x&gt;=0)<\/b>,<\/p>\n<p style=\"text-align: justify;\">Aparte de las funciones que se definen expl\u00edcitamente en cada escena por parte del desarrollador de la misma,\u00a0Descartes incluye una serie de <a href=\"https:\/\/descartesjs.org\/documentacion\/?p=949\">funciones matem\u00e1ticas b\u00e1sicas<\/a>,\u00a0un conjunto de <a href=\"https:\/\/descartesjs.org\/documentacion\/?p=1880\">operadores<\/a>\u00a0y <a href=\"https:\/\/descartesjs.org\/documentacion\/?p=1881\">palabras reservadas<\/a> que son reconocidas por el analizador de expresiones. Estas funciones, operadores y palabras reservadas pueden usarse en cualquier sitio donde Descartes espera una expresi\u00f3n, incluyendo el campo de texto de un control num\u00e9rico.<\/p>\n<p style=\"text-align: justify;\">El\u00a0<b>dominio<\/b>\u00a0puede ser una expresi\u00f3n booleana en t\u00e9rminos de las variables de la funci\u00f3n. El programa utiliza el\u00a0<b>dominio<\/b>\u00a0para decidir si intenta evaluar la funci\u00f3n. Si en un punto la expresi\u00f3n del dominio no se cumple, la evaluaci\u00f3n no se intenta y el programa genera una excepci\u00f3n, con lo cual, si se est\u00e1 dibujando por ejemplo la gr\u00e1fica de esta funci\u00f3n, el dibujo que corresponde a este punto no se realiza\u00a0 y se pasa al siguiente. Cuando el campo del\u00a0<b>domino<\/b>\u00a0est\u00e1\u00a0<b>vac\u00edo<\/b>\u00a0se considera que el dominio de la funci\u00f3n no tiene restricciones, es decir, cualquier conjunto de valores de sus variables est\u00e1 en el dominio.<\/p>\n<p style=\"text-align: justify;\">Cuando el programa intenta evaluar una funci\u00f3n en un punto donde tiene una singularidad, se genera una interrupci\u00f3n, igual que si el punto no estuviera en el\u00a0<b>dominio<\/b>. Por lo tanto no es necesario excluir del dominio de una funci\u00f3n sus puntos singulares, el programa ya lo hace autom\u00e1ticamente. S\u00f3lo hay que especificar el\u00a0<b>dominio<\/b>\u00a0si se desea restringir el dominio natural de una funci\u00f3n.<\/p>\n<p style=\"text-align: justify;\">A veces\u00a0<b>no<\/b>\u00a0se puede definir una funci\u00f3n solamente mediante una expresi\u00f3n, sino que su evaluaci\u00f3n requiere un proceso m\u00e1s complicado. En estos casos el autor puede marcar\u00a0<b>algoritmo<\/b>, con lo cual la evaluaci\u00f3n de la funci\u00f3n realiza antes el algoritmo definido en los campos de texto etiquetados con\u00a0<b>inicio<\/b>,\u00a0<b>hacer<\/b>\u00a0y\u00a0<b>mientras<\/b>\u00a0(consultar\u00a0<a href=\"https:\/\/descartesjs.org\/documentacion\/?p=1898\">Algoritmos<\/a>\u00a0para el significado de estos t\u00e9rminos).\u00a0 En estos campos el autor puede describir el algoritmo de evaluaci\u00f3n de la funci\u00f3n.\u00a0El siguiente ejemplo muestra c\u00f3mo puede\u00a0una funci\u00f3n utilizar un algoritmo. Se trata de una funci\u00f3n\u00a0<b>Fact(x)<\/b>\u00a0que calcula el\u00a0<b>factorial<\/b>\u00a0del mayor entero menor o igual que\u00a0<b>x<\/b>, para\u00a0<b>x&gt;=0<\/b>.<\/p>\n<p style=\"text-align: left;\">En la siguiente escena, podemos calcular el factorial de un n\u00famero entero positivo. Si intentamos con un n\u00famero negativo, nos dir\u00e1 que la funci\u00f3n no est\u00e1 definida, que confirma la restricci\u00f3n del dominio (ver la siguiente imagen con el algoritmo de la funci\u00f3n).<\/p>\n<p style=\"text-align: center;\">\n<!-- iframe plugin v.4.5 wordpress.org\/plugins\/iframe\/ -->\n<iframe src=\"https:\/\/descartesjs.org\/repositorio\/documentacion_4D\/Funciones_JS\/funcion3.html\" width=\"370\" height=\"240\" scrolling=\"yes\" class=\"iframe-class\" frameborder=\"0\"><\/iframe>\n<\/p>\n<p style=\"text-align: left;\"><a href=\"https:\/\/descartesjs.org\/documentacion\/wp-content\/uploads\/2014\/04\/Funcion_algoritmo.png\"><img class=\"size-full wp-image-734 aligncenter\" src=\"https:\/\/descartesjs.org\/documentacion\/wp-content\/uploads\/2014\/04\/Funcion_algoritmo.png\" alt=\"Funcion_algoritmo\" width=\"821\" height=\"527\" srcset=\"https:\/\/reddescartes.org\/documentacion\/wp-content\/uploads\/2014\/04\/Funcion_algoritmo.png 821w, https:\/\/reddescartes.org\/documentacion\/wp-content\/uploads\/2014\/04\/Funcion_algoritmo-300x192.png 300w\" sizes=\"(max-width: 821px) 100vw, 821px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">El algoritmo que se define en este panel se ejecuta cada vez que se quiere evaluar la funci\u00f3n, por lo cual los valores calculados en el algoritmo pueden utilizarse para definir el valor de la funci\u00f3n.<\/p>\n<p style=\"text-align: justify;\">Las funciones pueden tener cualquier n\u00famero de variables, incluso cero. Para evaluar una funci\u00f3n sin variables se debe escribir un par de par\u00e9ntesis despu\u00e9s de su nombre (por ejemplo\u00a0<b>func()<\/b>). \u00a0 Las funciones sin variables pueden servir como algoritmos de c\u00e1lculo que devuelven un valor real. Tambi\u00e9n puede haber funciones que no devuelven ning\u00fan valor, las cuales pueden usarse como algoritmos que admiten par\u00e1metros.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Las funciones se definen en el apartado de Definiciones. Las funciones\u00a0asignan un n\u00famero real a cada\u00a0valor\u00a0de su\u00a0variable\u00a0(o a cada\u00a0conjunto de valores\u00a0de sus variables). Las funciones tienen un identificador (o nombre), una o m\u00e1s\u00a0variables\u00a0(que no son m\u00e1s que una lista de identificadores) y\u00a0 una expresi\u00f3n en t\u00e9rminos de esas variables. Estos son ejemplos de funciones de una variable con sus identificadores y sus variables: Expresi\u00f3n Identificador Variable f(x)=sen(3*x+2) f x g(y)=A*exp(-(y^2)\/(s^2)) g y Area(radio)=(pi*radio^2)\/2 Area radio Estos son ejemplos de funciones de dos o m\u00e1s variables con sus identificadores y sus variables: Expresi\u00f3n Identificador Variables f(x,y)=ra\u00edz(x^2+y^2) f x, y Fun(x,y,z) Fun<\/p>\n<a class=\"more-link\" rel=\"nofollow\" href=\"https:\/\/reddescartes.org\/documentacion\/funciones\/\">[Leer m\u00e1s...]<\/a>","protected":false},"author":6,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[27],"tags":[52],"_links":{"self":[{"href":"https:\/\/reddescartes.org\/documentacion\/wp-json\/wp\/v2\/posts\/677"}],"collection":[{"href":"https:\/\/reddescartes.org\/documentacion\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/reddescartes.org\/documentacion\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/reddescartes.org\/documentacion\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/reddescartes.org\/documentacion\/wp-json\/wp\/v2\/comments?post=677"}],"version-history":[{"count":72,"href":"https:\/\/reddescartes.org\/documentacion\/wp-json\/wp\/v2\/posts\/677\/revisions"}],"predecessor-version":[{"id":3496,"href":"https:\/\/reddescartes.org\/documentacion\/wp-json\/wp\/v2\/posts\/677\/revisions\/3496"}],"wp:attachment":[{"href":"https:\/\/reddescartes.org\/documentacion\/wp-json\/wp\/v2\/media?parent=677"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/reddescartes.org\/documentacion\/wp-json\/wp\/v2\/categories?post=677"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/reddescartes.org\/documentacion\/wp-json\/wp\/v2\/tags?post=677"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}