{"id":1898,"date":"2014-06-23T10:23:33","date_gmt":"2014-06-23T08:23:33","guid":{"rendered":"http:\/\/descartesjs.org\/documentacion\/?p=1898"},"modified":"2021-08-06T16:29:16","modified_gmt":"2021-08-06T15:29:16","slug":"algoritmos","status":"publish","type":"post","link":"https:\/\/reddescartes.org\/documentacion\/algoritmos\/","title":{"rendered":"Algoritmos"},"content":{"rendered":"<p><span style=\"line-height: 1.5em;\">Los algoritmos constituyen un sistema sencillo para inicializar vectores y para&nbsp;<\/span>programar procesos de c\u00e1lculo m\u00e1s o menos complejos.<\/p>\n<p>Los algoritmos hasta la versi\u00f3n 4 de Descartes eran auxiliares de la escena y pod\u00edan definirse en el panel de configuraci\u00f3n de Auxiliares el cual no existe en la versi\u00f3n 5. Por compatibilidad hacia atr\u00e1s&nbsp;entre las versiones, si una escena anterior a la versi\u00f3n 5 es editada con el gestor de escenas de esta versi\u00f3n, &nbsp;\u00e9ste incorpora todos los algoritmos al panel de <a href=\"https:\/\/descartesjs.org\/documentacion\/?p=1247\">Programa<\/a>, donde podr\u00e1n editarse, pero no pueden incorporarse m\u00e1s salvo que la edici\u00f3n se realice directamente en el campo de edici\u00f3n de texto. No obstante, es aconsejable no incorporar m\u00e1s algoritmos sino definirlos como <a href=\"https:\/\/descartesjs.org\/documentacion\/?p=677\">funciones algor\u00edtmicas<\/a>.<\/p>\n<p>En la versi\u00f3n 5 hay dos \u00fanicos algoritmos, accesibles desde el panel de Programa, que son <a href=\"https:\/\/descartesjs.org\/documentacion\/?p=1245\">INICIO<\/a> y <a href=\"https:\/\/descartesjs.org\/documentacion\/?p=507\">C\u00c1LCULOS<\/a>.<\/p>\n<p>Los par\u00e1metros de un algoritmo son los siguientes (ver imagen):<\/p>\n<div id=\"attachment_1902\" style=\"width: 634px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/descartesjs.org\/documentacion\/wp-content\/uploads\/2014\/06\/algpnl.png\"><img aria-describedby=\"caption-attachment-1902\" class=\"size-full wp-image-1902\" src=\"https:\/\/descartesjs.org\/documentacion\/wp-content\/uploads\/2014\/06\/algpnl.png\" alt=\"Par\u00e1metros de un algoritmo\" width=\"624\" height=\"329\" srcset=\"https:\/\/reddescartes.org\/documentacion\/wp-content\/uploads\/2014\/06\/algpnl.png 624w, https:\/\/reddescartes.org\/documentacion\/wp-content\/uploads\/2014\/06\/algpnl-300x158.png 300w\" sizes=\"(max-width: 624px) 100vw, 624px\" \/><\/a><p id=\"caption-attachment-1902\" class=\"wp-caption-text\">Par\u00e1metros de un algoritmo<\/p><\/div>\n<table style=\"width: 90%;\" border=\"3\" cellspacing=\"2\" cellpadding=\"2\" align=\"center\">\n<tbody>\n<tr>\n<td width=\"26%\">\n<div align=\"center\"><span style=\"font-family: Arial, Helvetica, sans-serif;\"><strong>id<\/strong><\/span><\/div>\n<\/td>\n<td width=\"74%\"><span style=\"font-family: Arial, Helvetica, sans-serif;\"> Es el identificador del auxiliar.<\/span>&nbsp;<\/p>\n<p><span style=\"font-family: Arial, Helvetica, sans-serif;\">En el caso de una funci\u00f3n o algoritmo debe incluir los&nbsp;par\u00e1metros de los que dependa escritos entre par\u00e9ntesis y&nbsp;separados por comas. Por ejemplo:&nbsp;f(x,y,x).<\/span><\/p>\n<p>&nbsp;<\/td>\n<\/tr>\n<tr>\n<td width=\"26%\">\n<div align=\"center\"><span style=\"font-family: Arial, Helvetica, sans-serif;\"><strong><strong>evaluar<\/strong><\/strong><\/span><\/div>\n<\/td>\n<td width=\"74%\"><span style=\"font-family: Arial, Helvetica, sans-serif;\"><span style=\"color: #333333; font-size: 14px; line-height: 21px;\">Es un selector con dos posibles valores: siempre o una_sola_vez.<\/span><\/span>&nbsp;<\/p>\n<p><span style=\"color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 21px;\">Permite definir si el&nbsp;algoritmo deben evaluarse cada vez que el usuario m<\/span><span style=\"color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 21px;\">odifica un&nbsp;control o s\u00f3lamente una vez al iniciarse la escena.<\/span><\/p>\n<p><span style=\"color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 21px;\">Es importante seleccionar una_sola_vez cuando sea factible para&nbsp;que el funcionamiento de la escena sea m\u00e1s r\u00e1pido.<\/span><\/td>\n<\/tr>\n<tr>\n<td width=\"26%\">\n<div align=\"center\"><span style=\"font-family: Arial, Helvetica, sans-serif;\"><strong style=\"color: #333333; font-size: 14px; line-height: 21px;\">inicio<\/strong><\/span><\/div>\n<\/td>\n<td width=\"74%\"><span style=\"font-family: Arial, Helvetica, sans-serif;\"><span style=\"font-family: Arial, Helvetica, sans-serif;\">En el campo \u00abinicio\u00bb puede escribirse una serie de asignaciones&nbsp;y llamadas a otros algoritmos o funciones separadas por punto y coma (;).&nbsp;<\/span><span style=\"font-family: Arial, Helvetica, sans-serif;\">Todo lo que haya en este campo se ejecuta al inicio del c\u00e1lculo.<\/span><\/span><\/td>\n<\/tr>\n<tr>\n<td width=\"26%\">\n<div align=\"center\"><span style=\"font-family: Arial, Helvetica, sans-serif;\"><strong style=\"color: #333333; font-size: 14px; line-height: 21px;\">hacer<\/strong><\/span><\/div>\n<\/td>\n<td width=\"74%\"><span style=\"font-family: Arial, Helvetica, sans-serif;\"><span style=\"font-family: Arial, Helvetica, sans-serif;\">En el campo \u00abhacer\u00bb puede escribirse una serie de asignaciones y&nbsp;llamadas a algoritmos o funciones separadas por saltos de l\u00ednea.<\/span><\/span>&nbsp;<\/p>\n<p><span style=\"color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 21px;\">Lo que hay en \u00abhacer\u00bb se ejecuta repetidamente hasta que la condici\u00f3n<\/span><strong style=\"color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 21px;\">&nbsp;mientras<\/strong><span style=\"color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 21px;\">&nbsp;deja de cumplirse o se ha llegado a 10000 repeticiones (este l\u00edmite es un sistema de seguridad para proteger al autor y al usuario de errores que pudiesen bloquear el navegador).&nbsp;<\/span><\/td>\n<\/tr>\n<tr>\n<td width=\"26%\">\n<div align=\"center\"><span style=\"font-family: Arial, Helvetica, sans-serif;\"><strong style=\"color: #333333; font-size: 14px; line-height: 21px;\">mientras<\/strong><\/span><\/div>\n<\/td>\n<td width=\"74%\"><span style=\"font-family: Arial, Helvetica, sans-serif;\"><span style=\"font-family: Arial, Helvetica, sans-serif;\">En el campo \u00abmientras\u00bb se debe escribir una expresi\u00f3n booleana.&nbsp;<\/span><\/span>&nbsp;<\/p>\n<p><span style=\"color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 14px; line-height: 21px;\">Si este campo se deja en blanco el algoritmo realiza las asignaciones especificadas en&nbsp;<\/span><strong style=\"color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 14px; line-height: 21px;\">hacer<\/strong><span style=\"color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 14px; line-height: 21px;\">, s\u00f3lo una vez.<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div align=\"center\"><span style=\"line-height: 1.5em;\">&nbsp;<\/span><\/div>\n<p><span style=\"line-height: 1.5em;\">La estructura de los <\/span><strong style=\"line-height: 1.5em;\">algoritmos<\/strong><span style=\"line-height: 1.5em;\"> de Descartes es en realidad un bucle&nbsp;<\/span>de programaci\u00f3n, que corresponde al <em>\u00abdo&#8230; while\u00bb&nbsp;<\/em>de los lenguajes <em><strong>C<\/strong><\/em> y <em><strong>Java<\/strong><\/em> y al <em>\u00abrepeat&#8230; while\u00bb<\/em>&nbsp;de <strong>Pascal<\/strong>.<\/p>\n<p align=\"justify\">Para realizar una asignaci\u00f3n condicional se puede utilizar la construcci\u00f3n: A?a:b&nbsp;donde A es una expresi\u00f3n booleana&nbsp;y a&nbsp;y b&nbsp;son los dos valores que se&nbsp;asignar\u00e1n seg\u00fan se cumpla o no la condici\u00f3n A. Por ejemplo <span style=\"font-family: 'Courier New';\"><small><strong>y=(x&gt;0)?sen(2*pi*x):0<\/strong><\/small><\/span> asigna&nbsp;a <span style=\"font-family: 'Courier New';\"><small><strong>y<\/strong><\/small><\/span> el valor <span style=\"font-family: 'Courier New';\"><small><strong>sen(2*pi*x)<\/strong><\/small><\/span> si <span style=\"font-family: 'Courier New';\"><small><strong>x&gt;0<\/strong><\/small><\/span> y asigna <span style=\"font-family: 'Courier New';\"><strong>0<\/strong><\/span> si <small><span style=\"font-family: 'Courier New';\"><strong>x&lt;=0<\/strong><\/span><\/small>.&nbsp;Esta construcci\u00f3n corresponde (parcialmente) al&nbsp;<em>\u00abif&#8230; else\u00bb&nbsp;<\/em>de los lenguajes de programaci\u00f3n.<\/p>\n<p align=\"justify\">La combinaci\u00f3n de bucles&nbsp; <strong>inicio<\/strong> &#8211; <strong>hacer<\/strong> &#8211; <strong>mientras<\/strong>, las asignaciones condicionales&nbsp;&nbsp; <strong><span style=\"font-family: 'Courier New';\"><small>A?a:b&nbsp;<\/small><\/span><\/strong>y la posibilidad de llamar algoritmos desde otros algoritmos ofrece muchas&nbsp;posibilidades para la programaci\u00f3n de procesos de c\u00e1lculo relativamente complejos.<\/p>\n<p align=\"justify\">El panel de algoritmos permite decidir si \u00e9stos se eval\u00faan <strong>una sola vez&nbsp;<\/strong>o <strong>siempre<\/strong>. Los algoritmos pueden servir para inicializar vectores. Los&nbsp;que se eval\u00faan <strong>una sola vez<\/strong> se ejecutan s\u00f3lo al iniciarse la escena y&nbsp;cuando se pulsa el bot\u00f3n <strong>inicio<\/strong>, por lo que sirven para inicializar&nbsp;vectores que permanecen constantes durante toda la interacci\u00f3n del usuario con la escena.&nbsp;Los algoritmos que se eval\u00faan <strong>siempre<\/strong>, se ejecutan <strong>cada vez que&nbsp;hay un cambio en un control<\/strong>, ya sea <strong>num\u00e9rico<\/strong> o <strong>gr\u00e1fico<\/strong>,&nbsp;con lo cual sirven para evaluar vectores que dependen de los par\u00e1metros de los controles.&nbsp;Cuando un algoritmo se llama desde otro, se ejecuta, independientemente de si est\u00e1&nbsp;marcado como evaluar una sola vez o siempre.<\/p>\n<p align=\"justify\">La estructura de bucles <strong>inicio<\/strong> &#8211; <strong>hacer<\/strong> &#8211; <strong>mientras&nbsp;<\/strong>de los algoritmos se utiliza tambi\u00e9n en las funciones algor\u00edtmicas y en la <a href=\"https:\/\/descartesjs.org\/documentacion\/?p=747\">animaci\u00f3n<\/a>.&nbsp;De hecho la animaci\u00f3n es un algoritmo especial que refresca la escena despu\u00e9s de cada&nbsp;paso por <strong>hacer<\/strong>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Los algoritmos constituyen un sistema sencillo para inicializar vectores y para&nbsp;programar procesos de c\u00e1lculo m\u00e1s o menos complejos. Los algoritmos hasta la versi\u00f3n 4 de Descartes eran auxiliares de la escena y pod\u00edan definirse en el panel de configuraci\u00f3n de Auxiliares el cual no existe en la versi\u00f3n 5. Por compatibilidad hacia atr\u00e1s&nbsp;entre las versiones, si una escena anterior a la versi\u00f3n 5 es editada con el gestor de escenas de esta versi\u00f3n, &nbsp;\u00e9ste incorpora todos los algoritmos al panel de Programa, donde podr\u00e1n editarse, pero no pueden incorporarse m\u00e1s salvo que la edici\u00f3n se realice directamente en el campo<\/p>\n<a class=\"more-link\" rel=\"nofollow\" href=\"https:\/\/reddescartes.org\/documentacion\/algoritmos\/\">[Leer m\u00e1s...]<\/a>","protected":false},"author":9,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[28,27],"tags":[87],"_links":{"self":[{"href":"https:\/\/reddescartes.org\/documentacion\/wp-json\/wp\/v2\/posts\/1898"}],"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\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/reddescartes.org\/documentacion\/wp-json\/wp\/v2\/comments?post=1898"}],"version-history":[{"count":5,"href":"https:\/\/reddescartes.org\/documentacion\/wp-json\/wp\/v2\/posts\/1898\/revisions"}],"predecessor-version":[{"id":3300,"href":"https:\/\/reddescartes.org\/documentacion\/wp-json\/wp\/v2\/posts\/1898\/revisions\/3300"}],"wp:attachment":[{"href":"https:\/\/reddescartes.org\/documentacion\/wp-json\/wp\/v2\/media?parent=1898"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/reddescartes.org\/documentacion\/wp-json\/wp\/v2\/categories?post=1898"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/reddescartes.org\/documentacion\/wp-json\/wp\/v2\/tags?post=1898"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}