sábado, 22 de septiembre de 2012

Mi implementación del mergesort

Bueno, como parte de una tarea de análisis y diseño de algoritmos, tuve que implementar el método mergesort para el ordenamiento de vectores de enteros. Como saben este algoritmo consiste en dividir el arreglo original en arreglos más pequeños, de hecho hasta arreglos de un solo elemento, una vez separados los arreglos, se ordenan a partir de la mezcla de todos ellos. Una vez terminada mi implementación en C de este curiosos método de ordenamiento, les comparto cómo quedo, espero que les sirva, saludos desde México !

PD ya saben cualquier duda de la implementación, estoy a sus ordenes en p.camarillor@gmail.com o en @p_camarillor o en www.facebook.com/p.camarillor


int * Mergesort(int *v, int longitud)
{
int mitad = longitud / 2;
int residuo = longitud % 2;
int *vectorIzquierdo, *vectorDerecho;
int i = 0;

//Caso base, la lista es de un elemento y se considera ordenado
if(longitud == 1)
{
return v;
}

vectorIzquierdo = (int *)malloc((mitad)*sizeof(int));
vectorDerecho = (int *)malloc((mitad  + residuo)*sizeof(int));

//Para cada entero en el vector v antes de la mitad, se agrega a la izquierda
for(i = 0; i < mitad; i++)
{
*(vectorIzquierdo + i) = v[i];

}
//Para cada entero en el vector v despues de la mitad, se agrega a la derecha
int j = 0;
for(i = mitad; i < longitud; i++)
{
*(vectorDerecho + j) = v[i];
j++;
}

//Se llama recursivamente hasta obtener un vector de un elemento
vectorIzquierdo = Mergesort(vectorIzquierdo, mitad);
vectorDerecho = Mergesort(vectorDerecho, (mitad + residuo));

return merge(vectorIzquierdo, mitad, vectorDerecho, (mitad + residuo));
}

int * merge(int *vI, int longitudVectorIzquierdo, int * vD, int longitudVectorDerecho)
{
int *lstResultado;
int cabezaLista = 0;
lstResultado = (int *)malloc((longitudVectorIzquierdo + longitudVectorDerecho)*sizeof(int));
while(longitudVectorIzquierdo > 0 || longitudVectorDerecho > 0)
{
if(longitudVectorIzquierdo > 0 && longitudVectorDerecho > 0)
{
if(*(vI + 0)  <= *(vD + 0))
{
*(lstResultado + cabezaLista) = *(vI + 0);
//Se elimina el elemento que se ha ingresado en la lista final
vI++; //Se incrementa la posición del apuntador
longitudVectorIzquierdo--;//Se resta el número de elementos
cabezaLista++;
}
    else
{
*(lstResultado + cabezaLista) = *(vD + 0);
//Se elimina el elemento que se ha ingresado en la lista final
vD++; 
longitudVectorDerecho--;
cabezaLista++;
}
}
else if(longitudVectorIzquierdo > 0)
{
*(lstResultado + cabezaLista) = *(vI + 0);
//Se elimina el elemento que se ha ingresado en la lista final
vI++; 
longitudVectorIzquierdo--;
cabezaLista++;
}
       else if(longitudVectorDerecho > 0)
{
*(lstResultado + cabezaLista) = *(vD + 0);
//Se elimina el elemento que se ha ingresado en la lista final
vD++;
longitudVectorDerecho--;
cabezaLista++;
}

}
return lstResultado;
}

sábado, 14 de abril de 2012

Subir Archivos Php sobre IIS en windows server 2008 R2

En pasados días tuve la necesidad de desarrollar una aplicación en php, pero el sevidor web era el IIS que Windows Server 2008 R2 trae instalado. Mi aplicación tenía que ser capaz de subir cierta imagen al servidor y almacenarla. El problema vino cuando mi script en php lanzaba el siguiente error:
failed to open stream: Permission denied
Esto se debe a que el usuario invitado (User guest) a nuestro IIS no tiene los permisos necesarios para escribir en nuestro servidor. Estos permisos son necesarios para realizar la famosa función copy de php para cargar archivos. 


La solución es muy simple y a la vez un poco peligrosa. Consiste en otorgarle a la carpeta root de nuestro IIS los permisos para modificar y escribir información al usuario invitado. Para esto hay que realizar los siguientes pasos:
  1. Dar click derecho en el nombre de la carpeta .../inetpub y seleccionar la opción Propiedades
  2. Después seleccionar el tab de Seguridad.
  3. Dar click en el boton "Editar" y agregar (si no existe aún) el usuario IUSR.
  4. Ororgarle a ese nuevo usuario los permisos de escritura y modificación y Listo !!
Ahora la función copy no deberá lanzar ningún error y deberá escribir correctamente en el servidor las imagenes desde el script de pgp

lunes, 18 de abril de 2011

Instalara Apache Tomcat en NetBeans

