<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-37481028</atom:id><lastBuildDate>Fri, 27 Jan 2012 21:08:34 +0000</lastBuildDate><category>Redes</category><category>Libros</category><category>Visual Basic 6.0</category><category>Bases de datos</category><category>SQL</category><category>ImageReady</category><category>C</category><category>Sitios Güev</category><category>Univa</category><category>TICs</category><category>Sistemas Operativos</category><category>Fotos</category><category>Kairós</category><category>Comunicación</category><category>Java</category><category>Visual Basic .net</category><category>Dreamweaver</category><category>Cosas verdes</category><category>Casos de Estudio</category><category>Fireworks</category><category>Google</category><category>Historia</category><category>Campamentos</category><category>Photoshop</category><category>Avisos de ocasión</category><category>Algoritmos</category><category>C++</category><category>Flash</category><category>Tecnología Educativa</category><category>Freehand</category><category>Virus</category><category>Software</category><category>Hardware</category><category>GDI+</category><category>Humor</category><category>Diseño gráfico</category><category>Karel</category><category>Formulario</category><category>Facebook</category><category>Videojuegos</category><category>Movie Maker</category><category>ADO</category><title>El Tony y sus ondas...</title><description>Programación, comunicación, diseño, videojuegos y el más allá...</description><link>http://tony-valderrama.blogspot.com/</link><managingEditor>noreply@blogger.com (Tony Valderrama)</managingEditor><generator>Blogger</generator><openSearch:totalResults>298</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/ElTonyYSusOndas" /><feedburner:info uri="eltonyysusondas" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.0/</creativeCommons:license><image><link>http://feeds.feedburner.com/ElTonyYSusOndas</link><url>http://www.feedburner.com/fb/images/pub/fb_pwrd.gif</url></image><feedburner:emailServiceId>ElTonyYSusOndas</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item><guid isPermaLink="false">tag:blogger.com,1999:blog-37481028.post-3553481402962772543</guid><pubDate>Fri, 06 Jan 2012 03:18:00 +0000</pubDate><atom:updated>2012-01-05T21:18:23.674-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Fotos</category><category domain="http://www.blogger.com/atom/ns#">Univa</category><title>Fotos del semestre Agosto-Diciembre 2011</title><description>&lt;p align="justify"&gt;Por eso de andar en fiestas de navidad, año nuevo y etcéteras se me había pasado subir estas imágenes que son las fotos que tomé de cada grupo al que le di clases este semestre.&amp;#160; No sé ustedes, pero yo me divertí mucho.&amp;#160; Gracias por todo.&lt;/p&gt;  &lt;p align="justify"&gt;Nota: hagan clic en las fotos para verlos en tamaño completo.&lt;/p&gt; &lt;center&gt;   &lt;p&gt;&lt;font size="4"&gt;&lt;strong&gt;1er Semestre, General Bilingüe (1 BGB)&lt;/strong&gt;&amp;#160; &lt;br /&gt;&lt;/font&gt;&lt;em&gt;Materia: Informática I&lt;/em&gt; &lt;/p&gt;    &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-sYYloZlRoVc/TwZiPnqg6oI/AAAAAAAACdI/wYsnq2xRFFI/s1600-h/1%252520BGB%25255B6%25255D.jpg" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="1 BGB" border="0" alt="1 BGB" src="http://lh6.ggpht.com/-AZQ5znIrtuM/TwZiR_uAy9I/AAAAAAAACdQ/FgcLi07Nbuc/1%252520BGB_thumb%25255B3%25255D.jpg?imgmax=800" width="492" height="370" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;/center&gt;  &lt;p align="center"&gt;&lt;font size="4"&gt;&lt;strong&gt;1er Semestre, Comunicación Bilingüe (1 TCM)&lt;/strong&gt;       &lt;br /&gt;&lt;/font&gt;&lt;em&gt;Materia: TICs&lt;/em&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh4.ggpht.com/-JdZzV8vFcm8/TwZjFPShfcI/AAAAAAAACdY/MtCY2En2hFI/s1600-h/1%252520TCB%25255B6%25255D.jpg" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="1 TCB" border="0" alt="1 TCB" src="http://lh4.ggpht.com/-I8Vjn56_6Eo/TwZjHR7oeEI/AAAAAAAACdg/NNFArP6qSSY/1%252520TCB_thumb%25255B3%25255D.jpg?imgmax=800" width="492" height="370" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;font size="4"&gt;&lt;strong&gt;3er Semestre, Comunicación Bilingüe (3 TCM)&lt;/strong&gt;       &lt;br /&gt;&lt;/font&gt;&lt;em&gt;Materia: Informática&lt;/em&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh4.ggpht.com/-Zb8VyVWcyJM/TwZj7m5nzKI/AAAAAAAACdo/Gz6wEVQGYYY/s1600-h/3%252520TCB%2525200%25255B4%25255D.jpg" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="3 TCB 0" border="0" alt="3 TCB 0" src="http://lh6.ggpht.com/-ZHHqYCQgjCY/TwZj8lit68I/AAAAAAAACdw/qHWV1QkYXtU/3%252520TCB%2525200_thumb%25255B1%25255D.jpg?imgmax=800" width="244" height="184" /&gt;&lt;/a&gt;&amp;#160; &lt;a href="http://lh6.ggpht.com/-qQ-jAJ8hazA/TwZkyAvnREI/AAAAAAAACd4/6wgTeMjXqSw/s1600-h/3%252520TCB%25255B4%25255D.jpg" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="3 TCB" border="0" alt="3 TCB" src="http://lh5.ggpht.com/-Xn4bQG1oPu8/TwZkzOya7oI/AAAAAAAACeA/NEla5E-uy3c/3%252520TCB_thumb%25255B1%25255D.jpg?imgmax=800" width="244" height="184" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;font size="4"&gt;&lt;strong&gt;3er Semestre, Programador (3 TPO)&lt;/strong&gt;       &lt;br /&gt;&lt;/font&gt;&lt;em&gt;Materia: Principios de Programación&lt;/em&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;em&gt;&lt;a href="http://lh5.ggpht.com/-ABLrB4Q6Hjo/TwZllhS0C9I/AAAAAAAACeI/rJu4261yGb4/s1600-h/3%252520TPO%25255B5%25255D.jpg" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="3 TPO" border="0" alt="3 TPO" src="http://lh4.ggpht.com/-QYYkhj0P5rk/TwZloGu1vyI/AAAAAAAACeQ/BLhArhNv2pY/3%252520TPO_thumb%25255B2%25255D.jpg?imgmax=800" width="492" height="370" /&gt;&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;font size="4"&gt;&lt;strong&gt;3er Semestre, Informática Administrativa (3 TIA)&lt;/strong&gt;       &lt;br /&gt;&lt;/font&gt;&lt;em&gt;Materia: Algoritmos y Programación&lt;/em&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;em&gt;&lt;a href="http://lh3.ggpht.com/-zCv9e1AigYs/TwZmVk2eOoI/AAAAAAAACeY/jBCcAoksG1M/s1600-h/3%252520TIA%25255B8%25255D.jpg" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="3 TIA" border="0" alt="3 TIA" src="http://lh5.ggpht.com/-PEhKyrHnj4A/TwZmWv4kPpI/AAAAAAAACeg/321IgsOYsQY/3%252520TIA_thumb%25255B2%25255D.jpg?imgmax=800" width="244" height="184" /&gt;&lt;/a&gt;&amp;#160;&lt;a href="http://lh6.ggpht.com/-rCOINVVClEI/TwZnKaL6QeI/AAAAAAAACeo/UUj_yLUhcQQ/s1600-h/3%252520TIA%2525200%25255B4%25255D.jpg" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="3 TIA 0" border="0" alt="3 TIA 0" src="http://lh6.ggpht.com/-Qdgn6qJSdis/TwZnLQtiRPI/AAAAAAAACes/-bshzaDgNxU/3%252520TIA%2525200_thumb%25255B1%25255D.jpg?imgmax=800" width="244" height="184" /&gt;&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;font size="4"&gt;&lt;strong&gt;5to Semestre, Programador (5 TPO)&lt;/strong&gt;       &lt;br /&gt;&lt;/font&gt;&lt;em&gt;Materias: Programación Visual Basic y Estructura de Datos&lt;/em&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;em&gt;&lt;a href="http://lh4.ggpht.com/-nCRv3dIwWyA/TwZn9dFs5EI/AAAAAAAACe4/PYUzWucHTcw/s1600-h/5%252520TPO%25255B5%25255D.jpg" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="5 TPO" border="0" alt="5 TPO" src="http://lh3.ggpht.com/-fEbKfywjqu0/TwZn_kUuFUI/AAAAAAAACfA/6GIjTaS-2gg/5%252520TPO_thumb%25255B2%25255D.jpg?imgmax=800" width="492" height="370" /&gt;&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37481028-3553481402962772543?l=tony-valderrama.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElTonyYSusOndas/~4/SiGJBEhMEOk" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ElTonyYSusOndas/~3/SiGJBEhMEOk/fotos-del-semestre-agosto-diciembre.html</link><author>noreply@blogger.com (Tony Valderrama)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-AZQ5znIrtuM/TwZiR_uAy9I/AAAAAAAACdQ/FgcLi07Nbuc/s72-c/1%252520BGB_thumb%25255B3%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://tony-valderrama.blogspot.com/2012/01/fotos-del-semestre-agosto-diciembre.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-37481028.post-709097035835778739</guid><pubDate>Sun, 06 Nov 2011 04:04:00 +0000</pubDate><atom:updated>2011-11-05T22:04:35.630-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">C++</category><title>Sobrecargando operadores en C++</title><description>&lt;p align="justify"&gt;Una de las ventajas de la programación orientada a objetos es el polimorfismo (como expliqué &lt;a href="http://tony-valderrama.blogspot.com/2008/08/paradigmas-de-programacin-y-muchos.html" target="_blank"&gt;aquí&lt;/a&gt; hace años).&amp;#160; Esto quiere decir que puedes tener varias funciones con el mismo nombre, pero con diferentes parámetros y/o tipos que devuelve.&amp;#160; Entonces en tu programa, al llamar a la función, va a elegir la versión de la función que necesitas.&amp;#160; Eso te ahorra mucho código.&lt;/p&gt;  &lt;p align="justify"&gt;Algo similar se pueden hacer con los operadores (que técnicamente no es polimorfismo como tal).&amp;#160; Por ejemplo, el operador &lt;font face="Courier New"&gt;+&lt;/font&gt; está definido en &lt;a href="http://tony-valderrama.blogspot.com/search/label/C" target="_blank"&gt;C&lt;/a&gt; y &lt;a href="http://tony-valderrama.blogspot.com/search/label/C%2B%2B" target="_blank"&gt;C++&lt;/a&gt; para sumar dos números (sea &lt;font face="Courier New"&gt;int&lt;/font&gt;, &lt;font face="Courier New"&gt;double&lt;/font&gt;, &lt;font face="Courier New"&gt;float&lt;/font&gt; u otro &lt;a href="http://tony-valderrama.blogspot.com/2009/01/tipos-de-datos-y-variables.html" target="_blank"&gt;tipo de dato&lt;/a&gt; numérico).&amp;#160; Pero C++ agrega una clase &lt;font face="Courier New"&gt;string&lt;/font&gt; que sobrecarga el operador &lt;font face="Courier New"&gt;+&lt;/font&gt; para que, cuando trabaje con objeto de tipo &lt;font face="Courier New"&gt;string&lt;/font&gt;, los concatene (o sea que &lt;font face="Courier New"&gt;“Tony ” + “Valderrama” = “Tony Valderrama”&lt;/font&gt;).&amp;#160; De la misma forma lo puedo hacer con diferentes clases para que estas operaciones funcionen de forma lógica con otros tipos de datos.&lt;/p&gt;  &lt;p align="justify"&gt;Para ejemplificar esto, hice una clase que almacena Fechas (llamada sabiamente &lt;font face="Courier New"&gt;Fecha&lt;/font&gt;, jeje) que permite sumar dos fechas (operador &lt;font face="Courier New"&gt;+)&lt;/font&gt;, agregar un día (operador &lt;font face="Courier New"&gt;++&lt;/font&gt; postfijo) y por medio de una función amiga modifico el comportamiento del operador de flujo de salida (&lt;font face="Courier New"&gt;&amp;lt;&amp;lt;&lt;/font&gt;, tipo que se usa para la instrucción &lt;font face="Courier New"&gt;cout&lt;/font&gt;).&amp;#160; Como te imaginarás, sumar fechas es diferente a sumar dos números porque hay que validar que los números de meses sean correctos (hay meses de 31, 30, 28 o 29), que los meses no pasen de 12, etc.&amp;#160; Aquí está la definición de la clase:&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh5.ggpht.com/-ahN62dfROYM/TrYHCjGcCVI/AAAAAAAACag/idw073wAdtU/s1600-h/00-class-Fecha18.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="00-Class Fecha" border="0" alt="00-Class Fecha" src="http://lh5.ggpht.com/-E69bHXHG9vE/TrYHDqZkzhI/AAAAAAAACao/4mfQvxa_j9A/00-class-Fecha_thumb12.png?imgmax=800" width="621" height="228" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Aquí declaro dos constructores: uno de ellos, el default, que no lleva parámetros y otro al que se le pueden pasar 3 enteros (para asignarle día, mes y año, respectivamente) para inicializarlo desde que crea el objeto.&amp;#160; Luego viene la función que sobrecarga el operador +, luego el que sobrecarga la operación ++ postfijo.&amp;#160; ¿Pero qué es postfijo?&amp;#160; Es cuando el operador ++ lo escribes después del nombre de la variable/objeto.&amp;#160; Como saben, no es exactamente los mismo &lt;font face="Courier New"&gt;++x&lt;/font&gt; (prefijo) que &lt;font face="Courier New"&gt;x++&lt;/font&gt; (postfijo) porque en el primero se encarga de incrementar la variable antes de realizar la operación, mientras que el segundo primero hace la operación y luego incrementa.&amp;#160; Ejemplo:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="Courier New"&gt;int x=3;      &lt;br /&gt;cout &amp;lt;&amp;lt; ++x;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Esto imprime 4 porque incrementa antes del cout       &lt;br /&gt;cout &amp;lt;&amp;lt; x++;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Imprime 4 y luego incrementa el valor de x&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Una vez declarada la versión postfijo, sobrecargo el mismo operador ++ pero ahora el prefijo.&amp;#160; Si te fijas hay solo 2 diferencias entre la declaración de uno y otro: el postfijo devuelve un objeto &lt;font face="Courier New"&gt;Fecha&lt;/font&gt; y recibe de parámetro un &lt;font face="Courier New"&gt;int&lt;/font&gt;; mientras el otro devuelve un &lt;a href="http://tony-valderrama.blogspot.com/2009/10/apuntadores-en-c-pa-onde-apunto.html" target="_blank"&gt;apuntador&lt;/a&gt; al objeto &lt;font face="Courier New"&gt;Fecha&lt;/font&gt; y no recibe parámetros. Más adelante en el código se verá la diferencia más clara (espero). Después de esto, declaro una función amiga (&lt;font face="Courier New"&gt;friend&lt;/font&gt;) que se va a encargar de sobrecargar el operador &lt;font face="Courier New"&gt;&amp;lt;&amp;lt;,&lt;/font&gt; otra que sobrecarga el operador &lt;font face="Courier New"&gt;&amp;gt;&amp;gt;&lt;/font&gt; y otras dos funciones: una que devuelve el día máximo de acuerdo al mes y año (necesitamos el año por aquello de los &lt;a href="http://es.wikipedia.org/wiki/A%C3%B1o_bisiesto" target="_blank"&gt;años bisiestos&lt;/a&gt;) y otra función que le asigna valores al día, mes y año (este lo usé para probar la asignación antes de sobrecargar el operador &lt;font face="Courier New"&gt;&amp;gt;&amp;gt;&lt;/font&gt;).&lt;/p&gt;  &lt;p align="justify"&gt;Cabe recalcar que los operadores &lt;font face="Courier New"&gt;&amp;gt;&amp;gt;&lt;/font&gt; y &lt;font face="Courier New"&gt;&amp;lt;&amp;lt;&lt;/font&gt; no son funciones miembro de la clase y devuelven &lt;em&gt;streams&lt;/em&gt; (&lt;font face="Courier New"&gt;istream&lt;/font&gt; es &lt;em&gt;Input stream&lt;/em&gt; o flujo de entrada y &lt;font face="Courier New"&gt;ostream&lt;/font&gt; es Output stream o &lt;em&gt;flujo de salida&lt;/em&gt;).&amp;#160; Son muy similares en su función a los &lt;font face="Courier New"&gt;string&lt;/font&gt;s pero mucho más versátiles para algunos usos.&lt;/p&gt;  &lt;p align="justify"&gt;Volviendo al código puedes observar que los constructores no tienen ningún chiste.&amp;#160; Aquí está el código:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://lh3.ggpht.com/-mKxpUbwLAks/TrYHEH_Q8YI/AAAAAAAACaw/luETJBOUL10/s1600-h/01-Constructores4.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="01-Constructores" border="0" alt="01-Constructores" src="http://lh4.ggpht.com/-hdrALI77OaY/TrYHFeQkgzI/AAAAAAAACa4/ji-8polQBeA/01-Constructores_thumb2.png?imgmax=800" width="244" height="178" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;El primer operador que sobrecargo es el +.&amp;#160; Aquí está el código:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-OOY5wn2BQgg/TrYHFwqt6OI/AAAAAAAACbA/Q5dnm9X3HiA/s1600-h/02-Operador6.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="02-Operador " border="0" alt="02-Operador " src="http://lh3.ggpht.com/-MUUp3FRtyhc/TrYHG5t5msI/AAAAAAAACbI/6O-4kQzL3F4/02-Operador_thumb4.png?imgmax=800" width="303" height="359" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Supongamos que en mi función &lt;font face="Courier New"&gt;main()&lt;/font&gt; declaro dos objetos te tipo fecha llamados &lt;font face="Courier New"&gt;A&lt;/font&gt;, &lt;font face="Courier New"&gt;B&lt;/font&gt; y &lt;font face="Courier New"&gt;C&lt;/font&gt;.&amp;#160; Si escribo la operación &lt;font face="Courier New"&gt;C=A+B&lt;/font&gt; se ejecuta esta función.&amp;#160; El valor de &lt;font face="Courier New"&gt;A&lt;/font&gt; sería el “local”, es decir, cuando hago referencia a &lt;font face="Courier New"&gt;dia&lt;/font&gt;, &lt;font face="Courier New"&gt;mes&lt;/font&gt; y &lt;font face="Courier New"&gt;anio&lt;/font&gt;, estoy accesando estas variables del objeto &lt;font face="Courier New"&gt;A&lt;/font&gt;.&amp;#160; El parámetro que le paso (llamado &lt;font face="Courier New"&gt;x&lt;/font&gt;) tendría los valores almacenados en &lt;font face="Courier New"&gt;B&lt;/font&gt;. así que, cuando hago referencia a &lt;font face="Courier New"&gt;x.dia&lt;/font&gt;, &lt;font face="Courier New"&gt;x.mes&lt;/font&gt; y &lt;font face="Courier New"&gt;x.anio&lt;/font&gt; me estoy refiriendo a estos campos en el objeto &lt;font face="Courier New"&gt;B&lt;/font&gt;.&lt;/p&gt;  &lt;p align="justify"&gt;Una vez aclarado de los parámetros, pasemos a ver qué hace esta función.&amp;#160; En &lt;font face="Courier New"&gt;x&lt;/font&gt; recibe el valor de la fecha que se le va a sumar (días, meses y años).&amp;#160; Luego declaro un objeto &lt;font face="Courier New"&gt;Fecha&lt;/font&gt; (&lt;font face="Courier New"&gt;Temp&lt;/font&gt;) donde voy a realizar la suma de las fechas.&amp;#160; La variable &lt;font face="Courier New"&gt;mex&lt;/font&gt; es temporal para el cálculo de meses.&amp;#160; Sumo los días y años en &lt;font face="Courier New"&gt;Temp&lt;/font&gt; y luego calculo los meses: si el día es mayor al número máximo de días que corresponde al mes, le resto el número de días máximo aceptados, incremento el número de meses y si corresponda cambiar de año, incrementa el año y le resta 12 meses.&amp;#160; Al final del ciclo le sumo los meses y vuelvo a verificar si toca cambio de año.&amp;#160; Al final devuelvo la variable &lt;font face="Courier New"&gt;Temp&lt;/font&gt; que contiene la suma.&lt;/p&gt;  &lt;p align="justify"&gt;Ahora pasamos al operador ++ postfijo.&amp;#160; Aquí está el código:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://lh5.ggpht.com/-jQCuae1Aw4k/TrYHHVixPLI/AAAAAAAACbQ/O1NdM_J3FFw/s1600-h/03-Operador5.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="03-Operador  " border="0" alt="03-Operador  " src="http://lh5.ggpht.com/-GAS_aO0modE/TrYHIQwlb9I/AAAAAAAACbY/6zmKvUNFTHM/03-Operador_thumb3.png?imgmax=800" width="415" height="212" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Si se fijan, el parámetro de tipo &lt;font face="Courier New"&gt;int&lt;/font&gt; no me sirve para nada, bueno, sirve para distinguir el ++ postfijo del prefijo como ya argumenté con anterioridad.&amp;#160; Ni siquiera le pongo nombre de variable porque no lo voy a usar.&amp;#160; Creo una &lt;font face="Courier New"&gt;Fecha&lt;/font&gt;, llamado &lt;font face="Courier New"&gt;Temp&lt;/font&gt;, para hacer el cálculo de la fecha más un día.&amp;#160; El &lt;a href="http://tony-valderrama.blogspot.com/2009/10/apuntadores-en-c-pa-onde-apunto.html" target="_blank"&gt;apuntador&lt;/a&gt; &lt;font face="Courier New"&gt;this&lt;/font&gt; es una forma elegante de referirse a esta misma clase y lo uso para inicializar a &lt;font face="Courier New"&gt;Temp&lt;/font&gt;.&amp;#160; Altero los valores de ésta clase (&lt;a href="http://tony-valderrama.blogspot.com/2009/10/apuntadores-en-c-pa-onde-apunto.html" target="_blank"&gt;apuntador&lt;/a&gt; &lt;font face="Courier New"&gt;this&lt;/font&gt;) para incrementar un día y luego revisar si toca cambio de mes, y si toca, incremento el año.&amp;#160; Al final devuelvo &lt;font face="Courier New"&gt;Temp&lt;/font&gt; y ya terminé.&lt;/p&gt;  &lt;p align="justify"&gt;El código del operador ++ prefijo es idéntico.&amp;#160; Lo único que cambia es que devuelve la referencia (&lt;a href="http://tony-valderrama.blogspot.com/2009/10/apuntadores-en-c-pa-onde-apunto.html" target="_blank"&gt;apuntador&lt;/a&gt;) a un objeto &lt;font face="Courier New"&gt;Fecha&lt;/font&gt; y no recibe un entero como parámetro.&amp;#160; Aquí está:&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh5.ggpht.com/-xgGY-_4fmus/TrYHI7m_9VI/AAAAAAAACbg/SInFpgOnPqk/s1600-h/04-Operador7.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="04-Operador  " border="0" alt="04-Operador  " src="http://lh4.ggpht.com/-U_5r3PoAPzU/TrYHJ7N-0QI/AAAAAAAACbo/WDnBtgJ7BOs/04-Operador_thumb5.png?imgmax=800" width="415" height="210" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Ahora una función muy simple para devolver el número máximo de días que tiene cada mes.&amp;#160; Lo uso mucho para validaciones.&amp;#160; La idea es que enero, marzo, mayo, julio, agosto, octubre y diciembre tienen 31 días, mientras que abril, junio, septiembre y noviembre tienen 30.&amp;#160; Como saben el mes especial es febrero que puede tener 29 o 29 días dependiendo si el año es bisiesto o no.&amp;#160; Aquí está el código:&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh3.ggpht.com/-WnTRltGTeO4/TrYHKyRxLgI/AAAAAAAACbw/4vgP4eeQbdg/s1600-h/05-MaxDiaMes5.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="05-MaxDiaMes" border="0" alt="05-MaxDiaMes" src="http://lh4.ggpht.com/-ZJJ5igHEBtQ/TrYHLpmnjiI/AAAAAAAACb4/kN0MTPncOkI/05-MaxDiaMes_thumb3.png?imgmax=800" width="252" height="468" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Otra función que no tiene chiste es el que te permite asignar fecha.&amp;#160; Aquí está:&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh3.ggpht.com/-GXBIKT1-N0I/TrYHMA-MHmI/AAAAAAAACcA/g-TT-OtHuu0/s1600-h/06-AsignaFecha5.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="06-AsignaFecha" border="0" alt="06-AsignaFecha" src="http://lh4.ggpht.com/-tGPVHrL0hTs/TrYHMxp2_eI/AAAAAAAACcI/SkGbsqlICO4/06-AsignaFecha_thumb3.png?imgmax=800" width="316" height="84" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Ahora voy a hablar de la función amiga que sirve para sobrecargar el operador &lt;font face="Courier New"&gt;&amp;lt;&amp;lt;&lt;/font&gt;.&amp;#160; Aquí está el código:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-b9rFMvq8CS0/TrYHNow6cPI/AAAAAAAACcQ/GfI-mVJAJcs/s1600-h/07-Operador-ostream5.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="07-Operador ostream" border="0" alt="07-Operador ostream" src="http://lh6.ggpht.com/-RrvnPZCsyx4/TrYHOPqzbyI/AAAAAAAACcY/AdbFthuxwuY/07-Operador-ostream_thumb3.png?imgmax=800" width="344" height="68" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;El objeto de tipo &lt;font face="Courier New"&gt;ostream&lt;/font&gt; es igual al que recibe la función &lt;font face="Courier New"&gt;cout&lt;/font&gt;.&amp;#160; Así que básicamente debo hacer lo mismo que haría en un &lt;font face="Courier New"&gt;cout&lt;/font&gt; para dejar el texto como quiero, pero en lugar de enviarlo al &lt;font face="Courier New"&gt;cout&lt;/font&gt;, lo mando a &lt;font face="Courier New"&gt;x&lt;/font&gt;.&amp;#160; Esta función devuelve una referencia al objeto &lt;font face="Courier New"&gt;ostream&lt;/font&gt; que hice.&lt;/p&gt;  &lt;p align="justify"&gt;Para terminar con las funciones, falta el que sobrecarga al operador .&amp;#160; Hagan de cuenta que ahora estoy trabajando con el &lt;font face="Courier New"&gt;cin&lt;/font&gt; (el objeto de tipo &lt;font face="Courier New"&gt;istream&lt;/font&gt; es el mismo tipo de objeto que &lt;font face="Courier New"&gt;cin&lt;/font&gt;).&amp;#160; La función &lt;font face="Courier New"&gt;ignore&lt;/font&gt; de la clase &lt;font face="Courier New"&gt;istream&lt;/font&gt; se encarga de ignorar el siguiente caracter del &lt;font face="Courier New"&gt;istream&lt;/font&gt; (en mi caso es una diagonal entre día y mes, y otra diagonal entre mes y año).&amp;#160; Aquí está el código:&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh6.ggpht.com/-DDkLjCoT12w/TrYHOwHEPsI/AAAAAAAACcg/7Kz5dQNRzhc/s1600-h/08-Operador-istream6.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="08-Operador istream" border="0" alt="08-Operador istream" src="http://lh3.ggpht.com/-bU1O_nXh2Cg/TrYHPmcCAhI/AAAAAAAACco/QbAT_aIdRwc/08-Operador-istream_thumb4.png?imgmax=800" width="304" height="149" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Para terminar, hice la función &lt;font face="Courier New"&gt;main()&lt;/font&gt; que prueba todo lo anterior.&amp;#160; Aquí está:&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh3.ggpht.com/-jvrRWcosMco/TrYHQrTakdI/AAAAAAAACcw/6TY5Ubju7rQ/s1600-h/09-main7.png" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="09-main" border="0" alt="09-main" src="http://lh3.ggpht.com/-SOvfE9N1BWA/TrYHUP00BII/AAAAAAAACc4/yspk7xxtYIs/09-main_thumb5.png?imgmax=800" width="644" height="338" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Este ejemplo fue hecho con Visual &lt;a href="http://tony-valderrama.blogspot.com/search/label/C%2B%2B" target="_blank"&gt;C++&lt;/a&gt; 2010 y puedes descargar el proyecto en formato RAR &lt;a href="http://freedrive.com/file/1535978" target="_blank"&gt;aquí&lt;/a&gt;.&amp;#160; ¡Saludos!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37481028-709097035835778739?l=tony-valderrama.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElTonyYSusOndas/~4/MsZZSbLS78M" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ElTonyYSusOndas/~3/MsZZSbLS78M/sobrecargando-operadores-en-c.html</link><author>noreply@blogger.com (Tony Valderrama)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-E69bHXHG9vE/TrYHDqZkzhI/AAAAAAAACao/4mfQvxa_j9A/s72-c/00-class-Fecha_thumb12.png?imgmax=800" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://tony-valderrama.blogspot.com/2011/11/sobrecargando-operadores-en-c.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-37481028.post-8276147104150608449</guid><pubDate>Thu, 13 Oct 2011 02:13:00 +0000</pubDate><atom:updated>2011-10-12T21:13:46.099-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Videojuegos</category><category domain="http://www.blogger.com/atom/ns#">Tecnología Educativa</category><title>Videojuegos y Educación</title><description>&lt;p align="justify"&gt;Como algunos sabrán, hace unos días terminé la maestría.&amp;#160; Mi tema de investigación fue desde el principio el uso de videojuegos en ambientes educativos, ver lo que aprenden los muchachos al jugar.&amp;#160; A raíz de este interés, una vez los invité a un par de conferencias que di en la Univa: los &lt;a href="http://tony-valderrama.blogspot.com/2010/05/eventos-de-la-semana-cultural-en-la.html" target="_blank"&gt;Piratas del Bicentenario&lt;/a&gt; y &lt;a href="http://tony-valderrama.blogspot.com/2011/05/eventos-de-la-semana-cultural-en-la.html" target="_blank"&gt;Jugando a los Negocios&lt;/a&gt;.&amp;#160; Concretamente acerca de resultados de mi tesis, les había compartido la &lt;a href="http://tony-valderrama.blogspot.com/2011/08/presentacion-de-videojuegos-y-educacion.html" target="_blank"&gt;presentación que hice en la Univa&lt;/a&gt; (que se centra más en lo educativo) y el &lt;a href="http://tony-valderrama.blogspot.com/2011/09/videojuegos-y-educacion-explorando.html" target="_blank"&gt;“trailer” (avance cinematográfico) de mi presentación&lt;/a&gt; en el ITESO, pero ahora les quiero compartir lo que expuse ese día.&amp;#160; Aquí les dejo un video (casi 22 minutos) de la pura presentación que hice.&amp;#160; Espero que les sirva como reflexión acerca de lo que se puede hacer e investigar en este campo.&amp;#160; La idea, más que platicar de lo que hice, era la de hablar sobre cuestiones que giran en torno a mi tesis.&amp;#160; Les comparto el video y más abajo les pongo la presentación.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px auto; padding-left: 0px; width: 448px; padding-right: 0px; display: block; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:24a56708-cbe3-49ed-ad31-657151d0d27f" class="wlWriterEditableSmartContent"&gt;&lt;div id="ec4d2a3b-3cd4-4720-b340-075b707649dc" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=AZjxD-_Qtd4" target="_new"&gt;&lt;img src="http://lh3.ggpht.com/-kmKPDUIL1Zo/TpZJVLNck2I/AAAAAAAACaQ/8sNct7o2rJM/video11e4e9b344e3%25255B9%25255D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('ec4d2a3b-3cd4-4720-b340-075b707649dc'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;448\&amp;quot; height=\&amp;quot;252\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/AZjxD-_Qtd4?hl=en&amp;amp;hd=1\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/AZjxD-_Qtd4?hl=en&amp;amp;hd=1\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;448\&amp;quot; height=\&amp;quot;252\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt=""&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="width:448px;clear:both;font-size:.8em"&gt;Mi presentación en el ITESO: la “lectura transversal” de mi texto&lt;/div&gt;&lt;/div&gt;  &lt;p align="center"&gt;&amp;#160;&lt;/p&gt;  &lt;div align="center"&gt;   &lt;div class="prezi-player"&gt;&lt;style type="text/css" media="screen"&gt;
.prezi-player { width: 550px; } .prezi-player-links { text-align: center; }&lt;/style&gt;&lt;object id="prezi_8ctgrgawxged" name="prezi_8ctgrgawxged" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="550" height="400"&gt;&lt;param name="movie" value="http://prezi.com/bin/preziloader.swf" /&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="bgcolor" value="#ffffff" /&gt;&lt;param name="flashvars" value="prezi_id=8ctgrgawxged&amp;amp;lock_to_path=0&amp;amp;color=ffffff&amp;amp;autoplay=no&amp;amp;autohide_ctrls=0" /&gt;&lt;embed id="preziEmbed_8ctgrgawxged" name="preziEmbed_8ctgrgawxged" src="http://prezi.com/bin/preziloader.swf" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="550" height="400" bgcolor="#ffffff" flashvars="prezi_id=8ctgrgawxged&amp;amp;lock_to_path=0&amp;amp;color=ffffff&amp;amp;autoplay=no&amp;amp;autohide_ctrls=0"&gt;&lt;/embed&gt;&lt;/object&gt;      &lt;div class="prezi-player-links"&gt;       &lt;p&gt;&lt;a title="&amp;#10;                            &amp;#10;                            Presentación de mi tesis donde intento hacer una lectura transversal del texto.&amp;#10;                            &amp;#10;                        " href="http://prezi.com/8ctgrgawxged/videojuegos-y-educacion-lectura-transversal/"&gt;Videojuegos y Educación - Lectura Transversal&lt;/a&gt; on &lt;a href="http://prezi.com"&gt;Prezi&lt;/a&gt;&lt;/p&gt;     &lt;/div&gt;   &lt;/div&gt; &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37481028-8276147104150608449?l=tony-valderrama.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElTonyYSusOndas/~4/y4PH5AiimcU" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ElTonyYSusOndas/~3/y4PH5AiimcU/videojuegos-y-educacion.html</link><author>noreply@blogger.com (Tony Valderrama)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-kmKPDUIL1Zo/TpZJVLNck2I/AAAAAAAACaQ/8sNct7o2rJM/s72-c/video11e4e9b344e3%25255B9%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://tony-valderrama.blogspot.com/2011/10/videojuegos-y-educacion.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-37481028.post-3947898244720844234</guid><pubDate>Thu, 06 Oct 2011 19:56:00 +0000</pubDate><atom:updated>2011-10-06T14:56:45.433-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Visual Basic .net</category><title>Arreglos con Visual Basic .net</title><description>&lt;p align="justify"&gt;Arreglos es un tema que ya he cubierto varias veces con anterioridad, ya sea en &lt;a href="http://tony-valderrama.blogspot.com/2008/02/arreglando-arreglos.html" target="_blank"&gt;Visual Basic 6&lt;/a&gt;, &lt;a href="http://tony-valderrama.blogspot.com/2009/07/arreglos-en-c-y-c.html" target="_blank"&gt;C y C++&lt;/a&gt;, y hasta en &lt;a href="http://tony-valderrama.blogspot.com/2008/08/arreglando-cosas-en-java-con-arreglos.html" target="_blank"&gt;Java&lt;/a&gt; (lenguaje del que no soy gran experto).&amp;#160; Te recomiendo que leas estos artículos (sobre todo el de &lt;a href="http://tony-valderrama.blogspot.com/2008/02/arreglando-arreglos.html" target="_blank"&gt;Visual Basic 6&lt;/a&gt;) para entender mejor de lo que estaré hablando.&amp;#160; De todos modos aquí les dejo un video introductorio:&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px auto; padding-left: 0px; width: 448px; padding-right: 0px; display: block; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:d8864f37-181f-4ea1-8354-8e0a56075f01" class="wlWriterEditableSmartContent"&gt;&lt;div id="5ef6b9c3-2c19-41d2-ac04-4c4c53be3b2e" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=OnmtuMSzyEo" target="_new"&gt;&lt;img src="http://lh5.ggpht.com/-pBbFiyyEdF0/To4H9797GNI/AAAAAAAACaI/NUUu1megzxU/video26f148f2b82c%25255B7%25255D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('5ef6b9c3-2c19-41d2-ac04-4c4c53be3b2e'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;448\&amp;quot; height=\&amp;quot;252\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/OnmtuMSzyEo?hl=en&amp;amp;hd=1\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/OnmtuMSzyEo?hl=en&amp;amp;hd=1\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;448\&amp;quot; height=\&amp;quot;252\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt=""&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;Y aquí hay un ejemplo:&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px auto; padding-left: 0px; width: 448px; padding-right: 0px; display: block; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:b756df68-d7e3-40b6-a754-0bdbda66451d" class="wlWriterEditableSmartContent"&gt;&lt;div id="5f28b9a4-0b65-4fd8-a547-924b353b7f8a" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=Dgby41CkIig" target="_new"&gt;&lt;img src="http://lh5.ggpht.com/-m15Q6CwmwN8/To4H-9xfS-I/AAAAAAAACaM/RteltZYQk_Q/video84a1d51f08b5%25255B8%25255D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('5f28b9a4-0b65-4fd8-a547-924b353b7f8a'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;448\&amp;quot; height=\&amp;quot;252\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/Dgby41CkIig?hl=en&amp;amp;hd=1\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/Dgby41CkIig?hl=en&amp;amp;hd=1\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;448\&amp;quot; height=\&amp;quot;252\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt=""&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;    &lt;p&gt;¿Tienes dudas o comentarios?&amp;#160; ¡Deja un comentario!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37481028-3947898244720844234?l=tony-valderrama.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElTonyYSusOndas/~4/qZXQbuWAfdA" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ElTonyYSusOndas/~3/qZXQbuWAfdA/arreglos-con-visual-basic-net.html</link><author>noreply@blogger.com (Tony Valderrama)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-pBbFiyyEdF0/To4H9797GNI/AAAAAAAACaI/NUUu1megzxU/s72-c/video26f148f2b82c%25255B7%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://tony-valderrama.blogspot.com/2011/10/arreglos-con-visual-basic-net.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-37481028.post-6773198613737827476</guid><pubDate>Thu, 06 Oct 2011 05:52:00 +0000</pubDate><atom:updated>2011-10-06T00:52:35.333-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Videojuegos</category><title>Not Tetris 2: Un tetris del mundo real</title><description>&lt;p align="justify"&gt;&lt;a href="http://lh4.ggpht.com/-0CPfwANGc-s/To1CEYG1wiI/AAAAAAAACZ8/RffQ2MPOpDY/s1600-h/notetris2.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 0px 0px 5px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="notetris" border="0" alt="notetris" align="right" src="http://lh4.ggpht.com/-ppPjiE3-ymI/To1CGdfxsjI/AAAAAAAACaA/mA4tco0zgyQ/notetris_thumb.png?imgmax=800" width="244" height="146" /&gt;&lt;/a&gt;Hace un momento leí en el blog de &lt;a href="http://feedproxy.google.com/~r/feedconectica/~3/___1T7MO4zU/" target="_blank"&gt;contecti.ca&lt;/a&gt; la noticia de esta nueva versión de &lt;a href="http://es.wikipedia.org/wiki/Tetris" target="_blank"&gt;Tetris&lt;/a&gt; al que le agregaron reglas de la física de nuestro mundo lo cual le añade un dimensión totalmente diferente al juego.&amp;#160; Aquí les dejo el video y la &lt;a href="http://stabyourself.net/nottetris2" target="_blank"&gt;liga para descargarlo&lt;/a&gt;.&amp;#160; ¡Que lo disfruten!&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px auto; padding-left: 0px; width: 448px; padding-right: 0px; display: block; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:112be14d-df46-41b4-b7a0-b43d7bbd1bde" class="wlWriterEditableSmartContent"&gt;&lt;div id="c1b039dd-fac1-4429-be88-3efab3b0e92b" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=8edwWVSHsrY" target="_new"&gt;&lt;img src="http://lh3.ggpht.com/-Y9MrvBvwda0/To1CIRgUHxI/AAAAAAAACaE/3wbMM5Ak1TE/video59954b977285%25255B2%25255D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('c1b039dd-fac1-4429-be88-3efab3b0e92b'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;448\&amp;quot; height=\&amp;quot;336\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/8edwWVSHsrY?hl=en&amp;amp;hd=1\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/8edwWVSHsrY?hl=en&amp;amp;hd=1\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;448\&amp;quot; height=\&amp;quot;336\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt=""&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37481028-6773198613737827476?l=tony-valderrama.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElTonyYSusOndas/~4/EKxh44WlGZ8" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ElTonyYSusOndas/~3/EKxh44WlGZ8/not-tetris-2-un-tetris-del-mundo-real.html</link><author>noreply@blogger.com (Tony Valderrama)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-ppPjiE3-ymI/To1CGdfxsjI/AAAAAAAACaA/mA4tco0zgyQ/s72-c/notetris_thumb.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://tony-valderrama.blogspot.com/2011/10/not-tetris-2-un-tetris-del-mundo-real.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-37481028.post-8941749707833759695</guid><pubDate>Fri, 30 Sep 2011 23:17:00 +0000</pubDate><atom:updated>2011-09-30T18:17:59.786-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Visual Basic .net</category><title>Sonidos y Visual Basic</title><description>&lt;p align="justify"&gt;&lt;a href="http://lh5.ggpht.com/-t4tgF5W147Q/ToZN8fBF29I/AAAAAAAACZE/1ncijC6fcEY/s1600-h/20091123-musica2.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 5px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="20091123-musica" border="0" alt="20091123-musica" align="left" src="http://lh3.ggpht.com/-f2AK38goLZo/ToZN9zrhuaI/AAAAAAAACZI/B0EdGKLs7pY/20091123-musica_thumb.jpg?imgmax=800" width="244" height="212" /&gt;&lt;/a&gt;Algo que es indispensable para muchos programas (especialmente si estamos programando un &lt;a href="http://tony-valderrama.blogspot.com/search/label/Videojuegos" target="_blank"&gt;videojuego&lt;/a&gt;) es el sonido.&amp;#160; Imagínate estar jugando &lt;a href="http://es.wikipedia.org/wiki/Lego_Star_Wars:_The_Video_Game" target="_blank"&gt;Lego Star Wars&lt;/a&gt; sin el sonido de la respiración de &lt;a href="http://www.frikipedia.es/friki/Darth_Vader" target="_blank"&gt;Darth Vader&lt;/a&gt;, el sonido de los &lt;a href="http://es.wikipedia.org/wiki/Sable_de_luz" target="_blank"&gt;light sabers&lt;/a&gt;, el ruidito que hace &lt;a href="http://es.starwars.wikia.com/wiki/R2-D2" target="_blank"&gt;R2D2&lt;/a&gt; o la música de la &lt;a href="http://www.youtube.com/watch?v=wcNP3DuKOj8" target="_blank"&gt;marcha imperial&lt;/a&gt;.&amp;#160; Hay miles de estudios que muestran que el sonido afecta nuestra percepción, estado de ánimo, etc. y es muy aprovechado por el cine, TV, etc. para transmitir drama, suspenso, etc.&amp;#160; En conclusión: habrán momentos en que necesitamos que nuestros programas incluyan audio.&amp;#160; Pero, ¿cómo le hago?&amp;#160; Eso precisamente es de lo que voy a hablar en este post.&lt;/p&gt;  &lt;p align="justify"&gt;Para cosas sencillas &lt;a href="http://tony-valderrama.blogspot.com/search/label/Visual%20Basic%20.net" target="_blank"&gt;Visual Basic .NET&lt;/a&gt; cuenta con la clase &lt;font face="Courier New"&gt;System.Media.SoundPlayer&lt;/font&gt;.&amp;#160; Es limitado y no tiene muchas funciones, pero para efectos de tocar un &lt;a href="http://es.wikipedia.org/wiki/Waveform_Audio_Format" target="_blank"&gt;WAV&lt;/a&gt;, basta y sobra.&amp;#160; Tal vez pienses que con la popularidad que tiene el formato &lt;a href="http://es.wikipedia.org/wiki/MP3" target="_blank"&gt;MP3&lt;/a&gt; estos archivos ya no se usan, pero generalmente todos los efectos especiales que puedes descargar en línea están en este formato.&amp;#160; Así que es una clase muy útil.&lt;/p&gt;  &lt;p align="justify"&gt;Lo primero que se tiene que hacer es declarar un objeto:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="Courier New"&gt;Dim sonidito As System.Media.SoundPlayer&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Si al principio del código agregamos &lt;font face="Courier New"&gt;System.Media&lt;/font&gt; (con la instrucción &lt;font face="Courier New"&gt;Imports&lt;/font&gt;), podemos escribir simplemente &lt;font face="Courier New"&gt;SoundPlayer&lt;/font&gt;.&amp;#160; Tiene dos constructores: con uno podemos cargar el archivo WAV directamente:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="Courier New"&gt;sonidito=New SoundPlayer(“sonido.wav”)&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;O bien, puedo usar el constructor default (sin parámetros) y usar las propiedades &lt;font face="Courier New"&gt;SoundLocation&lt;/font&gt; para definir el archivo y &lt;font face="Courier New"&gt;Load&lt;/font&gt; para cargarlo a la memoria:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="Courier New"&gt;sonidito=New SoundPlayer()&lt;/font&gt;     &lt;br /&gt;&lt;font face="Courier New"&gt;sonidito.SoundLocation(“sonido.wav”)      &lt;br /&gt;sonidito.Load()&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;NOTA: si de plano el archivo WAV es demasiado grande y dura unos segundo en cargar, puedes usar la función &lt;font face="Courier New"&gt;SoundPlayer.LoadAsync&lt;/font&gt; para cargar el sonido y &lt;font face="Courier New"&gt;SoundPlayer.IsLoadComplete&lt;/font&gt; para saber si ya terminó de cargar a la memoria.&amp;#160; Esto es útil porque si tu programa tarda unos segundos en cargar el sonido, es probable que el usuario piense que el programa dejó de responder y lo cierre.&lt;/p&gt;  &lt;p align="justify"&gt;Para que comiencen a sonar las bocinas con tu WAV, solo basta usar la función &lt;font face="Courier New"&gt;Play()&lt;/font&gt;para que se escuche:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="Courier New"&gt;sonidito.Play()&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;¿Qué sucedería si alguien elimina el archivo WAV de la carpeta donde lo necesitas?&amp;#160; Como te imaginarás, deja de funcionar.&amp;#160; Una forma de evitar esto es incluir el archivo WAV como parte del proyecto, es decir, que sea un recurso del programa.&amp;#160; Antes que nada, hay que incluir un archivo de recurso al proyecto.&amp;#160; En el proyecto, elige del menú &lt;em&gt;Project&lt;/em&gt; la opción &lt;em&gt;Add new item&lt;/em&gt;.&amp;#160; Aparece la siguiente ventana:&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh5.ggpht.com/-p2m89CBomlg/ToZN_5cbHqI/AAAAAAAACZM/R9oXS2Iga5g/s1600-h/00-VentanaAddNew19.png" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="00-VentanaAddNew" border="0" alt="00-VentanaAddNew" src="http://lh6.ggpht.com/-TdekduZK6p8/ToZOGG5rYZI/AAAAAAAACZQ/HtepRjKhvx4/00-VentanaAddNew_thumb15.png?imgmax=800" width="644" height="411" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;En esta ventana, selecciona la opción &lt;em&gt;Resources File&lt;/em&gt; (está en esta ventana o en el grupo General [los grupos están de lado izquierdo]).&amp;#160; Después de esto, se agrega un archivo llamado &lt;font face="Courier New"&gt;Resources1.resx&lt;/font&gt; al proyecto (a menos que le hayas cambiado el nombre).&amp;#160; Debería abrirse en automático.&amp;#160; Si no , haz doble clic sobre el archivo en la ventana de la solución.&amp;#160; Haz clic sobre el tipo de recurso (ahorita dice &lt;em&gt;Strings&lt;/em&gt;) y selecciona &lt;em&gt;Audio&lt;/em&gt;.&amp;#160; Después haz clic en &lt;em&gt;Add Resource&lt;/em&gt;, &lt;em&gt;Add Existing File&lt;/em&gt; y selecciona el archivo WAV que quieres incluir.&amp;#160; Aquí se ven las opciones:&lt;/p&gt;  &lt;p align="center"&gt;   &lt;table border="0" cellspacing="5" cellpadding="2" width="500"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="250"&gt;&lt;a href="http://lh3.ggpht.com/-zpvo6v7Z6MA/ToZOGksu-VI/AAAAAAAACZU/b5rrKufl0k8/s1600-h/01-AgregarRecursoAudio9.png" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="01-AgregarRecursoAudio" border="0" alt="01-AgregarRecursoAudio" src="http://lh3.ggpht.com/-tAirXHSntII/ToZOHWT_RNI/AAAAAAAACZY/mYJzfWJ6oms/01-AgregarRecursoAudio_thumb4.png?imgmax=800" width="209" height="223" /&gt;&lt;/a&gt;&lt;/td&gt;          &lt;td valign="top" width="250"&gt;&lt;a href="http://lh5.ggpht.com/-cGn3B2ReCcQ/ToZOIKpuJnI/AAAAAAAACZc/O1XylIedV6A/s1600-h/02-AgregarRecursoAudio5.png"&gt;             &lt;br /&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="02-AgregarRecursoAudio" border="0" alt="02-AgregarRecursoAudio" src="http://lh3.ggpht.com/-OdNVLMJImck/ToZOJYFr64I/AAAAAAAACZg/7n9A8qVYdgs/02-AgregarRecursoAudio_thumb3.png?imgmax=800" width="278" height="176" /&gt;&lt;/a&gt;&lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p align="justify"&gt;Nota: para ahorrarte esto, podrías simplemente arrastrar un archivo WAV desde Windows hasta esta ventana.&lt;/p&gt;  &lt;p align="justify"&gt;Una vez agregado el recurso, es hora de echarlo a andar.&amp;#160; Tomando en cuenta que mi recurso (otro archivo WAV) se llama &lt;font face="Courier New"&gt;Sonidito2&lt;/font&gt; y que al principio importé &lt;font face="Courier New"&gt;Microsoft.VisualBasic&lt;/font&gt; para no escribir tanto, el código quedaría así:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;Dim sonidito2 As Devices.Audio      &lt;br /&gt;sonidito2 = New Devices.Audio       &lt;br /&gt;sonidito2.Play(My.Resources.Resource1.Sonidito2,AudioPlayMode.Background)&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Aunque estos dos objetos nos dejan escuchar sonido, son medios limitados.&amp;#160; En un futuro post trataré del uso de &lt;a href="http://windows.microsoft.com/es-ES/windows/products/windows-media-player" target="_blank"&gt;Windows Media Player&lt;/a&gt; en &lt;a href="http://tony-valderrama.blogspot.com/search/label/Visual%20Basic%20.net" target="_blank"&gt;Visual Basic .net&lt;/a&gt; (particularmente en la versión 2010).&amp;#160; ¡Hasta la próxima!&lt;/p&gt;  &lt;p align="justify"&gt;P.D. Imagen de la música con ecuaciones tomada del blog de &lt;a href="http://theall-knowing4.blogspot.com/2011/05/musica-para-el-relajo.html" target="_blank"&gt;The All-Knowing 4&lt;/a&gt;.&amp;#160; Las demás imágenes las hice yo.&amp;#160; Parte del material aquí expuesto viene del libro &lt;a href="http://www.amazon.com/gp/product/1435458109/ref=as_li_qf_sp_asin_il_tl?ie=UTF8&amp;amp;tag=tonysworld04&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=1435458109" target="_blank"&gt;Visual Basic Game Programming for Teens&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37481028-8941749707833759695?l=tony-valderrama.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElTonyYSusOndas/~4/mIwIgKy3s3c" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ElTonyYSusOndas/~3/mIwIgKy3s3c/sonidos-y-visual-basic.html</link><author>noreply@blogger.com (Tony Valderrama)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-f2AK38goLZo/ToZN9zrhuaI/AAAAAAAACZI/B0EdGKLs7pY/s72-c/20091123-musica_thumb.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://tony-valderrama.blogspot.com/2011/09/sonidos-y-visual-basic.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-37481028.post-8582491398880252539</guid><pubDate>Mon, 26 Sep 2011 23:15:00 +0000</pubDate><atom:updated>2011-09-26T18:15:11.062-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Photoshop</category><category domain="http://www.blogger.com/atom/ns#">Humor</category><title>El Rap del Photoshop, parte II</title><description>&lt;p align="justify"&gt;No es que yo sea muy fan del rap, pero hace tiempo incursioné en el género como una idea de mis alumnos y lo aproveché para explicar los conceptos básicos de la programación orientada a objetos en &lt;a href="http://tony-valderrama.blogspot.com/search/label/C%2B%2B" target="_blank"&gt;C++&lt;/a&gt; (tanto la &lt;a href="http://tony-valderrama.blogspot.com/2009/12/el-rap-del-c.html" target="_blank"&gt;letra y música&lt;/a&gt; como en &lt;a href="http://tony-valderrama.blogspot.com/2009/12/el-rap-del-c-parte-ii.html" target="_blank"&gt;video&lt;/a&gt;).&amp;#160; Luego me topé con un &lt;a href="http://tony-valderrama.blogspot.com/2011/01/el-rap-de-photoshop.html" target="_blank"&gt;rap tutorial de Photoshop&lt;/a&gt; y hoy vi la segunda parte que les comparto.&amp;#160; Parece broma, pero explica bastante bien lo de los canales de color.&amp;#160; ¡Que lo disfruten!&lt;/p&gt; &lt;object id="ch6583677" type="application/x-shockwave-flash" data="http://5.static.collegehumor.cvcdn.com/moogaloop/moogaloop.swf?clip_id=6583677&amp;amp;use_node_id=true&amp;amp;fullscreen=1" width="600" height="338"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="wmode" value="transparent" /&gt;&lt;param name="allowScriptAccess" value="always" /&gt;&lt;param name="movie" quality="best" value="http://5.static.collegehumor.cvcdn.com/moogaloop/moogaloop.swf?clip_id=6583677&amp;amp;use_node_id=true&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://5.static.collegehumor.cvcdn.com/moogaloop/moogaloop.swf?clip_id=6583677&amp;amp;use_node_id=true&amp;amp;fullscreen=1" type="application/x-shockwave-flash" wmode="transparent" width="600" height="338" allowScriptAccess="always"&gt;&lt;/embed&gt;&lt;/object&gt;  &lt;p align="justify"&gt;Originalmente es de &lt;a href="http://www.collegehumor.com/video/6583677/photoshop-rap-part-2" target="_blank"&gt;CollegeHumor&lt;/a&gt;, pero yo lo vi en el blog de &lt;a href="http://www.makeuseof.com/tech-fun/photoshop-tutorial-rap-2/" target="_blank"&gt;MakeUseOf&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37481028-8582491398880252539?l=tony-valderrama.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElTonyYSusOndas/~4/GFnBczpO1UU" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ElTonyYSusOndas/~3/GFnBczpO1UU/el-rap-del-photoshop-parte-ii.html</link><author>noreply@blogger.com (Tony Valderrama)</author><thr:total>0</thr:total><feedburner:origLink>http://tony-valderrama.blogspot.com/2011/09/el-rap-del-photoshop-parte-ii.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-37481028.post-5772035804729093096</guid><pubDate>Wed, 21 Sep 2011 21:53:00 +0000</pubDate><atom:updated>2011-09-21T16:53:46.124-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Cosas verdes</category><category domain="http://www.blogger.com/atom/ns#">Hardware</category><title>Teclado verde</title><description>&lt;p align="center"&gt;&lt;a href="http://lh4.ggpht.com/-mAwh43BMPcg/Tnpcu60uLpI/AAAAAAAACYM/L00h7XAx6o0/s1600-h/solarkeyboard11.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 5px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="solarkeyboard" border="0" alt="solarkeyboard" src="http://lh3.ggpht.com/-S3o3h2WuBIE/Tnpc0pzu81I/AAAAAAAACYQ/5tVZQjZm8jY/solarkeyboard_thumb6.jpg?imgmax=800" width="420" height="249" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Hace rato vi en el blog de &lt;a href="http://lifehacker.com/5833985/logitech-wireless-solar-keyboard-powers-your-keyboard-with-your-desk-lamp" target="_blank"&gt;Lifehacker&lt;/a&gt; este teclado que me parece una idea eco-maravillosa.&amp;#160; Se trata el teclado &lt;a href="http://www.logitech.com/en-us/keyboards/keyboard/devices/k750-keyboard" target="_blank"&gt;Logitech Wireless Keyboard K750&lt;/a&gt; y es un teclado inalámbrico que no usa pilas AA sino que tiene dos paneles solares que lo cargan.&amp;#160; Supuestamente si lo dejas cargado, puede pasar un mes funcionando sin problemas hasta volverlo a cargar.&amp;#160; También tiene una aplicación que monitorea como se está cargando para que puedas jugar un poco con las posiciones de tu lámpara o lo que sea que esté iluminando el teclado para conseguir la recarga más rápida.&amp;#160; Buena idea: comodidad, tecnología y ecológico.&lt;/p&gt;  &lt;p align="justify"&gt;A ver cuando me compro uno &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Sonrisa" src="http://lh6.ggpht.com/-lr65eqT1vUs/Tnpc4ZTed7I/AAAAAAAACYU/v4JA8bLzrUU/wlEmoticon-smile2.png?imgmax=800" /&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37481028-5772035804729093096?l=tony-valderrama.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElTonyYSusOndas/~4/JvRfFQdg9sQ" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ElTonyYSusOndas/~3/JvRfFQdg9sQ/teclado-verde.html</link><author>noreply@blogger.com (Tony Valderrama)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-S3o3h2WuBIE/Tnpc0pzu81I/AAAAAAAACYQ/5tVZQjZm8jY/s72-c/solarkeyboard_thumb6.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://tony-valderrama.blogspot.com/2011/09/teclado-verde.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-37481028.post-2602873545621952515</guid><pubDate>Tue, 20 Sep 2011 23:59:00 +0000</pubDate><atom:updated>2011-09-20T19:05:51.884-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Hardware</category><category domain="http://www.blogger.com/atom/ns#">Historia</category><title>Apple, desde sus inicios (infografía)</title><description>&lt;p align="justify"&gt;Ayer vi en el blog de &lt;a href="http://conecti.ca/2011/08/21/infografia-la-historia-de-apple/" target="_blank"&gt;conecti.ca&lt;/a&gt; una infografía que resume la historia de &lt;a href="http://apple.com/" target="_blank"&gt;Apple&lt;/a&gt;, misma que comparto con ustedes (haz clic sobre la imagen para verlo en grande en otra ventana/pestaña).&amp;#160; Se me hizo interesante y espero que les sea informativa.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-WEbOwKHaWw8/TnkocoWiCII/AAAAAAAACXk/0T3QEta8bFg/s1600-h/history_of_apple-1000px%25255B1%25255D.jpg" target="_blank"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top: 0px; border-right: 0px; padding-top: 0px" title="history_of_apple-1000px" border="0" alt="history_of_apple-1000px" src="http://lh6.ggpht.com/-iF3HcOVANBg/Tnko4Gi4qGI/AAAAAAAACXo/Ao9WqL26nTI/history_of_apple-1000px_thumb.jpg?imgmax=800" width="211" height="772" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37481028-2602873545621952515?l=tony-valderrama.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElTonyYSusOndas/~4/Y8n7Ut3PT1k" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ElTonyYSusOndas/~3/Y8n7Ut3PT1k/apple-desde-sus-inicios-infografia.html</link><author>noreply@blogger.com (Tony Valderrama)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-iF3HcOVANBg/Tnko4Gi4qGI/AAAAAAAACXo/Ao9WqL26nTI/s72-c/history_of_apple-1000px_thumb.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://tony-valderrama.blogspot.com/2011/09/apple-desde-sus-inicios-infografia.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-37481028.post-5635422686763840036</guid><pubDate>Tue, 13 Sep 2011 22:59:00 +0000</pubDate><atom:updated>2011-09-13T17:59:31.802-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Hardware</category><category domain="http://www.blogger.com/atom/ns#">Historia</category><title>Historia de la PC</title><description>&lt;p align="justify"&gt;&lt;a href="http://conecti.ca/wp-content/uploads/2011/08/01425i31352900.jpg" target="_blank"&gt;&lt;img style="margin: 0px 5px 0px 0px; display: inline; float: left" align="left" src="http://conecti.ca/wp-content/uploads/2011/08/01425i31352900.jpg" width="98" height="768" /&gt;&lt;/a&gt;Parece que ando haciendo un blog de historia de las computadoras, pero últimamente me he topado con historias en imágenes que se me han hecho muy interesantes.&amp;#160; Por ejemplo, hoy me encontré con esta imagen en el blog de &lt;a href="http://conecti.ca/2011/08/15/infografia-30-anos-de-la-pc/" target="_blank"&gt;conecti.ca&lt;/a&gt; que muestra como ha evolucionado la computadora PC.&amp;#160; Aunque faltan muchos pormenores, de todos modos es un buen resumen de la historia de este aparatejo que ha cambiado la faz del mundo (bueno, exageré… pero de todos modos sí ha cambiado nuestra forma de jugar, trabajar, investigar, comunicarnos, dibujar y diseñar, y otras mil cosas que terminan con ar).&lt;/p&gt;  &lt;p align="justify"&gt;Una de las cosas que me parece novedoso en comparación a otras historias, pone el precio de las computadoras en dólares actuales.&amp;#160; HAz clic sobre la imagen para verlo en tamaño natural en otra ventana.&lt;/p&gt;  &lt;p align="justify"&gt;Espero que les sea ilustrativo &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Sonrisa" src="http://lh4.ggpht.com/-usHxNkg_hCQ/Tm_gUjdGebI/AAAAAAAACXE/jcml21RqEvo/wlEmoticon-smile2.png?imgmax=800" /&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37481028-5635422686763840036?l=tony-valderrama.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElTonyYSusOndas/~4/tWUMIQ3RGgU" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ElTonyYSusOndas/~3/tWUMIQ3RGgU/historia-de-la-pc.html</link><author>noreply@blogger.com (Tony Valderrama)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-usHxNkg_hCQ/Tm_gUjdGebI/AAAAAAAACXE/jcml21RqEvo/s72-c/wlEmoticon-smile2.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://tony-valderrama.blogspot.com/2011/09/historia-de-la-pc.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-37481028.post-4558043292917692920</guid><pubDate>Sun, 11 Sep 2011 22:46:00 +0000</pubDate><atom:updated>2011-09-11T17:46:32.862-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Hardware</category><category domain="http://www.blogger.com/atom/ns#">Historia</category><title>Evolución de las Supercomputadoras</title><description>&lt;p align="justify"&gt;&lt;a href="http://lh5.ggpht.com/-QRx5KOhSeGY/Tm06PmARZKI/AAAAAAAACW4/xNjiRCYSO4c/s1600-h/supercomputers%25255B4%25255D.png" target="_blank"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 5px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px" title="supercomputers" border="0" alt="supercomputers" align="right" src="http://lh3.ggpht.com/-qqUpGKsJb9o/Tm06RlsXOQI/AAAAAAAACW8/LWHuGz7ZR7Y/supercomputers_thumb%25255B2%25255D.png?imgmax=800" width="52" height="484" /&gt;&lt;/a&gt;Hace rato vi en el blog de &lt;a href="http://www.makeuseof.com/tech-fun/evolution-supercomputers/" target="_blank"&gt;MakeUseOf&lt;/a&gt; una imagen interesante que muestra la forma en que han evolucionado las supercomputadoras.&amp;#160; Se me hizo muy interesante, sobre todo para comprender mejor la historia de la computación.&lt;/p&gt;  &lt;p align="justify"&gt;Aquí les comparto la imagen (haz clic sobre él para que se vea más grande &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smilewithtongueout" alt="Lengua fuera" src="http://lh3.ggpht.com/-ppHIOc3eTM8/Tm06SC3dvoI/AAAAAAAACXA/GJow51orN8o/wlEmoticon-smilewithtongueout%25255B2%25255D.png?imgmax=800" /&gt;).&lt;/p&gt;  &lt;p align="justify"&gt;¡Espero que les guste!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37481028-4558043292917692920?l=tony-valderrama.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElTonyYSusOndas/~4/SAUZECl4pYY" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ElTonyYSusOndas/~3/SAUZECl4pYY/evolucion-de-las-supercomputadoras.html</link><author>noreply@blogger.com (Tony Valderrama)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-qqUpGKsJb9o/Tm06RlsXOQI/AAAAAAAACW8/LWHuGz7ZR7Y/s72-c/supercomputers_thumb%25255B2%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://tony-valderrama.blogspot.com/2011/09/evolucion-de-las-supercomputadoras.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-37481028.post-2101938155841650372</guid><pubDate>Thu, 08 Sep 2011 02:25:00 +0000</pubDate><atom:updated>2011-09-07T21:25:00.850-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Videojuegos</category><title>Heroes of Newerth: Un juego multijugador de estrategia en línea</title><description>&lt;p align="justify"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 5px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="intro15" border="0" alt="intro15" align="left" src="http://lh4.ggpht.com/-JjXoMYj_msA/Tmgne0wA0PI/AAAAAAAACWw/RkNNCrd-YbQ/intro159.jpg?imgmax=800" width="244" height="244" /&gt;Hace rato en el blog de &lt;a href="http://www.makeuseof.com/tag/heroes-newerth-free-play-crossplatform-action-rts-windows-mac-linux/" target="_blank"&gt;MakeUseOf&lt;/a&gt; me encontré con un nuevo juego que parece estar muy interesante.&amp;#160; Es un juego de estrategia en tiempo real basado en &lt;a href="http://es.wikipedia.org/wiki/Warcraft" target="_blank"&gt;WarCraft&lt;/a&gt;, multijugador y funciona tanto en Windows, MacOX y Linux.&amp;#160; Originalmente era software comercial (tenías que comprarlo), pero ahora ya es gratuito.&lt;/p&gt;  &lt;p align="justify"&gt;En este videojuego los jugadores se dividen en 2 equipos: Legion ó Hellbourne que están ubicados en lados opuestos de un mapa similar a los que hay en la versión original de Warcraft donde cada equipo debe defender una base para no perder.&lt;/p&gt;  &lt;p align="justify"&gt;Puedes descargar el juego &lt;a href="http://www.heroesofnewerth.com/download.php" target="_blank"&gt;aquí&lt;/a&gt;.&amp;#160; Dependiendo de la versión que bajes, pero generalmente las descargas están alrededor de 600 Mb.&amp;#160; ¡Que se diviertan!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37481028-2101938155841650372?l=tony-valderrama.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElTonyYSusOndas/~4/z_WTBVtAD7o" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ElTonyYSusOndas/~3/z_WTBVtAD7o/heroes-of-newerth-un-juego-multijugador.html</link><author>noreply@blogger.com (Tony Valderrama)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-JjXoMYj_msA/Tmgne0wA0PI/AAAAAAAACWw/RkNNCrd-YbQ/s72-c/intro159.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://tony-valderrama.blogspot.com/2011/09/heroes-of-newerth-un-juego-multijugador.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-37481028.post-8561838188726620642</guid><pubDate>Tue, 06 Sep 2011 03:50:00 +0000</pubDate><atom:updated>2011-09-05T22:50:16.742-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">C++</category><title>Vectores, iteradores y STL…</title><description>&lt;p align="justify"&gt;&lt;a href="http://lh4.ggpht.com/-i3nsnfpOgfI/TmWYdDsW4bI/AAAAAAAACWo/szze5GyjLQ4/s1600-h/C%25252B%25252B%25255B3%25255D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 5px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="C  " border="0" alt="C  " align="left" src="http://lh3.ggpht.com/-1I9TRUj7FyQ/TmWYd-aeMXI/AAAAAAAACWs/bvLQx-VZ9rw/C%25252B%25252B_thumb.jpg?imgmax=800" width="204" height="161" /&gt;&lt;/a&gt;Hace unos días escribí acerca del &lt;a href="http://tony-valderrama.blogspot.com/2011/08/libreria-estandar-stl-y-vector.html" target="_blank"&gt;uso del contenedor &lt;font face="Courier New"&gt;vector&lt;/font&gt; para poder manejar una lista&lt;/a&gt; en &lt;a href="http://tony-valderrama.blogspot.com/search/label/C%2B%2B" target="_blank"&gt;C++&lt;/a&gt;.&amp;#160; Aunque el &lt;font face="Courier New"&gt;vector&lt;/font&gt; es muy útil, resulta más interesante y de mayor utilidad si agregamos el uso de iteradores (iterators).&amp;#160; Los iteradores (no sé si esa sea la traducción correcta, pero es lo que más “le suena”) son importantes porque nos permiten accesar de forma fácil a los elementos del contenedor (en este caso un vector), algo así como los &lt;a href="http://tony-valderrama.blogspot.com/2009/10/apuntadores-en-c-pa-onde-apunto.html" target="_blank"&gt;apuntadores&lt;/a&gt;, solo que más sencillos de manejar y menos susceptibles a errores por parte del programador.&amp;#160; También es importante saber usarlos porque son necesarios para poder usar una serie de algoritmos que ya están programados en la STL y que toman iteradores como parámetros.&lt;/p&gt;  &lt;p&gt;Pero, como dijo &lt;a href="http://es.wikipedia.org/wiki/Jack_el_Destripador" target="_blank"&gt;Jack el destripador&lt;/a&gt;: “vámonos por partes”.&amp;#160; Primero voy a decir cómo declarar un iterador, luego como recorrer el &lt;font face="Courier New"&gt;vector&lt;/font&gt; usándolo, luego funciones que pueden ser de utilidad.&lt;/p&gt;  &lt;h2 align="center"&gt;Declarando un iterador&lt;/h2&gt;  &lt;p align="justify"&gt;No hay que incluir ninguna librería nueva porque el &lt;font face="Courier New"&gt;vector&lt;/font&gt; ya lo contiene.&amp;#160; Para declarar uno, la sintaxis sería la siguiente:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="Courier New"&gt;vector&amp;lt;tipo&amp;gt;::iterator nombre;&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;por ejemplo&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="Courier New"&gt;vector&amp;lt;string&amp;gt;::iterator miIterador;&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;declara un iterador a un &lt;font face="Courier New"&gt;vector&lt;/font&gt; de elementos que son de tipo &lt;font face="Courier New"&gt;string&lt;/font&gt; llamado &lt;font face="Courier New"&gt;miIterador&lt;/font&gt;.&amp;#160; También es posible declarar iteradores constantes, es decir, que no pueden cambiar de valor.&amp;#160; Esto se haría así:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="Courier New"&gt;vector&amp;lt;string&amp;gt;::const_iterator it;&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Este ejemplo declara un iterador constante llamado &lt;font face="Courier New"&gt;it&lt;/font&gt;.&lt;/p&gt;  &lt;h2 align="center"&gt;Recorriendo el vector&lt;/h2&gt;  &lt;p align="justify"&gt;Si recuerdas en el programa anterior (y si no recuerdas, &lt;a href="http://tony-valderrama.blogspot.com/2011/08/libreria-estandar-stl-y-vector.html" target="_blank"&gt;lee el post anterior&lt;/a&gt; que es vital para entender este rollo) podía recorrer el &lt;font face="Courier New"&gt;vector&lt;/font&gt; manejándolo como si fuera un arreglo.&amp;#160; El código que cumplía tal fin era este (suponiendo que &lt;font face="Courier New"&gt;inventario&lt;/font&gt; es un &lt;font face="Courier New"&gt;vector&lt;/font&gt;):&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;for (unsigned int i = 0; i &amp;lt; inventario.size(); ++i) {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; cout &amp;lt;&amp;lt; inventario[i] &amp;lt;&amp;lt; endl;       &lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Esto está bien, pero con un iterador, puedo hacerlo de la siguiente manera (suponiendo que &lt;font face="Courier New"&gt;it&lt;/font&gt; es un iterador):&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;for (it = inventario.begin(); it != inventario.end(); ++it) {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; cout &amp;lt;&amp;lt; *it &amp;lt;&amp;lt; endl;       &lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Fíjate en el operador &lt;font face="Courier New"&gt;*&lt;/font&gt; que funciona igual que con los apuntadores.&lt;/p&gt;  &lt;h2 align="center"&gt;Modificando elementos del vector&lt;/h2&gt;  &lt;p&gt;También es posible cambiar un elemento del vector.&amp;#160; Supongamos que quiero cambiar lo que tengo de inventario en el primer elemento.&amp;#160; Esto lo podría hacer posicionando el iterador en el primer elemento y usar la notación * para cambiar el valor.&amp;#160; Claro que si quieres cambiar otro elemento, lo tienes que encontrar primero.&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;it = inventario.begin();      &lt;br /&gt;*it = “&lt;a href="http://es.wikipedia.org/wiki/Guada%C3%B1a" target="_blank"&gt;Guadaña&lt;/a&gt;”;&lt;/font&gt;&lt;/p&gt;  &lt;h2 align="center"&gt;Funciones y elementos del vector&lt;/h2&gt;  &lt;p&gt;Es posible hacerlo con la misma notación que los apuntadores.&amp;#160; Es decir, si quiero saber el número de elementos del &lt;font face="Courier New"&gt;vector&lt;/font&gt; inventario puedo hacerlo de cualquiera de estas maneras: &lt;font face="Courier New"&gt;(*it).size()&lt;/font&gt; o &lt;font face="Courier New"&gt;it-&amp;gt;size()&lt;/font&gt;&lt;/p&gt;  &lt;h2 align="center"&gt;Insertando elementos en cualquier posición&lt;/h2&gt;  &lt;p&gt;Para esto me sirve la función insert.&amp;#160; Supongamos que quiero poner antes del primer elemento un objeto que acabo de encontrar.&amp;#160; Entonces haría lo siguiente:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;inventario.insert(inventario.begin(), &amp;quot;Botella llena de &lt;/font&gt;&lt;a href="http://es.wikipedia.org/wiki/Curare" target="_blank"&gt;&lt;font face="Courier New"&gt;Curare&lt;/font&gt;&lt;/a&gt;&lt;font face="Courier New"&gt;&amp;quot;);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Claro que si lo quieres insertar en otro lugar, solo posiciona un iterador en el lugar en donde quieres insertarlo y escribe eso en lugar del &lt;font face="Courier New"&gt;inventario.begin()&lt;/font&gt;.&lt;/p&gt;  &lt;h2 align="center"&gt;Eliminando cualquier elemento&lt;/h2&gt;  &lt;p&gt;El contenedor vector tiene la función pop_back para eliminar el último elemento, pero nada más.&amp;#160; ¿Y si quiero eliminar lo que tengo en la posición 3 de mi inventario?&amp;#160; Con iteradores puedo hacerlo de la siguiente manera:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;inventario.erase((inventario.begin() + 2));&lt;/font&gt;&lt;/p&gt;  &lt;h2 align="center"&gt;Y para terminar, referencias y atracciones futuras&lt;/h2&gt;  &lt;p align="justify"&gt;Con esto más o menos cubrí lo que puedes hacer con un iterador con el contenedor vector.&amp;#160; Faltaría ver como usar algoritmos de la STL para hacernos la vida todavía más sencilla porque puedo aprovechar funciones ya creadas para ordenar, mezclar, etc.&lt;/p&gt;  &lt;p align="justify"&gt;Para crear este artículo, me basé en el mismo libro de la vez anterior (vuelvo a poner la referencia abajo) y la imagen del C++ chuvidubis es cortesía del blog de &lt;a href="http://etiennegt.blogspot.com/2011/05/lenguaje-de-programacion-c.html" target="_blank"&gt;Etienne GT&lt;/a&gt;.&amp;#160; ¡Hasta la próxima!&lt;/p&gt;  &lt;p align="center"&gt;&lt;iframe style="width: 120px; height: 240px" marginheight="0" src="http://rcm.amazon.com/e/cm?t=tonysworld04&amp;amp;o=1&amp;amp;p=8&amp;amp;l=as1&amp;amp;asins=1435457420&amp;amp;ref=tf_til&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" frameborder="0" marginwidth="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37481028-8561838188726620642?l=tony-valderrama.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElTonyYSusOndas/~4/esi1dRC-Ols" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ElTonyYSusOndas/~3/esi1dRC-Ols/vectores-iteradores-y-stl.html</link><author>noreply@blogger.com (Tony Valderrama)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-1I9TRUj7FyQ/TmWYd-aeMXI/AAAAAAAACWs/bvLQx-VZ9rw/s72-c/C%25252B%25252B_thumb.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://tony-valderrama.blogspot.com/2011/09/vectores-iteradores-y-stl.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-37481028.post-3227694501100360382</guid><pubDate>Sat, 03 Sep 2011 00:37:00 +0000</pubDate><atom:updated>2011-09-02T19:38:26.530-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Casos de Estudio</category><category domain="http://www.blogger.com/atom/ns#">Avisos de ocasión</category><category domain="http://www.blogger.com/atom/ns#">Videojuegos</category><category domain="http://www.blogger.com/atom/ns#">Comunicación</category><title>Videojuegos y educación. Explorando aprendizaje entre adolescentes.</title><description>&lt;p align="justify"&gt;&lt;a href="http://lh4.ggpht.com/-ntGke3yFAd0/TmF2uy7fe0I/AAAAAAAACWU/QIlZ1LId4YM/s1600-h/wa3ft%25255B3%25255D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 5px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="wa3ft" border="0" alt="wa3ft" align="left" src="http://lh4.ggpht.com/-jUphrs0VidU/TmF2vg2MlcI/AAAAAAAACWY/z1poOQlr69Y/wa3ft_thumb.jpg?imgmax=800" width="204" height="117" /&gt;&lt;/a&gt;Les anuncio a todos que por fin voy a terminar mi maestría.&amp;#160; Si, entré en agosto del 2005 y mi última materia fue a principios de este año, es decir que una maestría que generalmente se hace en 2 años yo lo hice en 5.5 años.&amp;#160; Mi examen recepcional será el lunes 3/Oct a las 12:30pm en la sala B del edificio R (el administrativo) del ITESO.&amp;#160; Para que se vayan dando cuenta de lo que se va a tratar, te dejo este avance cinematográfico de mi tesis.&lt;/p&gt;  &lt;p align="justify"&gt;Si puedes, allá nos veremos.&amp;#160; Hasta habrá un poco de vino tinto para brindar al terminar.&amp;#160; Si me dan el título de maestro, brindamos por eso y si no, por lo menos con el alcohol se nos olvida un poco &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-openmouthedsmile" alt="Risa" src="http://lh5.ggpht.com/-xb7pDJNcjHE/TmF2vzmk6UI/AAAAAAAACWc/cBwbAlzCa8Q/wlEmoticon-openmouthedsmile%25255B2%25255D.png?imgmax=800" /&gt;.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; padding-left: 0px; width: 448px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:ac66d073-0f33-4ad3-8bcb-1544f5376a12" class="wlWriterEditableSmartContent"&gt;&lt;div id="02b88f75-f18d-4a0e-b8a7-11e1ab8ef1dc" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=vne2qD8Jqgk" target="_new"&gt;&lt;img src="http://lh5.ggpht.com/-gv8HDiyg9Fs/TmF2xAPDKcI/AAAAAAAACWk/JhjWtLpBzTw/videofc34c04a8568%25255B11%25255D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('02b88f75-f18d-4a0e-b8a7-11e1ab8ef1dc'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;448\&amp;quot; height=\&amp;quot;252\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/vne2qD8Jqgk?hl=en&amp;amp;hd=1\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/vne2qD8Jqgk?hl=en&amp;amp;hd=1\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;448\&amp;quot; height=\&amp;quot;252\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt=""&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="width:448px;clear:both;font-size:.8em"&gt;Avance cinematográfico de mi Tesis :)&lt;/div&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37481028-3227694501100360382?l=tony-valderrama.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElTonyYSusOndas/~4/aNY2nBCPQAY" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ElTonyYSusOndas/~3/aNY2nBCPQAY/videojuegos-y-educacion-explorando.html</link><author>noreply@blogger.com (Tony Valderrama)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-jUphrs0VidU/TmF2vg2MlcI/AAAAAAAACWY/z1poOQlr69Y/s72-c/wa3ft_thumb.jpg?imgmax=800" height="72" width="72" /><thr:total>4</thr:total><feedburner:origLink>http://tony-valderrama.blogspot.com/2011/09/videojuegos-y-educacion-explorando.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-37481028.post-605573487464082978</guid><pubDate>Fri, 02 Sep 2011 01:34:00 +0000</pubDate><atom:updated>2011-09-01T20:34:54.217-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Videojuegos</category><title>El número de videojuegos para móviles</title><description>&lt;p&gt;&lt;a href="http://conecti.ca/wp-content/uploads/2011/07/infographic-mobile-gaming-by-numbers-geekaphone.jpg" target="_blank"&gt;&lt;img style="margin: 0px 5px 0px 0px; display: inline; float: left" align="left" src="http://conecti.ca/wp-content/uploads/2011/07/infographic-mobile-gaming-by-numbers-geekaphone.jpg" width="132" height="768" /&gt;&lt;/a&gt;Ayer vi en el blog de &lt;a href="http://conecti.ca/2011/08/01/infografia-los-numeros-en-videojuegos-para-moviles" target="_blank"&gt;Conecti.ca&lt;/a&gt; me topé con esta infografía que me parece muy interesante.&amp;#160; Se trata de la forma en que está actualmente el mercado de los videojuegos para dispositivos móviles (concretamente celulares, nada del &lt;a href="http://es.wikipedia.org/wiki/Nintendo_DS" target="_blank"&gt;DS&lt;/a&gt;, &lt;a href="http://es.wikipedia.org/wiki/Nintendo_3DS" target="_blank"&gt;3DS&lt;/a&gt;, &lt;a href="http://es.wikipedia.org/wiki/PlayStation_Portable" target="_blank"&gt;PSP&lt;/a&gt;, ni de otras consolas de videojuegos portátiles).&lt;/p&gt;  &lt;p&gt;La imagen original salió en &lt;a href="http://dailymobile.se/2011/07/29/mobile-gaming-by-numbers/" target="_blank"&gt;DailyMobile&lt;/a&gt;.&amp;#160; Puedes hacer clic sobre la imagen para verlo en grandote en otra ventana o pestaña &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Sonrisa" src="http://lh3.ggpht.com/-YAL_Qu5tLj4/TmAyvQ9pt_I/AAAAAAAACWQ/ILo1gyy4rl8/wlEmoticon-smile2.png?imgmax=800" /&gt;.&lt;/p&gt;  &lt;p&gt;¡Se divierten (y si es con un juego en dispositivo móvil, mejor tantito)!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37481028-605573487464082978?l=tony-valderrama.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElTonyYSusOndas/~4/UY-D70v3D9k" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ElTonyYSusOndas/~3/UY-D70v3D9k/el-numero-de-videojuegos-para-moviles.html</link><author>noreply@blogger.com (Tony Valderrama)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-YAL_Qu5tLj4/TmAyvQ9pt_I/AAAAAAAACWQ/ILo1gyy4rl8/s72-c/wlEmoticon-smile2.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://tony-valderrama.blogspot.com/2011/09/el-numero-de-videojuegos-para-moviles.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-37481028.post-4208175372568826445</guid><pubDate>Thu, 01 Sep 2011 01:43:00 +0000</pubDate><atom:updated>2011-08-31T20:43:24.628-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">C++</category><title>Librería estándar (STL) y Vector</title><description>&lt;p align="justify"&gt;&lt;a href="http://lh4.ggpht.com/-Pxxh0f2xKgU/Tl7jJnVL9VI/AAAAAAAACWA/3aRzn_KymFM/s1600-h/vectorx10.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 5px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="vectorx" border="0" alt="vectorx" align="left" src="http://lh3.ggpht.com/-E5kwMmTEUOo/Tl7jKZ5PnII/AAAAAAAACWE/OlLCGlM66iw/vectorx_thumb3.jpg?imgmax=800" width="149" height="167" /&gt;&lt;/a&gt;¿Para qué reinventar la rueda si a alguien ya se le ocurrió?&amp;#160; Es mejor usarla, ¿o no?&amp;#160; Este mismo argumento aplica para los programadores: ¿para qué programar cosas que ya están hechas de forma muy eficiente por otros programadores?&amp;#160; Sería una pérdida de tiempo.&lt;/p&gt;  &lt;p align="justify"&gt;Por eso los programadores podemos aprovechar la &lt;a href="http://www.cplusplus.com/reference/stl/" target="_blank"&gt;Standard Template Library&lt;/a&gt;, conocido como STL, o librería estándar de plantillas (se oye pésimo en español, pero esa es la traducción).&amp;#160; El STL contiene varios contenedores (valga la redundancia) que te permiten hacer diferentes cosas.&amp;#160; Hay contenedores para arreglos dinámicos (&lt;font face="Courier New"&gt;vector&lt;/font&gt;), &lt;a href="http://es.wikipedia.org/wiki/Cola_(inform%C3%A1tica)" target="_blank"&gt;colas&lt;/a&gt; (&lt;font face="Courier New"&gt;queue&lt;/font&gt;), &lt;a href="http://en.wikipedia.org/wiki/Heap_(data_structure)" target="_blank"&gt;heap&lt;/a&gt; (&lt;font face="Courier New"&gt;heap&lt;/font&gt;), &lt;a href="http://tony-valderrama.blogspot.com/2011/05/listas-simplemente-ligadas.html" target="_blank"&gt;listas ligadas&lt;/a&gt; (list), &lt;a href="http://es.wikipedia.org/wiki/%C3%81rbol_(inform%C3%A1tica)" target="_blank"&gt;árboles&lt;/a&gt; (set), &lt;a href="http://es.wikipedia.org/wiki/Pila_(inform%C3%A1tica)" target="_blank"&gt;pilas&lt;/a&gt; (stack), etc.&amp;#160; Claro que cada uno de estos contiene un chorro de algoritmos que facilitan la vida para usarlos, manipularlos, llenarlos y casi cualquier otra cosa que termine con “arlos”, jeje.&lt;/p&gt;  &lt;p align="justify"&gt;En este artículo voy a hablar un poco sobre el uso del contenedor &lt;font face="Courier New"&gt;&lt;a href="http://www.cplusplus.com/vector" target="_blank"&gt;vector&lt;/a&gt;&lt;/font&gt; (tocayo del memorable malvado de la película “&lt;a href="http://es.wikipedia.org/wiki/Despicable_Me" target="_blank"&gt;Mi villano favorito&lt;/a&gt;”, que aparece en la imagen de este mensaje).&amp;#160; Básicamente es un arreglo dinámico, es decir, un arreglo que puede cambiar de tamaño (uno de los inconvenientes de los &lt;a href="http://tony-valderrama.blogspot.com/2009/07/arreglos-en-c-y-c.html" target="_blank"&gt;arreglos comunes y corrientes&lt;/a&gt;).&lt;/p&gt;  &lt;p align="justify"&gt;Usar el contenedor &lt;font face="Courier New"&gt;vector&lt;/font&gt; tiene muchas ventajas sobre los &lt;a href="http://tony-valderrama.blogspot.com/2009/07/arreglos-en-c-y-c.html" target="_blank"&gt;arreglos&lt;/a&gt;, por ejemplo:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;Los vectores pueden crecer y los arreglos no.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Los vectores pueden usar algoritmos programados en el STL.&amp;#160; Los arreglos no.&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;Aunque no todo es pura dulzura porque hay también algunas desventajas en el uso de vectores:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;Necesitan más memoria.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Cuando los vectores crecen mucho, disminuya el rendimiento.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Los vectores no están disponibles en todas las plataformas.&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;h2 align="center"&gt;&lt;font style="font-weight: bold"&gt;Antes de empezar…&lt;/font&gt;&lt;/h2&gt;  &lt;p align="justify"&gt;Antes que nada, hay que incluir la librería que contiene al contenedor (valga la redundancia) vector.&amp;#160; Como está en el &lt;font face="Courier New"&gt;namespace std&lt;/font&gt;, no hace falta incluir el “&lt;font face="Courier New"&gt;.h&lt;/font&gt;”.     &lt;br /&gt;&lt;font face="Courier New"&gt;#include &amp;lt;vector&amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;h2 align="center"&gt;&lt;font style="font-weight: bold"&gt;Declarar un vector&lt;/font&gt;&lt;/h2&gt;  &lt;p align="justify"&gt;Para declarar un vector, la sintaxis básica es la siguiente:    &lt;br /&gt;&lt;font face="Courier New"&gt;vector&amp;lt;tipo_de_dato&amp;gt; nombre_de_variable;&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Por ejemplo, si quiero declarar un vector de tipo &lt;font face="Courier New"&gt;string&lt;/font&gt; con nombre &lt;font face="Courier New"&gt;inventario&lt;/font&gt;, escribo:     &lt;br /&gt;&lt;font face="Courier New"&gt;vector&amp;lt;string&amp;gt; inventario;&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;También puedo decirle que comience con 10 elementos en el vector así:    &lt;br /&gt;&lt;font face="Courier New"&gt;vector&amp;lt;string&amp;gt; inventario(10);&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Y si quiero inicializar los 10 elementos con la cadena “Nada”, escribiría:    &lt;br /&gt;&lt;font face="Courier New"&gt;vector&amp;lt;string&amp;gt; inventario(10,”Nada”);&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Finalmente, si quiero inicializar mi vector con el contenido de un arreglo (en este ejemplo, se llama &lt;font face="Courier New"&gt;Arr&lt;/font&gt;), escribiría:     &lt;br /&gt;&lt;font face="Courier New"&gt;vector&amp;lt;string&amp;gt; inventario(Arr);&lt;/font&gt;&lt;/p&gt;  &lt;h2 align="center"&gt;&lt;font style="font-weight: bold"&gt;Funciones&lt;/font&gt;&lt;/h2&gt;  &lt;p align="justify"&gt;Las funciones más usuales de este contenedor son las siguientes:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;&lt;font face="Courier New"&gt;push_back&lt;/font&gt; – agrega un elemento al final del vector.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;font face="Courier New"&gt;size&lt;/font&gt; – devuelve el número de elementos que están almacenados en el vector.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;font face="Courier New"&gt;pop_back&lt;/font&gt; – elimina el último elemento del vector.&amp;#160; esto hace que el vector cambie de tamaño (se hace más pequeño).&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;font face="Courier New"&gt;clear&lt;/font&gt; – elimina todos los elementos del vector.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;font face="Courier New"&gt;empty &lt;/font&gt;– Devuelve un valor de verdadero si el vector carece de elementos.&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;h2 align="center"&gt;&lt;font style="font-weight: bold"&gt;Ejemplo que usa el contenedor Vector&lt;/font&gt;&lt;/h2&gt;  &lt;p align="justify"&gt;Aquí les presento código hecho en Visual C++ 2010.&amp;#160; Es un ejemplo simple que pone en práctica todo lo que escribí con anterioridad.&amp;#160; Si necesitas, &lt;a href="http://freedrive.com/file/1501757" target="_blank"&gt;aquí&lt;/a&gt; puedes descargar un archivo comprimido con todos los archivos y carpetas que conforman la solución.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://lh4.ggpht.com/-eTyn4yrTF3I/Tl7jLWRQQUI/AAAAAAAACWI/_cZTuhRNLW0/s1600-h/CdigoVector4.png" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="CódigoVector" border="0" alt="CódigoVector" src="http://lh6.ggpht.com/-JcXZ3y0YKtE/Tl7jOmvNZII/AAAAAAAACWM/KYAndFducbU/CdigoVector_thumb2.png?imgmax=800" width="401" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h2 align="center"&gt;&lt;font style="font-weight: bold"&gt;Atracciones futuras&lt;/font&gt;&lt;/h2&gt;  &lt;p align="justify"&gt;Para que puedas trabajar mejor con vectores y que se puedan aprovechar mejor, es importante hablar de iterators (¿iteradores?).&amp;#160; De éstos hablaré en mi próximo post de &lt;a href="http://tony-valderrama.blogspot.com/search/label/C%2B%2B" target="_blank"&gt;C++&lt;/a&gt;.&lt;/p&gt;  &lt;h2 align="center"&gt;&lt;font style="font-weight: bold"&gt;Referencias para mayor información&lt;/font&gt;&lt;/h2&gt;  &lt;p align="justify"&gt;Si quieres saber más, te recomiendo el sitio de &lt;a href="http://gabarro.org/wiki/STL_vector" target="_blank"&gt;GabaWiki sobre STL Vector&lt;/a&gt;.&amp;#160; Abajo pongo la referencia a un libro que me ayudó a crear este post.&lt;/p&gt;  &lt;p align="justify"&gt;La imagen de Vector que aparece al principio es cortesía de &lt;a href="http://www.usatoday.com/life/people/2010-07-08-segel08_st_N.htm" target="_blank"&gt;USA Today&lt;/a&gt;.&lt;/p&gt;  &lt;p align="center"&gt;&lt;iframe style="width: 120px; height: 240px" marginheight="0" src="http://rcm.amazon.com/e/cm?t=tonysworld04&amp;amp;o=1&amp;amp;p=8&amp;amp;l=as1&amp;amp;asins=1435457420&amp;amp;ref=tf_til&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" frameborder="0" marginwidth="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37481028-4208175372568826445?l=tony-valderrama.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElTonyYSusOndas/~4/7xjnYTJIOb8" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ElTonyYSusOndas/~3/7xjnYTJIOb8/libreria-estandar-stl-y-vector.html</link><author>noreply@blogger.com (Tony Valderrama)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-E5kwMmTEUOo/Tl7jKZ5PnII/AAAAAAAACWE/OlLCGlM66iw/s72-c/vectorx_thumb3.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://tony-valderrama.blogspot.com/2011/08/libreria-estandar-stl-y-vector.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-37481028.post-5792320899101224470</guid><pubDate>Tue, 30 Aug 2011 20:03:00 +0000</pubDate><atom:updated>2011-08-30T15:03:55.623-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Videojuegos</category><title>10 videojuegos más pirateados</title><description>&lt;p align="justify"&gt;&lt;a href="http://lh6.ggpht.com/-yFAs2r4G83E/Tl1CECngXeI/AAAAAAAACV4/ZJSwV-sUmBA/s1600-h/Piracy2.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 5px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Piracy" border="0" alt="Piracy" align="left" src="http://lh4.ggpht.com/-J8q46LeZ8_s/Tl1CI43DZ-I/AAAAAAAACV8/MIjms5kKOy8/Piracy_thumb.jpg?imgmax=800" width="184" height="180" /&gt;&lt;/a&gt;Soy fan de los &lt;a href="http://tony-valderrama.blogspot.com/search/label/Videojuegos" target="_blank"&gt;videojuegos&lt;/a&gt;.&amp;#160; Para los que me conocen hasta saben que mi tesis de maestría tiene que ver con ellos.&amp;#160; Por eso me llamó mucho la atención un post en el blog de &lt;a href="http://feedproxy.google.com/~r/Makeuseof/~3/-omfv9KtOns/" target="_blank"&gt;MakeUseOf&lt;/a&gt; que quiero compartir con ustedes.&amp;#160; Se trata de los videojuegos más pirateados de todos los tiempos.&amp;#160; Generalmente los juegos más pirateados también son los más vendidos lo cual hace difícil basarse en información de ventas y es por esto que &lt;a href="http://www.makeuseof.com/tag/author/jbruce/" target="_blank"&gt;James Bruce&lt;/a&gt; (autor del artículo original) se basó en el número de veces que han sido descargados (incluso pone la fecha, misma que yo transcribo, en que obtuvo ese dato).&amp;#160; Así que sin más preludio, ahí va la lista.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;     &lt;div align="justify"&gt;&lt;a href="http://www.callofduty.com/blackops" target="_blank"&gt;Call of Duty: Black Ops&lt;/a&gt; – &lt;u&gt;4.27 millones de descargas&lt;/u&gt; (Noviembre 2010).&amp;#160; Esta no es novedad.&amp;#160; Según mis alumnos (yo no soy muy fan de este género de &lt;a href="http://tony-valderrama.blogspot.com/search/label/Videojuegos" target="_blank"&gt;videojuegos&lt;/a&gt;) es el mejor FPS que hay en el mercado.&amp;#160; La calidad de los FPS se basan en comparación con este.&amp;#160; Ya veremos qué mejoras se les ocurre para el 22 de octubre cuando está programado que salga la nueva versión a la venta.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;a href="http://modernwarfare2.infinityward.com/agegate.php" target="_blank"&gt;Call of Duty: Modern Warfare&lt;/a&gt; – &lt;u&gt;4.1 millones de descargas&lt;/u&gt; (Noviembre 2009).&amp;#160; Este es muy similar al anterior, solo que fue creado por un estudio diferente y no está tan avanzado (sobre todo en lo que respecta a subir de niveles y los premios).&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;a href="http://www.battlefieldbadcompany2.com/agegate" target="_blank"&gt;Battlefield: Bad Company 2&lt;/a&gt; – &lt;u&gt;3.96 millones de descargas&lt;/u&gt; (Marzo 2010).&amp;#160; Otro juego de combate, pero enfocado más en la estrategia que en el combate personal como en los FPS (como los dos anteriores).&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;a href="http://www.mafia2game.com/" target="_blank"&gt;Mafia 2&lt;/a&gt; – &lt;u&gt;3.55 millones de descargas&lt;/u&gt; (Agosto 2010).&amp;#160; Es una mezcla de manejar autos, disparadera y combate cuerpo a cuerpo.&amp;#160; Según los críticos (como &lt;a href="http://www.eurogamer.net/" target="_blank"&gt;Eurogamer&lt;/a&gt; y &lt;a href="http://www.2kgames.com/" target="_blank"&gt;2KGames&lt;/a&gt;) es un juego pésimo.&amp;#160; sin embargo, pese a su fracaso en el mercado, el número de descargas dice que muchos lo juegan.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;a href="http://masseffect.bioware.com/" target="_blank"&gt;Mass Efect 2&lt;/a&gt; - &lt;u&gt;3.24 millones de descargas&lt;/u&gt; (Enero 2010).&amp;#160; Es un RPG que te permite explorar un mundo virtual con elementos de un FPS.&amp;#160; La primera versión presentó algunas fallas técnicas, pero ya tenía una narrativa muy interesante.&amp;#160; Esta versión corrige todos esos detalles.&amp;#160; Aunque no lo he jugado, parece un excelente juego.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;a href="http://www.thesims3.com/" target="_blank"&gt;Sims 3&lt;/a&gt; – &lt;u&gt;3.2 millones de descargas&lt;/u&gt; (Junio 2009).&amp;#160; Los Sims han sido uno de los juegos más vendidos y que han marcado época.&amp;#160; Una simulación del mundo real… algo así como un universo paralelo donde el jugador puede vivir una vida alterna en un mundo virtual.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;a href="http://us.battle.net/sc2/en/" target="_blank"&gt;Starcraft 2&lt;/a&gt; – &lt;u&gt;3.12 millones de descargas&lt;/u&gt; (Julio 2010).&amp;#160; Es un juego de estrategia fenomenal que construye sobre el juego Starcraft original con mejores gráficos y nuevas funciones y personajes que lo hace bastante adictivo.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;a href="http://www.prototypegame.com/" target="_blank"&gt;Prototype&lt;/a&gt; – &lt;u&gt;2.35 millones de descargas&lt;/u&gt; (Junio 2009).&amp;#160; Es un juego donde el usuario se desenvuelve en un mundo virtual abierto, tipo Grand Theft Auto, con una narrativa intrigante y muchas misiones diferentes y variados.&amp;#160; Puedes manejar tanques y mandar otros carros volando, o también puedes tomar el papel de alguno de los personajes.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;a href="http://shift.needforspeed.com/home.action" target="_blank"&gt;Need for Speed: Shift&lt;/a&gt; – &lt;u&gt;2.1 millones de descargas&lt;/u&gt; (Septiembre 2009).&amp;#160; Pese a lo que digan algunos, es uno de los mejores juegos de carreras de autos.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;a href="http://www.streetfighter.com/us/sfxtk/" target="_blank"&gt;Street Fighter IV&lt;/a&gt; – 1.85 millones de descargas (Julio 2009).&amp;#160; En lo personal no me gusta este juego, pero no por eso deja de ser popular.&amp;#160; Es una actualización con mejores gráficos que el juego original Street Fighter que está en todos los changarritos alrededor del país.&lt;/div&gt;   &lt;/li&gt; &lt;/ol&gt;  &lt;p align="justify"&gt;Algo que es extraño es que no apareciera &lt;a href="http://www.rockstargames.com/IV/" target="_blank"&gt;Grand Theft Auto 4&lt;/a&gt;, pese a que rompió un record Guiness por ser el juego que mayor ingreso ha obtenido en 24 horas después de su lanzamiento en mayo del 2008.&amp;#160; En fin, no se les puede dar gusto a todos…&lt;/p&gt;  &lt;p align="justify"&gt;Nota: esta información es meramente informativa.&amp;#160; De ninguna manera estoy intentando decir que piratear juegos es lo mejor.&amp;#160; En otras palabras, di no a la piratería, jejeje.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37481028-5792320899101224470?l=tony-valderrama.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElTonyYSusOndas/~4/k5nuGkEECRE" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ElTonyYSusOndas/~3/k5nuGkEECRE/10-videojuegos-mas-pirateados.html</link><author>noreply@blogger.com (Tony Valderrama)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-J8q46LeZ8_s/Tl1CI43DZ-I/AAAAAAAACV8/MIjms5kKOy8/s72-c/Piracy_thumb.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://tony-valderrama.blogspot.com/2011/08/10-videojuegos-mas-pirateados.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-37481028.post-6818973593369232006</guid><pubDate>Mon, 29 Aug 2011 02:51:00 +0000</pubDate><atom:updated>2011-08-28T21:51:46.053-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">GDI+</category><category domain="http://www.blogger.com/atom/ns#">Visual Basic .net</category><title>Bitmaps y Visual Basic</title><description>&lt;p align="justify"&gt;&lt;a href="http://lh6.ggpht.com/-doeHjzJ7JKw/Tlr-uzgA36I/AAAAAAAACVw/E9haV69TIOU/s1600-h/super-mario-bros-8bit%25255B2%25255D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 5px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="super-mario-bros-8bit" border="0" alt="super-mario-bros-8bit" align="left" src="http://lh5.ggpht.com/-qUDAtOjFG-c/Tlr-vnsYggI/AAAAAAAACV0/g9WzVdi39Hw/super-mario-bros-8bit_thumb.jpg?imgmax=800" width="104" height="96" /&gt;&lt;/a&gt;En mensajes anteriores he hablado de la forma de aprovechar el GDI+ que viene con Visual Basic .net para usar la clase &lt;font face="Courier New"&gt;Graphics&lt;/font&gt; para &lt;a href="http://tony-valderrama.blogspot.com/2006/11/lneas-y-cuadrados-ejemplo-del-uso-de.html" target="_blank"&gt;dibujar líneas y cuadrados al azar&lt;/a&gt;, hacer &lt;a href="http://tony-valderrama.blogspot.com/2006/11/peint-programa-mexicanizada-del-paint.html" target="_blank"&gt;un especie de Paint chafa&lt;/a&gt; y luego lo &lt;a href="http://tony-valderrama.blogspot.com/2010/11/dibujando-dibujando-en-vb-net.html" target="_blank"&gt;combinamos con menús&lt;/a&gt; para que la interfaz se viera bien.&amp;#160; En esta ocasión haré uso de la clase &lt;font face="Courier New"&gt;Bitmap&lt;/font&gt; y un &lt;font face="Courier New"&gt;PictureBox&lt;/font&gt; para crear una superficie que me permita dibujar sobre él mediante código.&amp;#160; Con esto podremos hacer animaciones basados en &lt;a href="http://es.wikipedia.org/wiki/Sprite_(videojuegos)" target="_blank"&gt;Sprites&lt;/a&gt;, lo cual es la base de todas las animaciones que se hacen en los videojuegos 2D.&lt;/p&gt;  &lt;p align="justify"&gt;Para dibujar mediante el código, se necesitan objetos de la clase &lt;font face="Courier New"&gt;Bitmap&lt;/font&gt; y &lt;font face="Courier New"&gt;Graphics&lt;/font&gt;, que puedo declarar de la siguiente manera:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="Courier New"&gt;Public superficie As Bitmap      &lt;br /&gt;Public disp as Graphics&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Luego, suponiendo que tengo un &lt;font face="Courier New"&gt;PictureBox&lt;/font&gt; llamado &lt;font face="Courier New"&gt;PictureBox1&lt;/font&gt;&lt;font face="Calibri"&gt;, creo los objetos.&amp;#160; Aunque el &lt;font face="Courier New"&gt;PictureBox&lt;/font&gt; se puede crear a la hora de ejecución, en esta ocasión voy a hacerlo de forma manual (o sea, dibujándolo en la pantalla).&amp;#160; El código se vería así:&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="Courier New"&gt;superficie = New Bitmap(Me.Size.Width,Me.Size.Height)      &lt;br /&gt;PictureBox1.Image = superficie       &lt;br /&gt;disp = Graphics.FromImage(superficie)&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Con esto ya inicializamos los objetos que necesitamos para seguir.&lt;/p&gt;  &lt;h2 align="center"&gt;Cargando un bitmap a la memoria&lt;/h2&gt;  &lt;p align="justify"&gt;Para crear un nuevo &lt;a href="http://es.wikipedia.org/wiki/Gr%C3%A1fico_rasterizado" target="_blank"&gt;bitmap&lt;/a&gt; (o mapa de bits en español), no hay una función que la cargue de forma automática.&amp;#160; Hay que hacer uso del &lt;a href="http://es.wikipedia.org/wiki/Constructor_(inform%C3%A1tica)" target="_blank"&gt;constructor&lt;/a&gt; de la clase de la siguiente manera:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="Courier New"&gt;Public bmp As Bitmap      &lt;br /&gt;bmp = New Bitmap(“imagen.bmp”)&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Aunque se podría declarar y llamar el constructor al mismo tiempo, no lo voy a hacer para tener mayor control sobre el proceso.&amp;#160; El hacerlo en 2 líneas (muy a pesar de que me gusta ahorrar líneas de código) me permite usar un bloque &lt;font face="Courier New"&gt;Try…Catch&lt;/font&gt; (ya en varios posts he explicado la forma en que nos podemos recuperar de errores con estas instrucciones) para asegurarme que se haya podido cargar a la memoria sin problemas.&amp;#160; El´código quedaría así:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;Try&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; bmp = New Bitmap(“imagen.bmp”)       &lt;br /&gt;Catch ex As Exception       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; MsgBox(“Error al cargar el archivo”)       &lt;br /&gt;End Try&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Para simplificarnos la vida, sería conveniente hacer una función que cargue un mapa de bits a la memoria y devolviera un objeto &lt;font face="Courier New"&gt;Bitmap&lt;/font&gt; si lo puede abrir o un &lt;font face="Courier New"&gt;Nothing&lt;/font&gt; (valor nulo) si no es posible (ya sea que no está el archivo o está dañado o lo que sea).&amp;#160; Una función de este tipo sería como esto:&lt;/p&gt; &lt;font face="Courier New"&gt;Public Function CargaBitmap(ByVal NombreArchivo As String)    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Dim bmp As Bitmap     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Try     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; bmp = New Bitmap(NombreArchivo)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Catch ex As Exception     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MsgBox(“Error al cargar el archivo”)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; End Try     &lt;br /&gt;End Function&lt;/font&gt;&amp;#160; &lt;p align="justify"&gt;Creo que con una función como esta nos simplificamos la vida muchísimo.&amp;#160; Ahora, ¡a continuar con la aventura!&lt;/p&gt;  &lt;h2 align="center"&gt;Dibujando un mapa de bits en la ventana&lt;/h2&gt;  &lt;p align="justify"&gt;Hay varias versiones de la función &lt;font face="Courier New"&gt;Graphics.DrawImage()&lt;/font&gt; lo que en términos de la &lt;a href="http://tony-valderrama.blogspot.com/2008/08/paradigmas-de-programacin-y-muchos.html" target="_blank"&gt;OOP&lt;/a&gt; (Programación Orientada a Objetos, por sus siglas en inglés) diríamos que son funciones sobrecargadas.&amp;#160; Independientemente del término &lt;a href="http://buscon.rae.es/draeI/SrvltGUIBusUsual?TIPO_HTML=2&amp;amp;LEMA=rimbombante" target="_blank"&gt;rimbombante&lt;/a&gt; que le quieras poner, la versión más simple solo recibe las coordenadas horizontales (X), verticales (Y) y el mapa de bits a dibujar.&amp;#160; Por ejemplo, para dibujar un bitmap (suponiendo que estás usando los mismos nombres que he usado para objetos en este post) en la coordenada 15,20 escribiría lo siguiente:&lt;/p&gt; &lt;font face="Courier New"&gt;disp.DrawImage(bmp,15,20)    &lt;br /&gt;&lt;/font&gt;  &lt;p align="justify"&gt;Esta función también acepta otros dos enteros que indican el ancho y alto a los que se mostrará haciendo que la imagen cambie de tamaño (120 pixeles de ancho por 120 de alto):&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="Courier New"&gt;disp.DrawImage(bmp,15,20,120,120)&lt;/font&gt;&lt;/p&gt;  &lt;h2 align="center"&gt;Girando y volteando el mapa de bits&lt;/h2&gt;  &lt;p align="justify"&gt;Además de cambiar el tamaño, hay otras cuantas maneras de manipular el mapa de bits en tu ventana.&amp;#160; Por ejemplo, se puede girar en 90, 180 y 270 grados y/o voltear tanto de forma horizontal o vertical.&amp;#160; Por ejemplo, si quiero girar un mapa de bits 90&lt;sup&gt;o &lt;/sup&gt;escribiría:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="Courier New"&gt;bmp.RotateFlip(RotateFlipType.Rotate90FlipNone)&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Para mayores informes sobre la función &lt;font face="Courier New"&gt;RotateFlip&lt;/font&gt;, qué mejor que preguntarle a Microsoft &lt;a href="http://msdn.microsoft.com/en-us/library/system.drawing.image.rotateflip.aspx" target="_blank"&gt;aquí&lt;/a&gt; y si quieres saber todas las opciones de giros, vueltas y revueltas (yo solo puse uno), fíjate en su información acerca de la enumeración &lt;font face="Courier New"&gt;RotateFlipType&lt;/font&gt; &lt;a href="http://msdn.microsoft.com/en-us/library/system.drawing.rotatefliptype.aspx" target="_blank"&gt;aquí&lt;/a&gt; para que seas capaz de hacer todo tipo de malabares con mapas de bits.&lt;/p&gt;  &lt;h2 align="center"&gt;Accesando a los pixeles del mapa de bits&lt;/h2&gt;  &lt;p align="justify"&gt;También es posible tener acceso a cada pixel del mapa de bits.&amp;#160; Para eso está la función &lt;font face="Courier New"&gt;GetPixel()&lt;/font&gt; a la que le paso las coordenadas y devuelve un objeto &lt;font face="Courier New"&gt;Color&lt;/font&gt; con el color que hay en esa posición.&amp;#160; De la misma manera funciona la función (valga la redundancia) &lt;font face="Courier New"&gt;SetPixel()&lt;/font&gt;, solo que éste último establece un color, lo “pinta” del color que quieres.&amp;#160; Por ejemplo, supongamos que quiero que un mapa de bits se vea como recién sacado de la &lt;a href="http://es.wikipedia.org/wiki/Matrix" target="_blank"&gt;Matrix&lt;/a&gt; (o sea en tono verde), podríamos hacerlo con este código:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;For x = 0 To bmp.Width – 1      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; For y = 0 To bmp.Height – 1       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Dim ColorActual As Color = bmp.GetPixel(x, y)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Dim ColorNuevo As Color = Color.FromArgb(0, ColorActual.G, 0)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; bmp.SetPixel(x, y, ColorNuevo)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Next       &lt;br /&gt;Next&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Solo una cosa que recordar antes de terminar.&amp;#160; Pese a que Visual Basic 2010 tiene muchas funciones para manipular mapas de bits, tiene sus límites.&amp;#160; No es un programa de diseño ni de dibujo. No se compara al &lt;a href="http://tony-valderrama.blogspot.com/search/label/Photoshop" target="_blank"&gt;Photoshop&lt;/a&gt; ni siquiera al &lt;a href="http://www.jergasdehablahispana.org/index.php?pais=m%E9xico&amp;amp;palabra=pinchurriento&amp;amp;tipobusqueda=1" target="_blank"&gt;pinchurriento&lt;/a&gt; Paint que viene con Windows.&amp;#160; Dicho esto, creo que terminé.&lt;/p&gt;  &lt;h2 align="center"&gt;Agradecimientos y referencias&lt;/h2&gt;  &lt;p align="justify"&gt;Imagen de Mario en 8 bits cortesía de &lt;a href="https://www.tandswebdesign.com/blog/2008/07/logo-design-vector-vs-bitmap/" target="_blank"&gt;T&amp;amp;S Web Design&lt;/a&gt;.&amp;#160; Y gran parte de lo que escribí aquí, fue asesorado por este libro:&lt;/p&gt;  &lt;p align="center"&gt;&lt;iframe style="width: 120px; height: 240px" marginheight="0" src="http://rcm.amazon.com/e/cm?t=tonysworld04&amp;amp;o=1&amp;amp;p=8&amp;amp;l=as1&amp;amp;asins=1435458109&amp;amp;ref=tf_til&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" frameborder="0" marginwidth="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37481028-6818973593369232006?l=tony-valderrama.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElTonyYSusOndas/~4/3H257Fs2dRk" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ElTonyYSusOndas/~3/3H257Fs2dRk/bitmaps-y-visual-basic.html</link><author>noreply@blogger.com (Tony Valderrama)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-qUDAtOjFG-c/Tlr-vnsYggI/AAAAAAAACV0/g9WzVdi39Hw/s72-c/super-mario-bros-8bit_thumb.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://tony-valderrama.blogspot.com/2011/08/bitmaps-y-visual-basic.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-37481028.post-6249708727816753145</guid><pubDate>Wed, 24 Aug 2011 15:51:00 +0000</pubDate><atom:updated>2011-08-24T10:51:27.121-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">C++</category><title>Números aleatorios en C++</title><description>&lt;p align="justify"&gt;&lt;a href="http://lh5.ggpht.com/-mHf0mAPCV_4/TlUd8flyi4I/AAAAAAAACVg/kEBUz_Mv4Io/s1600-h/numeros-300x290%25255B3%25255D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 5px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="numeros-300x290" border="0" alt="numeros-300x290" align="left" src="http://lh4.ggpht.com/-RKhS5cEFdAU/TlUd884T_cI/AAAAAAAACVk/PC_jrjHveqo/numeros-300x290_thumb.jpg?imgmax=800" width="154" height="149" /&gt;&lt;/a&gt;Los números aleatorios son de gran importancia en la programación.&amp;#160; Necesitas números aleatorios para hacer girar unos dados, repartir cartas, posicionar enemigos en la pantalla y tal vez hasta controlar sus movimientos.&amp;#160; Sin embargo, crear un algoritmo para generar números aleatorios es todo un problema porque, ¿quién sabe cómo le hace para pensar en un número al azar?&amp;#160; ¿Acaso sigue algunos pasos?&amp;#160; No, es un proceso mental fácil de realizar, pero que no lleva algún procedimiento preciso y esto hace que sea casi imposible hacerlo en la computadora.&amp;#160; Lo más cercano es una función matemática que calcula números al azar.&amp;#160; Aquí voy a presentar un ejemplo que puede ser útil para generar números aleatorios usando funciones de &lt;a href="http://tony-valderrama.blogspot.com/search/label/C%2B%2B" target="_blank"&gt;C++&lt;/a&gt;.&lt;/p&gt;  &lt;p align="justify"&gt;Antes de empezar de lleno, honor a quien honor merece.&amp;#160; Este ejemplo y parte de la explicación es una traducción/adaptación de un artículo que leí en la página de &lt;a href="http://www.daniweb.com/software-development/cpp/threads/1769" target="_blank"&gt;daniweb.com, escrito por un tal Bob&lt;/a&gt; (¿acaso será &lt;a href="http://es.wikipedia.org/wiki/Bob_el_constructor" target="_blank"&gt;el constructor&lt;/a&gt;?&amp;#160; Bueno, mal chiste…).&amp;#160; Voy a ir explicando funciones, constantes y una que otra &lt;a href="http://www.wordreference.com/definicion/moner%C3%ADa" target="_blank"&gt;monería&lt;/a&gt; y &lt;u&gt;al final viene un programa&lt;/u&gt; que ejemplifica su uso.&lt;/p&gt;  &lt;p align="justify"&gt;La funciones que se necesitan para generar números al azar se encuentran en la librería &lt;a href="http://www.cplusplus.com/reference/clibrary/cstdlib/" target="_blank"&gt;&lt;strong&gt;&lt;font face="Courier New"&gt;cstdlib&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;, así que hay que incluirlo al principio del código.&amp;#160; Para generar el número aleatorio se hace uso de la función &lt;a href="http://www.cplusplus.com/reference/clibrary/cstdlib/rand/" target="_blank"&gt;&lt;strong&gt;&lt;font face="Courier New"&gt;rand&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;, misma que genera un número al azar entre 0 y la constante &lt;a href="http://www.cplusplus.com/reference/clibrary/cstdlib/RAND_MAX/" target="_blank"&gt;&lt;strong&gt;&lt;font face="Courier New"&gt;RAND_MAX&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt; (que vale generalmente 32,767 pero puede variar según el compilador de C++ que estés usando).&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://www.cplusplus.com/reference/clibrary/cstdlib/rand/" target="_blank"&gt;&lt;strong&gt;&lt;font face="Courier New"&gt;rand&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt; funciona de maravilla, pero el problema es que cada vez que ejecutes el programa, te va a mostrar exactamente la misma secuencia de números, lo cual puede resultar interesante la primera vez, pero pierde chiste en las ejecuciones subsecuentes del programa.&amp;#160; Para remediar esto, se puede inicializar el generador de números aleatorios con la función &lt;a href="http://www.cplusplus.com/reference/clibrary/cstdlib/srand/" target="_blank"&gt;&lt;font face="Courier New"&gt;srand&lt;/font&gt;&lt;/a&gt;&lt;strong&gt;&lt;/strong&gt;, misma que recibe un número entero que inicia el pseudogenerador de números aleatorios.&amp;#160; Pero si cada vez lo inicializas con el mismo entero, el problema no se quita: sigues generando la misma serie de números.&amp;#160; Lo mejor es usar el reloj del sistema para que te dé la hora actual, lo conviertes a entero y así cada vez es diferente.&amp;#160; Para eso usamos la función &lt;font face="Courier New"&gt;&lt;a href="http://www.cplusplus.com/reference/clibrary/ctime/time/" target="_blank"&gt;time&lt;/a&gt;&lt;/font&gt; que está en la librería &lt;a href="http://www.cplusplus.com/reference/clibrary/ctime/" target="_blank"&gt;&lt;font face="Courier New"&gt;ctime&lt;/font&gt;&lt;/a&gt;.&lt;/p&gt;  &lt;p align="justify"&gt;Una vez resuelto el problema de generar una secuencia de números aleatorios únicos, ahora hay que abordar la manera de generar números en un cierto rango.&amp;#160; La fórmula para hacerlo sería la siguiente:&lt;/p&gt;  &lt;p align="center"&gt;&lt;font face="Courier New"&gt;numero_aleatorio=rango_inferior+int(rango*rand()/(RAND_MAX+1.0))&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;donde &lt;font face="Courier New"&gt;rango_inferior&lt;/font&gt; es el valor mínimo del rango del que se desea un número y &lt;font face="Courier New"&gt;rango&lt;/font&gt; es la diferencia entre el valor mayor y el menor.&amp;#160; Por ejemplo, si quiero generar un número aleatorio entre 6 y 15 y guardarlo en un entero que declaré con el nombre de &lt;font face="Courier New"&gt;X&lt;/font&gt;, la instrucción sería:&lt;/p&gt;  &lt;p align="center"&gt;&lt;font face="Courier New"&gt;X&lt;/font&gt;=&lt;font face="Courier New"&gt;6+int((15-6)*rand()/(RAND_MAX+1.0))&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Creo que con esta explicación ya puedes generar los números aleatorios que necesites para cualquier aplicación.&amp;#160; Aquí les dejo el código fuente de un programa que ejemplifica todo lo anterior.&amp;#160; ¡Hasta la próxima!&lt;/p&gt;  &lt;p align="justify"&gt;(Imagen de los números aleatorios cortesía del blog “&lt;a href="http://laaventuradelasmatematicas.jesussoto.es/2010/12/02/numeros-aleatorios-curiosidades-y-procesos-cuanticos/" target="_blank"&gt;La aventura de las matemáticas&lt;/a&gt;”)&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh3.ggpht.com/-IhdBeM0WZyM/TlUd9I8RgtI/AAAAAAAACVo/JocM6MjDzu0/s1600-h/aleatorio.cpp%25255B4%25255D.png" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="aleatorio.cpp" border="0" alt="aleatorio.cpp" src="http://lh6.ggpht.com/-tZef5tZuLTw/TlUd_FVkL8I/AAAAAAAACVs/3GP-eqpFhnM/aleatorio.cpp_thumb%25255B2%25255D.png?imgmax=800" width="622" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37481028-6249708727816753145?l=tony-valderrama.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElTonyYSusOndas/~4/avsgueU_Q0w" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ElTonyYSusOndas/~3/avsgueU_Q0w/numeros-aleatorios-en-c.html</link><author>noreply@blogger.com (Tony Valderrama)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-RKhS5cEFdAU/TlUd884T_cI/AAAAAAAACVk/PC_jrjHveqo/s72-c/numeros-300x290_thumb.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://tony-valderrama.blogspot.com/2011/08/numeros-aleatorios-en-c.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-37481028.post-1115833825211595562</guid><pubDate>Sat, 13 Aug 2011 16:06:00 +0000</pubDate><atom:updated>2011-08-13T11:06:45.729-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Fotos</category><category domain="http://www.blogger.com/atom/ns#">Univa</category><title>Fotos del semestre Enero-Junio 2011</title><description>&lt;p&gt;Tarde, pero sin sueño.&amp;#160; Les dejo las fotos que nos tomamos en la última semana de clases el semestre pasado.&amp;#160; Les agradezco a todos por aguantarme y por dejar que me divierta en el aula.&lt;/p&gt;  &lt;p&gt;Hagan clic sobre cada foto para verla grande y con mejor resolución.&lt;/p&gt;  &lt;p align="center"&gt;&lt;strong&gt;&lt;font size="4"&gt;2do semestre, grupo B, técnico Comunicación (2B TCM)        &lt;br /&gt;&lt;/font&gt;&lt;/strong&gt;&lt;font size="2"&gt;&lt;em&gt;Materia: TICs II&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh5.ggpht.com/-fjXkHfulXcc/TkXfdplZDpI/AAAAAAAACTU/pq_D-IqTP_s/s1600-h/2B%252520TCM%2525200%25255B4%25255D.jpg" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="2B TCM 0" border="0" alt="2B TCM 0" src="http://lh4.ggpht.com/-j2WjXrLTXdk/TkXfeNT-ZoI/AAAAAAAACTY/PtpHEGFTtfQ/2B%252520TCM%2525200_thumb%25255B1%25255D.jpg?imgmax=800" width="184" height="244" /&gt;&lt;/a&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://lh4.ggpht.com/-wR9WCsgLg7Y/TkXf_nMIyOI/AAAAAAAACTc/_hRUHrRXAG8/s1600-h/2B%252520TCM%25255B4%25255D.jpg" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="2B TCM" border="0" alt="2B TCM" src="http://lh3.ggpht.com/-XD8cFxYvp2g/TkXgAbSoQlI/AAAAAAAACTk/hZWW9fiG0-A/2B%252520TCM_thumb%25255B1%25255D.jpg?imgmax=800" width="184" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;strong&gt;&lt;font size="4"&gt;2do semestre, grupo C, técnico Comunicación (2C TCM)        &lt;br /&gt;&lt;/font&gt;&lt;/strong&gt;&lt;font size="2"&gt;&lt;em&gt;Materia: TICs II&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh6.ggpht.com/-w-R4Is8egvg/TkXgUzAt3lI/AAAAAAAACTo/-SjH8UxXvL4/s1600-h/2C%252520TCM%25255B4%25255D.jpg" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="2C TCM" border="0" alt="2C TCM" src="http://lh3.ggpht.com/-djXZSlo3Iog/TkXgVkob92I/AAAAAAAACTs/j9LnA3rMO8E/2C%252520TCM_thumb%25255B1%25255D.jpg?imgmax=800" width="244" height="184" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;strong&gt;&lt;font size="4"&gt;2do semestre, técnico Programador (2 TPO)        &lt;br /&gt;&lt;/font&gt;&lt;/strong&gt;&lt;font size="2"&gt;&lt;em&gt;Materia: Software de Aplicación&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;em&gt;&lt;font size="2"&gt;&lt;a href="http://lh5.ggpht.com/-Bw6R2TCRKlw/TkadWdO5R6I/AAAAAAAACUc/MCxbvMWX93Y/s1600-h/2-TPO4.jpg" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="2 TPO" border="0" alt="2 TPO" src="http://lh6.ggpht.com/-dWGRPl3p1Ew/TkadXqrly-I/AAAAAAAACUk/IK1Dr6ayYWQ/2-TPO_thumb1.jpg?imgmax=800" width="244" height="184" /&gt;&lt;/a&gt;&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;strong&gt;&lt;font size="4"&gt;4to semestre, técnico Programador (4 TPO)        &lt;br /&gt;&lt;/font&gt;&lt;/strong&gt;&lt;font size="2"&gt;&lt;em&gt;Materia: Bases de Datos y Lenguaje C&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;em&gt;&lt;font size="2"&gt;&lt;a href="http://lh4.ggpht.com/-4DmuM1h6cm8/TkaeJiXfQII/AAAAAAAACUs/IilQJaXAnG4/s1600-h/4-TPO4.jpg" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="4 TPO" border="0" alt="4 TPO" src="http://lh4.ggpht.com/-StdvAHgCI9o/TkaeKh2_LoI/AAAAAAAACUw/sqSl9zQp5_c/4-TPO_thumb1.jpg?imgmax=800" width="244" height="184" /&gt;&lt;/a&gt;&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;strong&gt;&lt;font size="4"&gt;6to semestre, técnico Informática Administrativa (6 TIA)        &lt;br /&gt;&lt;/font&gt;&lt;/strong&gt;&lt;font size="2"&gt;&lt;em&gt;Materia: Aplicaciones para Internet&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;em&gt;&lt;font size="2"&gt;&lt;a href="http://lh6.ggpht.com/-bew_WDcEXTs/TkafGPBD4jI/AAAAAAAACU0/l3NA1TPbCiw/s1600-h/6-TIA4.jpg" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="6 TIA" border="0" alt="6 TIA" src="http://lh3.ggpht.com/-YF2eK_Y7pFo/TkafHXP7yDI/AAAAAAAACU8/MEoroq7soRE/6-TIA_thumb1.jpg?imgmax=800" width="244" height="184" /&gt;&lt;/a&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://lh3.ggpht.com/-nMURxEWgqpw/TkagDKs0dWI/AAAAAAAACVA/wC8kxfLhGfo/s1600-h/6-TIA-04.jpg" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="6 TIA 0" border="0" alt="6 TIA 0" src="http://lh3.ggpht.com/-NNXG9Klv65I/TkagEH9QjoI/AAAAAAAACVE/6rV0WnomGkQ/6-TIA-0_thumb1.jpg?imgmax=800" width="244" height="184" /&gt;&lt;/a&gt;&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;strong&gt;&lt;font size="4"&gt;6to semestre, técnico Programador (6 TPO)        &lt;br /&gt;&lt;/font&gt;&lt;/strong&gt;&lt;font size="2"&gt;&lt;em&gt;Materia: TICs II&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;em&gt;&lt;font size="2"&gt;&lt;a href="http://lh6.ggpht.com/-mwZTIHUQMbg/TkahD5UcWTI/AAAAAAAACVI/SW8txbQU8wE/s1600-h/6-TPO4.jpg" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="6 TPO" border="0" alt="6 TPO" src="http://lh5.ggpht.com/-xEk3QtKor3I/TkahFOiyRWI/AAAAAAAACVQ/Y9qkLgBmL28/6-TPO_thumb1.jpg?imgmax=800" width="244" height="184" /&gt;&lt;/a&gt;&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37481028-1115833825211595562?l=tony-valderrama.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElTonyYSusOndas/~4/2GGN4uxqWYU" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ElTonyYSusOndas/~3/2GGN4uxqWYU/fotos-del-semestre-enero-junio-2011.html</link><author>noreply@blogger.com (Tony Valderrama)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-j2WjXrLTXdk/TkXfeNT-ZoI/AAAAAAAACTY/PtpHEGFTtfQ/s72-c/2B%252520TCM%2525200_thumb%25255B1%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://tony-valderrama.blogspot.com/2011/08/fotos-del-semestre-enero-junio-2011.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-37481028.post-2593961839489919050</guid><pubDate>Sat, 13 Aug 2011 02:00:00 +0000</pubDate><atom:updated>2011-08-12T21:00:02.656-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Sistemas Operativos</category><title>Historia de los Sistemas Operativos</title><description>&lt;p&gt;Hoy me topé con esta &lt;a href="http://es.wikipedia.org/wiki/Infograf%C3%ADa" target="_blank"&gt;infografía&lt;/a&gt; que me pareció padrísimo para explicar como han cambiado los &lt;a href="http://tony-valderrama.blogspot.com/search/label/Sistemas%20Operativos" target="_blank"&gt;sistemas operativos&lt;/a&gt; de las computadoras.&amp;#160; Aquí se los comparto (haz clic sobre la imagen para verlo en su tamaño real).&amp;#160; Es cortesía del blog &lt;a href="http://feedproxy.google.com/~r/feedconectica/~3/tc0YO7k48dY/" target="_blank"&gt;conecti.ca&lt;/a&gt;, quien a su vez lo tomó del blog de &lt;a href="http://www.makeuseof.com/tag/history-operating-systems-infographic/" target="_blank"&gt;MakeUseOf&lt;/a&gt;.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh5.ggpht.com/-GxhDAN2tQmQ/TkXan45QQMI/AAAAAAAACTM/2jW8Uu6bhe8/s1600-h/muo-history-operating-systems5.jpg" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="muo-history-operating-systems" border="0" alt="muo-history-operating-systems" src="http://lh3.ggpht.com/-ek22UkPlQXI/TkXaorXr-CI/AAAAAAAACTQ/d65uQN_gND8/muo-history-operating-systems_thumb3.jpg?imgmax=800" width="152" height="772" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37481028-2593961839489919050?l=tony-valderrama.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElTonyYSusOndas/~4/Qck9hO3MfII" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ElTonyYSusOndas/~3/Qck9hO3MfII/historia-de-los-sistemas-operativos.html</link><author>noreply@blogger.com (Tony Valderrama)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-ek22UkPlQXI/TkXaorXr-CI/AAAAAAAACTQ/d65uQN_gND8/s72-c/muo-history-operating-systems_thumb3.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://tony-valderrama.blogspot.com/2011/08/historia-de-los-sistemas-operativos.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-37481028.post-3752996565541167480</guid><pubDate>Tue, 02 Aug 2011 06:28:00 +0000</pubDate><atom:updated>2011-08-02T02:09:11.281-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Univa</category><category domain="http://www.blogger.com/atom/ns#">Avisos de ocasión</category><category domain="http://www.blogger.com/atom/ns#">Videojuegos</category><category domain="http://www.blogger.com/atom/ns#">Tecnología Educativa</category><title>Presentación de Videojuegos y Educación en la Univa</title><description>&lt;p&gt;&lt;a href="http://lh5.ggpht.com/-Fj5dL8LDzUY/TjeZDHfN75I/AAAAAAAACTA/TYnl9GIOcg4/s1600-h/videojuegosparatodos%25255B5%25255D.jpg" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 10px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="videojuegosparatodos" border="0" alt="videojuegosparatodos" align="left" src="http://lh6.ggpht.com/-edtQbJ9_3l0/TjeZD0TbY6I/AAAAAAAACTE/il-o2WSYkT8/videojuegosparatodos_thumb%25255B3%25255D.jpg?imgmax=800" width="126" height="244" /&gt;&lt;/a&gt;Aunque es un poco tarde para contarles, estaré presentando algunos resultados de mi tesis de maestría en la preparatoria &lt;a href="http://prepa.univa.mx" target="_blank"&gt;Univa&lt;/a&gt; el día de hoy (2/Ago/2011) alrededor de la 1pm (el coloquio de investigación comienza a las 12pm, pero soy el último).&amp;#160; Si puedes, allí te espero.&lt;/p&gt;  &lt;p&gt;No es mi examen recepcional (aún) y va más enfocada a la educación que a la comunicación (cosa que reservo para mi titulación del a maestría).&amp;#160; Seguramente volarán muchas piedras… espero que no te caiga ninguno.&lt;/p&gt;  &lt;p&gt;¡Allá los espero!&lt;/p&gt;  &lt;p&gt;También les dejo hasta abajo el &lt;a href="http://prezi.com/ut0itkjzkdgj/educacion-y-videojuegos-presentacion-univa/" target="_blank"&gt;Prezi&lt;/a&gt; que voy a usar, por si lo quieren ver.&amp;#160; Claro que falta todo el choro que voy a decir en el coloquio, pero te puede dar una idea de lo que voy a hablar.&lt;/p&gt;  &lt;p&gt;(Imagen cortesía de &lt;a href="http://www.cinismoilustrado.com/2011/07/videojuegos-para-todos.html" target="_blank"&gt;CinismoIlustrado&lt;/a&gt;).&lt;/p&gt;  &lt;div class="prezi-player"&gt;&lt;style type="text/css" media="screen"&gt;
.prezi-player { width: 550px; } .prezi-player-links { text-align: center; }&lt;/style&gt;&lt;object id="prezi_ut0itkjzkdgj" name="prezi_ut0itkjzkdgj" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="550" height="400"&gt;&lt;param name="movie" value="http://prezi.com/bin/preziloader.swf" /&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="bgcolor" value="#ffffff" /&gt;&lt;param name="flashvars" value="prezi_id=ut0itkjzkdgj&amp;amp;lock_to_path=0&amp;amp;color=ffffff&amp;amp;autoplay=no&amp;amp;autohide_ctrls=0" /&gt;&lt;embed id="preziEmbed_ut0itkjzkdgj" name="preziEmbed_ut0itkjzkdgj" src="http://prezi.com/bin/preziloader.swf" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="550" height="400" bgcolor="#ffffff" flashvars="prezi_id=ut0itkjzkdgj&amp;amp;lock_to_path=0&amp;amp;color=ffffff&amp;amp;autoplay=no&amp;amp;autohide_ctrls=0"&gt;&lt;/embed&gt;&lt;/object&gt;    &lt;div class="prezi-player-links"&gt;     &lt;p&gt;&lt;a title="&amp;#10;                            &amp;#10;                            Presentación de los resultados de mi tesis en la prepa Univa. Resalta el aspecto educativo, más que el comunicacional.&amp;#10;                            &amp;#10;                        " href="http://prezi.com/ut0itkjzkdgj/educacion-y-videojuegos-presentacion-univa/"&gt;Educación y Videojuegos - Presentación Univa&lt;/a&gt; on &lt;a href="http://prezi.com"&gt;Prezi&lt;/a&gt;&lt;/p&gt;   &lt;/div&gt; &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37481028-3752996565541167480?l=tony-valderrama.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElTonyYSusOndas/~4/6Z1WqVexjnY" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ElTonyYSusOndas/~3/6Z1WqVexjnY/presentacion-de-videojuegos-y-educacion.html</link><author>noreply@blogger.com (Tony Valderrama)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-edtQbJ9_3l0/TjeZD0TbY6I/AAAAAAAACTE/il-o2WSYkT8/s72-c/videojuegosparatodos_thumb%25255B3%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://tony-valderrama.blogspot.com/2011/08/presentacion-de-videojuegos-y-educacion.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-37481028.post-8400136659920559285</guid><pubDate>Tue, 31 May 2011 23:27:00 +0000</pubDate><atom:updated>2011-09-30T23:48:51.166-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">C</category><category domain="http://www.blogger.com/atom/ns#">C++</category><title>Listas Simplemente Ligadas</title><description>&lt;div align="justify"&gt;
Las listas simplemente ligadas son una estructura de datos que nos permite almacenar cualquier cantidad de datos.&amp;nbsp; La ventaja principal es que la memoria que ocupa es solamente la necesaria a diferencia de un &lt;a href="http://tony-valderrama.blogspot.com/2009/07/arreglos-en-c-y-c.html" target="_blank"&gt;arreglo&lt;/a&gt; que puede desperdiciar memoria que no está en uso (como la memoria que se desperdicia con los &lt;a href="http://tony-valderrama.blogspot.com/2009/07/arreglos-en-c-y-c.html" target="_blank"&gt;arreglos&lt;/a&gt;: generalmente declaras un arreglo del tamaño máximo que se podría llegar a usar aunque muchas veces no se llena).&lt;/div&gt;
&lt;div align="justify"&gt;
La lista simplemente ligada puede ser usada para crear estructuras de datos más complejos.&amp;nbsp; Consiste en una secuencia de nodos, donde cada nodo contiene información y un &lt;a href="http://tony-valderrama.blogspot.com/2009/10/apuntadores-en-c-pa-onde-apunto.html" target="_blank"&gt;apuntador&lt;/a&gt; al nodo que sigue.&amp;nbsp; El último nodo &lt;a href="http://tony-valderrama.blogspot.com/2009/10/apuntadores-en-c-pa-onde-apunto.html" target="_blank"&gt;apunta&lt;/a&gt; a un valor nulo (NULL) lo cual indica que es el final de la lista.&amp;nbsp; De esta manera se puede recorrer la lista de forma secuencial siempre y cuando tengas un &lt;a href="http://tony-valderrama.blogspot.com/2009/10/apuntadores-en-c-pa-onde-apunto.html" target="_blank"&gt;apuntador&lt;/a&gt; al primer elemento de la lista, como se ve la siguiente imagen (tomada del blog de &lt;a href="http://xromsystem.net/?p=206" target="_blank"&gt;xrom&lt;/a&gt;):&lt;/div&gt;
&lt;div align="center"&gt;
&lt;a href="http://lh6.ggpht.com/-9KycNQQtq9o/TeV5Mn9W28I/AAAAAAAACRc/QMYVJQXiK24/s1600-h/lista%25255B4%25255D.png"&gt;&lt;img alt="lista" border="0" height="182" src="http://lh3.ggpht.com/-2NeQFbcR5Ag/TeV5NHsBkwI/AAAAAAAACRg/C7M-gaGmjPk/lista_thumb%25255B2%25255D.png?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="lista" width="244" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div align="justify"&gt;
O, si quieres, puedes conceptualizarlo como un tren de vagones donde el tienes un apuntador a la locomotora y el apuntador al siguiente que hay en cada nodo es el mecanismo con el que se engancha al vagón que le sigue (Imagen cortesía de &lt;a href="http://medieducativos.com/mostrar-productos.php?id_category=0&amp;amp;pageNum_SelectedAllProductsSet=136&amp;amp;search=" target="_blank"&gt;Medieducativos&lt;/a&gt;):&lt;/div&gt;
&lt;div align="center"&gt;
&lt;a href="http://lh5.ggpht.com/-pT4GQubvZt0/TeV5ONTbZjI/AAAAAAAACRk/Ws0bzldHBUE/s1600-h/t106-tren-cuatro-vagones%25255B5%25255D.jpg"&gt;&lt;img alt="t106-tren-cuatro-vagones" border="0" height="133" src="http://lh6.ggpht.com/-Ba_VbeSjB6A/TeV5OnsCfSI/AAAAAAAACRo/7wozOboRWJA/t106-tren-cuatro-vagones_thumb%25255B3%25255D.jpg?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="t106-tren-cuatro-vagones" width="244" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div align="justify"&gt;
En este post me voy a enfocar en 3 cosas: agregar un nuevo nodo a la lista (al final), mostrar todos los nodos (recorrerlo) y eliminar un nodo de la lista.&amp;nbsp; Antes de entrar a estos temas, hay que ver como se declara la estructura y la forma en que se usa.&amp;nbsp; En este ejemplo, estoy haciendo una lista que guarda algunos datos de &lt;a href="http://tony-valderrama.blogspot.com/search/label/Videojuegos" target="_blank"&gt;videojuegos&lt;/a&gt;.&amp;nbsp; Aquí está la declaración de la estructura y una variable global que &lt;a href="http://tony-valderrama.blogspot.com/2009/10/apuntadores-en-c-pa-onde-apunto.html" target="_blank"&gt;apunta&lt;/a&gt; al primer nodo de la lista:&lt;/div&gt;
&lt;div align="center"&gt;
&lt;a href="http://lh4.ggpht.com/-KdzuyuKZ6qw/TeV5PFFi5NI/AAAAAAAACRs/TngK7gn_4nE/s1600-h/LSL-01%25255B3%25255D.png"&gt;&lt;img alt="LSL-01" border="0" height="124" src="http://lh5.ggpht.com/-N2Zh_AI1BkY/TeV5Phix0uI/AAAAAAAACRw/ZStqzVqfawY/LSL-01_thumb%25255B1%25255D.png?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="LSL-01" width="287" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div align="justify"&gt;
La función principal del programa (&lt;span style="font-family: Courier New;"&gt;main&lt;/span&gt;) no tiene mayor ciencia.&amp;nbsp; Básicamente solo muestra un menú y pide una opción.&amp;nbsp; En base a la opción deseada manda llamar funciones para dar de alta, consultar todos o eliminar alguno.&amp;nbsp;&amp;nbsp; Una nota antes de seguir: este programa lo hice usando el compilador &lt;a href="http://www.bloodshed.net/devcpp.html" target="_blank"&gt;Dev-C++&lt;/a&gt; varsión 4.9.9.2.&amp;nbsp; Este es el código (haz clic sobre la imagen para verlo más grande):&lt;/div&gt;
&lt;div align="center"&gt;
&lt;a href="http://lh4.ggpht.com/-MV4qSerrVNw/TeV5S06LgnI/AAAAAAAACR0/q8fFJ9ZXvwU/s1600-h/LSL-02%25255B6%25255D.png"&gt;&lt;img alt="LSL-02" border="0" height="541" src="http://lh5.ggpht.com/-861niwOl9fQ/TeV5VXsqIiI/AAAAAAAACR4/drHQHpWsJHM/LSL-02_thumb%25255B4%25255D.png?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="LSL-02" width="442" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div align="justify"&gt;
Voy a comenzar hablando de la función que da de alta un nodo al final de la lista.&amp;nbsp; Primero declaro dos apuntadores a &lt;span style="font-family: Courier New;"&gt;struct nodo&lt;/span&gt;: &lt;span style="font-family: Courier New;"&gt;Temp&lt;/span&gt; y &lt;span style="font-family: Courier New;"&gt;Temp2&lt;/span&gt;.&amp;nbsp; Uso la función &lt;span style="font-family: Courier New;"&gt;malloc&lt;/span&gt; para apartar RAM para almacenar la estructura de forma dinámica.&amp;nbsp; Si necesitas saber más sobre el &lt;span style="font-family: Courier New;"&gt;malloc&lt;/span&gt;, al final de este post hay ligas a páginas que son referencias para que despejes dudas sobre su sintaxis y función.&amp;nbsp; Pero a grandes rasgos, el &lt;span style="font-family: Courier New;"&gt;malloc&lt;/span&gt; sirve para asignarle memoria y devolver un &lt;a href="http://tony-valderrama.blogspot.com/2009/10/apuntadores-en-c-pa-onde-apunto.html" target="_blank"&gt;apuntador&lt;/a&gt; hacia el espacio reservado.&amp;nbsp; Una vez apartada la memoria, lleno el nuevo nodo con los datos (que son los parámetros &lt;span style="font-family: Courier New;"&gt;nom&lt;/span&gt;, &lt;span style="font-family: Courier New;"&gt;plat&lt;/span&gt; y &lt;span style="font-family: Courier New;"&gt;pre&lt;/span&gt;) y al campo &lt;span style="font-family: Courier New;"&gt;Sig&lt;/span&gt; le asigno el valor de &lt;span style="font-family: Courier New;"&gt;NULL&lt;/span&gt; porque va a ser el último de la lista.&amp;nbsp; Al final debo reorganizar los apuntadores: el apuntador &lt;span style="font-family: Courier New;"&gt;Sig&lt;/span&gt; del elemento anterior debe apuntar a este nuevo nodo.&amp;nbsp; El código que lo realiza es el siguiente:&lt;/div&gt;
&lt;div align="center"&gt;
&lt;a href="http://lh6.ggpht.com/-tREV6D4BhpA/TeV5VyjFFII/AAAAAAAACR8/ZWHK9Y0W9u4/s1600-h/LSL-03%25255B4%25255D.png"&gt;&lt;img alt="LSL-03" border="0" height="253" src="http://lh4.ggpht.com/-2-h-0-2RxGo/TeV5XIeabNI/AAAAAAAACSA/vGg4FJTQkwU/LSL-03_thumb%25255B2%25255D.png?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="LSL-03" width="436" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div align="justify"&gt;
Una vez resuelto el problema de dar de alta nodos, voy a explicar la forma en que se puede recorrer la lista y mostrar los elementos.&amp;nbsp; Esto lo hice en la función llamada &lt;span style="font-family: Courier New;"&gt;MuestraTodo&lt;/span&gt;.&amp;nbsp; Declaro un apuntador llamado &lt;span style="font-family: Courier New;"&gt;Temp&lt;/span&gt; (para no perder la costumbre, jeje) con el que voy a recorrer la lista.&amp;nbsp; Uso la variable &lt;span style="font-family: Courier New;"&gt;i&lt;/span&gt; para mostrar el número de nodo en el que voy.&amp;nbsp; Al principio igualo &lt;span style="font-family: Courier New;"&gt;Temp&lt;/span&gt; a &lt;span style="font-family: Courier New;"&gt;Inicio&lt;/span&gt;&amp;nbsp; para comenzar el recorrido.&amp;nbsp; Y mientras no llego al final (o sea, &lt;span style="font-family: Courier New;"&gt;Temp&lt;/span&gt; es diferente de &lt;span style="font-family: Courier New;"&gt;NULL&lt;/span&gt;), muestro lo que contiene el nodo.&amp;nbsp; Fíjate como se accesa un elemento por medio de un apuntador ya que difiere de la forma en que se hace cuando no usas apuntador.&amp;nbsp; En lugar del punto (&lt;span style="font-family: Courier New;"&gt;.&lt;/span&gt;), se usa una especie de flecha compuesta por el guión y el signo mayor que (&lt;span style="font-family: Courier New;"&gt;-&amp;gt;&lt;/span&gt;).&amp;nbsp; Aquí está el código:&lt;/div&gt;
&lt;div align="center"&gt;
&lt;a href="http://lh3.ggpht.com/-BKWVwBzs8EA/TeV5Xm83OKI/AAAAAAAACSE/yPG3Y2ePppg/s1600-h/LSL-04%25255B3%25255D.png"&gt;&lt;img alt="LSL-04" border="0" height="220" src="http://lh3.ggpht.com/-wPMzaBrOqSE/TeV5YrcTTsI/AAAAAAAACSI/HMwf4JVW90Y/LSL-04_thumb%25255B1%25255D.png?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="LSL-04" width="450" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div align="justify"&gt;
Ahora lo&amp;nbsp; único que falta es mostrar la función que elimina un nodo de la lista.&amp;nbsp; Esto es relativamente sencillo y creo que el código se explica por si solo (le puse un montón de comentarios).&amp;nbsp; Básicamente es igual que la función &lt;span style="font-family: Courier New;"&gt;MuestraTodo&lt;/span&gt; solo que esta vez, en lugar de mostrar el elemento, veo si es igual al que busco.&amp;nbsp; En caso que sea igual, veo si es el primero de la lista.&amp;nbsp; Si es el primero, solo cambio el valor de &lt;span style="font-family: Courier New;"&gt;Inicio&lt;/span&gt; para que apunte al siguiente, y en caso contrario, modifico el apuntador &lt;span style="font-family: Courier New;"&gt;Sig&lt;/span&gt; del elemento anterior (convenientemente apuntado por &lt;span style="font-family: Courier New;"&gt;Anterior&lt;/span&gt;) para que apunte al que sigue.&amp;nbsp; Una vez arreglado los apuntadores, libero la memoria usando la instrucción &lt;span style="font-family: Courier New;"&gt;free&lt;/span&gt;.&amp;nbsp; Al final viene más ayuda sobre &lt;span style="font-family: Courier New;"&gt;free&lt;/span&gt;, pero básicamente libera la memoria que es apuntada por un apuntador (valga la redundancia).&amp;nbsp; Al final devuelve un 1 si lo encontró y lo pudo borrar y un 0 si no lo encuentra.&amp;nbsp; Este es el código de la función &lt;span style="font-family: Courier New;"&gt;Eliminalo&lt;/span&gt;:&lt;/div&gt;
&lt;div align="center"&gt;
&lt;a href="http://lh3.ggpht.com/-tq-4l5ub_jc/TeV5Zcz8XoI/AAAAAAAACSM/iI-hgUtdIcM/s1600-h/LSL-05%25255B3%25255D.png"&gt;&lt;img alt="LSL-05" border="0" height="371" src="http://lh4.ggpht.com/-O4XZxOolvBU/TeV5biVgrII/AAAAAAAACSQ/ORaTBIugUx8/LSL-05_thumb%25255B1%25255D.png?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="LSL-05" width="458" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div align="justify"&gt;
Estas son ligas donde puedes encontrar más información sobre &lt;span style="font-family: Courier New;"&gt;malloc&lt;/span&gt; y &lt;span style="font-family: Courier New;"&gt;free&lt;/span&gt; (y algunas otras funciones que te pueden resultar muy útiles).&amp;nbsp; ¡Hasta la próxima!&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;     &lt;div align="justify"&gt;
&lt;span style="font-family: Courier New;"&gt;malloc&lt;/span&gt; – &lt;a href="http://c.conclase.net/librerias/?ansifun=malloc" target="_blank"&gt;C con clase&lt;/a&gt; o &lt;a href="http://es.wikipedia.org/wiki/Malloc" target="_blank"&gt;Wikipedia&lt;/a&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;     &lt;div align="justify"&gt;
&lt;span style="font-family: Courier New;"&gt;free&lt;/span&gt; – &lt;a href="http://c.conclase.net/librerias/?ansifun=free#inicio" target="_blank"&gt;C con clase&lt;/a&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;     &lt;div align="justify"&gt;
Otros recursos sobre listas simplemente ligadas: &lt;a href="http://es.wikipedia.org/wiki/Lista_%28inform%C3%A1tica%29" target="_blank"&gt;todo tipo de listas en Wikipedia&lt;/a&gt; y este &lt;a href="http://computacion.cs.cinvestav.mx/%7Eacaceres/courses/estDatosCPP/node43.html" target="_blank"&gt;excelente recurso sobre listas del Cinvestav&lt;/a&gt; (ojo: allí hay ligas para ver agregar y eliminar nodos).&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37481028-8400136659920559285?l=tony-valderrama.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElTonyYSusOndas/~4/a9CsGSsrzgI" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ElTonyYSusOndas/~3/a9CsGSsrzgI/listas-simplemente-ligadas.html</link><author>noreply@blogger.com (Tony Valderrama)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-2NeQFbcR5Ag/TeV5NHsBkwI/AAAAAAAACRg/C7M-gaGmjPk/s72-c/lista_thumb%25255B2%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://tony-valderrama.blogspot.com/2011/05/listas-simplemente-ligadas.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-37481028.post-5729249112934283002</guid><pubDate>Fri, 27 May 2011 19:58:00 +0000</pubDate><atom:updated>2011-05-27T14:58:00.396-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Virus</category><category domain="http://www.blogger.com/atom/ns#">Software</category><title>Protégete de los virus que están en tu memoria USB</title><description>&lt;p align="justify"&gt;&lt;a href="http://lh3.ggpht.com/-ePfB0LiDFNI/TeACRA_S-aI/AAAAAAAACRU/e5WOX-RbQ8E/s1600-h/bitdefender-usb-immunizer3.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 5px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="bitdefender-usb-immunizer" border="0" alt="bitdefender-usb-immunizer" align="left" src="http://lh6.ggpht.com/-TSeh-wvwYAU/TeACR6OC7_I/AAAAAAAACRY/Lz0DsyU-M10/bitdefender-usb-immunizer_thumb.jpg?imgmax=800" width="244" height="162" /&gt;&lt;/a&gt;Hace rato leí en el blog de &lt;a href="http://www.nirmaltv.com/2011/04/28/immunize-usb-against-autorun-based-malware-using-bitdefender-usb-immunizer" target="_blank"&gt;MakeUseOf&lt;/a&gt; acerca de un programa de BitDefender que protege tu computadora de los virus que se tratan de autoejecutar desde tu memoria USB.&amp;#160; Este funciona contra los virus que se extienden por medio del &lt;font face="Courier New"&gt;autorun.inf&lt;/font&gt;.&amp;#160; Éste es un archivo que se hizo con la finalidad de hacer más sencillo la ejecución de programas para usuarios novatos al especificar qué archivo se debía ejecutar al insertar un CDE a la computadora (generalmente un archivo que instala el programa).&amp;#160; Desgraciadamente los creadores de &lt;a href="http://tony-valderrama.blogspot.com/search/label/Virus" target="_blank"&gt;virus&lt;/a&gt; se han aprovechado de esto para poner código dañino que se ejecute al momento de insertar la memoria USB en la computadora.&amp;#160; Muchas veces no te das cuenta que ese archivo está allí porque lo dejan oculto.&lt;/p&gt;  &lt;p align="justify"&gt;BitDefender hizo un programa que crea un archivo &lt;font face="Courier New"&gt;autorun.inf&lt;/font&gt; que no se puede eliminar por un virus.&amp;#160; Así, si tu memoria se infecta, no puede ejecutar el código malicioso de forma automática.&amp;#160; También te da la opción de eliminar la ejecución de este tipo de archivos en tu computadora para que solo ejecute los que vienen en un CD o DVD, pero no de memoria USB.&lt;/p&gt;  &lt;p align="justify"&gt;Aunque no es la solución a todos los males virales, puede ayudar a detener la propagación.&amp;#160; El programa lo puedes descargar &lt;a href="http://labs.bitdefender.com/?page_id=108" target="_blank"&gt;aquí&lt;/a&gt;.&amp;#160; ¡Saludos!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37481028-5729249112934283002?l=tony-valderrama.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElTonyYSusOndas/~4/Ds-CT4J3iDQ" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ElTonyYSusOndas/~3/Ds-CT4J3iDQ/protegete-de-los-virus-que-estan-en-tu.html</link><author>noreply@blogger.com (Tony Valderrama)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-TSeh-wvwYAU/TeACR6OC7_I/AAAAAAAACRY/Lz0DsyU-M10/s72-c/bitdefender-usb-immunizer_thumb.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://tony-valderrama.blogspot.com/2011/05/protegete-de-los-virus-que-estan-en-tu.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-37481028.post-6387322097516859925</guid><pubDate>Fri, 20 May 2011 23:03:00 +0000</pubDate><atom:updated>2011-05-20T18:04:37.763-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Sitios Güev</category><category domain="http://www.blogger.com/atom/ns#">TICs</category><title>Los Wikis: una introducción</title><description>&lt;p align="justify"&gt;¿Qué se te viene a la mente cuando escuchas la palabra Wiki?&amp;#160; Probablemente una de las primeras palabras que se te vienen a la mente es &lt;a href="http://es.wikipedia.org" target="_blank"&gt;Wikipedia&lt;/a&gt;.&amp;#160; Y tienes algo de razón, porque &lt;a href="http://es.wikipedia.org/" target="_blank"&gt;Wikipedia&lt;/a&gt; es el wiki más grande hasta el momento (detalle chistoso, según algunos el segundo wiki más grande es acerca de &lt;a href="http://es.wikipedia.org/wiki/World_of_Warcraft" target="_blank"&gt;World of Warcraft&lt;/a&gt; y lo puedes visitar &lt;a href="http://www.wowwiki.com/Portal:Main" target="_blank"&gt;aquí&lt;/a&gt;).&lt;/p&gt;  &lt;p align="justify"&gt;Voy a aprovechar la experiencia depositada en &lt;a href="http://es.wikipedia.org" target="_blank"&gt;Wikipedia&lt;/a&gt; para que nos ayude a esclarecer lo que es un wiki.&amp;#160; Según ésta, un wiki es “&lt;em&gt;un sitio web cuyas páginas pueden ser modificadas por múltiples voluntarios a través del navegador web.&amp;#160; Los usuarios pueden crear, modificar o borrar un mismo texto que comparten&lt;/em&gt;.” (esta definición la leí &lt;a href="http://es.wikipedia.org/wiki/Wiki" target="_blank"&gt;aquí&lt;/a&gt;).&lt;/p&gt;  &lt;p align="justify"&gt;Soy fan de los videos del CommonCraft Show (como mis alumnos lo pueden atestiguar) porque de forma muy sencilla explican diferentes cosas en su serie “in plain english”.&amp;#160; Encontré doblado el video &lt;a href="http://www.youtube.com/watch?v=-dnL00TdmLY" target="_blank"&gt;Wikis in Plain English&lt;/a&gt; que te comparto aquí.&amp;#160; Muestra la forma en que un wiki resulta muy útil.&amp;#160; Espero que resulte &lt;a href="http://www.wordreference.com/definicion/esclarecedor" target="_blank"&gt;esclarecedor&lt;/a&gt;.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; padding-left: 0px; width: 448px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:85a6d35d-acdb-43e9-ad32-7b679740b051" class="wlWriterEditableSmartContent"&gt;&lt;div id="389b944e-7218-4f18-9140-1d8a61dac077" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=jIgk8v74IZg" target="_new"&gt;&lt;img src="http://lh5.ggpht.com/_y_99ub2wm3Y/TdbzSu2YAGI/AAAAAAAACRE/Mt_wKX20nWY/video66c61037aba1%5B14%5D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('389b944e-7218-4f18-9140-1d8a61dac077'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;448\&amp;quot; height=\&amp;quot;252\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/jIgk8v74IZg?hl=en&amp;amp;hd=1\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/jIgk8v74IZg?hl=en&amp;amp;hd=1\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;448\&amp;quot; height=\&amp;quot;252\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt=""&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="width:448px;clear:both;font-size:.8em"&gt;Wikis in Plain English, doblado por Ludo.&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Además de lo que se expuso en el video, es una forma excelente de resumir conocimientos acerca de cualquier tema.&amp;#160; Por ejemplo, un maestro podría dejar que sus queridos alumnos hicieran un wiki con el material que cubren durante el curso.&lt;/p&gt;  &lt;p&gt;Ahora, ya sabes lo que es un wiki.&amp;#160; La siguiente pregunta sería, ¿y cómo creo uno?&amp;#160; Aunque hay varios sitios para crear wikis, uno de los más sencillos es &lt;a href="http://www.wikispaces.com" target="_blank"&gt;wikispaces.com&lt;/a&gt;.&amp;#160; Para ilustrar el proceso, hice el siguiente video.&amp;#160; Espero que les sea de utilidad.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px auto; padding-left: 0px; width: 448px; padding-right: 0px; display: block; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:e29c6bac-421b-4a2a-8c9b-3f9da83f2534" class="wlWriterEditableSmartContent"&gt;&lt;div id="4d555083-cd5d-4560-9d17-a085ac49659f" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=SYG0QZtJnqk" target="_new"&gt;&lt;img src="http://lh6.ggpht.com/_y_99ub2wm3Y/TdbzT7iARnI/AAAAAAAACRI/VxKlFhkmFRM/video405d71cf5fc9%5B11%5D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('4d555083-cd5d-4560-9d17-a085ac49659f'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;448\&amp;quot; height=\&amp;quot;252\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/SYG0QZtJnqk?hl=en&amp;amp;hd=1\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/SYG0QZtJnqk?hl=en&amp;amp;hd=1\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;448\&amp;quot; height=\&amp;quot;252\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt=""&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="width:448px;clear:both;font-size:.8em"&gt;Mi video acerca de la creación de Wikis usando wikispaces.com&lt;/div&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37481028-6387322097516859925?l=tony-valderrama.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElTonyYSusOndas/~4/crGxv4WoaXc" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/ElTonyYSusOndas/~3/crGxv4WoaXc/los-wikis-una-introduccion.html</link><author>noreply@blogger.com (Tony Valderrama)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/_y_99ub2wm3Y/TdbzSu2YAGI/AAAAAAAACRE/Mt_wKX20nWY/s72-c/video66c61037aba1%5B14%5D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://tony-valderrama.blogspot.com/2011/05/los-wikis-una-introduccion.html</feedburner:origLink></item></channel></rss>

