Está en la página 1de 32

CAPITULO 5 ESTRUCTURAS DE DATOS Y ALGORITMOS

ii

Sistemas Informticos

Resumen
Antes de introducirse en el mundo de la programacin de computadoras es necesario el estudio y entendimiento de las estructuras de datos y los algoritmos. Las estructuras de datos y los algoritmos repercuten de forma directa en el almacenamiento y tratamiento de la informacin, tanto desde el punto de vista fsico como funcional. Por tanto, el amplsimo mbito de la programacin se construye sobre los cimientos de dichos algoritmos y estructuras de datos, de ah la sobresaliente importancia de su conocimiento previo.

Sistemas Informticos

iii

iv

Sistemas Informticos

Tabla de Contenidos
1. 2. Introduccin...................................................................................................... 1 Tipos de datos.................................................................................................. 2 2.1. 2.2. 2.3. 2.4. 2.5. 2.6. 3. 3.1. 3.2. 3.3. 3.4. 3.5. 4. 4.1. 4.2. 4.2.1 4.2.2 4.2.3 4.3. 4.3.1 4.3.2 4.3.3 4.3.4 4.3.5 4.4. 4.5. 4.5.1 4.5.2 4.5.3 4.5.4 4.5.5 5. 6. Datos de tipo entero................................................................................ 2 Datos de tipo real .................................................................................... 3 Datos de tipo lgico................................................................................. 3 Datos de tipo carcter ............................................................................. 4 Datos de tipo enumerado........................................................................ 4 Datos de tipo subrango ........................................................................... 5 Arrays...................................................................................................... 6 Cadena de caracteres............................................................................. 7 Registros ................................................................................................. 8 Listas....................................................................................................... 9 rboles .................................................................................................... 9 Definicin de algoritmo.......................................................................... 11 Representacin de algoritmos .............................................................. 12 Pseudocdigo ................................................................................... 12 Organigramas ................................................................................... 13 Diagramas de Nassi-Schneiderman.................................................. 14 Acciones y estructuras de control ......................................................... 15 Asignaciones ..................................................................................... 15 Entradas/salidas................................................................................ 15 Decisiones......................................................................................... 15 Ciclos ................................................................................................ 16 Procedimientos ................................................................................. 17 Recursividad ......................................................................................... 18 Proceso de creacin de un programa ................................................... 20 Planteamiento del problema ............................................................. 20 Representacin de los datos............................................................. 20 Diseo de un algoritmo ..................................................................... 20 Diseo descendente ......................................................................... 21 Comprobacin y optimizacin de algoritmos..................................... 22

Estructuras de datos ........................................................................................ 6

Algoritmos ...................................................................................................... 11

Conclusiones.................................................................................................. 23 Bibliografa ..................................................................................................... 24


v

Sistemas Informticos

vi

Sistemas Informticos

Tabla de ilustraciones
Figura 1.- Representacin de un array de 7 elementos ................................................. 7 Figura 2.- Representacin de un array rectangular de 3x5 elementos........................... 7 Figura 3.- Representacin de una lista........................................................................... 9 Figura 4.- Representacin de un rbol ......................................................................... 10 Figura 5.- Pseudocdigo............................................................................................... 12 Figura 6.- Smbologa de un organigrama .................................................................... 13 Figura 7.- Organigrama de un programa ...................................................................... 13 Figura 8.- Simbologa de los diagramas de Nassi-Schneiderman................................ 14 Figura 9.- Diagrama de Nassi-Schneiderman de un programa .................................... 14 Figura 10.- Estructuras de diferentes ciclos ................................................................. 17 Figura 11.- rbol de diseo descendente..................................................................... 21

Sistemas Informticos

vii

viii

Sistemas Informticos

1.

Introduccin

