<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress.com" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>algoritmos &amp;laquo; WordPress.com Tag Feed</title>
	<link>http://en.wordpress.com/tag/algoritmos/</link>
	<description>Feed of posts on WordPress.com tagged "algoritmos"</description>
	<pubDate>Mon, 28 Dec 2009 19:05:00 +0000</pubDate>

	<generator>http://en.wordpress.com/tags/</generator>
	<language>en</language>

<item>
<title><![CDATA[Otras estrategias para encontrar regulatory motifs (Parte 1)]]></title>
<link>http://jmonkg.wordpress.com/2009/12/11/otras-estrategias-para-encontrar-regulatory-motifs-parte-1/</link>
<pubDate>Fri, 11 Dec 2009 11:29:29 +0000</pubDate>
<dc:creator>jmonkg</dc:creator>
<guid>http://jmonkg.wordpress.com/2009/12/11/otras-estrategias-para-encontrar-regulatory-motifs-parte-1/</guid>
<description><![CDATA[Binding sites y Regulatory Motifs son dos términos que significan lo mismo, solo que desde diferente]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Binding sites y Regulatory Motifs son dos términos que significan lo mismo, solo que desde diferentes puntos de vista. Desde el punto de vista de la proteína, lo que necesita para adherirse al gen es un binding site. Pero si nos interesa estudiar el comportamiento del gen, referirnos al regulatory motif del mismo, que sirve como trigger del proceso de transcripción.</p>
<p>Es por ello que el paper, <strong>a structure based aproach for prediction of protein binding sites in gene upstream regions</strong>, brinda otra forma de resolver el mismo problema. El punto detrás es que la mayoría de algoritmos se centran en los genes almacenados en bases de datos, y por ende, en hallar en las secuencia el patrón del motif, ellos se centran más bien en la relación de la proteína con el binding site del gen. para ello es importante recordar que existe  una función de correspondencia  entre los aminoacidos de la proteina y las bases nitrogenadas del ADN,  esto conlleva a poder predecir posibles binding sites en función de la proteína que se añada.</p>
<p>Los análisis resultan más en el campo biológico que informático, por lo que no resultan de mayor interés para la tesis. Sin embargo, si constituye una opción válida desde el punto de vista biológico.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Diversas soluciones para el hallar los regulatory motifs]]></title>
<link>http://jmonkg.wordpress.com/2009/12/10/diversas-soluciones-para-el-hallar-los-regulatory-motifs/</link>
<pubDate>Thu, 10 Dec 2009 12:54:44 +0000</pubDate>
<dc:creator>jmonkg</dc:creator>
<guid>http://jmonkg.wordpress.com/2009/12/10/diversas-soluciones-para-el-hallar-los-regulatory-motifs/</guid>
<description><![CDATA[Del paper Finding Motifs in the twilight zone, obtuve información muy precisa referente a la definic]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Del paper <a href="http://bioinformatics.oxfordjournals.org/cgi/content/abstract/18/10/1374" target="_blank">Finding Motifs in the twilight zone</a>, obtuve información muy precisa referente a la definición del problema, las soluciones existentes y cómo se replantea la solucion por medio de la mejora de un algoritmo tipo ESD ( extended sample driven).</p>
<p>Primero que nada, el problema en su forma más abstracta consiste en hallar una subcadena que se repite con frecuencia en ciertas secuencias del DNA, llamados genes, en los cuales se adhiere una proteina provocando la producción de otra en función de las necesidades del organismo. El problema detrás es que</p>
<p>1. no se conoce a priori cómo esta constituida esta cadena, llamada regulatory motif.</p>
<p>2. existen mutaciones dentro de la misma, lo cual hace su identificación más dificil.</p>
<p>Las soluciones existentes se remontan dede 1995, y existen desde soluciones greedy, gibbs sampling y EM. Todas estas soluciones no pasaron una prueba llamada the  Motif Challenge Problem, en la cual se intenta hallar un motif (15,4) es decir de longitud l = 15  con 4 mutaciones en un conjunto de 20 secuencias con l=600.  cabe recalcar que cuando se habla de n-bp sequences se refiere a secuencias de n letras. Una diferencia importante con respecto a los demas resulto el algoritmo WINNOWER cuyo background es el uso de EM, expectation maximization.</p>
<p>Todas estas soluciones mencionadas anteriormente tuvieron tiempos de ejecución y consumo de recursos muy elevados, excepto los algoritmos pattern driven. El pattern driven consiste en probar todos los elementos del conjunto de 4 a la l posibles soluciones , es decir si tengo que l es 15 tendria un conjunto de solucion con 4 a la 15 elementos. Aunque se ve enorme, el siguiente paso es valorar cada patron con una funcion F que le de valores mas altos a los patrones mas recurrentes. Notese que para valores de l elevados, se vuelve muy tedioso.</p>
<p>Es alli donde entra la estrategia sample driven, que consiste en escoger patrones semilla, o seed patterns a traves de los cuales se siguen buscando patrones afines. Esto tiene su riesgo ya que si se escoge mal el seed, los siguientes pasos resultan inútiles.</p>
<p>Pero, para secuencias de 1600 bp para arriba  estas estrategias no son eficientes en su ejecución. Es por eso que se plantea la opción de usar un hibrido entre pattern driven y sample driven, denominado extended sample driven (ESD). Sea la secuencia buscada (l ,k) donde se generan k vecinos para cada subcadena de longitud l.  Esto nos llevaria a un numero aproximado de n N(l k) *3 elevado a k, mucho menor que 4 a la l, por lo que resulta con un tiempo relativamente menor.</p>
<p>Sin embargo, todavia, para cadenas de 1300 de longitud resulta prohibitivo para todas las soluciones anteriores, es por ello que resulta importante seguir explorando otras posibles estrategias orientadas a soluciones mas eficientes.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Algoritmo Bubble Sort &ndash; O demonio das buscas]]></title>
<link>http://elzobrito.wordpress.com/2009/11/19/algoritmo-bubble-sort-o-demonio-das-buscas/</link>
<pubDate>Thu, 19 Nov 2009 03:50:45 +0000</pubDate>
<dc:creator>Elzo Brito</dc:creator>
<guid>http://elzobrito.wordpress.com/2009/11/19/algoritmo-bubble-sort-o-demonio-das-buscas/</guid>
<description><![CDATA[Hoje vou responder um email de uma leitora a Heloisa, que me pediu para falar mais sobre o algoritmo]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Hoje vou responder um email de uma leitora a Heloisa, que me pediu para falar mais sobre o algoritmo bubble sort, vamos lá.</p>
<p>Algoritmo 1:</p>
<ol>
<li><span style="font-family:mono;">Procedimento BubbleSort(Vetor)</span></li>
<li><span style="font-family:mono;">var AUX {variavel de apoio}</span></li>
<li><span style="font-family:mono;">Inicio</span></li>
<li><span style="font-family:mono;">para i=0 até n-1 faça</span></li>
<li><span style="font-family:mono;"> para j=0 até n-1 faça</span></li>
<li><span style="font-family:mono;"> se vetor[j] &#62; vetor[j+1] então</span></li>
<li><span style="font-family:mono;"> AUX = vetor[j]</span></li>
<li><span style="font-family:mono;"> vetor[j] = vetor[j+1]</span></li>
<li><span style="font-family:mono;"> vetor[j+1] = AUX</span></li>
<li><span style="font-family:mono;"> fim_se</span></li>
<li><span style="font-family:mono;"> fim_para</span></li>
<li><span style="font-family:mono;">fim_para</span></li>
</ol>
<p>O Bubble Sort ou “metodo bolha” como é chamado, consiste em correr um vetor comparando cada elemento com o elemento seguinte:</p>
<blockquote><p>vetor[j] &#62; vetor[j+1]</p></blockquote>
<p>No caso de organizar as informações crescente, se o elemento comparadao com o vetor[i] for menor (&#60;) ou igual (=) ao elemento, nada se faz, porém se o elemento comparado com o vetor[i] for maior (&#62;) que o elemento, inverte-se a posição dos 2 elementos, comparando assim com todos os elementos até finalizar o vetor.</p>
<p>O máximo de execuções que esse algoritmo faz para que o vetor fique ordenado é (N-1), em que N é o número de elementos do vetor.</p>
<p>Existe também uma variação do algoritmo Bubble Sort, onde não existe uma variável Auxiliar, para fazer a troca utiliza-se um calculo matemático, no começo parece estranho como ele trabalha mas analisando bem é fácil de assimilar.</p>
<p>vejamos:</p>
<p>Digamos que:</p>
<ul>
<li>j = 5</li>
<li>i = 3</li>
</ul>
<p>Então</p>
<ul>
<li>j = j + i –&#62; 5 + 3 = 8</li>
<li>o j agora vale 8</li>
<li>i = j – i –&#62; 8 – 3 = 5</li>
<li>agora o i vale 5</li>
<li>j = j – i –&#62; 8 – 5 = 3</li>
<li>agora o j vale 3</li>
</ul>
<p>Pronto trocamos os vales fazendo calculos, depois disso o valor inverte;</p>
<ul>
<li>j = 3</li>
<li>i = 5</li>
</ul>
<p>Vejamos o algoritmo:</p>
<p>Algoritmo 2:</p>
<ol>
<li><span style="font-family:mono;">Procedimento BubbleSort(Vetor)</span></li>
<li><span style="font-family:mono;">Inicio</span></li>
<li><span style="font-family:mono;">para i=0 até n-1 faça</span></li>
<li><span style="font-family:mono;"> para j=0 até n-1 faça</span></li>
<li><span style="font-family:mono;"> se vetor[i] &#62; vetor[j] então</span></li>
<li><span style="font-family:mono;"> vetor[j] = vetor[j] + vetor[i]</span></li>
<li><span style="font-family:mono;"> vetor[i] = vetor[j] &#8211; vetor[i]</span></li>
<li><span style="font-family:mono;"> vetor[j] = vetor[j] &#8211; vetor[i]</span></li>
<li><span style="font-family:mono;"> fim_se</span></li>
<li><span style="font-family:mono;"> fim_para</span></li>
<li><span style="font-family:mono;">fim_para</span></li>
</ol>
<p>Utilizando as linguagem de programação PASCAL e C, veremos abaixo como fica o algoritmo nas duas linguagens:</p>
<p>Em Pascal:</p>
<li><span style="font-family:mono;">Procedimento BubbleSort(A:Vetor)</span></li>
<li><span style="font-family:mono;">var aux, i, j:integer;</span></li>
<li><span style="font-family:mono;">Begin</span></li>
<li><span style="font-family:mono;">for i=0 to n-1 do</span></li>
<li>Begin</li>
<li><span style="font-family:mono;"> for j=0 to n-1 do</span></li>
<li><span style="font-family:mono;"> if A[j] &#62; A[j+1] then</span></li>
<li><span style="font-family:mono;"> aux = A[j+1];</span></li>
<li><span style="font-family:mono;"> A[j] = A[j+1];</span></li>
<li><span style="font-family:mono;"> A[j+1] = aux;</span></li>
<li><span style="font-family:mono;"> end;</span></li>
<li><span style="font-family:mono;">end;</span></li>
<p>&#160;</p>
<p>Em C</p>
<ul>
<li>void BubbleSort(Vetor A){</li>
<li>int aux, i, j;</li>
<li>for(i=0;i&#60;n;i++){</li>
<li> for(j=0;j&#60;n;j++){</li>
<li> if(a[j] &#62; a[j+1]){</li>
<li> aux = a[j];</li>
<li> a[j] = a[j+1];</li>
<li> a[j+1] = aux;</li>
<li> }</li>
<li> }</li>
<li> }</li>
<li>}</li>
</ul>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Algoritmos y Programación]]></title>
<link>http://mauriciocasanova.wordpress.com/2009/11/17/algoritmos-y-programacion/</link>
<pubDate>Tue, 17 Nov 2009 05:06:53 +0000</pubDate>
<dc:creator>mauriciocasanova</dc:creator>
<guid>http://mauriciocasanova.wordpress.com/2009/11/17/algoritmos-y-programacion/</guid>
<description><![CDATA[ALGORITMOS DESCRIPCIÓN: La algoritmia es el estudio de problemas matemáticos y lógicos que pueden se]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p style="text-align:center;">ALGORITMOS</p>
<p>DESCRIPCIÓN:</p>
<p>La algoritmia es el estudio de problemas matemáticos y lógicos que pueden ser implementados en un lenguaje de computación siguiendo las reglas secuénciales que la metodología describa. Adicionalmente se debe tener en cuenta el uso de dispositivos de entrada/salida requeridos para incluirlos en el algoritmo.</p>
<p>Los algoritmos en computación tienen una simbología propia y universal que permiten transcribir la solución de un problema ya sea esquemáticamente o textualmente.</p>
<p>OBJETIVO GENERAL:</p>
<p>Interpretar problemas matemáticos, de comparación lógica y manejo de datos, para  convertirlos en algoritmos computacionales.</p>
<p>JUSTIFICACIÓN:</p>
<p>La programación de computadores requiere que las personas dedicadas a esta labor tengan los fundamentos básicos de la lógica de programación y saber como abstraer un  problema a resolver e interpretarlo en un algoritmo, para posteriormente codificarlo en un lenguaje de programación.</p>
<p>METODOLOGIA:</p>
<ul>
<li>Presentación de temas por parte del profesor</li>
<li>Presentación y desarrollo de temas con participación de estudiantes</li>
<li>Formulación, explicación y solución a ejemplos y problemas de aplicación</li>
<li>Realización de talleres en grupo o individual por parte de los estudiantes y con asistencia del profesor</li>
<li>Prácticas de laboratorio asistidas por el profesor o foros de discusion</li>
<li>Prácticas realizadas por los estudiantes en horarios extra-clase</li>
<li>Realización de evaluaciones programadas</li>
</ul>
<p>EVALUACIÓN:</p>
<p>Se acordará con los estudiantes teniendo como marco de referencia la siguiente propuesta:</p>
<ul>
<li>Trabajos en grupos:   desarrollo y presentación</li>
<li>Evaluaciones</li>
</ul>
<p>ESTRUCTURA DEL CURSO</p>
<p><strong> </strong></p>
<table border="1" cellspacing="0" cellpadding="0" width="593">
<thead>
<tr>
<td rowspan="2" width="373"><strong>TEMA</strong></td>
<td colspan="3" width="219" valign="top"><strong>Horas</strong></td>
</tr>
<tr>
<td width="63" valign="top"><strong>Teóricas</strong></td>
<td width="72" valign="top">
<h5>Prácticas</h5>
</td>
<td width="84" valign="top"><strong>Adicionales</strong></td>
</tr>
</thead>
<tbody>
<tr>
<td width="373" valign="top"><strong>Unidad 1.  LÓGICA BOOLEANA</strong>
<p>&#160;</p>
<ul>
<li>Tablas de verdad</li>
<li>Comparadores   lógicos</li>
</ul>
<h4><strong> </strong></h4>
</td>
<td width="63" valign="top">2</td>
<td width="72" valign="top">2</td>
<td width="84" valign="top">2</td>
</tr>
<tr>
<td width="373" valign="top">
<h6>Unidad   2.  DATOS Y TIPOS DE DATOS</h6>
<ul>
<li>Datos Numéricos</li>
<li>Datos Lógicos</li>
<li>Caracteres</li>
<li>Cadenas</li>
<li>Código ASCII</li>
</ul>
</td>
<td width="63" valign="top">2</td>
<td width="72" valign="top">2</td>
<td width="84" valign="top">6</td>
</tr>
<tr>
<td width="373" valign="top">Unidad 3.  CONSTANTES,   VARIABLES, EXPRESIONES Y OPERADORES
<p>&#160;</p>
<ul>
<li>Constantes</li>
<li>Variables</li>
<li>Expresiones</li>
<li>Expresiones   aritméticas</li>
<li>Operación de   asignación aritmética</li>
<li>Reglas de prioridad</li>
<li>Expresiones Lógicas</li>
<li>Operación de   asignación Lógica</li>
<li>Prioridad de   operadores lógicos</li>
<li>Operadores de   relación</li>
<li>Operadores lógicos</li>
<li>Expresiones de   caracteres y cadenas</li>
<li>Operación de   asignación de caracteres y cadenas</li>
<li>Operadores para   manejo de caracteres y cadenas</li>
<li>Comparación de   cadenas</li>
<li>Conversión de tipos</li>
</ul>
</td>
<td width="63" valign="top">4</td>
<td width="72" valign="top">4</td>
<td width="84" valign="top">10</td>
</tr>
<tr>
<td width="373" valign="top">
<h6>Unidad 4.    ESTRUCTURAS LÓGICAS DE CONTROL</h6>
<ul>
<li>Si entonces- Falso</li>
<li>Para – inicio &#8211;   hasta</li>
<li>Mientras que</li>
<li>Hasta que</li>
<li>En case de</li>
</ul>
</td>
<td width="63" valign="top">4</td>
<td width="72" valign="top">4</td>
<td width="84" valign="top">12</td>
</tr>
<tr>
<td width="373" valign="top">
<h6>Unidad   5.  ALGORITMIA</h6>
<ul>
<li>Pasos de solución   de un problema (Análisis, Diseño, Pruebas)</li>
<li>Algoritmo Textual</li>
<li>Pruebas de   escritorio</li>
<li>Diagramas de flujo</li>
<li>Diagramas de N-S   (Nassi-Schneiderman)</li>
<li>Pseudocódigo</li>
</ul>
</td>
<td width="63" valign="top">8</td>
<td width="72" valign="top">8</td>
<td width="84" valign="top">20</td>
</tr>
<tr>
<td width="373" valign="top">Unidad 6.  ESTRUCTURAS SIMPLES   DE DATOS EN MEMORIA
<p>&#160;</p>
<ul>
<li>Arreglos de 1   dimensión (vectores)</li>
<li>Arreglos de 2   dimensiones (Matrices)</li>
<li>Arreglos de n   dimensiones</li>
</ul>
<p><strong> </strong></td>
<td width="63" valign="top">2</td>
<td width="72" valign="top">2</td>
<td width="84" valign="top">8</td>
</tr>
<tr>
<td width="373" valign="top">Unidad 7.  ALGORITMOS COMUNES   PARA MANEJO DE ARREGLOS
<p>&#160;</p>
<ul>
<li>Adición</li>
<li>Sorteo</li>
<li>Búsqueda</li>
<li>Modificación</li>
<li>Eliminación</li>
<li>Impresión</li>
</ul>
</td>
<td width="63" valign="top">2</td>
<td width="72" valign="top">2</td>
<td width="84" valign="top">8</td>
</tr>
<tr>
<td width="373" valign="top">Unidad 8.  ALGORITMOS PARA   PROGRAMACIÓN MODULAR (SUBRUTINAS).
<p>&#160;</p>
<ul>
<li>Procedimientos y   Funciones</li>
<li>Variables locales y   globales</li>
</ul>
</td>
<td width="63" valign="top">2</td>
<td width="72" valign="top">2</td>
<td width="84" valign="top">8</td>
</tr>
<tr>
<td width="373" valign="top">Unidad 9.  ESTRUCTURAS DE DATOS   PARA ALMACENAMIENTO SECUNDARIO
<p>&#160;</p>
<ul>
<li>Registros</li>
<li>Archivos</li>
</ul>
</td>
<td width="63" valign="top">2</td>
<td width="72" valign="top">2</td>
<td width="84" valign="top">8</td>
</tr>
<tr>
<td width="373" valign="top"><strong>Unidad 10.  ALGORITMOS PARA EL MANEJO DE DATOS   ALMACENADOS</strong>
<p>&#160;</p>
<ul>
<li>Lectura</li>
<li>Impresión</li>
<li>Escritura (Adición,   Modificación)</li>
<li>Eliminación</li>
</ul>
</td>
<td width="63" valign="top">2</td>
<td width="72" valign="top">2</td>
<td width="84" valign="top">8</td>
</tr>
<tr>
<td width="373" valign="top"><strong>Unidad 11.  PROGRAMACIÓN DE PROYECTOS</strong>
<p>&#160;</p>
<ul>
<li>Subprogramas</li>
<li>Librerías</li>
<li>Proyectos</li>
</ul>
</td>
<td width="63" valign="top">2</td>
<td width="72" valign="top">2</td>
<td width="84" valign="top">8</td>
</tr>
</tbody>
</table>
<p><strong> </strong></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Aulas: LPA - Prof.Carlos Medeiros]]></title>
<link>http://ccunip.wordpress.com/2009/11/12/aulas-lpa-prof-carlos-medeiros/</link>
<pubDate>Thu, 12 Nov 2009 18:55:49 +0000</pubDate>
<dc:creator>felipelorran</dc:creator>
<guid>http://ccunip.wordpress.com/2009/11/12/aulas-lpa-prof-carlos-medeiros/</guid>
<description><![CDATA[Segue abaixo as apostilas: Apostila-Cap1_ConceitosBasicos Apostila-Cap2_TiposdeDados_InstrucoesBasic]]></description>
<content:encoded><![CDATA[Segue abaixo as apostilas: Apostila-Cap1_ConceitosBasicos Apostila-Cap2_TiposdeDados_InstrucoesBasic]]></content:encoded>
</item>
<item>
<title><![CDATA[Calculando el número Pi]]></title>
<link>http://flujobinario.wordpress.com/2009/11/10/calculando-el-numero-pi/</link>
<pubDate>Wed, 11 Nov 2009 04:00:22 +0000</pubDate>
<dc:creator>toxrn</dc:creator>
<guid>http://flujobinario.wordpress.com/2009/11/10/calculando-el-numero-pi/</guid>
<description><![CDATA[El número Pi (π) es uno de los números más importantes en la matemática y, por ende, en las ciencias]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><span style="float:left;font-size:70px;line-height:50px;padding-top:1px;padding-right:5px;">E</span>l número Pi (π) es uno de los números más importantes en la matemática y, por ende, en las ciencias. Pero no seré yo quien les explique la importancia de este número (que todos de por sí deberían saber). La <a href="http://es.wikipedia.org/wiki/N%C3%BAmero_%CF%80">wikipedia</a> en español nos dice: </p>
<p><em>π (pi) es la relación entre la longitud de una circunferencia y su diámetro, en Geometría euclidiana. Es un número irracional y una de las constantes matemáticas más importantes. Se emplea frecuentemente en matemáticas, física e ingeniería. El valor numérico de π, truncado a sus primeras cifras, es el siguiente:</p>
<p><strong>π ≈ 3,14159265358979323846&#8230;</strong></p>
<p>El valor de π se ha obtenido con diversas aproximaciones a lo largo de la historia, siendo una de las constantes matemáticas que más aparece en las ecuaciones de la física, junto con el número e. Por ello, tal vez sea la constante que más pasiones desata entre los matemáticos profesionales y aficionados. La relación entre la circunferencia y su diámetro no es constante en geometrías no euclídeas.</em></p>
<p>En este post vamos a ver dos maneras, la segunda basada en la primera, de obtener el número π con más o menos buena precisión, aprovechando la potencia computacional de la que disponemos hoy en día. Pero, como supondrán, habrán matemáticas en el proceso. Los algoritmos completos en python están al final del post, para los que quieran saltarse el proceso.</p>
<p>Si nos acordamos de nuestros cursos de cálculo diferencial (en caso de que los hayamos tenido, claro) se nos aparecerá que la derivada del arcotangente de <em>x</em> es:</p>
<p><img src="http://flujobinario.wordpress.com/files/2009/11/arct.png" alt="Derivada del arcotangente de x" title="Derivada del arcotangente de x" width="160" height="46" class="aligncenter size-full wp-image-61" /></p>
<p>Por otro lado, tenemos la siguiente serie geométrica infinita, válida para &#124;x&#124; &#60; 1:</p>
<p><img src="http://flujobinario.wordpress.com/files/2009/11/greserie.png" alt="Serie" title="Serie" width="255" height="43" class="aligncenter size-full wp-image-63" /></p>
<p>Ahora, para hallar una fórmula que nos exprese el arcotangente de x, simplemente integramos la expresión:</p>
<p><img src="http://flujobinario.wordpress.com/files/2009/11/int.png" alt="Integramos para hallar arctan(x)" title="Integramos para hallar arctan(x)" width="435" height="36" class="aligncenter size-full wp-image-64" /></p>
<p>quedándonos una serie geométrica infinita así:</p>
<p><img src="http://flujobinario.wordpress.com/files/2009/11/resint.png" alt="Resultado de la integral" title="Resultado de la integral" width="265" height="41" class="aligncenter size-full wp-image-67" /></p>
<p>Sabemos, y eso es algo básico que aparte cualquier calculadora nos puede decir, que:</p>
<p><img src="http://flujobinario.wordpress.com/files/2009/11/arct1.png" alt="Arcotangente de 1" title="Arcotangente de 1" width="130" height="34" class="aligncenter size-full wp-image-57" /></p>
<p>de modo que, reemplazando con la serie que teníamos más arriba:</p>
<p><img src="http://flujobinario.wordpress.com/files/2009/11/arct1-1.png" alt="Arcotangente de 1" title="Arcotangente de 1" width="258" height="33" class="aligncenter size-full wp-image-58" /></p>
<p>Acá tenemos un problema, puesto que nuestra serie es válida, como decía antes, para todo &#124;x&#124; &#60; 1. Sin embargo, se puede <a href="http://es.wikipedia.org/wiki/Serie_de_Leibniz#Argumento_elemental">demostrar</a> que lo escrito arriba es cierto. Así que obviaremos esto.</p>
<p>Luego, ya podemos calcular el número pi:</p>
<p><img src="http://flujobinario.wordpress.com/files/2009/11/pi1.png" alt="pi" title="pi" width="229" height="44" class="aligncenter size-full wp-image-65" /></p>
<p>Sin embargo este método es lento. Lento es lento. Se necesitan demasiadas sumas para llegar a una precisión aceptable. Por ejemplo, con 100 000 000 sumas, el número que da es 3.14159264359. Eso no es aceptable.</p>
<p>Surge entonces la necesidad de idear otro algoritmo más eficiente. Si nos acordamos de trigonometría del colegio, veremos por ahí una fórmula para la tangente de a + b:</p>
<p><img src="http://flujobinario.wordpress.com/files/2009/11/tanapb.png" alt="tan(a+b)" title="tan(a+b)" width="234" height="37" class="aligncenter size-full wp-image-68" /></p>
<p>Si tomamos <em><strong>a = arctan(1/2)</strong></em> y <em><strong>b = arctan(1/3)</strong></em>, y aplicamos luego la función <em>arctan</em> a ambos lados de la ecuación, nos queda lo siguiente:</p>
<p><img src="http://flujobinario.wordpress.com/files/2009/11/arct1213.png" alt="Volvemos a tener pi/4" title="Volvemos a tene pi/4" width="429" height="78" class="aligncenter size-full wp-image-60" /></p>
<p>Luego, no es más que aplicar la serie geométrica para <em>arctan(x)</em> en casa caso y sumar:</p>
<p><img src="http://flujobinario.wordpress.com/files/2009/11/arct13.png" alt="arctan1/3" title="arctan1/3" width="497" height="59" class="aligncenter size-full wp-image-59" /><br />
<img src="http://flujobinario.wordpress.com/files/2009/11/arctan12.png" alt="arctan1/2" title="arctan1/2" width="496" height="57" class="aligncenter size-full wp-image-62" /><br />
<img src="http://flujobinario.wordpress.com/files/2009/11/pi2.png" alt="pi" title="pi" width="497" height="42" class="aligncenter size-full wp-image-66" /></p>
<p>Se puede notar que en este caso se llega a la precisión mucho más rápido. A continuación, los algoritmos en python:</p>
<p><strong>Primer algoritmo (complejidad O(n^10)):</strong><br />
<code><br />
from decimal import *<br />
decimals = 4<br />
getcontext().prec = decimals+3<br />
sums = pow(10, decimals+1)<br />
i = Decimal(1)<br />
pi = Decimal(1)<br />
while i &#60; sums:<br />
&#160;&#160;&#160;&#160;pi = pi + (pow(-1,i) / ((Decimal(2)*i)+Decimal(1)))<br />
&#160;&#160;&#160;&#160;i = i + Decimal(1)<br />
getcontext().prec = decimals+1<br />
print (pi * 4)<br />
</code></p>
<p><strong>Segundo algoritmo (complejidad O(n)):</strong><br />
<code><br />
from decimal import *<br />
decimals = 20<br />
sums = (decimals+1) * 2<br />
getcontext().prec = decimals+1<br />
i = Decimal(1)<br />
pi1 = Decimal(1)/Decimal(2)<br />
pi2 = Decimal(1)/Decimal(3)<br />
while i &#60; sums :<br />
&#160;&#160;&#160;&#160;pi1 = pi1 + pow(-1,i)*((pow(Decimal(1)/Decimal(2),((Decimal(2)*i)+Decimal(1)))/((Decimal(2)*i)+Decimal(1))))<br />
&#160;&#160;&#160;&#160;pi2 = pi2 + pow(-1,i)*((pow(Decimal(1)/Decimal(3),((Decimal(2)*i)+Decimal(1)))/((Decimal(2)*i)+Decimal(1))))<br />
&#160;&#160;&#160;&#160;i = i + 1<br />
print ((pi1+pi2) * 4)</p>
<p></code></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Materiales utilizados por Cortez y Chavez]]></title>
<link>http://stavo92.wordpress.com/2009/11/11/alg-cortez/</link>
<pubDate>Wed, 11 Nov 2009 03:48:37 +0000</pubDate>
<dc:creator>stavo92</dc:creator>
<guid>http://stavo92.wordpress.com/2009/11/11/alg-cortez/</guid>
<description><![CDATA[Materiales utilizados por Cortez: descargas Materiales utilizados por Chavez: descargas]]></description>
<content:encoded><![CDATA[Materiales utilizados por Cortez: descargas Materiales utilizados por Chavez: descargas]]></content:encoded>
</item>
<item>
<title><![CDATA[Posicionamiento en Buscadores en solo 5 pasos..]]></title>
<link>http://stavo92.wordpress.com/2009/11/11/posicionamiento-web-en-5-pasos/</link>
<pubDate>Wed, 11 Nov 2009 00:46:50 +0000</pubDate>
<dc:creator>stavo92</dc:creator>
<guid>http://stavo92.wordpress.com/2009/11/11/posicionamiento-web-en-5-pasos/</guid>
<description><![CDATA[Es importante posicionar nuestra web en las primeras páginas de los buscadores debido a que la mayor]]></description>
<content:encoded><![CDATA[Es importante posicionar nuestra web en las primeras páginas de los buscadores debido a que la mayor]]></content:encoded>
</item>
<item>
<title><![CDATA[Para aprender algoritmos, mejor en vídeo]]></title>
<link>http://robertoluis.wordpress.com/2009/11/05/para-aprender-algoritmos-mejor-en-video/</link>
<pubDate>Thu, 05 Nov 2009 15:05:11 +0000</pubDate>
<dc:creator>Roberto Luis</dc:creator>
<guid>http://robertoluis.wordpress.com/2009/11/05/para-aprender-algoritmos-mejor-en-video/</guid>
<description><![CDATA[Para aquellos que como yo estén sufriendo de la asignatura MTP2, os muestro una serie de enlaces de ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Para aquellos que como yo estén sufriendo de la asignatura MTP2, os muestro una serie de enlaces de youtube, que os los explican pasiiiito a pasiiiito, bubblesort, insertsort, mergesort y quicksort</p>
<p><a href="http://www.youtube.com/view_play_list?p=89B61F78B552C1AB">http://www.youtube.com/view_play_list?p=89B61F78B552C1AB</a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Corrección de errores con algoritmos genéticos]]></title>
<link>http://mbpfernand0.wordpress.com/2009/10/29/correccion-de-errores-con-algoritmos-geneticos/</link>
<pubDate>Thu, 29 Oct 2009 17:17:15 +0000</pubDate>
<dc:creator>mbpfernand0</dc:creator>
<guid>http://mbpfernand0.wordpress.com/2009/10/29/correccion-de-errores-con-algoritmos-geneticos/</guid>
<description><![CDATA[Lo vi en un tuit de JJ Merelo y enlaza a un artículo curioso: A Genetic Programming Approach to Auto]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Lo vi en <a href="http://twitter.com/jjmerelo/status/5197633434">un tuit</a> de <a href="http://atalaya.blogalia.com/">JJ Merelo</a> y  enlaza a un artículo curioso: <a href="http://www.cs.virginia.edu/~weimer/p/weimer-gecco2009-preprint.pdf">A Genetic Programming Approach to Automated Software Repair (pdf)</a>. Proponen utilizar algoritmos genéticos para resolver fallos en los programas: esencialmente se trata de ajustar los parámetros del algoritmo para que proporcione valores malos con programas modificados que no pasan los tests y que proporcionan valores buenos cuando se cumplen las restricciones del problema.<br />
Curioso.</p>
<p>Ya habíamos hablado en vidas anteriores de <a href="http://barrapunto.com/~fernand0/journal/2410"> Algoritmos evolutivos y el gcc</a> (se usaban para optimizar la selección de parámetros que se le pasan al compilador). También de <a href="http://barrapunto.com/~fernand0/journal/28248"> Algoritmos genéticos, spam y expresiones regulares</a> y de <a href="http://barrapunto.com/~fernand0/journal/7509"> Algoritmos genéticos: historias de éxito interesantes</a>.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Un páncreas artificial permite el control metábolico del diabético]]></title>
<link>http://mymanuel.wordpress.com/2009/10/28/un-pancreas-artificial-permite-el-control-metabolico-del-diabetico/</link>
<pubDate>Thu, 29 Oct 2009 02:55:36 +0000</pubDate>
<dc:creator>Dr. House</dc:creator>
<guid>http://mymanuel.wordpress.com/2009/10/28/un-pancreas-artificial-permite-el-control-metabolico-del-diabetico/</guid>
<description><![CDATA[UN SENSOR DE GLUCOSA CONECTADO A UNA BOMBA DE INSULINA El proyecto denominado &#8216;Páncreas Artifi]]></description>
<content:encoded><![CDATA[UN SENSOR DE GLUCOSA CONECTADO A UNA BOMBA DE INSULINA El proyecto denominado &#8216;Páncreas Artifi]]></content:encoded>
</item>
<item>
<title><![CDATA[Implementación algoritmo Prim en Python]]></title>
<link>http://fitorec.wordpress.com/2009/10/25/implementacion-algoritmo-prim-en-python/</link>
<pubDate>Sun, 25 Oct 2009 19:57:23 +0000</pubDate>
<dc:creator>fitorec</dc:creator>
<guid>http://fitorec.wordpress.com/2009/10/25/implementacion-algoritmo-prim-en-python/</guid>
<description><![CDATA[Marco teórico: El algoritmo de Prim es un algoritmo de la teoría de los grafos para encontrar un árb]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><h4>Marco teórico:</h4>
<p>El algoritmo de Prim es un algoritmo de la teoría de los grafos para encontrar un árbol recubridor mínimo<br />
en un grafo conexo, no dirigido y cuyas aristas están etiquetadas.<br />
En otras palabras, el algoritmo encuentra un subconjunto de aristas que forman un árbol con todos los<br />
vértices, donde el peso total de todas las aristas en el árbol es el mínimo posible. Si el grafo no es conexo,<br />
entonces el algoritmo encontrará el árbol recubridor mínimo para uno de los componentes conexos que<br />
forman dicho grafo no conexo [?] .</p>
<h4>Implementación en Python:</h4>
<pre>#!/usr/bin/python
#        Copyright (C) 2009 fitorec - chanerec@gmail.com
#        Archivo	: prim.py
#        Creado     : 2009-05-31
#        Modificado : 2009-05-31
#       ======================= Descripcion ===========================
#		Input: leemos el grafo de un archivo denominado "grafo" el cual
#				debera estar en el mismo directorio.

import sys, re, string
print "archivo de entrada: 'grafo'"

#funcion auxiliar para extraer los datos del archivo
def extrDatos(linea):
	l = []
	v0 = re.compile("[[a-zA-Z]+ ")
	v1 = re.compile(" [[a-zA-Z]+ ")
	v2 = re.compile("[0-9]+")
	line = re.compile("[a-zA-Z]+ [a-zA-Z]+ [0-9]+")
	mo = line.search(linea)
	if mo:
		print mo.group(0)
	mo = v2.search(linea)
	l2 = []
	if mo:
		l.append(int(mo.group(0)))
	mo = v0.search(linea)
	if mo:
		l.append(mo.group(0).replace(" ",""))
	mo = v1.search(linea)
	if mo:
		l.append(mo.group(0).replace(" ",""))
	l.append(False)
	return l

#revisa si la arista y si alguno de sus nodos no han sido  marcados
def entra(nodo,arista):
	if arista[3] == True :
		return False
	if nodo[0] == arista[1]:
		return True
	if nodo[0] == arista[2]:
		return True
	return False

#revisa si el el vertice v conduce a un nodo nuevo en visitados
def noVisitado(v,visitados):
	if v[3] == True:
		return "$"
	for i in visitados:
		if i[1] == True:
			continue
		if i[0] == v[1]:
			return i[0]
		if i[0] == v[2]:
			return i[0]
	return "$"

f = open("grafo","r")
grafo = []
visitados = []

while True:
     entrada = []
     linea = f.readline()
     if not linea: break
     if re.match("[a-zA-Z]+ [a-zA-Z]+ [0-9]+",linea) :
     	grafo.append(extrDatos(linea))

grafo.sort()

#insertando los nodos a visitados
for i in grafo:
	band = True
	for j in visitados:
		if i[1] == j[0]:
			band = False
			break
	if band == True:
		visitados.append([i[1],False])
	band = True
	for j in visitados:
		if i[2] == j[0]:
			band = False
	if band == True:
		visitados.append([i[2],False])

#iniciando el algoritmo de prim
visitados[0][1] = True;
band = False;
print "\nSe inicio el algoritmo PRIM con el nodo %s" % visitados[0][0]
while band == False:
	vertices = []
	band = True
	for i in range(len(visitados)):
		if visitados[i][1] == False:
			continue
		for j in range(len(grafo)):
			if entra(visitados[i],grafo[j]):
				vertices.append(j)

		vertices.sort()
	for i in vertices:
		s = noVisitado(grafo[i],visitados)
		if s == "$":
			continue
		print "Conociendo %s a traves [(%s,%s),%s]" % (s,grafo[i][1],grafo[i][2],grafo[i][0])
		for j in visitados:
			if j[0] == s:
				j[1] = True
		grafo[i][3] = True
		break
	for n in visitados:
		if n[1] == False:
			band = False
			break

print "\nArbol de expansion minima: "
for i in grafo:
	if i [3] == True:
		print "[(%s,%s),%s]" % (i[1],i[2],i[0])</pre>
<h4>Corrida de ejemplo:</h4>
<p>Para la corrida de ejemplo necesitamos un archivo de entrada el cual describa un grafo para esto he elegida el grafo de la documentacion de wikipedia <a title="Prim" href="http://es.wikipedia.org/wiki/Algoritmo_de_Prim">http://es.wikipedia.org/wiki/Algoritmo_de_Prim</a> .</p>
<div id="attachment_330" class="wp-caption aligncenter" style="width: 210px"><a href="http://es.wikipedia.org/wiki/Algoritmo_de_Prim"><img class="size-full wp-image-330" title="200px-Prim_Algorithm_0.svg" src="http://fitorec.wordpress.com/files/2009/10/200px-prim_algorithm_0-svg.png" alt="Grafo a utlizar (Extraido de Wikipedia)" width="200" height="168" /></a><p class="wp-caption-text">Grafo a utlizar (Extraido de Wikipedia)</p></div>
<p>Ahora necesitamos insertale al algorimo el grafo par este caso hemos generado el siguiente archivo denominado grafo el cual tine el siguinente formato (nodoA nodoB pesoEntreAyB), veamos el grafo que describe la imagen antes mostrada.</p>
<pre>A B 7
A D 5
B C 8
B E 7
D E 15
D F 6
F E 8
F G 11
E G 9
C E 5
B D 9</pre>
<p><strong>Pasos:</strong></p>
<p><strong>Paso 1:</strong>Ninguna de las aristas está marcada, y el vértice A ha sido elegido arbitrariamente como el punto de<br />
partida.<br />
<strong>Paso 2:</strong> El Primer vértice es el más cercano a A es D está a 5 de distancia,ya que B se localiza a una<br />
distancia de 7, así que marcamos la arista [(A,D),5] y el nodo A como visitado.<br />
<strong>Paso 3:</strong> Ahora que solo conoce al Nodo A y D el nodo siguiente por conocer es F a travez de la arista<br />
3<br />
[(D,F),6].<br />
<strong>Paso 4:</strong> Conociendo B a traves [(A,B),7]<br />
<strong>Paso 5: </strong>Conociendo E a traves [(B,E),7]<br />
<strong>Paso 6:</strong> Conociendo C a traves [(C,E),5]<br />
<strong>Paso 7:</strong> Conociendo G a traves [(E,G),9]</p>
<h4>salida en linea de comando</h4>
<p>Por ultimo muestro la salida en linea de comandos al ejecutar el script.</p>
<pre>usuario@host$./prim.py
archivo de entrada: ’grafo’
A B 7
A D 5
B C 8
B E 7
D E 15
D F 6
F E 8
F G 11
E G 9
C E 5
B D 9
Se inicio el algoritmo PRIM con el nodo A
Conociendo D a traves [(A,D),5]
Conociendo F a traves [(D,F),6]
Conociendo B a traves [(A,B),7]
Conociendo E a traves [(B,E),7]
Conociendo C a traves [(C,E),5]
Conociendo G a traves [(E,G),9]
Arbol de expansion minima:
[(A,D),5]
[(C,E),5]
[(D,F),6]
[(A,B),7]
[(B,E),7]
[(E,G),9]

<a href="http://gist.github.com/218222">Decargar Codigo</a></pre>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Criptografía ]]></title>
<link>http://intelcac.wordpress.com/2009/10/24/criptografia/</link>
<pubDate>Sat, 24 Oct 2009 10:19:50 +0000</pubDate>
<dc:creator>Admin.</dc:creator>
<guid>http://intelcac.wordpress.com/2009/10/24/criptografia/</guid>
<description><![CDATA[Un artículo muy interesante publicado in Segu-info. La palabra Criptografía proviene etimológicament]]></description>
<content:encoded><![CDATA[Un artículo muy interesante publicado in Segu-info. La palabra Criptografía proviene etimológicament]]></content:encoded>
</item>
<item>
<title><![CDATA[Algoritmos 01]]></title>
<link>http://msninformatica.wordpress.com/2009/10/22/video-algoritmos-01/</link>
<pubDate>Thu, 22 Oct 2009 21:34:24 +0000</pubDate>
<dc:creator>MSN INFORMÁTICA</dc:creator>
<guid>http://msninformatica.wordpress.com/2009/10/22/video-algoritmos-01/</guid>
<description><![CDATA[]]></description>
<content:encoded><![CDATA[]]></content:encoded>
</item>
<item>
<title><![CDATA[Triângulo]]></title>
<link>http://algoritmus.wordpress.com/2009/10/12/triangulo/</link>
<pubDate>Mon, 12 Oct 2009 03:47:31 +0000</pubDate>
<dc:creator>jcsilva</dc:creator>
<guid>http://algoritmus.wordpress.com/2009/10/12/triangulo/</guid>
<description><![CDATA[Hoje construiremos um algoritmo para um problema geométrico: dados três pontos, decidir se eles form]]></description>
<content:encoded><![CDATA[Hoje construiremos um algoritmo para um problema geométrico: dados três pontos, decidir se eles form]]></content:encoded>
</item>
<item>
<title><![CDATA[Maior de um Conjunto]]></title>
<link>http://algoritmus.wordpress.com/2009/10/12/maior-de-um-conjunto/</link>
<pubDate>Mon, 12 Oct 2009 03:10:08 +0000</pubDate>
<dc:creator>jcsilva</dc:creator>
<guid>http://algoritmus.wordpress.com/2009/10/12/maior-de-um-conjunto/</guid>
<description><![CDATA[Um exemplo simples de algoritmo é o tipo em que se deve escolher o maior ou o menor em um grupo de n]]></description>
<content:encoded><![CDATA[Um exemplo simples de algoritmo é o tipo em que se deve escolher o maior ou o menor em um grupo de n]]></content:encoded>
</item>
<item>
<title><![CDATA[Maior de um Conjunto Sem Perda de Dados]]></title>
<link>http://algoritmus.wordpress.com/2009/10/12/maior-de-um-conjunto-sem-perda-de-dados/</link>
<pubDate>Mon, 12 Oct 2009 03:09:23 +0000</pubDate>
<dc:creator>jcsilva</dc:creator>
<guid>http://algoritmus.wordpress.com/2009/10/12/maior-de-um-conjunto-sem-perda-de-dados/</guid>
<description><![CDATA[Em um post passado vimos um exemplo simples de algoritmo para escolher o maior ou o menor em um grup]]></description>
<content:encoded><![CDATA[Em um post passado vimos um exemplo simples de algoritmo para escolher o maior ou o menor em um grup]]></content:encoded>
</item>
<item>
<title><![CDATA[Algoritmo simples para calcular equação]]></title>
<link>http://algoritmus.wordpress.com/2009/10/12/algoritmo-simples-para-calcular-equacao/</link>
<pubDate>Mon, 12 Oct 2009 00:04:25 +0000</pubDate>
<dc:creator>jcsilva</dc:creator>
<guid>http://algoritmus.wordpress.com/2009/10/12/algoritmo-simples-para-calcular-equacao/</guid>
<description><![CDATA[Um dos primeiros usos dos computadores foi como máquina de calcular. Por exemplo, os computadores er]]></description>
<content:encoded><![CDATA[Um dos primeiros usos dos computadores foi como máquina de calcular. Por exemplo, os computadores er]]></content:encoded>
</item>
<item>
<title><![CDATA[Respirar, uma questão dimensional. Parte1]]></title>
<link>http://blubits.wordpress.com/2009/10/11/respirar-uma-questao-dimensional-parte1/</link>
<pubDate>Sun, 11 Oct 2009 16:22:36 +0000</pubDate>
<dc:creator>Adriano Lima</dc:creator>
<guid>http://blubits.wordpress.com/2009/10/11/respirar-uma-questao-dimensional-parte1/</guid>
<description><![CDATA[Olá a todos, há alguns dias atrás um amigo me pediu um algoritmo de uma pessoa acordando, então come]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Olá a todos, há alguns dias atrás um amigo me pediu um algoritmo de uma pessoa acordando, então comecei a descrever os passos necessários (segundo o meu ponto de vista) para completar esta tarefa, após algumas instruções ele me interrompeu e disse que havia erros no meu &#8220;código&#8221;, curioso quis observar o &#8220;debug&#8221; dele.<br />
Ele me disse que eu deveria ter adicionado uma instrução para respirar.<br />
Logo retruquei: &#8211;E por acaso você necessita se concentrar e relembrar a si mesmo de que precisa respirar!? Pelo que sei o ato de respirar independe da vontade da pessoa, senão ao dormir morreríamos. Como argumento ele respondeu que não se trata de uma pessoa e sim de um algoritmo, por isso é preciso adicionar a instrução. Logo respondi que este nível de complexidade depende do projeto apresentado; ele me pediu um algoritmo descrevendo os passos necessários para UMA PESSOA acordar e NÃO UM ROBÔ!!! E mesmo se fosse um robô, por que iria precisar dessa instrução? Por acaso é um ANDROID!? E nisso volto a questão inicial: Qual a real dimensão do problema a ser resolvido? Em qual tipo de linguagem será escrito, de alto nível ou baixo nível?<br />
O maior erro cometido por alguns desenvolvedores é não terem idéia do problema que terão de resolver, e não é do macroprocesso apenas que estou falando e sim do conceito &#8220;dividir para conquistar&#8221;.Por vezes observo casos onde os problemas não são divididos de forma equilibrada.<br />
Continua&#8230;</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Dicas Delphi Parte II]]></title>
<link>http://simasware.wordpress.com/2009/10/11/dicas-delphi-parte-ii/</link>
<pubDate>Sun, 11 Oct 2009 02:10:07 +0000</pubDate>
<dc:creator>simasware</dc:creator>
<guid>http://simasware.wordpress.com/2009/10/11/dicas-delphi-parte-ii/</guid>
<description><![CDATA[Boa noite a todos que por aqui passam! Hoje veremos algumas dicas que podem ser interessantes a você]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Boa noite a todos que por aqui passam! Hoje veremos algumas dicas que podem ser interessantes a você que programa em Delphi.</p>
<p><strong>Convertendo um JPG para BMP</strong></p>
<p>Se você precisa gravar uma imagem numa tabela no banco de dados e acha confuso trabalhar com TBlobStream, eis uma dica que pode ser util, converter uma imagem JPG em bitmap.</p>
<pre class="brush: delphi;">
procedure JPEGtoBMP(const FileName: TFileName);
var
 jpeg: TJPEGImage;
 bmp:  TBitmap;
begin
 jpeg := TJPEGImage.Create;//criamos uma imagem jpg
 try
 jpeg.CompressionQuality := 100; //aqui definimos a qualidade da compressão(quanto maior,

menor será o arquivo). 100 é o valor default.
 jpeg.LoadFromFile(FileName); //carregamos a imagem
 bmp := TBitmap.Create; //criamos nosso bitmap
 try
 bmp.Assign(jpeg);//passamos o conteudo da váriavel jpeg para a variavel bmp
 bmp.SaveTofile(ChangeFileExt(FileName, '.bmp'));//por fim salvamos o arquivo.
 finally
 bmp.Free //liberamos o bmp da memória
 end;
 finally
 jpeg.Free //liberamos o jpeg da memória.
 end;
end;
</pre>
<p><strong>Imitando a função RPAD/LPAD do MySQL.</strong></p>
<p>A função RPAD e LPAD do MySQL é uma função que pode nos ser muito util, por exemplo, no caso de querermos exibir e/ou gravar no banco de dados ou onde quer que seja um valor preenchido com zeros a esquerda ou a direita por exemplo.<br />
A função abaixo mostrará como preencher uma string com n caracteres informados pelo programador.</p>
<pre class="brush: delphi;">
function LPAD(const texto: string; const Caracter: char;num_vezes: integer): string;
var
 contador: integer; //variavel auxiliar para o laço
 auxiliar: string;  //variavel auxiliar para montar nossa string
begin
 auxiliar := texto;//auxiliar recebe o texto informado
 contador := 1;//inicia nosso contador
 while contador &#60;= num_vezes do//executa enquanto o contador for menor ou igual a num_vezes
 begin
 Insert(Caracter, auxiliar, 1);//função do delphi que insere uma string em outra no index
//informado(index 1 é o inicio da string)
 inc(contador);//incrementa o contador, se não o fizer, teremos um laço infinito <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />
 end;
 result := auxiliar;//retorna a nossa string montada
end;
</pre>
<p>A função acima irá inserir Caracter n(num_vezes) vezes a esquerda da string passada como</p>
<p>parametro.</p>
<p>Para a função RPAD, é praticamente o mesmo código, só mudaremos a linha do insert, que receberá o último index da string.</p>
<pre class="brush: delphi;">
Insert(Caracter, auxiliar, length(auxiliar) + length(texto));//irá último index da string
</pre>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Brevíssima História dos Algoritmos]]></title>
<link>http://algoritmus.wordpress.com/2009/10/10/historia-dos-algoritmos/</link>
<pubDate>Sat, 10 Oct 2009 13:04:52 +0000</pubDate>
<dc:creator>jcsilva</dc:creator>
<guid>http://algoritmus.wordpress.com/2009/10/10/historia-dos-algoritmos/</guid>
<description><![CDATA[A palavra algoritmo vem do nome do astrólogo persa do século 9 Abu Abdullah Muhammad bin Musa al-Khw]]></description>
<content:encoded><![CDATA[A palavra algoritmo vem do nome do astrólogo persa do século 9 Abu Abdullah Muhammad bin Musa al-Khw]]></content:encoded>
</item>
<item>
<title><![CDATA[Para que servem os algoritmos?]]></title>
<link>http://algoritmus.wordpress.com/?p=20</link>
<pubDate>Sat, 10 Oct 2009 13:03:48 +0000</pubDate>
<dc:creator>jcsilva</dc:creator>
<guid>http://algoritmus.wordpress.com/?p=20</guid>
<description><![CDATA[]]></description>
<content:encoded><![CDATA[]]></content:encoded>
</item>
<item>
<title><![CDATA[Teoria da Computação]]></title>
<link>http://algoritmus.wordpress.com/?p=22</link>
<pubDate>Fri, 09 Oct 2009 20:33:41 +0000</pubDate>
<dc:creator>jcsilva</dc:creator>
<guid>http://algoritmus.wordpress.com/?p=22</guid>
<description><![CDATA[]]></description>
<content:encoded><![CDATA[]]></content:encoded>
</item>
<item>
<title><![CDATA[Algoritmo para gerar um sudoku NxN válido. ]]></title>
<link>http://simasware.wordpress.com/2009/10/08/algoritmo-para-gerar-um-sudoku-nxn-valido/</link>
<pubDate>Thu, 08 Oct 2009 16:02:39 +0000</pubDate>
<dc:creator>simasware</dc:creator>
<guid>http://simasware.wordpress.com/2009/10/08/algoritmo-para-gerar-um-sudoku-nxn-valido/</guid>
<description><![CDATA[Na faculdade, na aula de programação a professora nos pediu para gerarmos um sudoku válido. Depois d]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p style="text-align:justify;">Na faculdade, na aula de programação a professora nos pediu para   gerarmos um sudoku válido. Depois de tantas tentativas sem   sucesso, encontrei este algoritmo polinomial em Java(que pode ser   facilmente traduzido para C++) na Wikipedia:</p>
<pre class="brush: java;">
final int n = 3;//aqui vai o numero de elementos do seu sudoku(3 vai ser um sudoku 3x3
final int[][] field = new int[n*n][n*n];//matriz onde será armazenado o sudoku
int x = rand()%10;//semente aleatória para não gerar o mesmo sudoku
for(int i = 0; i &#60; n; i++, x++)
	for(int j = 0; j &#60; n; j++, x+=n)
		for(int k = 0; k &#60; n*n; k++, x++)
			field[n*i+j][k] = (x % (n*n)) + 1;
</pre>
</div>]]></content:encoded>
</item>

</channel>
</rss>
