Actualmente me encuentro aprendiendo a progamar en C# para Mono con la ayuda de Federico Mena (lider desarrollador de proyectos importantes como GNOME, Ximian, entre otros) un buen amigo del cual soy pupilo y que me ha brindado su ayuda desinteresadamente para que yo pueda aprender realmente lo que es programar, por lo cual le estoy muy agradecido, además por tenerme tanta pasiencia en mi proceso de aprendisaje.
Quiero compartir aquí mi primer source escrito en C-Sharp y del cual he aprendido mucho, lo cual es el objetivo. Este codigo me llevo varios dias, ya que la POO (Programación Orientada a Objetos) no era precisamente mi fuerte y el teminarlo fue un gran logro par mi, con esto he comprendo lo escencial que es la POO si uno quiere hacer aplicaciones de verdad. El codigo es el siguiente:
using System; using System.IO; public class LectorPorPalabras { string linea_actual; StreamReader stream; public LectorPorPalabras (string nombre_archivo) { stream = File.OpenText (nombre_archivo); linea_actual = null; } public string PalabraSiguiente () { int p, q; int longitud; string temp; while (true) { if (linea_actual == null) { linea_actual = stream.ReadLine(); if (linea_actual == null) return null; } p = 0; longitud = linea_actual.Length; while (p < longitud && !char.IsLetter (linea_actual[p])) p++; q = p; while (q < longitud && char.IsLetter (linea_actual[q])) q++; if (q > p) break; linea_actual = null; } temp = linea_actual.Substring (p, q - p); linea_actual = linea_actual.Remove (0, q); return temp; } } public class Diccionario { struct Palabra{ public string cadena; public int cont; } Palabra[] palabras; int num_palabras; public Diccionario () { num_palabras = 0; } public void PonPalabra (string pal) { int i; for (i = 0; i < num_palabras; i++) if (pal == palabras[i].cadena) { palabras[i].cont++; return; } Palabra[] temp = new Palabra[num_palabras + 1]; for (i = 0; i < num_palabras; i++) { temp[i] = palabras[i]; } temp[num_palabras].cadena = pal; temp[num_palabras].cont = 1; num_palabras++; palabras = temp; } public void Pinta () { int i; for (i = 0; i < num_palabras; i++) Console.WriteLine ("P: {0} N: {1}", palabras[i].cadena, palabras[i].cont); } } public class Programa { public static void Main (string [] args) { LectorPorPalabras lector; Diccionario dicc; string palabra; if (args.Length != 1) { Console.WriteLine ("Uso: diccionario"); return; } lector = new LectorPorPalabras (args[0]); dicc = new Diccionario (); palabra = lector.PalabraSiguiente (); while (palabra != null) { dicc.PonPalabra (palabra); palabra = lector.PalabraSiguiente (); } dicc.Pinta (); } }
Este programa es un diccionario de datos, lo que hace es buscar palabra por palabra, almacenarlas en un arreglo de structuras,ver cuantas veces se repite cada una dentro de un texto, ordenarlas alfabeticamente e imprimir el resultado en pantalla o en a un archivo. El objetivo de esto fue: comprender algunas tecnicas de busqueda y ordenación básicas. Posteriormente este algoritmo fue optimizado utilizando algunas técnicas más complejas (busquedas binarias, y ordenamiento por inserción), si desea compilar y probar este pequeño programa debe hacer lo siguiente:
$mcs diccionario.cs -o diccionario.exe Compilation succeeded $mono diccionario.exe archivo.txt
Publicar un comentario