Las computadoras son mquinas para el tratamiento automtico de la informacin. Esta informacin no se almacena ni se representa al azar, sino que debe organizarse o estructurarse en forma adecuada para obtener un rendimiento razonable en su memorizacin, tratamiento y recuperacin. El tratamiento de la informacin se debe realizar de un modo sistemtico. La resolucin de cualquier problema conlleva el encontrar un mtodo de resolucin expresado con la suficiente precisin para poder ser descompuesto en acciones realizables por la computadora (esto es lo que se conoce como algoritmos).

-1-

Estructuras de datos y algoritmos

2.

Tipos de datos

Se denomina dato a cualquier objeto manipulable por la computadora. Un dato puede ser un carcter ledo de un teclado, informacin almacenada en un disco, un nmero que se encuentra en memoria principal, etc. Cuando utilizamos una computadora para resolver un problema debemos hacer una abstraccin de sta y de las magnitudes que influyen en ella. Dichas magnitudes deben ser representadas por datos. La representacin de una magnitud como un dato se puede entender como una aplicacin que hace corresponder un dato a cada valor de la magnitud. Esta correspondencia debe definir el conjunto de valores de la magnitud. Es conveniente, adems, que sea unvoca, es decir, que a dos valores de magnitud distintos les asocie datos distintos. Para que se pueda operar con los datos es necesario que existan unas operaciones internas en el conjunto de datos, que sean semejantes a las operaciones usuales en el conjunto de magnitudes. Dichas operaciones deben cumplir que la imagen de la transformacin del resultado de una operacin en el conjunto de magnitudes sea igual al resultado de las operaciones correspondientes en el conjunto de datos sobre las imgenes de los operandos. Para que los resultados obtenidos en el conjunto de datos puedan ser interpretados es necesario que exista una transformacin de stos al conjunto de magnitudes. Se denomina tipo de dato al conjunto de la transformacin y de las operaciones y funciones internas y externas definidas sobre el conjunto de datos. A continuacin se presentan algunos de los tipos de datos bsicos ms usuales en informtica. No obstante, no todos los tipos de datos anteriores existen en todos los lenguajes de programacin, sino que simplemente sirven de base orientativa debido a la gran variedad de lenguajes que existe.

2.1. Datos de tipo entero


El tipo entero es una representacin del conjunto de los nmeros enteros. La representacin es posible para un subrango de magnitudes enteras centrado en el origen: nmeros entre 2
n-1

-1 y -2n-1.

Sistemas Informticos

Estructuras de datos y algoritmos

La razn de esta limitacin est en la necesidad de utilizar un espacio finito, y fijo, para cada dato. El nmero de datos distintos de tipo entero que se pueden generar es 2 , donde n es el nmero de bits que se utiliza en la representacin. Por tanto, si se modifica el nmero de bits, se obtienen distintos tipos enteros. Cualquier operacin con datos de tipo entero es exacta salvo que se produzcan desbordamientos.
n

Ejemplos: x 21; y -34; z 0;

2.2. Datos de tipo real


El tipo de datos real es una representacin del conjunto de los nmeros reales. Esta representacin no suele permitir el almacenamiento de nmeros muy grandes o muy pequeos, lo que conlleva que se produzcan desbordamientos (overflows) o agotamiento (underflows). La limitacin del nmero de bits usados para representar la mantisa provoca una falta de precisin en la representacin. Esto es debido a que la aplicacin que define al tipo real no es unvoca. Es decir, cada dato de tipo real es la imagen de un conjunto infinito de nmeros reales, concretamente representa a un intervalo de la recta real. En cada operacin pueden producirse errores por falta de precisin en la representacin (errores de redondeo), que se acumulan durante todo el proceso de clculo.

Ejemplos: y 4,56000987000001; x 23,236666666666666667;

2.3. Datos de tipo lgico


Los datos de tipo lgico representan valores lgicos o booleanos. Pueden tomar uno de entre dos valores: verdadero o falso (abreviadamente V, F o 0,1)

Sistemas Informticos

Estructuras de datos y algoritmos

