domingo, 7 de abril de 2013

Algoritmos de Ordenación en C++


La ordenación de datos(sort) es una operación consistente en disponer un conjunto-estructura- de datos en algún determinado orden con respecto a uno de los campos de elementos del conjunto.Una colección de datos(estructura) puede ser almacenada en un archivo, un array (vector o matriz), un array de registros,una lista o un árbol.Cuando los datos están almacenados en un array ,lista o un árbol, se denomina ordenación interna,por el contrario si están almacenados en un archivo,el proceso de ordenación se llama ordenación externa.
                                              Quicksort in action on a list of numbers. The horizontal lines are pivot values.
Este tema es indispensable a la hora de trabajar con estructura de datos,por eso que en el curso que llevo (Estructura de Datos) nos dejaron como tarea implementar estos algoritmos en C++,la verdad como siempre a ultima hora…pero bueno espero les sirva de algo(en algunas impresiones se repetira el arreglo al inicio pero luego poco a poco se muestran los cambios).
Para mejor comprensión un VideoMIT donde hablan un poco sobre estos métodos.
Algoritmos Implementados:

#include 
#include 
#include 

HANDLE hCon;

using namespace std;
void SetColor(int i);
void LeerArray(int num,float x[]);
void MostrarArray(int num,float x[]);
void MostrarColor(int num,float x[]);
void MostrarBubleSort(int num,float x[]);
void MostrarSeleccionSort(int num,float x[]);
void MostrarInsercionSort(int num,float x[]);
void MostrarShellSort(int num,float x[]);
void MostrarQuickSort(int ,int,float x[],int);
void MostrarMergeSort(float x[],int,int,int);
void merge(float x[], int ini, int m, int fin,int num);

int menu();
int main()	
{
	int op,num;
	float x[50];
	do
		{
			op=menu();
			switch(op)
			{
			case 1:   {
				SetColor(10);
				cout<<"\n\t\t\t   [ INGRESO DE ARREGLO ]"<>num;cout<>num;cout<>num;cout<>num;cout<>num;cout<>num;cout<>null");
	return 0;
}

void MostrarBubleSort(int num,float x[])
{
	float temp;
	int z=0;
	for(int i=1;i=i;j--)
		{
			cout<<"\t";MostrarColor(num,x);
			if(x[j-1]>x[j])
			{
				temp  = x[j-1];
				x[j-1]= x[j];
				x[j]  = temp;	
			}	
			z++;		
		}	
	}	
}

void MostrarSeleccionSort(int num,float x[])
{
	float temp;
	for(int i=0;i=0 && temp0;salto=salto/2)
		do
			{
				band=0;
				cout<<"\t";MostrarColor(num,x);
				for(int i=0;ix[i+salto])	
					{
						temp = x[i];			
						x[i] = x[i+salto];	
						x[i+salto] = temp;
						band=1;	
					}				
				}			
			}while(band);
}

void MostrarQuickSort(int ini,int fin,float x[],int num)
{
	int i=ini;
	int j=fin;
	float central=x[(ini+fin)/2];
	float temp;
	do
		{	
			cout<<"\t";MostrarColor(num,x);	
			while(central>x[i])i++;
			while(centrali)MostrarQuickSort(i,fin,x,num);
	
}

void MostrarMergeSort(float x[], int ini, int fin,int num)	
{	
	if(ini!=fin)		
	{		
		int m = (ini+fin)/2;		
		MostrarMergeSort(x, ini, m,num);		
		MostrarMergeSort(x, m+1,fin,num);		
		merge(x, ini, m, fin,num);		
	}	
}

void merge(float x[], int ini, int m, int fin,int num)
{
	int *aux = new int[m-ini+1];
	for(int j=ini; j<=m; j++)	
		aux[j-ini] = x[j];
	int c1=0, c2=m+1;
	for(int j=ini; j<=fin; j++)
	{	
		cout<<"\t";MostrarColor(num,x);	
		if(aux[c1] < x[c2])		
		{
			
			x[j] = aux[c1++];
			
			if(c1==m-ini+1)
				
				for(int k=c2; k<=fin; k++)
					
					x[++j] = x[k];
			
		}
		
		else
			{	
				x[j] = x[c2++];
				if(c2==fin+1)	
					for(int k=c1; k<=m-ini; k++)	
						x[++j] = aux[k];	
			}
	}
}

int menu()
{
	int op;
	do
		{
			system("cls");
			SetColor(15);
			cout<<"\t     ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»  "< Ingrese opcion   :";SetColor(15);cin>>op;
			
		}while(op<1 data-blogger-escaped-op="">6);
	return op;
	
}

void LeerArray(int num,float x[])
{
	for(int i=0;i>x[i];	
	}
}

void MostrarArray(int num,float x[])
{
	int c=num;
	for(int i=0;i0)		
		{		
			SetColor(14);cout<<" , ";		
		}	
	}	
}

void MostrarColor(int num,float x[])	
{
	int c=num;
	
	for(int i=0;i0)	
		{	
			SetColor(14);cout<<" , ";	
		}
	}
	cout<<endl<<endl;
	
}



