Listas simples ligadas en C

December 16th, 2009

Pues en esta ocasion veremos la implementacion de una lista ligada en c, solomente sera como un ejemplo ilustrativo pero las ideas desarrolladas aqui podran extenderse hacia horizontes mas amplios.

Una lista es un tipo de dato abstracto, se le llama asi porque es un tipo de dato definido por el programador a diferencia de los tipos de datos que nos ofrece el lenguaje C que ya son “nativos” del lenguaje por ejemplo los tipo int, float,char..etc

Imaginemos a la lista como una longaniza =), la longaniza esta compuesta por muchos trozos de carne unidos uno tras otro, las longanizas tienen un fin y un inicio. Imagina que todos los trozos que forma la longaniza son iguales, pues ahora la lista es como la longaniza y esos trozos de carne de la longaniza les llamaremos los nodos de la lista. Cada uno de los nodos puede almacenar informacion para fines practicos los nodos de nuestra lista almacenaran un entero, y podemos realizar varias operaciones sobre una lista, por ejemplo ver si la lista esta vacio o dicho de otra forma si la lista no tiene nodos, tambien recorrer los nodos de la lista buscando dentro de su informacion por algun valor en especifico, podremos insertar nuevos nodos a la lista, eliminar nodos …etc

Read the rest of this entry »

bueno, he hecho una clase que sirve para redimensionar imagenes, es necesario tener instalada la libreria gd del php, he tratado de que se lo mas general posible, la clase tiene dos metodos utilizables que son
resizeImg() sirve para hacer un resize a un solo archivo de imagen y el otro resizeDir() que sirve que hacer resize a todas las imagenes contenidas en un directorio.

La verdad es que me ha sido muy util, sobre todo porque algunas veces es necesario sacar miniaturas de las imagenes de un directorio el problema es que a veces pueden ser cientos de imagenes y cambiarles el tamaño a mano es una tarea pesado, pero con esta clase solo es necesario pasarle algunos parametro ejecutar el script y listo.

La clase tiene un metodo que verifica los parametros pasados a los metodos, si existe algun error con alguno de los parametros se genera una exepcion mostrando un mensaje describiendo el error y se termina la ejecucion del metodo sin tirar warnings ni errores fatales.

Read the rest of this entry »

Ahora hablara sobre un tema basico en la la programacion en lenguaje C y es el paso de parametros a funciones por valor y por referencia.

Cuando se empieza a aprender el lenguaje C y se habla sobre el tema de las funciones generalmente no se habla sobre este tema pues podria confundir a la persona que esta aprendiendo, el solo hecho de aprender el concepto de funcion y su manejor pede costar algo de tiempo y lo digo porque lo mismo me sucedio a mi cuando recien empezaba.

veamos un ejemplo de uso comun de una funcion

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio .h>
 
void porValor(int param){
     param +=2;
}
 
int main(){
    int numero=5;
    porValor(numero);
    printf("El valor de numero es %d", numero);
    return 0;
}
</stdio>

La salida del programa anterior debe ser:


El valor de numero es 5

En las lineas anteriores de codigo se ha pasado por valor la

Read the rest of this entry »

ahora hablare sobre punteros en c, cualquiera que quiera programar en c debe de manejar los punteros como si fueran las tablas de multiplicar, personalmente he visto muchos casos de personas que inclusive estando a nivel universitario les cuesta trabajo entender como trabajan los punteros, es por eso que escribo esto y vamos a empezar desde cero, simpre es bueno tener unas buenas bases de punteros. En cierto sentido manejar punteros es facil, si tenemos algunos conocimientos en la forma en que se almacena la informacion en una computadora mmmm…ya empezamos mal (pensaras), pero no te preocupes no introducire demasiada jerga computacional, solo hablaremos de los conceptos en su forma mas general y digerible para cualquiera que alguna vez haya programado solo un poco.

Material Previo

Dentro de la computadora existe algo llamado memoria ram, es un espacio donde se almacenan todos los datos que utiliza la computadora solo cuando esta encendida, eso incluye los programas en C que escribes y ejecutas.

La memoria esta formada por registros cada registro tiene una direccion y el tamaño de estos registros depende de la arquitectura de la computadora, por lo general las computadoras tienen una arquitectura de 32, pero computadoras mas recientes tienen arquitecturas de 64 bits. Esto quiere decir que el tamaño de los registros de la memoria son de 32 bits para arquitecturas de 32 bits y asi para las demas arquitecturas.