Sobre los valores lgicos pueden actuar los llamados operadores lgicos. Los operadores lgicos son: Y, O y NO (en ingls AND, OR y NOT). En algunos lenguajes de programacin hay definidos sobre los datos de tipo lgico otros operadores booleanos, como son: NO-Y, NO-O y NO-exclusivo (en ingls NAN, NOR y XOR).

Un caso particularmente importante de valor de tipo lgico es el obtenido como resultado de una operacin de relacin sobre datos de un tipo para el que existe una relacin de orden. Una relacin es una expresin formada por dos operandos pertenecientes a un mismo tipo ordenado y un operador de relacin. El resultado de una operacin de relacin es el valor lgico verdadero si la relacin expresada es cierta, y falso en caso contrario.

2.4. Datos de tipo carcter


Los datos de tipo carcter representan elementos individuales de conjuntos finitos y ordenados de caracteres. El conjunto de caracteres representado depende de la computadora. Uno de los conjuntos ms usuales es el ASCII. No hay ninguna operacin interna sobre datos de tipo carcter (salvo la asignacin). Normalmente existen funciones de conversin de tipo, como por ejemplo la que asocia a cada dato de tipo carcter un valor entero, que indica su posicin en el cdigo.

Ejemplos: x a; y 4;

2.5. Datos de tipo enumerado


Los datos de tipo enumerado se definen explcitamente dando un conjunto finito de valores. Al contrario de los tipos vistos anteriormente, no es un tipo normalizado. Puede haber muchos tipos de datos enumerados distintos dentro de un programa en un lenguaje determinado.

Sistemas Informticos

Estructuras de datos y algoritmos

Los datos vistos en las secciones anteriores son usualmente tratados por la computadora a nivel hardware. Mientras que el tipo de datos enumerado y el tipo de datos subrango slo son interpretados por el software. Internamente los datos de tipo enumerado se almacenan como valores enteros. A cada valor del tipo se le asocia un entero consecutivo, comenzando por cero.

Ejemplo: x { azul(0) , rojo(1) , verde(2) , amarillo(3) };

2.6. Datos de tipo subrango


El tipo subrango se define a partir del tipo entero, carcter o de un tipo enumerado. Un dato de tipo subrango puede tomar determinados valores del tipo original, a partir del cual se ha definido el subrango, entre un mnimo y un mximo. Con datos de tipo subrango se pueden realizar las operaciones definidas para el tipo original.

Sistemas Informticos

Estructuras de datos y algoritmos

3.

Estructuras de datos

Los tipos de datos vistos en el apartado anterior se suelen denominar elementales, ya que se pueden utilizar para construir tipos de datos ms elaborados. Una estructura de datos o tipo de dato estructurado es un tipo de dato construido a partir de otros tipos de datos. Un dato de tipo estructurado est compuesto por una serie de datos de tipos elementales y alguna relacin existente entre ellos. Una estructura de datos se dice que es homognea cuando todos los datos elementales que la forman son del mismo tipo. En caso contrario se dice que la estructura es heterognea. Siempre que se utilice un dato en un programa debe estar determinado su tipo, para que el traductor sepa cmo debe tratarlo y almacenarlo. En el caso de datos de tipos elementales, el tipo del dato determina el espacio que se usa en memoria. Esto puede no ocurrir si el dato es de un tipo estructurado. Algunos tipos estructurados (listas y rboles) se declaran sin especificar el nmero de componentes que van a tener. Durante la ejecucin del programa la estructura de datos puede ir creciendo; es decir, ocupando ms memoria. Si se necesitase ms memoria de la disponible en el programa, ste terminara por error. Una estructura de datos que es gestionada de esta forma se dice que es dinmica, ya que la memoria que necesita se asigna dinmicamente. Por el contrario una estructura de datos que siempre ocupa el mismo espacio se dice que es esttica. Los tipos de datos ms empleados son: arrays, cadena de caracteres, registros, listas y rboles.

