Suscribirse al Feed
24Jul

Números aleatorios en C#

La generación de números aleatoreos es una de las prácticas más importantes en cualquier lenguaje de programación, sobre todo cuando deseamos desarrollar juegos, por ejemplo. Para usar números aleatorios en C# podemos utilizar la clase Random del namespace System, de la siguiente manera:


Random objeto = new Random();
int numero = objeto.Next();

El método Next de la clase Random genera y devuelve un número aleatorio entre 0 y la constante Int32.MaxValue (2,147,483,647). El número es generado después de (como decía mi profesora de matemáticas) complejos procesos matemáticos, y como en casi todos los lenguajes necesitan de una semilla (seed) para ser generados, que por defecto es la hora del sistema.

Aún así, muchas veces necesitamos que el número sea generado en un rango específico de valores. Por ejemplo, para una aplicación que simule el lanzamiento de un dado de seis caras necesitamos generar números entre 1 y 6. Para lograr esto, el método Next puede recibir además un entero que indica el rango máximo del número aleatorio. Por ejemplo, el código:


Random objeto = new Random();
int numero = objeto.Next(6);

generaría un número aleatorio entre 0 y 7 (pero no 6), es decir, seis posibles números. Pero, si desearamos algún rango más exacto, podríamos hacer algo como:

Random objeto = new Random();
int numero = objeto.Next(1, 7);

lo que generaría números entre 1 y 7 (pero no 7), de nuevo seis números posibles.

Ejemplo completo…

En el siguiente ejemplo se utilizará la clase Random para generar una serie de números aleatorios cada vez que se presiona un botón:

pantallazo numero aleatorio

El código lo pongo para su descarga abajo, ya que lo hice con Gtk# usando MonoDevelop, y sería engorroso poner todo el código. Así que solo pondré la parte del código que nos interesa:

    private Random obj = new Random();
    //Método ejecutado al presionar el botón
    protected virtual void generar_Click (object sender, System.EventArgs e)
    {
        etiqueta.Text = "";
        for(int i = 0; i < 4 ; i++)
        {
            for(int j = 0; j < 4 ; j++)
                etiqueta.Text += obj.Next(1, 10) +"\t\t";
            etiqueta.Text += "\n\n";
        }
    }

Enlaces y descargas

Los ejercicios utilizados en este post fueron desarrollados con las librerías Gtk# usando Mono. Se añadió además un link de descarga de un ejercicio similar, tomado del libro C# How to Program de Deitel, que utiliza Windows Forms, desarrollado para trabajar sobre Visual Studio de Microsoft en plataformas Windows y se encuentra en inglés.
22Jul

