<?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>LuAuF &#187; C</title>
	<atom:link href="http://luauf.com/category/programacion/c-programacion-2/feed/" rel="self" type="application/rss+xml" />
	<link>http://luauf.com</link>
	<description></description>
	<lastBuildDate>Fri, 27 Jan 2012 01:44:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>¿Cómo conectarse a MySQL desde un programa en C?</title>
		<link>http://luauf.com/2011/07/09/%c2%bfcomo-conectarse-a-mysql-desde-un-programa-en-c/</link>
		<comments>http://luauf.com/2011/07/09/%c2%bfcomo-conectarse-a-mysql-desde-un-programa-en-c/#comments</comments>
		<pubDate>Sat, 09 Jul 2011 18:01:54 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[Bases de Datos]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[librerias]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=1192</guid>
		<description><![CDATA[La respuesta al título de esta publicación es muy sencilla, conectarse a MySQL desde C se realiza mediante una API provista por el mismo proveedor de base de datos. La API de C es ditribuida con MySQL, no es más que una librería (libmysqlclient) que interfacea entre el programa y la base de datos. La [...]]]></description>
			<content:encoded><![CDATA[<p>La respuesta al título de esta publicación es muy sencilla, conectarse a MySQL desde C se realiza mediante una API provista por el mismo proveedor de base de datos.</p>
<p>La API de C es ditribuida con MySQL, no es más que una librería (libmysqlclient) que interfacea entre el programa y la base de datos.</p>
<p>La documentación provista por MySQL es muy completa (<a href="http://dev.mysql.com/doc/refman/5.0/en/c.html">MySQL C API</a>), no obstante, fiel a nuestra costumbre iremos a un ejemplo sencillo y concreto.</p>
<p><span id="more-1192"></span>¿Qué necesitamos?</p>
<ul>
<li>Un servidor de base de datos MySQL, al cual conectarnos</li>
<li>Un programa cliente</li>
<li>La librería mysqlclient</li>
<li>mysql-devel, headers con la firma de la librería</li>
<li>gcc</li>
</ul>
<p>Con cualquier variante de UNIX más la instalación manual de la distribución binaria (tar.gz) tendremos todo lo que necesitamos. Caso contrario habrá que instalar los paquetes necesarios que incluya los requisitos mencionados, por ejemplo <strong>mysql-devel</strong>.</p>
<p>Primero, sin ir al detalle en concreto de cada línea (no cuesta nada interpretar el código, pues está bien comentado) veamos el siguiente fuente:</p>
<div class="syntax_hilite">
<div id="c-2">
<div class="c"><span style="color: #808080; font-style: italic;">/* mi_cliente */</span><br />
<span style="color: #339933;">#include &lt;mysql.h&gt;</span><br />
<span style="color: #339933;">#include &lt;stdio.h&gt;</span></p>
<p>main<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp;MYSQL *conn;<br />
&nbsp; &nbsp;MYSQL_RES *res;<br />
&nbsp; &nbsp;MYSQL_ROW row;</p>
<p>&nbsp; &nbsp;<span style="color: #993333;">char</span> *server = <span style="color: #ff0000;">"localhost"</span>;<br />
&nbsp; &nbsp;<span style="color: #993333;">char</span> *user = <span style="color: #ff0000;">"root"</span>;<br />
&nbsp; &nbsp;<span style="color: #993333;">char</span> *password = <span style="color: #ff0000;">"PASSWORD"</span>; <span style="color: #808080; font-style: italic;">/* set me first */</span><br />
&nbsp; &nbsp;<span style="color: #993333;">char</span> *database = <span style="color: #ff0000;">"mysql"</span>;</p>
<p>&nbsp; &nbsp;conn = mysql_init<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">NULL</span><span style="color: #66cc66;">&#41;</span>;</p>
<p>&nbsp; &nbsp;<span style="color: #808080; font-style: italic;">/* Connect to database */</span><br />
&nbsp; &nbsp;<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>!mysql_real_connect<span style="color: #66cc66;">&#40;</span>conn, server,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;user, password, database, <span style="color: #cc66cc;">0</span>, <span style="color: #000000; font-weight: bold;">NULL</span>, <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; fprintf<span style="color: #66cc66;">&#40;</span>stderr, <span style="color: #ff0000;">"%s<span style="color: #000099; font-weight: bold;">\n</span>"</span>, mysql_error<span style="color: #66cc66;">&#40;</span>conn<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; exit<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp;<span style="color: #66cc66;">&#125;</span></p>
<p>&nbsp; &nbsp;<span style="color: #808080; font-style: italic;">/* send SQL query */</span><br />
&nbsp; &nbsp;<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>mysql_query<span style="color: #66cc66;">&#40;</span>conn, <span style="color: #ff0000;">"show tables"</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; fprintf<span style="color: #66cc66;">&#40;</span>stderr, <span style="color: #ff0000;">"%s<span style="color: #000099; font-weight: bold;">\n</span>"</span>, mysql_error<span style="color: #66cc66;">&#40;</span>conn<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; exit<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp;<span style="color: #66cc66;">&#125;</span></p>
<p>&nbsp; &nbsp;res = mysql_use_result<span style="color: #66cc66;">&#40;</span>conn<span style="color: #66cc66;">&#41;</span>;</p>
<p>&nbsp; &nbsp;<span style="color: #808080; font-style: italic;">/* output table name */</span><br />
&nbsp; &nbsp;<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span style="color: #000066;">printf</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"MySQL Tables in mysql database:<span style="color: #000099; font-weight: bold;">\n</span>"</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp;<span style="color: #b1b100;">while</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>row = mysql_fetch_row<span style="color: #66cc66;">&#40;</span>res<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> != <span style="color: #000000; font-weight: bold;">NULL</span><span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span style="color: #000066;">printf</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"%s <span style="color: #000099; font-weight: bold;">\n</span>"</span>, row<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>;</p>
<p>&nbsp; &nbsp;<span style="color: #808080; font-style: italic;">/* close connection */</span><br />
&nbsp; &nbsp;mysql_free_result<span style="color: #66cc66;">&#40;</span>res<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp;mysql_close<span style="color: #66cc66;">&#40;</span>conn<span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
<p></p>
<p>Ahora si veamos la parte más interesa saber ¿cómo compilar?</p>
<p>Entre los argumentos a pasarle al gcc tenemos los directorios con las librerías, las librerías propiamente dichas, los directorios de encabezados (.h), y otras opciones más del compilador. Esto no representa ningún problema, menos aún con <a href="http://dev.mysql.com/doc/refman/5.0/en/mysql-config.html. mysql_config">mysql_config</a>  es un pequeño utilitario de MySQL que provee información para el compilador.</p>
<p>De esta forma:</p>
<ul>
<li><strong>mysql_config --libs</strong>: devuelve los path de las librerías y las librerías propiamente dichas a linkear.</li>
<li><strong>mysql_config --cflags</strong>: devuelve, entre otros argumentos, los path de los headers.</li>
</ul>
<p>Finalmente, podemos compilar de esta manera tan sencilla:</p>
<pre>$ gcc -o mi_cliente $(mysql_config --cflags) mi_cliente.c $(mysql_config --libs)</pre>
<p>Y luego ejecutar:</p>
<pre>$ ./mi_cliente</pre>
<p>Realmente, muy sencillo ¿no?</p>
<p>Vía: <a href="http://www.cyberciti.biz/tips/linux-unix-connect-mysql-c-api-program.html">nixCraft</a></p>
]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2011/07/09/%c2%bfcomo-conectarse-a-mysql-desde-un-programa-en-c/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Alocando y realoncando memoria en C/C++</title>
		<link>http://luauf.com/2010/02/01/alocando-y-realoncando-memoria-en-cc/</link>
		<comments>http://luauf.com/2010/02/01/alocando-y-realoncando-memoria-en-cc/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 11:00:25 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[C]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[asignacion]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[dinamica]]></category>
		<category><![CDATA[malloc]]></category>
		<category><![CDATA[memoria]]></category>
		<category><![CDATA[realloc]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=1153</guid>
		<description><![CDATA[Algo muy poco atractivo para muchos programadores que llegan a C/C++ luego de hacer experiencia en otros lenguajes es la asignación de memoria dinámica (punteros, mallocs y reallocs). Repasemos un poco de teoría y luego veamos un ejemplo sencillo e indoloro Las variables y arrays en C/C++ ocupan un espacio de memoria limitado e invariable [...]]]></description>
			<content:encoded><![CDATA[<p>Algo muy poco atractivo para muchos programadores que llegan a <strong>C/C++</strong> luego de hacer experiencia en otros lenguajes es la<strong> asignación de memoria dinámica</strong> (punteros, mallocs y reallocs).</p>
<p style="text-align: center;"><a href="http://luauf.com/wp-content/uploads/2010/01/free-the-mallocs.png"><img class="aligncenter size-thumbnail wp-image-1154" title="free-the-mallocs" src="http://luauf.com/wp-content/uploads/2010/01/free-the-mallocs-150x150.png" alt="" width="150" height="150" /></a></p>
<p>Repasemos un poco de teoría y luego veamos un ejemplo sencillo e indoloro <img src='http://luauf.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p><span id="more-1153"></span></p>
<p>Las variables y arrays en C/C++ ocupan un espacio de memoria <strong>limitado</strong> e <strong>invariable</strong> durante la ejecución de un programa.</p>
<p>Para utilizar variables capaces de "crecer" en <strong>tiempo de ejecución</strong>, es decir, asignar memoria dinámicamente, es necesario recurrir a los punteros y luego a una serie de funciones útiles para trabajar con ellos (malloc, sizeof, realloc, free).</p>
<p>Los programadores suelen (solemos) escapar al uso de punteros pues si cometemos errores (nos olvidamos de liberar memoria "free", o pisamos memoria o hacemos de nuestros programas verdaderos "chupa-memoria") nuestros programas tienden a volverse "inestables". De todas formas, no es para huir despavoridos, al contrario, simplemente hay que ser precavidos y recuerda "malloc never fails" <img src='http://luauf.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p style="text-align: center;"><a href="http://luauf.com/wp-content/uploads/2010/01/malloc-never-fails.png"><img class="aligncenter size-thumbnail wp-image-1155" title="malloc-never-fails" src="http://luauf.com/wp-content/uploads/2010/01/malloc-never-fails-150x150.png" alt="" width="150" height="150" /></a></p>
<p>Sin más palabras, vamos a ver dos<strong> ejemplos bien comentados</strong>, en el primero de ellos conoceremos a los famosos <strong>punteros</strong> y las funciones <strong>malloc</strong>, <strong>sizeof</strong> y <strong>free</strong>. En el segundo ejemplo, agregamos la función <strong>realloc</strong>.</p>
<div class="syntax_hilite">
<div id="c-5">
<div class="c"><span style="color: #339933;">#include &lt;stdlib.h&gt;&nbsp;&nbsp;/* stándard library, en inglés para que no me discutan si utilizar los términos biblioteca o librería <img src='http://luauf.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> */</span></p>
<p><span style="color: #993333;">int</span>* &nbsp; &nbsp;ptr;&nbsp; &nbsp;&nbsp; &nbsp;<span style="color: #808080; font-style: italic;">/* puntero a enteros */</span></p>
<p>...</p>
<p><span style="color: #808080; font-style: italic;">/**<br />
&nbsp;* La función malloc reserva un &quot;hueco&quot; (zona de memoria) de un tamaño de, 300 veces el tamaño de un entero (este valor es en bytes).<br />
&nbsp;* También se puede ver el uso del sizeof para indicar obtener el tamaño, en bytes, de un entero.<br />
&nbsp;*/</span><br />
ptr = <span style="color: #66cc66;">&#40;</span><span style="color: #993333;">int</span>*<span style="color: #66cc66;">&#41;</span>malloc <span style="color: #66cc66;">&#40;</span> <span style="color: #cc66cc;">300</span>*<span style="color: #993333;">sizeof</span><span style="color: #66cc66;">&#40;</span><span style="color: #993333;">int</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span>;</p>
<p>...</p>
<p><span style="color: #808080; font-style: italic;">/**<br />
&nbsp;* Si malloc no puede asignar el espacio indicado (por ejemplo, si no hay memoria disponible) devuelve un puntero nulo.<br />
&nbsp;*/</span></p>
<p><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>ptr==<span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; fprintf<span style="color: #66cc66;">&#40;</span>stderr,<span style="color: #ff0000;">"No puedo alocar memoria!"</span><span style="color: #66cc66;">&#41;</span>; fflush<span style="color: #66cc66;">&#40;</span>stderr<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; exit<span style="color: #66cc66;">&#40;</span>EXIT_FAILURE<span style="color: #66cc66;">&#41;</span><br />
<span style="color: #66cc66;">&#125;</span></p>
<p>
ptr<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">100</span><span style="color: #66cc66;">&#93;</span> = <span style="color: #cc66cc;">16</span>;&nbsp; <span style="color: #808080; font-style: italic;">/* Aquí trabajo con una parte de memoria asginada, zona que antes del malloc no existía */</span></p>
<p>free<span style="color: #66cc66;">&#40;</span>ptr<span style="color: #66cc66;">&#41;</span>;&nbsp; &nbsp; <span style="color: #808080; font-style: italic;">/* terminado el uso de la memoria, no olvides liberarla */</span><br />
ptr=<span style="color: #000000; font-weight: bold;">NULL</span>;&nbsp; &nbsp;&nbsp; &nbsp;<span style="color: #808080; font-style: italic;">/* Es buena práctica dejar los punteros apuntando a NULL (hacia ningún lado) luego de su uso */</span></div>
</div>
</div>
<p></p>
<div class="syntax_hilite">
<div id="c-6">
<div class="c"><span style="color: #993333;">char</span> &nbsp; &nbsp;*ptr;&nbsp; <span style="color: #808080; font-style: italic;">/* declaramos un punterito a char */</span><br />
<span style="color: #993333;">int</span> &nbsp; &nbsp; size;</p>
<p>size = <span style="color: #cc66cc;">8</span> * <span style="color: #993333;">sizeof</span><span style="color: #66cc66;">&#40;</span><span style="color: #993333;">char</span><span style="color: #66cc66;">&#41;</span>;&nbsp; &nbsp; <span style="color: #808080; font-style: italic;">/* asignamos a size un número, que representa la cantidad de bytes que alocaremos luego*/</span></p>
<p><span style="color: #808080; font-style: italic;">/* asignamos un &quot;hueco&quot; de ocho bytes para ptr*/</span><br />
ptr = <span style="color: #66cc66;">&#40;</span><span style="color: #993333;">char</span> *<span style="color: #66cc66;">&#41;</span> malloc<span style="color: #66cc66;">&#40;</span> <span style="color: #66cc66;">&#40;</span>size_t<span style="color: #66cc66;">&#41;</span> size<span style="color: #66cc66;">&#41;</span>; </p>
<p>...</p>
<p><span style="color: #808080; font-style: italic;">/**<br />
&nbsp;* Suponte que necesitamos nos que nos &quot;quedamos cortos&quot; con el espacio de memoria asignado.<br />
&nbsp;* Con la función podemos cambiar el tamaño de una zona de memoria dinámica&nbsp; previamente pedida mediante la instrucción malloc. <br />
&nbsp;*/</span><br />
size *= <span style="color: #cc66cc;">2</span>;&nbsp; <span style="color: #808080; font-style: italic;">/* duplicamos el valor de size */</span><br />
ptr = <span style="color: #66cc66;">&#40;</span><span style="color: #993333;">char</span> *<span style="color: #66cc66;">&#41;</span> realloc<span style="color: #66cc66;">&#40;</span>ptr, <span style="color: #66cc66;">&#40;</span>size_t<span style="color: #66cc66;">&#41;</span> size<span style="color: #66cc66;">&#41;</span>;</p>
<p><span style="color: #808080; font-style: italic;">/**<br />
&nbsp;* Tal como malloc, realloc, si no puede asignar el espacio indicado (por ejemplo, si no hay memoria disponible) devuelve un puntero nulo.<br />
&nbsp;*/</span><br />
<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>ptr==<span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; fprintf<span style="color: #66cc66;">&#40;</span>stderr,<span style="color: #ff0000;">"No puedo realocar memoria!"</span><span style="color: #66cc66;">&#41;</span>; fflush<span style="color: #66cc66;">&#40;</span>stderr<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; exit<span style="color: #66cc66;">&#40;</span>EXIT_FAILURE<span style="color: #66cc66;">&#41;</span><br />
<span style="color: #66cc66;">&#125;</span></p>
<p>...</p>
<p><span style="color: #808080; font-style: italic;">/**<br />
&nbsp;* Un detalle, no menor, realloc puede devolvernos una zona de memoria en otra posición y el puntero devuelto por realloc puede, por lo tanto, ser diferente al devuelto en primera instancia por malloc.<br />
&nbsp;* No obstante, realloc se encarca que el contenido apuntado por el puntero sea el mismo.<br />
&nbsp;* Es decir, todo este &quot;manejo&quot; de memoria es trasparente para el programador<br />
&nbsp;*/</span></p>
<p>free<span style="color: #66cc66;">&#40;</span>ptr<span style="color: #66cc66;">&#41;</span>&nbsp; &nbsp;<span style="color: #808080; font-style: italic;">/* Free the malloc()s */</span></div>
</div>
</div>
<p></p>
<p>Un comentario final, estas funciones vistas son estándares de C y se pueden encontrar, donde más que, en la librería (o biblioteca como dicen los puristas) <strong>stdlib</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2010/02/01/alocando-y-realoncando-memoria-en-cc/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Indicadores de progreso en C</title>
		<link>http://luauf.com/2009/11/18/indicadores-de-progreso-en-c/</link>
		<comments>http://luauf.com/2009/11/18/indicadores-de-progreso-en-c/#comments</comments>
		<pubDate>Wed, 18 Nov 2009 14:52:15 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[C]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[barra de progreso]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[control de cursor]]></category>
		<category><![CDATA[cursor]]></category>
		<category><![CDATA[portado]]></category>
		<category><![CDATA[printf]]></category>
		<category><![CDATA[secuencia de control]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=1131</guid>
		<description><![CDATA[Luego de leer el artículo C/C++: Indicador de progreso de La plaga Tux, me vino a la mente ese indicador de progreso que tiene ese aspecto de "barrita" girando sobre su propio eje. Entonces, tiempo libre mediante, en principio tomé el artículo original y porté el código de C++ a C (nada de otro mundo). [...]]]></description>
			<content:encoded><![CDATA[<p>Luego de leer el artículo<a href="http://plagatux.es/2009/11/cc-indicar-progeso-en-una-linea/"> C/C++: Indicador de progreso</a> de <a href="http://plagatux.es/">La plaga Tux</a>, me vino a la mente ese indicador de progreso que tiene ese aspecto de "barrita" girando sobre su propio eje.</p>
<p>Entonces, tiempo libre mediante, en principio tomé el artículo original y porté el código de C++ a C (nada de otro mundo). Tal artículo me hizo recordar que hay vida más allá del <strong>\n</strong> recordándome el <strong>\r</strong>. Pero como una cosa va encadenada a la otra, también me hizo recordar el <strong>\b</strong>.</p>
<p>Para quienes hasta aquí me leen perdidos o necesitan un refresco de su memoria, les recuerdo que en el formato de impresión se pueden utilizar varias secuencias de control de cursor:</p>
<ul>
<li><strong>\n</strong>: nueva línea</li>
<li><strong>\r</strong>: retorno de carro</li>
<li><strong>\b</strong>: backspace</li>
<li><strong>\t</strong>: tab</li>
<li>etc.</li>
</ul>
<p>Con esto, ya tenemos todos los fundamentos para que puedas entender los ejemplos.</p>
<p><span id="more-1131"></span></p>
<ul>
<li>Indicador de progreso portado de C++ a C de la versión original del artículo:</li>
</ul>
<div class="syntax_hilite">
<div id="c-9">
<div class="c"><span style="color: #339933;">#include&nbsp; &nbsp; &lt;stdlib.h&gt;</span><br />
<span style="color: #339933;">#include&nbsp; &nbsp; &lt;stdio.h&gt;</span></p>
<p><span style="color: #993333;">int</span> main <span style="color: #66cc66;">&#40;</span> <span style="color: #993333;">int</span> argc , <span style="color: #993333;">char</span> **argv <span style="color: #66cc66;">&#41;</span><br />
<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #993333;">const</span> <span style="color: #993333;">short</span>&nbsp;operations = <span style="color: #cc66cc;">500</span>;<br />
&nbsp; &nbsp; <span style="color: #993333;">float</span> &nbsp; &nbsp; inc = <span style="color: #cc66cc;">100</span>.0f / <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #993333;">float</span><span style="color: #66cc66;">&#41;</span>operations-<span style="color: #cc66cc;">1</span>.<span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #993333;">float</span> &nbsp; &nbsp; progress = <span style="color: #cc66cc;">0</span>.0f;<br />
&nbsp; &nbsp; <span style="color: #993333;">short</span> &nbsp; &nbsp; i,pos=<span style="color: #cc66cc;">0</span>;</p>
<p>&nbsp; &nbsp; <span style="color: #b1b100;">for</span> <span style="color: #66cc66;">&#40;</span> i=<span style="color: #cc66cc;">0</span>; i&lt;operations; i++ <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; progress+=inc;<br />
&nbsp; &nbsp; &nbsp; &nbsp; fprintf<span style="color: #66cc66;">&#40;</span> stdout, <span style="color: #ff0000;">"Progreso: %d<span style="color: #000099; font-weight: bold;">\r</span>"</span> , <span style="color: #66cc66;">&#40;</span><span style="color: #993333;">int</span><span style="color: #66cc66;">&#41;</span>progress <span style="color: #66cc66;">&#41;</span>;&nbsp; &nbsp; fflush<span style="color: #66cc66;">&#40;</span>stdout<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; usleep<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">500000</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span></p>
<p>&nbsp; &nbsp; <span style="color: #b1b100;">return</span> EXIT_SUCCESS;<br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
<p></p>
<ul>
<li>"Barrita" de progreso girando sobre su propio eje:</li>
</ul>
<div class="syntax_hilite">
<div id="c-10">
<div class="c"><span style="color: #339933;">#include&nbsp; &nbsp; &lt;stdlib.h&gt;</span><br />
<span style="color: #339933;">#include&nbsp; &nbsp; &lt;stdio.h&gt;</span><br />
<span style="color: #339933;">#include&nbsp; &nbsp; &lt;string.h&gt;</span></p>
<p><span style="color: #993333;">int</span> main <span style="color: #66cc66;">&#40;</span> <span style="color: #993333;">int</span> argc , <span style="color: #993333;">char</span> **argv <span style="color: #66cc66;">&#41;</span><br />
<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #993333;">const</span> <span style="color: #993333;">char</span> &nbsp;s<span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#93;</span> = <span style="color: #ff0000;">"-<span style="color: #000099; font-weight: bold;">\\</span>|/-<span style="color: #000099; font-weight: bold;">\\</span>|/"</span>;<br />
&nbsp; &nbsp; <span style="color: #993333;">const</span> <span style="color: #993333;">short</span>&nbsp;operations = <span style="color: #cc66cc;">500</span>;<br />
&nbsp; &nbsp; <span style="color: #993333;">short</span> &nbsp; &nbsp; i,pos=<span style="color: #cc66cc;">0</span>;</p>
<p>&nbsp; &nbsp; <span style="color: #b1b100;">for</span> <span style="color: #66cc66;">&#40;</span> i=<span style="color: #cc66cc;">0</span>; i&lt;operations; i++ <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; fprintf<span style="color: #66cc66;">&#40;</span> stdout, <span style="color: #ff0000;">"Progreso: %c<span style="color: #000099; font-weight: bold;">\r</span>"</span> , s<span style="color: #66cc66;">&#91;</span>pos<span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">&#41;</span>;&nbsp; &nbsp;fflush<span style="color: #66cc66;">&#40;</span>stdout<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; pos++;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span> pos&gt;=strlen<span style="color: #66cc66;">&#40;</span>s<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pos=<span style="color: #cc66cc;">0</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; usleep<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">500000</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span></p>
<p>&nbsp; &nbsp; <span style="color: #b1b100;">return</span> EXIT_SUCCESS;<br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
<p></p>
<p>Espero que haya servido, a mi al menos me sirve para agregarlo a mi base de conocimientos (mi blog <img src='http://luauf.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> )</p>
]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2009/11/18/indicadores-de-progreso-en-c/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Go, la noticia de la semana</title>
		<link>http://luauf.com/2009/11/15/go-la-noticia-de-la-semana/</link>
		<comments>http://luauf.com/2009/11/15/go-la-noticia-de-la-semana/#comments</comments>
		<pubDate>Sun, 15 Nov 2009 05:48:26 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[C]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[garbage colector]]></category>
		<category><![CDATA[Ken Thompson]]></category>
		<category><![CDATA[Lenguajes]]></category>
		<category><![CDATA[Objetos]]></category>
		<category><![CDATA[Phyton]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=1129</guid>
		<description><![CDATA[En la semana una noticia ocupó a la mayoría de los blogs: Go, un nuevo lenguaje de programación. La noticia hubiera pasado desapercibida de no ser porque Go es un nuevo lanzamiento de Google! Go se promociona a si mismos como un lenguaje: rápido: el código compilado en Go corre tan rápido como el código [...]]]></description>
			<content:encoded><![CDATA[<p>En la semana una noticia ocupó a la mayoría de los blogs: Go, un nuevo lenguaje de programación. La noticia hubiera pasado desapercibida de no ser porque Go es un nuevo lanzamiento de Google!</p>
<p style="text-align: center;"><a href="http://luauf.com/wp-content/uploads/2009/11/logo-153x55.png"><img class="aligncenter size-full wp-image-1130" title="logo-153x55" src="http://luauf.com/wp-content/uploads/2009/11/logo-153x55.png" alt="logo-153x55" width="153" height="55" /></a></p>
<p>Go se promociona a si mismos como un lenguaje:</p>
<ul>
<li>rápido: el código compilado en Go corre tan rápido como el código compilado en C o C++.</li>
<li>seguro: garantiza seguridad en el manejo de memoria, tiene punteros pero no utiliza la aritmética de punteros que convierten en engorrosa la programación y dan lugar a memory leaks, memory slices y ese otro tipo de males.</li>
<li>concurrente: promueve la escritura de procesos ligeros, comunicados entre si y ejecutar miles de rutinas diciendo adios a los desbordamientos de pila</li>
<li>divertido: sintaxis clara, garbage collector, métodos de cualquier tipo, etc. Go luce como un lenguaje dinámico (Phyton) pero tiene la velocidad y seguridad de un lenguaje estático (C, C++).</li>
<li>código abierto: distribuido bajo licencia BSD</li>
</ul>
<p><span id="more-1129"></span> En términos generales, Go es un lenguaje de proposito general, orientado a objetos y open source, que basa su publicidad en la fusión de las mejores características de C y C++ con Python. Go es la respuesta a la ausencia de un lenguaje que fuese eficiente a la hora de compilar y fàcil a la hora de programar.</p>
<p>Para conocer un poco más, el video de promoción:</p>
<p style="text-align: center;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="560" height="340" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/wwoWei-GAPo&amp;hl=es_ES&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="560" height="340" src="http://www.youtube.com/v/wwoWei-GAPo&amp;hl=es_ES&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>El video de presentación (de casi una hora):</p>
<p style="text-align: center;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="560" height="340" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/rKnDgT73v8s&amp;hl=es_ES&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="560" height="340" src="http://www.youtube.com/v/rKnDgT73v8s&amp;hl=es_ES&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>El enlace a la web oficial: <a href="http://golang.org/">The Go Programming Language</a></p>
<p>Una curiosidad: ¿sabías en que estaba trabajando <a href="http://http://luauf.com/2009/06/22/se-acerca-el-viejazo-o-segunda-adolescencia-para-unix/">Ken Thompson</a> para Google? bien... aquí tenemos la respuesta <img src='http://luauf.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2009/11/15/go-la-noticia-de-la-semana/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Escribir, compilar y ejecutar el &#8220;Hola Mundo&#8221; en C++ sobre Linux</title>
		<link>http://luauf.com/2009/09/24/escribir-compilar-y-ejecutar-el-hola-mundo-en-c-sobre-linux/</link>
		<comments>http://luauf.com/2009/09/24/escribir-compilar-y-ejecutar-el-hola-mundo-en-c-sobre-linux/#comments</comments>
		<pubDate>Fri, 25 Sep 2009 01:54:45 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[C]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Sistemas Operativos]]></category>
		<category><![CDATA[c plus plus]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[compilar]]></category>
		<category><![CDATA[Ejecutar]]></category>
		<category><![CDATA[escribir]]></category>
		<category><![CDATA[g++]]></category>
		<category><![CDATA[gcc]]></category>
		<category><![CDATA[hello world]]></category>
		<category><![CDATA[helloworld]]></category>
		<category><![CDATA[hola mundo]]></category>
		<category><![CDATA[holamundo]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=1095</guid>
		<description><![CDATA[En pocos pasos, veremos como compilar un programa escrito en C++ sobre Linux: Asegurarse de tener instalado el compilador para C++ (g++): $ which c++ /usr/bin/c++ $ dpkg -l &#124; grep g++ ii  g++                                        4:4.3.3-1ubuntu1                                           The GNU C++ compiler ii  g++-4.3                                    4.3.3-5ubuntu4                                             The GNU C++ compiler En caso de una respuesta negativa instalarlo mediante un [...]]]></description>
			<content:encoded><![CDATA[<p>En pocos pasos, veremos como compilar un programa escrito en C++ sobre Linux:</p>
<p align="center">
<a href="http://luauf.com/wp-content/uploads/2009/09/screenpp.png"><img src="http://luauf.com/wp-content/uploads/2009/09/screenpp-300x166.png" alt="screenpp" title="screenpp" width="300" height="166" class="alignnone size-medium wp-image-1096" /></a>
</p>
<p><span id="more-1095"></span></p>
<ul>
<li>Asegurarse de tener instalado el compilador para C++ (g++):</li>
</ul>
<div class="syntax_hilite">
<div id="code-15">
<div class="code">$ which c++<br />
/usr/bin/c++</p>
<p>$ dpkg -l | grep g++<br />
ii  g++                                        <span style="color:#800000;">4</span>:<span style="color:#800000;">4</span>.<span style="color:#800000;">3</span>.<span style="color:#800000;">3</span>-1ubuntu1                                           The GNU C++ compiler<br />
ii  g++-<span style="color:#800000;">4</span>.<span style="color:#800000;">3</span>                                    <span style="color:#800000;">4</span>.<span style="color:#800000;">3</span>.<span style="color:#800000;">3</span>-5ubuntu4                                             The GNU C++ compiler</div>
</div>
</div>
<p>
En caso de una respuesta negativa instalarlo mediante un gestor de paquetes. En Debian o distribuciones basadas en Debian instalarlo mediante <a href="http://luauf.com/2009/03/18/tips-para-el-uso-de-apt/">APT</a>.</p>
<ul>
<li>Escribir el clásico "Hola Mundo", helloworld.cc</li>
</ul>
<div class="syntax_hilite">
<div id="c-16">
<div class="c"><span style="color: #339933;">#include &lt;iostream&gt;</span><br />
using namespace std;</p>
<p><span style="color: #993333;">int</span> main <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><br />
<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/cout.html"><span style="color: #000066;">cout</span></a> &lt;&lt;<span style="color: #ff0000;">"Hola Mundo!"</span>;<br />
&nbsp; &nbsp; <span style="color: #b1b100;">return</span> <span style="color: #cc66cc;">0</span>;<br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
<p></p>
<ul>
<li>Compilar:</li>
</ul>
<div class="syntax_hilite">
<div id="code-17">
<div class="code">c++ helloworld.<span style="">cc</span> -o helloword</div>
</div>
</div>
<p></p>
<ul>
<li>Ejecutar:</li>
</ul>
<div class="syntax_hilite">
<div id="code-18">
<div class="code">$ ./helloworld <br />
Hola Mundo!</div>
</div>
</div>
<p></p>
<p>Vía: <a href="http://www.thegeekstuff.com/2009/09/how-to-write-compile-and-execute-c-program-on-unix-os-with-hello-world-example-2/">The Geek Stuff</a></p>
]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2009/09/24/escribir-compilar-y-ejecutar-el-hola-mundo-en-c-sobre-linux/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Argumentos variables (varargs) en Java</title>
		<link>http://luauf.com/2009/05/16/varargs-en-java/</link>
		<comments>http://luauf.com/2009/05/16/varargs-en-java/#comments</comments>
		<pubDate>Sat, 16 May 2009 09:00:15 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[C]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[argumentos]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[varargs]]></category>
		<category><![CDATA[Variables]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=953</guid>
		<description><![CDATA[Para aquellos anticuados como yo que en C, desde que descubrimos la varargs.h no podemos dejar de mandar un número de argumentos variables, hoy veremos que con Java también es posible. Como introducción, para aquellos con conocimientos en C, sabrán de funciones como prinft que les permite enviar un número ilimitado de argumentos luego de [...]]]></description>
			<content:encoded><![CDATA[<p>Para aquellos anticuados como yo que en C, desde que descubrimos la varargs.h no podemos dejar de mandar un número de argumentos variables, hoy veremos que con Java también es posible.</p>
<p><span id="more-953"></span>Como introducción, para aquellos con conocimientos en C, sabrán de funciones como prinft que les permite enviar un número ilimitado de argumentos luego de su cadena con formatos.</p>
<p>A continuación, veremos una implementación de la varargs que de muy buena forma nos muestra la <a href="http://en.wikipedia.org/wiki/Stdarg.h#.3Cvarargs.h.3E">Wikipedia</a>:</p>
<p>Ejemplo de función sumar:</p>
<div class="syntax_hilite">
<div id="c-23">
<div class="c"><span style="color: #339933;">#include &lt;stdarg.h&gt;</span><br />
&nbsp;<br />
<span style="color: #993333;">int</span> sumar<span style="color: #66cc66;">&#40;</span><span style="color: #993333;">int</span> n, ...<span style="color: #66cc66;">&#41;</span><br />
<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; va_list ap;<br />
&nbsp; &nbsp; <span style="color: #993333;">int</span> i = <span style="color: #cc66cc;">0</span>;<br />
&nbsp;<br />
&nbsp; &nbsp; va_start<span style="color: #66cc66;">&#40;</span>ap, n<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #b1b100;">for</span> <span style="color: #66cc66;">&#40;</span>; n; n--<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; i += va_arg<span style="color: #66cc66;">&#40;</span>ap, <span style="color: #993333;">int</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; va_end<span style="color: #66cc66;">&#40;</span>ap<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #b1b100;">return</span> i;<br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
<p></p>
<p>Ejemplo de llamados a la función:</p>
<div class="syntax_hilite">
<div id="c-24">
<div class="c">sumar <span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>;<br />
sumar <span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span>,<span style="color: #cc66cc;">2</span>,<span style="color: #cc66cc;">3</span>,<span style="color: #cc66cc;">4</span><span style="color: #66cc66;">&#41;</span>;</div>
</div>
</div>
<p></p>
<p>En <strong>Java</strong>, para hacer que un método tenga un <strong>número variable de argumentos</strong> se puede hacer enviando un array, o alguna colección, y luego desde el método recorrer el array o los elementos de la colección ¿que mejor ejemplo que el método main?</p>
<div class="syntax_hilite">
<div id="java-25">
<div class="java"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #993333;">static</span> <span style="color: #993333;">void</span> main<span style="color: #66cc66;">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">String</span></a><span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#93;</span> args<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>&nbsp; <br />
&nbsp; &nbsp; <a href="http://www.google.com/search?q=allinurl%3ASystem+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">System</span></a>.<span style="color: #006600;">out</span>.<span style="color: #006600;">println</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"y los argumentos son:"</span><span style="color: #66cc66;">&#41;</span>;&nbsp; <br />
&nbsp; &nbsp; <span style="color: #b1b100;">for</span> <span style="color: #66cc66;">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">String</span></a> arg : args<span style="color: #66cc66;">&#41;</span>&nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp;<a href="http://www.google.com/search?q=allinurl%3ASystem+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">System</span></a>.<span style="color: #006600;">out</span>.<span style="color: #006600;">println</span><span style="color: #66cc66;">&#40;</span>arg<span style="color: #66cc66;">&#41;</span>;&nbsp; <br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
<p></p>
<p>Pero bien, no es para desesperar, pues desde Java 5 se puden utilizar argumentos variables a un método de una forma por demás de sencilla:</p>
<div class="syntax_hilite">
<div id="java-26">
<div class="java"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #993333;">static</span> <span style="color: #993333;">void</span> imprimir<span style="color: #66cc66;">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">String</span></a>... <span style="color: #006600;">cadenas</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>&nbsp; <br />
&nbsp; <span style="color: #b1b100;">for</span> <span style="color: #66cc66;">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">String</span></a> cadena : cadenas<span style="color: #66cc66;">&#41;</span>&nbsp; <br />
&nbsp; &nbsp; <a href="http://www.google.com/search?q=allinurl%3ASystem+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">System</span></a>.<span style="color: #006600;">out</span>.<span style="color: #006600;">println</span><span style="color: #66cc66;">&#40;</span>cadena<span style="color: #66cc66;">&#41;</span>;&nbsp; <br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
<p></p>
<p>Como comentario, no está demás destacar que varargs no es más que una cáscara, pues internamente Java sigue utilizando un array, aunque a nosotros nos alivia mucho la sintaxis y por lo tanto se agradece <img src='http://luauf.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Vía: <a href="http://mundogeek.net/archivos/2009/04/04/varargs-en-java/">Mundo Geek</a></p>
]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2009/05/16/varargs-en-java/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Algunas funciones útiles escritas en C</title>
		<link>http://luauf.com/2008/11/20/algunas-funciones-utiles-escritas-en-c/</link>
		<comments>http://luauf.com/2008/11/20/algunas-funciones-utiles-escritas-en-c/#comments</comments>
		<pubDate>Fri, 21 Nov 2008 01:30:48 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[C]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[dinamicas]]></category>
		<category><![CDATA[funciones]]></category>
		<category><![CDATA[librerias]]></category>
		<category><![CDATA[trim]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=709</guid>
		<description><![CDATA[Para quienes dan sus primeros pasos en C, pero que vienen de otros lenguajes de más alto nivel, se encontrarán con el faltante de varias funciones disponibles en otros lenguajes (ya sea como funciones o como métodos de algunas clases). A continuación, pongo a vuestra disposición el código de algunas funciones que pueden resultar de [...]]]></description>
			<content:encoded><![CDATA[<p>Para quienes dan sus primeros pasos en C, pero que vienen de otros lenguajes de más <strong>alto nivel</strong>, se encontrarán con el faltante de varias funciones disponibles en otros lenguajes (ya sea como <strong>funciones</strong> o como <strong>métodos</strong> de algunas clases).</p>
<p>A continuación, pongo a vuestra disposición el código de algunas funciones que pueden resultar de utilidad: las clásicas funciones <strong>rtrim</strong>, <strong>ltrim</strong> y <strong>trim</strong> (para eliminar espacios a la derecha, izquierda y de ambos lados de una cadena) y de la función <strong>isNumeric</strong> para comprobar si un valor ingresado es numérico o no.</p>
<p>Además, para agregar un poco de valor agregado a la publicación convertiremos a estas funciones en una <strong>librería dinámica</strong>.</p>
<p><span id="more-709"></span></p>
<p>Los pasos a seguir son los siguientes:</p>
<ul>
<li>Crear un archivo funciones.h con la declaración de las funciones a utilizar. Este header será utilizado, luego, por las aplicaciones que hagan uso de la librería dinámica.</li>
</ul>
<div class="syntax_hilite">
<div id="c-31">
<div class="c"><span style="color: #339933;">#ifndef _LIBRERIA_FUNCIONES_H</span><br />
<span style="color: #339933;">#define _LIBRERIA_FUNCIONES_H</span><br />
<span style="color: #993333;">int</span> isNumeric&nbsp; &nbsp;<span style="color: #66cc66;">&#40;</span><span style="color: #993333;">const</span> <span style="color: #993333;">char</span> *val<span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #993333;">int</span> isAlpha&nbsp;<span style="color: #66cc66;">&#40;</span><span style="color: #993333;">const</span> <span style="color: #993333;">char</span> *val<span style="color: #66cc66;">&#41;</span>;</p>
<p><span style="color: #993333;">char</span> *rtrim&nbsp;<span style="color: #66cc66;">&#40;</span><span style="color: #993333;">char</span> *str<span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #993333;">char</span> *ltrim&nbsp;<span style="color: #66cc66;">&#40;</span><span style="color: #993333;">char</span> *str<span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #993333;">char</span> *trim&nbsp; <span style="color: #66cc66;">&#40;</span><span style="color: #993333;">char</span> *str<span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #339933;">#endif </span></div>
</div>
</div>
<p></p>
<ul>
<li>Crear un archivo funciones.c con la implementación de las funciones.</li>
</ul>
<div class="syntax_hilite">
<div id="c-32">
<div class="c"><span style="color: #339933;">#include &lt;stdio.h&gt;</span><br />
<span style="color: #339933;">#include &lt;stdlib.h&gt;</span><br />
<span style="color: #339933;">#include &lt;string.h&gt;</span><br />
<span style="color: #339933;">#include &lt;ctype.h&gt;</span></p>
<p><span style="color: #339933;">#include &quot;funciones.h&quot;</span><br />
&nbsp;<br />
<span style="color: #808080; font-style: italic;">/*******************************************************************************<br />
&nbsp;*<br />
&nbsp;*/</span><br />
<span style="color: #993333;">int</span> isNumeric<span style="color: #66cc66;">&#40;</span><span style="color: #993333;">const</span> <span style="color: #993333;">char</span> *val<span style="color: #66cc66;">&#41;</span><br />
<span style="color: #66cc66;">&#123;</span> <br />
&nbsp; &nbsp; <span style="color: #993333;">int</span> i = <span style="color: #cc66cc;">0</span>, s = <span style="color: #cc66cc;">0</span>; </p>
<p>&nbsp; &nbsp; <span style="color: #b1b100;">for</span><span style="color: #66cc66;">&#40;</span>i = <span style="color: #cc66cc;">0</span>; i &lt;strlen<span style="color: #66cc66;">&#40;</span>val<span style="color: #66cc66;">&#41;</span>; i++<span style="color: #66cc66;">&#41;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>isdigit<span style="color: #66cc66;">&#40;</span>val<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span> == <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s = -<span style="color: #cc66cc;">1</span>; </p>
<p>&nbsp; &nbsp; <span style="color: #b1b100;">return</span> s; <br />
<span style="color: #66cc66;">&#125;</span> <br />
&nbsp;</p>
<p><span style="color: #808080; font-style: italic;">/*******************************************************************************<br />
&nbsp;*<br />
&nbsp;*/</span><br />
<span style="color: #993333;">int</span> isAlpha<span style="color: #66cc66;">&#40;</span><span style="color: #993333;">const</span> <span style="color: #993333;">char</span> *val<span style="color: #66cc66;">&#41;</span><br />
<span style="color: #66cc66;">&#123;</span> <br />
&nbsp; &nbsp; <span style="color: #993333;">int</span> i = <span style="color: #cc66cc;">0</span>, s = <span style="color: #cc66cc;">0</span>; </p>
<p>&nbsp;&nbsp; &nbsp;<span style="color: #b1b100;">for</span><span style="color: #66cc66;">&#40;</span>i = <span style="color: #cc66cc;">0</span>; i &lt;strlen<span style="color: #66cc66;">&#40;</span>val<span style="color: #66cc66;">&#41;</span>; i++<span style="color: #66cc66;">&#41;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>isalnum<span style="color: #66cc66;">&#40;</span>val<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span> == <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s = -<span style="color: #cc66cc;">1</span>; </p>
<p>&nbsp; &nbsp; <span style="color: #b1b100;">return</span> s; <br />
<span style="color: #66cc66;">&#125;</span> </p>
<p>&nbsp;<br />
<span style="color: #808080; font-style: italic;">/*******************************************************************************<br />
&nbsp;*<br />
&nbsp;*/</span><br />
<span style="color: #993333;">char</span> *rtrim<span style="color: #66cc66;">&#40;</span><span style="color: #993333;">char</span> *str<span style="color: #66cc66;">&#41;</span><br />
<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #993333;">char</span> *endStr = <span style="color: #cc66cc;">0</span>;</p>
<p>&nbsp; &nbsp; endStr = str + strlen<span style="color: #66cc66;">&#40;</span>str<span style="color: #66cc66;">&#41;</span> - <span style="color: #cc66cc;">1</span>;</p>
<p>&nbsp; &nbsp; <span style="color: #b1b100;">while</span><span style="color: #66cc66;">&#40;</span> <span style="color: #66cc66;">&#40;</span>endStr&gt;= str<span style="color: #66cc66;">&#41;</span> &amp;&amp; <span style="color: #66cc66;">&#40;</span>*endStr == <span style="color: #ff0000;">' '</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; *endStr-- = <span style="color: #ff0000;">'<span style="color: #000099; font-weight: bold;">\0</span>'</span>;</p>
<p>&nbsp; &nbsp; <span style="color: #b1b100;">return</span> str;<br />
<span style="color: #66cc66;">&#125;</span><br />
&nbsp;</p>
<p><span style="color: #808080; font-style: italic;">/*******************************************************************************<br />
&nbsp;*<br />
&nbsp;*/</span><br />
<span style="color: #993333;">char</span> *ltrim<span style="color: #66cc66;">&#40;</span><span style="color: #993333;">char</span> *str<span style="color: #66cc66;">&#41;</span><br />
<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #993333;">char</span> *startStr = <span style="color: #cc66cc;">0</span>;</p>
<p>&nbsp; &nbsp; startStr = str;</p>
<p>&nbsp; &nbsp; <span style="color: #b1b100;">while</span><span style="color: #66cc66;">&#40;</span>*startStr == <span style="color: #ff0000;">' '</span><span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; startStr++;</p>
<p>&nbsp; &nbsp; <span style="color: #b1b100;">return</span> startStr;<br />
<span style="color: #66cc66;">&#125;</span></p>
<p>&nbsp;<br />
<span style="color: #808080; font-style: italic;">/*******************************************************************************<br />
&nbsp;*<br />
&nbsp;*/</span><br />
<span style="color: #993333;">char</span> *trim<span style="color: #66cc66;">&#40;</span><span style="color: #993333;">char</span> *str<span style="color: #66cc66;">&#41;</span><br />
<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">return</span> ltrim<span style="color: #66cc66;">&#40;</span>rtrim<span style="color: #66cc66;">&#40;</span>ltrim<span style="color: #66cc66;">&#40;</span>str<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
<p></p>
<ul>
<li>Creamos un archivo Makefile para facilitar la compilación.</li>
</ul>
<div class="syntax_hilite">
<div id="code-33">
<div class="code">CFLAGS=-Wall</p>
<p>clean:<br />
&nbsp; &nbsp; rm libfunciones.<span style="">so</span> </p>
<p>libfunciones: funciones.<span style="">c</span> <br />
&nbsp; &nbsp; cc $<span style="color:#006600; font-weight:bold;">&#40;</span>CFLAGS<span style="color:#006600; font-weight:bold;">&#41;</span> -c -o funciones.<span style="">o</span> funciones.<span style="">c</span><br />
&nbsp; &nbsp; ld -o libfunciones.<span style="">so</span> funciones.<span style="">o</span> -shared<br />
&nbsp; &nbsp; rm funciones.<span style="">o</span></div>
</div>
</div>
<p></p>
<ul>
<li>Finalmente, compilamos!!!</li>
</ul>
<div class="syntax_hilite">
<div id="code-34">
<div class="code">$ make libfunciones<br />
cc -Wall -c -o funciones.<span style="">o</span> funciones.<span style="">c</span><br />
ld -o libfunciones.<span style="">so</span> funciones.<span style="">o</span> -shared<br />
rm funciones.<span style="">o</span><br />
$</div>
</div>
</div>
<p></p>
<p>Para evitarles la tarea de copiar y pegar, pueden descargar los archivos anteriores aquí:</p>
<ul>
<li><a href="http://luauf.com/wp-content/uploads/2008/11/funciones.h">funciones.h</a></li>
<li><a href="http://luauf.com/wp-content/uploads/2008/11/funciones.c">funciones.c</a></li>
<li><a href="http://luauf.com/wp-content/uploads/2008/11/makefile">Makefile</a></li>
</ul>
<p>Para una próxima entrega, les estoy debiendo como utilizar esta librería dinámica desde otra aplicación.</p>
<p>Vía: <a href="http://www.seraphinux.com/index.php/436/2008/10/16/c-funcion-trim-ltrim-y-rtrim/" target="_blank">Seraphinux</a></p>
]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2008/11/20/algunas-funciones-utiles-escritas-en-c/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Ejemplo de función potencia iterativa y recursiva</title>
		<link>http://luauf.com/2008/08/20/ejemplo-de-funcion-potencia-iterativa-y-recursiva/</link>
		<comments>http://luauf.com/2008/08/20/ejemplo-de-funcion-potencia-iterativa-y-recursiva/#comments</comments>
		<pubDate>Thu, 21 Aug 2008 00:54:39 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[C]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[C++]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=635</guid>
		<description><![CDATA[Los algoritmos recursivos no son un recurso tan utilizado por los programadores, inclusive, también se plantean discusiones acerca de algoritmos iterativos vs. recursivos. Independientemente de la preferencia de cada uno de los programadores, la idea de esta publicación es mostrar con un ejemplo sencillo una misma función "potencia" escrita de ambas formas. Una función potencia, [...]]]></description>
			<content:encoded><![CDATA[<p>Los algoritmos recursivos no son un recurso tan utilizado por los programadores, inclusive, también se plantean discusiones acerca de algoritmos iterativos vs. recursivos.</p>
<p>Independientemente de la preferencia de cada uno de los programadores, la idea de esta publicación es mostrar con un ejemplo sencillo una misma función "potencia" escrita de ambas formas.</p>
<p><span id="more-635"></span></p>
<p>Una función potencia, de forma iterativa se puede escribir de la siguiente manera:</p>
<p><code></p>
<div class="syntax_hilite">
<div id="c-37">
<div class="c"><span style="color: #993333;">int</span> potencia <span style="color: #66cc66;">&#40;</span> <span style="color: #993333;">int</span> base, <span style="color: #993333;">int</span> exponente <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #993333;">long</span> p=<span style="color: #cc66cc;">1</span>;<br />
&nbsp; &nbsp; <span style="color: #993333;">int</span> i;</p>
<p>&nbsp; &nbsp; <span style="color: #b1b100;">for</span> <span style="color: #66cc66;">&#40;</span> i=<span style="color: #cc66cc;">1</span> ; i&lt;=exponente ; i++<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; p*=base;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span></p>
<p>&nbsp; &nbsp; <span style="color: #b1b100;">return</span><span style="color: #66cc66;">&#40;</span>p<span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
<p>
</code></p>
<p>Ahora, por definición, una función es recursiva cuando en su cuerpo hay un llamado a si misma.<br />
Esta definición es perfectamente aplicable a la potenciación, pues: x<sup>y</sup> = x * (x<sup>y-1</sup>), por ejemplo:<br />
2<sup>4</sup> = 2 * (2<sup>3</sup>)<br />
donde, 2<sup>3</sup> = 2 * (2<sup>2</sup>)<br />
donde, 2<sup>2</sup> = 2 * (2<sup>1</sup>)<br />
donde, 2<sup>1</sup> = 2 * (2<sup>0</sup>)</p>
<p>Por lo tanto, esto se podría escribir de la siguiente manera:<br />
<code></p>
<div class="syntax_hilite">
<div id="c-38">
<div class="c"><span style="color: #993333;">int</span> potencia<span style="color: #66cc66;">&#40;</span> <span style="color: #993333;">int</span> base, <span style="color: #993333;">int</span> exponente<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp;&nbsp; <span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>exponente == <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">return</span> <span style="color: #cc66cc;">1</span><br />
&nbsp; &nbsp;&nbsp; <span style="color: #66cc66;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">return</span> base * potencia<span style="color: #66cc66;">&#40;</span>base, exponente -<span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> <span style="color: #808080; font-style: italic;">// llamada recursiva</span><br />
&nbsp; &nbsp;&nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
<p>
</code></p>
<p>Tal vez este no sea el caso más representativo, pero una de las principales ventajas por las que se utilizan algoritmos recursivos es la por la disminución de la cantidad de líneas de código necesarias.</p>
<p>Vía: <a href="http://nuevosprogramadores.com/2008/08/aprendamos-a-escribir-funciones-recursivas/" target="_blank">Nuevos Programadores</a></p>
]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2008/08/20/ejemplo-de-funcion-potencia-iterativa-y-recursiva/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Programación en C/C++ con Eclipse</title>
		<link>http://luauf.com/2008/06/26/programacion-en-cc-con-eclipse/</link>
		<comments>http://luauf.com/2008/06/26/programacion-en-cc-con-eclipse/#comments</comments>
		<pubDate>Fri, 27 Jun 2008 00:53:43 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[C]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[IDEs]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=470</guid>
		<description><![CDATA[Eclipse es un IDE conocido para el desarrollo de aplicaciones Java. Sin embargo, es un IDE mucho más flexible de lo imaginado, pues gracias a una infinidad de plugins permite, entra otras cosas, editar clases visuales de Java, programar aplicaciones J2EE, C/C++ y en varios lenguajes más, conectarse a bases de datos y escribir consultas [...]]]></description>
			<content:encoded><![CDATA[<p>Eclipse es un IDE conocido para el desarrollo de aplicaciones Java. Sin embargo, es un IDE mucho más flexible de lo imaginado, pues gracias a una infinidad de plugins permite, entra otras cosas, editar clases visuales de Java, programar aplicaciones J2EE, C/C++ y en varios lenguajes más, conectarse a bases de datos y escribir consultas SQL, etc.</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-472" title="eclipse_logo_white" src="http://luauf.com/wp-content/uploads/2008/06/eclipse_logo_white.jpg" alt="" width="309" height="180" /></p>
<p>Para esta ocación, veremos que debemos hacer para programar en C o C++. Si bien, puedes descargarte una versión preparada para <a href="http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/ganymede/R/eclipse-cpp-ganymede-win32.zip" target="_blank">desarrolladores C/C++</a> , en nuestro caso arrancaremos de un eclipse instalado y utilizado (antes de esta publicación) únicamente para el desarrollo en Java.</p>
<p><span id="more-470"></span></p>
<p>Antes que nada debemos instalar el plugin necesario, para ello vamos a <strong>Help</strong> -&gt; <strong>Software Updates</strong> -&gt; <strong>Find and Install... </strong>y en la primer ventana seleccionaremos "Search for new features to install".</p>
<p>A continuación, seleccionamos el servidor de donde obtendremos las actualizaciones (yo seleccioné Callisto Discovery Site, eso no quita que el plugin no pueda estar disponible en otro server). Esta lista de servidores puede ser editada, nos permite agregar, quitar o actualizar servidores.</p>
<p>Luego de descargado el listado de características para instalar, seleccionamos "<strong>C and C++ Developement \ Eclipse C and C++ Developement Tools</strong>", hacemos clic en Next y esperamos un tiempo hasta que termine la descarga.</p>
<p style="text-align: center;"><a href="http://luauf.com/wp-content/uploads/2008/06/eclipse_updates.jpg"><img class="aligncenter size-medium wp-image-471" title="eclipse_updates" src="http://luauf.com/wp-content/uploads/2008/06/eclipse_updates-300x250.jpg" alt="" width="300" height="250" /></a></p>
<p style="text-align: left;">Terminada la descarga será necesario reiniciar el IDE para que los cambios tengan efecto. A partir de ahora, al momento de crear un proyecto nuevo, tenemos la opción de elegir un proyecto C o C++.</p>
<p style="text-align: center;"><a href="http://luauf.com/wp-content/uploads/2008/06/c_cpp_project.jpg"><img class="aligncenter size-medium wp-image-473" title="c_cpp_project" src="http://luauf.com/wp-content/uploads/2008/06/c_cpp_project-300x299.jpg" alt="" width="300" height="299" /></a></p>
<p style="text-align: left;">Cabe destacar, que debes tener el compilador de C/C++ instalado, gcc, <a href="http://luauf.com/2008/04/27/gcc-para-windows/" target="_self">gcc para Windows </a>o cualquier otro compilador de C.</p>
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;">
]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2008/06/26/programacion-en-cc-con-eclipse/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Struct, Union y Enum en C</title>
		<link>http://luauf.com/2008/06/04/struct-union-y-enum-en-c/</link>
		<comments>http://luauf.com/2008/06/04/struct-union-y-enum-en-c/#comments</comments>
		<pubDate>Wed, 04 Jun 2008 03:33:23 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[C]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[C++]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=371</guid>
		<description><![CDATA[A continuación, del Curso de Programación en C de Programar es fácil (o no) veremos un breve resumen de algunas estructuras de datos: Estructuras Uniones Enumeraciones Struct Una estructura es una agrupación, bajo un mismo nombre de variable, distintos datos que pueden ser de diferente tipo. Las estructuras vienen a salvar la limitación de los [...]]]></description>
			<content:encoded><![CDATA[<p>A continuación, del Curso de Programación en C de <a href="http://profeblog.es/blog/alfredo/" target="_blank">Programar es fácil (o no)</a> veremos un breve resumen de algunas estructuras de datos:</p>
<ul>
<li>Estructuras</li>
<li>Uniones</li>
<li>Enumeraciones</li>
</ul>
<p><span id="more-371"></span></p>
<p><strong>Struct</strong></p>
<p>Una estructura es una agrupación, bajo un mismo nombre de variable, distintos datos que pueden ser de diferente tipo. Las estructuras vienen a salvar la limitación de los arrays, que solo almacenan un único tipo de dato.</p>
<p>Una estructura también es llamada registro y cabe su analogía con los registros de una tabla, donde un registro tiene varios datos (campos) y estos pueden diferir en su tipo:</p>
<p>Ejemplo:</p>
<p><code></p>
<div class="syntax_hilite">
<div id="c-42">
<div class="c"><span style="color: #993333;">struct</span> usuarios_t <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp;<span style="color: #993333;">int</span> &nbsp;&nbsp;dni;<br />
&nbsp; &nbsp;<span style="color: #993333;">char</span> &nbsp; &nbsp; nombres<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">50</span><span style="color: #66cc66;">&#93;</span>;<br />
&nbsp; &nbsp;<span style="color: #993333;">char</span> &nbsp; &nbsp; apellido<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">30</span><span style="color: #66cc66;">&#93;</span>;<br />
&nbsp; &nbsp;time_t&nbsp; &nbsp;nacimiento;<br />
<span style="color: #66cc66;">&#125;</span>;</p>
<p><span style="color: #808080; font-style: italic;">//un registro usuarios:</span><br />
<span style="color: #993333;">struct</span> usuarios_t usuario;<br />
usuario.<span style="color: #202020;">dni</span>=<span style="color: #cc66cc;">27651109</span><br />
strcpy<span style="color: #66cc66;">&#40;</span>usuario.<span style="color: #202020;">nombres</span>,<span style="color: #ff0000;">"Jose Maria"</span><span style="color: #66cc66;">&#41;</span>;<br />
...</p>
<p><span style="color: #808080; font-style: italic;">//un array de registros:</span><br />
<span style="color: #993333;">struct</span> usuarios_t usuarios<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">10</span><span style="color: #66cc66;">&#93;</span>;<br />
usuario<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#93;</span>.<span style="color: #202020;">dni</span>=<span style="color: #cc66cc;">27651109</span><br />
strcpy<span style="color: #66cc66;">&#40;</span>usuario<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#93;</span>.<span style="color: #202020;">nombres</span>,<span style="color: #ff0000;">"Jose Maria"</span><span style="color: #66cc66;">&#41;</span>;<br />
usuario<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#93;</span>.<span style="color: #202020;">dni</span>=<span style="color: #cc66cc;">26852789</span><br />
strcpy<span style="color: #66cc66;">&#40;</span>usuario<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#93;</span>.<span style="color: #202020;">nombres</span>,<span style="color: #ff0000;">"Juan Carlos"</span><span style="color: #66cc66;">&#41;</span>;<br />
...</div>
</div>
</div>
<p>
</code></p>
<p>No es mi intención sumar complejidad a este resumen, solo quiero agregar que se pueden declarar punteros a estructuras, que los elementos de una estructura pueden ser punteros, que se pueden anidar estructuras, pasar estructuras (como punteros a estructuras) como parámetro de funciones, etc.</p>
<p><strong>Union</strong></p>
<p>Una union se declara de la misma forma que una estructura, reemplazando <strong>struct</strong> por <strong>union</strong>. La diferencia está en que todos los miembros de la union comparten el mismo espacio en memoria, por lo que solo se puede tener almacenado un miembro de ellos en cada momento. El tamaño de la union estará dado por el miembro más largo de la misma.</p>
<p>Ejemplo:</p>
<p><code></p>
<div class="syntax_hilite">
<div id="c-43">
<div class="c"><span style="color: #993333;">struct</span> usuarios_t <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp;<span style="color: #993333;">int</span> &nbsp;&nbsp;dni;<br />
&nbsp; &nbsp;<span style="color: #993333;">char</span> &nbsp; &nbsp; nombres<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">50</span><span style="color: #66cc66;">&#93;</span>;<br />
&nbsp; &nbsp;<span style="color: #993333;">char</span> &nbsp; &nbsp; apellido<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">30</span><span style="color: #66cc66;">&#93;</span>;<br />
&nbsp; &nbsp;time_t&nbsp; &nbsp;nacimiento;<br />
<span style="color: #66cc66;">&#125;</span>;<br />
<span style="color: #993333;">union</span> usuario_t usuario;&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">/* Declaración de la variable */</span></div>
</div>
</div>
<p>
</code></p>
<p><strong>Enum</strong></p>
<p>Una enumeración es un conjunto de constantes enteras. A la enumeración se le puede asignar un nombre, que se comportará como un nuevo tipo de dato que solo podrá contener los valores especificados en la enumeración.</p>
<p>Ejemplo:</p>
<p><code></p>
<div class="syntax_hilite">
<div id="c-44">
<div class="c"><span style="color: #000000; font-weight: bold;">enum</span> dias_semana <span style="color: #66cc66;">&#123;</span>LUNES=<span style="color: #cc66cc;">1</span>, MARTES=<span style="color: #cc66cc;">2</span>, MIERCOLES=<span style="color: #cc66cc;">3</span>, JUEVES=<span style="color: #cc66cc;">4</span>, VIERNES=<span style="color: #cc66cc;">5</span>, SÁBADO=<span style="color: #cc66cc;">6</span>, DOMINGO=<span style="color: #cc66cc;">7</span> <span style="color: #66cc66;">&#125;</span>;</p>
<p>dias_semana &nbsp; &nbsp; dia;<br />
dia &nbsp; &nbsp; &nbsp; &nbsp; = &nbsp; LUNES;<br />
dia &nbsp; &nbsp; &nbsp; &nbsp; = &nbsp; <span style="color: #cc66cc;">1</span>;&nbsp; &nbsp; <span style="color: #808080; font-style: italic;">/* Ambas asignaciones son equivalentes */</span></div>
</div>
</div>
<p>
</code></p>
<p>Vía: <a href="http://profeblog.es/blog/alfredo/2008/05/11/estructuras-structs-en-c-tambien-llamadas-registros/" target="_blank">Estructuras en C</a>, <a href="http://profeblog.es/blog/alfredo/2008/05/12/uniones-en-c/">Uniones en C</a>, <a href="http://profeblog.es/blog/alfredo/2008/05/13/enumeraciones-en-c/" target="_blank">Enumeraciones en C</a></p>
]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2008/06/04/struct-union-y-enum-en-c/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>

