<?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>Tronk.Net ... Tu portal útil &#187; Programacion</title>
	<atom:link href="http://portal.tronk.net/archives/category/programacion/feed" rel="self" type="application/rss+xml" />
	<link>http://portal.tronk.net</link>
	<description>Lo que más nos gusta</description>
	<lastBuildDate>Tue, 15 Dec 2009 18:41:13 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Programación PHP</title>
		<link>http://portal.tronk.net/archives/69</link>
		<comments>http://portal.tronk.net/archives/69#comments</comments>
		<pubDate>Fri, 02 Nov 2007 15:35:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programacion]]></category>

		<guid isPermaLink="false">http://portal.tronk.net/archives/69</guid>
		<description><![CDATA[En este LIBRO ir&#225; todo lo relacionado con el Lenguaje PHP, desde lo m&#225;s b&#225;sico a lo m&#225;s avanzado. Al final todos aprenderemos PHP     Un sitio Web destinado a un futuro brillante no puede estar basado &#250;nicamente en una serie p&#225;ginas HTML est&#225;ticas. Y para proporcionar resultados satisfactorios a los usuarios, [...]]]></description>
			<content:encoded><![CDATA[<p>En este LIBRO ir&aacute; todo lo relacionado con el Lenguaje PHP, desde lo m&aacute;s b&aacute;sico a lo m&aacute;s avanzado. Al final todos aprenderemos PHP <img src='http://portal.tronk.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />    Un sitio Web destinado a un futuro brillante no puede estar basado &uacute;nicamente en una serie p&aacute;ginas HTML est&aacute;ticas. Y para proporcionar resultados satisfactorios a los usuarios, debe tener la capacidad de generar autom&aacute;ticamente un contenido din&aacute;mico. Es all&iacute; donde interviene PHP, como uno de los lenguajes m&aacute;s populares y f&aacute;ciles de utilizar, para desarrollar este tipo de aplicaci&oacute;n Web. &iexcl;Bienvenido entonces al mundo de los sitios din&aacute;micos!
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="-1" color="black"> <strong>Sumario:</strong></p>
<p>   &#8211; <a href="http://www.tripod.lycos.es/webmaster/topics/technic/php/php-introduction1/1/">&iquest;Qu&eacute; es el PHP?</a><br />   &#8211; <a href="http://www.tripod.lycos.es/webmaster/topics/technic/php/php-introduction1/2/">&iquest;Qu&eacute; ofrece el PHP?</a><br />   &#8211; <a href="http://www.tripod.lycos.es/webmaster/topics/technic/php/php-introduction1/3/">El PHP en sus p&aacute;ginas</a><br />   &#8211; <a href="http://www.tripod.lycos.es/webmaster/topics/technic/php/php-introduction1/4/">Requisitos</a><br />   &#8211; <a href="http://www.tripod.lycos.es/webmaster/topics/technic/php/php-introduction1/5/">Software necesario</a><br />  </font></p>
]]></content:encoded>
			<wfw:commentRss>http://portal.tronk.net/archives/69/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Página de programación C/C++ en Unix/Linux</title>
		<link>http://portal.tronk.net/archives/68</link>
		<comments>http://portal.tronk.net/archives/68#comments</comments>
		<pubDate>Fri, 02 Nov 2007 15:33:29 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programacion]]></category>

		<guid isPermaLink="false">http://portal.tronk.net/archives/68</guid>
		<description><![CDATA[P&#225;gina de programaci&#243;n C/C++ en Unix/Linux
Nuevos temas:   9 de Mayo de 2004:  Temas para principiantes: Obtenci&#243;n de  n&#250;meros aleatorios con rand()   26 de Abril de 2004:  Temas para principiantes: un  Hola mundo y una  sesi&#243;n b&#225;sica con debugger  11 de Febrero de 2004:   [...]]]></description>
			<content:encoded><![CDATA[<p>P&aacute;gina de programaci&oacute;n C/C++ en Unix/Linux
<p align="center"><font face="Arial">Nuevos temas:</font> <br /> <font color="#000000"> <strong>9 de Mayo de 2004: </strong> Temas para principiantes: <a href="http://www.geocities.com/chuidiang/funciones/rand.html">Obtenci&oacute;n de  n&uacute;meros aleatorios</a> con rand()</font> <br /> <font color="#000000"> <strong>26 de Abril de 2004: </strong> Temas para principiantes: un <a href="http://www.geocities.com/chuidiang/herramientas/basico/hola_mundo.html"> Hola mundo</a> y una <a href="http://www.geocities.com/chuidiang/herramientas/basico/debugger.html"> sesi&oacute;n b&aacute;sica con debugger</a> <br /> <strong>11 de Febrero de 2004:</strong>  <font color="#009900"> <a href="http://www.geocities.com/chuidiang/x11/graficos/coordenadas.html"> Transformar coordenadas</a> de gr&aacute;fico a pixels y un <a href="http://www.geocities.com/chuidiang/x11/graficos/seno.html">ejemplo</a>  sobre X11</font>. <br />  </font></p>
<hr /><font face="Arial"><br />      </font>
<p><font face="Arial">En esta p&aacute;gina hay algunos ejemplos muy  sencillos (lo m&iacute;nimo imprescindible) de programaci&oacute;n &quot;avanzada&quot; en C/C++ para  Unix/Linux. <br /> Tambi&eacute;n hay algunas cosillas de Java,  libros, im&aacute;genes curiosas, etc. <br /> Puedes ver o a&ntilde;adir <a href="http://members.lycos.co.uk/chuidiang/enlaces.php">enlaces</a> a otras  p&aacute;ginas de programaci&oacute;n. <br /> El autor de esta fechor&iacute;a es <a href="mailto:chuidiang@hotmail.com">chuidiang@hotmail.com</a> <br />   </font> </p>
<p><font face="Arial"><strong><font color="#333300">Tema principal</font></strong>  : Programaci&oacute;n de <a href="http://www.geocities.com/chuidiang/#clinux">C en linux</a>. <br /> <strong>Otros temas</strong> :  <a href="http://www.geocities.com/chuidiang/#otros">c++, java, libros,  metodolog&iacute;as de dise&ntilde;o, pasatiempos</a>.</font> </p>
<p align="center"><font face="Arial"> <img src="/documentos/programacion/pizarra.gif" border="0" alt="" /></font></p>
<p>&nbsp;</p>
<table border="1" cellspacing="0">
<p><strong>PROGRAMACI&Oacute;N EN C SOBRE  	UNIX/LINUX</strong> 	</p>
<tbody>
<tr>
<td>Sockets  		TCP/IP</td>
<td><strong>Comunicaci&oacute;n en red</strong>: Dos  		programas en el mismo o en distintos ordenadores pueden abrir una  		comunicaci&oacute;n entre ellos y enviarse datos.
<ul>
<li>Un 			<a href="http://www.geocities.com/chuidiang/sockets/sockets_simp.htm"> 			ejemplo b&aacute;sico</a>.  Del  			ejemplo extraemos una 			<a href="http://www.geocities.com/chuidiang/sockets/libreria/libreria.html"> 			mini-librer&iacute;a</a> para facilitarnos el trabajo con sockets.   			</li>
<li>Otro ejemplo de c&oacute;mo 			<a href="http://www.geocities.com/chuidiang/sockets/socketselect.html"> 			atender a varios clientes</a> simult&aacute;neamente sin crear nuevos hilos  			ni procesos.   			</li>
<li>C&oacute;mo hacer para que al leer  			de un socket sepamos qu&eacute; 			<a href="http://www.geocities.com/chuidiang/sockets/mensajes.html"> 			mensaje</a> nos est&aacute; llegando.   			  			</li>
<li>Ejemplo de sockets 			<a href="http://www.geocities.com/chuidiang/sockets/udp/udp.html"> 			upd</a>.    			</li>
<li>Comunicaci&oacute;n de<a href="http://www.geocities.com/chuidiang/java/sockets/cpp_java/cpp_java.html">  			sockets entre Java y C</a>.  </li>
</ul>
</td>
</tr>
<tr>
<td> 		<a href="http://www.geocities.com/chuidiang/rpc/rpc.html">RPC</a>.  		<br /> 		Remote Procedure Call</td>
<td><strong>Comunicaci&oacute;n en red</strong>:  		Un programa en ejecuci&oacute;n puede llamar a funciones de otro programa  		tambi&eacute;n en ejecuci&oacute;n en otro ordenador.</td>
</tr>
<tr>
<td> 		<a href="http://www.geocities.com/chuidiang/mem_comp/mem_comp.html"> 		Memoria compartida</a></td>
<td><strong>Comunicaci&oacute;n entre procesos</strong>:  		Dos programas en la misma m&aacute;quina pueden compartir una zona com&uacute;n de  		memoria para intercambiar datos.</td>
</tr>
<tr>
<td> 		<a href="http://www.geocities.com/chuidiang/semaforos/semaforo.html"> 		Sem&aacute;foros</a></td>
<td><strong>Comunicaci&oacute;n entre procesos</strong>:  		C&oacute;mo hacer que un programa espere a otro o que no puedan acceder  		simult&aacute;neamente a un recurso com&uacute;n, ambos en el mismo ordenador.</td>
</tr>
<tr>
<td> 		<a href="http://www.geocities.com/chuidiang/colas/colas.html">Colas de  		mensajes</a></td>
<td><strong>Comunicaci&oacute;n entre procesos</strong>:  		Dos programas en el mismo ordenador pueden enviarse mensajes con  		informaci&oacute;n.</td>
</tr>
<tr>
<td> 		<a href="http://www.geocities.com/chuidiang/senhales/senhales.html"> 		Se&ntilde;ales y alarmas</a></td>
<td><strong>Comunicaci&oacute;n entre procesos:</strong>  		Dos programas en el mismo ordenador se pueden enviar se&ntilde;ales. C&oacute;mo hacer  		que un programa ejecute algo cada cierto tiempo sin necesidad de  		&quot;dormirlo&quot;.</td>
</tr>
<tr>
<td> 		<a href="http://www.geocities.com/chuidiang/procesos/procesoshilos.html"> 		Procesos y Threads</a></td>
<td><strong>Multitarea</strong>: Podemos  		hacer que nuestro programa ejecute varias cosas &quot;simult&aacute;neamente&quot;.</td>
</tr>
<tr>
<td rowspan="4"><strong>&Uacute;tiles de  		desarrollo</strong></td>
<td> 		<a href="http://www.geocities.com/chuidiang/herramientas/makefile.html"> 		make</a> : Mi proyecto es muy grande, tengo fuentes por varios  		directorios y tarda mucho en compilar. make nos ayuda a compilar  		eficientemente y con facilidad.</td>
</tr>
<tr>
<td> 		<a href="http://www.geocities.com/chuidiang/herramientas/profiler.html"> 		profiler</a> : Mi programa va muy lento. &iquest;C&oacute;mo s&eacute; d&oacute;nde est&aacute; perdiendo  		el tiempo?</td>
</tr>
<tr>
<td> 		<a href="http://www.geocities.com/chuidiang/herramientas/librerias.html"> 		librer&iacute;as</a> :  Qu&eacute; son las librer&iacute;as y c&oacute;mo puedo hacer una.</td>
</tr>
<tr>
<td> 		<a href="http://www.geocities.com/chuidiang/herramientas/ctags/ctags.html"> 		ctags</a> : C&oacute;mo navegar con el vi por los tipos de nuestro c&oacute;digo C</td>
</tr>
<tr>
<td rowspan="2"><strong>Gr&aacute;ficos</strong></td>
<td>Un peque&ntilde;o programa de ejemplo  		y las <a href="http://www.geocities.com/chuidiang/x11/x11.html"> 		explicaciones b&aacute;sicas</a> para poder empezar a hacer gr&aacute;ficos  		&quot;maravillosos&quot; en linux/unix con X11.</td>
</tr>
<tr>
<td> 		 		<img src="/documentos/programacion/nuevo.gif" border="0" alt="" width="50" height="16" align="absmiddle" /><a href="http://www.geocities.com/chuidiang/x11/graficos/coordenadas.html">Las  		cuentas</a> para transformar los puntos de nuestro gr&aacute;fico en pixels de  		pantalla.<a href="http://www.geocities.com/chuidiang/x11/graficos/seno.html">  		Un ejemplo</a> dibujando la funci&oacute;n sin(x) sobre una ventana de X11.</td>
</tr>
<tr>
<td>C&oacute;digos 		<a href="http://www.geocities.com/chuidiang/ansi/ansi.html">ANSI</a></td>
<td><strong>Varios</strong>: En una ventana  		de texto UNIX o MS-DOS se puede controlar desde C/C++ la posici&oacute;n para  		escribir con un printf() o los colores con los que se escribe el texto.</td>
</tr>
<tr>
<td>Algunas 		<a href="http://www.geocities.com/chuidiang/funciones/funciones.html"> 		funciones &uacute;tiles</a></td>
<td><strong>Varios</strong>: Funciones poco  		conocidas, pero &uacute;tiles para programaci&oacute;n en C sobre unix.</td>
</tr>
<tr>
<td> 		<a href="http://www.geocities.com/chuidiang/funciones/punteros.html"> 		Punteros</a></td>
<td><strong>Varios:</strong> Algunos de los  		errores t&iacute;picos que se comenten al comenzar a manejar punteros.</td>
</tr>
</tbody>
</table>
<table border="1" cellspacing="0"> 	OTROS TEMAS<br />
<tbody>
<tr>
<td width="150">C++</td>
<td width="737">Algunos 		<a href="http://www.geocities.com/chuidiang/trucoscpp.html">trucos de  		programaci&oacute;n</a> y cosas que pueden dar problemas y traernos de cabeza. 		<br /> 		<a href="http://www.geocities.com/chuidiang/sobrecarga/sobrecarga.html"> 		Sobrecarga de operadores</a> . Algunos operadores curiosos para  		sobrecargar. <br /> 		<a href="http://www.geocities.com/chuidiang/sobrecarga/ocultacion/ocultacion.html"> 		Ocultaci&oacute;n y encapsulamiento</a> en C++. Por qu&eacute; es tan importante la  		encapsulaci&oacute;n.</td>
</tr>
<tr>
<td>C sobre linux para novatos</td>
<td> 		 		<img src="/documentos/programacion/nuevo.gif" border="0" alt="" width="50" height="16" align="absmiddle" />  		Como editar con el vi, compilar con gcc y ejecutar un &quot;<a href="http://www.geocities.com/chuidiang/herramientas/basico/hola_mundo.html">Hola  		mundo</a>&quot; en C sobre linux. <br /> 		<img src="/documentos/programacion/nuevo.gif" border="0" alt="" width="50" height="16" align="absmiddle" />  		Una 		<a href="http://www.geocities.com/chuidiang/herramientas/basico/debugger.html"> 		sesi&oacute;n b&aacute;sica con el debugger</a> de linux, el gdb. <br /> 		<img src="/documentos/programacion/nuevo.gif" border="0" alt="" width="50" height="16" align="absmiddle" /> 		<a href="http://www.geocities.com/chuidiang/funciones/rand.html"> 		Obtenci&oacute;n de n&uacute;meros aleatorios</a> con rand() y drand48().</td>
</tr>
<tr>
<td width="150">Java</td>
<td width="737">Lo de java ha  		pasado a <a href="http://www.geocities.com/chuidiang/java/index.html"><img src="/documentos/programacion/casajava.gif" border="0" alt="P&aacute;gina inicial de java" width="87" height="32" align="middle" /></a></td>
</tr>
<tr>
<td width="150"> 		<a href="http://www.geocities.com/chuidiang/Libros/libros.html">Libros</a>  		de inform&aacute;tica</td>
<td width="737"><strong>Documentaci&oacute;n</strong>:  		Algunos libros que he leido &uacute;ltimamente y mi opini&oacute;n sobre ellos. Hay de  		programaci&oacute;n en unix, de C++, de dise&ntilde;o orientado a objetos (uml, &#8230;),  		de gesti&oacute;n de proyectos software, etc</td>
</tr>
<tr>
<td width="150"> 		<a href="http://www.geocities.com/chuidiang/metodologia/metodologia.html"> 		Metodolog&iacute;a orientada a objetos</a></td>
<td width="737"><strong>Documentaci&oacute;n</strong>:  		Mi propio resumen de las metodolog&iacute;as orientadas a objetos despu&eacute;s de  		haber leido varios libros y montones de art&iacute;culos en internet sobre el  		tema.</td>
</tr>
<tr>
<td width="150"> 		<a href="http://www.geocities.com/chuidiang/patrones/modelovista.html"> 		Modelo vista controlador</a></td>
<td width="737"><strong>Documentaci&oacute;m:</strong>  		Una forma habitual de separar nuestras clases de forma que luego podamos  		reutilizarlas al m&aacute;ximo.</td>
</tr>
<tr>
<td width="150"> 		<a href="http://www.geocities.com/chuidiang/metodologia/extrema.html"> 		Programaci&oacute;n extrema</a></td>
<td width="737"><strong>Documentaci&oacute;n: 		</strong>Una alternativa a las metodolog&iacute;as que requieren demasiada  		documentaci&oacute;n (dise&ntilde;os, diagramas, UML, etc).</td>
</tr>
<tr>
<td width="150"> 		<a href="http://www.geocities.com/chuidiang/problad.html">El problema de  		los ladrillos</a></td>
<td width="737"><strong>Pasatiempos</strong>:  		Un problema de matem&aacute;ticas que da un resultado asombroso.</td>
</tr>
<tr>
<td width="150"> 		<a href="http://www.geocities.com/chuidiang/fotos_ingenio/me00006.htm"> 		Im&aacute;genes y efectos &oacute;pticos</a></td>
<td width="737"><strong>Pasatiempos</strong>:  		Algunas im&aacute;genes y efectos &oacute;pticos recopilados de portalmix.</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://portal.tronk.net/archives/68/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Curso de CORBA (Desarrollo de aplicaciones)</title>
		<link>http://portal.tronk.net/archives/67</link>
		<comments>http://portal.tronk.net/archives/67#comments</comments>
		<pubDate>Fri, 02 Nov 2007 15:32:51 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programacion]]></category>

		<guid isPermaLink="false">http://portal.tronk.net/archives/67</guid>
		<description><![CDATA[Curso de CORBA (Desarrollo de aplicaciones)
El curso se divide en cuatro entregas:  

 	Introducci&#243;n al curso. Introducci&#243;n a la arquitectura CORBA    
 	Herramientas de desarrollo. Lenguaje OMG/IDL    
 	An&#225;lisis y dise&#241;o de una aplicaci&#243;n CORBA    
 	Implementaci&#243;n de una aplicaci&#243;n CORBA. Conclusiones 

Alvaro del Castillo [...]]]></description>
			<content:encoded><![CDATA[<p>Curso de CORBA (Desarrollo de aplicaciones)
<p>El curso se divide en cuatro entregas:  </p>
<ol>
<li> 	<a href="http://umeet.uninet.edu/conferencias/acsdsevilla/corba/entrega1/entrega1.html">Introducci&oacute;n al curso. Introducci&oacute;n a la arquitectura CORBA</a>    </li>
<li> 	<a href="http://umeet.uninet.edu/conferencias/acsdsevilla/corba/entrega2/entrega2.html">Herramientas de desarrollo. Lenguaje OMG/IDL</a>    </li>
<li> 	<a href="http://umeet.uninet.edu/conferencias/acsdsevilla/corba/entrega3/entrega3.html">An&aacute;lisis y dise&ntilde;o de una aplicaci&oacute;n CORBA</a>    </li>
<li> 	<a href="http://umeet.uninet.edu/conferencias/acsdsevilla/corba/entrega4/corba4.html">Implementaci&oacute;n de una aplicaci&oacute;n CORBA. Conclusiones</a> </li>
</ol>
<p>Alvaro del Castillo San F&eacute;lix. Distribuido bajo licencia <a href="http://www.gnu.org/copyleft/fdl.html">FDL</a>. <a href="http://umeet.uninet.edu/conferencias/acsdsevilla/corba/contribuciones.html"> Contribuciones</a>   </p>
]]></content:encoded>
			<wfw:commentRss>http://portal.tronk.net/archives/67/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Entrada y salida estándar en C++ (programación C++)</title>
		<link>http://portal.tronk.net/archives/66</link>
		<comments>http://portal.tronk.net/archives/66#comments</comments>
		<pubDate>Fri, 02 Nov 2007 15:31:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programacion]]></category>

		<guid isPermaLink="false">http://portal.tronk.net/archives/66</guid>
		<description><![CDATA[Entrada y salida est&#225;ndar en C++
&#160;

Operaciones de salida.  	
Operaciones de entrada  	
Anexos  	
Bibliograf&#237;a

  
Cuando nos referimos a entrada/salida est&#225;ndar (E/S est&#225;ndar) queremos decir  que los datos o bien se est&#225;n leyendo del teclado, &#243; bien se est&#225;n escribiendo  en el monitor de video. Como se utilizan muy frecuentemente se [...]]]></description>
			<content:encoded><![CDATA[<p>Entrada y salida est&aacute;ndar en C++
<p>&nbsp;</p>
<ol>
<li><a href="#SALIDA"><font face="Arial" size="2"><strong>Operaciones de salida.</strong></font></a>  	</li>
<li><a href="#ENTRADA"><font face="Arial" size="2"><strong>Operaciones de entrada</strong></font></a>  	</li>
<li><a href="#ANXOS"><font face="Arial" size="2"><strong>Anexos</strong></font></a>  	</li>
<li><a href="#BIBLIO"><font face="Arial" size="2"><strong>Bibliograf&iacute;a</strong></font></a></li>
</ol>
<p> <font face="Arial" size="2"> </font>
<p><font face="Arial" size="2">Cuando nos referimos a entrada/salida est&aacute;ndar (E/S est&aacute;ndar) queremos decir  que los datos o bien se est&aacute;n leyendo del teclado, &oacute; bien se est&aacute;n escribiendo  en el monitor de video. Como se utilizan muy frecuentemente se consideran como  los dispositivos de E/S por default y no necesitan ser nombrados en las  instrucciones de E/S.</font></p>
<p><font face="Arial" size="2">En el lenguaje c++ tenemos varias alternativas para ingresar y/o mostrar  datos, dependiendo de la librer&iacute;a que vamos a utilizar para desarrollar el  programa, entre estas est&aacute;n: </font><strong> <font face="Arial" size="2" color="#800000"><em>iostream.h</em></font></strong><font face="Arial" size="2">  y </font><font face="Arial" size="2" color="#800000"><em>sodio.h.</em></font></p>
<p> <font face="Arial" size="2"> </font>
<p><font face="Arial" size="2">&lt; IOSTREAM.H&gt;</font></p>
<p><font face="Arial" size="2">Las operaciones de entrada y salida no forman parte del conjunto de  sentencias de C++, sino que pertenecen al conjunto de funciones y clases de la  biblioteca est&aacute;ndar de C++. Ellas se incluyen en los archivos de cabecera </font> <strong><font face="Arial" size="2" color="#800000"><em>iostream.h</em></font><font face="Arial" size="2"> </font></strong><font face="Arial" size="2">por lo que siempre que queramos  utilizarlas deberemos introducir la l&iacute;nea de c&oacute;digo </font><strong> <font face="Arial" size="2" color="#800000"><em>#include </em></font></strong></p>
<p> <strong><font face="Arial" size="2"> </font></strong>
<p><strong><font face="Arial" size="2">   </font></strong><font face="Arial" size="2">Esta biblioteca es una  implementaci&oacute;n orientada a objetos y est&aacute; basada en el concepto de <em>flujos</em>.  A nivel abstracto un flujo es un medio de describir la secuencia de datos de una  fuente a un destino o sumidero. As&iacute;, por ejemplo, cuando se introducen  caracteres desde el teclado, se puede pensar en caracteres que fluyen o se  trasladan desde el teclado a las estructuras de datos del programa.</font></p>
<p><font face="Arial" size="2">    Los objetos de flujo que vienen predefinidos ser&aacute;n:</font></p>
<ol> 	<strong><font face="Arial" size="2" color="#800000">
<li>cin</li>
<p></font><font face="Arial" size="2">, </font></strong> 	<font face="Arial" size="2">que toma caracteres de la entrada est&aacute;ndar  	(teclado); </font><strong><font face="Arial" size="2" color="#800000">
<li>cout</li>
<p></font></strong><font face="Arial" size="2">, pone caracteres en la  	salida est&aacute;ndar (pantalla); </font><strong> 	<font face="Arial" size="2" color="#800000">
<li>cerr y clog</li>
<p></font></strong><font face="Arial" size="2"> ponen mensajes  	de error en la salida est&aacute;ndar. </font></ol>
<p align="justify"><font face="Arial" size="2">Estos objetos se utilizan mediante los operadores <strong>&lt;&lt;</strong>  y <strong>&gt;&gt;. </strong>El operador &lt;&lt; se denomina operador de inserci&oacute;n; y  apunta al objeto donde tiene que enviar la informaci&oacute;n. Por lo tanto la sintaxis  de cout ser&aacute;:</font></p>
<p> <font face="Arial" size="2" color="#0000ff">
<p>                    <strong>cout&lt;&lt;&lt;&lt;&#8230;&lt;</strong></p>
<p> </font><font face="Arial" size="2">
<p>No olvidemos que las cadenas de texto son variables y se ponen entre &quot; &quot;  (comillas dobles).</p>
<p>Por su parte &gt;&gt; se denomina operador de extracci&oacute;n, lee informaci&oacute;n del flujo  cin (a la izquierda del operador) y las almacena en las variables indicadas a la  derecha).<br />     La sintaxis ser&iacute;a la siguiente:</p>
<p> </font><font face="Arial" size="2" color="#0000ff">
<p>                        <strong>cin&gt;&gt;variable1&gt;&gt;&#8230;&gt;&gt;variablen;</strong></p>
<p> </font><font face="Arial" size="2"><strong> </strong>
<p><strong>       </strong>Un ejemplo de c&oacute;digo utilizando ambos objetos podr&iacute;a ser el  siguiente:</p>
<p> </font><font face="Arial" size="2" color="#0000ff">
<p>#include <br /> &#8230;<br /> main ()<br /> {<br />     int i;<br />     cout&lt;&lt;&quot;Introduce un n&uacute;mero&quot;;<br />     cin&gt;&gt;i;<br />     &#8230;<br /> }<br /> &#8230;</p>
<p> </font><font face="Arial" size="2" color="#800000"> </font>
<p><font face="Arial" size="2" color="#800000">  </font><font face="Arial" size="2">Que mostrar&iacute;a por pantalla la frase  &quot;Introduce un n&uacute;mero&quot; y posteriormente almacenar&iacute;a el valor introducido por  teclado en la variable i.</font></p>
<p> <strong><font face="Arial" size="2" color="#0000ff">
<p>&nbsp;</p>
<p> </font><font face="Arial" size="2">
<p><a name="SALIDA" title="SALIDA"></a>Operaciones de salida.</p>
<p> </font></strong><font face="Arial" size="2" color="#808080">
<p>Printf: Imprimir en pantalla </p>
<p> </font><font face="Arial" size="2">
<p>Para utilizar la funci&oacute;n printf en nuestros programas debemos incluir la  directiva: </p>
<p> </font><font face="Arial" size="2" color="#0000ff">
<p>#include </p>
<p> </font><font face="Arial" size="2">
<p>Si s&oacute;lo queremos imprimir una cadena basta con escribir la siguiente l&iacute;nea de  c&oacute;digo. </p>
<p> </font><font face="Arial" size="2" color="#0000ff">
<p>printf( &quot;Cadena&quot; );</p>
<p> </font><font face="Arial" size="2">
<p>Como resultado muestra en pantalla: </p>
<p> </font><font face="Arial" size="2" color="#0000ff">
<p>Cadena</p>
<p> </font><font face="Arial" size="2">
<p>Lo que pongamos entre las comillas es lo que vamos a sacar por pantalla. </p>
<p>Si volvemos a usar otro printf, por ejemplo: </p>
<p> </font><font face="Arial" size="2" color="#0000ff">
<p>#include </p>
<p>void main()</p>
<p>{</p>
<p>printf( &quot;Cadena&quot; );</p>
<p>printf( &quot;Segunda&quot; );</p>
<p>}</p>
<p> </font><font face="Arial" size="2">
<p>Obtendremos: </p>
<p> </font><font face="Arial" size="2" color="#0000ff">
<p>CadenaSegunda</p>
<p> </font><font face="Arial" size="2">
<p align="justify">Este ejemplo nos muestra c&oacute;mo funciona printf. Para escribir  en la pantalla se usa un cursor que no vemos. Cuando escribimos algo el cursor  va al final del texto. Cuando el texto llega al final de la fila, lo siguiente  que pongamos ir&aacute; a la fila siguiente. Si lo que queremos es sacar cada una en  una l&iacute;nea deberemos usar &quot; &quot;. Es el indicador de retorno de carro. Lo que hace  es saltar el cursor de escritura a la l&iacute;nea siguiente: </p>
<p> </font><font face="Arial" size="2" color="#0000ff">
<p>#include </p>
<p>void main()</p>
<p>{</p>
<p>printf( &quot;Cadena &quot; );</p>
<p>printf( &quot;Segunda&quot; );</p>
<p>}</p>
<p> </font><font face="Arial" size="2">
<p>y tendremos: </p>
<p> </font><font face="Arial" size="2" color="#0000ff">
<p>Cadena</p>
<p>Segunda</p>
<p> </font><strong><font face="Arial" size="2">
<p>Tambi&eacute;n podemos poner m&aacute;s de una cadena dentro del printf:</p>
<p> </font></strong><font face="Arial" size="2" color="#0000ff">
<p>printf( &quot;Primera cadena&quot; &quot;Segunda cadena&quot; );</p>
<p> </font><font face="Arial" size="2">
<p>Lo que no podemos hacer es meter <em>cosas</em> entre las cadenas:</p>
<p> </font><font face="Arial" size="2" color="#0000ff">
<p>printf( &quot;Primera cadena&quot; texto en medio &quot;Segunda cadena&quot; );</p>
<p> </font><font face="Arial" size="2"> </font>
<p align="justify"><font face="Arial" size="2">esto no es v&aacute;lido. Cuando el compilador intenta interpretar  esta sentencia se encuentra </font><font face="Arial" size="2" color="#800000"> <em>&quot;Primera cadena&quot;</em></font><font face="Arial" size="2"> y luego </font> <font face="Arial" size="2" color="#800000"><em>texto en medio</em></font><font face="Arial" size="2">,  no sabe qu&eacute; hacer con ello y da un error.</font></p>
<p align="justify"><font face="Arial" size="2">Pero &iquest;qu&eacute; pasa si queremos imprimir el s&iacute;mbolo </font> <font face="Arial" size="2" color="#800000"><em>&quot;</em></font><font face="Arial" size="2">  en pantalla? Por ejemplo imaginemos que queremos escribir:</font></p>
<p> <font face="Arial" size="2" color="#0000ff">
<p>Esto es &quot;extra&ntilde;o&quot;</p>
<p> </font><font face="Arial" size="2">
<p>Si para ello hacemos: </p>
<p> </font><font face="Arial" size="2" color="#0000ff">
<p>printf( &quot;Esto es &quot;extra&ntilde;o&quot;&quot; );</p>
<p> </font><font face="Arial" size="2"> </font>
<p align="justify"><font face="Arial" size="2">obtendremos unos cuantos errores. El problema es que el  s&iacute;mbolo </font><font face="Arial" size="2" color="#800000"><em>&quot;</em></font><font face="Arial" size="2">  se usa para indicar al compilador el comienzo o el final de una cadena. As&iacute; que  en realidad le estar&iacute;amos dando la cadena </font> <font face="Arial" size="2" color="#800000"><em>&quot;Esto es&quot;</em></font><font face="Arial" size="2">,  luego </font><font face="Arial" size="2" color="#800000"><em>extra&ntilde;o</em></font><font face="Arial" size="2">  y luego otra cadena vac&iacute;a </font><font face="Arial" size="2" color="#800000"><em> &quot;&quot;</em></font><font face="Arial" size="2">. Pues resulta que </font> <font face="Arial" size="2" color="#800000"><em>printf</em></font><font face="Arial" size="2">  no admite esto y de nuevo tenemos errores.</font></p>
<p align="justify"><font face="Arial" size="2">La soluci&oacute;n es usar </font> <font face="Arial" size="2" color="#800000"><em>&quot;</em></font><font face="Arial" size="2">.  Veamos:</font></p>
<p> <font face="Arial" size="2" color="#0000ff">
<p>printf( &quot;Esto es &quot;extra&ntilde;o&quot;&quot; );</p>
<p> </font><font face="Arial" size="2"> </font>
<p><font face="Arial" size="2">Esta vez todo ir&aacute; como la seda. Como vemos la contrabarra &#39;</font><font face="Arial" size="2">&#39;  sirve para indicarle al compilador que escriba caracteres que de otra forma no  podr&iacute;amos.</font></p>
<p><font face="Arial" size="2">Esta contrabarra se usa en C para indicar al compilador que queremos meter  s&iacute;mbolos especiales. Pero &iquest;Y si lo que queremos es usar &#39;</font><font face="Arial" size="2">&#39;  como un car&aacute;cter normal y poner por ejemplo </font> <font face="Arial" size="2" color="#800000"><em>HolaAdi&oacute;s</em></font><font face="Arial" size="2">?  Pues muy f&aacute;cil, volvemos a usar &#39;</font><font face="Arial" size="2">&#39;:</font></p>
<p> <font face="Arial" size="2" color="#0000ff">
<p>printf( &quot;HolaAdi&oacute;s&quot; );</p>
<p> </font><font face="Arial" size="2"> </font>
<p><font face="Arial" size="2">y esta doble &#39;</font><font face="Arial" size="2">&#39;  indica a C que lo que queremos es mostrar una &#39;</font><font face="Arial" size="2">&#39;.</font></p>
<p> <font face="Arial" size="2"><strong>
<p>Operaciones de entrada</p>
<p> </strong> </font>
<p><font face="Arial" size="2">Algo muy usual en un programa es esperar que el usuario introduzca datos por  el teclado. Para ello contamos con varias posibilidades: Usar las funciones de  la biblioteca est&aacute;ndar, crear nuestras propias interrupciones de teclado  (MS-Dos) o usar funciones de alguna biblioteca diferente (como por ejemplo  Allegro). </font></p>
<p><font face="Arial" size="2">En este trabajo topare solo la primera opci&oacute;n, usando las funciones de la  biblioteca est&aacute;ndar. Pero veamos por encima las otras posibilidades. </font></p>
<p><font face="Arial" size="2">Las funciones est&aacute;ndar est&aacute;n bien para un programa sencillito. Pero cuando  queremos hacer juegos por ejemplo, no suelen ser suficiente. Demasiado lentas o  no nos dan todas las posibilidades que buscamos, como comprobar si hay varias  teclas pulsadas. Para solucionar esto tenemos dos posibilidades: </font></p>
<p><font face="Arial" size="2">La m&aacute;s complicada es crear nuestras propias interrupciones de teclado. &iquest;Qu&eacute;  es una interrupci&oacute;n de teclado? Es un peque&ntilde;o programa en memoria que se ejecuta  continuamente y comprueba el estado del teclado. Podemos crear uno nuestro y  hacer que el ordenador use el que hemos creado en vez del suyo. </font></p>
<p><font face="Arial" size="2">Otra posibilidad m&aacute;s sencilla es usar una biblioteca que tenga funciones para  controlar el teclado. Por ejemplo si usamos la biblioteca Allegro, ella misma  hace todo el trabajo y nosotros no tenemos m&aacute;s que recoger sus frutos con un par  de sencillas instrucciones. Esto soluciona mucho el trabajo y nos libra de tener  que aprender c&oacute;mo funcionan los aspectos m&aacute;s oscuros del control del teclado. </font></p>
<p><font face="Arial" size="2">Vamos ahora con las funciones de la biblioteca est&aacute;ndar antes mencionada.</font></p>
<p> <font face="Arial" size="2" color="#808080">
<p>Scanf</p>
<p> </font><font face="Arial" size="2">
<p align="justify">El uso de scanf es muy similar al de printf con una  diferencia, nos da la posibilidad de que el usuario introduzca datos en vez de  mostrarlos. No nos permite mostrar texto en la pantalla, por eso si queremos  mostrar un mensaje usamos un printf delante. Un ejemplo: </p>
<p> </font><font face="Arial" size="2" color="#0000ff">
<p>#include </p>
<p>void main()</p>
<p>{</p>
<p>int num;</p>
<p>printf( &quot;Introduce un n&uacute;mero &quot; );</p>
<p>scanf( &quot;%i&quot;, &amp;num );</p>
<p>printf( &quot;Has tecleado el n&uacute;mero %i &quot;, num );</p>
<p>}</p>
<p> </font><font face="Arial" size="2">
<p align="justify">Primero vamos a ver unas nota de est&eacute;tica, para hacer los  programas un poco m&aacute;s elegantes. Parece una tonter&iacute;a, pero los peque&ntilde;os detalles  hacen que un programa gane mucho. El scanf no mueve el cursor de su posici&oacute;n  actual, as&iacute; que en nuestro ejemplo queda: </p>
<p> </font><font face="Arial" size="2" color="#0000ff">
<p>Introduce un n&uacute;mero _ /* La barra horizontal indica d&oacute;nde esta el cursor */</p>
<p> </font><font face="Arial" size="2">
<p align="justify">Esto es porque en el printf no hemos puesto al final el  s&iacute;mbolo de salto de l&iacute;nea &#39; &#39;. Adem&aacute;s hemos dejado un espacio al final de <em> Introduce un n&uacute;mero:</em> para que as&iacute; cuando tecleemos el n&uacute;mero no salga pegado  al mensaje. Si no hubi&eacute;semos dejado el espacio quedar&iacute;a as&iacute; al introducir el  n&uacute;mero 120 (es un ejemplo): </p>
<p> </font><font face="Arial" size="2" color="#0000ff">
<p>Introduce un n&uacute;mero120</p>
<p> </font><font face="Arial" size="2">
<p>Veamos c&oacute;mo funciona el scanf. Lo primero nos fijamos que hay una cadena  entre comillas. Esta es similar a la de printf, nos sirve para indicarle al  compilador qu&eacute; tipo de datos estamos pidiendo. Como en este caso es un integer  usamos %i. Despu&eacute;s de la coma tenemos la variable donde almacenamos el dato, en  este caso &#39;num&#39;. </p>
<p>F&iacute;jate que en el scanf la variable &#39;num&#39; lleva delante el s&iacute;mbolo <strong>&amp;</strong>,  este es muy importante, sirve para indicar al compilador cual es la direcci&oacute;n (o  posici&oacute;n en la memoria) de la variable. </p>
<p>Podemos preguntar por m&aacute;s de una variable a la vez en un s&oacute;lo scanf, hay que  poner un %i por cada variable: </p>
<p> </font><font face="Arial" size="2" color="#0000ff">
<p>#include </p>
<p>void main()</p>
<p>{</p>
<p>int a, b, c;</p>
<p>printf( &quot;Introduce tres n&uacute;meros: &quot; );</p>
<p>scanf( &quot;%i %i %i&quot;, &amp;a, &amp;b, &amp;c );</p>
<p>printf( &quot;Has tecleado los n&uacute;meros %i %i %i &quot;, a, b, c );</p>
<p>}</p>
<p> </font><font face="Arial" size="2">
<p>De esta forma cuando el usuario ejecuta el programa debe introducir los tres  datos separados por un espacio. </p>
<p>Tambi&eacute;n podemos pedir en un mismo scanf variables de distinto tipo: </p>
<p> </font><font face="Arial" size="2" color="#0000ff">
<p>#include </p>
<p>void main()</p>
<p>{</p>
<p>int a;</p>
<p>float b;</p>
<p>printf( &quot;Introduce dos n&uacute;meros: &quot; );</p>
<p>scanf( &quot;%i %f&quot;, &amp;a, &amp;b );</p>
<p>printf( &quot;Has tecleado los n&uacute;meros %i %f &quot;, a, b );</p>
<p>}</p>
<p> </font><font face="Arial" size="2">
<p>A cada modificador <em>(%i, %f)</em> le debe corresponder una variable de su  mismo tipo. Es decir, al poner un %i el compilador espera que su variable  correspondiente sea de tipo int. Si ponemos <em>%f</em> espera una variable tipo <em>float</em>. </p>
<p> </font><br />
<table border="0" cellspacing="0" cellpadding="1" width="573" id="table1">
<tbody>
<tr>
<td valign="center" bgcolor="#c0c0c0"> 		<font face="Arial" size="2" color="#808080"><a name="getch" title="getch"></a>Getch y  		getche </font></td>
</tr>
</tbody>
</table>
<p> <font face="Arial" size="2"> </font>
<p align="justify"><font face="Arial" size="2">Si lo que queremos es que el usuario introduzca un car&aacute;cter  por el teclado usamos las funciones </font> <font face="Arial" size="2" color="#800000"><em>getch</em></font><font face="Arial" size="2">  y </font><font face="Arial" size="2" color="#800000"><em>getche</em></font><font face="Arial" size="2">.  Estas esperan a que el usuario introduzca un car&aacute;cter por el teclado. La  diferencia entre </font><font face="Arial" size="2" color="#800000"><em>getche</em></font><font face="Arial" size="2">  y </font><font face="Arial" size="2" color="#800000"><em>getch</em></font><font face="Arial" size="2">  es que la primera saca por pantalla la tecla que hemos pulsado y la segunda no  (la e del final se refiere a </font><font face="Arial" size="2" color="#800000"> <em>echo</em>=eco</font><font face="Arial" size="2">). Ejemplos: </font></p>
<p> <font face="Arial" size="2" color="#0000ff">
<p>#include </p>
<p>void main()</p>
<p>{</p>
<p>char letra;</p>
<p>printf( &quot;Introduce una letra: &quot; );</p>
<p>fflush( stdout );</p>
<p>letra = getche();</p>
<p>printf( &quot; Has introducido la letra: %c&quot;, letra );</p>
<p>}</p>
<p> </font><font face="Arial" size="2">
<p>Resultado: </p>
<p> </font><font face="Arial" size="2" color="#0000ff">
<p>Introduce una letra: <strong>a</strong></p>
<p>Has introducido la letra: a</p>
<p> </font><font face="Arial" size="2"> </font>
<p><font face="Arial" size="2">&iquest;Qu&eacute; es el </font><font face="Arial" size="2" color="#800000">fflush( stdout  )</font><font face="Arial" size="2">?. Pues bien, cuando usamos la funci&oacute;n </font><font face="Arial" size="2" color="#800000">printf</font><font face="Arial" size="2">,  no escribimos directamente en la pantalla, sino en una memoria intermedia (lo  que llaman un </font><font face="Arial" size="2" color="#800000">bufer</font><font face="Arial" size="2">).  Cuando este </font><font face="Arial" size="2" color="#800000">bufer</font><font face="Arial" size="2">  se llena o cuando metemos un car&aacute;cter &#39;</font><font face="Arial" size="2" color="#800000"> </font><font face="Arial" size="2">&#39;  es cuando se env&iacute;a el texto a la pantalla. En este ejemplo yo quer&iacute;a que  apareciera el mensaje Introduce una letra: y el cursor se quedara justo despu&eacute;s,  es decir, sin usar &#39;</font><font face="Arial" size="2" color="#800000"> </font><font face="Arial" size="2">&#39;.  Si se hace esto, en algunos compiladores el mensaje no se muestra en pantalla  hasta que se pulsa una tecla (probar). Y la funci&oacute;n </font> <font face="Arial" size="2" color="#800000">fflush( stdout )</font><font face="Arial" size="2">  lo que hace es enviar a la pantalla lo que hay en ese </font> <font face="Arial" size="2" color="#800000">bufer</font><font face="Arial" size="2">. </font></p>
<p><font face="Arial" size="2">Y ahora un ejemplo con </font><font face="Arial" size="2" color="#800000"> getch:</font><font face="Arial" size="2"> </font></p>
<p> <font face="Arial" size="2" color="#0000ff">
<p>#include </p>
<p>void main()</p>
<p>{</p>
<p>char letra;</p>
<p>printf( &quot;Introduce una letra: &quot; );</p>
<p>fflush( stdout );</p>
<p>letra = getch();</p>
<p>printf(&quot;  has introducido la letra :%c&quot;, letra );</p>
<p>}</p>
<p> </font><font face="Arial" size="2">
<p>Resultado: </p>
<p> </font><font face="Arial" size="2" color="#0000ff">
<p>Introduce una letra:</p>
<p>Has introducido la letra: a</p>
<p> </font><font face="Arial" size="2">
<p>Como vemos la &uacute;nica diferencia es que en el primer ejemplo se muestra en  pantalla lo que escribimos y en el segundo no.</p>
<p> <strong>
<p align="center"><a name="ANXOS" title="ANXOS"></a>ANEXOS</p>
<p> </strong></font><a name="ANXOS" title="ANXOS"></a><br />
<table border="1" cellspacing="1" cellpadding="1" width="615" align="left" id="table2" bordercolor="#808080">
<tbody>
<tr>
<td colspan="2" valign="center"> 		<font face="Arial" size="2" color="#808080"> 		</font>
<p align="center"><font face="Arial" size="2" color="#808080">Usos de printf y scanf</font></p>
</td>
</tr>
<tr>
<td width="38%" valign="center"><font face="Arial" size="2"> 		printf(&quot;Mensaje&quot;);<br /> 		printf(&quot;Mensaje %d&quot;,Variable);<br /> 		printf(&quot;Mensaje %d&quot;,Variable:2:3);<br /> 		cprintf(&quot;Mensaje&quot;);</font></td>
<td width="62%" valign="center"><font face="Arial" size="2">Escribe  		Mensaje en la pantalla<br /> 		Escribe Mensaje y el valor de la Variable en pantalla<br /> 		Escribe Mensaje y el valor de la Variable con 2 enteros y 3 decimales<br /> 		Escribe Mensaje en color especificado</font></td>
</tr>
<tr>
<td width="38%" valign="center"><font face="Arial" size="2"> 		scanf(&quot;%d&quot;,&amp;Variable);<br /> 		scanf(&quot;%d %f&quot;,&amp;Variable1,&amp;Variable2);</font></td>
<td width="62%" valign="center"><font face="Arial" size="2">Asigna valor  		entero a Variable<br /> 		Asigna valor entero a Variable1 y valor real a Variable2</font></td>
</tr>
</tbody>
</table>
<p> <a name="ANXOS" title="ANXOS"></a><font face="Arial" size="2"><strong>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Nota</p>
<p> </strong> </font>
<p><a name="ANXOS" title="ANXOS"></a><font face="Arial" size="2">C++ ofrece una alternativa a las llamadas de funcion </font> <font face="Arial" size="2" color="#800000">printf</font><font face="Arial" size="2">  y </font><font face="Arial" size="2" color="#800000">scanf</font><font face="Arial" size="2">  para manejar la entrada/salida de los tipos y cadenas de datos estandar. As&iacute; en  lugar de </font><font face="Arial" size="2" color="#800000">printf</font><font face="Arial" size="2">  usamos el flujo estandar de salida </font> <font face="Arial" size="2" color="#800000">cout</font><font face="Arial" size="2">  y el operador </font><font face="Arial" size="2" color="#800000">&lt;&lt; (&quot;colocar  en&quot;)</font><font face="Arial" size="2">; y en lugar de </font> <font face="Arial" size="2" color="#800000">scanf</font><font face="Arial" size="2">  usamos el flujo de entrada estandar </font> <font face="Arial" size="2" color="#800000">cin</font><font face="Arial" size="2">  y el operador </font><font face="Arial" size="2" color="#800000">&gt;&gt;(&quot;obtener  de&quot;)</font><font face="Arial" size="2">. Estos operadores de inserci&oacute;n y  extracci&oacute;n de flujo, a diferencia de </font> <font face="Arial" size="2" color="#800000">printf</font><font face="Arial" size="2">  y </font><font face="Arial" size="2" color="#800000">scanf</font><font face="Arial" size="2">,  no requieren de cadenas de formato y de formato y de especificadotes de  conversi&oacute;n para indicar los tipos de datos que son extraidos o introducidos.</font></p>
<p><a name="ANXOS" title="ANXOS"></a><font face="Arial" size="2">Las siguientes funciones nos resultan indispensable para poder brindar una  mejor presentaci&oacute;n de los datos en pantalla.</font></p>
<p> <a name="ANXOS" title="ANXOS"></a><font face="Arial" size="2" color="#808080">
<p>Gotoxy: Posicionando el cursor (DOS) </p>
<p> </font><font face="Arial" size="2">
<p>Esta funci&oacute;n s&oacute;lo est&aacute; disponible en compiladores de C que dispongan de la  biblioteca </p>
<p>Hemos visto que cuando usamos <em>printf</em> se escribe en la posici&oacute;n actual  del cursor y se mueve el cursor al final de la cadena que hemos escrito.</p>
<p>Vale, pero &iquest;qu&eacute; pasa cuando queremos escribir en una posici&oacute;n determinada de  la pantalla? La soluci&oacute;n est&aacute; en la funci&oacute;n gotoxy. Supongamos que queremos  escribir &#39;Hola&#39; en la fila 10, columna 20 de la pantalla: </p>
<p> </font><font face="Arial" size="2" color="#0000ff">
<p>#include </p>
<p>#include </p>
<p>void main()</p>
<p>{</p>
<p>gotoxy( 20, 10 );</p>
<p>printf( &quot;Hola&quot; );</p>
<p>}</p>
<p> </font><font face="Arial" size="2">
<p>(Nota: para usar gotoxy hay que incluir la biblioteca <em>conio.h</em>). </p>
<p>F&iacute;jate que primero se pone la columna (x) y luego la fila (y). La esquina  superior izquierda es la posici&oacute;n (1, 1).</p>
<p> </font><font face="Arial" size="2" color="#808080">
<p>Clrscr: Borrar la pantalla (DOS) </p>
<p> </font><font face="Arial" size="2">
<p>Ahora ya s&oacute;lo nos falta saber c&oacute;mo se borra la pantalla. Pues es tan f&aacute;cil  como usar:</p>
<p> </font><font face="Arial" size="2" color="#0000ff">
<p>clrscr()</p>
<p> </font><font face="Arial" size="2">
<p>(<u>cl</u>ea<u>r</u> <u>scr</u>een, borrar pantalla). </p>
<p>Esta funci&oacute;n n&oacute; solo borra la pantalla, sino que adem&aacute;s sit&uacute;a el cursor en la  posici&oacute;n (1, 1), en la esquina superior izquierda. </p>
<p> </font><font face="Arial" size="2" color="#0000ff">
<p>#include </p>
<p>#include </p>
<p>void main()</p>
<p>{</p>
<p>clrscr();</p>
<p>printf( &quot;Hola&quot; );</p>
<p>}</p>
<p> </font><font face="Arial" size="2">
<p>Este m&eacute;todo s&oacute;lo vale para compiladores que incluyan el fichero stdio.h. </p>
<p> </font><font face="Arial" size="2"><strong>
<p><a name="BIBLIO" title="BIBLIO"></a>BIBLIOGRAF&Iacute;A</p>
<p> </strong>
<p>Como programar en C/C++. H.M. Deitel / P.J. Deitel. Prentice may, 2da ed.  1995.</p>
<p>Programaci&oacute;n orientada a objetos con C++. Fco. Javier Ceballos. Ed. ra-ma  1993.</p>
<p>Programacion en C++. Enrique hernandez / Jose hernandez. Ed. Paraninfo 1993.</p>
<p>EN INTERNET</p>
<p> </font>
<p><a href="http://www.lawebdelprogramador.com/"><font face="Arial" size="2"> www.lawebdelprogramador.com</font></a></p>
<p><a href="http://www.publispain.com/supertutoriales/programacion"> <font face="Arial" size="2"> http://www.publispain.com/supertutoriales/programacion</font></a></p>
<p> Autores: <strong>Palate Gaibor y Alex Fernando</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://portal.tronk.net/archives/66/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Entrada y salida estándar en C++ (programación C++)</title>
		<link>http://portal.tronk.net/archives/65</link>
		<comments>http://portal.tronk.net/archives/65#comments</comments>
		<pubDate>Fri, 02 Nov 2007 15:28:51 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programacion]]></category>

		<guid isPermaLink="false">http://portal.tronk.net/archives/65</guid>
		<description><![CDATA[Entrada y salida est&#225;ndar en C++
&#160;

Operaciones de salida.  	
Operaciones de entrada  	
Anexos  	
Bibliograf&#237;a

  
Cuando nos referimos a entrada/salida est&#225;ndar (E/S est&#225;ndar) queremos decir  que los datos o bien se est&#225;n leyendo del teclado, &#243; bien se est&#225;n escribiendo  en el monitor de video. Como se utilizan muy frecuentemente se [...]]]></description>
			<content:encoded><![CDATA[<p>Entrada y salida est&aacute;ndar en C++
<p>&nbsp;</p>
<ol>
<li><a href="#SALIDA"><font face="Arial" size="2"><strong>Operaciones de salida.</strong></font></a>  	</li>
<li><a href="#ENTRADA"><font face="Arial" size="2"><strong>Operaciones de entrada</strong></font></a>  	</li>
<li><a href="#ANXOS"><font face="Arial" size="2"><strong>Anexos</strong></font></a>  	</li>
<li><a href="#BIBLIO"><font face="Arial" size="2"><strong>Bibliograf&iacute;a</strong></font></a></li>
</ol>
<p> <font face="Arial" size="2"> </font>
<p><font face="Arial" size="2">Cuando nos referimos a entrada/salida est&aacute;ndar (E/S est&aacute;ndar) queremos decir  que los datos o bien se est&aacute;n leyendo del teclado, &oacute; bien se est&aacute;n escribiendo  en el monitor de video. Como se utilizan muy frecuentemente se consideran como  los dispositivos de E/S por default y no necesitan ser nombrados en las  instrucciones de E/S.</font></p>
<p><font face="Arial" size="2">En el lenguaje c++ tenemos varias alternativas para ingresar y/o mostrar  datos, dependiendo de la librer&iacute;a que vamos a utilizar para desarrollar el  programa, entre estas est&aacute;n: </font><strong> <font face="Arial" size="2" color="#800000"><em>iostream.h</em></font></strong><font face="Arial" size="2">  y </font><font face="Arial" size="2" color="#800000"><em>sodio.h.</em></font></p>
<p> <font face="Arial" size="2"> </font>
<p><font face="Arial" size="2">&lt; IOSTREAM.H&gt;</font></p>
<p><font face="Arial" size="2">Las operaciones de entrada y salida no forman parte del conjunto de  sentencias de C++, sino que pertenecen al conjunto de funciones y clases de la  biblioteca est&aacute;ndar de C++. Ellas se incluyen en los archivos de cabecera </font> <strong><font face="Arial" size="2" color="#800000"><em>iostream.h</em></font><font face="Arial" size="2"> </font></strong><font face="Arial" size="2">por lo que siempre que queramos  utilizarlas deberemos introducir la l&iacute;nea de c&oacute;digo </font><strong> <font face="Arial" size="2" color="#800000"><em>#include </em></font></strong></p>
<p> <strong><font face="Arial" size="2"> </font></strong>
<p><strong><font face="Arial" size="2">   </font></strong><font face="Arial" size="2">Esta biblioteca es una  implementaci&oacute;n orientada a objetos y est&aacute; basada en el concepto de <em>flujos</em>.  A nivel abstracto un flujo es un medio de describir la secuencia de datos de una  fuente a un destino o sumidero. As&iacute;, por ejemplo, cuando se introducen  caracteres desde el teclado, se puede pensar en caracteres que fluyen o se  trasladan desde el teclado a las estructuras de datos del programa.</font></p>
<p><font face="Arial" size="2">    Los objetos de flujo que vienen predefinidos ser&aacute;n:</font></p>
<ol> 	<strong><font face="Arial" size="2" color="#800000">
<li>cin</li>
<p></font><font face="Arial" size="2">, </font></strong> 	<font face="Arial" size="2">que toma caracteres de la entrada est&aacute;ndar  	(teclado); </font><strong><font face="Arial" size="2" color="#800000">
<li>cout</li>
<p></font></strong><font face="Arial" size="2">, pone caracteres en la  	salida est&aacute;ndar (pantalla); </font><strong> 	<font face="Arial" size="2" color="#800000">
<li>cerr y clog</li>
<p></font></strong><font face="Arial" size="2"> ponen mensajes  	de error en la salida est&aacute;ndar. </font></ol>
<p align="justify"><font face="Arial" size="2">Estos objetos se utilizan mediante los operadores <strong>&lt;&lt;</strong>  y <strong>&gt;&gt;. </strong>El operador &lt;&lt; se denomina operador de inserci&oacute;n; y  apunta al objeto donde tiene que enviar la informaci&oacute;n. Por lo tanto la sintaxis  de cout ser&aacute;:</font></p>
<p> <font face="Arial" size="2" color="#0000ff">
<p>                    <strong>cout&lt;&lt;&lt;&lt;&#8230;&lt;</strong></p>
<p> </font><font face="Arial" size="2">
<p>No olvidemos que las cadenas de texto son variables y se ponen entre &quot; &quot;  (comillas dobles).</p>
<p>Por su parte &gt;&gt; se denomina operador de extracci&oacute;n, lee informaci&oacute;n del flujo  cin (a la izquierda del operador) y las almacena en las variables indicadas a la  derecha).<br />     La sintaxis ser&iacute;a la siguiente:</p>
<p> </font><font face="Arial" size="2" color="#0000ff">
<p>                        <strong>cin&gt;&gt;variable1&gt;&gt;&#8230;&gt;&gt;variablen;</strong></p>
<p> </font><font face="Arial" size="2"><strong> </strong>
<p><strong>       </strong>Un ejemplo de c&oacute;digo utilizando ambos objetos podr&iacute;a ser el  siguiente:</p>
<p> </font><font face="Arial" size="2" color="#0000ff">
<p>#include <br /> &#8230;<br /> main ()<br /> {<br />     int i;<br />     cout&lt;&lt;&quot;Introduce un n&uacute;mero&quot;;<br />     cin&gt;&gt;i;<br />     &#8230;<br /> }<br /> &#8230;</p>
<p> </font><font face="Arial" size="2" color="#800000"> </font>
<p><font face="Arial" size="2" color="#800000">  </font><font face="Arial" size="2">Que mostrar&iacute;a por pantalla la frase  &quot;Introduce un n&uacute;mero&quot; y posteriormente almacenar&iacute;a el valor introducido por  teclado en la variable i.</font></p>
<p> <strong><font face="Arial" size="2" color="#0000ff">
<p>&nbsp;</p>
<p> </font><font face="Arial" size="2">
<p><a name="SALIDA" title="SALIDA"></a>Operaciones de salida.</p>
<p> </font></strong><font face="Arial" size="2" color="#808080">
<p>Printf: Imprimir en pantalla </p>
<p> </font><font face="Arial" size="2">
<p>Para utilizar la funci&oacute;n printf en nuestros programas debemos incluir la  directiva: </p>
<p> </font><font face="Arial" size="2" color="#0000ff">
<p>#include </p>
<p> </font><font face="Arial" size="2">
<p>Si s&oacute;lo queremos imprimir una cadena basta con escribir la siguiente l&iacute;nea de  c&oacute;digo. </p>
<p> </font><font face="Arial" size="2" color="#0000ff">
<p>printf( &quot;Cadena&quot; );</p>
<p> </font><font face="Arial" size="2">
<p>Como resultado muestra en pantalla: </p>
<p> </font><font face="Arial" size="2" color="#0000ff">
<p>Cadena</p>
<p> </font><font face="Arial" size="2">
<p>Lo que pongamos entre las comillas es lo que vamos a sacar por pantalla. </p>
<p>Si volvemos a usar otro printf, por ejemplo: </p>
<p> </font><font face="Arial" size="2" color="#0000ff">
<p>#include </p>
<p>void main()</p>
<p>{</p>
<p>printf( &quot;Cadena&quot; );</p>
<p>printf( &quot;Segunda&quot; );</p>
<p>}</p>
<p> </font><font face="Arial" size="2">
<p>Obtendremos: </p>
<p> </font><font face="Arial" size="2" color="#0000ff">
<p>CadenaSegunda</p>
<p> </font><font face="Arial" size="2">
<p align="justify">Este ejemplo nos muestra c&oacute;mo funciona printf. Para escribir  en la pantalla se usa un cursor que no vemos. Cuando escribimos algo el cursor  va al final del texto. Cuando el texto llega al final de la fila, lo siguiente  que pongamos ir&aacute; a la fila siguiente. Si lo que queremos es sacar cada una en  una l&iacute;nea deberemos usar &quot; &quot;. Es el indicador de retorno de carro. Lo que hace  es saltar el cursor de escritura a la l&iacute;nea siguiente: </p>
<p> </font><font face="Arial" size="2" color="#0000ff">
<p>#include </p>
<p>void main()</p>
<p>{</p>
<p>printf( &quot;Cadena &quot; );</p>
<p>printf( &quot;Segunda&quot; );</p>
<p>}</p>
<p> </font><font face="Arial" size="2">
<p>y tendremos: </p>
<p> </font><font face="Arial" size="2" color="#0000ff">
<p>Cadena</p>
<p>Segunda</p>
<p> </font><strong><font face="Arial" size="2">
<p>Tambi&eacute;n podemos poner m&aacute;s de una cadena dentro del printf:</p>
<p> </font></strong><font face="Arial" size="2" color="#0000ff">
<p>printf( &quot;Primera cadena&quot; &quot;Segunda cadena&quot; );</p>
<p> </font><font face="Arial" size="2">
<p>Lo que no podemos hacer es meter <em>cosas</em> entre las cadenas:</p>
<p> </font><font face="Arial" size="2" color="#0000ff">
<p>printf( &quot;Primera cadena&quot; texto en medio &quot;Segunda cadena&quot; );</p>
<p> </font><font face="Arial" size="2"> </font>
<p align="justify"><font face="Arial" size="2">esto no es v&aacute;lido. Cuando el compilador intenta interpretar  esta sentencia se encuentra </font><font face="Arial" size="2" color="#800000"> <em>&quot;Primera cadena&quot;</em></font><font face="Arial" size="2"> y luego </font> <font face="Arial" size="2" color="#800000"><em>texto en medio</em></font><font face="Arial" size="2">,  no sabe qu&eacute; hacer con ello y da un error.</font></p>
<p align="justify"><font face="Arial" size="2">Pero &iquest;qu&eacute; pasa si queremos imprimir el s&iacute;mbolo </font> <font face="Arial" size="2" color="#800000"><em>&quot;</em></font><font face="Arial" size="2">  en pantalla? Por ejemplo imaginemos que queremos escribir:</font></p>
<p> <font face="Arial" size="2" color="#0000ff">
<p>Esto es &quot;extra&ntilde;o&quot;</p>
<p> </font><font face="Arial" size="2">
<p>Si para ello hacemos: </p>
<p> </font><font face="Arial" size="2" color="#0000ff">
<p>printf( &quot;Esto es &quot;extra&ntilde;o&quot;&quot; );</p>
<p> </font><font face="Arial" size="2"> </font>
<p align="justify"><font face="Arial" size="2">obtendremos unos cuantos errores. El problema es que el  s&iacute;mbolo </font><font face="Arial" size="2" color="#800000"><em>&quot;</em></font><font face="Arial" size="2">  se usa para indicar al compilador el comienzo o el final de una cadena. As&iacute; que  en realidad le estar&iacute;amos dando la cadena </font> <font face="Arial" size="2" color="#800000"><em>&quot;Esto es&quot;</em></font><font face="Arial" size="2">,  luego </font><font face="Arial" size="2" color="#800000"><em>extra&ntilde;o</em></font><font face="Arial" size="2">  y luego otra cadena vac&iacute;a </font><font face="Arial" size="2" color="#800000"><em> &quot;&quot;</em></font><font face="Arial" size="2">. Pues resulta que </font> <font face="Arial" size="2" color="#800000"><em>printf</em></font><font face="Arial" size="2">  no admite esto y de nuevo tenemos errores.</font></p>
<p align="justify"><font face="Arial" size="2">La soluci&oacute;n es usar </font> <font face="Arial" size="2" color="#800000"><em>&quot;</em></font><font face="Arial" size="2">.  Veamos:</font></p>
<p> <font face="Arial" size="2" color="#0000ff">
<p>printf( &quot;Esto es &quot;extra&ntilde;o&quot;&quot; );</p>
<p> </font><font face="Arial" size="2"> </font>
<p><font face="Arial" size="2">Esta vez todo ir&aacute; como la seda. Como vemos la contrabarra &#39;</font><font face="Arial" size="2">&#39;  sirve para indicarle al compilador que escriba caracteres que de otra forma no  podr&iacute;amos.</font></p>
<p><font face="Arial" size="2">Esta contrabarra se usa en C para indicar al compilador que queremos meter  s&iacute;mbolos especiales. Pero &iquest;Y si lo que queremos es usar &#39;</font><font face="Arial" size="2">&#39;  como un car&aacute;cter normal y poner por ejemplo </font> <font face="Arial" size="2" color="#800000"><em>HolaAdi&oacute;s</em></font><font face="Arial" size="2">?  Pues muy f&aacute;cil, volvemos a usar &#39;</font><font face="Arial" size="2">&#39;:</font></p>
<p> <font face="Arial" size="2" color="#0000ff">
<p>printf( &quot;HolaAdi&oacute;s&quot; );</p>
<p> </font><font face="Arial" size="2"> </font>
<p><font face="Arial" size="2">y esta doble &#39;</font><font face="Arial" size="2">&#39;  indica a C que lo que queremos es mostrar una &#39;</font><font face="Arial" size="2">&#39;.</font></p>
<p> <font face="Arial" size="2"><strong>
<p>Operaciones de entrada</p>
<p> </strong> </font>
<p><font face="Arial" size="2">Algo muy usual en un programa es esperar que el usuario introduzca datos por  el teclado. Para ello contamos con varias posibilidades: Usar las funciones de  la biblioteca est&aacute;ndar, crear nuestras propias interrupciones de teclado  (MS-Dos) o usar funciones de alguna biblioteca diferente (como por ejemplo  Allegro). </font></p>
<p><font face="Arial" size="2">En este trabajo topare solo la primera opci&oacute;n, usando las funciones de la  biblioteca est&aacute;ndar. Pero veamos por encima las otras posibilidades. </font></p>
<p><font face="Arial" size="2">Las funciones est&aacute;ndar est&aacute;n bien para un programa sencillito. Pero cuando  queremos hacer juegos por ejemplo, no suelen ser suficiente. Demasiado lentas o  no nos dan todas las posibilidades que buscamos, como comprobar si hay varias  teclas pulsadas. Para solucionar esto tenemos dos posibilidades: </font></p>
<p><font face="Arial" size="2">La m&aacute;s complicada es crear nuestras propias interrupciones de teclado. &iquest;Qu&eacute;  es una interrupci&oacute;n de teclado? Es un peque&ntilde;o programa en memoria que se ejecuta  continuamente y comprueba el estado del teclado. Podemos crear uno nuestro y  hacer que el ordenador use el que hemos creado en vez del suyo. </font></p>
<p><font face="Arial" size="2">Otra posibilidad m&aacute;s sencilla es usar una biblioteca que tenga funciones para  controlar el teclado. Por ejemplo si usamos la biblioteca Allegro, ella misma  hace todo el trabajo y nosotros no tenemos m&aacute;s que recoger sus frutos con un par  de sencillas instrucciones. Esto soluciona mucho el trabajo y nos libra de tener  que aprender c&oacute;mo funcionan los aspectos m&aacute;s oscuros del control del teclado. </font></p>
<p><font face="Arial" size="2">Vamos ahora con las funciones de la biblioteca est&aacute;ndar antes mencionada.</font></p>
<p> <font face="Arial" size="2" color="#808080">
<p>Scanf</p>
<p> </font><font face="Arial" size="2">
<p align="justify">El uso de scanf es muy similar al de printf con una  diferencia, nos da la posibilidad de que el usuario introduzca datos en vez de  mostrarlos. No nos permite mostrar texto en la pantalla, por eso si queremos  mostrar un mensaje usamos un printf delante. Un ejemplo: </p>
<p> </font><font face="Arial" size="2" color="#0000ff">
<p>#include </p>
<p>void main()</p>
<p>{</p>
<p>int num;</p>
<p>printf( &quot;Introduce un n&uacute;mero &quot; );</p>
<p>scanf( &quot;%i&quot;, &amp;num );</p>
<p>printf( &quot;Has tecleado el n&uacute;mero %i &quot;, num );</p>
<p>}</p>
<p> </font><font face="Arial" size="2">
<p align="justify">Primero vamos a ver unas nota de est&eacute;tica, para hacer los  programas un poco m&aacute;s elegantes. Parece una tonter&iacute;a, pero los peque&ntilde;os detalles  hacen que un programa gane mucho. El scanf no mueve el cursor de su posici&oacute;n  actual, as&iacute; que en nuestro ejemplo queda: </p>
<p> </font><font face="Arial" size="2" color="#0000ff">
<p>Introduce un n&uacute;mero _ /* La barra horizontal indica d&oacute;nde esta el cursor */</p>
<p> </font><font face="Arial" size="2">
<p align="justify">Esto es porque en el printf no hemos puesto al final el  s&iacute;mbolo de salto de l&iacute;nea &#39; &#39;. Adem&aacute;s hemos dejado un espacio al final de <em> Introduce un n&uacute;mero:</em> para que as&iacute; cuando tecleemos el n&uacute;mero no salga pegado  al mensaje. Si no hubi&eacute;semos dejado el espacio quedar&iacute;a as&iacute; al introducir el  n&uacute;mero 120 (es un ejemplo): </p>
<p> </font><font face="Arial" size="2" color="#0000ff">
<p>Introduce un n&uacute;mero120</p>
<p> </font><font face="Arial" size="2">
<p>Veamos c&oacute;mo funciona el scanf. Lo primero nos fijamos que hay una cadena  entre comillas. Esta es similar a la de printf, nos sirve para indicarle al  compilador qu&eacute; tipo de datos estamos pidiendo. Como en este caso es un integer  usamos %i. Despu&eacute;s de la coma tenemos la variable donde almacenamos el dato, en  este caso &#39;num&#39;. </p>
<p>F&iacute;jate que en el scanf la variable &#39;num&#39; lleva delante el s&iacute;mbolo <strong>&amp;</strong>,  este es muy importante, sirve para indicar al compilador cual es la direcci&oacute;n (o  posici&oacute;n en la memoria) de la variable. </p>
<p>Podemos preguntar por m&aacute;s de una variable a la vez en un s&oacute;lo scanf, hay que  poner un %i por cada variable: </p>
<p> </font><font face="Arial" size="2" color="#0000ff">
<p>#include </p>
<p>void main()</p>
<p>{</p>
<p>int a, b, c;</p>
<p>printf( &quot;Introduce tres n&uacute;meros: &quot; );</p>
<p>scanf( &quot;%i %i %i&quot;, &amp;a, &amp;b, &amp;c );</p>
<p>printf( &quot;Has tecleado los n&uacute;meros %i %i %i &quot;, a, b, c );</p>
<p>}</p>
<p> </font><font face="Arial" size="2">
<p>De esta forma cuando el usuario ejecuta el programa debe introducir los tres  datos separados por un espacio. </p>
<p>Tambi&eacute;n podemos pedir en un mismo scanf variables de distinto tipo: </p>
<p> </font><font face="Arial" size="2" color="#0000ff">
<p>#include </p>
<p>void main()</p>
<p>{</p>
<p>int a;</p>
<p>float b;</p>
<p>printf( &quot;Introduce dos n&uacute;meros: &quot; );</p>
<p>scanf( &quot;%i %f&quot;, &amp;a, &amp;b );</p>
<p>printf( &quot;Has tecleado los n&uacute;meros %i %f &quot;, a, b );</p>
<p>}</p>
<p> </font><font face="Arial" size="2">
<p>A cada modificador <em>(%i, %f)</em> le debe corresponder una variable de su  mismo tipo. Es decir, al poner un %i el compilador espera que su variable  correspondiente sea de tipo int. Si ponemos <em>%f</em> espera una variable tipo <em>float</em>. </p>
<p> </font><br />
<table border="0" cellspacing="0" cellpadding="1" width="573" id="table1">
<tbody>
<tr>
<td valign="center" bgcolor="#c0c0c0"> 		<font face="Arial" size="2" color="#808080"><a name="getch" title="getch"></a>Getch y  		getche </font></td>
</tr>
</tbody>
</table>
<p> <font face="Arial" size="2"> </font>
<p align="justify"><font face="Arial" size="2">Si lo que queremos es que el usuario introduzca un car&aacute;cter  por el teclado usamos las funciones </font> <font face="Arial" size="2" color="#800000"><em>getch</em></font><font face="Arial" size="2">  y </font><font face="Arial" size="2" color="#800000"><em>getche</em></font><font face="Arial" size="2">.  Estas esperan a que el usuario introduzca un car&aacute;cter por el teclado. La  diferencia entre </font><font face="Arial" size="2" color="#800000"><em>getche</em></font><font face="Arial" size="2">  y </font><font face="Arial" size="2" color="#800000"><em>getch</em></font><font face="Arial" size="2">  es que la primera saca por pantalla la tecla que hemos pulsado y la segunda no  (la e del final se refiere a </font><font face="Arial" size="2" color="#800000"> <em>echo</em>=eco</font><font face="Arial" size="2">). Ejemplos: </font></p>
<p> <font face="Arial" size="2" color="#0000ff">
<p>#include </p>
<p>void main()</p>
<p>{</p>
<p>char letra;</p>
<p>printf( &quot;Introduce una letra: &quot; );</p>
<p>fflush( stdout );</p>
<p>letra = getche();</p>
<p>printf( &quot; Has introducido la letra: %c&quot;, letra );</p>
<p>}</p>
<p> </font><font face="Arial" size="2">
<p>Resultado: </p>
<p> </font><font face="Arial" size="2" color="#0000ff">
<p>Introduce una letra: <strong>a</strong></p>
<p>Has introducido la letra: a</p>
<p> </font><font face="Arial" size="2"> </font>
<p><font face="Arial" size="2">&iquest;Qu&eacute; es el </font><font face="Arial" size="2" color="#800000">fflush( stdout  )</font><font face="Arial" size="2">?. Pues bien, cuando usamos la funci&oacute;n </font><font face="Arial" size="2" color="#800000">printf</font><font face="Arial" size="2">,  no escribimos directamente en la pantalla, sino en una memoria intermedia (lo  que llaman un </font><font face="Arial" size="2" color="#800000">bufer</font><font face="Arial" size="2">).  Cuando este </font><font face="Arial" size="2" color="#800000">bufer</font><font face="Arial" size="2">  se llena o cuando metemos un car&aacute;cter &#39;</font><font face="Arial" size="2" color="#800000"> </font><font face="Arial" size="2">&#39;  es cuando se env&iacute;a el texto a la pantalla. En este ejemplo yo quer&iacute;a que  apareciera el mensaje Introduce una letra: y el cursor se quedara justo despu&eacute;s,  es decir, sin usar &#39;</font><font face="Arial" size="2" color="#800000"> </font><font face="Arial" size="2">&#39;.  Si se hace esto, en algunos compiladores el mensaje no se muestra en pantalla  hasta que se pulsa una tecla (probar). Y la funci&oacute;n </font> <font face="Arial" size="2" color="#800000">fflush( stdout )</font><font face="Arial" size="2">  lo que hace es enviar a la pantalla lo que hay en ese </font> <font face="Arial" size="2" color="#800000">bufer</font><font face="Arial" size="2">. </font></p>
<p><font face="Arial" size="2">Y ahora un ejemplo con </font><font face="Arial" size="2" color="#800000"> getch:</font><font face="Arial" size="2"> </font></p>
<p> <font face="Arial" size="2" color="#0000ff">
<p>#include </p>
<p>void main()</p>
<p>{</p>
<p>char letra;</p>
<p>printf( &quot;Introduce una letra: &quot; );</p>
<p>fflush( stdout );</p>
<p>letra = getch();</p>
<p>printf(&quot;  has introducido la letra :%c&quot;, letra );</p>
<p>}</p>
<p> </font><font face="Arial" size="2">
<p>Resultado: </p>
<p> </font><font face="Arial" size="2" color="#0000ff">
<p>Introduce una letra:</p>
<p>Has introducido la letra: a</p>
<p> </font><font face="Arial" size="2">
<p>Como vemos la &uacute;nica diferencia es que en el primer ejemplo se muestra en  pantalla lo que escribimos y en el segundo no.</p>
<p> <strong>
<p align="center"><a name="ANXOS" title="ANXOS"></a>ANEXOS</p>
<p> </strong></font><a name="ANXOS" title="ANXOS"></a><br />
<table border="1" cellspacing="1" cellpadding="1" width="615" align="left" id="table2" bordercolor="#808080">
<tbody>
<tr>
<td colspan="2" valign="center"> 		<font face="Arial" size="2" color="#808080"> 		</font>
<p align="center"><font face="Arial" size="2" color="#808080">Usos de printf y scanf</font></p>
</td>
</tr>
<tr>
<td width="38%" valign="center"><font face="Arial" size="2"> 		printf(&quot;Mensaje&quot;);<br /> 		printf(&quot;Mensaje %d&quot;,Variable);<br /> 		printf(&quot;Mensaje %d&quot;,Variable:2:3);<br /> 		cprintf(&quot;Mensaje&quot;);</font></td>
<td width="62%" valign="center"><font face="Arial" size="2">Escribe  		Mensaje en la pantalla<br /> 		Escribe Mensaje y el valor de la Variable en pantalla<br /> 		Escribe Mensaje y el valor de la Variable con 2 enteros y 3 decimales<br /> 		Escribe Mensaje en color especificado</font></td>
</tr>
<tr>
<td width="38%" valign="center"><font face="Arial" size="2"> 		scanf(&quot;%d&quot;,&amp;Variable);<br /> 		scanf(&quot;%d %f&quot;,&amp;Variable1,&amp;Variable2);</font></td>
<td width="62%" valign="center"><font face="Arial" size="2">Asigna valor  		entero a Variable<br /> 		Asigna valor entero a Variable1 y valor real a Variable2</font></td>
</tr>
</tbody>
</table>
<p> <a name="ANXOS" title="ANXOS"></a><font face="Arial" size="2"><strong>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Nota</p>
<p> </strong> </font>
<p><a name="ANXOS" title="ANXOS"></a><font face="Arial" size="2">C++ ofrece una alternativa a las llamadas de funcion </font> <font face="Arial" size="2" color="#800000">printf</font><font face="Arial" size="2">  y </font><font face="Arial" size="2" color="#800000">scanf</font><font face="Arial" size="2">  para manejar la entrada/salida de los tipos y cadenas de datos estandar. As&iacute; en  lugar de </font><font face="Arial" size="2" color="#800000">printf</font><font face="Arial" size="2">  usamos el flujo estandar de salida </font> <font face="Arial" size="2" color="#800000">cout</font><font face="Arial" size="2">  y el operador </font><font face="Arial" size="2" color="#800000">&lt;&lt; (&quot;colocar  en&quot;)</font><font face="Arial" size="2">; y en lugar de </font> <font face="Arial" size="2" color="#800000">scanf</font><font face="Arial" size="2">  usamos el flujo de entrada estandar </font> <font face="Arial" size="2" color="#800000">cin</font><font face="Arial" size="2">  y el operador </font><font face="Arial" size="2" color="#800000">&gt;&gt;(&quot;obtener  de&quot;)</font><font face="Arial" size="2">. Estos operadores de inserci&oacute;n y  extracci&oacute;n de flujo, a diferencia de </font> <font face="Arial" size="2" color="#800000">printf</font><font face="Arial" size="2">  y </font><font face="Arial" size="2" color="#800000">scanf</font><font face="Arial" size="2">,  no requieren de cadenas de formato y de formato y de especificadotes de  conversi&oacute;n para indicar los tipos de datos que son extraidos o introducidos.</font></p>
<p><a name="ANXOS" title="ANXOS"></a><font face="Arial" size="2">Las siguientes funciones nos resultan indispensable para poder brindar una  mejor presentaci&oacute;n de los datos en pantalla.</font></p>
<p> <a name="ANXOS" title="ANXOS"></a><font face="Arial" size="2" color="#808080">
<p>Gotoxy: Posicionando el cursor (DOS) </p>
<p> </font><font face="Arial" size="2">
<p>Esta funci&oacute;n s&oacute;lo est&aacute; disponible en compiladores de C que dispongan de la  biblioteca </p>
<p>Hemos visto que cuando usamos <em>printf</em> se escribe en la posici&oacute;n actual  del cursor y se mueve el cursor al final de la cadena que hemos escrito.</p>
<p>Vale, pero &iquest;qu&eacute; pasa cuando queremos escribir en una posici&oacute;n determinada de  la pantalla? La soluci&oacute;n est&aacute; en la funci&oacute;n gotoxy. Supongamos que queremos  escribir &#39;Hola&#39; en la fila 10, columna 20 de la pantalla: </p>
<p> </font><font face="Arial" size="2" color="#0000ff">
<p>#include </p>
<p>#include </p>
<p>void main()</p>
<p>{</p>
<p>gotoxy( 20, 10 );</p>
<p>printf( &quot;Hola&quot; );</p>
<p>}</p>
<p> </font><font face="Arial" size="2">
<p>(Nota: para usar gotoxy hay que incluir la biblioteca <em>conio.h</em>). </p>
<p>F&iacute;jate que primero se pone la columna (x) y luego la fila (y). La esquina  superior izquierda es la posici&oacute;n (1, 1).</p>
<p> </font><font face="Arial" size="2" color="#808080">
<p>Clrscr: Borrar la pantalla (DOS) </p>
<p> </font><font face="Arial" size="2">
<p>Ahora ya s&oacute;lo nos falta saber c&oacute;mo se borra la pantalla. Pues es tan f&aacute;cil  como usar:</p>
<p> </font><font face="Arial" size="2" color="#0000ff">
<p>clrscr()</p>
<p> </font><font face="Arial" size="2">
<p>(<u>cl</u>ea<u>r</u> <u>scr</u>een, borrar pantalla). </p>
<p>Esta funci&oacute;n n&oacute; solo borra la pantalla, sino que adem&aacute;s sit&uacute;a el cursor en la  posici&oacute;n (1, 1), en la esquina superior izquierda. </p>
<p> </font><font face="Arial" size="2" color="#0000ff">
<p>#include </p>
<p>#include </p>
<p>void main()</p>
<p>{</p>
<p>clrscr();</p>
<p>printf( &quot;Hola&quot; );</p>
<p>}</p>
<p> </font><font face="Arial" size="2">
<p>Este m&eacute;todo s&oacute;lo vale para compiladores que incluyan el fichero stdio.h. </p>
<p> </font><font face="Arial" size="2"><strong>
<p><a name="BIBLIO" title="BIBLIO"></a>BIBLIOGRAF&Iacute;A</p>
<p> </strong>
<p>Como programar en C/C++. H.M. Deitel / P.J. Deitel. Prentice may, 2da ed.  1995.</p>
<p>Programaci&oacute;n orientada a objetos con C++. Fco. Javier Ceballos. Ed. ra-ma  1993.</p>
<p>Programacion en C++. Enrique hernandez / Jose hernandez. Ed. Paraninfo 1993.</p>
<p>EN INTERNET</p>
<p> </font>
<p><a href="http://www.lawebdelprogramador.com/"><font face="Arial" size="2"> www.lawebdelprogramador.com</font></a></p>
<p><a href="http://www.publispain.com/supertutoriales/programacion"> <font face="Arial" size="2"> http://www.publispain.com/supertutoriales/programacion</font></a></p>
<p> Autores: <strong>Palate Gaibor y Alex Fernando</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://portal.tronk.net/archives/65/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