void SetColor(int i)
{
	if(hCon == NULL)	
		hCon = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleTextAttribute(hCon, i);
}

Autómata Pila Determinista en C++


En el curso de Teoria de la Computación el profe nos dejo en el laboratorio la implementación de un APD que sea para cierto lenguaje definido,entonces hizo uno chicha nomas C(WWr), para facilitar mi implementación hize uso de librerias para “dibujar” el APD(definido) y de la Libreria Estandar de C++ (STL) para llenar y desempilar la pila.Básicamente el código consiste en dividir el string y comparalo para que pase a empilarlo y desempilarl(se imprime el proceso).Ahora para su ejecución en C++ tienes q tener instalado winbgim o te saldrá 1000000 errores(no mentira),ya mucho florillo a continuación el código:



Si éste código te ha servido, no olvides en regalarnos un like y/o compartir con tus amigos para que este blog sigua creciendo ...



#include 
#include 
#include 
#include
#include 
#include 
#include 
#include 
#include 
#include 
#define MAX 100
HANDLE hCon;

using namespace std;

void waitForLeftMouseClick();
void SetColor(int i);

int grafica()
{

    settextstyle(0,0,2);

    setcolor(WHITE);
    outtextxy(50,70,"TEORIA DE LA COMPUTACION");
    outtextxy(70,90," APD [ww^r]");
    setcolor(RED);
    settextstyle(0,0,1);
    setlinestyle(CENTER_LINE,20,2);

    circle (108, 260, 40);circle (60, 260, 6);circle (60, 260, 4);circle (60, 260, 2);//0
    circle (343, 260, 35);circle (343, 260, 40);//1

    setlinestyle(CENTER_LINE,20,2);
    setcolor(WHITE);
    settextstyle(0,0,2);
    outtextxy(85,250,"q0");
    outtextxy(320,250,"q1");

    setcolor(LIGHTBLUE);
    //////conectores
    settextstyle(0,0,2);
    arc (225, 390, 60, 120, 180);circle (311, 235, 4);//0,1
    arc (108, 210, 320, 220, 25);circle (128, 223, 4);//0,0
    arc (340, 210, 320, 220, 25);circle (355, 223, 4);//1,1
    setcolor(YELLOW);
    outtextxy (50, 140,"a, & / X");
    outtextxy (50, 157,"b, & / Y");
    outtextxy (290, 140,"X, & / a");
    outtextxy (290, 157,"Y, & / b");
    outtextxy (155, 235,"&, & / &");
    return 0;
}

void waitForLeftMouseClick()
{
    clearmouseclick(WM_LBUTTONDOWN);
    const int DELAY = 50; 
    int x, y;
    while (!ismouseclick(WM_LBUTTONDOWN))
        delay(DELAY);
    getmouseclick(WM_LBUTTONDOWN, x, y);
}