Read the rest of this entry »

Pues hace un rato que me intereso bastante el tema del subprocesamiento multiple, sobre todo porque actualmente el tipo de aplicaciones que se requieren son aquellas que se realizan de forma concurrente, y esto se debe al surgimiento de las maquinas muticore, realmente me interesa el tema y se me ocurrio escribir este documento donde he escrito mi primer programa con subprocesamiento multiple :S recorede que alguna vez alguien me conto que estaba trabajando en lenguaje C y tenia una lista de elementos realmente enorme, la lista tenia alrededor de algunos cientos de miles de nodos, su tarea era hacer una busqueda sobre dicha lista, el problema natural era el tiempo de busqueda de los algoritmos que implementaba, segun me conto la solucion que implemento fue la busqueda n-nearia, el caso general de la busqueda binaria, su solucion consistia en dividir la lista en n segmetos de igual tamaño y buscar de manera individual sobre cada uno de esos segmentos.

Actualmente hay maquinas conectadas entre si que comparten poder de procesamiento, en teoria una extension de la solucion de cuate que trabajaba en C, seria implementar una busqueda en una maquina con N cores, donde cada core buscaria en un segmento de la lista aplicando el algoritmo de busqueda n-nearia, lo cual deberia reducir el tiempo de busqueda drasticamente.

Read the rest of this entry »

Pues ahora quiero escribir sobre un objeto que me ha resultado muy util en algunas de las cosas que he echo y de paso esplicar el uso de algunas funciones del php, en concreto hablaremos de las siguientes funciones

1
2
3
extract()
Metodos magicos __set() y __get()
Bufer de salida ( ob_start, ob_get_contents, etc.. )

De lo que se trata esto de tener un objeto llamado plantilla al que le puedo asigar un archivo html (la plantilla) y una serie de variables para que se muestren en esa plantilla. Por cuestiones de usabilidad la plantilla se tratara de que el archivo html contenga solo pequeñas lineas de codigo en php para escupir las variables, pero esto no es una regla puesto que una variable podria tener la forma de un array y por lo tanto dentro de la plantilla necesitare un ciclo para poder desplegarla.

En ese sentido se puede ser flexible en cuanto a la cantidad de codigo php que pueda contener una plantilla, pero lo mas adecuado seria mantener la plantilla lo mas limpia posible de codigo php.

Read the rest of this entry »

Contaminacion de variables

November 20th, 2009

La contaminacion de variables o como se le conoce en ingles pollution, es un problema que se presenta en php cuando se tienen enormes bloques de codigo, el problema consiste en que durante la ejecucion del script algunas de mis variables pueden contaminarse es decir cambiar sus valores o inclusive el tipo sin que yo me de cuenta, esto es porque php no exige una declaracion de los tipos de las variables, tampoco hay restricciones en cuanto al tipo que le puedo asignar a la variables, y cuando el codigo es realmente inmeso y existe una gran catidad de variables existe el de que alguna variable importante pierda su valor.

Lo anterior puede derivar en un debugeo del script que exija demasiado tiempo, o tal vez un problema mas grave como un fallo critico en la aplicacion que se este desarrollando y pase desapercibo durante la fase de pruebas.

Actualmente php no implemente el Type Hinting como tal para evitar este problema. Es por eso que php no se considera aun como un lenguaje aceptable para desarrollar software incluso aunque en este momento haya aplicaciones bien escritas como lo es wordpress y muchos otros sistemas de foros que hay en la internet.

Read the rest of this entry »

Ahora vamos a hablar sobre el problema de validar formularios, seguramente ya habras hecho algun formulario en php y te haras dado cuenta que en ocaciones es necesario validar los datos que el usuario introduce, por ejemplo lo comun seria que un campo de texto de un formulario destinado a escribir un numero telefonico contega solamente numeros, una cierta cantidad de caracteres y tal vez podria contener guiones. Tal vez habras notado que puedes escribir toda clase de cosas en un formulario y enviar esos datos extraños a un script php para procesarlos, inclusive puedes enviar consultas sql o instrucciones de php, es ahi que por cuestiones de fiabilidad de los datos y seguridad del sistema es necesario la validacion de los datos, antes de cualquier otra accion como su procesamiento o almacenamiento en una base de datos.