3.1. Arrays
El array es la estructura de datos ms usual. Existe en todos los lenguajes de programacin. Un array es una estructura de datos formada por una cantidad fija de datos de un mismo tipo, cada uno de los cuales tiene asociado uno o ms ndices que determinan de forma unvoca la posicin del dato en el array. Para cada combinacin posible de valores de ndices existe uno y slo un dato del tipo constituyente, o elemento del array.

Sistemas Informticos

Estructuras de datos y algoritmos

En la siguiente ilustracin se representa un array como una matriz de un solo ndice donde se pueden almacenar valores de 1 a 7. Es una estructura de celdas.

Figura 1.- Representacin de un array de 7 elementos

En la siguiente figura se representa un array rectangular. Cada elemento de esta matriz est especificado por un par ordenado de nmeros, el valor de los dos ndices.

Figura 2.- Representacin de un array rectangular de 3x5 elementos

En general, al nmero de ndices del array se le denomina nmero de dimensiones del array. La dimensin de la formacin est dada por los valores mximos de los ndices, y el nmero total de elementos es el producto de estos valores mximos.

3.2. Cadena de caracteres


Una cadena de caracteres (String) es una estructura de datos formada por una secuencia de caracteres. En una variable de tipo cadena se puede almacenar una palabra, una frase, una matrcula de un coche, una temperatura, etc. Las constantes de este tipo se escriben normalmente entre comillas.

Ejemplo: x hola qu tal;

Sistemas Informticos

Estructuras de datos y algoritmos

Sobre datos de tipo cadena de caracteres se pueden realizar, entre otras, las siguientes operaciones: Concatenacin: unin de dos cadenas para formar una sola. Extraccin de subcadena: extraer un fragmento de una cadena. Comparacin de cadenas: determinar si dos cadenas son iguales o no. Obtencin de longitud: obtener el nmero de elementos que forman la cadena.

3.3. Registros
Un registro es una estructura de datos formada por unin de elementos que contienen informacin relativa a un mismo ente. A los elementos que componen el registro se les denomina campos. Cada campo puede ser de un tipo determinado, independientemente de los dems campos. Los campos dentro del registro aparecen en un orden determinado, y se identifican por un nombre. Para definir un registro es necesario especificar el nombre y tipo de cada campo. Los campos pueden ser de un tipo estructurado.

Ejemplo: Class Curso { Integer horas; String nombre; String fecha; String lugar; }

Sistemas Informticos

Estructuras de datos y algoritmos

3.4. Listas
Una lista est formada por un nmero variable de datos (elementos) de un mismo tipo, ordenados segn una secuencia lineal. Cada elemento, salvo el primero, tiene un predecesor en la lista. Todos los elementos, salvo el ltimo, tienen un sucesor. La lista es una estructura dinmica. Podemos definir una lista como una estructura de datos formada por registros de, al menos, dos campos, en que uno de ellos contiene informacin que permite localizar al siguiente registro en la lista segn una secuencia dada. La lista no es direccionable, tan slo se puede recuperar un elemento accediendo previamente a los que le anteceden, y por tanto, en cada momento hay slo un elemento en disposicin de ser procesado. Un tipo de lista especialmente importante es la pila o lista de LIFO, en que se aaden y eliminan elementos slo en un extremo; es decir, no se puede eliminar ms que el elemento que ocupa el primer lugar de la lista en ese momento. Las pilas se utilizan en hardware y software para almacenar las direcciones de instrucciones desde las que se hacen llamadas a subrutinas. Se denominan cola o listas FIFO a una lista en que las inserciones se realizan slo en el final y slo se puede acceder o eliminar en un instante dado el primer elemento de la lista. Las listas se memorizan utilizando punteros.

Figura 3.- Representacin de una lista

3.5. rboles
Un rbol es una estructura de datos formada por elementos del mismo tipo, llamados nodos, relacionados de tal modo que el rbol puede descomponerse en un nodo,

Sistemas Informticos

Estructuras de datos y algoritmos