Cuando se trata de desarrollo de aplicaciones Web codificadas en php o java, necesitamos "correr" los procesos servidores de la apliación en un servidor web o servidor de páginas web. NetBeans tiene instalado por default el GlassFish 3, sin embargo este servidor de apliaciones es muy pesado y cuando ejecutamos nuestras primeras apliaciones web no necesitamos la robustes de Glassfish, es por ello que en este post explicaré la manera de instalar otro servidor web, ligero y robusto, justo lo que necesitamos cuando estamos aprendiendo php y/o Java para desarrollar en la web.

1. Descargar Tomcat. Lo primero que debemos hacer, es obtener los scripts y ejecutables de nuestro servidor web: ApaceTomcat 6.x. Para ello ingresamos a la páguina oficial de Tomcat. De esta página descargamos la versión más actual de Tomcat que es Tomcat 7.0. Seleccionamos la  opción que se adapte a nuestro ordenador en la sección de Binary Distributions/ Core.



2. Extraer el contenido del archivo descargado. Una vez decargados los archivos de Tomcat, es necesario situarlos en una carpeta que se accesible para NetBeans, puede ser la de descargas o la de carpeta de instalación de NetBeans. En lo personal use la carpeta de extraer el contenido de mis archivos binarios. Esta acción creará una nueva carpeta llamada apache-tomcat-7.x. 

3. Configuración en NetBeans. Una vez descomprimidos los archivos descargados, el proceso de configurar NetBens, es el siguiente. Entramos al menú Tools/Servers

Presionamos el botón "Add Server"
Seleccionamos la opción de Tomcat 6.0, pero cambiamos el valor de la etiqueta  por "Tomcat 7.0".
Después presionamos el botón "Next" y en la siguiente pantalla presionamos el botón "Browse" y buscamos la ruta donde se localiza nuestra carpeta de Tomcat 7. (CATALINA HOME) . Una vez encontrada nuestra ruta tenemos que ingresar obligatoriamente un username y un password como se muestra en la imagen.
Para concluir esta tarea, presionamos el botón "Finish"  y tenemos configurado un nuevo servidor web en nuestro NetBeans.

sábado, 20 de noviembre de 2010

Internet más rápido con nuevo DNS

Bueno en esta ocasión les traigo un tema para que su internet se vea moejorado, cambiando el servidor de nombres DNS:
El artículo que he encontrado explica muy bien lo que se tiene que hacer para cambiar el DNS que nuestra interfaz de red ocupa por el sevidor de google DNS public, presiona aqui para ver el tutorial.

martes, 21 de septiembre de 2010

Enviar archivos con sockets en C Linux / Send files through C-like sockets on Linux

Hola que tal, si preguntan, si lo sé no he puesto ningun truco ni nada por el estilo de lo que mencione en mi blog anterior, pero pronto le dedicare tiempo a este blog, en verdad tengo mucho por compartir, jeje.

El dia de hoy me enfrente a un trabajo escolar que nunca imagine programar, asi es enviar ARCHIVOS por medio de sockets en C. La verdad no sabia ni por donde empezar, pero la idea que encontré en internet fue algo muy simple. Leer en el proceso emisor el archivo a enviar y enviarlo por medio de un socket como una cadena cualquiera por el socket. En el proceso receptor, escribir el flujo de entrada en el nuevo archivo.

Para obtener el código:

o

Visitar mi el sitio donde se encuentra el código:
https://github.com/pcamarillor/SendReceiveFiles_C



Para más detalle visiten mi referencia:

http://www.chw.net/foro/lenguajes-de-programacion-f22/177909-sockets-http-linux.html#post2291043


martes, 14 de septiembre de 2010

Crear Particiones en Windows 7

Hola que tal, bueno dada la cantidad de operaciones, turcos, herramientas y configuraciones que necesito y que estoy seguro que muchos especialistas en computación debemos saber hacer, me he visto en la necesidad de crear mi blog para subir todos estos trucos que, en su mayoria, he encontrado en internet, pero es bueno tenerlos en un lugar en vez de andarlos buscando....

Así, que la primer contribución que hago es acerca de como crear particiones en Windows 7 sin la necesidad de instalar algún otro sofware que solo complica más esta sencilla operación.
Step 01: Entramos al panel de control y debemos seleccionar la opción de Sistema y seguridad.

Step 02: Seleccionar Herramientas Administrativas.

Step 03: Abrir Administración de equipos.

Step 04: Seleccionar Almacenamiento.

Step 05: Seleccionar Admiistración de discos

Step 06: Seleccionar en la parte inferior de la nueva ventana, la partición que se desea particionar.

Step 07: Dar click derecho sobre la partición seleccionada y dar click en la opción Reducir Volumen

Apartir de aca Windows nos guiará en el proceso de partición, el cual es muy sencillo.

Mi referencia es:
http://www.vinagrillo.com/2010/05/crear-particiones-en-windows-vista-sin-usar-ningun-programa/