Esta perfecto pensaras, lo unico que hay que hacer es validar los formularios y listo!!, resulta que surge otro problema, supon que en el lugar donde trabajas te han pedido validar los formularios del sitio de la empresa, lo que no te dijeron es que el sitio de la empresa tiene mas de 50 formularios y cada formulario tiene alrededor de entre 15 y 20 campos, validar lo anterior es una tarea enorme.

Y el enfoque para resolver este problema es la programacion orientada a objetos, lo cual me permitira reutilizar mucho del codigo que escriba y ahorrarme mucho tiempo.

La idea a de esto es crear una serie de clases que me sirvan para validar los distintos campos de un formulario, por ejemplo una clase para validar una campo telefonico, una clase para validar un campo descripcion, otra clase para validar un campo reservado para un nombre etc, y una clase especial que nos servira para manejar las demas clases.

La clase control sera capaz de darme la siguiente informacion:

  • Podra decir si se genero o no un error en el proceso de validacion.
  • Podra devolverme un error si es que lo hubo de un campo en especifico.
  • Podra devolverme todos los errores generados.

Luego vendran las clases correspondientes para validar los distintos campos, estas clases heredaran de una clase abstracta, el unico objetivo de esto es que todo objeto validador contenga un metodo validar impresindible para el proceso de validacion de formularios, y que tenga a disponibilidad una serie de metodos basicos para validar campos.

Read the rest of this entry »

¿Que es el polimorfismo?

November 16th, 2009

La etimologia de la palabra polimorfismo hace referencia a “muchas formas”, tal vez de a primera vista la palabra polimorfismo parezca ser un concepto dificil de enteder y tal vez hasta podria asustar a alguien, pero en realidad es un concepto sencillo. Pongamos un ejemplo para familiarizarnos mas con esta palabrota.

Tomemos a los humanos por ejemplo los humanos provenimos biologicamente de una jerarquia superior que son los mamiferos, los mamiferos duermen y nos han heredado la capacidad de dormir, asi que todos los humanos dormimos. Todos los humanos realizamos una accion comun que es dormir… pero existen humanos que duermen de diferentes formas, por ejemplo supongamos que tu duermes de lado, pero tu mama tambien duerme y tal vez duerme con la cara hacia arriba, otras personas duermen en posicion fetal, algunos duermen abrazando la almohada, en fin. La idea de esto es que todos los humanos dormimos pero lo hacemos de formas diferentes.

Lo mismo sucede con los objetos, es posible que la herencia y el polimorfismo sean la base de la programacion orientada a objetos. Veamos el siguiente inconveniente que surge al implementar un sistema de tienda virtual.

Supon que tienes una serie de objetos que represetan los articulos de la tienda, todos estos objetos deben de poder dar su descripcion por ejemplo nombre,precio..etc pero resulta que tienen caracteristicas diferentes y desplegar la descripcion para una television es diferente que para un paquete de frijoles o cualquier cosa que se te ocurra.

Una solucion podria ser la siguiente: meter todos los objetos articulo en un array, recorrer el array y escribir la descripcion del objeto segun la clase de la que provenga, utilizando una serie de if´s

1
2
3
4
5
6
7
8
9
10
11
12
13
//productos es un array que contiene a los articulos
for ( $i=0;$i<sizeof ($productos);$i++ ){
   if ( $productos[$i] instanceof television ){
 	//desplegar la descripcion de la tele
   }else if ( $productos[$i] instanceof frijoles ){
	//desplegar la descripcion para frijoles
	.
	.
	.
   }else if ( $productos[$i] instanceof claseN ){
	// hay tantos if´s como clases de productos tengas :S
   }
}

Read the rest of this entry »

Mi primer programa en php

November 14th, 2009

Antes de iniciar pongamos algunas reglas sobre la mesa.

Para escribir php es necesario un editor de texto, puedes usar cualquiera hasta el bloc de notas de windows, yo en lo personal utilizo homeSite porque te pone las intrucciones de colores, pero tu puedes usar el que te venga en gana

Todo el codigo php que escribas debe de ir DENTRO DE LAS ETIQUETAS < ? ?>; de la siguiente forma:

1
2
3
< ?
    todo mi codigo php que escriba...
?>

Todas las instrucciones en php deben de terminar con un punto y coma

Read the rest of this entry »