llamado raz, y un conjunto finito de objetos de tipo rbol, llamados subrboles del nodo raz.

Figura 4.- Representacin de un rbol

Se denomina hijo de un nodo a cada uno de los nodos que dependen de l. Se denomina grado de un nodo al nmero de subrboles que sustenta. El orden de un rbol es el mayor de los grados de sus nodos. Un rbol es una estructura dinmica. Su representacin en el interior de una computadora se realiza utilizando punteros. Cada nodo puede incluir varios punteros: uno para dirigirse al padre, y cada uno de los restantes para dirigirse a cada uno de los hijos. Esto permite moverse con gran facilidad dentro del rbol en cualquier direccin, pero presenta el inconveniente de que el nmero de punteros para cada nodo no es fijo y puede ser excesivamente grande. Normalmente se utilizan ciertas tcnicas para solucionar este problema y permitir que todos y cada uno de los nodos tengan un nmero de referencias o punteros fijo.

Sistemas Informticos

10

Estructuras de datos y algoritmos

4.

Algoritmos

Para solucionar un problema real es necesario encontrar un mtodo de resolucin del problema, y posteriormente descomponerlo en acciones sencillas, que la computadora sea capaz de realizar. De ello se encargan los algoritmos.

4.1. Definicin de algoritmo


Para que un procedimiento pueda ser implantado en una computadora, o en otra mquina capaz de interpretar instrucciones, debe cumplir determinados requisitos: El procedimiento debe estar compuesto de acciones bien definidas. El procedimiento debe estar formado por una secuencia finita de operaciones. El procedimiento debe acabar en un tiempo finito.

Un procedimiento o mtodo de solucin, para resolver un problema, que cumpla estos requisitos se dice que es un algoritmo que resuelve ese problema. Se puede definir algoritmo como un procedimiento no ambiguo que resuelve un problema. Un procedimiento es una secuencia de operaciones bien definidas, cada una de las cuales requiere una cantidad finita de memoria y se realiza en un tiempo finito. Normalmente interesa, no slo encontrar un algoritmo, sino que ste sea suficientemente bueno. La calidad de un algoritmo se mide, bsicamente, por dos factores: El tiempo que se necesita para ejecutarlo. Los recursos que se necesitan para implantar el algoritmo.

Por tanto es necesario, una vez diseado el primer algoritmo, realizar una evaluacin del mismo. Si se decide que ste no es eficiente, ser necesario o bien disear uno nuevo, o bien optimizar el original.

11

Sistemas Informticos

Estructuras de datos y algoritmos

4.2. Representacin de algoritmos


Hay diferentes mtodos para representar los algoritmos. Por supuesto, un mtodo consiste narrar o enunciar el algoritmo. Para facilitar esta descripcin es frecuente utilizar un lenguaje de descripcin de algoritmos o pseudocdigo. Existen otros procedimientos de representacin que utilizan grficas o diagramas. Entre estos ltimos cabe destacar los organigramas o diagramas de flujo y los diagramas de Chapin o diagramas de Nassi-Schneiderman.

4.2.1 Pseudocdigo
No hay reglas fijas para la representacin narrativa de algoritmos. No obstante para describir algoritmos est muy extendido el uso de las estructuras de control del lenguaje Pascal entre otros. En este caso, como el objetivo no es escribir un programa para ser ejecutado por una computadora, no hay reglas sintcticas escritas, el inters se centra en la secuencia de instrucciones. Este tipo de descripcin se denomina pseudocdigo. La utilizacin de pseudocdigo presenta las ventajas de ser ms compacto que un organigrama, ser ms fcil de escribir, y ser ms fcil de transcribir a un lenguaje de programacin. Ejemplo:

Figura 5.- Pseudocdigo

Sistemas Informticos

12

Estructuras de datos y algoritmos

