class Ordenamiento
{
int[] _vec;
int interc, comp;
public Ordenamiento(int[] v)
{
interc = 0;
comp = 0;
_vec = new int[v.Length];
for (int i = 0; i < v.Length; i++)
{
_vec[i] = v[i];
}
}
public int Comp
{
get { return comp; }
}
public int Inter
{
get { return interc; }
}
public int[] BurbujaA()
{
comp = 0;
interc = 0;
int temp = 0;
bool listo = true;
for (int i = 1; i < _vec.Length; i++)
{
listo = true;
for (int j = 0; j < _vec.Length - i; j++)
{
comp++;
if (_vec[j] > _vec[j + 1])
{
interc++;
temp = _vec[j];
_vec[j] = _vec[j + 1];
_vec[j + 1] = temp;
listo = false;
}
}
if (listo)
return _vec;
}
return _vec;
}
public int[] BurbujaD()
{
comp = 0;
interc = 0;
int temp = 0;
bool listo = true;
for (int i = 1; i < _vec.Length; i++)
{
listo = true;
for (int j = 0; j < _vec.Length - i; j++)
{
comp++;
if (_vec[j] < _vec[j + 1])
{
interc++;
temp = _vec[j];
_vec[j] = _vec[j + 1];
_vec[j + 1] = temp;
listo = false;
}
}
if (listo)
return _vec;
}
return _vec;
}
}
viernes, 25 de noviembre de 2011
Orddenamiento Burbija (Bubblesort)
El ordenamiento de burbuja es uno de los tipos de ordenamiento más sencillos por su facilidad de comprensión, a continuación una clase que lo implementa
Recursividad Invertir Cadenas
Este proyecto sirve para invertir cadenas de texto, está implementado usando recursividad,
Esta clase sirve para invertir las cadenas de texto
puedes descargar el proyecto completo desde el enlace
http://www.mediafire.com/?z3lkef5k9zo2fm6
class Cadena
{
char[] aux;
int i;
public Cadena()
{
aux = new char[50];
i = 0;
}
public Cadena(int n)
{
aux = new char[n];
i = 0;
}
public char[] Copiar(char[] cad, int n)
{
if (n == 0)
aux[n] = cad[n];
else
{
aux[n] = cad[n];
Copiar(cad, n - 1);
}
return aux;
}
public char[] Invertir(char[] cad, int n)
{
if (n == 0)
aux[i] = cad[n];
else
{
aux[i++] = cad[n];
Invertir(cad, n - 1);
}
return aux;
}
public char[] Invertir(string cad, int n)
{
if (n == 0)
aux[i] = cad[n];
else
{
aux[i++] = cad[n];
Invertir(cad, n - 1);
}
return aux;
}
}
Esta clase sirve para invertir las cadenas de texto
puedes descargar el proyecto completo desde el enlace
http://www.mediafire.com/?z3lkef5k9zo2fm6
Recursividad
Esta clase Matemáticas contiene varios métodos que hacen uso de la recursividad para resolver problemas, el código es el siguiente:
Puedes descargar el proyecto completo desde acá:
http://www.mediafire.com/?irk282e4w4ty7wr
class MatematicasREste método obtiene el factorial de un número
{
static public int Factorial(int n)Este método obtiene la sumatoria de los numeros hasta el limite proporcionado
{
int f = 1;
if (n == 0 || n == 1)
return 1;
else
f = n * Factorial(n - 1);
return f;
}
static public int Sumatoria(int n)Este método invierte un número
{
int f = 1;
if (n == 0 || n == 1)
return 1;
else
f = n + Sumatoria(n - 1);
return f;
}
static public int Fibonacci(int n)
{
if (n == 1 || n == 2)
return 1;
else
return Fibonacci(n - 1) + Fibonacci(n - 2);
}
static public void Invertir(int n, ref int r)
{
r += n % 10;
if (n >= 10)
{
r *= 10;
Invertir(n / 10, ref r);
}
}
}
Puedes descargar el proyecto completo desde acá:
http://www.mediafire.com/?irk282e4w4ty7wr
Movimiento de gráficos
Este pequeño proyecto es un juego en el que se usan elementos de la clase graphics, además se usan las medidas de la forma para poder dar movimiento a los gráficos, a continuación el proyecto:
Puedes descargar el proyecto completo de aquí:
http://www.mediafire.com/?a4x2n536yyr8nzh
Puedes descargar el proyecto completo de aquí:
http://www.mediafire.com/?a4x2n536yyr8nzh
Aplicacion de las Pilas Zapatería
Este es un simulador de una zapateria donde se puede trabajar con los elementos del alamacen de zapatos, el proyecto es el siguiente
Puedes descargar el proyecto desde el siguiente enlace:
http://www.mediafire.com/?vvwbtkk3413mot8
Puedes descargar el proyecto desde el siguiente enlace:
http://www.mediafire.com/?vvwbtkk3413mot8
Aplocación de colas
Este es un ejemplo sencillo del uso de las colas, es un simulador de una cola de impresión,
Puedes descargarlo para analizarlo aquí
http://www.mediafire.com/?z3fh8c0jl2wy2ul
Puedes descargarlo para analizarlo aquí
http://www.mediafire.com/?z3fh8c0jl2wy2ul
Notación Polaca
En este ejemplo se encuentra el código par convertir de una notacion normal a una notación polaca, el código es el siguiente
Si deseas revisar el proyecto descárgalo aquí:
http://www.mediafire.com/?7527lugw7beh1b6
using System;Este método es el que realiza todo el trabajo de convertir de una notación infija a una posfija (polaca)
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
enum Simbolo { OPRENANDO=0, PIZQ, PDER,SUMRES, MULTDIV, POW};
class Polaca
{
public StringBuilder Convertir_a_Posfija(string Ei)
{
char[] Epos = new char[Ei.Length];
int tam = Ei.Length;
Pila<int> stack = new Pila<int>(Ei.Length);//para guardar el valor del operando
int i, pos = 0;
for (i = 0; i < Epos.Length; i++)
{
char car = Ei[i];
//simbolo actual = tipo y precedencia(car);
Simbolo actual = Tipo_y_Precedencia(car);
switch (actual)
{
case Simbolo.OPRENANDO: Epos[pos++] = car; break;
case Simbolo.SUMRES:
{
while(!stack.Vacia && Tipo_y_Precedencia((char)stack.Tope())>=actual)
Epos[pos++]= (char)stack.Pop();
stack.Push(car);
}
break;
case Simbolo.MULTDIV:
{
while (!stack.Vacia && Tipo_y_Precedencia((char)stack.Tope()) >= actual)
Epos[pos++] = (char)stack.Pop();
stack.Push(car);
}
break;
case Simbolo.POW:
{
while (!stack.Vacia && Tipo_y_Precedencia((char)stack.Tope()) >= actual)
Epos[pos++] = (char)stack.Pop();
stack.Push(car);
}
break;
case Simbolo.PIZQ: stack.Push(car); break;
case Simbolo.PDER:
{
char x = (char)stack.Pop();
while (Tipo_y_Precedencia(x) != Simbolo.PIZQ)
{
Epos[pos++] = x;
x = (char)stack.Pop();
}
}
break;
}
}
while (!stack.Vacia)
{
//por que esta ocasionando problemas con indice fuera de rango
if (pos < Epos.Length)
Epos[pos++] = (char)stack.Pop();
else
break;
}
StringBuilder regresa = new StringBuilder(Ei);
for(int r=0;r<Epos.Length;r++)
regresa[r] = Epos[r];
return regresa;
}
public Simbolo Tipo_y_Precedencia(char s)
{
Simbolo simbolo;
switch (s)
{
case '+': simbolo = Simbolo.SUMRES; break;
case '-': simbolo = Simbolo.SUMRES; break;
case '*': simbolo = Simbolo.MULTDIV; break;
case '/': simbolo = Simbolo.MULTDIV; break;
case '^': simbolo = Simbolo.POW; break;
case '(': simbolo = Simbolo.PIZQ; break;
case ')': simbolo = Simbolo.PDER; break;
default: simbolo = Simbolo.OPRENANDO; break;
}
return simbolo;
}
}
Si deseas revisar el proyecto descárgalo aquí:
http://www.mediafire.com/?7527lugw7beh1b6
Cola simple
Este es un ejemplo de una cola simple, la cual no es ni circular ni está implementada con listtas enlazadas
http://www.mediafire.com/?p63yaccm7drgzgh
class Cola_AlternativaEste método sirve para agregar datos a la cola simple
{
int[] _datos;
int _ultimo;
bool _vacia, _llena;
public Cola_Alternativa(int size)
{
_datos = new int[size];
_ultimo = -1;
_vacia = true;
_llena = false;
}
public Cola_Alternativa(Cola_Alternativa cola, int size)
:this(size)
{
int length = cola._ultimo + 1 < size ? cola._ultimo + 1 : size;
for (int i = 0; i < length; i++)
this._datos[i] = cola._datos[i];
this._ultimo = length - 1;
}
public void Agregar(int dato)Este método sirve para extraer datos de la cola simple
{
if (_ultimo+1 < _datos.Length)
{
_datos[++_ultimo] = dato;
_vacia = false;
if (_ultimo == _datos.Length)
_llena = true;
}
else
throw new ApplicationException("Overflow");
}
public int Extraer()Este es un método crucial para el funcionamiento de esta cola, ya que permite que los elementos avancen el la cola
{
if (_ultimo >= 0)
{
int temp = _datos[0];
Avanzar();
_ultimo--;
return temp;
}
else
throw new ApplicationException("Underflow");
}
private void Avanzar()Descarga el proyecto completo desde aquí
{
for (int i = 0; i < _ultimo; i++)
_datos[i] = _datos[i + 1];
}
public override string ToString()
{
string s = "";
for (int i = 0; i <= _ultimo; i++)
s += _datos[i] + " ";
return s;
}
}
http://www.mediafire.com/?p63yaccm7drgzgh
Pila con listas enlazadas
La ventaja de una pila con listas enlazadas es que no tiene límites arbitrarios que puedan causar problemas a causa de falta de tamaño y tampoco producen gasto de memoria innecesaria, a continuación la implementación de una pila con liostas enlazadas
Puedes descargar el ejemplo completo desde el siguiente enlace:
http://www.mediafire.com/?n6225gk5vkz9218
public class ElementoEste método sirve para agregar un elemento a una pila
{
public int v;
public Elemento s;
public Elemento (int v1, Elemento s1)
{
v = v1;
s = s1;
}
}
public class PilaEnlazada
{
Elemento e1;
public PilaEnlazada()
{
e1 = null;
}
public void Agregar(int v1)Este metodo sirve para extraer un elemento de una pila
{
Elemento nuevo = new Elemento(v1,e1);
e1 = nuevo;
}
public int Extraer()
{
Elemento naux;
int v1;
if(e1 == null)
return -1;
naux = e1;
e1 = naux.s;
v1 = naux.v;
return v1;
}
public override string ToString ()
{
Elemento aux = e1;
string s = "";
while(aux != null)
{
s += aux.v;
s += "->";
aux = aux.s;
}
s+="null";
return s;
}
}
Puedes descargar el ejemplo completo desde el siguiente enlace:
http://www.mediafire.com/?n6225gk5vkz9218
Cola circular
La cola circular es la más eficiente de las colas que se pueden realizar con arreglos de datos predefinidos, a continuación muestro un ejemplo:
Puedes descargar el proyecto que hace uso de esta clase aquí:
http://www.mediafire.com/?hmwbrb3hbmspca0
class Cola<t>Este método sirve para agregar un elemento a la cola circular
{
int _noElems;
int _p;
int _u;
t[] _a;
bool _vacia, _llena;
public Cola(int tamaño)
{
_a = new t[tamaño];
_p = 0;
_u = 0;
_vacia = true;
_llena = false;
}
public Cola()
{ }
public void Agregar(t dato)Este método sirve para extraer un elemento de la cola circular
{
if (!_llena)
{
if (_u == _a.Length)
_u = 0; ;
_a[_u++] = dato;
_noElems++;
_vacia = false;
if (_noElems == _a.Length)
_llena = true;
}
else
throw new ApplicationException("Overflow");
}
public t Extraer()Este método es una sobrecarga del método ToString() que ayuda a visualizar todos los elementos de una cola circular
{
if (!_vacia)
{
if (_p == _a.Length)
_p = 0;
t temp = _a[_p++];
_noElems--;
_llena = false;
if (_noElems == 0)
_vacia = true;
return temp;
}
else
throw new ApplicationException("Underflow");
}
public override string ToString()
{
string a = "";
int uT = _u > _p ? _u : _a.Length;
for (int i = _p; i < uT; i++)
{
a += _a[i];
a += " ";
}
if (_u < _p)
{
for (int i = 0; i < _u; i++)
{
a += _a[i];
a += " ";
}
}
return a;
}
}
Puedes descargar el proyecto que hace uso de esta clase aquí:
http://www.mediafire.com/?hmwbrb3hbmspca0
Listas Enlazadas
Este es un ejemplo de las listas enlazadas simples, diseñado desde unas clases a medida que debes revisar
Descárgalo acá:
http://www.mediafire.com/?f2p067kg1w7do3b
Descárgalo acá:
http://www.mediafire.com/?f2p067kg1w7do3b
Método de Gauss-Jordan
Este programa contiene el argoritmo para resolver sistemas de ecuaciones mediante el método de Gauss-Jordan, requiere que se le den los valores de la matriz desde el código
Puedes descargarlo haciendo click en el siguiente link
http://www.mediafire.com/?c6lf7wcpa7aazm2
Puedes descargarlo haciendo click en el siguiente link
http://www.mediafire.com/?c6lf7wcpa7aazm2
Manejo de Matrices y Vectores
Este ejemplo muestra la utilidad de los arreglos para las tareas comunes
Puedes descargar el archivo dando click acá:
http://www.mediafire.com/?9h9il4b4bae6c4a
Puedes descargar el archivo dando click acá:
http://www.mediafire.com/?9h9il4b4bae6c4a
Proyecto: Una Agenda
Este pequeño proyecto es una agenda donde se pueden agregar registros y hacer busquedas inteligentes entre ellos, lo principal de este proyecto es reforsar el uso de cadenas y de archivos
Puedes descargar el proyecto completo desde el siguiente link
Puedes descargar el proyecto completo desde el siguiente link
Archivos de texto
Al igual que los archivos binarios, los archivos de texto se manejan de manera muy sencilla desde c#, este es un ejemplo de como leer y escribir archivos de texto
si deseas descargar el archivo de texto puedes hacerlo desde el siguiente enlace
http://www.mediafire.com/?y5pfcaq9xk4xxqh
public partial class Form1 : Form
{Este botón sirve para leer un archivo de texto y mostrarlo en un textbox
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)La función de este botón es escribir un archivo de texto con el contenido de un textbox
{
OpenFileDialog opd = new OpenFileDialog();
string open;
if (opd.ShowDialog() == DialogResult.OK)
{
open = opd.FileName;
FileStream fs = null;// = new FileStream(open, FileMode.Open, FileAccess.Read);
StreamReader sr=null;// = new StreamReader(fs);
try
{
fs = new FileStream(open, FileMode.Open, FileAccess.Read);
sr = new StreamReader(fs);
textBox1.Text = sr.ReadToEnd();
}
catch (IOException io)
{
MessageBox.Show(io.Message);
}
finally
{
if (fs != null)
{
sr.Close();
fs.Close();
}
}
}
}
private void button2_Click(object sender, EventArgs e)
{
SaveFileDialog sfd = new SaveFileDialog();
string save;
if (sfd.ShowDialog() == DialogResult.OK)
{
save = sfd.FileName;
FileStream fs = new FileStream(save, FileMode.Create, FileAccess.Write);
StreamWriter sw = new StreamWriter(fs);
try
{
sw.WriteLine(textBox1.Text);
}
catch(IOException io)
{
MessageBox.Show(io.Message);
}
finally
{
sw.Close();
fs.Close();
textBox1.Clear();
}
}
}
}
si deseas descargar el archivo de texto puedes hacerlo desde el siguiente enlace
http://www.mediafire.com/?y5pfcaq9xk4xxqh
Archivos binarios
En C# es muy facil crear archivos binarios con los datos que deseemos, a continuacion se muestra un ejemplo de como crearlos haciendo uso de la clase FileStream
Puedes descargar el proyecto de Visual Studio desde el siguiente link
http://www.mediafire.com/?2ypu5by9b6mzzi3
class ProgramEste metodo sirve para escribir una serie de numeros enteros a un archivo binario
{
static void Main(string[] args)
{
string archivo = @"misDatos.mov";
EscribirArchivo(archivo);
LeerArchivo(archivo);
Console.ReadKey();
}
Este método sirve para leer una serie de números enteros desde un archivo binario y mostrarlos en la consola
public static void EscribirArchivo(string nomArch)
{
FileStream fs = null;
BinaryWriter bw = null;
try
{
fs = new FileStream(nomArch,FileMode.Create, FileAccess.Write);
bw = new BinaryWriter(fs);
Random r = new Random();
int n=5, i=0;
int val;
do
{
val = r.Next(10, 100);
Console.WriteLine("Dato insertado en el Archivo : " + val);
bw.Write(val);
i++;
} while(i<n);
}
catch (IOException ex)
{
Console.WriteLine("Error: " + ex.Message);
}
finally
{
if (bw != null)
{
bw.Close();
fs.Close();
}
}
}
public static void LeerArchivo(string nomArch)
{
BinaryReader br = null;
try
{
if (File.Exists(nomArch))
{
br = new BinaryReader(new FileStream(nomArch, FileMode.Open, FileAccess.Read));
int val;
do
{
val = br.ReadInt32();
Console.WriteLine("Dato: " + val);
} while(true);
}
else
{
Console.WriteLine("El archivo no existe");
}
}
catch (EndOfStreamException)
{
Console.WriteLine("fin del archivo");
}
finally
{
if (br != null)
{
br.Close();
}
}
}
}
Puedes descargar el proyecto de Visual Studio desde el siguiente link
http://www.mediafire.com/?2ypu5by9b6mzzi3
Manejo de Matrices (Clase matriz)
El siguiente proyecto completo en cuanto al uso de matrices bidimencionales de la clase matriz propia
Puedes revisar el proyecto en el siguiente link:
http://www.mediafire.com/?3wc6rggg8c4e459
Puedes revisar el proyecto en el siguiente link:
http://www.mediafire.com/?3wc6rggg8c4e459
Matrices Bidimensionales (Clase propia)
En esta ocasión explica como crear una clase Matriz cuya instancia nos facilite trabajar con arreglos de dos dimensiones, además incluye métodos que realizan operaciones básicas con una sola matriz
La clase Matriz es la siguiente:
http://www.mediafire.com/?i9djv9pecoxwvie
La clase Matriz es la siguiente:
class MatrizEsta propiedad nos devuelve el número de renglones que posee la matriz
{
int[,] _mat;
int _renglones;
int _columnas;
public Matriz()
{
_mat = new int[3, 3];
_renglones = 3;
_columnas = 3;
}
public int RenglonesEsta propiedad nos devuelve el numero de columnas que posee la matriz
{
get { return _renglones; }
}
Este metodo nos devuelve el promedio de la diagonal de la matriz en caso de que sea cuadrada
public int Columnas
{
get { return _columnas; }
}
public Matriz(int renglones, int columnas)
{
_mat = new int[renglones, columnas];
_renglones = renglones;
_columnas = columnas;
}
public int this[int renglon, int columna]
{
get { return _mat[renglon, columna]; }
set { _mat[renglon, columna] = value; }
}
Este método nos devuelve el promedio de la diagonal invertida de la matriz en caso de que sea cuadrada
public int Diagonal()
{
if (_renglones != _columnas)
return 0;
int prom = 0;
for (int i = 0; i < _renglones; i++)
prom += _mat[i, i];
prom /= _columnas;
return prom;
}
Aqui incluyo un pequeño programa que hace uso de esta matriz:
public int DiagonalInvertida()
{
if (_renglones != _columnas)
return 0;
int prom = 0;
int col = _columnas-1;
for (int i = 0; i < _renglones; i++)
prom += _mat[i, col--];
prom /= _columnas;
return prom;
}
}
class Program
{
static void Main(string[] args)
{
int r = Leer("renglones");
int c = Leer("Columnas");
Matriz m = new Matriz(r, c);
LlenarMatriz(m);
MostrarMatriz(m);
Promedios(m);
Console.ReadKey();
}
public static void Promedios(Matriz m)
{
int d = m.Diagonal();
int i = m.DiagonalInvertida();
if (d != 0)
Console.WriteLine("El promedio de la diagonal es: " + d.ToString());
else
Console.WriteLine("No se puede obtener el promedio de diagonal");
if (i != 0)
Console.WriteLine("El promedio de la diagonal invertida es: " + i.ToString());
else
Console.WriteLine("No se puede obtener el promedio de diagonal invertida");
}
public static void MostrarMatriz(Matriz m)
{
string linea = "";
for (int i = 0; i < m.Renglones; i++)
{
for (int j = 0; j < m.Columnas; j++)
{
linea += m[i, j].ToString() + "\t";
}
Console.WriteLine(linea);
linea = "";
}
}
public static void LlenarMatriz(Matriz m)
{
Random r = new Random();
for (int i = 0; i < m.Renglones; i++)
for (int j = 0; j < m.Columnas; j++)
m[i, j] = r.Next(10, 99);
}
public static int Leer(string leerQue)
{
while (true)
{
Console.WriteLine("Numero de {0}", leerQue);
int a = Int32.Parse(Console.ReadLine());
if (a < 3 || a > 10)
{
Console.WriteLine("Error...");
Console.Clear();
continue;
}
else
return a;
}
}
}Si deseas revisar con más detenimiento el proyecto puedes descargarlo completo en el siguiente enlace:
http://www.mediafire.com/?i9djv9pecoxwvie
Trabajando con arreglos bidimensionales
Este proyecto hace uso de la clase StringBuilder asi como de arreglos bidimensionales para hacer operaciones simples en una matriz, el código es el siguiente
La clase Matematicas utilizada en este proyecto es la siguiente :
Puedes descargar el proyecto completo desde aquí:
http://www.mediafire.com/?nwyrz2o2151jknf
static void Main(string[] args)Creamos los datos con los que vamos a trabajar
{
int r = Leer("renglones");Se llena ma matriz de números aleatorios y al mismo tiempo usamos los metodos de la clase matematicas (especificada más adelante) para saber que numeros son primos y cuales de ellos son nones.
int c = Leer("columnas");
int[,] m = new int[r, c];
StringBuilder primos = new StringBuilder();
StringBuilder nones = new StringBuilder();
int p=0;
int n=0;
Random ran = new Random();
for (int i = 0; i < r; i++)
{
for (int j = 0; j < c; j++)
{
m[i, j] = ran.Next(10, 100);
if (Matematicas.EsPrimo(m[i, j]))
{
primos.Append(m[i, j] + ", ");
p++;
}
if (Matematicas.EsNon(m[i, j]))
{
nones.Append(m[i, j] + ", ");
n++;
}
Console.Write("\t" + m[i, j]);
}
Console.WriteLine("\n\r");
}
Console.WriteLine("Los {0} numeros primos son: {1}\n\rLos {2} numeros nones son: {3}", p, primos.ToString(), n, nones.ToString());
Console.ReadKey();
}
public static int Leer(string leerQue)
{
while (true)
{
Console.WriteLine("Numero de {0}", leerQue);
int a = Int32.Parse(Console.ReadLine());
if (a < 3 || a > 10)
{
Console.WriteLine("Error...");
Console.Clear();
continue;
}
else
return a;
}
}
La clase Matematicas utilizada en este proyecto es la siguiente :
public class Matematicas
{
static public bool EsNon(int n)
{
if (Convert.ToBoolean(n % 2))
return true;
return false;
}
static public bool EsPrimo(int n)
{
int div = 2;
int r1 = n % div;
int r2 = n / div;
while (div < n)
{
if ((n % div) == 0)
return false;
div++;
}
return true;
}
}
Puedes descargar el proyecto completo desde aquí:
http://www.mediafire.com/?nwyrz2o2151jknf
Trabajando con cadenas StartsWith()
Este método muestra el uso del método StartsWith() de la clase string, el cual es muy util cuando se trabaja con cadenas ya que permite saber si una cadena tiene como primer elemento cierto caracter, para ello implementamos el siguiente método que nos ayuda a encontrar todos les elementos que empiecen con cierto caracter en una columna de un objeto DataGridView para devolvernoslo los resultados de la búsqueda completamente listos en una cadena.
El método es el siguiente:
Para verlo en acción puedes descargar el siguiente proyecto:
El método es el siguiente:
private string Seek(string c, int columna, DataGridView dGV)
{
string resultado="";
string temp="";
c= c[0].ToString().ToUpper();
for (int i = 0; i < dGV.Rows.Count-1; i++)
{
temp = dGV[columna,i].Value.ToString();
if (temp.StartsWith(c))
resultado += (dGV[0, i].Value.ToString() + " " + dGV[1, i].Value.ToString() + " " + dGV[2, i].Value.ToString() + "\r\n");
}
return resultado;
}
Para verlo en acción puedes descargar el siguiente proyecto:
Link: http://www.mediafire.com/?wqvigvchr4a8rg6
Codificación simple de una cadena
Este es un ejemplo de codificación simple de una cadena, la cual facilmente puedes utilizar en tus proyectos para añadirles un plus de seguridad :-)
Está basado en la clase ordenamiento, la cual se muestra a continuación:
Puedes descargar el proyecto en el siguiente link:
http://www.mediafire.com/?zzloy3nai15tbm6
Está basado en la clase ordenamiento, la cual se muestra a continuación:
class CodeText
{Este método es el encargado de codificar una cadena, como podemos observar, es simplemente jugar con los códigos ASCII de cada caracter para que la cadena quede ilegible.
public static string Code(string text, int key)Este método es el encargado de decodificar una cadena, se trata de hacer a la inversa lo que se realizó en el proceso de codificación
{
char[] cadC = text.ToLower().ToCharArray();
for (int i = 0; i < cadC.Length; i++)
{
if (cadC[i] >= 97 && cadC[i] <= 122)
{
cadC[i] += (char)key;
if (cadC[i] > 122)
cadC[i] -= (char)26;
}
}
return CharArrayToString(cadC);
}
Además adjunto un pequeño proyecto en Visual Studio que muestra claramente el uso de esta clase.
public static string Decode(string text, int key)
{
char[] cadC = text.ToLower().ToCharArray();
for (int i = 0; i < cadC.Length; i++)
{
if (cadC[i] >= 97 && cadC[i] <= 122)
{
cadC[i] -= (char)key;
if (cadC[i] > 122)
cadC[i] -= (char)26;
}
}
return CharArrayToString(cadC);
} }
Puedes descargar el proyecto en el siguiente link:
http://www.mediafire.com/?zzloy3nai15tbm6
jueves, 24 de noviembre de 2011
Clase Vector con plantillas (templates)
En esta ocación tenemos la clase Vector ya analizada en la entrada anterior pero con algunas modificaciones, entre ellas las plantillas, las cuales sirven para crear instancias de una misma clase que puedan tener atributos con diferentes tipos de datos, la nueva clase es la siguiente:
Al mismo tiempo la utilizamos para un pequeño programa que calcula información acerca de calificaciones de alumnos:
El programa es muy sencillo y lo puedes revisar descargandolo desde el siguiente enlace:
http://www.mediafire.com/?32g7drfox9fscvi
public class Vector<t>
{
t[] _vec;
int _noElems;
public Vector()
{
_vec = new t[0];
_noElems = 0;
}
public Vector(int size)
{
_vec = new t[size];
_noElems = size;
}
public double GetAverage()
{
double a = 0;
for (int i = 0; i < _noElems; i++)
a += Convert.ToDouble(_vec[i]);
a /= _noElems;
return a;
}
public void Add(t value)
{
t[] temp = new t[_vec.Length + 1];
for (int i = 0; i < _vec.Length; i++)
temp[i] = _vec[i];
temp[temp.Length - 1] = value;
_noElems++;
_vec = null;
_vec = temp;
temp = null;
}
public int NoElems
{
get { return _noElems; }
}
public override string ToString()
{
StringBuilder s = new StringBuilder();
for (int i = 0; i < _vec.Length; i++)
s.Append(_vec[i].ToString() + " ,");
return s.ToString();
}
public t this[int index]
{
get { return _vec[index]; }
set { _vec[index] = value; }
}
public t GetMax()
{
t n;
t m = _vec[0];
for (int i = 1; i < _vec.Length; i++)
{
n = _vec[i];
if (Convert.ToDouble(n) > Convert.ToDouble(m))
m = n;
}
return m;
}
public t GetMin()
{
t n;
t m = _vec[0];
for (int i = 1; i < _vec.Length; i++)
{
n = _vec[i];
if (Convert.ToDouble(n) < Convert.ToDouble(m))
m = n;
}
return m;
}
Al mismo tiempo la utilizamos para un pequeño programa que calcula información acerca de calificaciones de alumnos:
http://www.mediafire.com/?32g7drfox9fscvi
Operaciones Matemáticas
Esta clase llamada Matematicas contiene ciertos metodos que realizan operaciones sencillas, pero que ayudan a poner a punto nuestra lógica de programación, la clase es la siguiente:
Aquí dejo disponible un proyecto de Visual Studio que hace uso de esta clase
Link: http://www.mediafire.com/?1p2p02ip1ej6z7l
class MatematicasEste método simplemente sirve para devolver el numero de euler e , base del logaritmo natural o neperiano
{
static public double BaseE()Este método devuelve el factorial de un número siempre y cuando sea igual o menor a 13 (dadas las limitaciones de una variable de tipo int (entero 4 bytes)
{
int i = 0;
double ee = 0.0;
double ve = Math.E;
do
{
ee += (double)1/ Matematicas.Factorial(i++);
}
while(ee <= Math.E);
return ee;
}
Este método devuelve el factorial de un número, sin las limitaciones del anterior
static public double Factorial(double n)
{// sin limitaciones acerca de calcular el factorial mayor a 13
double acomular = 1;
for (int i = 1; i <= n; i++)
acomular *= i;
return acomular;
}
Este método devuelve si sí o no es un número primo
static public int Factorial(int n)
{// limitado a calcular el factorial menor a 13
int acomular = 1;
for (int i = 1; i <= n; i++)
acomular *= i;
return acomular;
}
static public bool EsPrimo(int n)
{
int div = 2;
int r1 = n % div;
int r2 = n / div;
while (div < n)
{
if ((n % div) == 0)
return false;
div++;
}
return true;
}
}
Aquí dejo disponible un proyecto de Visual Studio que hace uso de esta clase
Link: http://www.mediafire.com/?1p2p02ip1ej6z7l
Clase Vector
Este ejercicio muestra el uso de una clase vector, la cual facilita el uso de arreglos unidimensionales, la clase Vector es la siguiente:
Dejo disponible un pequeño proyecto de Visual Studio que hace uso de ésta clase
Link: http://www.mediafire.com/?6u6s7of2y2l9bxf
class Vector
{
int[] vec;
public Vector(int n)
{Este método sirve para leer el valor que se encuentra en una posicion específica del vector
if (n > 0)
vec = new int[n];
}
public Vector()
{ vec = new int[5]; }
public int this[int index]
{
get { return vec[index]; }
set { vec[index] = value; }
}
public int Read(int index)Este método añade al vector un dato en el primer lugar libre
{
if (index >= vec.Length)
return -1;
else
return vec[index];
}
public void Add(int data)Este método sirve para agregar un dato al vector en la posición deseada
{
for (int i = 0; i < vec.Length; i++)
{
if (vec[i] == 0)
{
vec[i] = data;
break;
}
}
}
public void Add(int data, int index)Este método sirve para obtener el valor máximo del vector
{
vec[index] = data;
}
public int GetMax()Este es un métod estático que sirve para obtener el máximo de un arreglo unidimensional
{
int n = 0;
int m = vec[0];
for (int i = 1; i < vec.Length; i++)
{
n = vec[i];
if (n > m)
m = n;
}
return m;
}
static public int GetMax(int[] a)Este método sirve para obtener el mínimo del vector
{
int n = 0;
int m = a[0];
for (int i = 1; i < a.Length; i++)
{
n = a[i];
if (n > m)
m = n;
}
return m;
}
public int GetMin()Este método sirve para encontrar el valor más repetido en el vector
{
int n = 0;
int m = vec[0];
for (int i = 1; i < vec.Length; i++)
{
n = vec[i];
if (n < m)
m = n;
}
return m;
}
public int MoreRepeated()
{
int[] temp = new int[vec.Length];
for (int i = 0; i < vec.Length; i++)
for (int j = 0; j < vec.Length; j++)
if (vec[i] == vec[j])
temp[i]++;
return vec[temp.Max()];
}
public int Length
{
get { return vec.Length; }
}
}
Dejo disponible un pequeño proyecto de Visual Studio que hace uso de ésta clase
Link: http://www.mediafire.com/?6u6s7of2y2l9bxf
Suscribirse a:
Comentarios (Atom)










