Por ejemplo: Resolver el problema de verificacin si la suma y multiplicacin de 2 nmeros complejos producen el mismo nmero complejo. Solucin en pseudo lenguaje: INICIO // Programa principal X, Y COMPLEJO A Booleano X = CREAR_COMPLEJO(3,-5) Y = CREAR_COMPLEJO(8,-3) A = VERIFICAR1(X,Y) Si A = verdadero entonces imprimir Son iguales la suma y la multiplicacin Sino imprimir NO son iguales la suma y la multiplicacin Fsi FIN funcin VERIFICAR1 (X,Y: COMPLEJO): Booleano // Funcin Verificar1 Z1,Z2 COMPLEJO Z1 = SUMAR (X,Y) Z2 = MULTIPLICAR (X,Y) RETORNAR IGUAL (Z1,Z2) f.funcin funcin VERIFICAR2 (X,Y: COMPLEJO): Booleano // Funcin Verificar2 RETORNAR IGUAL (SUMAR (X,Y), MULTIPLICAR (X,Y) ) f.funcin Se provee al lector de otra versin funcin VERIFICAR2 que realiza la misma operacin
sobre los nmeros complejos. Note que VERIFICAR1 no es una operacin del TDA
1.5 MANEJO DE MEMORIA DINAMICA Qu es la memoria dinmica? Supongamos que nuestro programa debe manipular estructuras de datos de longitud desconocida. Un ejemplo simple podra ser el de un programa que lee las lneas de un archivo y las ordena. Por tanto, deberemos leer un nmero indeterminado de lneas, y tras leer la ltima, ordenarlas. Una manera de manejar ese ``nmero indeterminado'', sera declarar una constante MAX_LINEAS, darle un valor vergonzosamente grande, y declarar un array de tamao MAX_LINEAS. Esto, obviamente, es muy ineficiente (y feo). Nuestro programa no slo quedara limitado por ese valor mximo, sino que adems gastara esa enorme cantidad de memoria para procesar hasta el ms pequeo de los ficheros. La solucin consiste en utilizar memoria dinmica. La memoria dinmica es un espacio de almacenamiento que se solicita en tiempo de ejecucin. De esa manera, a medida que el proceso va necesitando espacio para ms lneas, va solicitando ms memoria al sistema operativo para guardarlas. El medio para manejar la memoria que otorga el sistema operativo, es el puntero, puesto que no podemos saber en tiempo de compilacin dnde nos dar huecos el sistema operativo (en la memoria de nuestro PC). Memoria Dinmica. Sobre el tratamiento de memoria, GLib dispone de una serie de instrucciones que sustituyen a las ya conocidas por todos malloc, free, etc. y, siguiendo con el modo de llamar a las funciones en GLib, las funciones que sustituyen a las ya mencionadas son g_malloc y g_free. Reserva de memoria. La funcin g_malloc posibilita la reserva de una zona de memoria, con un nmero de bytes que le pasemos como parmetro. Adems, tambin existe una funcin similar llamada g_malloc0 que, no slo reserva una zona de memoria, sino que, adems, llena esa zona de memoria con ceros, lo cual nos puede beneficiar si se necesita un zona de memoriatotalmente limpia. gpointer g_malloc (gulong numero_de_bytes ); gpointer g_malloc0 (gulong numero_de_bytes ); Existe otro conjunto de funciones que nos permiten reservar memoria de una forma parecida a cmo se hace en los lenguajes orientados a objetos.