4.2.2 Organigramas
Los organigramas son herramientas grficas para representar algoritmos. Se les conoce tambin como diagramas de flujo. Un organigrama est compuesto por una serie de smbolos unidos por flechas. Los smbolos representan acciones y las flechas el orden de realizacin de las acciones.

Figura 6.- Smbologa de un organigrama

Figura 7.- Organigrama de un programa

13

Sistemas Informticos

Estructuras de datos y algoritmos

4.2.3 Diagramas de Nassi-Schneiderman


Los diagramas de Nassi-Schneiderman tienen la ventaja de adecuarse a las tcnicas de programacin estructurada. Adems, estos organigramas tienen otras ventajas respecto a los organigramas clsicos, como son Se leen de arriba abajo, al igual que un programa estructurado. Permiten el uso de tcnicas de diseo descendente Favorecen la particin de los programas en mdulos pequeos. Resaltan ms las partes generales.

Figura 8.- Simbologa de los diagramas de Nassi-Schneiderman

Figura 9.- Diagrama de Nassi-Schneiderman de un programa

Sistemas Informticos

14

Estructuras de datos y algoritmos

4.3. Acciones y estructuras de control


A continuacin se vern las distintas acciones que pueden utilizarse en un algoritmo o en un programa y las estructuras que se pueden usar para controlar el orden de realizacin de stas.

4.3.1 Asignaciones
Una asignacin consiste en la evaluacin de una expresin y en el almacenamiento de su valor en una variable. Este tipo de sentencias se ejecutan siempre secuencialmente; es decir, a continuacin de la asignacin se realiza siempre la accin siguiente del programa. Ejemplo: x 56; y x;

4.3.2 Entradas/salidas
Las operaciones de entrada/salida se utilizan para que el programa intercambie informacin con un medio externo. En una operacin de entrada o lectura, el programa asigna a una variable un valor almacenado en un soporte masivo o generado por un perifrico. En una operacin de salida o escritura el programa transfiere a un dispositivo de memoria masiva, o a un perifrico, el valor de una variable. Como ejemplos tpicos se pueden destacar la lectura de los caracteres introducidos por teclado y la salida de caracteres generados por un programa en la pantalla.

4.3.3 Decisiones
Las decisiones son acciones de control de flujo. Permiten modificar el orden en que se realizan otras acciones. Una decisin posee siempre un argumento, que normalmente debe ser una expresin lgica. Dependiendo del valor de la expresin lgica se ejecutan las acciones que estn en uno u otro camino, a partir de la decisin. Una decisin permite, por tanto, bifurcar en dos caminos el flujo de acciones.
15 Sistemas Informticos

Estructuras de datos y algoritmos

Ejemplo: programa que devuelve el mximo de dos nmeros a y b: Si ( a > b ) { devolver a ; FIN ; } Si no { devolver b ; FIN ; }

4.3.4 Ciclos
Un ciclo es una estructura de control que indica la repeticin de un segmento de programa. El ciclo puede ser repetitivo, en cuyo caso el segmento se repite un nmero fijo de veces. En este tipo de ciclos existe una variable de control de ciclo a la que automticamente se le asignan valores sucesivos durante la ejecucin del ciclo. En un ciclo repetitivo se debe especificar siempre el valor inicial y final que toma el contador del ciclo, y el incremento a aplicar en cada iteracin, si ste es distinto a uno. Otra estructura de control usual es el ciclo condicional, en el que un segmento de programa se repite mientras (ciclo while) se cumpla una condicin o hasta que (ciclo until) se deje cumplir una condicin.

Sistemas Informticos

16

Estructuras de datos y algoritmos

Figura 10.- Estructuras de diferentes ciclos

Ejemplo: lmite 45 ; contador leer_de_teclado () ; mientras ( contador < lmite ) { contador contador + 1 ; } imprimir_por_pantalla ( contador ) ; FIN ;

4.3.5 Procedimientos
Un procedimiento o subrutina es un fragmento del programa que realiza una tarea concreta, y recibe un nombre por el que puede ser llamado. Puede tener una serie de variables denominadas argumentos que permiten el paso de informacin entre el programa y el procedimiento.

