Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Curso de
ALGORITMOS
-2001-
2
Indice
1. INTRODUCCIÓN........................................................................................................... 1
2. LOGICA Y ALGORTIMOS........................................................................................... 3
3. METODOS DE PROGRAMACIÓN.............................................................................. 6
5. VARIABLES................................................................................................................... 10
6. CONSTANTES............................................................................................................... 11
7. EXPRESIONES............................................................................................................... 11
9. PSEUDOCÓDIGO.......................................................................................................... 24
COMANDOS
SENTENCIAS DE SELECCIÓN
SENTENCIAS DE ITERACIÓN
PILAS
LISTAS ENLAZADOS
COLAS
ARBOLES
GRAFOS
3
INTRODUCCIÓN
Todos sabemos que si queremos resolver una situación o un problema determinado, necesitamos seguir una
serie de pasos que nos permitan llegar a una solución. En otras palabras, debemos ejecutar determinadas
instrucciones en forma ordenada con el fin de obtener los resultados deseados. Para aclarar esto, utilicemos el
siguiente ejemplo :
Para realizar esta llamada debemos acercarlos a ese teléfono y seguir las instrucciones que están escritas en el
mismo aparato y dicen:
Lámina N° 1
Deposite moneda
Si desea prolongar la conversación, deberá volver a depositar una moneda sin colgar
el auricular, extendiéndose la llamada por 3 minutos más, lo que puede repetirse
consecutivamente
Si las ejecutamos ordenadamente, hemos resuelto la situación que consistía en comunicarnos con nuestro
amigo, a no ser que se produzcan condiciones ajenas como que el teléfono público esté descompuesto, el del
amigo esté ocupado ó que no esté en el momento de la llamada.
Estas instrucciones han sido escritas para facilitarle la tarea a una persona cuando desee realizar una llamada.
4
Pero cuando las instrucciones no van a ser entregadas a una persona para que las realice, sino a un computador,
es necesario utilizar un medio de comunicación apropiado, es decir, un lenguaje que permita la compresión de
ellas por parte de la máquina.
En este caso al conjunto de instrucciones escritas que componen la solución se le denomina programa y de ahí
derivan los nombres de programador, que es la persona que traduce el problema a un lenguaje entendible por el
computador y programar, que es el nombre que se le da a la labor de traducción.
Finalmente, se puede decir que la función de un programa consiste en proporcionar las instrucciones
particulares a la unidad central de proceso que tiene todo computador para que esta realice los cálculos que se
necesitan. La tarea del programador es producir la secuencia adecuada de instrucciones para resolver el
problema
5
LÓGICA Y ALGORITMOS
Un error común del programador es que trate solucionar el problema que se plantea durante la escritura del
programa, saltándose así toda la etapa de clarificación y descripción del método de solución. Es como si se
iniciara un viaje conociendo el destino, pero ignorando el camino que lo conducirá a él.
Por lo tanto, es necesario plantearse en primer lugar el problema de acuerdo a un método determinado, y luego,
una vez que se tienen claros los pasos que se van a seguir y cómo se van a realizar para llegar a un resultado,
traducirlo a un programa para ser ejecutado en un computador.
Se puede definir la lógica como una disposición mental que permite describir la solución a un problema,
mediante pasos secuenciales, de tal forma que se ejecute una sola acción a la vez.
Muchas veces utilizamos la lógica para resolver una situación o dificultad y no nos damos cuenta. Un ejemplo
de esto es cuando debemos cruzar una calle desde una vereda a la otra y que tiene tránsito en un sentido.
Nuestra mente debiera funcionar de la siguiente manera :
Lámina N° 2
Miramos en contra del sentido del tránsito para ver si viene un vehículo cerca
Si no es así, esperamos hasta que el auto pase frente a nosotros y volvemos a mirar
nuevamente si viene otro, hasta que no venga alguno o se encuentre demasiado lejos
6
Algunas definiciones de algoritmos son:
Lámina N° 3
Medio por el cuál se explica como se puede resolver un problema en una cantidad
finita de pasos
Lámina N° 4
Debe ser finito (debe terminar en algún momento, o sea tener un número finito
de pasos)
Recetas de cocina
Instrucciones para cambiar la rueda de un auto
Instrucciones para realizar una llamada telefónica
Pasos para escribir una carta
Como envolver un regalo de navidad
Solicitar un libro en una biblioteca
Pasos para depositar un cheque
Resolución de operaciones matemáticas
Se tienen escritos en una hoja, tres números distintos enteros desordenados. Se debe determinar el mayor de
ellos. Si se observan los números, se puede señalar casi de inmediato, el número mayor. Pero este resultado
es producto de un proceso mental, del cual algunos pasos se efectúan casi inconscientemente. Al analizar
este proceso y escribir los pasos dados se obtiene el siguiente algoritmo:
7
Lámina N° 5
Lámina N° 6
MÉTODOS DE PROGRAMACIÓN
Es un método de pasos expansivos por niveles. El primer nivel resuelve totalmente el problema y el segundo
nivel y los siguientes son refinamientos sucesivos del primero.
Tomemos un ejemplo:
Lámina N° 7
2. a. Obtener ingredientes
b. Mezclar ingredientes
c. Servir puré
Lámina N° 8
Ejercicio N°1 : Crear un algoritmo que permita determinar el mayor entre dos números
Ejercicio N°2 : Crear un algoritmo que permita determinar la suma de los diez primeros
números naturales
Ejercicio N°3 : La empresa “ACME” pide determinar el sueldo que gasta mensualmente
si todos los empleados ganan lo mismo
( $ / Hr. )
2. a. Obtener datos
b. Realizar cálculos de gastos
d. Mostrar resultado
2. a. Obtener datos
b. Solicitar libro en el mesón
c. Llevar libro
El principal objetivo de todo computador es el manejo de datos. Los programas de computador contienen
ciertos valores que permiten realizar diferentes tipos de operaciones. Un programa necesita de elementos para
llegar a una solución. Estos son las instrucciones y los datos. Se puede decir que los datos son los antecedentes
necesarios para llegar al conocimiento exacto de una cosa o para deducir las consecuencias de un echo.
Estos datos pueden ser las cifras de ventas semanales de un determinado producto, nombres y direcciones de
una lista de correos, calificaciones finales de un curso, mediciones de un experimento, etc.
Lámina N° 9
TIPOS DE DATOS
11
ENTERO: Dato con el cual se puede realizar una operación aritmética y cuyo origen son los dígitos
del sistema decimal. También se denominan números completos pudiendo ser positivos o
negativos.
REAL: Dato con el cual se puede realizar una operación aritmética y cuyo origen son los dígitos
del sistema decimal. Contienen siempre un punto decimal en que las fracciones se
representan como números decimales. También se pueden ser positivos o negativos.
CARACTER: Se agrupan en series de caracteres o String . Lo conforman las letras del alfabeto ( A..Z,
a..z); los dígitos ( 0..9 ) y símbolos especiales ( % , $ , & , espacio , etc ).
LOGICO: Es aquel que puede tomar o adoptar sólo dos valores Verdadero (True) o Falso (False)
12
VARIABLES
Los datos con los cuales trabaja un programa se sitúan en objetos llamados variables.
Lámina N° 10
24 Valor de la variable
El valor de una variable puede ser examinado tan a menudo como sea necesario para borrarlo o cambiarlo
El tipo de dato de una variable es el conjunto de datos que puede tomar. En la mayoría de los lenguajes de
programación se permiten las variables enteras, reales, caracteres y booleanas o lógicas.
Una variable es un objeto o conjunto de datos cuyo valor puede cambiar durante el desarrollo del algoritmo o
ejecución del programa.
La acción que consiste en atribuir un valor o dato a una variable se llama asignación.
CONSTANTES
Es un conjunto de datos (objetos) que permanecen sin cambios durante el desarrollo del algoritmo o la
ejecución del programa. En la mayoría de los lenguajes de programación se permiten las constantes enteras,
reales, caracteres y booleanas o lógicas.
La acción que consiste en atribuir un valor o dato a una variable se llama asignación.
EXPRESIONES
Son combinaciones de constantes, variables, símbolos de operación y nombres de funciones especiales.
Cada expresión tiene un valor que se determina tomando los valores de las variables y constantes implicadas y
ejecutando las operaciones indicadas. Las expresiones se clasifican en dos tipos:
EXPRESIONES ARITMÉTICAS
Son análogas a las fórmulas matemáticas. Las variables y constantes son numéricas y las operaciones son las
aritméticas. Los operadores más comunes son:
Lámina N° 11
SIMBOLO SIGNIFICADO
^, ** Exponenciación
* Multiplicación
/ División (Real)
+ Suma
- Resta
DIV División entera
MOD Módulo (Residuo)
= Asignación
( ) Paréntesis
14
Permiten realizar comparaciones de valores de tipo numérico o carácter. Sirven para expresar las condiciones en
algoritmos o programas. El valor sólo puede ser Verdadero (True) o Falso (False) Una expresión booleana se
genera a través de dos tipos de operadores:
Operadores relacionales:
Lámina N° 12
SIMBOLO SIGNIFICADO
> Mayor que
< Menor que
= Igual a
<> Distinto a
>= Mayor o igual a
<= Menor o igual a
Operadores lógicos:
Lámina N° 13
SIMBOLO SIGNIFICADO
NOT NO Lógico
AND Y Lógico
OR O Lógico
Tabla lógica:
Lámina N° 14
A B NOT A A AND B A OR B
V V F V V
V F F F V
F V V F V
F F V F F
15
Ejemplo:
A= Falso
B= Verdadero
C= 3
D= 5
( V AND F ) OR V
F OR V
V
16
Diagrama N-S
Diagrama de Flujo
Pseudocódigo
Conocidos como Diagramas N-S o Diagramas de Chapin. Las acciones se escriben dentro de cajas sucesivas.
Lámina N° 15
DIAGRAMAS DE FLUJO
Es una representación que utiliza símbolos unidos por flechas. Dentro de cada símbolo o caja se indican las
operaciones que deben ser realizadas.
Lámina N° 16
DIAGRAMA DE FLUJO
18
Lámina N° 17
Permite enlazar dos o más partes del diagrama dentro de una misma
página
19
Lámina N° 18
INICIO
ECHAR UN
TERRÓN DE
AZUCAR
NO SE
ECHARON 3
TERRONES
SI
ECHAR CAFE
NO ESTA
LLENA LA
TAZA
SI
FIN
En las siguientes páginas se muestran algunos algoritmos simples representados en diagramas de flujos
20
Lámina N° 19
21
Lámina N° 20
22
Lámina N° 21
23
Lámina N° 22
24
Lámina N° 23
25
Lámina N° 24
26
PSEUDOCÓDIGO
Pseudo significa “Falso” o “Imitación” y Código se refiere a las instrucciones escritas en un lenguaje de
programación. Por esto el pseudocódigo es un lenguaje de especificación de algoritmos y no puede ser
ejecutado por una computadora, la ventaja del pseudocódigo es que el programador se puede concentrar en la
lógica y en las estructuras de control y no preocuparse de las reglas de un lenguaje de programación específico.
Es fácil de modificar y puede ser rápidamente traducido a un lenguaje de programación. Representa acciones
sucesivas en un lenguaje similar al humano. La fase de creación del pseudocódigo es inmediatamente anterior a
la fase de codificación
En los diferentes pasos de un algoritmo en pseudocódigo se establece la realización de alguna de estas tres
acciones:
Estas acciones indican que se debe obtener desde el exterior (Teclado) un valor el cual formará parte del
proceso del algoritmo. En pseudocódigo se escribirá LEER
Así mismo, se permitirá entregar un valor producto de un proceso (Resultado) . En pseudocódigo se escribirá
IMPRIMIR o MOSTRAR
Lámina N° 25
Ejemplo:
Algoritmo Pseudocódigo
Estas acciones indican que se debe tomar alguna decisión, es decir, decidir si realizar una determinada acción u
otra. Esta decisión está sujeta a responder previamente una pregunta cuyo resultado el lógico o booleano , es
decir Verdadero (True) o falso (False). Si el resultado es verdadero se realizará una o varias acciones, en caso
contrario (Resultado Falso), se efectuará una o varias acciones distintas. Esto se denomina sentencias de
selección y su estructura es como sigue:
Lámina N° 26
SENTENCIA DE SELECCIÓN:
SI (condición ) ENTONCES
( Proceso 1 )
SINO
( Proceso 2 )
FIN-SI
Ejemplo
Algoritmo Pseudocódigo
Las sentencias de selección también pueden anidarse como muestra la estructura siguiente:
Lámina N° 27
SI (condición 1 ) ENTONCES
( Proceso 1 )
SINO
SI (condición 2 ) ENTONCES
( Proceso 2 )
SINO
( Proceso 3)
FIN-SI
FIN-SI
Ejemplo
Algoritmo Pseudocódigo
Lámina N° 28
Ejemplo
SINO
SINO
FIN-SI
30
A continuación se presentan ejercicios propuestos
Lámina N° 29
Ejercicios Propuestos
2. Lee por teclado el nombre y la edad de cualquier persona e imprime ambos datos
13. Lee dos números e imprime ambos números sólo si son de diferente signo y
distintos de cero
14. Lee dos números calcula su suma. Imprime los números leídos y sólo si la suma
es negativa, imprímela también
15. Lee dos números y calcula el cuociente de dividir el primero por el segundo.
Imprime el cuociente. Pero si el segundo número es cero no ejecute cálculo e
imprima un mensaje que diga “División no es posible”
31
3. OPERAR UN DATO
Estas acciones indican que se deben realizar operaciones de cálculo entre los distintos datos y variables que
participan en un algoritmo. Además, puede indicar que se le asigne un valor determinado a una variable.
Lámina N° 30
Ejemplo:
Sentencia Pseudocódigo
Si, por ejemplo, se nos pidieran imprimir los numero del 1 al 100, sería engorroso crear el algoritmo con 100
instrucciones mostrando un número cada vez :
La solución sería asignar una vez VALOR = 1 y repetir 100 veces las instrucciones:
32
IMPRIMIR VALOR
VALOR = VALOR + 1
Si un conjunto de sentencias debe repetirse mas de una vez debido a la complejidad del algoritmo estamos
frente a lo que denomina sentencias de iteración o repetición.
Los procesos iterativos o de repetición ( también llamados ciclos ) comportan de acuerdo a 3 tipos: Ciclo
PARA, ciclo MIENTRAS y ciclo REPETIR.
1. CICLO PARA:
Lámina N° 31
PARA ( variable control ) := ( valor inicial ) HASTA ( valor final ) PASO ( incremento )
( proceso )
FIN-PARA
Ejemplo
IMPRIMIR VALOR
FIN-PARA
Lámina N° 32
( proceso )
FIN-MIENTRAS
Ejemplo
VALOR = 1
IMPRIMIR VALOR
VALOR = VALOR + 1
FIN-MIENTRAS
El proceso sólo ingresará al proceso si la condición es verdadera, de lo contrario el flujo salta a la instrucción
que sigue a FIN-MIENTRAS
3. CICLO REPETIR:
Lámina N° 33
REPETIR
( proceso )
HASTA ( condición )
Ejemplo
VALOR = 1
REPETIR
IMPRIMIR VALOR
VALOR = VALOR + 1
Siempre ingresará al proceso por lo menos una vez pues la condición es evaluada al final del ciclo.
A diferencia del ciclo MIENTRAS, si la condición es falsa se continúa con la iteración, de lo contrario el
flujo salta a la instrucción que sigue a HASTA.
35
A continuación se presentan ejercicios propuestos
Lámina N° 34
Ejercicios Propuestos
21. Lee por teclado el dos números. Si el segundo es menor o igual que el primero,
imprime el mensaje “Cálculo no es posible”, de lo contrario imprime todos los
números comprendidos entre el primero y el segundo inclusive.
24. Imprime una lista de notas del 1 al 7 con incrementos de 0.1. Cada nota debe
mostrar, además, el valor correspondiente al 40 % de ella.
25. Lee una cantidad indeterminada de números hasta el ingreso del 0 (cero) e
imprime la suma de ellos
26. Lee una cantidad indeterminada de números hasta el ingreso del 0 (cero) e
imprime su promedio
27. Lee una cantidad indeterminada de números hasta el ingreso del 0 (cero) e
imprime la cantidad de números ingresada
28. Lee una cantidad indeterminada de números hasta el ingreso del 0 (cero) e
imprime la cantidad de números positivos y negativos
29. Lee una cantidad indeterminada de números positivos hasta el ingreso del 0
(cero) e imprime :
ESTRUCTURAS DE DATOS
La Estructura de Datos dicta la organización, los métodos de acceso, el grado de asociatividad y las alternativas
de procesamiento para la información.
Simples o estáticos
Arreglos (Vectores/Matrices)
Registros
Archivos
Conjuntos
Cadenas
Compuestos o dinámicos
Pilas
Colas
Listas enlazadas
Arboles
Grafos
ARREGLOS (ARRAYS)
Es un conjunto finito y ordenado de elementos homogéneos (del mismo tipo de datos). Es un tipo de dato
estructurado simple o estático y pueden ser vectores o tablas (matrices).
Es el tipo de array más simple conocido como vector (matriz de una dimensión).
Lámina N° 35
Creación de un Vector
Ejemplo
NOTAS
1 2 3 4 5
37
Como accesar un vector.
Para poder leer o imprimir el valor de cada casilla del vector debemos definir una variable índice o puntero.
Según el valor de esta variable es la casilla que podremos accesar. También se puede hacer en forma literal
como se indica a continuación tomando el ejemplo anterior
Lámina N° 36
Acceso a un Vector
VC = 1
LEER NOTAS ( VC) // El dato ingresado se almacena en la casilla 1 del vector Notas
IMPRIMIR NOTAS ( VC) // Se muestra el contenido de la casilla 1 del vector Notas
VC = 3
VALOR = 0
LEER VALOR
NOTAS ( VC) = VALOR // El dato ingresado se almacena en la casilla 3 del vector Notas
FIN-PARA
FIN-PARA
SUMA = 0
PARA VC = 1 HASTA 5 // Rutina para calcular el la suma del vector Notas
FIN-PARA
IMPRIMIR SUMA
38
A continuación se presentan ejercicios propuestos
Lámina N° 37
Ejercicios Propuestos
30. Crea el vector NOTAS de 100 casillas y llénalo con los números del 1 al 100
32. Crea el vector NOTAS de 10 casillas y llénalo con los 10 primeros números pares
33. Crea el vector NOTAS de 20 casillas y llénalo con números ingresados por teclado
34. Dado el vector VENTAS de 350 casillas correspondiente a las ventas del día de la
empresa “ACME” crea un algoritmo que imprima el total de ventas
35. Crea el vector NOTAS de 20 casillas y llénalo con valores ingresados por teclado
para luego imprimir
Promedio de las notas
La nota mas alta
La nota mas baja
37. Dado el vector NUM1 de 50 casillas poblado con números. Crea un algoritmo que
imprima sus números en el orden inverso.
38. Dado el vector NUM1 de 50 casillas poblado con números. Crea un nuevo vector
vacío llamado NUM2 y llénalo con los valores del primer vector pero en el orden
inverso
39. Dado el vector VENTAS de 50 casillas correspondientes a las ventas del día de un
vendedor. Crea un algoritmo que imprima su comisión del día sabiendo que si una
venta es igual o menor a $100.000. su comisión es del 5% y si la venta es mayor a
$100.000 su comisión es del 7%.
40. Dado el vector EDADES de 800 casilla. Crea un algoritmo que muestre la cantidad
de personas mayores de edad
41. Dados dos vectores ALUMNOS y NOTA de 30 casillas. Uno conteniendo los
nombres de los alumnos y otro sus notas de forma paralela. Crea un algoritmo en
pseudocódigo que muestre los nombres de los alumnos con notas bajo 4
42. Dado el vector NUMEROS de 100 casillas poblado. Crea un algoritmo que
determine si existe en él un valor ingresado por teclado
39
METODO BURBUJA (BUBBLE SORT) DE ORDENAMIENTO DE VECTOR
La idea de esta forma de ordenar es comparar una casilla con la siguiente, si la casilla siguiente es menor que la
actual, se cambian los valores.
Valor de la casilla
12 10 32
1 2 3 Vector NUM
N° de casilla
Si asignamos directamente el valor de la siguiente casilla a la actual ( en el primer caso la N° 1), se perdería el
dato de la primera al ser sobreescrita.
10 10 32
NUM(1) = NUM(2)
Para evitar esto previamente pasamos el valor de la casilla actual a una variable auxiliar y luego a la siguiente
posición
12 10 32
12
AUX
10 10 32
10 12 32
12
40
Este proceso se debe realizar N – 1 veces, donde N corresponde al largo del vector. Se realiza N-1 veces pues
no se podría comparar la ultima casilla del vector con la siguiente N+1 pues dicha casilla no existe.
PARA I = 1 HASTA N - 1
AUX = NUM ( I )
NUM( I ) =NUM( I + 1 )
NUM(I + 1 ) = AUX
FIN-SI
FIN-PARA
Esta acción la denominaremos barrido. Para los datos del ejemplo basto un solo barrido para dejar el vector
ordenado, pero no siempre sucede así. Considera el siguiente vector:
5 4 3 2 1
4 3 2 1 5
Si se observa bien nos daremos cuenta que necesitaremos 5 barridos para ordenar este vector, lo que
corresponde a su largo. Por lo tanto el método Burbuja completo queda como sigue:
41
Lámina N° 38
PARA B = 1 HASTA N
PARA I = 1 HASTA N - 1
AUX = NUM ( I )
NUM( I ) =NUM( I + 1 )
NUM( I + 1 ) = AUX
FIN-SI
FIN-PARA
FIN-PARA
42
Arrays de dos dimensiones.
Se puede considerar como un vector de vectores. Es un conjunto de elementos del mismo tipo en el cual el
orden de los componentes es significativo y en el que se necesita especificar dos subíndices (que identifican
cada elemento). También de se denominan Matrices.
Lámina N° 39
Ejemplo
DIM MAT ( 3 , 5 )
2 FILAS
1 2 3 4 5
COLUMNAS
43
Como accesar una matriz.
Para poder leer o imprimir el valor de cada casilla de la matriz debemos definir una variable índice o puntero
para las filas y otra para las columnas. Según el valor de ambas variables es la casilla que podremos accesar.
También se puede hacer en forma literal como se indica a continuación tomando el ejemplo anterior
Lámina N° 40
F= 1
C=4
LEER MAT ( F , C ) // El dato ingresado se almacena en la casilla de la fila 1 columna 4
IMPRIMIR MAT ( F , C ) // Se muestra el contenido de la casilla de la fila 1 columna 4
A=3
B=1
VALOR = 0
LEER VALOR
MAT ( A , B ) = VALOR // El dato ingresado se almacena en la fila 3 columna 1
SUMA = 0
PARA A = 1 HASTA 3 // Rutina para calcular la suma de la matriz MAT
PARA B = 1 HASTA 3
SUMA = SUMA + MAT ( A , B )
FIN-PARA
FIN-PARA
IMPRIMIR SUMA
44
A continuación se presentan ejercicios propuestos
Lámina N° 41
Ejercicios Propuestos
43. Crea la matriz MAT de 10 x 10 llénala con los números del 100 al 200
45. Crea la matriz IMPAR de 5 x 3 y llénala con los 15 primeros números impares
46. Crea la matriz NUM de 5 x 5 y llénala con números ingresados por teclado
48. Dada la matriz AUX de 2 x 40 correspondiente a las ventas del día, crea un
algoritmo que imprima el total de ventas
49. Crea la matriz NOTAS de 5 x 6 y llénala con valores ingresados por teclado para
luego imprimir
Promedio de las notas
La nota mas alta
La nota mas baja
50. Dado la matriz NUMEROS de 80 x 80. Crea un algoritmo que imprima el número
mayor y el menor
52. Dada la matriz VENTAS de 120 x 2, donde la primera columna almacena el monto
de una venta y la segunda el nombre del vendedor. Crea un algoritmo que
muestre el nombre del vendedor que realizó la venta mas alta
53. Dado la matriz DATOS de 800 x 3, donde la primera casilla almacena el nombre de
la persona, la segunda su edad y la tercera su sexo (1=Masculino y 2 = Femenino).
Crea un algoritmo que muestre los nombres de las mujeres menores de edad
54. Dada la matriz NUM2 de 35 x 23. Crea un algoritmo que lea un numero por teclado
y determine la fila y columna en que se encuentra, de lo contrario muestre el
mensaje “Dato no se encuentra”
45
PILAS.
Los arreglos compuestos o dinámicos son estructuras que crecen a medida que se ejecuta un programa. Es una
colección de elementos (nodos) que son normalmente registros. Se pueden dividir en dos grandes grupos:
Estructuras lineales como ser pilas, colas y listas enlazadas y Estructuras no lineales como ser Árboles y
Grafos.
Una Pila (Stack) es una lista lineal en la que la inserción y borrado de elementos se realiza sólo por un extremo
denominado Cima o Top (Top)
Creación.
Se necesita un puntero que apunte a la Cima o Top. Para crearse, es posible utilizar un arreglo unidimensional
de tipo FIFO.
Inserción.
Dado que las operaciones de insertar y eliminar se realizan por un solo extremo, los elementos solo pueden
eliminarse en orden inverso al que se insertan en la pila. El último elemento que se pone en la pila es el primero
que se puede sacar. Estas estructuras se conocen con el nombre de LIFO (Last In First Out). Las operaciones
más usuales son Push (insertar un elemento en la pila) y Pop (eliminar un elemento).
Figura N° 42
46
LISTAS ENLAZADAS.
Es un conjunto de elementos en los que cada elemento contiene la posición (dirección) del siguiente elemento
de la lista. Cada elemento debe tener al menos dos campos. Un campo que tiene el valor del elemento y un
campo de enlace (link) que contiene la posición del siguiente elemento.
Creación.
Los valores se almacenan en un nodo, cada nodo contiene al menos un campo dato o valor y un enlace
(indicador o puntero) con el siguiente campo. El campo enlace apunta al siguiente nodo de la lista. El último
nodo de la lista suele terminarse con un nulo para indicar el fin de la lista. No es necesario que los elementos de
la lista sean almacenados en posiciones físicas adyacentes, ya que el puntero indica donde se encuentra el
siguiente elemento.
Recorrido y búsqueda.
Las operaciones que normalmente se ejecutan son:
1. Recuperar información de un nodo específico
2. Encontrar el nodo que contiene la información específica.
3. Borrar un nodo existente que contiene información específica.
Inserción.
1. Insertar un nuevo nodo en un lugar específico.
2. Insertar un nuevo nodo en relación a una información particular.
Listas doblemente enlazadas.
Pueden recorrerse en ambas direcciones. En estas listas cada nodo consta de un campo de información de datos
y dos campos de enlace al nodo anterior y al nodo posterior. Ocupa más espacio en memoria.
COLAS.
Las colas se utilizan para almacenar datos que necesitan ser procesados según el orden de llegada. Es una
estructura lineal de datos. La eliminación se realiza al principio de la lista (Frente/Front). El primer elemento
que entró es el primero que saldrá (FIFO, First In First Out).
Creación.
Se pueden representar por listas enlazadas o por arreglos. Se necesitan dos punteros Frente y Final, y la lista o
arreglo de n elementos. También puede crearse una lista enlazada circular que sólo necesitará un puntero.
Inserción.
La inserción de un elemento se realiza en el último extremo (Final/Rear).
ARBOLES
Se usan para representar datos con una relación jerárquica entre sus elementos (Árboles Genealógicos, Tablas,
etc.). Existen 2 tipos de árboles: Binario, Binario completo y No binario. Es una estructura recursiva que
contiene un nodo llamado Padre o Raíz y subnodos llamados Hijos u Hojas.
Representación de árboles.
Raíz.- Todos los árboles que no estén vacíos tienen un nodo llamado Raíz. Todos los demás elementos o
nodos se derivan o descienden de él. Este nodo no tiene Padre, es decir, no es hijo de ningún elemento.
Nodo.- Son los vértices o elementos del árbol.
Nodo Terminal u Hoja (Leaf Node).- Es aquel nodo que no contiene ningún subárbol, o sea que no tiene
hijos.
Hijo.- A cada nodo que no es Hoja se le asocia uno o vario subárboles llamados descendiente o Hijos. De
igual forma, cada nodo tiene asociado un antecesor o ascendiente llamado Padre.
47
Los nodos de un mismo Padre se llaman Hermanos.
Recorrido de árboles binarios.
Prefijo. Se compone de tres pasos: Raíz, Hijo Izquierdo, Hijo Derecho.
Infijo: Se compone de tres pasos: Hijo Izquierdo, Raíz, Hijo Derecho.
Postfijo: Se compone de tres pasos: Hijo Izquierdo, Hijo Derecho, Raíz.
Búsqueda e inserción.
El árbol de búsqueda se construirá teniendo en cuenta las siguientes premisas:
1. El primer elemento se utiliza para crear el nodo Raíz.
2. Los valores del árbol deben ser tales que pueda existir un orden (entero, real, lógico o carácter e incluso
definido por el usuario).
3. En cualquier nodo todos los valores del subárbol izquierdo del nodo son menor o igual al valor del nodo.
De modo similar todos los valores del subárbol derecho deben ser mayores que los valores del nodo.
GRAFOS.
Es una estructura de datos no lineal. Los árboles representan estructuras jerárquicas con limitaciones. Si se
eliminan las restricciones de que cada nodo puede apuntar a otros nodos y que cada nodo puede estar apuntado
por otro nodo nos encontraremos con un grafo.
Es un conjunto de puntos y líneas cada uno de los cuales une a un punto con otro.
2. Sumar una serie de número. Solo se sumarán aquellos que sean enteros
positivos.
3. Suma de los números pares. La suma se realizará usando todos los números
entre el 2 y el 1000.
14. Sea un archivo de datos que contiene "n" valores, determine cual es el
mayor de ellos y en que posición se localiza.
SALARIOS.
Ejercicios
Problema:
Calcular la media aritmética de una serie determinada de números positivos.
49
Análisis:
La media de una serie de números X1, X2,... Xn está basado en la fórmula
MediaAritmética = (X1 + X2 + .. + Xn ) / n
Pseudocódigo:
Algoritmo Obtener_Media
{se realizará una operación matemática basada en los valores de entrada}
Inicio
{inicialización de variables}
N = 0
Suma = 0
{lectura de datos}
{los datos pueden ser leídos desde un archivo u obteniendo una entrada
desde el teclado del usuario}
Leer TotalDatos
MIENTRAS TotalDatos < = N HACER
{Es necesario tener un contador que permita llevar el control del
número de datos leídos}
N = N + 1
{realizar la lectura de cada uno de los datos (por archivo o
teclado)}
Leer X
{Hay que almacenar la suma de los números leídos hasta el momento}
Suma = Suma + X
FIN_MIENTRAS {Fin del ciclo}
MediaAritmetica = Suma / N
Escribir ( ´ La Media Aritmética obtenida es : ´ , MediaAritmetica )
Fin
BASIC:
100 'programa MEDIA
110 'cálculo de la media aritmética de N números, leídos desde el
teclado
120 'variables enteras = N; variables reales = X, MEDIA, SUMA
130 DEFINT N
140 DEFSNG X, MEDIA, SUMA
150 N = 0
160 SUMA = 0
170 INPUT X
180 WHILE X < > -99
190 N = N + 1
200 SUMA = SUMA + X
210 INPUT X
220 WEND
230 MEDIA = SUMA / N
240 PRINT "el total de números es ",N
250 PRINT "la media es = ", MEDIA
50
260 END
Pascal:
Program Media (input, output);
{cálculo de la media aritmética de N números leídos desde el teclado}
Var X, SUMA, MEDIA, NUM: Real; {Declaración de variables}
N: Integer;
Begin {Inicio del programa principal}
N := 0; {Inicialización de variables}
SUMA:= 0;
Write (´ Escribe el número total de datos a utilizar ´ ); {Mensaje
en pantalla}
Read(X); {Lectura del total de datos por leer}
While N < = X Do {Inicio del ciclo}
Begin
N:= N + 1; {Contador para número de datos leídos}
Write (´escribe dato ´ , N ); {Mensaje en pantalla}
Read ( NUM ); {Lectura cada número}
SUMA:= SUMA + NUM; {Sumatoria de los datos}
End; {Fin del ciclo While}
MEDIA:= SUMA / X; {Cálculo de la media}
Write ( ´ La media aritmética obtenida es: ´ , MEDIA);
End. {Fin del programa principal}
FORTRAN:
PROGRAM MEDIA
C Cálculo de la media aritmética de N números leídos del teclado
INTEGER N
REAL X, SUMA, MEDIA
N = 0
SUMA = 0
100 READ ( 5, *, END = 200) X
N = N + 1
SUMA = SUMA + X
GO TO 100
200 MEDIA = SUMA/N
PRINT *, 'el total de números es ' , N
PRINT *, 'la media es ', MEDIA
END
MODULA-2:
MODULE Media
FROM RealInOut IMPORT ReadReal, Flag, WriteReal;
FROM InOut IMPORT WriteInt, WriteString, Writeln;
(*Cálculo de la media aritmética de N números positivos
leídos del teclado *)
VAR X, SUMA, MEDIA: REAL; n: INTEGER;
BEGIN
n:= 0;
SUMA:=0 ;
WriteString ("Leer una serie de números"); Writeln;
ReadReal (X);Writeln;
WHILE Flag DO
n:= M + 1
51
Suma:= Suma + X;
ReadReal(X); Writeln;
END;
Media:= Suma/FLOAT (n8);
Writeln; WriteString (' el total de número es '); WriteInt (n, 8);
Writeln; WriteString (' la media es = '); WriteReal (media, 10);
END Media.