void reconocedor()
{
     stackoperation;    
     string palabra,sub_palabra;
     int tam,tamb;
     cout<<"\n --> Ingrese palabra: ";
     cin>>palabra;
     tam=palabra.size();    
     tamb=tam-1;

     string pri_palabra=("c"+palabra.substr(1,tamb/2));//primera parte de la cadena
     string   sec_palabra=(palabra.substr(tamb/2+1,tamb)+"c");//segunda parte de la cadena

     string inv_palabra(sec_palabra.begin(),sec_palabra.end());//invierto sec_palabra
     reverse(inv_palabra.begin(),inv_palabra.end());

     if(pri_palabra==inv_palabra)//si la primera subcadena es igual a la segunda subcadena
     {
          settextstyle(0,0,2);
          setcolor(GREEN);
          outtextxy(100,350,"Palabra Aceptada");
           int i=0;
           SetColor(10);cout<<"\n\tEmpilando en q0 :"<=0; i--)
          {
              for(signed int j = 0; j < i; j++)
              {
                 if(palabra[j]=='a'){SetColor(6);cout<<"\t[";SetColor(15); operation.top(); operation.pop(); cout<<" X ";SetColor(6);cout<<"]";SetColor(15);}
                 else if(palabra[j]=='b'){SetColor(6);cout<<"\t[";SetColor(15); operation.top(); operation.pop(); cout<<" Y ";SetColor(6);cout<<"]";SetColor(15);}
                 else               {SetColor(6);cout<<"[";SetColor(15); operation.top(); operation.pop(); cout<<" Z ";SetColor(6);cout<<"]";SetColor(15);}
              }
           cout< Ingrese opcion: ";
        cin>>op;
        switch(op)
        {
                   case 1:
                           {
                               system("cls");
                            imprimematrix();
                            cout<<"\t\t";reconocedor();
                            getch();
                            break;}
                   };                 
        }while(op!=2);
    system("PAUSE");
    return EXIT_SUCCESS;
}

void SetColor(int i)
    {
     if(hCon == NULL)
     hCon = GetStdHandle(STD_OUTPUT_HANDLE);
     SetConsoleTextAttribute(hCon, i);
    }

Instalar Prolog en Ubuntu