17

Sistemas Informticos

Estructuras de datos y algoritmos

El uso de procedimientos evita la duplicacin de grupos de sentencias en diferentes partes del programa y facilita la construccin y comprensin de los programas, ya que es ms fcil disear y poner a punto un segmento de programa pequeo que uno grande.

Ejemplo: procedimiento que suma dos nmeros enteros:

Sumar (entero a, entero b) { entero resultado a + b; devolver resultado; }

Utilizacin del procedimiento dentro de un programa:

Mientras ( x < 1000 ) { acumulado Sumar ( x , 4 ) } devolver acumulado;

4.4. Recursividad
El concepto de recursividad, en cualquiera de los mbitos a los que se aplica, hace referencia a la definicin de una entidad en funcin de s misma. La recursividad probablemente no est muy bien vista en algunos campos como la lingstica, pero es una herramienta muy til y potente en programacin. La recursividad puede verse tambin como el proceso de resolver un problema largo reducindolo a uno o ms subproblemas que son idnticos en su estructura al

Sistemas Informticos

18

Estructuras de datos y algoritmos

problema original y, de algn modo, ms simples de resolver. Una vez que se realiza la subdivisin original, se usa la misma tcnica de descomposicin para dividir cada uno de esos subproblemas en otros todava ms simples. Finalmente, los subproblemas se hacen tan simples que se pueden resolver sin ms subdivisiones y la solucin final obtiene reensamblando los componentes resueltos. La recursividad est basada en la utilizacin de procedimientos, y en una tcnica de resolucin aplicable a problemas con estructura recursiva.

En trminos del lenguaje de programacin, supone utilizar un procedimiento que se va a llamar a s mismo, para resolver parte del problema. La solucin recursiva no es nunca la nica posible. No obstante, es la solucin natural del problema y, por tanto, la ms clara. Si al resolver el problema es necesario utilizar pilas, el uso de procedimientos recursivos puede ser conveniente. En caso contrario, normalmente es desaconsejable, pues una solucin recursiva es ms lenta que una solucin en ciclo.

Ejemplo: clculo recursivo del factorial de un nmero:

Factorial (entero n) { Si (n es_igual_a 0) devolver 1; Si no devolver ( n * Factorial (n-1) ); Fin }

19

Sistemas Informticos

Estructuras de datos y algoritmos

4.5. Proceso de creacin de un programa


La concepcin de cualquier programa comienza con el planteamiento del problema. Cuando se ha adquirido una idea clara y precisa del problema, se debe escoger una representacin para los diferentes datos que intervienen en l. Hecho esto, se puede pensar en redactar un algoritmo que resuelva el problema. Este algoritmo ha de depurarse y optimizarse. El paso siguiente es redactar un programa segn el algoritmo encontrado, que habr de ser igualmente depurado. Por ultimo, se debe optimizar y documentar el programa.

4.5.1 Planteamiento del problema


Es necesario conocer perfectamente el problema antes de comenzar con su resolucin. Esto es, saber de que informacin, datos se dispone, cual es su significado, que valores pueden tomar y que relaciones hay entre ellos. Se deben detectar omisiones en los datos de partida o ambigedades en la especificacin de los resultados.

4.5.2 Representacin de los datos


Si la representacin no es la adecuada, el algoritmo no ser bueno. Si el problema a resolver es complejo, ser necesario establecer un proceso de ajuste entre las estructuras de datos y algoritmos, hasta llegar a una solucin aceptable.

4.5.3 Diseo de un algoritmo


Esta es, junto con la fase anterior, la parte ms delicada del desarrollo de un programa. Ambas etapas estn, adems, ntimamente relacionadas. Siempre habr problemas lo suficientemente complejos, como para que la mente humana no pueda entenderlos en conjunto. Por tanto, hay un lmite de complejidad, por encima del cual es difcil moverse sin ayudas, independientemente de la experiencia que se tenga. No obstante, se puede ir descomponiendo el problema a resolver en problemas cada vez ms simples, hasta llega a un nivel que seamos capaces de resolver

