Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un...

50
Ejemplos de C# con Mono © 2007 Martin Marquez: [email protected] http://www.humansharp.com ; version 0.2

Transcript of Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un...

Page 1: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

Ejemplos de C# con Mono

© 2007 Martin Marquez: [email protected] http://www.humansharp.com; version 0.2

Page 2: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

2

Copyright © 2005 Martin Marquez

Se otorga el permiso de copiar, distribuir o modificar este documento en los términos de la licencia GNU Free Documentation License , Versión 1.2 o cualquier versión posterior

publicada por la Free Software Foundation. Una copia de esta licencia esta incluida en este material en la sección titulada “GNU Free Documentation License”

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License (http://www.gnu.org/licenses/fdl.txt) , Version 1.2 or any

later version published by the Free Software Foundation. A copy of this license is included in this material in the section titled “GNU Free Documentation License”.

Page 3: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

3

Contenido

Introducción 4 Sección I Instalación del software Instalación bajo Microsoft Windows 5

Configuración del entorno en Microsoft Windows 13

Instalación bajo Linux 17

Configuración del entorno bajo Linux 22

Sección II Algoritmos Enumeraciones 24

Recursividad 26

Tablas de verdad con operadores lógicos 27

Arreglos y Matrices 28

Pilas 31

Árboles Binarios 33

Trabajo con caracteres 36

Sección III Temas prácticos Threads (hilos) 39

Lectura y escritura de archivos 40

Utilizando el conector .NET de MySQL 42

Usando XML 46

Usando GTK# 47

Referencias 50

Page 4: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

4

Introducción Mono es la versión open source de la plataforma .NET de Microsoft, teniendo como

herramienta principal el compilador de C# , el soporte para páginas ASP.NET bajo Linux y

una serie de herramientas para desarrollar distintos tipos de programas de cómputo tal como

aplicaciones gráficas de escritorio, aplicaciones de consola y Formularios Web.

Este manual esta escrito para las personas que requieran aprender a programar, o aquellas

personas que ya dominando un lenguaje de programación y deseen utilizar sus

conocimientos con las herramientas de Mono y el lenguaje de programación C#.

Esperando que este material sea una guía rápida de introducción y aprendizaje al lenguaje y

a las herramientas de .NET y mono, a partir de definiciones y ejemplos.

Si tiene algún comentario respecto a este material, por favor escriba a:

[email protected]

Page 5: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

5

1.0 Instalación del software 1.1 Instalación bajo Microsoft Windows

Vaya a la página del software mono http://www.go-mono.com y descargue el instalador para

Microsoft Windows.

Página de descargas del software de instalación

Page 6: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

6

Cree una carpeta en su sistema de archivos llamado por ejemplo [instalador_mono] y

descargue ahí el ejecutable de instalación.

Teniendo el ejecutable de instalación en el disco duro, haga doble clic o bien seleccione y

pulse el botón [ enter ] para ejecutar el programa.

Al ejecutarse se vera la pantalla de bienvenida de Mono .

Page 7: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

7

Al pulsar el botón [ Next ] (siguiente) se ira a la pantalla acerca del la licencia del software,

es recomendable darle una lectura a la licencia para estar enterados de cual son los

derechos y limitantes del software.

Una vez que estemos de acuerdo con la licencia del programa, seleccionamos la opción [ I

accept the agreement ] (yo acepto el contrato), pulsamos el botón [ Next ] (siguiente) para

continuar con la siguiente pantalla.

Page 8: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

8

Al pulsar el botón [ Next ] (siguiente) se vera la pantalla, sobre las notas de Mono

La siguiente pantalla nos muestra la ruta de instalación predeterminada, si se necesita

instalarse en otro lugar podemos cambiar la ruta en el cuadro de texto o bien pulsar el botón

[browse] para poder seleccionar la ruta de instalación, seleccionada la ruta pulsamos el

botón [ Next ] (siguiente) para pasar a la siguiente pantalla.

Page 9: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

9

Las siguientes pantallas muestran los tipos de instalación, como opción predeterminada [Full

installation] (opción completa) nos instalará todo el software,

[compact installation] nos instalará el soporte mínimo para el lenguaje, opciones como las

bibliotecas gráficas, la documentación y los ejemplos no serán instalados.

Page 10: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

10

[Custom installation] nos permite agregar o quitar componentes, excepto los archivos de la

instalación mínima.

La siguiente pantalla pregunta si necesitamos un acceso directo en el menú de programas.

Page 11: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

11

La siguiente pantalla pregunta el puerto del servidor XSP, XSP es un servidor web ligero que

nos permite probar las páginas ASP.NET, antes de subirlas a un web de producción como

Apache o IIS. (Recomiendo usar el puerto predeterminado)

Listo para instalar, para cambiar una opción pulsamos el botón [ Back ] (regresar).

Page 12: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

12

Copia de los archivos en el disco duro.

Pantalla final de la instalación.

Page 13: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

13

1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para

poder usar el compilador, el intérprete y las herramientas.

Si necesitamos que las herramientas y el entorno de programación queden configurados de

manera permanente en nuestro sistema, debemos seguir los pasos siguientes.

1-. Ir al icono de mi PC, hacer clic con el botón secundario del ratón y el submenú elegir la

opción de [propiedades].

Page 14: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

14

2-. Vaya a la pestaña [ avanzado ] y presione el botón [ variables de entorno ]

3-. En la ventana [variables de entorno] , en la parte superior seleccione la variable [path] y

presione el botón [editar] .

Page 15: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

15

4-. Se abrirá la ventana donde podremos modificar la variable [path] en nuestro entorno.

5-. Buscamos la carpeta de instalación del software, y abrimos la carpeta [bin] donde se

encuentran las herramientas de programación del software.

6-. Una vez teniendo la ruta completa de la carpeta de instalación del software mas la

carpeta [bin] , editamos el valor de la variable [path] colocando ; (punto y coma) al final del

valor y agregamos la ruta de la carpeta [bin] de nuestro software.

Page 16: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

16

7-. Cerramos todas las ventanas abiertas presionando el botón [Aceptar] , abrimos una

ventana de MS-DOS y tecleamos el comando mono –help .

Si el comando fue ejecutado correctamente se vera la siguiente pantalla.

Ya tenemos nuestro entorno configurado y listo para trabajar con Mono .

Page 17: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

17

1.3 Instalación bajo Linux Vaya al sitio de mono http://www.go-mono.com y descargue el instalador en su directorio

$home .

Abra la carpeta $home , ejecute el archivo seleccionándolo y haga doble clic.

O bien, abra una Terminal y ejecute el instalador con el siguiente comando.

Page 18: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

18

Al ejecutar el instalador vera la pantalla de bienvenida del software.

Pulse el botón [Adelante] para ir a la pantalla, que pregunta acerca de la licencia.

Page 19: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

19

Pulse el botón [Adelante] para avanzar en la instalación, la siguiente pantalla preguntará

acerca de la ruta de ubicación del software, se recomienda aceptar la ruta predeterminada en

el directorio $home para que el programa de instalación pueda instalar un acceso directo en

el escritorio.

En la siguiente pantalla se pregunta si el programa agrega modifica el archivo de

configuración del entorno, esto depende del nivel de conocimiento del usuario, recomiendo

seleccionar [no] y hacer las modificaciones manualmente.

Page 20: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

20

Ahora el software esta listo para instalarse, si desea algún cambio pulse el botón [Atrás] .

Copia de los archivos de instalación al disco duro.

Page 21: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

21

Si el software se ha instalado correctamente, vera la siguiente pantalla.

Se vera el acceso directo a las herramientas de Mono en el escritorio.

Page 22: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

22

1.4 Configuración del entorno bajo Linux Ejecute el acceso director de Mono en el escritorio.

Edite el archivo de configuración, en SuSe Linux es el archivo .profile que se encuentra en

el directorio $home (el archivo de configuración puede variar según su distribución) agregue

al final del archivo la línea siguiente:

PATH=$PATH:[ruta completa de la carpeta [bin] de la carpeta de instalación de Mono]

Page 23: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

23

Guardamos el archivo de configuración, salimos de nuestra sesión actual y si los cambios

fueron hechos correctamente nos mostrara la siguiente pantalla, tecleando: mono --help

Page 24: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

24

2.0 Algoritmos 2.1 Enumeraciones con C# Un tipo de datos de enumeración enum es usado para definir un conjunto de elementos

constantes, este tipo de datos se usan para agrupar constantes y en programas de opción

múltiple.

Las enumeraciones pueden ser de cualquier tipo de datos (integer, short, long) excepto el

tipo de datos char.

Programa 2.1 Programa que demuestra el tipo de datos enum (Enumeración) para el conjunto de días de

la semana.

using System ; class Enumeracion { enum DiasSemana { Lunes = 1, Martes = 2, Miercoles = 3, Jueves = 4, Viernes = 5, Sabado = 6, Domingo = 7 } static int Main( string [] args ) { Console . WriteLine( ImprimeDia( DiasSemana . Martes )); Console . WriteLine( ImprimeDia( DiasSemana . Sabado )); return 0; } static string ImprimeDia( DiasSemana ds ) { string s = " " ; switch( ds ) { case DiasSemana . Lunes: s = "Tengo que levantarme temprano" ; break ; case DiasSemana . Martes: s = "Aun no me recupero" ; break ; case DiasSemana . Miercoles: s = "Faltan 2 dias" ; break ; case DiasSemana . Jueves: s = "Falta un dia solamente" ; break ; case DiasSemana . Viernes: s = "Por fin es viernes" ;

Page 25: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

25

break ; case DiasSemana . Sabado: s = "Es el mejor dia de la semana" ; break ; case DiasSemana . Domingo: s = "Ya mañana es Lunes de nuevo" ; break ; } return s; } }

Teclee el archivo en un editor de texto ASCII, y guárdelo con el nombre enumeracion.cs Abra una ventana de MS-DOS o de Terminal y compílelo con el comando:

$ mcs enumeracion.cs

Si la compilación tuvo errores corríjalos y ejecute de nuevo la compilación, si tuvo éxito

entonces se genero el archivo: enumeración.exe.

Ejecute ahora programa ejecutable con el intérprete: $ mono enumeración.exe

2.2 Recursividad La recursión es una técnica de programación implementada mediante un método que ya sea

por iteración o por decisión resuelve un problema hasta llegar a un caso base , un método

recursivo es un método que se llama así mismo ya sea directamente o indirectamente a

través de otro método. Los enfoques recursivos para resolver problemas tienen varios

elementos en común. El método en si sabe como resolver el o los casos más sencillos los

llamados casos base.

Programa 2.2 Los números de fibonacci y factorial para mostrar las funciones recursivas. using System ; using System . IO ;

public class Recursividad { static int Main() { int num = 0; string snum; do {

Page 26: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

26

Console . Write( "Teclee un numero [ MAX 33 ]: " ); snum = Console . ReadLine(); } while(! esNumero( snum) || Int32 . Parse( snum) > 33); num = Int32 . Parse( snum); Console . WriteLine( "El factorial de {0} es {1}" , num, factorial( num));

Console . WriteLine( "El fibonacci de {0} es {1}" , num, fibonacci( num)); return 0; } static bool esNumero( string s) { if( s. IndexOf( "1" ) != - 1 || s . IndexOf( "2" ) != - 1 || s . IndexOf( "3" ) != - 1 || s . IndexOf( "4" ) != - 1 || s . IndexOf( "5" ) != - 1 || s . IndexOf( "6" ) != - 1 || s . IndexOf( "7" ) != - 1 || s . IndexOf( "8" ) != - 1 || s . IndexOf( "9" ) != - 1 || s . IndexOf( "0" ) != - 1) return true; else return false; } static long factorial( int n) { if( n <= 1) return 1; else return n * factorial( n - 1); } static long fibonacci( int n) { if( n == 0 || n == 1) return n; else return fibonacci( n - 1) + fibonacci( n - 2); } }

Compílelo usando el comando: $ mcs Recursividad.cs

Ejecutelo: $ mono Recursividad.exe

Page 27: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

27

2.3 Tablas de verdad con operadores lógicos Una tabla de verdad sirve para mostrar los resultados posibles de una operación lógica. Programa 2.3 Tablas de verdad con los operadores lógicos de C# using System ;

public class TablaT { static int Main( string [] args ) { Console . WriteLine( "logico (&&)" ); Console . WriteLine( "F && F: " + ( false && false)); Console . WriteLine( "F && T: " + ( false && true)); Console . WriteLine( "T && F: " + ( true && false)); Console . WriteLine( "T && T: " + ( true && true)); Console . WriteLine( "" ); Console . WriteLine( "OR logico (||)" ); Console . WriteLine( "F && F: " + ( false || false)); Console . WriteLine( "F && T: " + ( false || true)); Console . WriteLine( "T && F: " + ( true || false)); Console . WriteLine( "T && T: " + ( true || true)); Console . WriteLine( "" ); Console . WriteLine( "AND logico booleano (&)" ); Console . WriteLine( "F & F: " + ( 0 & 0)); Console . WriteLine( "F & T: " + ( 0 & 1)); Console . WriteLine( "T & F: " + ( 1 & 0)); Console . WriteLine( "T & T: " + ( 1 & 1)); Console . WriteLine( "" ); Console . WriteLine( "OR inclusivo logico booleano (|)" ); Console . WriteLine( "F | F: " + ( 0 | 0)); Console . WriteLine( "F | T: " + ( 0 | 1)); Console . WriteLine( "T | F: " + ( 1 | 0)); Console . WriteLine( "T | T: " + ( 1 | 1)); Console . WriteLine( "" ); Console . WriteLine( "OR exclusivo logico booleano (^)" ); Console . WriteLine( "F ^ F: " + ( 0 ^ 0)); Console . WriteLine( "F ^ T: " + ( 0 ^ 1)); Console . WriteLine( "T ^ F: " + ( 1 ^ 0)); Console . WriteLine( "T ^ T: " + ( 1 ^ 1)); Console . WriteLine( "" ); Console . WriteLine( "NOT logico booleano (!)" ); Console . WriteLine( "!F: " + (! false)); Console . WriteLine( "!T: " + (! true)); Console . WriteLine( "" ); return 0; } }

Page 28: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

28

Compilelo: $ mcs TablaT.cs

Ejecútelo: $ mono TablaT.exe

2.4 Arreglos y Matrices Un arreglo es un grupo de posiciones de memoria contiguas, todas las cuales tienen el

mismo nombre y el mismo tipo. Para referirnos a una posición o elemento en particular del

arreglo, especificamos el nombre del arreglo y el número de posición de ese elemento en el

arreglo.

Un arreglo multidimensional es un arreglo de 2 o más dimensiones, .la primera dimensión

son las filas y la segunda dimensión son las columnas.

Programa 2.4 Un programa que suma 2 matrices. using System ; public class Matrices { static int Main() { string sfilas = " " , scolumnas = " " , valor = " " ; int filas = 0, columnas = 0, numero = 0, temp = 0, i = 0, j = 0; Console . WriteLine( "" ); Console . WriteLine( "|------------------------------------------------- --------------------------|" ); Console . WriteLine( "| La suma dos matrices se establece solo si las ma trices a sumar son de la |" ); Console . WriteLine( "| misma dimension, teclee las dimensiones de la ma triz 1 y el valor de los |" ); Console . WriteLine( "| elementos, para la matrix 2 solo se le pedira el valor de los elementos. |" ); Console . WriteLine( "| |" ); Console . WriteLine( "| Suma = matrix1[i][j] + matrix2[i][j] |" ); Console . WriteLine( "| |" ); Console . WriteLine( "| Donde matrix1[i] = matrix2[i] y matrix1[j] = matrix2[j] |" ); Console . WriteLine( "| |" );

Page 29: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

29

Console . WriteLine( "|------------------------------------------------- --------------------------|" ); Console . WriteLine( "Creacion de la matrix 1" ); do { Console . Write( "Teclee numero de filas: [MAX 16]: " ); sfilas = Console . ReadLine(); } while(! esNumero( sfilas ) || Int32 . Parse( sfilas ) > 16); //aqui obtengo las filas de la primera matrix filas = Int32 . Parse( sfilas ); Console . WriteLine( "Filas [" + filas + "]" ); do { Console . Write( "Teclee numero de columnas: [MAX 16]: " ); scolumnas = Console . ReadLine(); } while(! esNumero( scolumnas ) || Int32 . Parse( scolumnas ) > 16); //aqui obtengo las columnas de la primera matriz columnas = Int32 . Parse( scolumnas ); Console . WriteLine( "Columnas [" + columnas + "]" ); Console . WriteLine( "Matrix1 = [" + filas + "][" + columnas + "]" ); //aqui creo un arreglo bidemensional para la primer a matriz int[,] matrix = new int[ filas , columnas ]; //en el siguiente ciclo recorro la matrix bidemensi onal //primero recorro las filas for ( i = 0; i < filas ; i ++) { //aqui recorro las columnas for ( j = 0; j < columnas ; j ++) { do { Console . Write( "Teclee el valor del elemento: [" + i +"]" + "[" + j + "] = " ); valor = Console . ReadLine(); } while(! esNumero( valor )); //aqui obtengo el valor //el metodo console.Readline regresa un string por eso hago un casting //usando el metodo Int32.parse(string) numero = Int32 . Parse( valor ); temp = numero ; //aqui asigno el valor al arreglo bidimensional matrix [ i , j ] = temp ; } // fin del ciclo j } // fin del ciclo i Console . WriteLine( "*********Matrix 1 generada.**********" ); Console . WriteLine( "de la matrix 2" ); Console . WriteLine( "Matrix2 = [" + filas + "][" + columnas + "]" ); //aqui creo la segunda matrix bidemensional int[,] matrix2 = new int[ filas , columnas ]; //en el siguiente ciclo recorro la matrix bidemensi onal //primero recorro las filas for ( i = 0; i < filas ; i ++) { //aqui recorro las columnas

Page 30: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

30

for ( j = 0; j < columnas ; j ++) { do { Console . Write( "Teclee el valor del elemento: [" + i +"]" + "[" + j + "] = " ); valor = Console . ReadLine(); } while(! esNumero( valor )); //aqui obtengo el valor //el metodo console.Readline regresa un string por eso hago un casting //usando el metodo Int32.parse(string) numero = Int32 . Parse( valor ); temp = numero ; matrix2 [ i , j ] = temp ; } // fin del ciclo j } // fin del ciclo i Console . WriteLine( "*********Matrix 2 generada.**********" ); Console . WriteLine( "matrix resultado es: " ); //aqui recorro la matrix bideçimensional resultado int[,] matrixresultado = new int[ filas , columnas ]; for ( i = 0; i < filas ; i ++) { for ( j = 0; j < columnas ; j ++) { matrixresultado [ i , j ] = matrix [ i , j ] + matrix2 [ i , j ]; } } //@ aqui se imprime el resultado for ( i = 0; i < filas ; i ++) { for ( j = 0; j < columnas ; j ++) { Console . Write( "Matrix Resultado = [" + i + "," + j + "]" + " , valor = " + matrixresultado [ i , j ] + "" ); } } return 0; } //usando este metodo compruebo que solo sea //una cadena con números, sin letras ni símbolos static bool esNumero( string s) { if( s. IndexOf( "1" ) != - 1 || s . IndexOf( "2" ) != - 1 || s . IndexOf( "3" ) != - 1 || s . IndexOf( "4" ) != - 1 || s . IndexOf( "5" ) != - 1 || s . IndexOf( "6" ) != - 1 || s . IndexOf( "7" ) != - 1 || s . IndexOf( "8" ) != - 1 || s . IndexOf( "9" ) != - 1 || s . IndexOf( "0" ) != - 1)

Page 31: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

31

return true; else return false; } } //fin de la clase

Compilelo: $ mcs Matrices.cs

Ejecutelo: $mono Matrices.exe

2.5 Pilas Una pila es una versión restringida de una lista enlazada: los nodos nuevos solo pueden

agregarse a la pila y retirarse de la pila en el tope, por eso la pila es LIFO (last-in,first-out) es

decir el último en entrar es el primero en salir.

Las pilas apoyan las llamadas de métodos recursivas igual que lo hacen con las llamadas de

métodos convencionales no recursivas.

Las pilas contiene el espacio creado para variables automáticas en cada invocación de un

método. Cuando el método regresa a su invocador, el espacio para las variables automáticas

de ese método se saca de la pila, y el programa deja de conocer dichas variables.

Programa 2.5

Programa de estructura de datos pila

using System ; using System . Collections ; public class Pila { static int Main( string [] args ) { Stack pila = new Stack(); Boolean b = Boolean . Parse( "true" ); Char c = Char . Parse( "c" ); String s = "martin" ; Int32 i = Int32 . Parse( "7890" ); int a = 0; /*aqui ponemos los valores en la pila*/ pila . Push( b); pila . Push( c); pila . Push( s);

Page 32: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

32

pila . Push( i ); /*aqui vemos las propiedades de la pila*/ Console . WriteLine( "La pila es LIFO(first in,last out)" ); Console . WriteLine( "Num elementos: {0}" , pila . Count ); /*imprimimos los elementos*/ IEnumerator enums = pila . GetEnumerator(); a = 0; while( enums. MoveNext()) { Console . Write( "|{0}|->{1}" , a++, enums. Current . ToString()); } Console . WriteLine( "Sacar elemento: pop()" ); pila . Pop(); /*imprimimos los elementos*/ enums = pila . GetEnumerator(); a = 0; while( enums. MoveNext()) { Console . Write( "|{0}|->{1}" , a++, enums. Current . ToString()); } Console . WriteLine( "Sacar elemento: pop()" ); pila . Pop(); /*imprimimos los elementos*/ enums = pila . GetEnumerator(); a = 0; while( enums. MoveNext()) { Console . Write( "|{0}|->{1}" , a++, enums. Current . ToString()); } Console . WriteLine( "Num elementos: {0}" , pila . Count ); return 0; } }

Compílelo:

$ mcs Pila.cs

Ejecútelo:

$ mono Pila.exe

Page 33: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

33

2.6 Árboles Binarios

Un árbol es una estructura de datos no lineal, bidimensional, con propiedades especiales.

Los nodos de un árbol contienen 2 ó más enlaces. En los árboles binarios todos los nodos

contienen 2 enlaces (de los cuales ninguno, uno o ambos pueden ser null ). El nodo raíz es el

primer nodo de un árbol. Cada enlace del nodo raíz hace referencia a un hijo. El hijo

izquierdo es el primer nodo del subárbol izquierdo, y el hijo derecho es el primer nodo del

subárbol derecho. Los hijos de un nodo se denominan hermanos. Un nodo sin hijos es un

nodo hoja. La representación gráfica de los árboles es de la raíz hacia abajo al revés de los

árboles de la naturaleza.

Programa 2.6

Este programa se compone de 3 clases la primera clase es el nodo del árbol.

using System ; public class NodoArbol { public NodoArbol izquierda , derecha ; public int data ; public NodoArbol( int d){ data = d; izquierda = derecha = null; //este nodo no tiene hijos } public void insertar( int d){ if( d < data ){ if( izquierda == null) izquierda = new NodoArbol( d); else izquierda . insertar( d); } else if( d > data ){ if( derecha == null) derecha = new NodoArbol( d); else derecha . insertar( d); } } }

Lo compilamos como biblioteca

$ mcs /t:library NodoArbol.cs

Page 34: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

34

La segunda es la clase Arbol que implementa la clase NodoArbol

using System ; public class Arbol { private NodoArbol raiz ; public Arbol(){ raiz = null; } public void insertarNodo( int d){ if( raiz == null) raiz = new NodoArbol( d); else raiz . insertar( d); } public void preOrdenTrasversal(){ preOrden( raiz ); } private void preOrden( NodoArbol nodo ){ if( nodo == null) return ; Console . Write( nodo . data + " " ); preOrden( nodo . izquierda ); preOrden( nodo . derecha ); } public void enOrdenTransversal(){ enOrden( raiz ); } private void enOrden( NodoArbol nodo ){ if( nodo == null) return ; enOrden( nodo . izquierda ); Console . Write( nodo . data + " " ); enOrden( nodo . derecha ); } public void postOrdenTransversal(){ postOrden( raiz ); } private void postOrden( NodoArbol nodo ){ if( nodo == null) return ; postOrden( nodo . izquierda ); postOrden( nodo . derecha ); Console . Write( nodo . data + " " ); } }

Igualmente lo compilamos como una biblioteca:

$ mcs –r:NodoArbol.dll /t:library Arbol.cs

Page 35: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

35

Finalmente el programa de un árbol binario que realiza recorridos en: pre-orden, orden y en

post-orden.

using System ;

public class BuscarEnArbol { public static int Main( string [] args ) { Arbol arbol = new Arbol(); string valor ; int longitud ; string slongitud ; int numero ; Console . WriteLine( "Tecle el número de valores que desea introducir en el arbol: " ); do { Console . Write( "Teclee numero de filas: [MAX 33]: " ); slongitud = Console . ReadLine(); } while(! esNumero( slongitud ) || Int32 . Parse( slongitud ) > 33); longitud = Int32 . Parse( slongitud ); Console . WriteLine( "Total de valores [" + longitud + "]" ); int[] matrix = new int[ longitud ]; //aqui ponemos los valores en el arbol Console . WriteLine( "Teclee los valores: " ); for( int i = 0; i < matrix . Length ; i ++) { do { Console . Write( "Teclee el valor del elemento: [" + i +"]: " ); valor = Console . ReadLine(); } while(! esNumero( valor )); numero = Int32 . Parse( valor ); matrix [ i ] = numero ; } //aqui se insertan los valores de la matrix en el a rbol for( int i = 0; i < matrix . Length ; i ++) { arbol . insertarNodo( matrix [ i ]); } Console . WriteLine( "Elija su tipo de recorrido" ); Console . WriteLine( " a) preorden" ); Console . WriteLine( " b) enorden" ); Console . WriteLine( " c) postorden" ); Console . Write( "Su opcion:" ); char opcion = ( char) Console . Read(); switch( opcion ) { case 'a' : Console . WriteLine( "" ); arbol . preOrdenTrasversal(); break ; case 'b' : Console . WriteLine( "" ); arbol . enOrdenTransversal(); break ; case 'c' :

Page 36: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

36

Console . WriteLine( "" ); arbol . postOrdenTransversal(); break ; default: Console . WriteLine( "" ); Console . WriteLine( "No existe esa opción" ); break ; } return 0; } //usando este metodo compruebo que solo sea //una cadena con números, sin letras ni simbolos static bool esNumero( string s) { if( s. IndexOf( "1" ) != - 1 || s . IndexOf( "2" ) != - 1 || s . IndexOf( "3" ) != - 1 || s . IndexOf( "4" ) != - 1 || s . IndexOf( "5" ) != - 1 || s . IndexOf( "6" ) != - 1 || s . IndexOf( "7" ) != - 1 || s . IndexOf( "8" ) != - 1 || s . IndexOf( "9" ) != - 1 || s . IndexOf( "0" ) != - 1) return true; else return false; } }

Lo compilamos junto con las 2 clases anteriores:

$ mcs –r:NodoArbol.dll ,Arbol.dll BuscarEnArbol.cs

2.7 Trabajo con caracteres

Una de las características fundamentales de cualquier lenguaje de programación es el

trabajo con caracteres, todo programa fuente o archivo de texto se compone de una

secuencia de caracteres que son interpretados por la computadora para poder trabajar con

ellos en cadenas o arreglos de caracteres.

Programa 2.7

El programa que muestra los métodos más usuales para convertir cadenas en arreglos de

caracteres y viceversa.

Page 37: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

37

using System ; using System . IO ; using System . Text ; public class CFrecuencia { public static int Main( string [] args ) { //esta clase me proporciona un vectos de caracteres o de cadenas StringBuilder buf = new StringBuilder(); //aqui defino mi universo de solo caracteres char[] alfabeto = "ABCDEFGHIJKLMNOPQRSTUVWXYZ". ToCharArray(); try { if( args . Length == 1) { try { string s = "" ; //aqui uso la clase StreamReader para leer un archi vo StreamReader sr = new StreamReader( args [ 0]); while(( s = sr . ReadLine()) != null) { buf . Append( s. ToUpper()); } //aqui uso el metodo ToCharArray() para convertir u na cadena a un // arreglo de caracteres char[] miarreglo = buf . ToString(). ToCharArray(); for( int j = 0; j < alfabeto . Length ; j ++) { int contador = 0; for( int i = 0; i < miarreglo . Length ; i ++) { if( alfabeto [ j ] == miarreglo [ i ]) contador ++; } if( contador > 0) Console . WriteLine( alfabeto [ j ] + " : " + contador ); } } //aqui obtengo el error si no existe el archivo catch( FileNotFoundException e ) { Console . WriteLine( args [ 0] + ": archivo no encontrado " + e. Message ); } } else { Console . WriteLine( "Usar: mono CFrecuencia.exe [archivo de texto]" ); } } //aqui obtengo el error si no hay un argumento para el programa catch( IndexOutOfRangeException e ) { Console . WriteLine( "Usar: mono CFrecuencia.exe [archivo de texto]" + e. Message );

Page 38: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

38

} return 0; } } //fin de la clase

Compílelo:

$ mcs CFrecuencia.cs

Ejecútelo:

$ mono CFrecuencia.exe [archivo de texto]

Page 39: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

39

3.0 Temas prácticos

3.1 Threads (hilos)

Todos los sistemas operativos modernos permiten hacen uso de la concurrencia para hacer

varias operaciones de manera simultánea o en paralelo, una manera actual de realizar la

concurrencia es con el concepto de: Threads (hilos)

Un thread es un proceso ligero o un subproceso que tiene un simple flujo de control

secuencial, el programa principal siempre tiene un simple flujo de control.

Los métodos comúnmente utilizados por los hilos son:

Start(): Inicia la ejecución de un hilo.

Interrupt(): Interrumpe la ejecución de un hilo

Sleep(): se invoca con un argumento que invoca cuanto tiempo el hilo que se esta

ejecutando debe de dormir (en segundos).

Resume(): reanuda la ejecución de un hilo suspendido

Programa 3.1

using System ; using System . Threading ; public class HiloSimple { static int Main() { Console . WriteLine( "Preciose Ctrl+C para detener" ); Thread h1 = new Thread( new ThreadStart( kde )); Thread h2 = new Thread( new ThreadStart( gnome)); h1. Start(); h2. Start(); return 0; } static void kde() { for( int i = 0; i <= 100 ; i ++) { Console . WriteLine( "KDE esta muy bien programado -> [{0}]" , Math . Log10( i )); Thread . Sleep( 700 ); } }

Page 40: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

40

static void gnome() { for( int i = 0; i <= 200 ; i ++) { Console . WriteLine( "Gnome es esteticamente funcional->[{0}]" , Math . Pow( i , 2)); Thread . Sleep( 700 ); } } }

Compílelo

$ mcs HiloSimple.cs

Ejecútelo:

$ mono HiloSimple.exe

3.2 Lectura y escritura de archivos

La lectura y escritura de archivos se realiza por medio de streams (flujos), un stream es una

abstracción en la cual se encapsula las operaciones de entrada y salida, siendo una manera

en la cual .NET es transportable a otros sistemas operativos e independientes del medio

físico donde se almacenen los datos.

Cuando se la entrada de datos es una conexión de red eso se convierte en un flujo de datos,

la lectura de un archivo en el disco duro es también un flujo de datos, la entrada del teclado

también se encapsula en un flujo de datos y así cada operación de entrada y salida.

Los streams tienen las siguientes operaciones:

• Stream (read) leen datos y los convierten en una estructura de bytes.

• Streams (write) escriben convirtiendo una estructura de bytes en datos.

• Streams (Seek) pueden hacer búsquedas y modificaciones en la estructura de datos.

Page 41: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

41

Programa 3.2

Convertir un archivo de texto a un archivo HTML

using System ; using System . IO ; using System . Text ; using System . Diagnostics ; public class Txt2html { static int Main( string [] args ) { StringBuilder buf = new StringBuilder(); StringBuilder buf2 = new StringBuilder(); try { if( args . Length > 0 && args . Length < 3) { if( args [ 0] != null && args [ 1] != null) { try { StreamReader reader = new StreamReader( args [ 0]); string s = "" ; while (( s = reader . ReadLine()) != null) { buf . Append( s); } reader . Close(); buf2 . Append( "<html>" ); buf2 . Append( "<head>" ); buf2 . Append( "<title>" + args [ 0] + "</title>" ); buf2 . Append( "<body>" ); buf2 . Append( "<table width=100%><tr><td>" ); buf2 . Append( "<p align=justify>" ); buf2 . Append( "<font face=arial,helvetica size=2>" ); char[] c = buf . ToString(). ToCharArray(); for( int i = 0; i < buf . ToString(). Length ; i ++) { if( c[ i ] == ' ' ) buf2 . Append( "<br>" ); else buf2 . Append( c[ i ]); } buf2 . Append( "</font></p>" ); buf2 . Append( "</td></tr></table>" ); buf2 . Append( "</body>" ); buf2 . Append( "</html>" ); StreamWriter sw = new StreamWriter( args [ 1] + ".html" ); sw. WriteLine( buf2 . ToString()); sw. Close(); Console . WriteLine( args [ 1] + " Archivo creado" );

Page 42: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

42

} catch( FileNotFoundException e ) { Console . WriteLine( "El archivo " + args [ 0] + " no existe " + e. Message ); } } else ayuda(); } else { ayuda(); } } catch( IndexOutOfRangeException e ) { ayuda(); Debug. WriteLine( e. Message ); } return 0; } static void ayuda() { Console . WriteLine( "Usar: mono txt2html.exe [ archivo de texto ][ arch ivo html ]" ); } }

Compílelo:

$mcs txt2html.cs

Ejecútelo:

$ mono txt2html [archivo de texto] [archivo de salida]

3.3 Utilizando el conector .NET de MySQL

Una base de datos es un conjunto de programas que dan mantenimiento de manera

ordenada y consistente a la información, estos sistemas esconden los detalles de cómo se

almacenan y se administran los datos, aun así lo datos deben de poder extraerse

eficientemente, esto ha llevado a crear unas estructuras complejas para la representación de

los datos y a unos niveles de abstracción para simplificar al usuario la interacción con el

Page 43: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

43

sistema.

Nivel físico: El nivel más bajo de la abstracción describe como se almacenan realmente los

datos.

Nivel conceptual: describe que datos son realmente almacenados en la base de datos y la

relación que existen entre los datos.

Nivel de visión: El nivel más alto de la abstracción describe la parte más compleja, aquí se

usan las estructuras más sencillas en el nivel conceptual.

Descargar e instalar el software MySQL del sitio: http://www.mysql.com

Descargue el conector .NET de MySQL para poder conectarse con la base de datos de la

siguiente dirección: http://dev.mysql.com/downloads/connector/net/1.0.html.

La página de de descarga ofrece los archivos binarios para Windows, esto no es problema

para usuarios de Linux, ya que los binarios de .NET de Windows son soportados por Mono.

Page 44: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

44

La archivo que contiene las clases necesarias de conexión para trabajar con MySQL es el

archivo MySql.Data.dll el cual usaremos para compilar el programa siguiente:

Programa 3.3

using System ; using MySql . Data . MySqlClient ;

public class ClienteMySQL { public static int Main( string [] args ) { string ConStr = "Falta cadena de conexion" ; string sql = "Falta Enunciado SQL" ; if( args . Length > 0) { ConStr = String . Format( "server={0};user id={1}; password={2}; database={3}; pooling=false" , args [ 0], args [ 1], args [ 2], args [ 3]); sql = args [ 4]; SQLAnali( ConStr , sql ); } else Console . WriteLine( "insuficientes, usar: ClienteMySQL.exe [server] [user id] [password] [database] [consulta SQL]" ); return 0; }

Page 45: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

45

static void SQLAnali( string chainConn , string consultSQL ) { Console . WriteLine( chainConn ); MySqlConnection conn = new MySqlConnection( chainConn ); int columnas = 0; //if(consultSQL.StartsWith("SELECT") || consultSQL.StartsWith("select") || consultSQL.Start sWith("Select")) //{ try { conn . Open(); MySqlCommand cmd = new MySqlCommand( consultSQL , conn ); MySqlDataReader dr = cmd. ExecuteReader(); columnas = dr . FieldCount ; while ( dr . Read()) { for( int i = 0; i < columnas ; i ++) { Console . Write( dr [ i ]. ToString() + "" ); if(( i + 1) == columnas ) Console . Write( "" ); } } conn . Close(); } catch( MySqlException e ) { conn . Close(); Console . WriteLine( "No pude conectarme el error fue " + e. ToString()); } //} //else // Console.WriteLine("Solo puede utilizar la ins truccion SELECT"); } }

* Antes de compilar, asegúrese que [ MySql.Data.dll ] este en el directorio donde se

encuentra el programa o en el Global cache con el comando: gacutil -i MySql.Data.dl]

Compílelo:

$ mcs –r:MySql.Data ClienteMySQL.cs

Ejecútelo:

$ mono ClienteMySQL,exe

Page 46: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

46

3.4 Lectura de un XML

XML son las siglas de lenguaje de marcado extensible (Extensible Markup language) es un

archivo de formato de texto simple derivado del SGML (ISO 8879). Originalmente diseñado

para las publicaciones electrónicas a gran escala, XML se ha vuelto indispensable para un

intercambio de información a través de Internet.

XML es un lenguaje de descripción de documentos, XML a diferencia de HTML permite

definir sus propias etiquetas (tags), además de que XML es un lenguaje estructural, XML es

desde un principio un lenguaje orientado a la estructura de los datos y no al diseño y

presentación de estos.

<?xml version="1.0" encoding="ISO-8859-1"?> <Directorio> <contacto>

<apepaterno> Perez </apepaterno> <apematerno> Suarez </apematerno>

nombres> Edith </nombres> <telefonos> 77-686-87 </telefonos>

email> [email protected] </email> </contacto>

<contacto> <apepaterno> Perez </apepaterno> <apematerno> Suarez </apematerno> <nombres> Edith </nombres> <telefonos> 77-686-87 </telefonos>

<email> [email protected] </email> </contacto> </Directorio>

Programa 3.4

Lectura de un archivo XML

using System ; using System . Data ; public class LeerXML { public static int Main( string [] args ) { try { DataSet archivoXML = new DataSet(); archivoXML . ReadXml( args [ 0]); try

Page 47: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

47

{ foreach( DataRow t in archivoXML . Tables [ 0]. Rows) { Console . WriteLine( "" ); Console . WriteLine( t [ "apepaterno" ]); Console . WriteLine( t [ "apematerno" ]); Console . WriteLine( t [ "nombres" ]); Console . WriteLine( t [ "telefonos" ]); Console . WriteLine( t [ "email" ]); Console . WriteLine( "" ); } } catch( Exception e ) { Console . WriteLine( e. ToString()); } } catch( IndexOutOfRangeException e ) { Console . WriteLine( "Usar: mono LeerXML.exe [Archivo .xml] " + e. Message ); } return 0; } }

Compílelo: $ mcs –r System.Data

Ejecútelo: $ mono LeerXML

3.5 Usando GTK#

GTK# es la implementación completa de la plataforma GTK usando el lenguaje C#, es uno

de los más completos toolkit de diseño gráfico de aplicaciones, aunque en la plataforma .NET

de Microsoft la implementación natural es usar System.windows.forms , con mono es natural

usar GTK#, además de ser el más completo de los toolkits gráficos () que existen es de los

más transportables entre plataformas.

Programa 3.5

Un programa nslookup gráfico usando GTK#

Page 48: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

48

using Gtk ; using System ; using System . Net ; using System . Text ; public class NSLookupGTK { /* Aqui pongo los componentes para la interfaz graf ica*/ private static Window win = null; private static VBox vb = null; private static Entry txtentrada = null; private static Button baceptar = null; private static Entry txtresultados = null; static int Main( string [] args ) { Application . Init(); //aqui inicio la aplicación win = new Window( "Mono NSLookup" ); vb = new VBox( false, 0); txtentrada = new Entry(); baceptar = new Button( "Aceptar" ); txtresultados = new Entry(); //Aqui agrego los componentes vb . PackStart( txtentrada , false, false, 0); txtentrada . Show(); vb . PackStart( baceptar , false, false, 0); baceptar . Show(); vb . PackStart( txtresultados , false, false, 0); txtresultados . Show(); win . Add( vb ); vb . Show(); win . Resize( 300 , 200 ); win . Show(); //---------------------- //aqui registro los eventos win . DeleteEvent += delete_event ; baceptar . Clicked += new EventHandler( aceptar ); Application . Run(); return 0; } static void aceptar( object o, EventArgs args ) { if( txtentrada . Text . Length > 0) { txtresultados . Text = rIP( txtentrada . Text ); } } static void delete_event( object sender , DeleteEventArgs e ) { Application . Quit(); Console . WriteLine( "Aplicacion Cerrada" ); } static string rIP( string host ) { StringBuilder buf = new StringBuilder();

Page 49: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

49

try { IPHostEntry ip = Dns. GetHostByName( host ); IPAddress [] direccion = ip . AddressList ; for( int i = 0; i < direccion . Length ; i ++) { buf . Append( direccion [ i ]. ToString()); } return buf . ToString(); } catch( System . Net . Sockets . SocketException se ) { return "No se halla la direcion " + se . Message ; } } }

Compílelo:

$ mcs /t:winexe –pkg:gtk-sharp NSLookupGTK.cs

Como es una aplicación gráfica debe de compilarse con la opción /t:winexe esto para evitar

que aparezca la ventana de Terminal al momento de ejecutarse en un sistema gráfico.

Ejecútelo:

$ mono NSLookupGTK.exe

Page 50: Ejercicios de C# con Mono13 1.2 Configuración del entorno en Microsoft Windows Mono tiene un submenú hacia una ventana de MS-DOS con el entorno configurado para poder usar el compilador,

50

Referencias

Página del proyecto mono: http://www.go-mono.com

Titulo: Como programar en Java

Autores: Deitel & Deitel

Editorial: Prentice Hall

Titulo: C# in a Nutshell, Second Edition

Autores: Peter Drayton, Ben Albahari, Ted Neward

Editorial: O'Reilly

Titulo: Mono: A Developer's Notebook

Autores: Edd Dumbill, Niel M. Bornstein

Editorial: O'Reilly