¿Buscas un IDE para programar en PROLOG(Programación Lógica)? Tienes varias alternativas como Swi-Prolog en Windows (la cual es una interfaz más "amigable" para el programador) pero en esta ocasión les traigo otra alternativa GPROLOG para GNU Linux especificamente para la distribución Ubuntu 12.04 (en donde programamos desde la terminal que a mi gusto es más rápido pero para los siguientes post sobre el curso de prolog lo haremos en Windows (ya que aún no he encontrado la manera de hacer las conexiones (jpl) con netbeans jeje),comenzemos:

Primero debemos instalar Gprolog en nuestra máquina desde la terminal pero antes entramos como super usuario.


Luego creamos una carpeta " Codigos_Prolog ", editamos un archivo "holamundo.pl" les recuerdo que siempre tiene que ir la extensión .pl , escribimos el código en prolog y lo guardamos en la carpeta creada antes.

mensaje :- nl,
           write('Bienvenido a Código Informático'),
           nl,
           nl.
salude  :- write('Hola Mundo Cruel !!! ').
        :- mensaje.

Abrimos una nueva terminal,nos logeamos como super usuario,nos ubicamos en la carpeta Codigos_Prolog y escribimos el nombre del programa gprolog.

Llamamos a nuestro programa holamundo.pl como ['holamundo.pl']. (no olvidar el (.) al final),de esta manera cargamos nuestra base de conocimiento.


Una vez ejecutado el programa,ahora podemos preguntar a nuestra base de conocimiento pero en esta ocasión solo imprimirá el mensaje "Hola Mundo Cruel !!!", para ello escribimos :
salude.


Árbol B en C++



Constituyen una categoría muy importante de estructuras de datos,que permiten una implementación eficiente de conjuntos y diccionarios, para operaciones de consulta y acceso secuencial. Existe una gran variedad de árboles B: los árboles B,B+ y B*; pero todas ellas están basadas en la misma idea, la utilización de árboles de búsqueda no binarios y con condición de balanceo. En concreto, los árboles B+ son ampliamente utilizados en la representación de índices en bases de datos. De hecho, este tipo de árboles están diseñados específicamente para aplicaciones de bases de datos, donde la característica fundamental es la predominancia del tiempo de las operaciones de entrada/salida de disco en el tiempo de ejecución total. En consecuencia, se busca minimizar el número de operaciones de lectura o escritura de bloques de datos del disco duro o soporte físico.
Las operaciones que se pueden realizar en un árbol-B son básicamente tres: Insertar una clave, eliminar una clave, buscar una clave.
Las características que debe cumplir un árbol-B son:
  • Un parámetro muy importante en los árboles-B es el ORDEN (m). El orden de un árbol-B es el número máximo de ramas que pueden partir de un nodo.
  • Si n es el número de ramas que parten de un nodo de un árbol-b, el nodo contendrá n-1 claves.
  • El árbol está ordenado.
  • Todos los nodos terminales, (nodos hoja), están en el mismo nivel.
  • Todos los nodos intermedios, excepto el raiz, deben tener entre m/2 y m ramas no nulas.
  • El máximo número de claves por nodo es m-1.
  • El mínimo número de claves por nodo es (m/2)-1.
  • La profundidad (h) es el número máximo de consultas para encontrar una clave
Este fue mi trabajo de 2° Ciclo en Info – Unt 

Instalar SDK Android en Ubuntu




En esta ocasión aprenderemos a instalar SDk Android en Ubuntu 12.04, y es que en la actualidad las aplicaciones móviles están dando la hora y tiene mucho futuro este campo.Así que comencemos suponiendo que ya cuentas con JDK de Java y el IDE Eclipse en tu máquina.

Buscamos en google SDK Android y descargamos este paquete : http://developer.android.com/sdk/index.html

Esperamos que se descargue todo el archivo que pesa aproximadamente 79.0 MB ,descomprimes el archivo y lo copias en una carpeta  ANDROID . Abrimos una terminal y entramos como super  usuario, comprobamos que se copio correctamente y ejecutamos el comando:

sudo nano /home/nombre_usuario/.bashrc



Nos situamos al final del archivo y escribimos la siguiente linea:

export PATH=${PATH}:/home/nombre_usuario/ANDROID/android-sdk-linux/tools

Recordar que  android-sdk-linux puede variar según la versión; como se daran cuenta nos estamos situando en la carpeta que    habiamos creado anteriormente ANDROID



Cerramos la terminal y abrimos otra para comprobar si se actualizo el PATH tecleamos android y nos abrirá una ventana (Android    SDK Manager)


Escoges la API con la que deseas trabajar y haces click en Instalar:




Solo queda esperar  hasta que instale todos los paquetes …
 Abrimos eclipse y nos dirigimos a la pestaña de help –> Install new software

Luego hacemos click en Add y agregamos la siguiente dirección:


Nos aparecerá las herramientas de Desarrollo para Android, seleccionamos las que necesitamos y le damos siguiente.

Una vez terminado la instalación nos pedirá reiniciar, al abrir Eclipse nos aparecerá esto:


Escogemos la opción de Use existing SDKs ( ya que anteriormente lo teníamos instalado) para luego ubicarnos en la carpeta en donde    tenemos ANDROID.

Hack claves WEP en Ubuntu 12.04


Este post va con “fines educativos” en la cual vamos a “hackear” una clave WEP (que no es gran hazaña en estos días) pero me pareció interesante publicarla ya que tan solo usando Ubuntu y/o otra distribución de GNU/Linux podrías hacerlo sin necesidad de conseguirte BackTrack  ,para esto deberías instalarte Aircrack-ng en tu máquina (puedes hacerlo dese el centro de software que tiene ubuntu o sudo apt-get install aircrack-ng , además debes descargar WepCrackGUI, descomprimirlo(suponiendo que esta en la carpeta de Descargas(como es mi caso)), luego nos ubicamos en la Carpeta desde la terminal:

cd Descargas/wepcrackgui/GWepCrackGui/bin/Debug


Una vez que ya estamos en Debug escribimos sudo -s  (si no estamos como super usuario), luego gksudo ./wepcrack  (para poder usar el WepCrackGUI) nos aparecerá una ventana con todas las redes inalámbricas (eligimos una y presionamos Start Monitor).
Después vamos a la pestaña Authentication y presionamos Start Authentication (cuando la autenticación es completa nos dirigimos a Attack)
Procedemos a atacar a nuestra victima con Start Attack (en esta etapa comenzamos a inyectar paquetes esperando que llegue a una cantidad determinada de IVS) básicamente lo que esta pasando detrás es que nos hemos infiltrado en su red y el programa desconecta un host conectado a la red WIFI  por fuerza bruta es ahí cuando “observa” la clave en el apretón de manos(handshake) que se da entre entre (el que emite la señal y el que la recibe).
Por último nos dirigimos a Crack y presionamos Start Crack para obtener algo así:
Related Posts Plugin for WordPress, Blogger...