Sistemas Informticos

20

Estructuras de datos y algoritmos

directamente. sta es en esencia la idea del diseo descendente, que se tratar a continuacin.

4.5.4 Diseo descendente


El diseo descendente es una tcnica natural de desarrollo de algoritmos. Consiste en comenzar trabajando a nivel abstracto, para ir dividiendo el problema en sus partes naturales. De esta forma el problema a resolver se descompone en otros ms simples, hasta llegar a problemas suficientemente pequeos como para ser resueltos directamente. Usando este mtodo, se van generando soluciones del problema a distintos niveles de detalle. En cada nivel la solucin podr ser comprobada y depurada, antes de pasar a resolver los mdulos que la forman a un nivel ms bajo. El algoritmo resuelto de esta forma, se puede representar por un rbol en que cada nodo es un mdulo (un problema o accin hipottica). El nodo raz es el problema de partida. El algoritmo ser correcto si la solucin dada a cada nivel es correcta. El programa podra construirse de abajo a arriba creando primero procedimientos que resuelvan los mdulos de detalle, que una vez comprobados sern usados por otros procedimientos ms generales. Otra ventaja del diseo descendente es su adaptacin a la programacin estructurada. Un programa estructurado puede representarse en forma de rbol.

Figura 11.- rbol de diseo descendente

21

Sistemas Informticos

Estructuras de datos y algoritmos

4.5.5 Comprobacin y optimizacin de algoritmos


Un ltimo paso a realizar cuando se desarrolla un algoritmo es comprobar que es correcto, y que realiza las operaciones que se desean. Para comprobar un algoritmo, se puede efectuar un seguimiento del mismo. Esto consiste en ejecutar manualmente las operaciones descritas en el algoritmo, segn el orden especificado en el mismo, anotando el valor que toma cada dato durante el proceso. Si dos partes del algoritmo son completamente independientes se puede probar el funcionamiento de cada una de ellas independientemente. En la resolucin de cualquier problema es necesario usar variables, para almacenar los datos que se han de manejar. Para que el algoritmo sea legible, se deben especificar en l todas las variables usadas, indicando su tipo y contenido. La optimizacin del algoritmo normalmente consiste en buscar uno mejor, para sustituirlo total o parcialmente. Para realizarlo es necesario realizar una evaluacin del mismo. La evaluacin es normalmente una tarea compleja consistente en calcular el nmero de sentencias que se habrn de ejecutar.

Sistemas Informticos

22

Estructuras de datos y algoritmos

5.

Conclusiones

Las estructuras de datos y algoritmos constituyen elementos bsicos en el almacenamiento y tratamiento de la informacin. El conocimiento y entendimiento del concepto de algoritmo, sus representaciones y mtodos que desembocan en el desarrollo de programas constituyen un paso previo indispensable para introducirse en el mbito de la programacin. Han de conocerse y manejarse con facilidad los tipos de datos y las tcnicas de creacin, representacin y refinamiento de algoritmos para la futura construccin de programas de calidad.

23

Sistemas Informticos

Estructuras de datos y algoritmos

6.

Bibliografa
[Prieto et al., 2001] Prieto A., Lloris A. y Torres J.C. - Introduccin a la informtica. Editorial: Mc Graw Hill.

[Alcalde et al., 1988] Alcalde Lancharro; Garca y Peuelas Informtica bsica. Editorial: Mc Graw-Hill.

[Eguluz, 1999] Eguluz Morn, Andoni Estructuras de datos y algoritmos. Editorial: Mc Graw-Hill.

[Joyanes, 1996] Joyanes, L. Fundamentos de programacin. Algoritmos y estructuras de datos. 2 edicin. Editorial: Mc Graw-Hill.

Sistemas Informticos

24

También podría gustarte