<?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>Linux, Java y programación &#187; ejercicios</title>
	<atom:link href="http://casidiablo.net/tag/ejercicios/feed/" rel="self" type="application/rss+xml" />
	<link>http://casidiablo.net</link>
	<description>Blog de Java, Programación y Linux</description>
	<lastBuildDate>Fri, 11 Nov 2011 05:41:21 +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>La clase BigInteger en Java</title>
		<link>http://casidiablo.net/numeros-primos-java-biginteger/</link>
		<comments>http://casidiablo.net/numeros-primos-java-biginteger/#comments</comments>
		<pubDate>Thu, 16 Apr 2009 18:14:15 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[ejercicios en java]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[BigInteger]]></category>
		<category><![CDATA[ejemplos]]></category>
		<category><![CDATA[ejercicios]]></category>

		<guid isPermaLink="false">http://casidiablo.net/?p=3021</guid>
		<description><![CDATA[BigInteger y BigDecimal son clases envoltura de los tipos primitivos int y double, sin embargo tienen ventajas sobre los tipos primitivos. Cuando necesites usar números grandes en Java la mejor opción es usar estas clases, ya que su limite de almacenamiento es el límite de memoria que tenga la máquina virtual de Java. Además, estas [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fcasidiablo.net%252Fnumeros-primos-java-biginteger%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22La%20clase%20BigInteger%20en%20Java%22%20%7D);"></div>
<p style="text-align: justify;"><code>BigInteger</code> y <code>BigDecimal</code> son clases envoltura de los tipos primitivos <code>int</code> y <code>double</code>, sin embargo tienen ventajas sobre los tipos primitivos. Cuando necesites usar números grandes en Java la mejor opción es usar estas clases, ya que su limite de almacenamiento es el límite de memoria que tenga la máquina virtual de Java.</p>
<p style="text-align: justify;">Además, estas clases proporcionan algunos métodos bastante interesantes, como las operaciones básicas o saber si el número es primo o no. Como siempre vamos con algunos ejemplos de apoyo:</p>
<h3 style="text-align: justify;">Operaciones básicas con la clase BigInteger</h3>
<p style="text-align: justify;">En el siguiente ejemplo se hace uso de los métodos <em>add</em>, <em>substract</em>, <em>multiply</em> y <em>divide</em> para realizar las operaciones básicas de suma, resta, multiplicación y división:<span id="more-3021"></span></p>
<pre class="brush: java; title: ; notranslate">import java.math.BigInteger;
public class PruebaOperacionesBasicas {
    public static void main(String args[]){
        BigInteger entero1 = BigInteger.valueOf(45);
        BigInteger entero2 = BigInteger.valueOf(15);
        //sumar con metodo add()
        String texto = &quot;La suma entre &quot;+entero1+
                &quot; y &quot;+entero2+&quot; es &quot;+entero1.add(entero2);
        //restar con metodo substract()
        texto += &quot;\nLa resta entre &quot;+entero1+
                &quot; y &quot;+entero2+&quot; es &quot;+entero1.subtract(entero2);
        //multiplicar con metodo multiply()
        texto += &quot;\nEl producto de &quot;+entero1+
                &quot; y &quot;+entero2+&quot; es &quot;+entero1.multiply(entero2);
        //dividir con metodo divide()
        texto += &quot;\nLa división de &quot;+entero1+
                &quot; y &quot;+entero2+&quot; entre &quot;+entero1.divide(entero2);
        System.out.println(texto);
    }
}</pre>
<h3 style="text-align: justify;">Números primos en Java</h3>
<p style="text-align: justify;">Este es un típico ejercicio que nos plantean en la universidad; se trata de hacer un listado de los primeros X números primos. En este caso <code>BigInteger</code> nos proporciona dos métodos muy interesantes: <em>isProbablePrime</em> y <em>nextProbablePrime</em>. El primero de ellos devuelve <code>true</code> si el número es probablemente primo (recordemos que es complejo saber si un número es o no primo cuando es demasiado grande); el segundo devuelve el próximo posible número primo a partir del valor que contenga el objeto.</p>
<p style="text-align: justify;">La siguiente aplicación usa el método <em>nextProbablePrime</em> para listar los primeros 2000 números primos:</p>
<pre class="brush: java; title: ; notranslate">import java.math.BigInteger;
public class PruebaNumerosPrimos {
    public static void main(String args[]){
        //iniciar el entero en cero
        BigInteger entero = BigInteger.ZERO;
        StringBuffer texto = new StringBuffer();
        for(int i = 0; i&lt;2000; i++){
            entero = entero.nextProbablePrime();
            texto.append(entero+&quot;\n&quot;);
            entero.add(BigInteger.ONE);
        }
        System.out.println(texto);
    }
}</pre>
<p style="text-align: justify;"><strong>Otros métodos interesantes</strong></p>
<p style="text-align: justify;">La clase <code>BigInteger</code> proporciona además otros métodos que nos ahorrarán bastante tiempo y líneas de código:</p>
<ul style="text-align: justify;">
<li><em>pow</em>, nos permite elevar un número a la potencia que deseemos.</li>
<li><em>comparteTo</em>, nos permite comparar si un BigInteger es mayor, igual o menor que otro.</li>
<li><em>min</em> y <em>max</em>, nos permiten saber cuál de los dos BigInteger es menor o mayor.</li>
</ul>
<p style="text-align: justify;">Como mencioné al principio, también es posible usar la clase <code>BigDecimal</code> que funciona de manera similar pero con números de coma flotante.</p>
</p>
<p><a class="descargacodigo tooltip" title="Descargar archivo ZIP con las fuentes del ejemplo" href="http://casidiablo.net/descargar/Pruebas+BigInteger"><strong>Descargar código fuente de ejemplos</strong></a></p>

]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/numeros-primos-java-biginteger/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Arreglos bidimensionales en C#</title>
		<link>http://casidiablo.net/matrices-en-c-sharp/</link>
		<comments>http://casidiablo.net/matrices-en-c-sharp/#comments</comments>
		<pubDate>Wed, 19 Nov 2008 21:47:41 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[C-Sharp]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[arreglos]]></category>
		<category><![CDATA[bidimensionales]]></category>
		<category><![CDATA[ejemplo]]></category>
		<category><![CDATA[ejercicios]]></category>
		<category><![CDATA[foreach]]></category>
		<category><![CDATA[matrices]]></category>

		<guid isPermaLink="false">http://casidiablo.net/?p=2264</guid>
		<description><![CDATA[Las matrices o arreglos de dos dimensiones, son arrays bidimensionales cuyos elementos tienen dos indices. En C Sharp existen dos tipos de arreglos bidimensionales, los rectangulares y los din&#225;micos. Por lo general, cuando accedemos a arreglos bidimensionales utilizamos los t&#233;rminos filas y columnas. En los arreglos bidimensionales rectangulares, cada fila tiene la misma cantidad de [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fcasidiablo.net%252Fmatrices-en-c-sharp%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Arreglos%20bidimensionales%20en%20C%23%22%20%7D);"></div>
<p style="text-align: justify;">Las matrices o arreglos de dos dimensiones, son arrays bidimensionales cuyos elementos tienen dos indices. En C Sharp existen dos tipos de arreglos bidimensionales, los rectangulares y los din&aacute;micos. Por lo general, cuando accedemos a arreglos bidimensionales utilizamos los t&eacute;rminos <em>filas</em> y <em>columnas</em>.</p>
<p style="text-align: justify;">En <strong>los arreglos bidimensionales rectangulares, cada fila tiene la misma cantidad de columnas</strong>. Por otro lado, las filas de <strong>los arreglos bidimensionales din&aacute;micos pueden tener diferente cantidad de columnas</strong>. A continuaci&oacute;n, una serie de ejemplos en donde se explica c&oacute;mo se declara e inician los dos tipos de arreglos:</p>
<p><span id="more-2264"></span></p>
<h3>Declaraci&oacute;n e iniciaci&oacute;n de arreglos de dos dimensiones</h3>
<pre class="brush: csharp; title: ; notranslate">using System;
public class ArregloDosDimensiones {
  static void Main() {
     // declaracion e iniciaci&amp;amp;amp;oacute;n de arreglos rectangulares
     int[,] arreglo1 = new int[,] { { 1, 2, 3 }, { 4, 5, 6 } };
     // declaraci&amp;amp;amp;oacute;n e iniciaci&amp;amp;amp;oacute;n de arreglos dinamicos
     int[][] arreglo2 = new int[ 3 ][];
     string salida = &quot;&quot;;
     arreglo2[ 0 ] = new int[] { 1, 2 };
     arreglo2[ 1 ] = new int[] { 3 };
     arreglo2[ 2 ] = new int[] { 4, 5, 6 };
     salida = &quot;Valores en arreglo1 por fila\n&quot;;
     // salida del arreglo1
     for ( int i = 0; i &lt; arreglo1.GetLength( 0 ); i++ ) {
        for ( int j = 0; j &lt; arreglo1.GetLength( 1 ); j++ )
           salida += arreglo1[ i, j ] + &quot;  &quot;;
        salida += &quot;\n&quot;;
     }
     salida += &quot;\nValores en arreglo2 por fila\n&quot;;
     // salida del arreglo2
     for ( int i = 0; i &lt; arreglo2.Length; i++ ) {
        for ( int j = 0; j &lt; arreglo2[ i ].Length; j++ )
           salida += arreglo2[ i ][ j ] + &quot;  &quot;;
        salida += &quot;\n&quot;;
     }
     Console.WriteLine(salida);
  }
}</pre>
<p><strong>Salida&#8230;</strong></p>
<div class="consola">Valores en arreglo1 por fila<br />
1  2  3<br />
4  5  6  </p>
<p>Valores en arreglo2 por fila<br />
1  2<br />
3<br />
4  5  6  </p></div>
<p><a class="tooltip descargacodigo" title="Arreglos bidimensionales en C Sharp::Contiene archivo fuente .cs, proyecto para Visual Studio y Proyecto para Monodevelop" href="http://casidiablo.net/descargar/Arreglos+Bidimensionales">Descargar c&oacute;digo fuente</a></p>
<h3>Ejemplo con arreglos bidimensionales</h3>
<pre class="brush: csharp; title: ; notranslate">using System;
public class DoubleArray {
  static int[][] calificacion;
  static int estudiantes, examenes;
  static void Main() {
     string salida = &quot;                   &quot;;
     calificacion = new int[ 3 ][];
     calificacion[ 0 ] =  new int[]{ 77, 68, 86, 73 };
     calificacion[ 1 ] =  new int[]{ 96, 87, 89, 81 };
     calificacion[ 2 ] =  new int[]{ 70, 90, 86, 81 };
     estudiantes = calificacion.Length;      // numero de estudiantes
     examenes = calificacion[ 0 ].Length;    // numero de examenes
     // columnas
     for ( int i = 0; i &lt; examenes; i++ )
        salida += &quot;[&quot; + i + &quot;]  &quot;;
     // filas
     for ( int i = 0; i &lt; estudiantes; i++ ) {
        salida += &quot;\ncalificaciones[&quot; + i + &quot;]   &quot;;
        for ( int j = 0; j &lt; examenes; j++ )
           salida += calificacion[ i ][ j ] + &quot;   &quot;;
     }
     salida += &quot;\n\nCal. m&amp;amp;amp;aacute;s baja: &quot; + minimo() +
        &quot;\nCal. m&amp;amp;amp;aacute;s alta: &quot; + maximo() + &quot;\n&quot;;

     for ( int i = 0; i &lt; estudiantes; i++ )
        salida += &quot;\nEl promedio por estudiante &quot; + i + &quot; es &quot; +
           promedio( calificacion[ i ] );
     Console.WriteLine(salida);
  }
  // buscar calificacion minima en el arreglo
  static public int minimo() {
     int baja = 100;
     for ( int i = 0; i &lt; estudiantes; i++ )
        for ( int j = 0; j &lt; examenes; j++ )
           if ( calificacion[ i ][ j ] &lt; baja )
              baja = calificacion[ i ][ j ];
       return baja;
  }
  // buscar calificacion maxima en en arreglo
  static public int maximo() {
     int alta = 0;
     for ( int i = 0; i &lt; estudiantes; i++ )
        for ( int j = 0; j &lt; examenes; j++ )
           if ( calificacion[ i ][ j ] &gt; alta )
              alta = calificacion[ i ][ j ];
       return alta;
  }
  // determinar el promedio de la calificacion
  static public double promedio( int[] calificaciones ) {
     int total = 0;
     for ( int i = 0; i &lt; calificaciones.Length; i++ )
        total += calificaciones[ i ];
     return ( double ) total / calificaciones.Length;
  }
}</pre>
<p><strong>Salida&#8230;</strong></p>
<div class="consola">                   [0]  [1]  [2]  [3]<br />
calificaciones[0]   77   68   86   73<br />
calificaciones[1]   96   87   89   81<br />
calificaciones[2]   70   90   86   81   </p>
<p>Cal. m&aacute;s baja: 68<br />
Cal. m&aacute;s alta: 96</p>
<p>El promedio por estudiante 0 es 76<br />
El promedio por estudiante 1 es 88,25<br />
El promedio por estudiante 2 es 81,75</p></div>
<p><a class="tooltip descargacodigo" title="Arreglos bidimensionales en C Sharp::Contiene archivo fuente .cs, proyecto para Visual Studio y Proyecto para Monodevelop" href="http://casidiablo.net/descargar/Ejemplo+Arreglos+Bidimensionales">Descargar c&oacute;digo fuente</a></p>
<h3>Bonus: sentencia foreach en C#</h3>
<p>Cuando de recorrer arreglos se trata, existe una sentencia bastante &uacute;til: <em>foreach</em>. Foreach es similar a un for, solo que es un poco m&aacute;s simple. La sintaxis es <code>foreach(<em>VARIABLE</em> in ARREGLO)</code>, y cada vez que ocurre una iteraci&oacute;n, VARIABLE va tomando los valores del arreglo en orden:</p>
<pre class="brush: csharp; title: ; notranslate">using System;
class Foreach {
   // main entry point for the application
   static void Main(string[] args) {
      int[,] calificaciones = { { 77, 68, 86, 73 },
         { 98, 87, 89, 81 }, { 70, 90, 86, 81 } };
      int baja = 100;
      foreach ( int calificacion in calificaciones ) {
         if ( calificacion &lt; baja )
            baja = calificacion;
      }
      Console.WriteLine( &quot;La calificacion mas baja es: &quot; + baja );
   }
}</pre>
<p><a class="tooltip descargacodigo" title="Foreach en C Sharp::Contiene archivo fuente .cs" href="http://casidiablo.net/descargar/Foreach+C+Sharp">Descargar c&oacute;digo fuente</a></p>

]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/matrices-en-c-sharp/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Busqueda Binaria &#8211; C Sharp</title>
		<link>http://casidiablo.net/ejemplo-localizacion-binaria-c-sharp/</link>
		<comments>http://casidiablo.net/ejemplo-localizacion-binaria-c-sharp/#comments</comments>
		<pubDate>Wed, 19 Nov 2008 00:43:32 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[C-Sharp]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[arreglos]]></category>
		<category><![CDATA[binaria]]></category>
		<category><![CDATA[busqueda]]></category>
		<category><![CDATA[ejemplo]]></category>
		<category><![CDATA[ejercicios]]></category>
		<category><![CDATA[mono]]></category>

		<guid isPermaLink="false">http://casidiablo.net/?p=2259</guid>
		<description><![CDATA[Hace unos dí­as y poní­a un ejemplo acerca de búsquedas lineales en arreglos, ésta vez hablaremos acerca de las búsquedas lineales, un método mucho más rápido para buscar elementos. ¿Cómo funciona este método? Para poder aplicar éste método de búsqueda es necesario que el arreglo esté ordenado; posteriormente, se aplica el siguiente algoritmo: se ubica [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fcasidiablo.net%252Fejemplo-localizacion-binaria-c-sharp%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Busqueda%20Binaria%20-%20C%20Sharp%22%20%7D);"></div>
<p style="text-align: justify;">Hace unos dí­as y poní­a un ejemplo acerca de <a href="http://casidiablo.net/buscar-elementos-dentro-array-csharp-metodo-lineal/">búsquedas lineales en arreglos</a>, ésta vez hablaremos acerca de las búsquedas lineales, un método mucho más rápido para buscar elementos.</p>
<p style="text-align: justify;"><em>¿Cómo funciona este método?</em> Para poder aplicar éste método de búsqueda <strong>es necesario que el arreglo esté ordenado</strong>; posteriormente, se aplica el siguiente algoritmo: se ubica el elemento de la mitad del arreglo, entonces, si el número que se está buscando dentro del arreglo es menor al número de la mitad, se busca el número de la mitad entre el inicio del y la mitad del mismo, y así­ hasta encontrar el elemento deseado.</p>
<p style="text-align: justify;">Por ejemplo, suponiendo que tenemos un  arreglo con los siguientes valores:</p>
<p style="text-align: justify;"><code>2, 4, 5 , 6, 8, 9, 10, 12, 24, 34, 46, 56, 60, 67, 78, 89, 90</code></p>
<p style="text-align: justify;">&#8230;y queremos buscar el valor 10; tenemos que, el elemento de la mitad contiene el valor 24. Puesto que 24 &gt; 10, buscamos el valor intermedio entre el principio del arreglo y la mitad del mismo, esto es 8. Puesto que 8 &lt; 10, buscamos el valor intermedio entre 8 y la mitad del arreglo (24), esto es 10. Así­, con tan solo 3 bucles, hemos conseguido el valor buscado.</p>
<p style="text-align: justify;">Vamos con el código del programa, que nos sacará de toda duda:</p>
<p style="text-align: center;"><img src="http://casidiablo.net/wordpress/wp-content/uploads/2008/11/busquedabinaria.png"  /></p>
<p><span id="more-2259"></span></p>
<pre class="brush: csharp; title: ; notranslate">using System;
using System.Drawing;
using System.Windows.Forms;
public class EjemploBusquedaBinaria : Form
{
  private Label labelSolicitar;
  private TextBox cajaEntrada;
  private Label labelResultado;
  private Label labelMostrar;
  private Label labelSalida;
  private Button botonBuscar;
  int[] a = { 0, 2, 4, 6, 8, 10, 12, 14, 16,
              18, 20, 22, 24, 26, 28 };
  public EjemploBusquedaBinaria(){
     InitializeComponent();
  }
  private void InitializeComponent() {
     this.labelMostrar = new Label();
     this.labelResultado = new Label();
     this.cajaEntrada = new TextBox();
     this.labelSolicitar = new Label();
     this.botonBuscar = new Button();
     this.labelSalida = new Label();
     this.SuspendLayout();
     //
     // labelMostrar
     //
     this.labelMostrar.Location = new System.Drawing.Point(261, 8);
     this.labelMostrar.Name = &quot;labelMostrar&quot;;
     this.labelMostrar.Size = new System.Drawing.Size(152, 20);
     this.labelMostrar.TabIndex = 3;
     //
     // labelResultado
     //
     this.labelResultado.Location = new System.Drawing.Point(213, 8);
     this.labelResultado.Name = &quot;labelResultado&quot;;
     this.labelResultado.Size = new System.Drawing.Size(50, 16);
     this.labelResultado.TabIndex = 2;
     this.labelResultado.Text = &quot;Resultado:&quot;;
     //
     // cajaEntrada
     //
     this.cajaEntrada.Location = new System.Drawing.Point(99, 8);
     this.cajaEntrada.Name = &quot;cajaEntrada&quot;;
     this.cajaEntrada.TabIndex = 1;
     this.cajaEntrada.Text = &quot;&quot;;
     //
     // labelSolicitar
     //
     this.labelSolicitar.Location = new System.Drawing.Point(27, 8);
     this.labelSolicitar.Name = &quot;labelSolicitar&quot;;
     this.labelSolicitar.Size = new System.Drawing.Size(56, 16);
     this.labelSolicitar.TabIndex = 0;
     this.labelSolicitar.Text = &quot;Digite el dato&quot;;
     //
     // botonBuscar
     //
     this.botonBuscar.Location = new System.Drawing.Point(152, 40);
     this.botonBuscar.Name = &quot;botonBuscar&quot;;
     this.botonBuscar.Size = new System.Drawing.Size(136, 24);
     this.botonBuscar.TabIndex = 5;
     this.botonBuscar.Text = &quot;Buscar dato&quot;;
     this.botonBuscar.Click += new System.EventHandler(this.botonBuscar_Click);
     //
     // labelSalida
     //
     this.labelSalida.Font = new System.Drawing.Font(&quot;Courier New&quot;, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
     this.labelSalida.Location = new System.Drawing.Point(10, 80);
     this.labelSalida.Name = &quot;labelSalida&quot;;
     this.labelSalida.Size = new System.Drawing.Size(420, 72);
     this.labelSalida.TabIndex = 4;
     //
     // EjemploBusquedaBinaria
     //
     this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
     this.ClientSize = new System.Drawing.Size(440, 157);
     this.Controls.AddRange(new Control[] {
            this.botonBuscar,
            this.labelSalida,
            this.labelMostrar,
            this.labelResultado,
            this.cajaEntrada,
            this.labelSolicitar});
     this.Name = &quot;EjemploBusquedaBinaria&quot;;
     this.Text = &quot;Busqueda Binaria&quot;;
     this.ResumeLayout(false);
  }
  static void Main() {
     Application.Run( new EjemploBusquedaBinaria() );
  }
  private void botonBuscar_Click( object sender,
     System.EventArgs e )
  {
     int valorBuscar = Int32.Parse( cajaEntrada.Text );
     // iniciar los datos de salida
     labelSalida.Text = &quot;Portions of array searched\n&quot;;
     // realizar busqueda binaria
     int elemento = Buscar( a, valorBuscar );
     if ( elemento != -1 )
        labelMostrar.Text = &quot;Valor encontrado en indice &quot; +
           elemento;
     else
        labelMostrar.Text = &quot;Valor no encontrado&quot;;
  } // fin botonBuscar_Click
  // buscar mediante metodo binario
  public int Buscar( int[] array, int dato ) {
     int bajo = 0;
     int alto = array.Length - 1;
     int medio;
     while ( bajo &lt;= alto ) {
        medio = ( bajo + alto ) / 2;
        // el siguiente método nos muestra la porción del
        // arreglo donde se está llevando a cabo la busqueda
        // del dato en cada iteración del bucle
        construirSalida( a, bajo, medio, alto );
        if ( dato == array[ medio ] )   // si se encuentra el valor
           return medio;
        else if ( dato &lt; array[ medio ] )
           alto = medio - 1;   // buscar en la mitad más baja
        else
           bajo = medio + 1;   // buscar en la mitad más alta
     } // fin de la busqueda binaria
     return -1;  // dato no encontrado
  } // fin del metodo Buscar
  public void construirSalida(
     int[] array, int bajo, int mid, int alto ) {
     for ( int i = 0; i &lt; array.Length; i++ ) {
        if ( i &lt; bajo || i &gt; alto )
           labelSalida.Text += &quot;    &quot;;
        // marcar el elemento de la mitad en la salida
        else if ( i == mid )
           labelSalida.Text +=
              array[ i ].ToString( &quot;00&quot; ) + &quot;* &quot;;
        else
           labelSalida.Text +=
              array[ i ].ToString( &quot;00&quot; ) + &quot;  &quot;;
     }
     labelSalida.Text += &quot;\n&quot;;
  } // fin de construirSalida
} // fin de la clase EjemploBusquedaBinaria</pre>
<p><a class="tooltip descargacodigo" title="Búsqueda Binaria en C Sharp::Contiene archivo fuente .cs, proyecto para Visual Studio y Proyecto para Monodevelop" href="http://casidiablo.net/descargar/Busqueda+Binaria+C+Sharp">Descargar código fuente</a></p>

]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/ejemplo-localizacion-binaria-c-sharp/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Buscar datos dentro de arreglos C# &#8211; Método Lineal</title>
		<link>http://casidiablo.net/buscar-elementos-dentro-array-csharp-metodo-lineal/</link>
		<comments>http://casidiablo.net/buscar-elementos-dentro-array-csharp-metodo-lineal/#comments</comments>
		<pubDate>Wed, 12 Nov 2008 16:52:01 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[C-Sharp]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[arreglos]]></category>
		<category><![CDATA[buscar]]></category>
		<category><![CDATA[ejemplos]]></category>
		<category><![CDATA[ejercicios]]></category>
		<category><![CDATA[lineal]]></category>

		<guid isPermaLink="false">http://casidiablo.net/?p=2216</guid>
		<description><![CDATA[En el siguiente ejemplo se muestra cómo realizar búsquedas dentro de un arreglo de manera lineal. Ejemplo&#8230; Descargar código fuente]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fcasidiablo.net%252Fbuscar-elementos-dentro-array-csharp-metodo-lineal%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Buscar%20datos%20dentro%20de%20arreglos%20C%23%20-%20M%C3%A9todo%20Lineal%22%20%7D);"></div>
<p>En el siguiente ejemplo se muestra cómo realizar búsquedas dentro de un <a href="http://casidiablo.net/arreglos-en-c-sharp/">arreglo</a> de manera lineal.</p>
<h3>Ejemplo&#8230;</h3>
<p style="text-align: center;"><img src="http://casidiablo.net/wordpress/wp-content/uploads/2008/11/busquedalineal.png" alt="busqueda lineal"/></p>
<p><span id="more-2216"></span></p>
<pre class="brush: csharp; title: ; notranslate">using System;
using System.Drawing;
using System.Windows.Forms;
namespace BusquedaLineal
{
   public class BusquedaLineal : Form
   {
      private Button botonBuscar;
      private TextBox cajaEntrada;
      private Label labelSalida;
      int[] a = { 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26,
                  28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50 };
      public BusquedaLineal()
      {
         InitializeComponent();
      }
      private void InitializeComponent()
      {
         this.botonBuscar = new Button();
         this.cajaEntrada = new TextBox();
         this.labelSalida = new Label();
         this.SuspendLayout();
         //
         // botonBuscar
         //
         this.botonBuscar.Location = new System.Drawing.Point(8, 8);
         this.botonBuscar.Name = &quot;botonBuscar&quot;;
         this.botonBuscar.TabIndex = 0;
         this.botonBuscar.Text = &quot;Buscar&quot;;
         this.botonBuscar.Click += new System.EventHandler(this.botonBuscar_Click);
         //
         // cajaEntrada
         //
         this.cajaEntrada.Location = new System.Drawing.Point(96, 9);
         this.cajaEntrada.Name = &quot;cajaEntrada&quot;;
         this.cajaEntrada.Size = new System.Drawing.Size(88, 20);
         this.cajaEntrada.TabIndex = 1;
         this.cajaEntrada.Text = &quot;&quot;;
         //
         // labelSalida
         //
         this.labelSalida.Location = new System.Drawing.Point(8, 40);
         this.labelSalida.Name = &quot;labelSalida&quot;;
         this.labelSalida.Size = new System.Drawing.Size(184, 23);
         this.labelSalida.TabIndex = 2;
         //
         // BusquedaLineal
         //
         this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
         this.ClientSize = new System.Drawing.Size(200, 69);
         this.Controls.AddRange(new Control[] {
                  this.labelSalida,
                  this.cajaEntrada,
                  this.botonBuscar});
         this.Name = &quot;BusquedaLineal&quot;;
         this.Text = &quot;BusquedaLineal&quot;;
         this.ResumeLayout(false);
      }
      static void Main()
      {
         Application.Run(new BusquedaLineal());
      }
      private void botonBuscar_Click( object sender,
         System.EventArgs e )
      {
         int datoBuscar = Int32.Parse( cajaEntrada.Text );
         int indiceElemento = BuscarLineal( a, datoBuscar );
         if ( indiceElemento != -1 )
            labelSalida.Text =
               &quot;Encontrado en el indice &quot; + indiceElemento;
         else
            labelSalida.Text = &quot;Valor no encontrado&quot;;
      } // fin del metodo botonBuscar_Click
      // buscar valor dentro del array
      public int BuscarLineal( int[] array, int dato )
      {
         for ( int n = 0; n &lt; array.Length; n++ )
         {
            if ( array[ n ] == dato )
               return n;
         }
         return -1;
      } // fin del metodo BusquedaLineal
   }
}</pre>
<p><a class="tooltip descargacodigo" title="Busqueda lineal en C#::Contiene archivo fuente .cs, proyecto para Visual Studio y Proyecto para Monodevelop" href="http://casidiablo.net/descargar/Busqueda+Lineal+C+Sharp">Descargar código fuente</a></p>

]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/buscar-elementos-dentro-array-csharp-metodo-lineal/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Ordenar arreglos C# &#8211; Método burbuja</title>
		<link>http://casidiablo.net/ordenamiento-array-c-sharp-metodo-burbuja/</link>
		<comments>http://casidiablo.net/ordenamiento-array-c-sharp-metodo-burbuja/#comments</comments>
		<pubDate>Wed, 12 Nov 2008 15:48:32 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[C-Sharp]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[arreglos]]></category>
		<category><![CDATA[burbuja]]></category>
		<category><![CDATA[ejemplos]]></category>
		<category><![CDATA[ejercicios]]></category>
		<category><![CDATA[ordenar]]></category>

		<guid isPermaLink="false">http://casidiablo.net/?p=2212</guid>
		<description><![CDATA[En el siguiente ejemplo se muestra cómo realizar el ordenamiento de arreglos de enteros, usando el método burbuja en C#. Ejemplo&#8230; Resultado&#8230; Valores de los items originales 54 6 4 8 10 12 89 68 45 37 Valores de los items en orden descendente 89 68 54 45 37 12 10 8 6 4 Descargar [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fcasidiablo.net%252Fordenamiento-array-c-sharp-metodo-burbuja%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Ordenar%20arreglos%20C%23%20-%20M%C3%A9todo%20burbuja%22%20%7D);"></div>
<p>En el siguiente ejemplo se muestra cómo realizar el ordenamiento de arreglos de enteros, usando el método burbuja en C#.</p>
<h3>Ejemplo&#8230;</h3>
<p><span id="more-2212"></span></p>
<pre class="brush: csharp; title: ; notranslate">using System;
public class OrdenamientoBurbuja
{
  static void Main()
  {
     int[] a =  { 54, 6, 4, 8, 10, 12, 89, 68, 45, 37 };
     string salida = &quot;Valores de los items originales\n&quot;;
     for ( int i = 0; i &lt; a.Length; i++ )
        salida += &quot;   &quot; + a[ i ];
     // ordenar elementos del arreglo
     OrdenarBurbuja( a );
     salida += &quot;\n\nValores de los items en orden descendente\n&quot;;
     for ( int i = 0; i &lt; a.Length; i++ )
        salida += &quot;   &quot; + a[ i ];
     Console.WriteLine(salida);
  } // fin del metodo main
  // ordenar elementos de un arreglo con el metodo burbuja
  static public void OrdenarBurbuja( int[] b )
  {
     for ( int pasadas = 1; pasadas &lt; b.Length; pasadas++ ) // pasadas
        for ( int i = 0; i &lt; b.Length - 1; i++ )
           if ( b[ i ] &gt; b[ i + 1 ] )      // comparar
              intercambio( b, i );         // intercambiar
  }
  // intercambio de dos elementos en un arreglo
  static public void intercambio( int[] c, int primero )
  {
     int temp;      // variable temporal para el intercambio
     temp = c[ primero ];
     c[ primero ] = c[ primero + 1 ];
     c[ primero + 1 ] = temp;
  }
}</pre>
<p><strong>Resultado&#8230;</strong></p>
<div class="consola">Valores de los items originales<br />
   54   6   4   8   10   12   89   68   45   37</p>
<p>Valores de los items en orden descendente<br />
   89   68   54   45   37   12   10   8   6   4</p></div>
<p><a class="tooltip descargacodigo" title="Método burbuja en C#::Contiene archivo fuente .cs, proyecto para Visual Studio y Proyecto para Monodevelop" href="http://casidiablo.net/descargar/Ordenar+Arreglo+Metodo+Burbuja">Descargar código fuente</a></p>

]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/ordenamiento-array-c-sharp-metodo-burbuja/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>Ejemplos básicos de manipulación de arreglos en C#</title>
		<link>http://casidiablo.net/ejercicios-basicos-manejo-arreglos-c-sharp/</link>
		<comments>http://casidiablo.net/ejercicios-basicos-manejo-arreglos-c-sharp/#comments</comments>
		<pubDate>Mon, 10 Nov 2008 21:00:42 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[C-Sharp]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[arreglos]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[ejemplos]]></category>
		<category><![CDATA[ejercicios]]></category>

		<guid isPermaLink="false">http://casidiablo.net/?p=2191</guid>
		<description><![CDATA[Ejemplos básicos de manipulación de arreglos en C# Sumar elementos de un array Sinopsis: hacer la sumatoria de los elementos de un arreglo. Resultado&#8230; Suma de todos los elementos del array: 55 Descargar código fuente Creacion de histogramas Sinopsis: crear un histograma (barras a base de asteriscos) a partir de unos datos. Resultado&#8230; Elemento Valor [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fcasidiablo.net%252Fejercicios-basicos-manejo-arreglos-c-sharp%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Ejemplos%20b%C3%A1sicos%20de%20manipulaci%C3%B3n%20de%20arreglos%20en%20C%23%22%20%7D);"></div>
<p>Ejemplos básicos de manipulación de arreglos en C#</p>
<h3>Sumar elementos de un array</h3>
<p><strong>Sinopsis</strong>: hacer la sumatoria de los elementos de un arreglo.</p>
<pre class="brush: csharp; title: ; notranslate">using System;
class SumarArreglo
{
  // metodo Main
  static void Main( string[] args )
  {
     int[] a = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
     int total = 0;
     for ( int i = 0; i &lt; a.Length; i++ )
        total += a[ i ];
     Console.WriteLine( &quot;Suma de todos los elementos del array: &quot; + total);
  } // fin de Main
} // fin de la clase SumarArreglo</pre>
<p><strong>Resultado&#8230;</strong></p>
<div class="consola">Suma de todos los elementos del array: 55</div>
<p><a class="tooltip descargacodigo" title="Suma de elementos de arreglos en C#::Contiene archivo fuente .cs, proyecto para Visual Studio y Proyecto para Monodevelop" href="http://casidiablo.net/descargar/Sumar+Arreglo+C+Sharp">Descargar código fuente</a></p>
<h3>Creacion de histogramas</h3>
<p><strong>Sinopsis</strong>: crear un histograma (barras a base de asteriscos) a partir de unos datos.<span id="more-2191"></span></p>
<pre class="brush: csharp; title: ; notranslate">using System;
class Histograma
{
  // metodo Main
  static void Main( string[] args )
  {
     int[] n = { 19, 3, 15, 7, 11, 9, 13, 5, 17, 1 };
     string salida = &quot;Elemento\tValor\tHistograma\n&quot;;
     // construir salida
     for ( int i = 0; i &lt; n.Length; i++ )
     {
        salida += &quot;\n&quot; + i + &quot;\t\t\t&quot; + n[ i ] + &quot;\t\t&quot;;
        for ( int j = 1; j &lt;= n[ i ]; j++ ) // imprimir una barra
           salida += &quot;*&quot;;
     }
     Console.WriteLine( salida);
  } // fin Main
} // fin de la clase Histograma</pre>
<p><strong>Resultado&#8230;</strong></p>
<div class="consola">Elemento	Valor	Histograma</p>
<p>0			19		*******************<br />
1			3		***<br />
2			15		***************<br />
3			7		*******<br />
4			11		***********<br />
5			9		*********<br />
6			13		*************<br />
7			5		*****<br />
8			17		*****************<br />
9			1		*</p></div>
<p><a class="tooltip descargacodigo" title="Histogramas en C#::Contiene archivo fuente .cs, proyecto para Visual Studio y Proyecto para Monodevelop" href="http://casidiablo.net/descargar/Histograma+C+Sharp">Descargar código fuente</a></p>
<h3>Estadisticas de notas de estudiantes</h3>
<p><strong>Sinopsis</strong>: apartir de un arreglo de notas (puntajes) identificar la frecuencia de cada una de ellas entre todos los estudiantes.</p>
<pre class="brush: csharp; title: ; notranslate">using System;
class EncuestaEstudiantes
{
  // metodo Main
  static void Main( string[] args )
  {
     int[] respuestas = { 1, 2, 6, 4, 8, 5, 9, 7, 8, 10, 1,
        6, 3, 8, 6, 10, 3, 8, 2, 7, 6, 5, 7, 6, 8, 6, 7,
        5, 6, 6, 5, 6, 7, 5, 6, 4, 8, 6, 8, 10 };

     int[] frecuencia = new int[ 11 ];
     string salida = &quot;&quot;;

     // incrementar la frecuecia de para cada respuesta
     for ( int j = 0; j &lt; respuestas.Length; j++ )
        ++frecuencia[ respuestas[ j ] ];

     salida += &quot;Puntaje\tFrecuencia\n&quot;;

     // resultados
     for ( int puntaje = 1; puntaje &lt; frecuencia.Length; puntaje++ )
        salida += puntaje + &quot;\t\t&quot; + frecuencia[ puntaje ] + &quot;\n&quot;;

     Console.WriteLine( salida);

  } // fin Main

} // fin de la clase EncuestaEstudiantes</pre>
<p><strong>Resultado&#8230;</strong></p>
<div class="consola">Puntaje	Frecuencia<br />
1		2<br />
2		2<br />
3		2<br />
4		2<br />
5		5<br />
6		11<br />
7		5<br />
8		7<br />
9		1<br />
10		3</div>
<p><a class="tooltip descargacodigo" title="Encuesta Estudiantes en C#::Contiene archivo fuente .cs, proyecto para Visual Studio y Proyecto para Monodevelop" href="http://casidiablo.net/descargar/Estudiantes+C+Sharp">Descargar código fuente</a></p>

]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/ejercicios-basicos-manejo-arreglos-c-sharp/feed/</wfw:commentRss>
		<slash:comments>45</slash:comments>
		</item>
		<item>
		<title>[código] Obtener variables de entorno e información del sistema con Java</title>
		<link>http://casidiablo.net/obtener-variables-entorno-informacion-sistema-java/</link>
		<comments>http://casidiablo.net/obtener-variables-entorno-informacion-sistema-java/#comments</comments>
		<pubDate>Sat, 20 Sep 2008 04:01:49 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[ejercicios en java]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[ejemplos]]></category>
		<category><![CDATA[ejercicios]]></category>

		<guid isPermaLink="false">http://casidiablo.net/?p=1704</guid>
		<description><![CDATA[El siguiente es un pequeño programa que usando el método getenv de la clase System, devuelve información del sistema operativo y de las variables de entorno. La salida del mismo es algo como esto: $ java InfoCompu Nombre del PC: alienxp Nombre usuario: cristian Procesador: x86 Family 15 Model 4 Stepping 1, GenuineIntel Sistema operativo: [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fcasidiablo.net%252Fobtener-variables-entorno-informacion-sistema-java%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22%5Bc%C3%B3digo%5D%20Obtener%20variables%20de%20entorno%20e%20informaci%C3%B3n%20del%20sistema%20con%20Java%22%20%7D);"></div>
<p>El siguiente es un pequeño programa que usando el método <code><a href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/System.html#getenv(java.lang.String)">getenv</a></code> de la clase <code><a href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/System.html">System</a></code>, devuelve información del sistema operativo y de las variables de entorno. La salida del mismo es algo como esto:</p>
<div class="consola">$ java InfoCompu<br />
Nombre del PC: alienxp<br />
Nombre usuario: cristian<br />
Procesador: x86 Family 15 Model 4 Stepping 1, GenuineIntel<br />
Sistema operativo: Ubuntu 8.04 Hardy Heron<br />
Version JDK: 1.6.0_01<br />
Directorio actual: /home/cristian</div>
<div class="consola">&gt; java InfoCompu<br />
Nombre del PC: winxp<br />
Nombre usuario: ccasti<br />
Procesador: x86 Family 15 Model 4 Stepping 1, GenuineIntel<br />
Sistema operativo: Windows XP<br />
Version JDK: 1.5.0<br />
Directorio actual: c:\Documents and Settings\ccasti\Desktop</div>
<h3>El código&#8230;</h3>
<p><span id="more-1704"></span></p>
<pre class="brush: java; title: ; notranslate">class InfoCompu
{
    public static void main(String args[])
    {
       System.out.println(&quot;Nombre del PC: &quot; + nombrePC());
       System.out.println(&quot;Nombre usuario: &quot; + usuario());
       System.out.println(&quot;Procesador: &quot; + procesador());
       System.out.println(&quot;Sistema operativo: &quot; + SO());
       System.out.println(&quot;Version JDK: &quot; + JDK());
       System.out.println(&quot;Directorio actual: &quot; + dir());
    }
    public static String nombrePC()
    {
       return System.getenv(&quot;COMPUTERNAME&quot;);
    }
    public static String usuario()
    {
       return System.getProperty(&quot;user.name&quot;);
    }
    public static String procesador()
    {
       return System.getenv(&quot;PROCESSOR_IDENTIFIER&quot;);
    }
    public static String SO()
    {
         return System.getProperty(&quot;os.name&quot;);
    }
    public static String JDK()
    {
         return System.getProperty(&quot;java.version&quot;);
    }
    public static String dir()
    {
       return System.getProperty(&quot;user.dir&quot;);
    }
}</pre>
<p><a class="descargacodigo tooltip" title="Descargar código fuente del anterior ejemplo" href="http://casidiablo.net/descargar/Funcion+getenv">Descargar código</a></p>

]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/obtener-variables-entorno-informacion-sistema-java/feed/</wfw:commentRss>
		<slash:comments>31</slash:comments>
		</item>
		<item>
		<title>El Juego de la Vida [Java]</title>
		<link>http://casidiablo.net/juego-de-la-vida-java/</link>
		<comments>http://casidiablo.net/juego-de-la-vida-java/#comments</comments>
		<pubDate>Thu, 21 Aug 2008 20:49:53 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[ejercicios en java]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[ejemplos]]></category>
		<category><![CDATA[ejercicios]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[implementación]]></category>
		<category><![CDATA[juego]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[vida]]></category>

		<guid isPermaLink="false">http://casidiablo.net/?p=1382</guid>
		<description><![CDATA[Se trata de una implementación chichi del famoso Juego de la Vida en Java, ya que Burnhack me ha picado con el gusanillo de la curiosidad En fin&#8230; el programa simula un espacio de células que cumplen con las reglas básicas del juego, permite dibujar nuevos patrones, generar granjas aleatorias, y poner en marcha automática [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fcasidiablo.net%252Fjuego-de-la-vida-java%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22El%20Juego%20de%20la%20Vida%20%5BJava%5D%22%20%7D);"></div>
<p>Se trata de una implementación <span style="text-decoration: line-through;">chichi</span> del famoso <a href="http://es.wikipedia.org/wiki/Juego_de_la_vida">Juego de la Vida</a> en <strong><a href="http://casidiablo.net/java/">Java</a></strong>, ya que <a href="http://www.eduhack.es/foro/">Burnhack</a> me ha picado con el <abbr title="Evita comentarios generados por leer con doble sentido ;)">gusanillo</abbr> de la curiosidad <img src='http://casidiablo.net/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  En fin&#8230; el programa simula un espacio de células que cumplen con las reglas básicas del juego, permite dibujar nuevos patrones, generar granjas aleatorias, y poner en marcha automática o manualmente. De paso me sirvió para explicarle a mis hermanos el porqué del <a href="http://www.bit-man.com.ar/es/HackerEmblema.html">emblema hacker</a> <img src='http://casidiablo.net/wordpress/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p style="text-align: center;"><img class="size-full wp-image-1383 aligncenter" title="juego-de-la-vida" src="http://casidiablo.net/wordpress/wp-content/uploads/2008/08/pantallazo-el-juego-de-la-vida-1.png" alt="" width="500" height="550" /></p>
<p>Puedo decir que me divertí mucho programando, y que a la vez me da pena no haber podido dedicarle más de tres días: el resultado es un programa que funciona bien cuando se ejecuta de manera normalita, <em>pero</em> con la opción de zoom <em>hay</em> problemas. Y aquí <strong>les doy un par de consejos</strong>: puesto que al principio el programa lo iba a hacer junto con <a href="http://www.eduhack.es/foro/">Burnhack</a>, utilicé una clase que él utilizaba llamada BufferedImage (para dibujar las figuras). Luego, cuando me dí cuenta de que no entendía <span style="text-decoration: line-through;">ni mierda</span> nada del código de mi amigo, decidí hacer la lógica desde cero; y aquí van los consejos:</p>
<ul>
<li>Hacer comentarios es SUPREMAMENTE IMPORTANTE, sobre todo cuando se programa en grupo</li>
<li>Cuando hagas este tipo de proyectos es mejor que uses Canvas; yo caí en cuenta muy tarde y ya me da flojera arreglarlo</li>
</ul>
<p>Por supuesto, el programa está disponible para que lo estudien, lo copien, lo regalen, etc. Espero le sirva a alguien. Les quedo debiendo la explicación porqué es algo largo <img src='http://casidiablo.net/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><em><strong>Nota</strong>: los iconos los he tomado de <a href="http://www.icojoy.com/articles/25/">Icojoy</a></em></p>
<h3>Compilación y ejecución&#8230;</h3>
<p class="consola">#compilación<br />
javac Glider.java<br />
#ejecución normal<br />
java Glider<br />
#ejecución con la característica zoom (umm, que mal programador soy <img src='http://casidiablo.net/wordpress/wp-includes/images/smilies/icon_mrgreen.gif' alt=':mrgreen:' class='wp-smiley' />  )<br />
java Glider &#8211;zoom</p>
<p><a class="tooltip download" title="Desgargar código fuente + imagenes" href="http://casidiablo.net/descargar/Juego+de+la+vida"><strong>Descargar código fuente</strong></a></p>

]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/juego-de-la-vida-java/feed/</wfw:commentRss>
		<slash:comments>29</slash:comments>
		</item>
		<item>
		<title>Procesando XML en Java [Xerces]</title>
		<link>http://casidiablo.net/procesamiento-xml-java-xerces/</link>
		<comments>http://casidiablo.net/procesamiento-xml-java-xerces/#comments</comments>
		<pubDate>Thu, 14 Aug 2008 17:29:34 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[ejercicios en java]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[programas]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[ejemplos]]></category>
		<category><![CDATA[ejercicios]]></category>
		<category><![CDATA[Parsear]]></category>
		<category><![CDATA[xerces]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://casidiablo.net/?p=1329</guid>
		<description><![CDATA[En este artículo utilizaré un pequeño ejemplo para explicar cómo manipular documentos XML usando XERCES Java Parser. En este primer ejemplo usaré el API DOM, y la utilizaremos para generar un archivo XML y guardarlo en disco, y posteriormente procesaremos (parsearemos) dicho archivo para leer su información. Nota: Sino tienes claro qué es un parser [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fcasidiablo.net%252Fprocesamiento-xml-java-xerces%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Procesando%20XML%20en%20Java%20%5BXerces%5D%22%20%7D);"></div>
<p style="text-align: center;"><img class="size-full wp-image-1344 aligncenter" title="java-duke-xml" src="http://casidiablo.net/wordpress/wp-content/uploads/2008/08/java-duke-xml.png" alt="duke java xml" /></p>
<p>En este artículo utilizaré un pequeño ejemplo para explicar cómo manipular documentos XML usando <a href="http://xerces.apache.org/xerces-j/">XERCES Java Parser</a>. En este primer ejemplo usaré el API DOM, y la utilizaremos para generar un archivo XML y guardarlo en disco, y posteriormente procesaremos (<em>parsearemos</em>) dicho archivo para leer su información.</p>
<p><strong>Nota</strong>: Sino tienes claro qué es un parser XML, qué es un API XML para Java y cuáles están disponibles, o aún tienes algunas dudas en relación con Java y XML, puedes/debes leer <a href="http://casidiablo.net/xml-java/">este pequeño artículo</a>.</p>
<h3>Generación de archivos XML usando Xerces</h3>
<p>En esta ocasión utilizaremos el API DOM para generar un archivo XML, que guardará información acerca de un listado de descargas ficticio. Como resultado, nuestra aplicación generará el siguiente documento XML:</p>
<pre class="brush: xml; title: ; notranslate">&lt;?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot;?&gt;
&lt;Descargas&gt;
    &lt;descarga id=&quot;1&quot;&gt;
        &lt;titulo&gt;Libros Java&lt;/titulo&gt;
        &lt;ruta&gt;http://casidiablo.net/libros.zip&lt;/ruta&gt;
        &lt;hits&gt;2546&lt;/hits&gt;
    &lt;/descarga&gt;
    &lt;descarga id=&quot;2&quot;&gt;
        &lt;titulo&gt;Libros C Sharp&lt;/titulo&gt;
        &lt;ruta&gt;http://casidiablo.net/libroscs.zip&lt;/ruta&gt;
        &lt;hits&gt;1654&lt;/hits&gt;
    &lt;/descarga&gt;
&lt;/Descargas&gt;</pre>
<p>En el cual tenemos un elemento llamado <em><strong>descarga</strong></em> que contiene un atributo llamado <em><strong>id</strong></em>; además posee tres nodos hijos: <em><strong>titulo</strong></em>, <em><strong>ruta</strong></em> y <em><strong>hits</strong></em>. Teniendo en cuenta esto crearemos un pequeño bean (clase <em>Descargas.java</em>), que contiene dichos datos:</p>
<pre class="brush: java; title: ; notranslate">public class Descargas {
    //Variables
    private int id;
    private String titulo;
    private String ruta;
    private int hits;
    //Constructor de la clase
    public Descargas(int id, String titulo, String ruta, int hits){
        this.id = id;
        this.titulo = titulo;
        this.ruta = ruta;
        this.hits = hits;
    }
    //Metodos Setters y Getters
    public void setID(int id) {
        this.id = id;
    }
    public int getID() {
        return this.id;
    }
    //etc... (AL FINAL DEL ARTÍCULO PUEDES DESCARGAR EL EJEMPLO COMPLETO)
}</pre>
<p>Más adelante utilizaremos la clase <em>GenerarXML.java</em>, quien se encargará de crear el archivo XML. De momento detallaremos los pasos básicos para realizar tareas de ese tipo:</p>
<ul>
<li>Crear los objetos a cargar en el documento XML (en nuestro ejemplo, objetos tipo <strong><em>Descargas</em></strong>)</li>
<li>Crear un objeto <em><a href="http://java.sun.com/j2se/1.4.2/docs/api/org/w3c/dom/Document.html">Document</a></em> que contendrá el documento XML</li>
<li>Generar los datos XML para los objetos creados en primer paso</li>
<li>Crear un archivo (o salida) XML</li>
</ul>
<p>En nuestro ejemplo, la invocación a los métodos que realizan estas tareas se encuentra en el método <em>main</em>:</p>
<pre class="brush: java; title: ; notranslate">public static void main(String args[])
{
   GenerarXML generador = new GenerarXML();
   // A. Crear el objeto(s) a Descargas
   Descargas descarga = new Descargas(1, &quot;Libros Java&quot;, &quot;http://casidiablo.net/libros.zip&quot;, 2546);
   Descargas descarga2 = new Descargas(2, &quot;Libros C Sharp&quot;, &quot;http://casidiablo.net/libroscs.zip&quot;, 1654);
   // B. Generar un documento XML usando Document
   generador.generaDocumentoXML();
   // C. Generar XML para el/los objeto(s)
   generador.generarDocumentoXMLDescarga(descarga);
   generador.generarDocumentoXMLDescarga(descarga2);
   // D. Obtener el código XML
   String textoXML = generador.obtenerTextoXML();
   generador.guardarDocumentoXML(textoXML);
   System.out.println(textoXML);
}</pre>
<p>Veamos con más profundidad cómo funciona el segundo paso (<strong><em>Crear un objeto <a href="http://java.sun.com/j2se/1.4.2/docs/api/org/w3c/dom/Document.html">Document</a> que contendrá el documento XML</em></strong>):</p>
<pre class="brush: java; title: ; notranslate">public void generaDocumentoXML() {
    try {
        // 1. Crear objeto DocumentBuilderFactory
        DocumentBuilderFactory dbFactory = DocumentBuilderFactoryImpl.newInstance();
        // 2. A partir del objeto DocumentBuilderFactory crear un objeto DocumentBuilder
        DocumentBuilder docBuilder = dbFactory.newDocumentBuilder();
        // 3. Generar el documento XML
        documentoXML = docBuilder.newDocument();
    } catch (Exception e) {
        System.out.println(&quot;Error : &quot; + e);
    }
    // 4. Crear el elemento &quot;descargas&quot;
    descarga = documentoXML.createElement(TAG_DESCARGAS);
    // 5. Agregar al documento principal
    documentoXML.appendChild(descarga);
}</pre>
<ol>
<li>Creamos un objeto <a href="http://java.sun.com/j2se/1.4.2/docs/api/javax/xml/parsers/DocumentBuilderFactory.html">DocumentBuilderFactory</a>, utilizando la el método <em>newInstance()</em> de la clase <a href="http://xerces.apache.org/xerces-j/apiDocs/org/apache/xerces/jaxp/DocumentBuilderFactoryImpl.html">DocumentBuilderFactoryImpl</a>.</li>
<li>Creamos un objeto <a href="http://java.sun.com/j2se/1.4.2/docs/api/javax/xml/parsers/DocumentBuilder.html">DocumentBuilder</a>, con el que crearemos el objeto <a href="http://java.sun.com/j2se/1.4.2/docs/api/org/w3c/dom/Document.html">Document</a></li>
<li>Generamos el documento usando el método <em>newDocument()</em> de <a href="http://java.sun.com/j2se/1.4.2/docs/api/javax/xml/parsers/DocumentBuilder.html">DocumentBuilder</a></li>
<li>Se crea el elemento raíz del documento XML y,</li>
<li>Se añade dicho elemento al objeto <a href="http://java.sun.com/j2se/1.4.2/docs/api/org/w3c/dom/Document.html">Document</a></li>
</ol>
<p>Después de esto, ya tenemos listo nuestro objeto <a href="http://java.sun.com/j2se/1.4.2/docs/api/org/w3c/dom/Document.html">Document</a> en donde crearemos el documento XML. El paso siguiente será alimentar el documento XML con la información de nuestros objetos, lo cual se hace en el método <em>generarDocumentoXMLDescarga</em>:</p>
<pre class="brush: java; title: ; notranslate">public void generarDocumentoXMLDescarga(Descargas descargas)
{
    Element elemento;
    Element item;
    // 1. Crear elemento
    elemento = documentoXML.createElement(TAG_DESCARGA);
    // 2. Asignar un atributo
    elemento.setAttribute(TAG_ID, &quot;&quot;+descargas.getID());
    // 3. Aniadir elemento al documento
    descarga.appendChild(elemento);
    // a. Crear item
    item = documentoXML.createElement(TAG_TITULO);
    // b. Asignar un dato al item
    item.appendChild(documentoXML.createTextNode(descargas.getTitulo()));
    // c. Aniadir el item
    elemento.appendChild(item);
    // todos los items se crean sigiuendo el patron a, b, c
    // el código fuente completo se encuentra
    //disponible para su descarga al final de este artículo
}</pre>
<ol>
<li>Se crea un elemento (<em>&lt;descarga&gt;</em>)</li>
<li>Se asigna un atributo al elemento (<em>&lt;descarga id=&#8221;xxx&#8221;&gt;</em>)</li>
<li>Se añade el elemento al documento XML; posteriormente tenemos la creación de items, para dicho elemento:<br />
a. Se crea el item (<em>&lt;titulo&gt;&lt;/titulo&gt;</em>)<br />
b. Se asigna un dato al item <em>(&lt;titulo&gt;datos, muchos datos&lt;/titulo&gt;)</em><br />
c. Se añade el item al elemento <em>(&lt;descarga id=&#8221;xxx&#8221;&gt;&lt;titulo&gt;datos, muchos datos&lt;/titulo&gt;&lt;/descarga&gt;)</em></li>
</ol>
<p>Para generar una salida del documento XML se utilizamos el método <em>generaTextoXML()</em> el cual devuelve un string que contiene el documento XML:</p>
<pre class="brush: java; title: ; notranslate">private String generaTextoXML() {
   StringWriter strWriter = null;
   XMLSerializer seliarizadorXML = null;
   OutputFormat formatoSalida = null;
   try {
      seliarizadorXML = new XMLSerializer();
      strWriter = new StringWriter();
      formatoSalida = new OutputFormat();
      // 1. Establecer el formato
      formatoSalida.setEncoding(XML_ENCODING);
      formatoSalida.setVersion(XML_VERSION);
      formatoSalida.setIndenting(true);
      formatoSalida.setIndent(4);
      // 2. Definir un objeto donde se generara el codigo
      seliarizadorXML.setOutputCharStream(strWriter);
      // 3. Aplicar el formato
      seliarizadorXML.setOutputFormat(formatoSalida);
      // 4. Serializar documento XML
      seliarizadorXML.serialize(documentoXML);
      strWriter.close();
   } catch (IOException ioEx) {
      System.out.println(&quot;Error : &quot; + ioEx);
   }
   return strWriter.toString();
}</pre>
<ol>
<li>Utilizando un objeto de la clase <a href="http://xerces.apache.org/xerces-j/apiDocs/org/apache/xml/serialize/OutputFormat.html">OutputFormat</a>, se asigna el tipo de codificación y versión del archivo XML, activamos la identación y la ponemos a 4 espacios</li>
<li>Un objeto <a href="http://xerces.apache.org/xerces-j/apiDocs/org/apache/xml/serialize/XMLSerializer.html">XMLSerializer</a> escribe los datos del documento XML sobre un objeto de flujo de salida, en este caso un objeto <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/io/StringWriter.html">StringWriter</a>.</li>
<li>Asignamos el tipo de formato que el objeto <a href="http://xerces.apache.org/xerces-j/apiDocs/org/apache/xml/serialize/XMLSerializer.html">XMLSerializer</a> generará</li>
<li>Generamos el documento XML</li>
</ol>
<p>El string generado por <em>generaTextoXML()</em> podemos imprimirlo directamente en pantalla, o escribirlo en un archivo como lo hace el método <em>guardarDocumentoXML()</em>:</p>
<pre class="brush: java; title: ; notranslate">public void guardarDocumentoXML(String texto) {
   try {
      OutputStream fout = new FileOutputStream(NOMBRE_ARCHIVO_XML);
      OutputStream bout = new BufferedOutputStream(fout);
      OutputStreamWriter out = new OutputStreamWriter(bout, JAVA_ENCODING);
      out.write(texto);
      out.flush();
      out.close();
   } catch (UnsupportedEncodingException e) {
   //etc, bla, bla, catchichurri
}</pre>
<p>El método <em>guardarDocumentoXML()</em> un objeto FileOutputStream para escribir los datos del documento XML en un archivo (cuyo nombre define la variable NOMBRE_ARCHIVO_XML).</p>
<p>Continúa leyendo la segunda parte, en donde aprenderemos a Parsear archivos XML. Vamos parce!</p>

]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/procesamiento-xml-java-xerces/feed/</wfw:commentRss>
		<slash:comments>36</slash:comments>
		</item>
		<item>
		<title>Validación de formularios en Java</title>
		<link>http://casidiablo.net/validacion-de-formularios-en-java/</link>
		<comments>http://casidiablo.net/validacion-de-formularios-en-java/#comments</comments>
		<pubDate>Mon, 04 Aug 2008 17:50:44 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[ejercicios en java]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[Character]]></category>
		<category><![CDATA[ejemplos]]></category>
		<category><![CDATA[ejercicios]]></category>
		<category><![CDATA[JTextField]]></category>
		<category><![CDATA[tip]]></category>

		<guid isPermaLink="false">http://casidiablo.net/?p=1242</guid>
		<description><![CDATA[CódiLa validación de formularios nos permite asegurarnos que los datos que, por ejemplo, un usuario ingrese en un campo de texto sean válidos. Dicha validación puede hacerse una vez que el usuario haya digitado todos los datos, o mientras el usuario los esté digitando. Para el primer caso, lo mejor es utilizar expresiones regulares usando [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fcasidiablo.net%252Fvalidacion-de-formularios-en-java%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Validaci%C3%B3n%20de%20formularios%20en%20Java%22%20%7D);"></div>
<p>CódiLa validación de formularios nos permite asegurarnos que los datos que, por ejemplo, un usuario ingrese en un campo de texto sean válidos. Dicha validación puede hacerse <strong>una vez que el usuario haya digitado todos los datos</strong>, o <strong>mientras el usuario los esté digitando</strong>.</p>
<p>Para el primer caso, lo mejor es utilizar expresiones regulares usando el método <em>matches()</em> de la clase <em>String</em> (si necesitas un ejemplo, <a class="tooltip" title="Buscar el ejemplo llamado...::Validación de la información del usuario mediante expresiones regulares" href="http://casidiablo.net/codigo-ejemplos-de-cadenas-y-caracteres-en-java-2/">clic aquí</a>).</p>
<p>Para el segundo caso tendremos que manejar los <a href="http://casidiablo.net/codigo-guis-en-java-eventos-de-mouse-y-teclado/">eventos del teclado</a> que se generen sobre determinado control, usando la interfaz <em>KeyAdapter</em> y el método <em>keyReleased</em>. Así, en nuestro código de ejemplo tenemos <strong>un <em>JTextField</em> al que le <abbr class="tooltip" title="Usando el método addKeyListener">añadimos un <em>Listener</em></abbr> que <em>escuchará</em></strong> los eventos del teclado, y verificará si la tecla presionada es un caractér válido (solo letras), de lo contrario lo elimina.</p>
<p>No hay nada especial en el código de ejemplo salvo por un par de líneas:</p>
<ul>
<li><strong>Línea 17</strong>: se utiliza el método anidado getToolkit().beep(), que hará que el sistema alerte al usuario con un pitido cada vez que un dato erróneo.</li>
<li><strong>Línea 25</strong>: comparamos el <em>char</em> que digite el usuario con el entero 8, que es el código resultado al usar el Backspace (tecla para borrar hacia la izquierda); lo cual permite al usuario borrar caracteres.</li>
</ul>
<h3>Código&#8230;</h3>
<pre class="brush: java; title: ; notranslate">import java.awt.Robot;
import javax.swing.*;
import java.awt.event.*;
public class SoloLetras extends JFrame {
	private JTextField caja = new JTextField();
	public SoloLetras() {
		super(&quot;Solo dejo escribir letras&quot;);
		caja.addKeyListener(new KeyAdapter() {
			public void keyReleased(KeyEvent e) {
				Character caracter = new Character(e.getKeyChar());
				if (!esValido(caracter)) {
					String texto = &quot;&quot;;
					for (int i = 0; i &lt; caja.getText().length(); i++)
						if (esValido(new Character(caja.getText().charAt(i))))
							texto += caja.getText().charAt(i);
					caja.setText(texto);
					getToolkit().beep();
				}
			}
			public boolean esValido(Character caracter)
			{
				char c = caracter.charValue();
				if ( !(Character.isLetter(c) //si es letra
						|| c == ' ' //o un espacio
						|| c == 8 //o backspace
					))
					return false;
				else
					return true;
			}
		});
		getContentPane().add(caja);
		setSize(300, 60);
		setVisible(true);
	}
	public static void main(String args[]) {
		JFrame.setDefaultLookAndFeelDecorated(true);
		SoloLetras ventana = new SoloLetras();
		ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}</pre>
<p><a href="http://casidiablo.net/descargar/Validaci%C3%B3n+Formularios" title="Descargar archivo SoloLetras.zip" class="descargacodigo tooltip">Descargar código fuente</a></p>

]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/validacion-de-formularios-en-java/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
	</channel>
</rss>

