<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Como Lo Hago &#187; Programacion</title>
	<atom:link href="http://www.comolohago.cl/category/computacion/programacion/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.comolohago.cl</link>
	<description>Si se puede, te lo enseñamos</description>
	<lastBuildDate>Tue, 10 Jan 2012 16:56:56 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Cómo hacer un gadget en Windows 7</title>
		<link>http://www.comolohago.cl/2010/08/09/como-hacer-un-gadget-en-windows-7-2/</link>
		<comments>http://www.comolohago.cl/2010/08/09/como-hacer-un-gadget-en-windows-7-2/#comments</comments>
		<pubDate>Tue, 10 Aug 2010 02:22:32 +0000</pubDate>
		<dc:creator>Cri</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[Gadget]]></category>
		<category><![CDATA[sidebar]]></category>
		<category><![CDATA[windows 7]]></category>

		<guid isPermaLink="false">http://www.comolohago.cl/?p=3803</guid>
		<description><![CDATA[
 
Hola   amigos de Cómo Lo Hago, tratando de sorprenderlos día a día nos empeñamos en poder crear nuevos tutoriales y ayudarlos en adquirir un mayor conocimiento como también desenvolverse dentro de un nuevo tipo de desarrollo. Esta vez será la ocasión de crear un Gadget el cual nos puede servir para una [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><img class="alignnone" src="http://farm5.static.flickr.com/4076/4878538776_56444ce8d5.jpg" alt="" width="500" height="260" /></p>
<p style="text-align: justify;"><strong> </strong></p>
<p style="text-align: justify;">Hola   amigos de Cómo Lo Hago, tratando de sorprenderlos día a día nos empeñamos en poder crear nuevos tutoriales y ayudarlos en adquirir un mayor conocimiento como también desenvolverse dentro de un nuevo tipo de desarrollo. Esta vez será la ocasión de crear un <strong><em>Gadget</em></strong> el cual nos puede servir para una infinidad de cosas dependiendo del uso que le queramos dar, en este caso veremos como hacer uno con alimentacion RSS de los tutoriales que se hacen en CómoLoHago. Partiendo por una cosa, es muy importante recalcar que no hay que ser programador para poder realizar este tuto, pero sí tener harta paciencia para darle al clavo. Los invito a seguir en este entretenido tuto como siempre despues del salto&#8230;</p>
<p style="text-align: justify;"><span id="more-3803"></span></p>
<p style="text-align: justify;"><img title="Más..." src="http://www.comolohago.cl/wp-includes/js/tinymce/plugins/wordpress/img/trans.gif" alt="" /></p>
<p style="text-align: justify;"><strong> </strong></p>
<p style="text-align: justify;"><strong> </strong></p>
<p style="text-align: justify;"><strong> </strong></p>
<h1 style="text-align: center;">Cómo hacer un gadget en Windows 7</h1>
<p style="text-align: justify;">1.  ¿Qué  necesitamos?</p>
<ul style="text-align: justify;">
<li>Sistema operativo Windows 7</li>
<li>Aprender un poco de HTML + CSS. Para esto puede recurrir a los siguientes tutoriales</li>
</ul>
<ol>
<li><a href="http://www.comolohago.cl/2010/02/11/como-convertirse-en-un-campeon-de-html-parte-1/">Aprender HTML</a><em><br />
</em></li>
<li><a href="http://www.comolohago.cl/2009/02/01/como-dominar-css-sin-salir-del-escritorio-parte-1/">Aprende CSS</a><em><br />
</em></li>
</ol>
<h2 style="text-align: justify;">2.  ¿Cómo  lo hago?</h2>
<p style="text-align: justify;"><strong>1. </strong>Manos a la obra, primero a buscar donde tenemos nuestros <strong><em>Gadgets</em></strong> los cuales se encontrarán siempre por <em>default</em> en <strong><em>Archivos de programa&gt;Windows Sidebar&gt;Gadgets</em></strong>. Una vez ubicados en esta carpeta procederemos a crear la carpta contenedora de nuestro futuro Gadget por desarrollar. Es muy importante que la extensión del nombre sea así:</p>
<p style="text-align: justify;"><strong>NOMBREDEMIGADGET.Gadget</strong></p>
<p style="text-align: justify;"><strong> </strong> <img class="alignnone" src="http://farm5.static.flickr.com/4094/4877930213_23b99c9738_z.jpg" alt="" width="640" height="493" /></p>
<p style="text-align: justify;"><strong>2. </strong>Una vez creada nuestra carpeta contenedora necesitaremos algunos archivos indispensables para poder personalisar y a la vez desarrollar:</p>
<p><img src="http://farm5.static.flickr.com/4082/4877930397_912a5736e3_z.jpg" alt="" width="640" height="493" /></p>
<ul style="text-align: justify;">
<li><em>MiGadget.html: Contiene el código principal para los ajustes de color, fondo, letras, links, feeders, etc</em>.</li>
</ul>
<blockquote style="text-align: justify;"><address>&lt;html xmlns=&#8221;http://www.w3.org/1999/xhtml&#8221;&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv=&#8221;Content-Type&#8221; content=&#8221;text/html; charset=iso-8859-1&#8243; /&gt;<br />
&lt;title&gt;ComoLoHago mi primer gadget&lt;/title&gt;<br />
&lt;!&#8211; Para llamar a nuestros Settings.js del gadget &#8211;&gt;<br />
&lt;script type=&#8221;text/javascript&#8221; src=&#8221;MiGadget.js&#8221;&gt;&lt;/script&gt;<br />
&lt;style type=&#8221;text/css&#8221;&gt;<br />
/*/ El cuerpo de nuestro Gadget /*/<br />
body<br />
{</address>
<address>width: 330px;<br />
height: 450px;<br />
font-family: verdana;<br />
font-weight: lighter;<br />
margin:0px;<br />
font-size: 10px;<br />
overflow-x:hidden;<br />
overflow-y:auto;<br />
background-color:#333333;<br />
scrollbar-face-color:#444444; /*/ Color del cuadro /*/<br />
scrollbar-arrow-color:#999999; /*/ Color de la flecha de nuestro scroll /*/<br />
scrollbar-track-color:#333333;  /*/ Color de la vía donde se mueve el scroll /*/<br />
scrollbar-highlight-color:#444444; /*/ Si queremos color desde un ángulo /*/<br />
scrollbar-darkshadow-color:#444444; /*/Color opuesto al lugar al Highlight-Color /*/<br />
scrollbar-shadow-color:#444444; /*/ Si queremos sombra /*/<br />
scrollbar-3dlight-color:#444444;  /*/ Si queremos color de luz 3d /*/</address>
<address>}</address>
<address>#ContenidoDeMiGadget</address>
<address>/*/Aqui se encuentra parte del contenido que se alimentará dentro de nuestro gadget/*/<br />
{</address>
<address>width: 318px;<br />
margin-left:1px;<br />
height:100px;<br />
vertical-align: middle;<br />
text-align:center;<br />
background-color:#333333;</address>
<address>}</address>
<address>/*/ Este es el codigo especial para poder editar todo dentro del contenido rss /*/<br />
/*/ ya sea colores de letras, colores de fondo, bordes, etc/*/</address>
<address>/*/1-Con esto le indicamos al contenido el ancho que ocupará/*/</address>
<address>.rssxpresschannel { width:318px; font-family: Verdana; }</address>
<address>.rssxpresstable {height:200px; width:318px;}</address>
<address>/*/2-Con esto le indicamos al subtitulo &#8220;Sí se puede, te lo enseñamos&#8221; lo que queremos/*/</address>
<address>.rssxpresschdesc {font-size:10px; background-color:#333333; color:99BBFF; font-style:italic;}</address>
<address>/*/3-Con esto le indicamos al título &#8220;Como Lo Hago&#8221; lo que queremos/*/</address>
<address>.rssxpresschtitle  {font-size:12px; font-family:Arial; color:#99BBFF;  background-color:#333333; background-position:right;  background-image:url(logo.png); background-repeat:no-repeat;  height:69px; width:88px;margin-top:10px;}</address>
<address>/*/4-Con esto le indicamos al título de cada tema lo que queremos/*/</address>
<address>.rssxpressittitle  {font-size:10px; margin-right:5px; background-color:#333333;  border-top-style:inset; border-top-color:#999999; border-width:thin; }</address>
<address>/*/5-Con esto le indicamos a la descripcion de cada contenido lo que queremos/*/</address>
<address>.rssxpressitdesc  {font-size:10px; background-color:#333333; color:#FFFFFF;  margin-top:5px; margin-bottom:5px; font-weight:lighter; }</address>
<address>A:link {text-decoration:none;color:#99BBFF;}</address>
<address>A:visited {text-decoration:none;color:#99BBFF;}</address>
<address>A:active {text-decoration:none;color:#99BBFF;}</address>
<address>A:hover {text-decoration:none;color:#00BBFF;}</address>
<address>&lt;/style&gt;<br />
&lt;/head&gt;</address>
<address>&lt;b style=&#8221;margin-left:210px&#8221; style=&#8221;color:#555555&#8243;&gt;ComoLoHago v1.0&lt;/b&gt;<br />
&lt;body&gt;<br />
&lt;!&#8211;Contenido de mi gadget&#8211;&gt;<br />
&lt;div id=&#8221;ContenidoDeMiGadget&#8221;&gt;<br />
&lt;!&#8211;Script alimentador del contenido Rss&#8211;&gt;<br />
&lt;script src=&#8221;http://rssxpress.ukoln.ac.uk/lite/viewer/?rss=http%3A%2F%2Fwww.comolohago.cl%2Ffeed&#8221;&gt;&lt;/script&gt;<br />
&lt;/div&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;<br />
</address>
</blockquote>
<ul style="text-align: justify;">
<li><em>Settings.html: Contiene el código para los ajustes de nuestro Gadget</em>.</li>
</ul>
<blockquote style="text-align: justify;"><address style="text-align: justify;">&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv=&#8221;Content-Type&#8221; content=&#8221;text/html; charset=iso-8859-1&#8243; /&gt;<br />
&lt;style type=&#8221;text/css&#8221;&gt;</p>
<p>body<br />
{</p>
</address>
<address style="text-align: justify;">/*/ ancho y alto de nuestro menu de ajustes /*/<br />
width:300px;<br />
height:250px;<br />
}</p>
<p>/*/un poco de CSS /*/<br />
#L_settingsTitle<br />
{<br />
font-family:Arial;<br />
font-size:15px;<br />
color:#FF0000;<br />
}</p>
<p>#L_settingsTitleLabel<br />
{<br />
font-family:Arial;<br />
font-size:8px;<br />
font-style:italic;<br />
color:#000000;<br />
}</p>
<p>&lt;/style&gt;</p>
<p>&lt;script type=&#8221;text/javascript&#8221; src=&#8221;MiGadget.js&#8221;&gt; &lt;/script&gt;</p>
<p>&lt;/head&gt;</p>
<p>&lt;body&gt;<br />
&lt;p&gt;Aqui agregan su contenido&lt;/p&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
</address>
</blockquote>
<ul style="text-align: justify;">
<li><em>MiGadget.js: Contiene el código especial para poder tener ajustes en nuestro Gadget.</em></li>
</ul>
<blockquote style="text-align: justify;"><address>// Importantisimo para poder tener los ajustes de nuestro Gadget<br />
</address>
<address>System.Gadget.settingsUI = &#8220;Settings.html&#8221;;</address>
<address>System.Gadget.onSettingsClosing = SettingsClosing;</address>
<p style="text-align: justify;">
</blockquote>
<ul style="text-align: justify;">
<li><em>Gadget.xml: Contiene el autor, nombre, descripción, ícono, logo. En sí es lo necesario para aparecer en el menú para seleccionar el Gadget</em>.</li>
</ul>
<blockquote style="text-align: justify;"><address>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;utf-8&#8243; ?&gt;</address>
<address>&lt;gadget&gt;</address>
<address> &lt;name&gt;CómoLoHago &#8211; Novedades&lt;/name&gt;</address>
<address> &lt;version&gt;1.0&lt;/version&gt;</address>
<address> &lt;author name=&#8221;CómoLoHago Team&#8221;&gt;</address>
<address> &lt;info url=&#8221;www.ComoLoHago.cl&#8221; /&gt;</address>
<address> &lt;/author&gt;</address>
<address> &lt;copyright&gt;&amp;#169; CómoLoHago 2010&lt;/copyright&gt;</address>
<address> &lt;description&gt;Novedades acerca de tutoriales nuevos en tu escritorio&lt;/description&gt;</address>
<address> &lt;icons&gt;</address>
<address> &lt;icon height=&#8221;48&#8243; width=&#8221;48&#8243; src=&#8221;icono.png&#8221;/&gt;</address>
<address> &lt;/icons&gt;</address>
<address> &lt;hosts&gt;</address>
<address> &lt;host name=&#8221;sidebar&#8221;&gt;</address>
<address> &lt;autoscaleDPI&gt;true&lt;/autoscaleDPI&gt;</address>
<address> &lt;base type=&#8221;HTML&#8221; apiVersion=&#8221;1.0.0&#8243; src=&#8221;MiGadget.html&#8221; /&gt;</address>
<address> &lt;permissions&gt;Full&lt;/permissions&gt;</address>
<address> &lt;platform minPlatformVersion=&#8221;1.0&#8243; /&gt;</address>
<address> &lt;defaultImage src=&#8221;imagenarrastrada.png&#8221;/&gt;</address>
<address> &lt;/host&gt;</address>
<address> &lt;/hosts&gt;</address>
<address>&lt;/gadget&gt;</address>
</blockquote>
<p style="text-align: justify;"><strong>2. </strong>La flecha blanca indica el ícono que aparecerá en el menú de <em><strong>Gadgets</strong></em>. Este ícono <em>(icono.png)</em> se direcciona desde nuestro archivo XML, en este caso Gadget.xml. También podemos agregar otra imagen para cuando arrastremos nuestro <em><strong>Gadget</strong></em> al escritorio <em>(imagenarrastrada.png)</em>.</p>
<p style="text-align: justify;"><img class="alignnone" src="http://farm5.static.flickr.com/4100/4878539210_3d1179ddee.jpg" alt="" width="500" height="260" /></p>
<p style="text-align: justify;"><img class="alignnone" src="http://farm5.static.flickr.com/4081/4878539308_5af141246a.jpg" alt="" width="500" height="260" /></p>
<p style="text-align: justify;"><strong>3. </strong>Finalmente nos podemos dar cuenta que nuestro <strong><em>Gadget</em></strong> va adquiriendo la forma que le damos con CSS y HTML ademas de las programaciones que cada uno le dé en javascript.</p>
<p style="text-align: justify;">Para poder mostrar el contenido RSS, tuve que recurrir a la página <a href="http://rssxpress.ukoln.ac.uk/lite/include/?t=1" target="_blank">http://rssxpress.ukoln.ac.uk/lite/include/?t=1</a> para obtener el script feeder el cual va inserto en <strong><em>MiGadget.html</em></strong>:</p>
<p style="text-align: justify;"><img class="alignnone" src="http://farm5.static.flickr.com/4123/4877930675_981c161b84.jpg" alt="" width="358" height="463" /></p>
<p style="text-align: justify;"><img class="alignnone" src="http://farm5.static.flickr.com/4094/4877930725_0e4a769418.jpg" alt="" width="358" height="463" /></p>
<p style="text-align: justify;"><img class="alignnone" src="http://farm5.static.flickr.com/4102/4877930919_d251acf20b.jpg" alt="" width="358" height="463" /></p>
<p style="text-align: justify;">Espero    les haya gustado, les motive para hacer sus propias creaciones y así poder compartirlas con los demas. Me despido</p>
<p style="text-align: justify;">Como   siempre exclusivamente  ha sido:</p>
<p style="text-align: justify;"><img src="http://farm4.static.flickr.com/3043/3056524059_ed7150e191_o.jpg" alt="" /></p>
<p style="text-align: justify;"><strong>Staff  CLH</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.comolohago.cl/2010/08/09/como-hacer-un-gadget-en-windows-7-2/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Cómo generar números aleatorios en C</title>
		<link>http://www.comolohago.cl/2010/06/23/como-generar-numeros-aleatorios-en-c/</link>
		<comments>http://www.comolohago.cl/2010/06/23/como-generar-numeros-aleatorios-en-c/#comments</comments>
		<pubDate>Wed, 23 Jun 2010 05:14:10 +0000</pubDate>
		<dc:creator>Jorge Nitales</dc:creator>
				<category><![CDATA[Programacion]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[numeros aleatorio]]></category>
		<category><![CDATA[rand()]]></category>
		<category><![CDATA[random]]></category>

		<guid isPermaLink="false">http://www.comolohago.cl/?p=3633</guid>
		<description><![CDATA[
Quizás recuerden hace algún tiempo que el buen Xaba Daba Du, nos mostró como generar números aleatorios en PHP. Ésta vez y por petición expresa de nadie de millones de personas, les traemos lo mismo, pero ésta vez en otro lenguaje, el siempre presente y nunca querido C.
Para ver Cómo lo Hago, vamos después del salto.

Cómo generar números aleatorios en C
¿Qué necesitamos?

Un editor de lenguaje [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter" src="http://farm2.static.flickr.com/1207/4725951949_f24c528d98.jpg" alt="2806839412_afdfba2580 by you." width="400" height="300" /></p>
<p style="text-align: justify;">Quizás recuerden hace algún tiempo que el buen <a href="http://twitter.com/xabadu" target="_blank">Xaba Daba Du</a>, nos mostró <a href="http://www.comolohago.cl/2008/08/29/como-hacer-un-generador-de-numeros-aleatorios-en-php/" target="_blank">como generar números aleatorios en PHP</a>. Ésta vez y por petición expresa <span style="text-decoration: line-through;"><em>de nadie</em></span> de millones de personas, les traemos lo mismo, pero ésta vez en otro lenguaje, el siempre presente y nunca querido C.</p>
<p style="text-align: justify;">Para ver Cómo lo Hago, vamos después del salto.</p>
<p style="text-align: justify;"><span id="more-3633"></span></p>
<h1 style="text-align: center;">Cómo generar números aleatorios en C</h1>
<h2>¿Qué necesitamos?</h2>
<ul>
<li style="text-align: justify;">Un editor de lenguaje C, tipo Borland C++.</li>
</ul>
<h2><strong>¿Cómo Lo Hago?</strong></h2>
<p style="text-align: justify;">1.- Primero explicaremos algunos conceptos:</p>
<p style="text-align: justify;">En C, existe una función llamada <strong>rand()</strong>, que genera números aleatorios. El problema que tiene esta función es que siempre que reinicies el programa, aparecerán los mismos números.</p>
<p style="text-align: justify;">Para evitar esto, hay que darle un número<em> &#8220;semilla&#8221;</em>, el cual operará como base para la generación de la secuencia de números. El problema con esto, es que si le damos un número fijo, volvemos al problema anterior, ya que siempre utilizará la misma base definida y por ende la secuencia será la misma.</p>
<p style="text-align: justify;">Entonces, lo que necesitamos es darle un número <em>&#8220;semilla&#8221;</em> dinámico, esto es, que vaya cambiando cada vez que ejecutemos el programa.</p>
<p style="text-align: justify;">Sabiendo esto, la función que da la semilla a <strong>rand()</strong> es <strong>srand()</strong>, que recibe como parámetro <em>(lo que va entre los paréntesis)</em> el número semilla, que en este caso, será la hora del sistema en segundos. Así, a menos que el programa se ejecute 2 o más veces en menos de un segundo, los números cambiarán.</p>
<p style="text-align: justify;">La función para saber la hora actual del sistema es <strong>time(NULL)</strong>.</p>
<p style="text-align: justify;">Sabiendo esto, vamos al código. Haremos un generador de números aleatorios, donde la cantidad de estos, la decidirá el usuario, ingresando esta cantidad por teclado.</p>
<pre class="c" title="code">#include&lt;stdio.h&gt;  // libreria basica para entrada y salida
#include&lt;stdlib.h&gt; // libreria para el uso de rand()
#include&lt;conio.h&gt;  // libreria para el uso de getch()
#include&lt;time.h&gt;   // libreria para el uso de time()
void main( )
{
     // Declaracion de variables
     int numero,cantidad,contador;
     int hora = time(NULL);

     // Semilla de rand();
     srand(hora);

     /* Recogemos por teclado la cantidad de
        numeros que quiere el usuario */

        printf("Ingrese la cantidad de numeros
        aleatorios que desea generar\n");
        scanf("%d",&amp;cantidad);

        /* Generamos un ciclo que se repite la cantidad
           de veces indicada. En cada vuelta del ciclo se
           genera y se imprime un numero aleatorio. */

        for(contador = 0; contador&lt;cantidad; contador++)
        {

               numero = rand()%100;
               printf("%d ", numero);
        }
       getch();  // genera una pausa en la ejecucion del programa

}
</pre>
<p style="text-align: justify;">A pesar de que esta explicado con comentarios, desmenucemos un poco.</p>
<pre class="c" title="code">#include&lt;stdio.h&gt;  // libreria basica para entrada y salida
#include&lt;stdlib.h&gt; // libreria para el uso de rand( )
#include&lt;conio.h&gt;  // libreria para el uso de getch( )
#include&lt;time.h&gt;   // libreria para el uso de time( )
</pre>
<p style="text-align: justify;">Estos cuatro includes, son para llamar a las librerías necesarias para ejecutar el programa. La librería <strong>conio.h</strong>, no es necesaria para que el programa funcione, solo la llamamos pasar usar la función <strong>getch( )</strong> y generar una pausa en el programa. Con esto podremos ver el resultado por pantalla antes que se cierre el programa.</p>
<pre class="c" title="code">// Declaración de variables

int numero,cantidad,contador;
int hora = time(NULL);
</pre>
<p style="text-align: justify;">Acá declaramos el tipo y que variables utilizaremos. Definimos 4 variables de tipo int<em> (entero)</em>, 3 de ellos sin inicializar <em>(es decir, sin valor inicial)</em> y una de ella inicializada.</p>
<p style="text-align: justify;">Las 3 sin valor inicial, serán el número aleatorio que se genera <em>(número).</em> La cantidad de números aleatorios que se generarán <em>(cantidad)</em> y un contador para crear un ciclo.</p>
<pre class="c" title="code">// Recogemos por teclado la cantidad de numeros que quiere el usuario

printf("Ingrese la cantidad de numeros aleatorios que desea generar\n");
scanf("%d",&amp;cantidad);</pre>
<p style="text-align: justify;">Mostramos por pantalla el mensaje para el usuario y asignamos el valor que se ingrese, a la variable <strong>cantidad</strong> usando el símbolo &amp; <em>(ampersand)</em>.</p>
<pre class="c" title="code">// Generamos un ciclo que se repite la cantidad de veces indicada
// en cada vuelta del ciclo se genera y se imprime un numero aleatorio.

for(contador = 0; contador &lt; cantidad; contador++)
{
      numero = rand()%100;
      printf("%d ", numero);
}

getch();     // genera una pausa en la ejecucion del programa

}
</pre>
<p style="text-align: justify;">Aquí es donde generamos el ciclo, con el bucle <strong>for</strong>. Tenemos 3 parámetros separados por <strong>;</strong> <em>(punto y coma)</em>, en el primero inicializamos la variable <strong>contador</strong> con el valor cero. En la segunda ponemos la condición que se debe cumplir para terminar el ciclo, en este caso decimos que el ciclo se repita siempre que <strong>contador</strong> sea menor que <strong>cantidad<em>. </em><span style="font-weight: normal;">Ojo, aquí decimos que sea menor que el número porque el valor inicial es cero y empezamos a contar desde cero y no de uno.</span></strong></p>
<p style="text-align: justify;"><strong><span style="font-weight: normal;">Al final aplicamos un </span>getch( )<span style="font-weight: normal;"> para detener el programa y lograr ver los resultados.</span></strong></p>
<p style="text-align: justify;"><strong><span style="font-weight: normal;">Les invito a realizarlo y hacer sus aportes. Cualquier consulta o comentario que puedan tener, no duden en dejarnos unas líneas a continuación. Como siempre, este tutorial ha sido:<br />
</span></strong></p>
<p style="text-align: center;"><strong><span style="font-weight: normal;"><span style="font-family: Arial; line-height: 18px; font-size: 12px; color: #383838;"><img class="aligncenter" style="max-width: 100%; padding: 0px;" src="http://farm4.static.flickr.com/3043/3056524059_52d616c96c.jpg?v=0" alt="" width="400" height="314" /></span></span></strong></p>
<p style="text-align: center;"><strong><span style="font-weight: normal;">Por ahora,</span></strong></p>
<p style="text-align: center;"><strong><span style="font-weight: normal;">Me despido.</span></strong></p>
<p style="text-align: center;"><strong>Staff Cómo Lo Hago </strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.comolohago.cl/2010/06/23/como-generar-numeros-aleatorios-en-c/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Como Hacer una Macro en Excel</title>
		<link>http://www.comolohago.cl/2010/06/03/como-hacer-una-macro-en-excel/</link>
		<comments>http://www.comolohago.cl/2010/06/03/como-hacer-una-macro-en-excel/#comments</comments>
		<pubDate>Thu, 03 Jun 2010 22:51:01 +0000</pubDate>
		<dc:creator>Dexter</dc:creator>
				<category><![CDATA[Computacion]]></category>
		<category><![CDATA[Excel]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Macros]]></category>
		<category><![CDATA[VBA]]></category>

		<guid isPermaLink="false">http://www.comolohago.cl/?p=3582</guid>
		<description><![CDATA[

Actualmente me encuentro realizando mi tercera práctica profesional en la cual me han dado como tarea la de realizar un resumen anual de unos servicios de enlaces de internet y telefonía IP. Al ser anual estamos hablando de al menos unos 4000, si cuatro mil, datos en Excel, los cuales se deben filtrar, ordenar y [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone" src="http://farm5.static.flickr.com/4037/4667002555_fb10100012_b.jpg" alt="" width="550" height="379" /></p>
<p style="text-align: justify;">
<p style="text-align: justify;">Actualmente me encuentro realizando mi tercera práctica profesional en la cual me han dado como tarea la de realizar un resumen anual de unos servicios de enlaces de internet y telefonía IP. Al ser anual estamos hablando de al menos unos 4000, si cuatro mil, datos en Excel, los cuales se deben filtrar, ordenar y hacer cálculos respectivos.</p>
<p style="text-align: justify;">Para que este proceso no se haga tan tedioso es que he recurrido a una herramienta que muchos han escuchado pero creo estar en la razón al decir que pocos saben utilizar.</p>
<p style="text-align: justify;">Estamos hablando de las Macros.</p>
<p style="text-align: justify;"><span id="more-3582"></span></p>
<h2 style="text-align: justify;">Una pequeña introducción</h2>
<p style="text-align: justify;">Cuando hablamos de una Macro en Excel nos referimos a un lenguaje de programación orientado a aplicaciones. En este caso particular, se utiliza VBA (Visual Basic for Applications) el cual es un lenguaje de programación desarrollado por Microsoft.  Excel, al igual que los otros programas de Microsoft Office incluyen el lenguaje VBA.</p>
<p style="text-align: justify;">Imaginen un Robot que conoce todo sobre Excel. Este robot puede leer instrucciones y operar sobre Excel de manera rápida y precisa. Simplemente escribimos un lenguaje que este robot comprenda, para que luego el robot haga el trabajo <span style="text-decoration: line-through;">sucio</span> mientras nos relajamos y tomamos una limonada. Eso es justamente VBA. Un lenguaje en código para robots. Pero Ojo, Excel no viene ni con un robot ni con la limonada. =)</p>
<p style="text-align: justify;">La combinación entre la generación de un código VBA y su posterior ejecución en Excel es lo que se llama una Macro. A fin de cuentas una Macro es un programa el cual contiene un trozo de código de manera que podemos automatizar procesos que el realizarlos a mano nos pueden tomar mucho tiempo.</p>
<p style="text-align: justify;">La palabra Macro proviene del griego <em>makros</em> que significa grande-lo cual podría describir el tipo de pago que podrías recibir por convertirte en un experto en programación de Macros.</p>
<p style="text-align: justify;">Otra cosa que se debe tener en cuenta es que VBA no es lo mismo que VB (Visual Basic), ya que VB es un lenguaje de programación que permite crear programas auto ejecutables (conocidos como archivos EXE). A pesar de que VBA y VB tienen mucho en común, son dos cosas distintas.</p>
<p style="text-align: justify;">La idea de crear una Macro es la de automatizar tareas que son repetitivas o que deben ser desarrollas con frecuencia.  Por ejemplo, preparar reportes mensuales de manera que todos los meses podrás presentarle a tu jefe reportes con un mismo formato. Él quedará impresionado por tu consistencia  y la gran calidad de tu trabajo, e incluso te promoverá a un nuevo cargo <span style="text-decoration: line-through;">al cual no estás capacitado!!</span></p>
<h2 style="text-align: justify;">¡Comencemos!</h2>
<p>Lo primero a realizar es hacer visible la lengüeta de <strong>“Programador”</strong>. Por defecto esta lengüeta viene oculta en Excel 2007.</p>
<p><img class="aligncenter" src="http://farm2.static.flickr.com/1288/4667002687_d3b1429fbc_b.jpg" alt="" width="550" height="448" /></p>
<p>Iremos a Inicio y daremos click en<strong> “Opciones de Excel”</strong>.</p>
<p><img class="aligncenter" src="http://farm5.static.flickr.com/4035/4667624508_3a6ceb00dd_b.jpg" alt="" width="550" height="448" /></p>
<p>La primera opción es <strong>“Más Frecuente”</strong> y dentro de ella debemos marcar la opción de <strong>“Mostrar Ficha Programador en la cinta de Opciones”</strong>.</p>
<p><img class="aligncenter" src="http://farm5.static.flickr.com/4065/4667002911_de023464c2_b.jpg" alt="" width="550" height="139" /></p>
<p>Acá podemos observar como la hemos marcado, que en este caso es la tercera opción.</p>
<p><img class="aligncenter" src="http://farm5.static.flickr.com/4038/4667624596_28b2ec734c_b.jpg" alt="" width="550" height="82" /></p>
<p>Con ello la lengüeta <strong>“Programador”</strong> está visible y podemos comenzar a utilizar Macros en nuestro libro de Excel.</p>
<p style="text-align: justify;">Lo que cubriremos en este instructivo es la grabación de Macros. Esto es muy parecido a la grabación de acciones que alguna vez cubrimos en un tutorial de Photoshop.</p>
<h2>Grabando una Macro</h2>
<ul>
<li style="text-align: justify;">Seleccionamos una celda; cualquier celda servirá.</li>
<li style="text-align: justify;">En la lengüeta de programador damos click en <strong>“grabar Macro”.</strong></li>
</ul>
<p><img class="aligncenter" src="http://farm5.static.flickr.com/4015/4667003863_fe2269383f_b.jpg" alt="" width="716" height="144" /></p>
<p style="padding-left: 60px;">Con ello nos aparece la ventana  <strong>“Grabar Macro”</strong>.</p>
<p><img class="aligncenter" src="http://farm5.static.flickr.com/4056/4667624638_d0593896b1_o.png" alt="" width="348" height="288" /></p>
<p style="padding-left: 60px; text-align: justify;">En <strong>“Nombre de la macro”</strong> pondremos un nombre representativo <em>(Ojo no puede llevar espacios por lo que si desean pueden usar guión bajo “_” para poner espacios entre palabras)</em>, en “método abreviado” pondremos una combinación  de teclas como acceso directo <em>(por defecto es CTRL +”algo ”, en mi caso utilizá la tecla Shift o Mayúscula más la tecla N),</em> en <strong>“Guardar macro en: &#8221; </strong>dejamos igual como está, y en <strong>“Descripción”</strong> anotamos justamente una descripción de lo que hará la macro.</p>
<p style="padding-left: 60px; text-align: justify;">Damos click en <strong>“Aceptar ”</strong>. Con ello la grabación de la Macro comienza, por lo tanto todos los movimientos que realicemos dentro del libro de Excel serán grabados.</p>
<ul>
<li>Anotaremos nuestro nombre en una celda</li>
<li>Hacemos click en la celda bajo el nombre y anotaremos la siguiente fórmula: =AHORA()</li>
</ul>
<p style="padding-left: 60px;">Esta fórmula muestra la fecha y hora actual.</p>
<ul>
<li> Seleccionamos la celda que contiene la fórmula y la copiaremos<em> (Con CTRL+C o en la lengüeta Inicio -&gt; Copiar)</em></li>
</ul>
<p><img class="aligncenter" src="http://farm5.static.flickr.com/4009/4667624734_a686e3ce56_b.jpg" alt="" width="550" height="202" /></p>
<ul>
<li style="text-align: justify;">En la lengüeta Inicio está el botón Pegar. Si damos Click en la flecha bajo el ícono verán que aparecen más opciones. Elegimos la opción <strong>“Pegar Valores”</strong>.</li>
</ul>
<p><img class="aligncenter" src="http://farm5.static.flickr.com/4023/4667003231_46d0909821_b.jpg" alt="" width="550" height="422" /></p>
<p style="padding-left: 60px;">Esto convierte la fórmula a su valor correspondiente.</p>
<ul>
<li>Seleccionamos ambas celdas, osea la celda con la fecha y la celda con el nombre.</li>
<li>Aplicamos a ambas celdas un formato, por ejemplo <strong>“Negrita ”</strong> y en el tamaño de la letra ponemos  <strong>“16”</strong>.</li>
</ul>
<p><img class="aligncenter" src="http://farm5.static.flickr.com/4017/4667003375_352b9d50e1_b.jpg" alt="" width="550" height="393" /></p>
<ul>
<li>Vamos a la lengüeta Programador y detenemos la grabación de la Macro con el botón respectivo.</li>
</ul>
<p><img class="aligncenter" src="http://farm5.static.flickr.com/4040/4667003475_017673b93e_b.jpg" alt="" width="550" height="391" /></p>
<p style="text-align: justify;">¡Felicitaciones! Acabas de grabar tu primera Macro. Esta es una buena oportunidad para llamar a tu madre y contarle las buenas noticias.</p>
<p style="text-align: justify;">Ahora solo nos falta correr la Macro y ver los resultados. Para ello iremos a una nueva hoja de cálculo. Seleccionamos la celda A1.</p>
<p><img class="aligncenter" src="http://farm5.static.flickr.com/4057/4667625262_98f367abf8_b.jpg" alt="" width="550" height="441" /></p>
<p style="text-align: justify;">En la lengüeta de Programador hacemos click en Macros con lo cual se nos abre la ventana que administra las Macros.</p>
<p><img class="aligncenter" src="http://farm5.static.flickr.com/4022/4667625380_91673b60d8_b.jpg" alt="" width="550" height="444" /></p>
<p style="text-align: justify;">Elegimos nuestra Macro, que en este caso es única y le damos click al botón ejecutar. También si  prefieren pueden seleccionar la celda A1 y simplemente utilizar la combinación de teclas que configuramos, en este caso Ctrl+Shift+N.</p>
<p style="text-align: center;"><img class="aligncenter" src="http://farm5.static.flickr.com/4032/4667003779_cfcb7fe516_b.jpg" alt="" width="550" height="441" /></p>
<p style="text-align: justify;">Como observarán se ha pegado la información y se le ha dado el formato de letra en negrita y tamaño 16. Con un simple click o combinación de teclas sin necesidad de anotar el nombre, aplicar una fórmula, copiarla, pegarla, seleccionar ambas celdas y darles formato.</p>
<p style="text-align: justify;">Ahora analicemos el código o lenguaje que se ha grabado.</p>
<p style="text-align: justify;">Para ello podemos dar click en el botón “Visual Basic” de la lengüeta Programador o utilizar la combinación de teclas ALT+F11.</p>
<p><img class="aligncenter" src="http://farm5.static.flickr.com/4054/4667003939_507e2eb4b3_b.jpg" alt="" width="716" height="144" /></p>
<p style="text-align: justify;">Con ello se nos abre el editor de VBA.</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm5.static.flickr.com/4051/4667625694_b23474d1b2_b.jpg" alt="" width="550" height="420" /></p>
<p style="text-align: justify;">Damos click en el símbolo “+” de “Módulos” de manera de ampliar el árbol de módulos y con ello nos aparecerá “módulo 1” tal como se observa en la fotografía.</p>
<p><img class="aligncenter" src="http://farm5.static.flickr.com/4021/4667004117_c064b4ddd3_b.jpg" alt="" width="550" height="376" /></p>
<p>Con ello se abre el módulo y podemos obsevar el código que se ha generado.</p>
<p style="text-align: justify;">Los comentarios se pueden anotar anteponiendo el símbolo de apóstrofe (<strong>’</strong>).</p>
<p style="text-align: justify;">En este caso para explicar el código dejaré comentarios en cada línea.</p>
<blockquote><p>Sub NombreyTiempo()</p>
<p>&#8216; NombreyTiempo Macro</p>
<p>&#8216; Esta Macro anota mi nombre y el tiempo</p>
<p>&#8216; Acceso directo: Ctrl+Mayús+N</p>
<p>Range(&#8220;A1&#8243;).Select &#8216;Se selecciona la celda A1</p>
<p>ActiveCell.FormulaR1C1 = &#8220;Dexter&#8221; &#8216;En ella se insertará Dexter</p>
<p>Range(&#8220;A2&#8243;).Select &#8216;Se selecciona la celda A2</p>
<p>ActiveCell.FormulaR1C1 = &#8220;=NOW()&#8221; &#8216;Se aplica la fórmula Ahora() que en VBA se anota por su nombre en inglés NOW()</p>
<p>Range(&#8220;A2&#8243;).Select &#8216;Nuevamente seleccionamos la celda A2</p>
<p>Selection.Copy &#8216;La selección se copia</p>
<p>Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _</p>
<p>:=False, Transpose:=False &#8216;Se vuelve a pegar pero como pegado especial, en este caso como Valor</p>
<p>Range(&#8220;A1:A2&#8243;).Select &#8216;Tomamos el Rango desde la celda A1 a la A2</p>
<p>Application.CutCopyMode = False &#8216;Esta linea no hace nada en particular ya que no estamos ni copiando ni pegando</p>
<p>With Selection.Font &#8216;Con la seleccion antes hecha, entramos a la configuracion de fuentes</p>
<p>.Name = &#8220;Calibri&#8221; &#8216;Se selecciona el tipo de fuente, en este caso Calibri</p>
<p>.Size = 16  &#8216;Se selecciona el tamaño de fuente, en este caso 16</p>
<p>.Strikethrough = False &#8216;los siguientes códigos representan otros parámetros que no son necesarios analizar</p>
<p>.Superscript = False</p>
<p>.Subscript = False</p>
<p>.OutlineFont = False</p>
<p>.Shadow = False</p>
<p>.Underline = xlUnderlineStyleNone</p>
<p>.ThemeColor = xlThemeColorLight1</p>
<p>.TintAndShade = 0</p>
<p>.ThemeFont = xlThemeFontMinor</p>
<p>End With</p>
<p>Selection.Font.Bold = True &#8216;Con la misma seleccion anterior (celdas A1 y A2), aplicamos el formato de Negrita</p>
<p>End Sub</p></blockquote>
<p style="text-align: justify;">Este código lo pueden copiar y pegar en el editor de Macros de Excel, correrlo y funcionará correctamente.</p>
<p style="text-align: justify;">Bueno   con esto me despido, espero que     les haya gustado.</p>
<p style="text-align: center;">Y como   siempre, este tutorial ha sido</p>
<p style="text-align: center;"><img src="http://farm4.static.flickr.com/3043/3056524059_52d616c96c.jpg?v=0" alt="" width="400" height="314" /></p>
<p style="text-align: center;"><em>Felices   proyectos!!!!!</em></p>
<p style="text-align: center;">
<p style="text-align: center;">Para   cualquier consulta no duden en       escribirnos.</p>
<p style="text-align: center;">Estaremos   felices de responderles y       ayudarles en todo lo posible.</p>
<p style="text-align: center;">
<p style="text-align: center;"><em><strong>Cómo   Lo Hago, si se      puede, te  lo enseñamos.</strong></em></p>
<p style="text-align: center;">
<p style="text-align: center;"><strong>Staff   CLH</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.comolohago.cl/2010/06/03/como-hacer-una-macro-en-excel/feed/</wfw:commentRss>
		<slash:comments>91</slash:comments>
		</item>
		<item>
		<title>Cómo aprender a programar y no morir en el intento &#8211; Parte 11</title>
		<link>http://www.comolohago.cl/2010/04/27/como-aprender-a-programar-y-no-morir-en-el-intento-parte-11/</link>
		<comments>http://www.comolohago.cl/2010/04/27/como-aprender-a-programar-y-no-morir-en-el-intento-parte-11/#comments</comments>
		<pubDate>Tue, 27 Apr 2010 13:28:37 +0000</pubDate>
		<dc:creator>Xabadu</dc:creator>
				<category><![CDATA[Programacion]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[objetos]]></category>
		<category><![CDATA[poo]]></category>

		<guid isPermaLink="false">http://www.comolohago.cl/?p=3376</guid>
		<description><![CDATA[
Bueno, bueno, bueno. Nos demoramos un poco (casi 13 meses), pero lo prometido es deuda: Volvemos con la saga que intenta guiarlos por el largo y complejo camino de la programación.
¿Por qué nos demoramos tanto? Es una buena pregunta, gracias por hacerla -&#62; !. La verdad es que una vez que terminamos la parte 10 [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter" src="http://farm5.static.flickr.com/4020/4546641145_1f7c8009fd_o.png" alt="" width="450" height="292" /></p>
<p style="text-align: justify;">Bueno, bueno, bueno. Nos demoramos un poco <em>(casi 13 meses)</em>, pero lo prometido es deuda: Volvemos con la saga que intenta guiarlos por el largo <span style="text-decoration: line-through;"><em>y complejo</em></span> camino de la programación.</p>
<p style="text-align: justify;">¿Por qué nos demoramos tanto? Es una buena pregunta, gracias por hacerla -&gt; !. La verdad es que una vez que terminamos la parte 10 y estaban definidos los contenidos para continuar nos dimos cuenta que estábamos entrando en temas bastante avanzados, lo que se alejaba de la intención inicial de estas guías, por lo que decidimos pausar el tema y reconsiderar como seguir. Lamentablemente hubo otros temas que fue necesario cubrir en la cola de peticiones <em>(nuestro buzón explota cada día con todo lo que llega)</em> y el tiempo fue pasando hasta que llegamos a la fecha.</p>
<p style="text-align: justify;">Pero ha llegado el día de continuar y hemos reestructurado el modelo de esta saga para que tengamos una gran cantidad de números por delante. ¿Cómo? se preguntarán. Bastante simple: En las primeras 10 partes estuvimos viendo desde los conceptos más básicos de antes de programar hasta la base de desarrollo estructurado, por lo que empezando en este número, veremos algo completamente nuevo <em>(probablemente hasta el número 20) </em>para entregar las nociones necesarias y luego continuaremos con otro enfoque. Lo sabemos, es enredado, pero con el tiempo se irá entendiendo, confíen en nosotros <img src='http://www.comolohago.cl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p style="text-align: justify;">Así que sin más introducción, los invitamos a seguirnos después del salto, en esta edición número 11 de <em>&#8220;Cómo aprender a programar y no morir en el intento&#8221;</em>, en donde empezaremos a cubrir un nuevo paradigma de desarrollo: <strong>Programación orientada a objetos</strong>.</p>
<p style="text-align: justify;">
<p style="text-align: justify;"><span id="more-3376"></span></p>
<p style="text-align: justify;">
<h1 style="text-align: center;">Cómo aprender a programar y no morir en el intento &#8211; Parte 11</h1>
<p style="text-align: justify;"><strong>Nota:</strong> Si bien hoy comenzamos a trabajar con un paradigma nuevo, siempre recomendamos leer las partes anteriores de esta saga, las cuales pueden ser encontradas en nuestra categoría de <a href="http://www.comolohago.cl/category/computacion/programacion/" target="_blank">Programación</a>.</p>
<p style="text-align: justify;">Pues bien, tal como anunciábamos, hoy comenzamos con programación orientada a objetos. Esta parte de la guía será mucho más conceptual que técnica, ya que hay varios contenidos que es bueno que aclaremos para establecer una base sólida y poder trabajar de mejor manera a futuro. Así que sin más, vamos:</p>
<h2 style="text-align: justify;">Contenidos:</h2>
<ol style="text-align: justify;">
<li>Introducción a la programación orientada a objetos.</li>
<li>Programación orientada a objetos vs Programación estructurada.</li>
<li>Hola, soy un objeto.</li>
<li>Clases.</li>
<li>Métodos.</li>
</ol>
<p>Así que sin más, vamos, manos a la obra:</p>
<h2>1.- Introducción a la programación orientada a objetos:</h2>
<p style="text-align: justify;">La programación orientada a objetos <em>(o POO para los más amigos)</em>, es un paradigma de desarrollo definido y utilizado por una serie de lenguajes de programación que busca afrontar el desarrollo de aplicaciones desde un enfoque distinto al estructurado <em>(que hemos visto hasta la fecha)</em>, mediante la definición y uso de, valga la redundancia, objetos que operen bajo un prisma similar a como vemos, reconocemos y actuamos las situaciones de la vida real.</p>
<p style="text-align: justify;">A la fecha se ha convertido en el paradigma preferido por los principales lenguajes de programación, debido a una serie de ventajas <em>(que iremos viendo a medida que avancemos)</em> que permiten que el desarrollo sea más simple, seguro y completo. Si bien la transición desde el inicio a esta parte puede ser un poco compleja, especialmente por el cambio en el enfoque que se hace, una vez que las bases se entienden y dominan se puede comprender que es bastante simple.</p>
<p style="text-align: justify;">Solo como referencia, algunos lenguajes que trabajan bajo este paradigma:</p>
<ul>
<li>C++.</li>
<li>Java.</li>
<li>PHP <em>(Desde la versión 5)</em></li>
<li>Ruby.</li>
<li>Objective C.</li>
<li>Python.</li>
</ul>
<p style="text-align: justify;">Iremos viendo nueva información en cada parte de esta nueva etapa con el fin de ir aprendiendo un poco más y no extendernos en demasía en un solo número.</p>
<h2 style="text-align: justify;">2.- Programación orientada a objetos vs Programación estructurada:</h2>
<p style="text-align: justify;">Es inevitable que al comenzar a aprender un nuevo paradigma, empiecen las comparaciones y diferenciaciones de lo que ya se sabe. Y en este caso no será ninguna diferencia.</p>
<p style="text-align: justify;">A la fecha todo lo que hemos visto en esta saga es relacionado al desarrollo estructurado, en el cual basicamente nos dedicamos a escribir programas con una lógica directa en base a una <em>&#8220;plantilla&#8221;</em>, la cual contiene código que es compilado y ejecutado desde un inicio hasta el final.  Esta lógica opera bajo el uso de funciones y procesos que operan sobre una serie de datos de entrada y que finalmente nos despliegan resultados o salidas que dependen de cada tarea que se realizó. Bastante simple, de arriba a abajo, de principio a final.</p>
<p style="text-align: justify;">Por otro lado, en la POO, cambiamos el enfoque y comenzamos a hablar de <strong>objetos y clases</strong>. Si bien seguimos utilizando elementos clásicos de la programación estructurada, o bien de la programación propiamente tal como variables, ciclos e iteraciones, la base se rige por estos 2 elementos y es así como nuestras aplicaciones operan, lo que podremos ir viendo de forma clara a medida que vayamos desarrollando ejemplos.</p>
<p style="text-align: justify;">Si hicieramos un paralelo entre ambos paradigmas, algo que probablemente no sea correcto, pero a modo de ejemplo quizás nos aclare más los conceptos, si en la programación estructurada en ocasiones trabajamos con librerías, las cuales contienen funciones, en la programación orientada a objetos trabajamos con clases, las cuales a su vez contienen métodos, y estos operan sobre cada uno de los objetos que declaremos. Como indicábamos, lo anterior solo sirve para hacer un paralelo, ya que en lo real varía un poco.</p>
<p style="text-align: justify;">No obstante, a medida que nos adentremos más en el tema, iremos viendo una serie de características en las que podremos ir estableciendo comparaciones y que finalmente nos servirá para entender de mejor manera todo esto.</p>
<p style="text-align: justify;">Sin embargo, independiente de cuantas comparaciones o definiciones veamos, siempre llegaremos a las 2 unidades base que mencionábamos antes y que comenzaremos a ver a continuación: <strong>Objetos y clases</strong>. A partir de esto, es posible ir escalando el conocimiento relacionado a la programación orientada  a objetos, y eventualmente empezar a desarrollar de aquella forma.</p>
<h2 style="text-align: justify;">3.- Hola, soy un objeto:</h2>
<p style="text-align: justify;">Y llegamos a la unidad básica que de ahora en adelante aparecerá en cada cosa que veamos y en cada ejemplo que codifiquemos: <strong>Los objetos.</strong></p>
<p style="text-align: justify;">Si entramos a la definición más purista del paradigma, es posible definir un objeto como todo lo que vemos en el mundo real. Desde una casa, hasta un perro o incluso una fruta, todo es reconocido de esta forma y como tal debe ser modelado para luego poder operar sobre el.</p>
<p style="text-align: justify;">Los objetos son la base de la POO, tal como indica el mismo nombre, y por ende es necesario cambiar la forma en que modelamos, diseñamos y desarrollamos aplicaciones para ajustarnos a este nuevo enfoque. Desde el inicio más básico hasta lo más avanzado, siempre operaremos en torno a ellos y serán lo que construirán y definirán los distintos procesos que utilizaremos.</p>
<p style="text-align: justify;">Un objeto es definido, y diferenciado de otros, por sus características o <strong>atributos</strong>, tal como lo vemos en la vida real. Por ejemplo, si tomamos dos casos arbitrarios que consideraríamos objetos en la vida real, como una persona y un auto, es posible ver que cada uno de ellos posee atributos que lo diferencian el uno del otro:</p>
<ul style="text-align: justify;">
<li><strong>Persona &#8211; </strong>Sus atributos serían: Nombres, Apellidos, Edad, etc.</li>
<li><strong>Auto</strong> &#8211; Sus atributos serían: Marca, color, patente, etc.</li>
</ul>
<p style="text-align: justify;">Si comparamos los ejemplos anteriores, sus atributos específicos son los que nos ayudan a diferenciar cuando hablamos de uno y cuando hablamos del otro. En el caso de la POO es exactamente lo mismo. Definimos objetos y los diferenciamos en base a sus atributos. Posteriormente, dependiendo del objeto que tratemos, operamos de acuerdo a sus características para ejecutar procesos y obtener resultados, tal como cualquier tipo de programación.</p>
<p style="text-align: justify;">Como podemos ver, esta es una definición bastante básica, e intencionalmente ha sido así considerando que este es nuestro primer acercamiento al paradigma. A medida que vayamos avanzando iremos viendo otros detalles importantes. Pero no se preocupen, con esto por ahora podremos seguir avanzando sin problemas. La intención es que vayamos comprendiendo cada concepto desde su punto de vista más básico y de a poco interiorizarnos en temas más avanzados.</p>
<h2 style="text-align: justify;">4.- Clases:</h2>
<p style="text-align: justify;">Hemos hablado de los objetos y ahora es momento de cubrir el otro punto base que habíamos indicado.</p>
<p style="text-align: justify;">¿Por dónde partir? Por lo más básico.</p>
<p style="text-align: justify;">En su definición más básica podemos decir que una clase es una plantilla que describe a un objeto. ¿Cómo lo describe? con 2 partes:</p>
<ul>
<li>Sus características.</li>
<li>Su comportamiento.</li>
</ul>
<p style="text-align: justify;">La manera en que una clase describe las características de un objeto es mediante la definición de sus atributos. Si, exactamente los mismos atributos que mencionábamos más arriba que ayudan a diferenciar a un objeto de otro. Al definirlos se nos dice que son estos, y solamente estos, los atributos reconocidos para tal objeto y los que nos servirán como base para operar en nuestras aplicaciones.</p>
<p style="text-align: justify;">Por otro lado, describe el comportamiento de un objeto mediante la definición de métodos, los cuales operan y ejecutan tareas sobre los atributos de un objeto en particular entregándonos resultados para su respectivo despliegue.</p>
<p style="text-align: justify;">La estructura básica de una clase es como sigue:</p>
<ul>
<li>Definición de la clase.</li>
<li>Definición de atributos.</li>
<li>Métodos.</li>
</ul>
<p>Tan simple como eso. A medida que veamos ejemplos podremos ir desglosando cada una de esas partes para un análisis más detallado.</p>
<h2>5.- Métodos:</h2>
<p style="text-align: justify;">Un método es una función, declarada en una clase, que tiene como fin operar sobre un objeto para ejecutar tareas sobre sus atributos y obtener resultados, ya sea para seguir operando, o bien para entregar una salida al sistema y desplegarla en pantalla al usuario de la aplicación.</p>
<p style="text-align: justify;">Tal como cuando se definían funciones en el desarrollo estructurado, los métodos corresponden a un tipo de dato que debe coincidir con el resultado que retornan.</p>
<p style="text-align: justify;">Por ej: Podemos definir un método de tipo int que se llame retornaEdad y que devuelva un entero que contiene la edad de un objeto de tipo persona. Si este método fue definido como entero, no puede devolver un tipo de dato distinto, debido a su definición inicial.</p>
<p style="text-align: justify;">Todos los métodos que definamos deben devolver un tipo de dato que coincida con su definición, a excepción de los tipo <strong>void</strong>, que tal como en la programación estructurada, pueden no devolver nada.</p>
<p style="text-align: justify;">También, al igual que en las funciones, los métodos pueden recibir parámetros que pueden ser utilizados en sus operaciones internas para producir resultados.</p>
<p style="text-align: justify;">En una clase cualquiera, declararemos siempre como mínimo 2 tipos de métodos: 1 que crea el objeto <em>(constructor &#8211; que veremos en el próximo número)</em> y 1 o más que operen sobre el objeto creado.</p>
<p style="text-align: justify;">Con esta definición de los métodos, daremos por concluida la parte 11 de Cómo aprender a programar y no morir en el intento. Sabemos que este número ha sido mucho más conceptual que técnico y práctico, pero tengan paciencia. Los conceptos explicados acá son necesarios de entender antes de empezar a meter mano de lleno, algo que haremos desde el próximo número cuando ya empecemos a codificar nuestra primera aplicación.</p>
<p style="text-align: justify;">A contar de la parte 12 ya comenzaremos a operar bajo un modelo de una parte de conceptos y un ejemplo al final de cada número, con el fin de que vayamos soltando la mano y vayamos aplicando todo lo que veamos.</p>
<p style="text-align: justify;">En la próxima edición de &#8216;Cómo aprender a programar y no morir en el intento&#8217;:</p>
<ol>
<li>El Constructor <em>(Y no hablamos de Bob)</em>.</li>
<li>Permisos.</li>
<li>Clase principal.</li>
<li>Creando nuestra primera aplicación en POO.</li>
</ol>
<p>Por ahora, como siempre, les recordamos que este tutorial ha sido:</p>
<p><img class="aligncenter" src="http://farm4.static.flickr.com/3043/3056524059_ed7150e191_o.jpg" alt="" width="400" height="314" /></p>
<p>Cualquier duda o comentario que puedan tener, los invitamos a dejarnos unas líneas en el área habilitada a continuación.</p>
<p>Esperamos que este tutorial haya sido de utilidad para Uds.</p>
<p>Muchas gracias por leer y será hasta una próxima oportunidad.</p>
<p style="text-align: center;"><strong>Staff CLH</strong></p>
<p style="text-align: justify;">
<p style="text-align: justify;">
<p style="text-align: justify;">
<p style="text-align: justify;">
]]></content:encoded>
			<wfw:commentRss>http://www.comolohago.cl/2010/04/27/como-aprender-a-programar-y-no-morir-en-el-intento-parte-11/feed/</wfw:commentRss>
		<slash:comments>42</slash:comments>
		</item>
		<item>
		<title>Cómo optimizar tu código en 10 pasos</title>
		<link>http://www.comolohago.cl/2010/01/10/como-optimizar-tu-codigo-en-10-pasos/</link>
		<comments>http://www.comolohago.cl/2010/01/10/como-optimizar-tu-codigo-en-10-pasos/#comments</comments>
		<pubDate>Sun, 10 Jan 2010 22:10:05 +0000</pubDate>
		<dc:creator>Xabadu</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[optimizacion]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://www.comolohago.cl/?p=2888</guid>
		<description><![CDATA[Hace algún tiempo publicamos un artículo con tips sobre como optimizar nuestros sitios Web. En esa ocasión recalcamos el hecho de que hubo algunos puntos que se nos escaparon o que queríamos profundizar de mejor manera, por lo que probablemente haríamos una nueva edición en el futuro. Bueno, el momento ha llegado, aunque no precisamente [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><img class="aligncenter" src="http://farm3.static.flickr.com/2592/4131150508_09003ac297_o.png" alt="" width="400" height="113" />Hace algún tiempo publicamos un artículo con tips sobre <a href="http://www.comolohago.cl/2009/11/24/como-optimizar-tu-sitio-web-en-10-pasos/" target="_blank">como optimizar nuestros sitios Web</a>. En esa ocasión recalcamos el hecho de que hubo algunos puntos que se nos escaparon o que queríamos profundizar de mejor manera, por lo que probablemente haríamos una nueva edición en el futuro. Bueno, el momento ha llegado, aunque no precisamente continuando el mismo tema, si no que algo relacionado. Hoy les traemos una segunda parte enfocada netamente a código, compuesta de consejos y buenas prácticas que nunca están demás, especialmente en estos momentos que casi todo lo que vemos en Web envuelve, aunque sea en una pequeña parte, programación.</p>
<p style="text-align: justify;">El detalle, como siempre, después del salto.</p>
<p style="text-align: justify;"><span id="more-2888"></span></p>
<h1 style="text-align: center;">Cómo optimizar tu código en 10 pasos</h1>
<p style="text-align: justify;">Al no haber implementos necesarios <em>(a excepción quizás de un editor Web)</em>, vamos de lleno al contenido:</p>
<p style="text-align: justify;">El siguiente tutorial está compuesto de un conjunto de consejos y buenas prácticas a la hora de programar. A pesar de que está orientado a Web, algunos puntos son aplicables a otro tipo de lenguajes en los que se puede extrapolar.</p>
<h2 style="text-align: justify;">1.- Reutilización de variables</h2>
<p style="text-align: justify;">En la programación, las variables en las que almacenamos datos tienen lo que llamamos un <em>&#8220;ciclo de vida&#8221;</em>: Desde su nacimiento <em>(el momento en el que las declaramos)</em> hasta su muerte <em>(última línea en que han sido utilizadas)</em>, toman distintos valores y forman parte de una serie de procesos que nos llevan a obtener resultados.</p>
<p style="text-align: justify;">Posterior a su último uso, estas variables permanecen sin prestar utilidad. A pesar de que muchos lenguajes tienen implementada una característica conocida como recolector de basura, el cual se encarga de desocupar o limpiar todas las áreas de memoria que se encuentran utilizadas pero inactivas, en muchas ocasiones esto no ocurre o existe un periodo durante la ejecución de un programa en que seguimos creando variables y vamos ocupando más y más áreas de memoria, lo que adicionalmente nos puede llevar a confusión con el nombre de las mismas.</p>
<p style="text-align: justify;">Es por esto que es recomendable, si vemos que hemos dejado de utilizar una variable en particular, reutilizarla, siempre y cuando no afecte el código donde las usamos originalmente. Por ejemplo, en vez de usar esto:</p>
<pre class="php" title="code">i=0;
while(i&lt;10)
{
    echo 'Hola mundo';
    i++;
}

j=0;
while(j&lt;10)
{
    echo 'Adios!';
    j++;
}</pre>
<p style="text-align: justify;">Podemos utilizar esto, obteniendo el mismo resultado de manera más óptima:</p>
<pre class="php" title="code">i=0;
while(i&lt;10)
{
    echo 'Hola mundo';
    i++;
}
while(i&gt;0)
{
    echo 'Adios!';
    i--;
}</pre>
<p style="text-align: justify;">No solo reutilizamos la misma variable para ejecutar ámbas tareas, sino que a su vez optimizamos el código, mejorando la ejecución final.</p>
<p style="text-align: justify;">Claramente es un ejemplo bastante básico, pero nos sirve para ilustrar el punto. A medida que nuestras aplicaciones van creciendo, necesitamos manipular una mayor cantidad de variables, por lo que puede volverse algo confuso de manejar. La reutilización nos sirve para tener un mejor control de lo que tenemos y al mismo tiempo nos permite hacer nuestro código mucho más simple.</p>
<h2 style="text-align: justify;">2.- Nombrar como corresponde</h2>
<p style="text-align: justify;">Escribir código es de cierta forma contar una historia. Desde la declaración o nacimiento de las variables, hasta lo que hace cada una de ellas hasta el final, tenemos actos claros y definidos que permiten a cualquiera con conocimientos de programación poder seguir la historia del principio hasta el término. Y como tal, es importante tener consistencia en lo que escribimos, con respecto al nombre que le damos a las variables y funciones que utilizamos.</p>
<p style="text-align: justify;">En lo anterior recalcamos un hecho muy importante: <strong>todo el código que escribamos será revisado por alguien</strong>. Ya sea otros programadores o bien nosotros mismos más adelante cuando queramos optimizar o reutilizar, siempre habrá alguien que deba hacer la traza del código y ver que hace cada cosa. Es por esto que es importante que mantengamos concordancia con respecto a los nombres y seguir una lógica que nos permita mantener un orden y claridad a futuro.</p>
<p style="text-align: justify;">Por ejemplo, si recibimos los datos de un usuario a través de un formulario, es bueno que las variables a las que asignemos valores tengan un prefijo definido <em>(por ejemplo usuario)</em>. De esta forma, cuando nos encontremos 30 líneas más abajo y necesitemos recurrir a ellas, ya sabremos bajo que estructura trabajamos y minimizaremos el margen de error.</p>
<p style="text-align: justify;">Existen 2 convenciones definidas para nombrar elementos a la hora de programar, que si bien no es obligación usarlas, si pueden servir en demasía:</p>
<ul>
<li><strong>camelCase:</strong> En esta, la primera letra de cada palabra nueva lleva mayúscula, a excepción de la primera. Ej: $usuarioClave o function devuelveDatos.</li>
<li><strong>underscore:</strong> En la cual cada palabra es separada por un underscore o <em>guión bajo</em>. Ej: $usuario_clave o function devuelve_datos.</li>
</ul>
<p style="text-align: justify;">Al programar somos libres de definir nuestras propias reglas para nombrar. No obstante, si estamos realizando trabajo colaborativo con otros programadores, es bueno utilizar alguna de las convenciones aceptadas, con el fin de estandarizar el trabajo y hacer todo más entendible para los demas. Lo importante es definir una estructura y un estándar que nos permita hacer más uniforme nuestro código y de esta forma hacerlo mucho más entendible.</p>
<h2 style="text-align: justify;">3.- Agrupar el código</h2>
<p style="text-align: justify;">Si tomamos cualquier programa que hayamos escrito en el pasado, podremos apreciar que dentro de el, hay pequeñas secciones de código relacionadas entre sí por las funciones o tareas que realizan y que pueden o no tener directa relación con lo que viene líneas más abajo. Por un tema de orden, y para facilitar la documentación <em>(punto que veremos más adelante)</em> es bueno ir agrupando estas secciones y separarlas del resto del código con una línea en blanco. De esta forma, cada vez que necesitemos modificar una porción del programa será mucho más sencillo aislarlas y trabajar sobre ellas, ya que sabremos exactamente en donde empieza y donde termina esa parte del programa.</p>
<p style="text-align: justify;">Por ejemplo, en un programa donde recibimos datos a través de un formulario, los insertamos en una base de datos y desplegamos el resultado al visitante:</p>
<pre class="php" title="code">$usuario_id = $_POST["usuario_id"];
$usuario_clave = $_POST["usuario_clave"];
$usuario_correo = $_POST["usuario_correo"];

$conexion = mysql_connect("localhost", "usuariobd", "clavebd");
mysql_select_db("mibd");

$consulta = "INSERT INTO usuarios VALUES('$usuario_id', '$usuario_clave',
'$usuario_correo')";
$resultado = mysql_query($consulta);

echo 'El usuario se ha creado satisfactoriamente';</pre>
<p style="text-align: justify;">En el código anterior podemos ver claramente que hace cada parte del programa: Primero recibimos los datos desde un formulario, luego hacemos la conexión y selección de base de datos, posterior a eso ejecutamos la consulta y finalmente mostramos el mensaje de éxito al usuario. Claro y limpio. Si al momento de ejecutar encontramos un error en una de las partes será mucho más sencillo volver a ella, ajustar y volver a probar.</p>
<h2 style="text-align: justify;">4.- Indentar el código</h2>
<p style="text-align: justify;">Probablemente los 2 errores más clásicos que obtenemos al programar son la ausencia del punto y coma ( ; ) al terminar una sentencia y la falta de una llave de apertura o cierre en una iteración.</p>
<p style="text-align: justify;">Sobre el primero no es mucho lo que se pueda hacer, más que fijarse, pero sobre el segundo una de las causas más comunes de la ocurrencia de este error es la falta de indentación del código, lo que muchas veces nos hace confundir una llave de otra iteración con la que estamos escribiendo actualmente, lo que puede llevar a 2 situaciones, o bien el código no se ejecuta bien, o la iteración se ejecuta como sub-sección de otra, lo que puede llevar a resultados aún peores.</p>
<p style="text-align: justify;">Adicional a lo anterior, y tal como hemos remarcado en casi todos los puntos anteriores: <strong>orden</strong>. Siempre, y repito, <strong>siempre</strong> deberemos releer el código en algún momento y si bien cuando lo escribamos sabremos perfectamente que hace cada parte, no será así al tiempo después, por lo que mientras más ordenado y estructurado lo mantengamos, más sencillo será volver a trabajar sobre el.</p>
<p style="text-align: justify;">Así que recapitulando, esto <strong>no</strong> es correcto:</p>
<pre class="php" title="code">while(i&lt;10)
{
if(x == 'Letra equis')
{
echo 'Es la letra equis!';
}
else
{
echo 'No es la letra equis!';
}
}</pre>
<p style="text-align: justify;">Esto <strong>si </strong>es correcto:</p>
<pre class="php" title="code">while(i&lt;10)
{
    if(x == 'Letra equis')
    {
        echo 'Es la letra equis!';
    }
    else
    {
        echo 'No es la letra equis!';
    }
}</pre>
<p style="text-align: justify;">De esta forma, a primera vista ya sabemos que el if y el else se ejecutarán dentro del while y cada vez que se repita la iteración, queda todo más ordenado y hasta estéticamente se ve mejor.</p>
<h2 style="text-align: justify;">5.- No repetir, menos repetir y sobretodo no repetir</h2>
<p style="text-align: justify;">Este es un error bastante común que todos cometemos, especialmente cuando empezamos a programar y de forma inconsciente. Es natural que dentro de nuestros programas escribamos una, y otra, y otra vez el mismo código, o que bien en distintos programas de una misma aplicación <em>(por ej. en distintas páginas PHP que forman parte de un mismo sistema) </em>repitamos el mismo proceso o tengamos líneas repetidas.</p>
<p style="text-align: justify;">La gracia de la programación es justamente evitar eso y nos entrega una serie de herramientas a tener en consideración. Tal como utilizamos ciclos para ejecutar una misma tarea varias veces, siempre es posible parametrizar un proceso. Solo bastante notar que es lo que estamos repitiendo, descubrir o definir el algoritmo, buscar los parámetros y formar una función a la que podamos llamar que haga la tarea independiente de los valores entregados.</p>
<p style="text-align: justify;">Por otro lado, ¿tenemos un pié de página que se repite en cada página del sitio?, ¿un menú fijo que aparece en cada sección?. Hagamos uso de los includes y requires que PHP nos entrega, definamos funciones y plantillas que podamos reutilizar una y otra vez sin problemas. Una de las mayores bellezas de la programación es justamente esa: <strong>reutilizar</strong>. Podemos adaptar un mismo trozo de código para múltiples situaciones, haciendo la ejecución mucho más rápida y armónica.</p>
<h2 style="text-align: justify;">6.- Orden en sentencias SQL</h2>
<p style="text-align: justify;">Esta es una costumbre personal que adopté cuando empecé a hacer mis primeras armas en programación Web, por lo que fue una agradable sorpresa ver que estaba considerado como una buena práctica, y por eso hoy la remarcamos acá.</p>
<p style="text-align: justify;">Las sentencias SQL pueden llegar a ser largas, y por ende complejas de leer, especialmente si están insertas en una maraña de código PHP y/o HTML, por lo que debemos hacer lo posible para mantener un orden dentro de ellas y así hacerlas más fáciles de revisar en caso de errores. ¿A qué nos referimos con esto?, en particular a un punto: Poner en mayúscula las palabras reservadas de SQL. Esto nos permitirá siempre saber a primera vista que es lo que se hace y no nos llevará a confusión en caso de que alguna tabla o variable con la que estemos trabajando tenga un nombre similar a ellas. Por ejemplo:</p>
<pre class="sql" title="code">SELECT auto_patente, auto_marca, auto_color, auto_id_propietario,
propietario_nombre, propietario_telefono FROM auto a,
propietario p WHERE auto_id_propietario = propietario_rut
ORDER BY auto_patente DESC</pre>
<p style="text-align: justify;">Es mucho más sencilla de leer que:</p>
<pre class="php" title="code">select auto_patente, auto_marca, auto_color, auto_id_propietario,
propietario_nombre, propietario_telefono from auto a,
propietario p where auto_id_propietario = propietario_rut
order by auto_patente desc</pre>
<p style="text-align: justify;">Cuando estemos revisando código en texto plano a las 3 AM buscando el fatídico error agradecerán destacar las palabras reservadas, las cuales si se fijan, establecen una separación entre las distintas partes de la consulta.</p>
<h2 style="text-align: justify;">7.- No reinventar la rueda</h2>
<p style="text-align: justify;">Famosa frase que más de alguno ha escuchado anteriormente. Al programar, muchas veces tenemos la mala costumbre de querer hacer todo y confundimos la propiedad sobre una aplicación con generar el 100% del código. Nada más alejado de la realidad. Una de las gracias de esta gran red llamada Internet <em>(¿Inter.. net?)</em> es la cantidad de recursos que tenemos a nuestra disponibilidad, desde clases a trozos de código, es muy probable que muchas de las funcionalidades que necesitamos implementar ya hayan sido desarrolladas y puestas a disposición para utilizarlas, así que ¿por qué no aprovecharlas?.</p>
<p style="text-align: justify;">No tiene nada de malo, y en realidad es muy ventajoso. No perdamos tiempo reinventado la rueda, y mejor veamos que podemos construir a partir de ella. No hay que tener dudas sobre incorporar librerías externas a nuestros desarrollos, siempre que respetemos cualquier licencia bajo las que hayan sido liberadas obviamente. Esto nos permitirá ahorrar un tiempo considerable que podemos dedicar a mejorar otras partes más críticas de la aplicación y mejorar los tiempos totales del desarrollo, que es algo que siempre debemos vigilar.</p>
<p style="text-align: justify;">Lo más importante de recordar es que ser un buen programador no significa hacer todo desde cero, si no que tener la habilidad de identificar que integraciones podemos hacer con herramientas existentes y optimizar así el tiempo total de trabajo.</p>
<h2 style="text-align: justify;">8.- Codificar genéricamente</h2>
<p style="text-align: justify;">Un par de puntos más atrás hablábamos justamente de no repetir código. Este punto va precisamente de la mano. En muchos desarrollos en los que trabajemos a través del tiempo, veremos que es necesario desarrollar funcionalidades similares a las que hemos trabajado en el pasado, por lo que un buen consejo es hacer desarrollos genéricos con el fin de poder reutilizarlos y ahorrar tiempo.</p>
<p style="text-align: justify;">Por ejemplo, si inicialmente hacemos un sistema que incluya un registro de usuarios y en otro sistema necesitamos de lo mismo, ¿por qué no desarrollar una función genérica que reciba los parámetros necesarios para crear el usuario y así reutilizar bajo distintas situaciones?. De tal forma son muchos los casos en los que podremos ver que es posible reutilizar código de desarrollos anteriores, así que ahorremos tiempo y preparemos código estándar para utilizar.</p>
<h2 style="text-align: justify;">9.- Revisar código de otros programadores</h2>
<p style="text-align: justify;">Hace algún tiempo tuve la fortuna de trabajar como ayudante en un curso de programación gráfica en la Universidad, lo que me dió la oportunidad de revisar código de otros desarrolladores todas las semanas, una experiencia a la que todos deberíamos someternos en algún momento.</p>
<p style="text-align: justify;">Todos pensamos de forma distinta, y como tal, todos encontramos distintas soluciones o distintas formas de ejecutar una solución en particular, por lo que siempre es bueno revisar código de otros programadores, ya sea en librerías que descargamos o en sistemas que tengamos la posibilidad de ver. Eso nos ampliará la visión que tenemos sobre un lenguaje en particular y muchas veces nos permitirá ver formas más óptimas que las nuestras de codificar, lo que podremos incorporar a futuro.</p>
<p style="text-align: justify;">De la mano con lo anterior, siempre es una buena práctica plantearse nuevos desafíos al momento de hacer un desarrollo comparado con lo que hemos hecho anteriormente, y revisando código de otros programadores es una buena forma de plantearselos.</p>
<h2 style="text-align: justify;">10.- Documentar como un campeón</h2>
<p style="text-align: justify;">Uno de los puntos más importantes, sino el más importante, de esta guía. No podemos enfatizar lo suficiente la importancia de documentar el código y sobretodo de hacerlo correctamente.</p>
<p style="text-align: justify;">Si hay un punto en común de casi todo lo que vimos hoy, es el de facilitar la revisión del código, ya sea para otros desarrolladores o para nosotros mismos a futuro, y la documentación es fundamental en aquella tarea. Comentar que hace cada función, que rol cumple una variable en especial o porque hicimos algo de cierta manera será clave cuando los recuerdos no sean tan frescos en el futuro y necesitemos hacer modificaciones sobre el código.</p>
<p style="text-align: justify;">Adicionalmente a lo anterior, no es bueno exagerar. Si bien mientras más documentado esté el código será mejor, es bueno evitar comentarios obvios. Por ejemplo, si tenemos un ciclo que lo único que hace es mostrar el valor de una variable, no es necesario comentarlo, ya que a primera vista se puede ver sin problemas lo que hace.</p>
<p style="text-align: justify;">Así que en resumen es eso, comentar, pero ser criterioso a la hora de hacerlo. A final de cuentas es por nuestro propio bien, así que estimemos de forma correcta cuando y como hacerlo.</p>
<p style="text-align: justify;">Y con eso terminamos esta sencilla guía sobre 10 consejos para optimizar nuestro código, la que esperamos que sea de utilidad para todos aquellos dedicados a la programación o que buscan aprender más al respecto.</p>
<p style="text-align: justify;">Como siempre, les recordamos que este tutorial ha sido:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm4.static.flickr.com/3043/3056524059_ed7150e191_o.jpg" alt="" width="400" height="314" /></p>
<p style="text-align: justify;">Cualquier duda o comentario que puedan tener, los invitamos a dejarnos unas líneas en el área habilitada a continuación.</p>
<p style="text-align: justify;">Muchas gracias por leer y será hasta una próxima oportunidad.</p>
<p style="text-align: center;"><strong>Staff CLH</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.comolohago.cl/2010/01/10/como-optimizar-tu-codigo-en-10-pasos/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Cómo crear archivos Excel desde PHP &#8211; Parte 2</title>
		<link>http://www.comolohago.cl/2009/09/24/como-crear-archivos-excel-desde-php-parte-2/</link>
		<comments>http://www.comolohago.cl/2009/09/24/como-crear-archivos-excel-desde-php-parte-2/#comments</comments>
		<pubDate>Thu, 24 Sep 2009 22:41:43 +0000</pubDate>
		<dc:creator>Xabadu</dc:creator>
				<category><![CDATA[Excel]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Exportar]]></category>

		<guid isPermaLink="false">http://www.comolohago.cl/?p=2168</guid>
		<description><![CDATA[
Hace algún tiempo, Jorge Nitales nos enseñaba como exportar a Excel desde PHP, mediante un sencillo método en el que mediante el envío de cabeceras era posible formatear un documento para ser leído desde Excel.
Como en CLH estamos en constante investigación para presentar nuevos métodos y alternativas para hacer las cosas, hoy les traemos, mediante [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter" src="http://farm4.static.flickr.com/3499/3949895910_148a4e23c2.jpg" alt="" width="400" height="96" /></p>
<p style="text-align: justify;">Hace algún tiempo, Jorge Nitales nos enseñaba <a href="http://www.comolohago.cl/2009/02/17/como-exportar-a-excel-desde-php/" target="_blank">como exportar a Excel desde PHP</a>, mediante un sencillo método en el que mediante el envío de cabeceras era posible formatear un documento para ser leído desde Excel.</p>
<p style="text-align: justify;">Como en CLH estamos en constante investigación para presentar nuevos métodos y alternativas para hacer las cosas, hoy les traemos, mediante un sencillo tutorial una nueva forma para que puedan generar archivos en formato Excel de forma rápida y con una flexibilidad increible en cuanto a la configuración del documento.</p>
<p style="text-align: justify;">El detalle, como siempre, después del salto.</p>
<p style="text-align: justify;"><span id="more-2168"></span></p>
<h1 style="text-align: center;">Cómo crear archivos Excel desde PHP</h1>
<p style="text-align: justify;">En el tutorial pasado,  Jorge Nitales nos enseñaba un proceso en el cual, mediante el uso de cabeceras, hacíamos una exportación directa de un archivo en formato HTML, el cual era convertido y enviado a quien ejecutaba el código en formato xls.</p>
<p style="text-align: justify;">Si bien ese método presenta ventajas notables, como principalmente su rapidez y facilidad de generación de los archivos, así como la sencillez de la organización de la información del documento <em>(ya que podíamos hacer usos de tablas para tabular los datos)</em>, por otro lado se presentan las desventajas de que el archivo creado no es realmente un formato propio de Excel y por ende presenta una pequeña advertencia al abrirlo <em>(aunque funciona sin problemas, puede presentar alguna mala experiencia para los usuarios)</em>, lo cual puede traer algunos problemas, especialmente si estamos trabajando con alguna clase en PHP para leer estos archivos generados.</p>
<p style="text-align: justify;">Hoy presentaremos un nuevo método, en el cual utilizaremos un paquete de <strong>PEAR</strong>, el cual está diseñado especialmente para crear archivos de este tipo y nos proveerá de una serie de métodos para darle formato hasta el más mínimo detalle del documento, permitiéndonos incluso bloquear y proteger las hojas y/o celdas.</p>
<p style="text-align: justify;">Antes de empezar:</p>
<blockquote>
<h2 style="text-align: justify;">¿Qué es PEAR?</h2>
<p style="text-align: justify;">PEAR es un conjunto de componentes reutilizables especialmente diseñado para el uso con PHP. Es posible descargar e instalar una serie de paquetes pertenecientes a el, los cuales a su vez nos proveen una serie de clases para realizar distintos tipos de operaciones, ya sea de manipulación de cierto tipo de archivos hasta procesos de imágenes, red e incluso integración de distintos servicios Web.</p>
<p style="text-align: justify;">Desde la versión 4.3.0 de PHP, PEAR viene incluido. De lo contrario es necesario instalarlo de forma manual.</p>
</blockquote>
<p style="text-align: justify;">Con esa explicación, vamos a lo que necesitamos:</p>
<h2 style="text-align: justify;">Implementos necesarios:</h2>
<ol style="text-align: justify;">
<li>Un servidor Web que ejecute archivos en PHP. Una buena opción es la instalación de XAMPP.</li>
<li>PEAR. Si nuestra versión de PHP es superior a la 4.3.0, lo tendremos instalado por defecto. De lo contrario cubriremos el proceso más adelante.</li>
<li>El paquete Spreadsheet Excel Writer de PEAR, que pueden encontrarlo <a href="http://pear.php.net/package/Spreadsheet_Excel_Writer" target="_blank">aqui</a>. Cubriremos su instalación más adelante.</li>
<li>Alguna versión de Excel para leer los archivos generados. Idealmente 2003 o superior.</li>
<li>Un editor Web o entorno de programación para PHP.</li>
</ol>
<p style="text-align: justify;"><strong>Nota:</strong> Si están trabajando en algún hosting y no están seguros de si está instalado PEAR o el paquete a utilizar, les recomendamos ponerse en contacto con su proveedor de servicios y ver la factibilidad de que lo instalen.</p>
<p>Con eso claro, manos a la obra:</p>
<h2>Procedimiento:</h2>
<p style="text-align: justify;">1.- Si ya contamos con PEAR instalado en nuestro servidor, podemos adelantarnos estos pasos. De lo contrario, debemos ir al directorio donde tenemos la instalación de PHP <em>(Si instalamos Xampp, sería c:\xampp\php\)</em>.</p>
<p style="text-align: justify;">2.- Dentro de ese directorio encontraremos un archivo llamado <strong>go-pear.bat</strong></p>
<p style="text-align: justify;"><strong><img class="aligncenter" src="http://farm3.static.flickr.com/2668/3949895440_d91e249444.jpg" alt="" width="500" height="346" /></strong></p>
<p style="text-align: justify;">3.- Ejecutamos el archivo y se iniciará la instalación de PEAR. Si al iniciar nos aparece algún Warning o Error, es muy probable que ya contemos con PEAR instalado en nuestro sistema, por lo que no será necesario llevar a cabo el proceso.</p>
<p style="text-align: justify;">4.- Una vez que termine la instalación, debemos proceder a la instalación del paquete Spreadsheet Excel Writer. Para eso vamos a <strong>Menu Inicio &gt; Ejecutar</strong> y escribimos <strong>cmd</strong> para abrir Símbolo de sistema.</p>
<p style="text-align: justify;">5.- Con Símbolo de sistema abierto, nos trasladamos al directorio de PHP, el mismo donde hicimos la instalación de PEAR y escribimos el siguiente comando:</p>
<blockquote>
<p style="text-align: justify;">pear install Spreadsheet_Excel_Writer-0.9.1</p>
</blockquote>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm3.static.flickr.com/2510/3949895546_9ced3d952e.jpg" alt="" width="500" height="43" /></p>
<p style="text-align: justify;">6.- Al ejecutar el comando anterior, se instalará el paquete:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm3.static.flickr.com/2442/3949116653_24c6923972.jpg" alt="" width="500" height="35" /></p>
<p style="text-align: justify;">7.- Con esto ya tenemos nuestro paquete instalado y podemos empezar a programar. Para esto abrimos nuestro editor Web o entorno de programación para PHP y creamos un nuevo archivo al que llamaremos <strong>ejemplo.php</strong>.</p>
<p style="text-align: justify;">8.- Generaremos un código como el siguiente <em>(comentarios en negrita, cursiva y entre /* y */):</em></p>
<blockquote>
<p style="text-align: justify;">&lt;?php<br />
<em><strong>/* Llamamos a la clase que ejecutará la exportación a Excel. Esta clase está guardada en el directorio que tenemos habilitado por defecto en nuestro php.ini para los include y require. Si no hemos modificado el php.ini no debemos cambiar nada acá */</strong></em><br />
require_once &#8216;Spreadsheet/Excel/Writer.php&#8217;;</p>
<p><em><strong>/* Creamos un nuevo objeto de tipo Spreadsheet_Excel_Writer que refleja un nuevo libro de Excel */</strong></em><br />
$libro = new Spreadsheet_Excel_Writer();</p>
<p><em><strong>/* Definimos mediante el método send que el archivo debe enviarse al usuario al ejecutar el código y le damos el nombre que tendrá. En este caso ejemplo.xls */</strong></em><br />
$libro-&gt;send(&#8216;ejemplo.xls&#8217;);</p>
<p><em><strong>/* Definimos una variable y se la asignamos a nuestro objeto como una hoja del mismo mediante el método addWorksheet, el cual lleva como parámetro el nombre de la hoja. Tal como si crearamos una en un libro normal de Excel */ </strong></em><br />
$hoja =&amp; $libro-&gt;addWorksheet(&#8216;Hoja de prueba&#8217;);</p>
<p><em><strong>/* Escribimos los datos en la hoja mediante el método write, el cual toma como parámetros el número de fila, número de columna y el contenido. Si es texto debe ir entre comillas como una cadena. */</strong></em><br />
$hoja-&gt;write(0, 0, &#8216;Nombre&#8217;);<br />
$hoja-&gt;write(0, 1, &#8216;Apellido&#8217;);<br />
$hoja-&gt;write(1, 0, &#8216;Maria&#8217;);<br />
$hoja-&gt;write(1, 1, &#8216;Lopez&#8217;);<br />
$hoja-&gt;write(2, 0, &#8216;Eulalio&#8217;);<br />
$hoja-&gt;write(2, 1, &#8216;Ramirez&#8217;);<br />
$hoja-&gt;write(3, 0, &#8216;Lalo&#8217;);<br />
$hoja-&gt;write(3, 1, &#8216;Landas&#8217;);</p>
<p><em><strong>/* Mediante el método close cerramos y enviamos el archivo al usuario */</strong></em><br />
$libro-&gt;close();<br />
?&gt;</p></blockquote>
<p style="text-align: justify;">9.- Ahora si ejecutamos <strong>ejemplo.php</strong> nos lanzará un archivo en formato excel llamado <strong>ejemplo.xls</strong></p>
<p style="text-align: justify;">Fácil y bonito, ¿no?.  Complíquemoslo un poco, démosle un poco de formato a nuestro texto.</p>
<p style="text-align: justify;">10.- Con el mismo código como base, ahora añadiremos algunas cosas. El formato se crea definiendo una variable y adjuntándola como formato a un libro en particular. Luego, cada vez que queramos utilizar ese formato, lo añadimos como parámetro al momento de escribir datos. Esto quedará más claro en nuestro ejemplo:</p>
<blockquote>
<p style="text-align: justify;">&lt;?php<br />
<em><strong>/* Llamamos a la clase que ejecutará la exportación a Excel. Esta clase está guardada en el directorio que tenemos habilitado por defecto en nuestro php.ini para los include y require. Si no hemos modificado el php.ini no debemos cambiar nada acá */</strong></em><br />
require_once &#8216;Spreadsheet/Excel/Writer.php&#8217;;</p>
<p><em><strong>/* Creamos un nuevo objeto de tipo Spreadsheet_Excel_Writer que refleja un nuevo libro de Excel */</strong></em><br />
$libro = new Spreadsheet_Excel_Writer();</p>
<p><em><strong>/* Definimos mediante el método send que el archivo debe enviarse al usuario al ejecutar el código y le damos el nombre que tendrá. En este caso ejemplo.xls */</strong></em><br />
$libro-&gt;send(&#8216;ejemplo.xls&#8217;);</p>
<p><em><strong>/* Definimos una variable y se la asignamos a nuestro objeto como una hoja del mismo mediante el método addWorksheet, el cual lleva como parámetro el nombre de la hoja. Tal como si crearamos una en un libro normal de Excel */ </strong></em><br />
$hoja =&amp; $libro-&gt;addWorksheet(&#8216;Hoja de prueba&#8217;);</p>
<p><em><strong>/* Declaramos una variable llamada negrita y la adjuntamos a nuestro libro definiendola como formato mediante el método addFormat */</strong></em><br />
$negrita = &amp;$libro-&gt;addFormat();<br />
<em><strong>/* Luego con la variable negrita, llamamos al método setBold para definir que será negrita */</strong></em><br />
$negrita-&gt;setBold();</p>
<p><em><strong>/* Repetimos la operación con la variable cursiva pero ahora llamando al método setItalic */</strong></em><br />
$cursiva = &amp;$libro-&gt;addFormat();<br />
$cursiva-&gt;setItalic();</p>
<p><em><strong>/* Escribimos los datos en la hoja mediante el método write, el cual toma como parámetros el número de fila, número de columna, el contenido y la variable con el formato que le daremos a esa celda. Si es texto debe ir entre comillas como una cadena. */</strong></em><br />
$hoja-&gt;write(0, 0, &#8216;Nombre&#8217;, $negrita);<br />
$hoja-&gt;write(0, 1, &#8216;Apellido&#8217;, $negrita);<br />
$hoja-&gt;write(1, 0, &#8216;Maria&#8217;, $cursiva);<br />
$hoja-&gt;write(1, 1, &#8216;Lopez&#8217;, $cursiva);<br />
$hoja-&gt;write(2, 0, &#8216;Eulalio&#8217;, $cursiva);<br />
$hoja-&gt;write(2, 1, &#8216;Ramirez&#8217;, $cursiva);<br />
$hoja-&gt;write(3, 0, &#8216;Lalo&#8217;, $cursiva);<br />
$hoja-&gt;write(3, 1, &#8216;Landas&#8217;, $cursiva);</p>
<p><em><strong>/* Mediante el método close cerramos y enviamos el archivo al usuario */</strong></em><br />
$libro-&gt;close();<br />
?&gt;</p></blockquote>
<p style="text-align: justify;">11.- Ejecutamos el archivo y nos enviará ejemplo.xls como descarga, el cual si lo abrimos podremos ver que tiene los datos formateados, tal como definimos:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm4.static.flickr.com/3499/3949231805_ba0bb0fbeb.jpg" alt="" width="216" height="96" /></p>
<p style="text-align: justify;">
<p style="text-align: justify;">El formato podemos manejarlo con muchos métodos, tanto de la hoja como de las celdas propiamente tal. Este paquete de PEAR nos permite personalizar todos los aspectos existentes de un libro de Excel, desde colores, codificación del texto, tamaños de letra, formatos de celda e incluso formulas. Lamentablemente son tantos métodos que necesitaríamos bastantes tutoriales para cubrirlos todos, por lo que hemos intentado cubrir su funcionamiento y enseñar la lógica de su uso para que puedan seguir experimentando y llegar al nivel de detalle que deseen.</p>
<p style="text-align: justify;">Pueden encontrar un detalle de los métodos para utilizar en la documentación de<a href="http://pear.php.net/package/Spreadsheet_Excel_Writer/docs" target="_blank"> Spreadsheet Excel Writer</a>.</p>
<p style="text-align: justify;">Ahora tenemos un método simple y seguro para exportar de PHP a Excel en caso de que necesiten mayor precisión o bien manipular los archivos después con alguna otra clase.</p>
<p style="text-align: justify;">Les recordamos que como siempre, este tutorial ha sido:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm4.static.flickr.com/3043/3056524059_52d616c96c.jpg" alt="" width="400" height="314" /></p>
<p style="text-align: justify;">Cualquier duda o comentario que puedan tener, los invitamos a dejarnos unas líneas en el área habilitada a continuación.</p>
<p style="text-align: justify;">Esperamos que este tutorial haya sido de utilidad para Uds.</p>
<p style="text-align: justify;">Muchas gracias por leer y será hasta una próxima oportunidad.</p>
<p style="text-align: center;"><strong>Staff CLH</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.comolohago.cl/2009/09/24/como-crear-archivos-excel-desde-php-parte-2/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Como hacer un diagrama de flujo</title>
		<link>http://www.comolohago.cl/2009/06/16/como-hacer-un-diagrama-de-flujo/</link>
		<comments>http://www.comolohago.cl/2009/06/16/como-hacer-un-diagrama-de-flujo/#comments</comments>
		<pubDate>Tue, 16 Jun 2009 04:51:25 +0000</pubDate>
		<dc:creator>Jorge Nitales</dc:creator>
				<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Algortimo]]></category>
		<category><![CDATA[Diagramas]]></category>
		<category><![CDATA[Flujo]]></category>

		<guid isPermaLink="false">http://www.comolohago.cl/?p=453</guid>
		<description><![CDATA[
Hoy vamos a ver como realizar un digrama de flujo, vamos a mostrar a un nivel básico, con algunos elementos.
Un diagrama de flujo es muy util a la hora de ordenar casi todo tipo de procesos, para realizar algoritmos, etc&#8230;
Para ver Como Lo Hago, vamos despues del salto.

Como hacer un diagrama de flujo
¿Que necesitamos?
- Papel [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img src="http://farm4.static.flickr.com/3545/3631547930_329954ef15.jpg?v=0" alt="" width="386" height="273" /></p>
<p style="text-align: left;">Hoy vamos a ver como realizar un digrama de flujo, vamos a mostrar a un nivel básico, con algunos elementos.<br />
Un diagrama de flujo es muy util a la hora de ordenar casi todo tipo de procesos, para realizar algoritmos, etc&#8230;</p>
<p style="text-align: left;">Para ver Como Lo Hago, vamos despues del salto.</p>
<p style="text-align: left;"><span id="more-453"></span></p>
<h1 style="text-align: center;">Como hacer un diagrama de flujo</h1>
<h3>¿Que necesitamos?</h3>
<p>- Papel y lápiz</p>
<h3>¿Como Lo Hago?</h3>
<p><strong>Nota: </strong>Primero que todo, tenemos que aclarar que, a pesar de que existe una especie de lenguaje universal, la simbologia de los diagramas de flujo puede variar, de pais a pais, empresa a empresa o incluso de persona a persona, lo importante es conocer el significado de cada uno.</p>
<p>Para este caso vamos a utilizar lo siguiente:</p>
<p><img src="http://farm4.static.flickr.com/3297/3631569070_31e78c5eff.jpg?v=0" alt="" width="124" height="56" /> : Inicio o Término del diagrama.</p>
<p><img src="http://farm4.static.flickr.com/3612/3630735355_99bc5d4fe7.jpg?v=0" alt="" width="150" height="106" />: Condición (Bifurcación)</p>
<p><img src="http://farm4.static.flickr.com/3393/3631548124_c8cfe1f756.jpg?v=0" alt="" width="160" height="112" />: Proceso</p>
<p><img src="http://farm4.static.flickr.com/3625/3630735419_a7325b38b3.jpg?v=0" alt="" width="170" height="66" />: Ingreso y Salida de datos</p>
<p><img src="http://farm4.static.flickr.com/3654/3630735159_67ec0e3397.jpg?v=0" alt="" width="56" height="48" /> : Conector</p>
<p>Vamos a tomar un problema que deseamos pasar a diagrama de flujo, por ej:</p>
<p>Calcular los promedios de un numero X de alumnos, cada uno con 3 notas, se debe mostrar por pantalla si esta aprobado o reprobado (usaremos la escala que se usa en Chile, del 1 al 7,  de un 4 para arriba esta aprobado):</p>
<p>1.- Vemos que procesos se deben realizar:</p>
<p>a) Declarar (&#8220;nombrar&#8221;) variables a utilizar: Nota1,Nota2,Nota3,Suma,Promedio<br />
b) Ingresar notas<br />
c) Sumar las notas<br />
d) El resultado de la suma, dividirlo por 3<br />
e) Ver si este nuevo resultado es mayor o igual a 4<br />
f) Si es mayor, mostrar aprobado, de lo contrario mostrar reprobado<br />
e) Pregunta si se quieren ingresar las notas de otro alumno<br />
g) Si la respuesta es si, volver al paso &#8220;b&#8221; (no es necesario volver al a, ya que las variables estan declaradas)</p>
<p>2.- Entonces, primero que todo, iniciamos el diagrama y declaramos variables:</p>
<p><img src="http://farm4.static.flickr.com/3604/3631672598_1bc22661ca.jpg?v=0" alt="" width="202" height="186" /></p>
<p>3.- Ahora ingresamos las notas:</p>
<p><img src="http://farm3.static.flickr.com/2429/3631672676_6cc5ce6019.jpg?v=0" alt="" width="206" height="164" /></p>
<p>4.- Realizamos el proceso de sumar las 3 notas:</p>
<p><img src="http://farm4.static.flickr.com/3654/3630859289_e9f0c8fdc5.jpg?v=0" alt="" width="198" height="82" /></p>
<p>5.- Dividimos la suma en 3 (Cantidad de notas, en este caso es un numero fijo):</p>
<p><img src="http://farm4.static.flickr.com/3388/3631672916_763d6070e1.jpg?v=0" alt="" width="166" height="48" /></p>
<p>6.- Vemos si es igual o mayor a 4:</p>
<p><img src="http://farm4.static.flickr.com/3615/3631672988_8a0ff35714.jpg?v=0" alt="" width="400" height="190" /></p>
<p>7.- Preguntamos si quieren calcular otro promedio:</p>
<p><img src="http://farm3.static.flickr.com/2440/3630859659_795381e03b.jpg?v=0" alt="" width="270" height="246" /></p>
<p>Y el Diagrama completo se ve así (no se puede agrandar):</p>
<p><img src="http://farm3.static.flickr.com/2458/3630859811_f23b1ac2a9.jpg?v=0" alt="" width="262" height="480" /></p>
<p>Y con esto ya tenemos nuestro diagrama de flujo.</p>
<p><img src="http://farm4.static.flickr.com/3043/3056524059_52d616c96c.jpg?v=0" alt="" width="400" height="314" /></p>
<p>Por ahora,</p>
<p>Me despido</p>
<p style="text-align: center;"><strong>Staff Comolohago.cl</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.comolohago.cl/2009/06/16/como-hacer-un-diagrama-de-flujo/feed/</wfw:commentRss>
		<slash:comments>57</slash:comments>
		</item>
		<item>
		<title>Cómo aprender a programar y no morir en el intento &#8211; Parte 10</title>
		<link>http://www.comolohago.cl/2009/03/29/como-aprender-a-programar-y-no-morir-en-el-intento-parte-10/</link>
		<comments>http://www.comolohago.cl/2009/03/29/como-aprender-a-programar-y-no-morir-en-el-intento-parte-10/#comments</comments>
		<pubDate>Sun, 29 Mar 2009 19:19:24 +0000</pubDate>
		<dc:creator>Xabadu</dc:creator>
				<category><![CDATA[Programacion]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.comolohago.cl/?p=307</guid>
		<description><![CDATA[
Se nos acabaron las imágenes humorísticas
Bienvenidos a una nueva edición de &#8220;Como aprender a programar y no morir en el intento&#8221;. Soy su anfitrión, Juan Xabadu, y tal vez me recuerden de películas como: &#8220;Querida, me caí del Taxi&#8221; y &#8220;Jurassic Park vs Forrest Gump&#8221; como siempre, los acompañare en esta gran aventura en que [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img src="http://farm4.static.flickr.com/3394/3202486022_ccea1e879b.jpg?v=0" alt="" width="400" height="300" /></p>
<p style="text-align: center;"><em>Se nos acabaron las imágenes humorísticas</em></p>
<p style="text-align: justify;">Bienvenidos a una nueva edición de &#8220;Como aprender a programar y no morir en el intento&#8221;. Soy su anfitrión, Juan Xabadu, y <span style="text-decoration: line-through;"><em>tal vez me recuerden de películas como: &#8220;Querida, me caí del Taxi&#8221; y &#8220;Jurassic Park vs Forrest Gump&#8221;</em></span> como siempre, los acompañare en esta gran aventura en que nos hemos embarcado hace bastante tiempo, dando nuestros primeros pasos en el mundo de la programación.</p>
<p style="text-align: justify;">Hoy veremos los primeros contenidos sobre métodos de búsqueda y ordenamiento, así como funciones y continuaremos con nuestro ejemplo del terminal de venta.</p>
<p style="text-align: justify;">El detalle, como siempre, después del salto.</p>
<p style="text-align: justify;"><span id="more-307"></span></p>
<h1 style="text-align: center;">Cómo aprender a programar y no morir en el intento &#8211; Parte 10</h1>
<p style="text-align: justify;">Tal como adelantábamos en el número anterior, los contenidos de hoy:</p>
<h2>Contenidos</h2>
<ol>
<li style="text-align: justify;">Métodos de ordenamiento: Método de la burbuja.</li>
<li style="text-align: justify;">Métodos de búsqueda: Método secuencial.</li>
<li style="text-align: justify;">Funciones.</li>
<li style="text-align: justify;">Añadiendo un menú al terminal de venta.</li>
</ol>
<p>Vamos, manos a la obra:</p>
<h2>1.- Métodos de ordenamiento: Método de la burbuja.</h2>
<p style="text-align: justify;">En un escenario normal, el 99,9% de los programas que realicemos operan con una cantidad de datos mediana a alta, los cuales pueden ser o no ingresados por un usuario y son almacenados en distitnos medios, ya sea en variables, arreglos o archivos entre otras cosas.</p>
<p style="text-align: justify;">Ahora, en un escenario más normal aún, estos datos nunca estarán necesariamente ordenados bajo algún criterio en particular, por lo que si necesitaramos acceder a ellos bajo un orden especial, sería imposible lograrlo por si solo.</p>
<p style="text-align: justify;">Para esto es que en la programación existen los métodos de ordenamiento, los cuales son básicamente algoritmos que realizan una lectura de una serie de datos y un posterior ordenamiento de acuerdo a ciertos criterios <em>(alfabeticamente, menor a mayor, etc).</em></p>
<p style="text-align: justify;">Existen una serie de métodos de ordenamiento como el de la burbuja, quicksort, inserción, selección, etc. Cada uno de ellos se diferencia del otro tanto en su funcionamiento como en el costo <em>(de ejecución)</em> que significan para el programa en sí.</p>
<p style="text-align: justify;"><strong>¿Qué método utilizar?</strong></p>
<p style="text-align: justify;">Si bien, como decíamos, cada método presenta ciertas ventajas por sobre otro, en ningún caso son diferencias radicales y en estricto rigor no se notan a menos que trabajemos con cantidades másivas de datos, por lo que el consejo por ahora es utilizar el método que encontremos más sencillo y/o nos acomode más. A pesar de esto hay escenarios que presentan una mejor adaptabilidad a un método en particular. Ya iremos viendo más de esto en futuras guías.</p>
<p style="text-align: justify;">Partiendo veremos uno de los métodos más conocidos y utilizados como es el <strong>método de la burbuja</strong>, llamado de esta forma por la forma en que se realiza el ordenamiento de datos, emulando una burbuja.</p>
<p style="text-align: justify;"><strong>¿Cómo funciona el método de la burbuja?</strong></p>
<p style="text-align: justify;">Este método, utilizado comunmente cuando se necesita ordenar datos dentro de un vector o una matriz, funciona mediante el uso de 4 variables:</p>
<ol>
<li style="text-align: justify;">Un vector o matriz donde están almacenados los datos.</li>
<li style="text-align: justify;">Una variable que recorre el vector.</li>
<li style="text-align: justify;">Una variable que recorre el vector una posición más adelante que la variable anterior.</li>
<li style="text-align: justify;">Una variable auxiliar.</li>
</ol>
<p style="text-align: justify;">La forma de funcionamiento es bastante simple: Nuestro vector es recorrido por una variable <em>(la definida en el número 2)</em> y por otra en una posición más adelante. Vamos realizando una comparación entre las 2 variables y si se cumple el criterio establecido se hace un movimiento circular: El valor más adelantado pasa a la variable auxiliar, el valor más atrasado pasa a la posición adelantada y el valor de la variable auxiliar pasa a la posición retrasada. Esto se realiza hasta que se alcanza el final del vector en cuestión.</p>
<p style="text-align: justify;">Veamos un ejemplo de este método de ordenamiento:</p>
<p style="text-align: justify;"><strong>Ejemplo:</strong> Ordenar un vector de tamaño 5 de menor a mayor mediante el método de la burbuja <em>(los comentarios, como siempre, en negrita, cursiva y entre /* y */)</em>:</p>
<blockquote>
<p style="text-align: justify;">#include &lt;stdio.h&gt;<br />
#include &lt;conio.h&gt;<br />
#include &lt;stdlib.h&gt; <em><strong>// Incluimos las librerías</strong></em></p>
<p>int main()<br />
{<br />
int arreglo[5], aux, i, j;<br />
<em><strong>/* Declaramos las siguientes variables:</strong></em></p>
<p><em><strong>arreglo = Un vector de 5 posiciones donde tendremos los valores.<br />
i,j = Variables para recorrer el vector.<br />
aux = Variable para guardar un valor mientras lo ordenamos<br />
*/</strong></em></p>
<p>printf (&#8220;Ingrese valores para llenar el vector:\n&#8221;);<br />
<em><strong>// Mostramos un mensaje e introducimos valores al vector</strong></em><br />
for (i=0; i&lt; 5; i++)<br />
scanf(&#8220;%d&#8221;,&amp;arreglo[i]);</p>
<p><em><strong>/* Luego, ordenamos el vector mediante el algoritmo de burbuja:</strong></em></p>
<p><strong><em>Recorremos el vector con una variable más adelantada que la otra y<br />
comparamos. Si el valor de la posición actual es mayor al de una<br />
posición más, guardamos el valor actual en la variable auxiliar,<br />
luego en la posición actual ponemos el valor de la posición siguiente<br />
y en la posición siguiente guardamos el valor de la variable auxiliar*/ </em></strong></p>
<p>for (j=1; j &lt;= 5; j++)<br />
for (i=0; i&lt; 4; i++)<br />
if (arreglo[i] &gt; arreglo[i+1])<br />
{<br />
aux = arreglo[i];<br />
arreglo[i] = arreglo[i+1];<br />
arreglo[i+1] = aux;<br />
}</p>
<p>printf (&#8220;\nValores ordenados exitosamente!\n&#8221;);<br />
<em><strong>// Mostramos el vector ordenado</strong></em><br />
for (i=0; i&lt; 5; i++)<br />
printf (&#8220;arreglo[%d] = %d\n&#8221;, i, arreglo[i]);</p>
<p>getch();<br />
}</p></blockquote>
<p style="text-align: justify;">Como podemos ver, es un algoritmo bastante simple que cumple la función solicitada, ordenar de menor a mayor aplicando el método de la burbuja. Existen otros métodos que serán de mayor utilidad cuando trabajemos con una cantidad de datos mayor, pero por ahora con este podremos cumplir el objetivo sin problemas.</p>
<p style="text-align: justify;">
<h2>2.- Métodos de búsqueda: Método secuencial</h2>
<p style="text-align: justify;">Una funcionalidad que siempre es útil al momento de hacer un programa, es la de poder buscar un dato específico del que necesitamos saber información o bien trabajar con el.</p>
<p style="text-align: justify;">En lenguajes de programación de 3a generación, orientados al proceso, como C, existen una serie de métodos de búsqueda que nos permiten cumplir esa tarea, entre ellos podemos destacar la búsqueda secuencial, la binaria, acceso directo y el trabajo mediante índices.</p>
<p style="text-align: justify;">¿En que se diferencian?, tal como en el caso de los métodos de ordenamiento, cada uno de estos métodos se separa de otro por la forma en la que trabajan y el costo de ejecución que implica para el programa en sí. Todas a su vez tienen una serie de ventajas y desventajas, siendo la más <em>&#8220;costosa&#8221;</em> de todas la búsqueda secuencial, debido a que su forma de trabajo es buscar una referencia indicada registro por registro, uno a la vez como si examináramos una serie de filas una por una hasta encontrar lo que buscamos. Sin embargo, es esta última, la más sencilla de implementar y la que menos requerimientos tiene.</p>
<p style="text-align: justify;">Su funcionamiento se explica mediante el siguiente algoritmo:</p>
<p style="text-align: justify;">Consideremos que tenemos un vector, el cual está lleno de códigos numéricos de productos de un supermercado y necesitamos buscar un producto en particular. Al ingresar el código a buscar y decirle al programa que lo ubique en tal vector, operaría de la siguiente manera:</p>
<ol>
<li style="text-align: justify;">Va a la posición 1.</li>
<li style="text-align: justify;">Compara el valor de esa posición con el ingresado a buscar.</li>
<li style="text-align: justify;">Si son iguales lanza un mensaje o guarda la posición para futuras referencias.</li>
<li style="text-align: justify;">De lo contrario pasa a la posición siguiente.</li>
<li style="text-align: justify;">Repite pasos 2,3,4.</li>
</ol>
<p style="text-align: justify;">Como podemos apreciar, es un funcionamiento simple y básico, pero que funciona. El gran problema radica cuando estamos operando con una cantidad masiva de datos, ya que los accesos a memoria serían demasiados y el costo de ejecución <em>(algo que los programadores siempre deben tener en cuenta)</em> sería alto.</p>
<p style="text-align: justify;">Adicionalmente es bueno añadir que ese ejemplo referencia a un escenario ideal donde los códigos no están repetidos. En caso de que lo estuviesen, deberíamos avisar en cada posición que se encuentre una coincidencia.</p>
<p style="text-align: justify;">Veamos un ejemplo de búsqueda secuencial:</p>
<p style="text-align: justify;"><strong>Ejemplo:</strong> Llenar un vector de tamaño 5 con números y luego buscar algún valor y mostrar por pantalla la posición en la que se encuentra:</p>
<blockquote>
<p style="text-align: justify;">#include &lt;stdio.h&gt;<br />
#include &lt;conio.h&gt;<br />
#include &lt;stdlib.h&gt; <em><strong>// Incluimos las librerías</strong></em></p>
<p>int main()<br />
{<br />
int arreglo[5],i,valor,x;<br />
<strong><em>/* Declaramos las siguientes variables:</em></strong></p>
<p><em><strong>arreglo = Un vector de 5 posiciones donde tendremos los valores.<br />
i = Variable para recorrer el vector.<br />
valor = Variable para guardar el valor a buscar<br />
x = Bandera que utilizamos para marcar que hayan valores.<br />
*/</strong></em><br />
x=0; <em><strong>// Dejamos como 0 a x, lo que significa que no se han encontrado coincidencias</strong></em><br />
printf (&#8220;Ingrese valores para llenar el vector:\n&#8221;);<br />
<em><strong>// Mostramos un mensaje e introducimos valores al vector</strong></em><br />
for (i=0; i&lt; 5; i++)<br />
scanf(&#8220;%d&#8221;,&amp;arreglo[i]);</p>
<p><em><strong>// Solicitamos que se ingrese un valor a buscar</strong></em><br />
printf(&#8220;\nIngrese un valor a buscar: &#8220;);<br />
scanf(&#8220;%d&#8221;,&amp;valor);</p>
<p><em><strong>/* Recorremos el vector y vamos comparando las posiciones con el valor a buscar,<br />
si hay una coincidencia, mostramos la posición por pantalla y marcamos la variable<br />
x con un 1 para indicar que se encontro valor */</strong></em><br />
for (i=0; i &lt; 5; i++)<br />
if (arreglo[i] == valor)<br />
{<br />
printf(&#8220;\nEl valor se encuentra en la posicion %d&#8221;,i);<br />
x=1;<br />
}<br />
if(x==0)<br />
printf(&#8220;\nNo se encontraron coincidencias&#8221;);</p>
<p>getch();</p>
<p>}</p></blockquote>
<h2>3.- Funciones</h2>
<p style="text-align: justify;">En la <a href="http://www.comolohago.cl/2008/12/como-aprender-a-programar-y-no-morir-en-el-intento-parte-6/" target="_blank">Parte 6</a> de esta saga, veíamos en una primera instancia lo que eran las funciones cuando hablabamos de pseudo-código. Los conceptos son exactamente los mismos, así como la forma de funcionamiento y operación de la función en sí, es decir:</p>
<blockquote>
<p style="text-align: justify;">tipo nombre_funcion(valor 1, valor 2&#8230; valor n)<br />
{<br />
operación 1;<br />
operación 2;<br />
.<br />
.<br />
operación n;</p>
<p style="text-align: justify;">retorno de valor;<br />
}</p></blockquote>
<p style="text-align: justify;">Veamos un ejemplo para dejar todo más claro:</p>
<p style="text-align: justify;"><strong>Ejemplo:</strong> Determinar el mayor entre 2 números mediante el uso de una función:</p>
<blockquote>
<p style="text-align: justify;">#include &lt;stdio.h&gt;<br />
#include &lt;conio.h&gt;<br />
#include &lt;stdlib.h&gt; <em><strong>// Incluimos las librerías</strong></em></p>
<p>int numero_mayor(int valor1, int valor2); <em><strong>// Declaramos inicialmente la función</strong></em><br />
int main()<br />
{<br />
int num1, num2, mayor; <em><strong>//Declaramos las variables que utilizaremos</strong></em></p>
<p><em><strong>// Pedimos que se ingresen los numeros</strong></em><br />
printf(&#8220;\nIngrese Numero 1: &#8220;);<br />
scanf(&#8220;%d&#8221;,&amp;num1);<br />
printf(&#8220;\nIngrese Numero 2: &#8220;);<br />
scanf(&#8220;%d&#8221;,&amp;num2);</p>
<p><em><strong>// A mayor le asignaremos el resultado de la función </strong></em><br />
mayor=numero_mayor(num1,num2);</p>
<p><em><strong>// Mostramos el resultado por pantalla</strong></em><br />
printf(&#8220;\nEl numero mayor es: %d&#8221;,mayor);</p>
<p>getch();</p>
<p>}</p>
<p>int numero_mayor(int valor1, int valor2) <em><strong>// Recibimos los valores</strong></em><br />
{<br />
<em><strong>// Comparamos cual es mayor y lo retornamos</strong></em><br />
if(valor1&gt;valor2)<br />
return valor1;<br />
else<br />
return valor2;<br />
}</p></blockquote>
<h2>4.- Añadiendo un menú al terminal de venta</h2>
<p style="text-align: justify;">Siguiendo con nuestro clásico ejemplo del terminal de ventas, si recordamos, la última vez habíamos dejado nuestro ejemplo adaptado para poder realizar más de una venta y vender en cada una de ellas más de un producto.</p>
<p style="text-align: justify;">Bueno, el trabajo que realizaremos hoy será confeccionar un menú para que la aplicación sea más completa y la función de ventas solo sea una parte de ese menú.</p>
<p style="text-align: justify;">Como recordaremos, al final del ejemplo anterior, teníamos el siguiente código:</p>
<blockquote>
<p style="text-align: justify;">#include &lt;stdlib.h&gt;<br />
#include &lt;stdio.h&gt;<br />
#include &lt;conio.h&gt; /* Incluimos las librerías */</p>
<p>int codigo, cantidad, valor, total, vuelto, pago; /* Declaramos las variables que usaremos en el proceso */<br />
int ok=1; /* Adicionalmente declaramos una variable ok, que nos servirá de bandera para un ciclo que usaremos */<br />
int opcion=1; /* Declaramos una variable opcion, que regulara si queremos hacer más de una venta */</p>
<p>int main()<br />
{<br />
while(opcion==1)<br />
{<br />
while(codigo!=4) /* Definimos un ciclo que se ejecute siempre que el usuario no presione la tecla para finalizar la venta */<br />
{<br />
printf(&#8220;\t Lista de productos\n&#8221;); /* Listamos los productos */<br />
printf(&#8220;Codigo\t Nombre\t Precio\n&#8221;);<br />
printf(&#8220;1\t Silla\t 100\n&#8221;);<br />
printf(&#8220;2\t Puerta\t 350\n&#8221;);<br />
printf(&#8220;3\t Sillon\t 200\n&#8221;);<br />
printf(&#8220;\nPara cerrar la venta, presione 4&#8243;); /* Añadimos la opción para cerrar la venta */</p>
<p>printf(&#8220;\nIngrese el codigo del producto que desea llevar: &#8220;); /* Pedimos el código del producto */<br />
scanf(&#8220;%d&#8221;,&amp;codigo);    /* Leemos el código del producto */<br />
if(codigo==4) /* Si el código es igual a 4, significa que la venta está finalizada, así que cerramos el proceso de venta */<br />
break;<br />
printf(&#8220;\nIngrese la cantidad que desea llevar: &#8220;); /* Pedimos la cantidad */<br />
scanf(&#8220;%d&#8221;,&amp;cantidad); /* Leemos la cantidad */</p>
<p>if(codigo==1) /* Igualamos el código para asignar el precio */<br />
valor=100;<br />
if(codigo==2)<br />
valor=350;<br />
if(codigo==3)<br />
valor=200;</p>
<p>total=total+(valor*cantidad); /* A total le asignamos, el total acumulado hasta ahora, más el nuevo valor y nueva cantidad, multiplicados entre sí */</p>
<p>}<br />
printf(&#8220;\nEl total es de: %d&#8221;,total); /* Saliendo de la venta, indicamos el total */<br />
while(ok==1) /* Declaramos un ciclo con la variable ok, para el proceso de pago y vuelto, así se ejecutará hasta que se pague la cantidad correcta */<br />
{<br />
printf(&#8220;\nIngrese el pago: &#8220;); /* Solicitamos el pago */<br />
scanf(&#8220;%d&#8221;,&amp;pago); /* Leemos el pago */<br />
if(pago&lt;total) /* Si el pago es inferior al total, mostramos un mensaje de error */<br />
printf(&#8220;\nEl pago no es suficiente&#8221;);<br />
else /* De lo contrario, cambiamos el valor de ok para romper el ciclo y mostramos los mensajes de vuelto */<br />
{<br />
ok=0;<br />
vuelto=pago-total;<br />
printf(&#8220;\nEl vuelto es de: %d&#8221;,vuelto);<br />
}<br />
}</p>
<p>printf(&#8220;\n¿Desea hacer otra venta? (1=Si , 0=No): &#8220;); /* Preguntamos si desea hacer otra venta */<br />
scanf(&#8220;%d,&#8221;,&amp;opcion); /* Leemos la respuesta */<br />
}<br />
printf(&#8220;\nVenta finalizada&#8221;); /* Mensaje final */<br />
getch(); /* Programa en pausa hasta pulsar una tecla */</p>
<p>}</p></blockquote>
<p style="text-align: justify;">Todo aquel código se refiere a lo que nombraríamos como <em>&#8220;módulo de ventas&#8221;</em>, que es la funcionalidad principal del programa. Para confeccionar un menú, algo muy conveniente es hacer uso de un ciclo tipo do-while y un switch, de la siguiente forma, utilizando una nueva variable llamada <strong>menu</strong> para recoger la opción elegida, nuestro programa quedaría así:</p>
<blockquote>
<p style="text-align: justify;">llamado a librerías</p>
<p style="text-align: justify;">declaración de variables</p>
<p style="text-align: justify;">inicio de función <strong>main</strong></p>
<p style="text-align: justify;">do<br />
{<br />
printf(&#8220;1.- Módulo de ventas\n&#8221;);<br />
printf(&#8220;2.- Administrar productos\n&#8221;);<br />
printf(&#8220;3.- Administrar clientes\n&#8221;);<br />
printf(&#8220;4.- Cerrar sistema\n&#8221;);<br />
printf(&#8220;Ingrese opción: &#8220;);<br />
scanf(&#8220;%d&#8221;,&amp;menu);</p>
<p>switch(menu)<br />
{<br />
case 1: Aquí insertaríamos nuestro código anterior del módulo de ventas<br />
break;<br />
case 2: Por ahora en blanco, pero iría el código para administrar los productos<br />
break;<br />
case 3: Por ahora en blanco, pero iría el código para administrar los clientes<br />
break;<br />
case 4: break;<br />
}<br />
}while(menu!=4);</p>
<p style="text-align: justify;">fin de función <strong>main</strong></p>
</blockquote>
<p style="text-align: justify;">Con ese código, que dejaríamos al principio de nuestro programa, insertando el código anterior en el caso 1 del switch, le diríamos al menú que se ejecutase hasta que se seleccione la opción 4, que es cerrar sistema.</p>
<p style="text-align: justify;">No es un código difícil de implementar, solo debemos fijarnos en el orden y no tendremos problemas.</p>
<p style="text-align: justify;">Y eso sería en la edición de hoy de Como aprender a programar y no morir en el intento. En el próximo número cubriremos:</p>
<ol>
<li style="text-align: justify;">Paso de parámetros por valor y por referencia.</li>
<li style="text-align: justify;">Estructuras.</li>
<li style="text-align: justify;">Recursividad.</li>
</ol>
<p style="text-align: justify;">Como siempre, les recordamos que este tutorial ha sido:</p>
<p style="text-align: center;"><img src="http://farm4.static.flickr.com/3043/3056524059_52d616c96c.jpg?v=0" alt="" width="400" height="314" /></p>
<p style="text-align: justify;">Cualquier duda que puedan tener, los invitamos a dejarnos un comentario en el área habilitada a continuación.</p>
<p style="text-align: justify;">Esperamos que este tutorial haya sido de utilidad para Uds.</p>
<p style="text-align: justify;">Muchas gracias por leer y será hasta una próxima oportunidad.</p>
<p style="text-align: center;"><strong>Staff CLH</strong></p>
<p style="text-align: justify;">
]]></content:encoded>
			<wfw:commentRss>http://www.comolohago.cl/2009/03/29/como-aprender-a-programar-y-no-morir-en-el-intento-parte-10/feed/</wfw:commentRss>
		<slash:comments>54</slash:comments>
		</item>
		<item>
		<title>Cómo aprender a programar y no morir en el intento &#8211; Parte 9</title>
		<link>http://www.comolohago.cl/2009/01/04/como-aprender-a-programar-y-no-morir-en-el-intento-parte-9/</link>
		<comments>http://www.comolohago.cl/2009/01/04/como-aprender-a-programar-y-no-morir-en-el-intento-parte-9/#comments</comments>
		<pubDate>Sun, 04 Jan 2009 22:02:54 +0000</pubDate>
		<dc:creator>Xabadu</dc:creator>
				<category><![CDATA[Programacion]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.comolohago.cl/?p=294</guid>
		<description><![CDATA[
Empezamos ya de lleno el 2009, y que mejor que seguir con lo que el 2008 nos dió tantos dolores de cabeza ayudó a entrar de mejor forma al mundo de la programación.
Hoy, en la parte 9, o primera del 2009, seguiremos viendo contenidos del lenguaje C, así como el programa que empezamos a confeccionar [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img src="http://farm4.static.flickr.com/3115/3167692844_a70c430b22.jpg?v=0" alt="" width="400" height="294" /></p>
<p style="text-align: justify;">Empezamos ya de lleno el 2009, y que mejor que seguir con lo que el 2008 nos <span style="text-decoration: line-through;"><em>dió tantos dolores de cabeza</em></span> ayudó a entrar de mejor forma al mundo de la programación.</p>
<p style="text-align: justify;">Hoy, en la parte 9, o primera del 2009, seguiremos viendo contenidos del lenguaje C, así como el programa que empezamos a confeccionar en la edición pasada.</p>
<p style="text-align: justify;">Así que los invitamos a seguirnos, como siempre, después del salto.</p>
<p style="text-align: justify;"><span id="more-294"></span></p>
<p style="text-align: justify;">
<h1 style="text-align: center;">Cómo aprender a programar y no morir en el intento &#8211; Parte 9</h1>
<p style="text-align: justify;"><strong>Nota: </strong>Como siempre, les recomendamos, si es que no lo han hecho, leer los números anteriores de esta guía, los cuales pueden ser encontrados en nuestra <a href="http://www.comolohago.cl/category/categorias/computacion/programacion/" target="_blank">categoría de programación</a>.</p>
<p style="text-align: justify;">
<p style="text-align: justify;">Si recuerdan el número anterior, en esta ocasión veremos:</p>
<h2>Contenidos:</h2>
<ol>
<li style="text-align: justify;">Iteración Switch.</li>
<li style="text-align: justify;">Vectores.</li>
<li style="text-align: justify;">Matrices.</li>
<li style="text-align: justify;">Continuación de la confección de un terminal de venta.</li>
</ol>
<p style="text-align: justify;">
<p style="text-align: justify;">Así que vamos de lleno a la guía de hoy:</p>
<h2>1.- Iteración Switch:</h2>
<p style="text-align: justify;">En el número anterior, veíamos las iteraciones condicionales <em>if</em> y <em>else</em>, las cuales nos permitían tomar distintos caminos dentro de un programa, dependiendo de una condición determinada. Además, cuando veíamos los números sobre pseudo-lenguaje, conocímos una iteración llamada <strong>Switch</strong>, la cual presentaba una funcionalidad bastante similar, pero tal como explicábamos aquella vez, es bastante mejor para usar en casos determinados.</p>
<p style="text-align: justify;">El funcionamiento de esta iteración, ya lo hemos detallado en números anteriores, por lo que no adentraremos en repetir lo mismo, si no que veremos como funciona en lenguaje C.</p>
<p style="text-align: justify;">Ahora, una buena pregunta, es ¿Cuándo usar if/else y cuándo usar switch?. La verdad, es que como todo en la programación, es cosa de gustos. A pesar de que pueden haber casos en los que sea más cómodo y/o ordenado usar una iteración sobre otra, las 2 cumplen la misma funcionalidad, por lo que pueden ser usadas sin problemas. En lo personal, lo cual en ningún sentido es un estándar, prefiero usar iteraciones de tipo Switch cuando en los programas definimos algún tipo de menú, por un tema de orden. En un ejemplo más adelante podremos apreciar porque.</p>
<p style="text-align: justify;">Entonces, usando switch en C, lo primero que necesitamos es una variable que tome un valor <em>(todo switch <strong>debe</strong> ser inicializado por una variable)</em> y conocer los valores, o la mayoría de ellos, que pudiése tomar, como veremos en el siguiente ejemplo.</p>
<p style="text-align: justify;">Además, dentro de los casos, podemos definir un caso <strong>por defecto</strong>, el cual cubrirá todas las opciones no definidas. Esto es muy útil para prevenir que el usuario ingrese un valor que no tenemos cubierto dentro de nuestras opciones.</p>
<p style="text-align: justify;">Veamos un ejemplo.</p>
<p style="text-align: justify;"><strong>Ejemplo:</strong> Plantearemos un pequeño menú, y definiremos cada caso, utilizando una iteración de tipo switch.</p>
<blockquote>
<p style="text-align: justify;">#include &lt;stdlib.h&gt;<br />
#include &lt;stdio.h&gt;<br />
#include &lt;conio.h&gt;</p>
<p>int opcion;</p>
<p>int main()<br />
{<br />
<em><strong>/* A continuación escribimos nuestro menú, tabulando y dando saltos de línea */</strong></em><br />
printf(&#8220;\tMenu&#8221;);<br />
printf(&#8220;\n1.- Mostrar hola mundo&#8221;);<br />
printf(&#8220;\n2.- Dar los buenos dias&#8221;);<br />
printf(&#8220;\n3.- Salir&#8221;);<br />
printf(&#8220;\nIngrese su opcion: &#8220;);<br />
scanf(&#8220;%d&#8221;,&amp;opcion);<em><strong> /* Leemos la opción que ingrese el usuario *</strong></em>/</p>
<p>switch(opcion) <em><strong>// Activamos el switch con la variable opción.</strong></em><br />
{<br />
case 1:      printf(&#8220;\nHola mundo&#8221;); <em><strong>/* En el caso que ingrese 1 */</strong></em><br />
break;<br />
case 2:      printf(&#8220;\nBuenos dias&#8221;);<em><strong> /* En el caso que ingrese 2 */</strong></em><br />
break;<br />
case 3:      break; <em><strong>/* En el caso que ingrese 3 */</strong></em></p>
<p>default:     printf(&#8220;\nOpcion no valida&#8221;); <em><strong>/* Caso por defecto */</strong></em><br />
break;<br />
}<br />
getch();<em><strong> /* Ponemos el programa en pausa hasta que se presione una tecla */</strong></em><br />
}</p></blockquote>
<p style="text-align: justify;">Como podemos ver, al final de cada caso, debemos incluir la sentencia <strong>break;</strong>, que indicará que después de ejecutar las sentencias correspondientes al caso, se debe salir del switch.</p>
<p style="text-align: justify;">Compilamos y probamos. Ahora, como podrán apreciar, este switch solo se ejecuta una vez. En caso de que quisieramos hacerlo repetitivo hasta que se diga salir, podemos insertarlo dentro de un ciclo y poner como condición que se ejecute mientras no se seleccione la opción de salida.</p>
<p style="text-align: justify;">Así de simple es la iteración switch. Es de gran utilidad para ordenar nuestras opciones y en especial para utilizarlo con menús, así que es muy recomendable aprender a usarlo y manejarlo para los programas que vayamos a desarrollar.</p>
<h2>2.- Vectores:</h2>
<p style="text-align: justify;">Tal como veíamos en pseudo-lenguaje, en la programación existen unas variables especiales conocidas como arreglos, las cuales presentan la facultad de almacenar múltiples valores, ya sea unidimensionalmente o bidimensionalmente. Los vectores representan los primeros.</p>
<p style="text-align: justify;">En C, también podemos utilizar vectores, de la misma forma en la que los planteabamos para pseudocódigo, es decir, declarándolos y rellenándolos según su posición, así como las mismas condiciones para recorrerlos y leerlos.</p>
<p style="text-align: justify;">Tal como en todos los casos, no entraremos a repetir las definiciones que hemos hecho en guías anteriores y sólo nos preocuparemos de su uso en lenguaje C.</p>
<p style="text-align: justify;">Veamos un pequeño ejemplo, para que nos quede todo más claro:</p>
<p style="text-align: justify;"><strong>Ejemplo:</strong> Declararemos un vector, lo rellenaremos y luego mostraremos su contenido:</p>
<blockquote>
<p style="text-align: justify;">#include &lt;stdlib.h&gt;<br />
#include &lt;stdio.h&gt;<br />
#include &lt;conio.h&gt;</p>
<p>int vector[5]; <em><strong>// Declaramos el vector</strong></em></p>
<p>int main()<br />
{<br />
for(int i=0; i&lt;5; i++)<em><strong> /* Definimos un ciclo para llenar el vector */</strong></em><br />
{<br />
printf(&#8220;\nIngrese el valor de la posicion %d del vector: &#8220;,i);<br />
scanf(&#8220;%d&#8221;,&amp;vector[i]); <em><strong>/* Leemos los datos de cada posición */</strong></em><br />
}<br />
printf(&#8220;\nLos valores ingresados fueron: &#8220;); <em><strong>/* Mostramos los valores */</strong></em><br />
for(int i=0;i&lt;5; i++)<br />
{<br />
printf(&#8220;%d\t&#8221;,vector[i]);<br />
}<br />
getch(); <em><strong>/* Ponemos el programa en pausa hasta que se presione una tecla */</strong></em><br />
}</p></blockquote>
<p style="text-align: justify;">Como podemos ver, el procedimiento es el mismo que usabamos para pseudo-código, utilizando ciclos tanto para rellenar posiciones secuencialmente, como para leerlas, accediendo mediante el índice que marcamos con la variable i, que se va moviendo a lo largo del vector.</p>
<p style="text-align: justify;">Ahora, si nos fijamos en el ejemplo, podemos ver que dentro del ciclo for, hemos definido la variable <strong>i</strong> y no al principio del programa. Esto es posible en este tipo de ciclos, pero esa variable solamente vive dentro del búcle y no después <em>(por eso la volvemos a declarar en el segundo ciclo)</em>. Esta es una gran forma de matar variables rápidamente después de su uso y no gastar espacio innecesariamente.</p>
<p style="text-align: justify;">
<h2>3.- Matrices:</h2>
<p style="text-align: justify;">En el caso de las matrices, utilizamos procedimientos bastante similares a los de los vectores, salvo que, siendo arreglos bidimensionales, para recorrer una matriz necesitaremos de 2 ciclos, uno para las filas, y 1 para las columnas.</p>
<p style="text-align: justify;">La definición también varía en el número de dimensiones que declaramos. Si para los vectores hacíamos una declaración del tipo <em>&#8220;vector [5]&#8220;</em> por su unidimensionalidad, para las matrices aplicamos una definición del tipo <em>&#8220;matriz [5[[5]&#8220;</em>, la primera relacionada con sus filas, y la 2da con sus columnas.</p>
<p style="text-align: justify;">Veamos un ejemplo para que nos quede más claro.</p>
<p style="text-align: justify;"><strong>Ejemplo:</strong> Repetiremos el ejemplo anterior, pero en este caso utilizaremos una matriz:</p>
<blockquote>
<p style="text-align: justify;">#include &lt;stdlib.h&gt;<br />
#include &lt;stdio.h&gt;<br />
#include &lt;conio.h&gt;</p>
<p>int matriz[3][3]; <em><strong>// Declaramos la matriz</strong></em></p>
<p>int main()<br />
{<br />
for(int i=0; i&lt;3; i++)<em><strong> /* Definimos un ciclo para las filas */</strong></em><br />
{<br />
for(int j=0; j&lt;3; j++) <em><strong>/* Otro ciclo para las columnas */</strong></em><br />
{<br />
printf(&#8220;\nIngrese el valor para la fila %d y la columna %d: &#8220;,i,j);<br />
scanf(&#8220;%d&#8221;,&amp;matriz[i][j]);<br />
}<br />
}<br />
printf(&#8220;Los valores ingresados son:\n &#8220;);<br />
for (int i=0; i&lt;3; i++) <em><strong>/* Mostramos los valores ingresados, tabulando y dando salto de línea para hacer la forma de la matriz */</strong></em><br />
{<br />
for (int j=0; j&lt;3; j++)<br />
{<br />
printf(&#8220;%d\t&#8221;,matriz[i][j]);<br />
}<br />
printf(&#8220;\n&#8221;);<br />
}<br />
getch(); <em><strong>/* Ponemos el programa en pausa hasta que se presione una tecla */</strong></em><br />
}</p></blockquote>
<p style="text-align: justify;">El procedimiento es el mismo, pero solo nso enfocamos en recorrer 2 dimensiones en vez de una. A medida que vayamos utilizando vectores y matrices en nuestros programas nos iremos acostumbrando cada vez más a su funcionamiento.</p>
<h2>4.- Terminal de venta:</h2>
<p style="text-align: justify;">Si recuerdan, al final del número anterior, realizamos la confección de un terminal de venta, en el cual listabamos unos productos y realizabamos una venta, especificando el vuelto correspondiente al cliente.</p>
<p style="text-align: justify;">Hoy, seguiremos trabajando sobre ese terminal, añadiendo la funcionalidad de poder vender más de un producto en una venta y de realizar más de una venta. Si recordamos, teníamos este código:</p>
<blockquote>
<p style="text-align: justify;">include &lt;stdlib.h&gt;<br />
#include &lt;stdio.h&gt;<br />
#include &lt;conio.h&gt;</p>
<p>int codigo, cantidad, valor, total, vuelto, pago;</p>
<p>int main()<br />
{<br />
printf(&#8220;\t Lista de productos\n&#8221;);<br />
printf(&#8220;Codigo\t Nombre\t Precio\n&#8221;);<br />
printf(&#8220;1\t Silla\t 100\n&#8221;);<br />
printf(&#8220;2\t Puerta\t 350\n&#8221;);<br />
printf(&#8220;3\t Sillon\t 200\n&#8221;);</p>
<p>printf(&#8220;\nIngrese el codigo del producto que desea llevar: &#8220;);<br />
scanf(&#8220;%d&#8221;,&amp;codigo);<br />
printf(&#8220;\nIngrese la cantidad que desea llevar: &#8220;);<br />
scanf(&#8220;%d&#8221;,&amp;cantidad);</p>
<p>if(codigo==1)<br />
valor=100;<br />
if(codigo==2)<br />
valor=350;<br />
if(codigo==3)<br />
valor=200;</p>
<p>total=valor*cantidad;</p>
<p>printf(&#8220;\nEl total es de: %d&#8221;,total);<br />
printf(&#8220;\nIngrese el pago: &#8220;);<br />
scanf(&#8220;%d&#8221;,&amp;pago);<br />
if(pago&lt;total)<br />
printf(&#8220;\nEl pago no es suficiente&#8221;);<br />
else<br />
{<br />
vuelto=pago-total;<br />
printf(&#8220;\nEl vuelto es de: %d&#8221;,vuelto);<br />
}<br />
printf(&#8220;\nVenta finalizada&#8221;);<br />
getch();</p>
<p>}</p></blockquote>
<p style="text-align: justify;">Y ahora, añadiendole algunos ciclos, tendremos un código como este:</p>
<blockquote>
<p style="text-align: justify;">#include &lt;stdlib.h&gt;<br />
#include &lt;stdio.h&gt;<br />
#include &lt;conio.h&gt; <em><strong>/* Incluimos las librerías */</strong></em></p>
<p>int codigo, cantidad, valor, total, vuelto, pago; <em><strong>/* Declaramos las variables que usaremos en el proceso */</strong></em><br />
int ok=1; <em><strong>/* Adicionalmente declaramos una variable ok, que nos servirá de bandera para un ciclo que usaremos */</strong></em><br />
int opcion=1; <em><strong>/* Declaramos una variable opcion, que regulara si queremos hacer más de una venta */</strong></em></p>
<p>int main()<br />
{<br />
while(opcion==1)<br />
{<br />
while(codigo!=4) <em><strong>/* Definimos un ciclo que se ejecute siempre que el usuario no presione la tecla para finalizar la venta */</strong></em><br />
{<br />
printf(&#8220;\t Lista de productos\n&#8221;); <strong><em>/* Listamos los productos */</em></strong><br />
printf(&#8220;Codigo\t Nombre\t Precio\n&#8221;);<br />
printf(&#8220;1\t Silla\t 100\n&#8221;);<br />
printf(&#8220;2\t Puerta\t 350\n&#8221;);<br />
printf(&#8220;3\t Sillon\t 200\n&#8221;);<br />
printf(&#8220;\nPara cerrar la venta, presione 4&#8243;); <em><strong>/* Añadimos la opción para cerrar la venta */</strong></em></p>
<p>printf(&#8220;\nIngrese el codigo del producto que desea llevar: &#8220;); <em><strong>/* Pedimos el código del producto */</strong></em><br />
scanf(&#8220;%d&#8221;,&amp;codigo);    <em><strong>/* Leemos el código del producto */</strong></em><br />
if(codigo==4) <em><strong>/* Si el código es igual a 4, significa que la venta está finalizada, así que cerramos el proceso de venta */</strong></em><br />
break;<br />
printf(&#8220;\nIngrese la cantidad que desea llevar: &#8220;); <em><strong>/* Pedimos la cantidad */</strong></em><br />
scanf(&#8220;%d&#8221;,&amp;cantidad); <em><strong>/* Leemos la cantidad */</strong></em></p>
<p>if(codigo==1) <em><strong>/* Igualamos el código para asignar el precio */</strong></em><br />
valor=100;<br />
if(codigo==2)<br />
valor=350;<br />
if(codigo==3)<br />
valor=200;</p>
<p>total=total+(valor*cantidad); <em><strong>/* A total le asignamos, el total acumulado hasta ahora, más el nuevo valor y nueva cantidad, multiplicados entre sí */</strong></em></p>
<p>}<br />
printf(&#8220;\nEl total es de: %d&#8221;,total); <em><strong>/* Saliendo de la venta, indicamos el total */</strong></em><br />
while(ok==1) <em><strong>/* Declaramos un ciclo con la variable ok, para el proceso de pago y vuelto, así se ejecutará hasta que se pague la cantidad correcta */</strong></em><br />
{<br />
printf(&#8220;\nIngrese el pago: &#8220;); <em><strong>/* Solicitamos el pago */</strong></em><br />
scanf(&#8220;%d&#8221;,&amp;pago); <em><strong>/* Leemos el pago */</strong></em><br />
if(pago&lt;total) <em><strong>/* Si el pago es inferior al total, mostramos un mensaje de error */</strong></em><br />
printf(&#8220;\nEl pago no es suficiente&#8221;);<br />
else <em><strong>/* De lo contrario, cambiamos el valor de ok para romper el ciclo y mostramos los mensajes de vuelto */</strong></em><br />
{<br />
ok=0;<br />
vuelto=pago-total;<br />
printf(&#8220;\nEl vuelto es de: %d&#8221;,vuelto);<br />
}<br />
}<br />
<em><strong></strong></em><br />
printf(&#8220;\n¿Desea hacer otra venta? (1=Si , 0=No): &#8220;); <em><strong>/* Preguntamos si desea hacer otra venta */</strong></em><br />
scanf(&#8220;%d,&#8221;,&amp;opcion); <em><strong>/* Leemos la respuesta */</strong></em><br />
}<br />
printf(&#8220;\nVenta finalizada&#8221;); <em><strong>/* Mensaje final */</strong></em><br />
getch(); <em><strong>/* Programa en pausa hasta pulsar una tecla */</strong></em></p>
<p>}</p></blockquote>
<p style="text-align: justify;">Como podemos apreciar en esta nueva versión, hacemos uso de algunos ciclos. De esta forma, podemos hacer una venta de múltiples productos, y validamos el pago hasta que sea el correcto, para así completar de forma correcta la venta. Además, luego de finalizar una venta, podemos hacer otra automáticamente al señalarlo y de esta forma no necesitamos volver a ejecutar el programa cada vez que queramos vender algo.</p>
<p style="text-align: justify;">Recordemos que nuestro programa lo vamos construyendo de a poco, aún hay muchos puntos que pueden ser mejorados y eso es lo que iremos haciendo en los próximos números. Por ahora lo dejaremos aquí, pero los incentivamos a que vayan añadiendo nuevas cosas de lo que hemos ido aprendiendo.</p>
<p style="text-align: justify;">En la próxima edición de <em>&#8220;Cómo aprender a programar y no morir en el intento&#8221;:</em></p>
<ol>
<li style="text-align: justify;">Método de ordenamiento: El método de la burbuja.</li>
<li style="text-align: justify;">Método de busqueda: Búsqueda secuencial.</li>
<li style="text-align: justify;">Funciones.</li>
<li style="text-align: justify;">Continuación del términal de ventas: Añadiendo un menú.</li>
</ol>
<p>Como siempre, recuerden que este tutorial ha sido:</p>
<p style="text-align: center;"><img src="http://farm4.static.flickr.com/3043/3056524059_52d616c96c.jpg?v=0" alt="" width="400" height="314" /></p>
<p style="text-align: justify;">Cualquier duda o comentario que puedan tener, los animamos a dejarnos unas líneas en el área habilitada a continuación.</p>
<p style="text-align: justify;">Esperamos que este tutorial haya sido de utilidad para Uds.</p>
<p style="text-align: justify;">Muchas gracias por leer y será hasta una próxima oportunidad.</p>
<p style="text-align: center;"><strong>Staff CLH</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.comolohago.cl/2009/01/04/como-aprender-a-programar-y-no-morir-en-el-intento-parte-9/feed/</wfw:commentRss>
		<slash:comments>46</slash:comments>
		</item>
		<item>
		<title>Cómo aprender a programar y no morir en el intento &#8211; Parte 8</title>
		<link>http://www.comolohago.cl/2008/12/28/como-aprender-a-programar-y-no-morir-en-el-intento-parte-8/</link>
		<comments>http://www.comolohago.cl/2008/12/28/como-aprender-a-programar-y-no-morir-en-el-intento-parte-8/#comments</comments>
		<pubDate>Sun, 28 Dec 2008 21:56:39 +0000</pubDate>
		<dc:creator>Xabadu</dc:creator>
				<category><![CDATA[Programacion]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.comolohago.cl/?p=282</guid>
		<description><![CDATA[
Ya dejando un poco atrás la locura navideña, y preparándonos para recibir este año 2009, hemos decidido hacer un alto de las festividades (en confabulación con nuestro &#8220;maravilloso&#8221; servicio de hosting que nos ha fallado a diestra y siniestra, por lo que ofrecemos nuestras disculpas) y traerles un nuevo número de esta gran saga que [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img src="http://farm4.static.flickr.com/3085/3144181811_62f397f9d2.jpg?v=0" alt="" width="400" height="494" /></p>
<p style="text-align: justify;">Ya dejando un poco atrás la locura navideña, y preparándonos para recibir este año 2009, hemos decidido hacer un alto de las festividades <em>(en confabulación con nuestro &#8220;maravilloso&#8221; servicio de hosting que nos ha fallado a diestra y siniestra, por lo que ofrecemos nuestras disculpas)</em> y traerles un nuevo número de esta gran saga que <span style="text-decoration: line-through;"><em>ha sacado chispas</em></span> busca darles una pequeña manito durante sus primeros pasos del mundo de la programación.</p>
<p style="text-align: justify;">En el <a href="http://www.comolohago.cl/2008/12/como-aprender-a-programar-y-no-morir-en-el-intento-parte-7/" target="_blank">número anterior</a>, nos adentramos en nuestro primer lenguaje real, C, haciendo una larga introducción y comparación con lo que habíamos visto hasta ahora, terminando con nuestro primer programa. En esta ocasión, seguiremos adentrándonos más en el tema y terminaremos con la confección de un programa algo más complejo.</p>
<p style="text-align: justify;">Así que sin más espera, los invitamos a seguirnos después del salto, que no es en verdad un salto, sino que un <em>&#8220;leer más&#8221;</em>.</p>
<p style="text-align: justify;"><span id="more-282"></span></p>
<p style="text-align: justify;">
<h1 style="text-align: center;">Cómo aprender a programar y no morir en el intento &#8211; Parte 8</h1>
<p style="text-align: justify;"><strong>Nota:</strong> Como es habitual, les recomendamos, si no lo han hecho ya, leer los números anteriores de esta saga, que pueden encontrar en la <a href="http://www.comolohago.cl/category/categorias/computacion/programacion/" target="_blank">categoría de Programación</a> de CLH.</p>
<p style="text-align: justify;">Tal como prometimos en el número anterior, en este veremos los siguientes contenidos:</p>
<p style="text-align: justify;">
<h2>Contenidos:</h2>
<ol>
<li style="text-align: justify;">Comentarios.</li>
<li style="text-align: justify;">Leyendo datos desde teclado.</li>
<li style="text-align: justify;">Iteraciones condicionales.</li>
<li style="text-align: justify;">Ciclos o búcles.</li>
<li style="text-align: justify;">Ejercicio: Programando un terminal de venta simple.</li>
</ol>
<p style="text-align: justify;">Veremos bastante hoy, así que vamos, manos a la obra:</p>
<h2>1.- Comentarios.</h2>
<p style="text-align: justify;">Si nos hemos fijado hasta ahora, siempre que realizamos algún ejemplo o ejercicio de código, en C, Pseudo-código o bien en nuestros tutoriales de PHP, siempre ponemos las explicaciones entre unos símbolos /* y */.</p>
<p style="text-align: justify;">Esto, junto a otros símbolos, es lo que en la programación <em>(a todo nivel)</em> se conoce como <strong>comentarios</strong>.</p>
<p style="text-align: justify;">Los comentarios en la programación, si bien no son obligatorios, se convierten en una herramienta util y su mayor función es entregarnos la posibilidad de añadir pequeñas anotaciones sobre lo que estimemos conveniente, ya sea sobre el código propiamente tal u otras cosas como notas de autoría o funcionamiento del programa en sí.</p>
<p style="text-align: justify;"><strong>¿Por qué usar comentarios?</strong></p>
<p style="text-align: justify;">Principalmente por un tema de orden. Tenemos que pensar de que si bien nuestra memoria puede ser excelente, en más de alguna ocasión nos tocará revisar códigos que hayamos realizado hace algún tiempo y puede que en ese programa hayamos utilizado alguna función o lógica que no tiene sentido en este momento. Por eso el uso de comentarios nos simplifica el tener que estar mucho tiempo deduciendo lo que alguna vez hicimos. Lo mismo se presta para cuando nuestro código es revisado por terceros o bien nosotros revisamos códigos hechos por alguien más.</p>
<p style="text-align: justify;">Hay 2 formas de comentarios: los de línea simple y los de múltiples líneas. La única diferenciación es en los símbolos que utilizamos para iniciar y terminar los comentarios.</p>
<p style="text-align: justify;">Cuando los comentarios son de línea simple solo debemos añadir al principio de la línea el símbolo <strong>//</strong> . Debemos tener en cuenta de que solo será válido como comentario lo que escribamos en la misma línea. Si pasamos a otra línea lo tomará como código y nos lanzará error, por lo que debemos utilizar símbolo de comentario de múltiples líneas.</p>
<p style="text-align: justify;">Para múltiples líneas, utilizamos el mismo que hemos usado hasta ahora, o sea al principio del comentario ponemos <strong>/*</strong> y al final del comentario cerramos con <strong>*/</strong>. Todo lo que escribamos entremedio será considerado como comentario.</p>
<p style="text-align: justify;">De cualquier forma, si es que les complica recordar los símbolos para cada caso, pueden utilizar siempre el formato de múltiples líneas, que cubre comentarios ya sea en 1 línea o en varias.</p>
<h2>2.- Leyendo datos desde teclado.</h2>
<p style="text-align: justify;">Cuando trabajabamos en Pseudo-código, una de las funcionalidades que más utilizabamos, era la lectura o recepción de datos ingresados por un usuario vía teclado. Eso nos permitía interactuar de una mayor forma con quien utilizaba el programa y realizar procesamientos mucho mejores y personalizados.</p>
<p style="text-align: justify;">Pues bien, en C también podemos leer datos desde teclado, de una forma tan similar como en pseudolenguaje. Si recordamos el tutorial anterior, hablábamos de la función <strong>scanf</strong>, la cual nos permitía realizar esa tarea y que se utiliza de la siguiente forma:</p>
<blockquote>
<p style="text-align: justify;">scanf(&#8220;%tipodevariable&#8221;, &amp;nombredelavariable);</p>
</blockquote>
<p style="text-align: justify;">Como podemos observar, esta función presenta 2 parámetros: <strong>%tipodevariable</strong> <em>(entre comillas) </em>y <strong>&amp;nombredelavariable</strong>, los cuales a su vez presentan 2 signos: <strong>%</strong> y <strong>&amp;</strong>. Vamos por parte explicando:</p>
<ol>
<li style="text-align: justify;"><strong>tipodevariable:</strong> Tal como hemos visto en numerosas ocasiones, cada variable que definimos en un programa contiene un tipo de datos que puede almacenar <em>(int, float, char, etc)</em>. A su vez, el lenguaje C utiliza unos simbolos que representan esos tipos y que se incluyen en las funciones scanf y printf para decirle al compilador que tipo de dato es el que estamos leyendo/mostrando. Estos simbolos son la <strong>d</strong> para variables de tipo int, la <strong>f</strong> para variables de tipo float y la <strong>c</strong> para variables de tipo char entre otras.</li>
<li style="text-align: justify;"><strong>El símbolo %:</strong> Este símbolo siempre debe ir por obligación acompañando a los símbolos indicados en el punto anterior, de esta forma el compilador comprenderá que estamos hablando de un tipo de dato y no de una consonante por sí sola.</li>
<li style="text-align: justify;"><strong>nombredevariable:</strong> Es el nombre que le damos a una variable en particular cuando la definimos.</li>
<li style="text-align: justify;"><strong>El símbolo &amp;:</strong> En el lenguaje C, cuando utilizamos el símbolo &amp; junto al nombre de una variable, le estamos diciendo al compilador que nos estamos refiriendo al <strong>área de memoria</strong> en el que esa variable almacena su información. Como dijimos hace algún tiempo, toda variable al momento de ser creada, apunta a un área de memoria interna del computador para manipular su información. A esta área accedemos con el símbolo &amp; cuando leemos un dato.</li>
</ol>
<p style="text-align: justify;">Con esas definiciones claras, veamos un pequeño ejemplo, para lo que utilizaremos el entorno de programación que instalamos en el número anterior:</p>
<p style="text-align: justify;"><strong>Ejemplo:</strong> Realizar un programa que lea un dato numérico por teclado y luego mostrarlo por pantalla. <em>(La explicación del código, como siempre en negrita, cursiva y entre /* y */</em>.</p>
<blockquote>
<p style="text-align: justify;">#include &lt;stdio.h&gt;<br />
#include &lt;stdlib.h&gt;<br />
#include &lt;conio.h&gt;</p>
<p style="text-align: justify;"><em><strong>/* Partimos por agregar las librerías necesarias para nuestro programa, incluida la conio.h para hacer uso de la función getch( ); */</strong></em></p>
<p style="text-align: justify;">int numero;</p>
<p style="text-align: justify;"><em><strong>/* Declaramos una variable llamada numero de tipo int */</strong></em></p>
<p style="text-align: justify;">int main( )<br />
{<br />
<em><strong>/* Declaramos la función main o principal */</strong></em></p>
<p><em><strong></strong></em> printf(&#8220;Ingrese un numero del 1 al 10: &#8220;);<br />
<em><strong>/* Mostramos un mensaje al usuario para que ingrese un numero del 1 al 10 */</strong></em></p>
<p style="text-align: justify;">scanf(&#8220;%d&#8221;, &amp;numero);<br />
<em><strong>/* Con scanf leemos el dato, indicando con %d que es un dato de tipo int e indicamos que guardaremos la información en el área de memoria de la variable numero poniendo &amp;numero */</strong></em></p>
<p style="text-align: justify;">printf(&#8220;Ingreso el numero %d&#8221;, numero);<br />
getch();<br />
<em><strong> /* Mostramos el numero que ingreso el usuario, poniendo un mensaje con printf y en la posición donde mostraremos el número ponemos el símbolo correspondiente al tipo de dato, o sea %d, y luego de la coma la variable que mostraremos. En la línea siguiente ponemos un getch ( ); para que el programa quede en espera hasta que presionemos una tecla y así podamos ver el resultado antes que se cierre */</strong></em></p>
<p style="text-align: justify;">} <em><strong>// Cerramos llave de la función main.</strong></em></p>
</blockquote>
<p style="text-align: justify;">Compilamos el programa y no deberíamos tener errores. Lo ejecutamos y probamos que funcione.</p>
<p style="text-align: justify;">Así de simple es la captura de datos vía teclado.</p>
<h2>3.- Iteraciones condicionales.</h2>
<p style="text-align: justify;">Las iteraciones condicionales en C son bastante similares a las que vimos en pseudocódigo <em>(Si y Si No, Switch)</em> y cumplen exactamente la misma función, esto es, ejecutar una serie de acciones a partir del cumplimiento de una condición. No entraremos en mayor detalle, pues lo vimos de forma bastante completa en el pasado.</p>
<p style="text-align: justify;">En lo que si adentraremos es en como se usan en C:</p>
<p style="text-align: justify;"><strong>Si y Si no</strong></p>
<p style="text-align: justify;">En C se utiliza de la misma forma, radicando la diferencia en que en vez de ser Si y Si no, hablamos de <strong>if</strong> y <strong>else</strong>. Esta iteración tiene las mismas características que en pseudo, o sea, todo else debe ir luego de un if y dentro de un if y de un else pueden ir múltiples if y elses. La forma de declaración es:</p>
<blockquote>
<p style="text-align: justify;">if(condición)<br />
{<br />
sentencia 1;<br />
sentencia 2;<br />
}<br />
else<br />
{<br />
sentencia 3;<br />
sentencia 4;</p>
<p style="text-align: justify;">}</p>
</blockquote>
<p style="text-align: justify;">Cuando utilizamos if y else, podemos o no usar llaves para abrir y cerrar el if. Cuando un if y/o un else tienen solo una sentencia a ejecutar, podemos escribirlos sin llaves para abrir y cerrar. Si es más de una sentencia, necesariamente deben llevar llaves. Si desean, para evitar confusiones, podemos utilizar siempre las llaves.</p>
<p style="text-align: justify;">Veamos un ejemplo ampliando el caso anterior. También pediremos un dato al usuario, pero en vez de mostrarlo lo someteremos a un simple if y else para ver si el número es mayor a 5:</p>
<blockquote>
<p style="text-align: justify;">#include &lt;stdlib.h&gt;<br />
#include &lt;stdio.h&gt;<br />
#include &lt;conio.h&gt;</p>
<p>int numero;</p>
<p>int main()<br />
{<br />
printf(&#8220;Ingrese un numero del 1 al 10: &#8220;);<br />
scanf(&#8220;%d&#8221;,&amp;numero);</p>
<p><em><strong>/* Primero vemos con un if si el numero es igual a 5. Recordemos que para comparar utilizamos doble signo igual */</strong></em><br />
if(numero==5)<br />
printf(&#8220;El numero ingresado es 5&#8243;);<br />
else <em><strong>// Si no es igual a 5</strong></em><br />
if(numero &gt; 5) <em><strong>// Si es mayor a 5 mostramos el mensaje</strong></em><br />
printf(&#8220;El numero ingresado es mayor a 5&#8243;);<br />
else <em><strong>// Si es menor a 5 mostramos el mensaje</strong></em><br />
printf(&#8220;El numero ingresado es menor a 5&#8243;);<br />
getch();</p>
<p>}</p></blockquote>
<p style="text-align: justify;">A medida que vayamos avanzando, el uso de if y else será más complejo y largo, pero la lógica es básicamente la misma.</p>
<p style="text-align: justify;">La iteración switch la veremos en el próximo número, ya que implica un mayor nivel de detalle y no queremos extendernos por sobre los demás contenidos de momento.</p>
<h2>4.- Ciclos o búcles.</h2>
<p style="text-align: justify;">Tal como las iteraciones, en pseudolenguaje también definimos y utilizamos ciclos y búcles que cumplen la misma funcionalidad que en C, por lo que no nos desviaremos definiendo nuevamente esos temas, si no que veremos cada caso para C y luego un ejemplo que los reune a todos.</p>
<p style="text-align: justify;"><strong>Mientras</strong></p>
<p style="text-align: justify;">El ciclo mientras que usabamos en Pseudocódigo, en C <em>(y otros lenguajes)</em> es conocido como <strong>while</strong> y es uno de los más usados. La forma de utilizarlo es la misma, o sea:</p>
<blockquote>
<p style="text-align: justify;">while(condición)<br />
{<br />
sentencia 1;<br />
sentencia 2;<br />
}</p></blockquote>
<p style="text-align: justify;">Tal como en Pseudo, este ciclo sólo se ejecutará <em>(y se mantendrá en ejecución)</em> mientras la condición se cumpla.</p>
<p style="text-align: justify;"><strong>Para</strong></p>
<p style="text-align: justify;">Este ciclo en lenguaje C es conocido como <strong>for</strong> y se utiliza de la misma forma, o sea:</p>
<blockquote>
<p style="text-align: justify;">for(inicialización de variable ; condición ; aumento o decremento de la variable)<br />
{<br />
sentencia 1;<br />
sentencia 2;<br />
sentencia 3;<br />
}</p></blockquote>
<p style="text-align: justify;">Tal como en el caso del ciclo while, este ciclo se continuará ejecutando mientras se cumpla la condición, pero a diferencia del anterior, este siempre se ejecutará, ya que la variable para la condición se inicializa dentro del propio ciclo.</p>
<p style="text-align: justify;"><strong>Haga mientras</strong></p>
<p style="text-align: justify;">Corresponde al ciclo <strong>do-while</strong>, bastante similar al caso del while pero con 2 diferencias. Este ciclo se ejecutará al menos 1 vez aunque la condición no se cumpla y el while del final debe ir con punto y coma, o sea:</p>
<blockquote>
<p style="text-align: justify;">do<br />
{<br />
sentencia 1;<br />
sentencia 2;<br />
sentencia 3;<br />
}while(condición);</p></blockquote>
<p style="text-align: justify;">Tal como en pseudolenguaje, hay ocasiones ideales para el uso de cada tipo de ciclo, pero en muchas ocasiones podemos usar cualquiera de los 3 y dependerá más que nada del gusto personal.</p>
<p style="text-align: justify;">A continuación veremos un ejemplo en donde utilizaremos los 3 ciclos para resolver un mismo problema.</p>
<p style="text-align: justify;"><strong>Ejercicio:</strong> Enumerar del 1 al 10 utilizando los 3 ciclos vistos hasta ahora.</p>
<blockquote>
<p style="text-align: justify;">#include &lt;stdlib.h&gt;<br />
#include &lt;stdio.h&gt;<br />
#include &lt;conio.h&gt;</p>
<p>int numero;</p>
<p>int main()<br />
{<br />
numero=1; <em><strong>// Asignamos el valor inicial a la variable</strong></em><br />
while(numero&lt;=10) <em><strong>// Partimos con un ciclo while</strong></em><br />
{<br />
printf(&#8220;%d\n&#8221;,numero); <em><strong>/* Mostramos el número y utlizamos \n para hacer salto de línea */</strong></em><br />
numero++;<em><strong> // Incrementamos el valor</strong></em><br />
}</p>
<p>for(numero=1;numero&lt;=10;numero++) <em><strong>// Seguimos con un ciclo for especificando los parámetros</strong></em><br />
{<br />
printf(&#8220;%d\n&#8221;,numero);<em><strong> // Mostramos el número</strong></em><br />
}<br />
numero=1; <em><strong>// Reinicializamos el número a 1</strong></em></p>
<p>do<em><strong> // Terminamos con un ciclo do-while</strong></em><br />
{<br />
printf(&#8220;%d\n&#8221;,numero); <em><strong>// Mostramos el número</strong></em><br />
numero++; <em><strong>// Incrementamos el valor</strong></em><br />
}while(numero&lt;=10); <em><strong>// Definimos la condición</strong></em><br />
getch();<em><strong> // Dejamos el programa en espera</strong></em></p>
<p>}</p></blockquote>
<p style="text-align: justify;">Luego de compilar y ejecutar podemos ver que como resultado se enumerará del 1 al 10, 3 veces seguidas, 1 por cada ciclo que definimos.</p>
<p style="text-align: justify;">
<h2>5.- Ejercicio: Programando un terminal de venta simple.</h2>
<p style="text-align: justify;">Ahora que hemos visto aspectos básicos del lenguaje C, desarrollaremos un ejercicio en el que combinaremos todos los conocimientos adquiridos hasta ahora.</p>
<p style="text-align: justify;">Lo que haremos será programar un terminal de venta simple, en donde primero desplegaremos una lista de productos, luego pediremos el código del producto, la cantidad que se desea llevar y mostraremos el total a cancelar. No nos complicaremos mucho y en el futuro iremos añadiendo nuevas funcionalidades. Así que manos a la obra:</p>
<blockquote>
<p style="text-align: justify;">#include &lt;stdlib.h&gt;<br />
#include &lt;stdio.h&gt;<br />
#include &lt;conio.h&gt;</p>
<p>int codigo, cantidad, valor, total, vuelto, pago; <em><strong>/* Declaramos las variables que usaremos, todas de tipo int */</strong></em></p>
<p>int main()<br />
{<br />
printf(&#8220;\t Lista de productos\n&#8221;); <em><strong>/* Partimos por listar los productos, utilizamos \t para separar los textos, tal como si utilizaramos la tecla TAB */</strong></em><br />
printf(&#8220;Codigo\t Nombre\t Precio\n&#8221;);<br />
printf(&#8220;1\t Silla\t 100\n&#8221;);<br />
printf(&#8220;2\t Puerta\t 350\n&#8221;);<br />
printf(&#8220;3\t Sillon\t 200\n&#8221;);</p>
<p>printf(&#8220;\nIngrese el codigo del producto que desea llevar: &#8220;); <em><strong>/* Solicitamos el código del producto*/</strong></em><br />
scanf(&#8220;%d&#8221;,&amp;codigo);  <em><strong> /* Leemos el código */</strong></em><br />
printf(&#8220;\nIngrese la cantidad que desea llevar: &#8220;); <em><strong>/* Solicitamos la cantidad que llevarán */</strong></em><br />
scanf(&#8220;%d&#8221;,&amp;cantidad); <em><strong>/* Leemos la cantidad */</strong></em></p>
<p>if(codigo==1)<em><strong> /* Comparamos mediante iteraciones el código para asignar el valor total */</strong></em><br />
valor=100;<br />
if(codigo==2)<br />
valor=350;<br />
if(codigo==3)<br />
valor=200;</p>
<p>total=valor*cantidad; <em><strong>/* Multiplicamos el valor por la cantidad para obtener el total */</strong></em></p>
<p>printf(&#8220;\nEl total es de: %d&#8221;,total); <em><strong>/* Mostramos el total */</strong></em><br />
printf(&#8220;\nIngrese el pago: &#8220;); <em><strong>/* Solicitamos el pago */</strong></em><br />
scanf(&#8220;%d&#8221;,&amp;pago);<em><strong> /* Leemos el pago */</strong></em><br />
if(pago&lt;total) <em><strong>/* Vemos mediante un if si el pago es suficiente */</strong></em><br />
printf(&#8220;\nEl pago no es suficiente&#8221;);<br />
else<br />
{<br />
vuelto=pago-total; <em><strong>/* Obtenemos el vuelto */</strong></em><br />
printf(&#8220;\nEl vuelto es de: %d&#8221;,vuelto);<em><strong> /* Mostramos el vuelto */</strong></em><br />
}<br />
printf(&#8220;\nVenta finalizada&#8221;); <em><strong>/* Damos el mensaje de despedida */</strong></em><br />
getch();</p>
<p>}</p></blockquote>
<p style="text-align: justify;">Y así tenemos nuestro simple terminal de venta. Como podemos apreciar, este programa no es lo suficientemente óptimo, ya que solo podemos realizar 1 venta por sobre 1 sólo producto, así que su aplicación es bastante limitada. Para poder realizar múltiples ventas o 1 venta de múltiples productos es necesario el uso de ciclos para poder repetir las acciones necesarias.</p>
<p style="text-align: justify;">Desde ya los incentivamos a que vayan modificando este programa y agregando esa funcionalidad. De cualquier forma en las próximas lecciones le iremos añadiendo más y más cosas a este programa para crear una aplicación mucho más completa.</p>
<p style="text-align: justify;">Con esto damos por terminada la lección de hoy, hemos cubierto bastante y aún nos queda un largo camino por recorrer, así que mucha paciencia.</p>
<p style="text-align: justify;">En la próxima edición de <strong>Como aprender a programar y no morir en el intento</strong> veremos:</p>
<ol>
<li style="text-align: justify;">Iteración Switch.</li>
<li style="text-align: justify;">Vectores.</li>
<li style="text-align: justify;">Matrices.</li>
<li style="text-align: justify;">Terminal de venta &#8211; 2da parte.</li>
</ol>
<p style="text-align: justify;">Recuerden que como siempre, este tutorial ha sido:</p>
<p style="text-align: justify;">
<p style="text-align: center;"><img src="http://farm4.static.flickr.com/3043/3056524059_52d616c96c.jpg?v=0" alt="" width="400" height="314" /></p>
<p style="text-align: justify;">Esperamos que este tutorial haya sido de utilidad para Uds.</p>
<p style="text-align: justify;">Muchas gracias por leer, y será hasta una próxima oportunidad.</p>
<p style="text-align: center;"><strong>Staff CLH</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.comolohago.cl/2008/12/28/como-aprender-a-programar-y-no-morir-en-el-intento-parte-8/feed/</wfw:commentRss>
		<slash:comments>26</slash:comments>
		</item>
	</channel>
</rss>

