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

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;
}

}

Recursividad Invertir Cadenas

Este proyecto sirve para invertir cadenas de texto, está implementado usando recursividad,


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:

class MatematicasR
{
   
Este método obtiene el factorial de un número
static public int Factorial(int n)
{
int f = 1;
if (n == 0 || n == 1)
return 1;
else
f = n * Factorial(n - 1);
return f;
}
Este método obtiene la sumatoria de los numeros hasta el limite proporcionado

static public int Sumatoria(int n)
{
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);
}
Este método invierte un número

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

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

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

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

using System;
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
{
Este método es el que realiza todo el trabajo de convertir de una notación infija a una posfija (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