Paso de variables Por Referencia vs Por Valor [C#]

En C#, como en Java, u otros lenguajes de programación, es posible pasar variables a los métodos (funciones) de dos maneras: Por referencia y Por valor. La diferencia entre el uno y el otro es básicamente que:

  • Cuando una variable es pasada por valor, el método recibe una copia del valor de la variable. Por lo tanto, los cambios realizados a esa variable dentro del contexto de la función, NO afecta a la variable original. Pero…
  • Cuando es pasada por referencia, el método recibe la referencia a la variable original. Por tanto los cambios realizados a esa variable dentro del contexto de la función, AFECTA a la variable original.

¿Cual debo usar?

Eso depende de lo que quieras hacer. Cada una tiene sus ventajas y desventajas. Al pasar una variable por valor, estás asegurando que dicho valor no va a ser modificado por equivocación. Por otro lado, al pasar una variable por referencia, aunque la variable puede ser modificada por equivocación, ahorramos tiempo de ejecución y memoria, puesto que no es necesario crear una copia de la variable.

Pasar variables por referencia

Todas las variables que pasamos a un método declarado normalmente, son por valor. Para pasar argumentos por referencia es necesario utilizar las palabras reservada ref o out, tanto al declarar el método como al invocarlo. Cuando pasamos un argumento usando ref, es necesario que dicha variable esté ya inicializada, de lo contrario obtendremos una excepción. Si la variable que deseamos pasar por referencia no está inicializada, es nesesario usar out, de tal manera que podamos inicializar la variable dentro del contexto del método.

Ejemplo…

En el siguiente ejemplo tenemos dos variables (y Y z), las cuales son procesadas por métodos que reciben variables por valor y por referencia. El resultado y el código son:

Leer el resto de la entrada…

Los ejercicios utilizados en este post están basados en ejemplos del libro C# How to Program de Deitel. Se pone a disposición la descargar del programa original, desarrollado para trabajar sobre Visual Studio de Microsoft en plataformas Windows, y se encuentra en inglés. La versión simplificada está basada en la original, pero sin código basura insertado por Visual Studio, se encuentra en español y ha sido probada sobre Gnu/Linux usando Mono.
14May

WinForms 2.0 para Mono

Me entero en Barrapunto que el desarrollo de WinForms 2.0 para Mono ya se ha completado y que los 12,776 métodos que constituyen su API pública son exactamente los mismos que los de .NET. El toolkit está compuesto por 115.000 líneas de código fuente y ha costado 4 años de desarrollo (desde el 8 de julio de 2004). Actualmente están soportados los backends para X11, OSX y Win32. WinForms 2.0 era la última pieza del puzzle que había que completar antes de la publicación de Mono 2.0.

Sin duda una excelente noticia para el mundo del software libre, y para la gente que está pensando en migrar las aplicaciones que usen WindowsForms a entornos libres.

Relacionadas:

05May

Aplicaciones con GUI en .NET: ¿Gtk# o Windows Forms?

Hace tiempo discutía con algunas personas la mejor manera de usar Mono tanto en el escritorio Linux como en Windows. Me refiero al momento de escoger entre Windows Forms y Gtk#, para desarrollar aplicaciones con interfaz gráfica. Personalmente pienso que la mejor opción es, inclinándome hacia el lado del software libre, usar Mono + Gtk#. Claro, eso también depende de tus gustos como desarrollador y, más importante aún, de las necesidades del proyecto a realizar.

Lo que quiero enseñarles en esta entrada es cómo se pueden tomar diferentes caminos, y aclarar algunas dudas que me han planteado ciertos lectores. Siendo así, vamos a tomar como ejemplo a dos programas sencillos: el primero usando Gtk# y corriendo tanto en Linux como Windows, y el otro usando Windows Forms corriendo tanto en Windows como Linux.

Desarrollando y ejecutando aplicaciones Gtk# y Windows Forms usando Mono

Antes de comenzar con los ejercicios, veamos qué necesitamos para desarrollar y ejecutar aplicaciones que usen Gtk# y Windows Forms. Es necesario (obviamente) tener dicho framework instalado; afortunadamente, la mayoría de las distribuciones Gnu/Linux actuales tienen los paquetes necesarios en los repositorios, e incluso vienen con lo necesario para ejecutar aplicaciones desarrolladas con Mono (como Tomboy, Fspot o Banshee). Para compilar aplicaciones C# para mono es necesario utilizar el CSharp Compiler (cms).

También, es posible descargar mono para los más importantes sistemas operativos, incluyendo por supuesto sistemas Microsoft Windows. Para tal caso es posible descargar una versión completa (Mono + Gtk# + XSP), o tan solo el intérprete + Gtk# para un Framework .NET ya instalado sobre el ordenador.

Código del programa que usa Gtk#

Leer el resto de la entrada…

17Mar

Publicada la versión 1.0 de MonoDevelop

El equipo de desarrollo de MonoDevelop ha liberado la versión 1.0 de este IDE para Mono, un implementación libre de .NET para plataformas Linux y MacOSX. Sin duda una buena noticia para los usuarios de esta plataforma, y en general para la comunidad de software libre.

AnuncioVer las características de este IDE

17Dic

[código] Ejemplo básico de métodos en C Sharp

Demostración de un metodo definido por el usuario para elevar al cuadrado un número

Lo que es interesante aquí, es ver como la aplicación corre de igual forma tanto en Windows como en Gnu/Linux:

corriendo en windows corriendo en linux

Código fuente:
Leer el resto de la entrada…

Los ejercicios utilizados en este post están basados en ejemplos del libro C# How to Program de Deitel. Se pone a disposición la descargar del programa original, desarrollado para trabajar sobre Visual Studio de Microsoft en plataformas Windows, y se encuentra en inglés. La versión simplificada está basada en la original, pero sin código basura insertado por Visual Studio, se encuentra en español y ha sido probada sobre Gnu/Linux usando Mono.
© 2007 - 2008 Dezinerfolio. Todos los derechos reservados.
Powered by Wordpress. Entradas RSS