ALGORITMIA Y ESTRUCTURA DE DATOS
Sep 28, 2015
ALGORITMIA Y
ESTRUCTURA DE DATOS
Pg. 2
Asignatura: Algoritmia y Estructura de Datos
Universidad Continental de Ciencias e Ingeniera
Material publicado con fines de estudio
Primera edicin
Huancayo, 2013
Pg. 3
Asignatura: Algoritmia y Estructura de Datos
PRESENTACIN
Algoritmia y Estructura de Datos es una asignatura que tiene como finalidad proporcionar al
estudiante, los conocimientos necesarios en las tcnicas y estructuras de datos para la
programacin basada en el enfoque estructurado, requeridos en su formacin bsica para poder
desarrollar programas en otros niveles ms avanzados. La competencia a desarrollar es: Construye
algoritmos en un lenguaje de programacin, utilizando las sentencias bsicas de
programacin, diferenciando su uso para la propuesta de solucin de un problema, y con ello
construye programas computacionales utilizando mdulos de programa (funciones y
procedimientos), valorando la reutilizacin de los mdulo, y utilizando las diferentes
estructuras de datos: estticas y dinmicas para almacenar datos temporalmente,
diferenciando el uso de las estructuras con respecto al uso de los archivos como
almacenamiento de datos permanente, promoviendo el inters por otras tcnicas de
almacenamiento.
El presente material consta de cuatro unidades: Unidad I: Algoritmos y Programacin
Estructurada presenta conceptos, representaciones y programacin del algoritmo, con sus tcnicas:
Sentencias Bsicas de Programacin: Secuenciales, Selectivas y Repetitivas. Unidad II:
Modularizacin en la Programacin Estructurada, es decir, se puede dividir a un programa complejo,
en segmentos de programa mas simples (Modularizacin), y poder ser reutilizados en otros
programas, a travs del uso de funciones y procedimientos, y en algunos casos usando el concepto
de recursividad. Unidad III: Estructuras de Datos, donde se expone las formas de almacenamiento
temporal de datos a travs estructuras tanto del tipo estticas (arreglos, registros, clases) como
dinmicas (listas, pilas, colas, rboles, grafos). Unidad IV: Ficheros (Archivos), en esta ultima
unidad, se expone una forma de almacenamiento de datos mas ventajosa que las estructuras de
datos explicadas previamente, para poder manipular y operar dichos datos, desarrollados a partir del
texto Fundamentos de Programacin (Joyanes Aguilar Luis, 2008).
Es recomendable que el estudiante desarrolle una permanente lectura de estudio junto a la
elaboracin de programas en un lenguaje de programacin, as como la investigacin en otros
textos y va internet. El contenido del material se complementar con las lecciones presenciales y a
distancia que se desarrollan en la asignatura.
Agradecemos a quienes con sus aportes y sugerencias han contribuido a mejorar la presente
edicin, que slo tiene el valor de una introduccin al conocimiento de las estructuras de datos para
la programacin en un computador.
Los autores
Pg. 4
Asignatura: Algoritmia y Estructura de Datos
NDICE
Pg.
PRESENTACIN 3 NDICE 4 PRIMERA UNIDAD Tema N 1: Algoritmo 6 1.1 Definicin del Algoritmo 6 1.2 Caractersticas de un algoritmo 7 1.3 Instrucciones Algortmicas Bsicas 7 1.4 Representacin del Algoritmo 8 Tema N 2: Programacin Estructurada 9 2.1 Programa 9 2.2 Lenguaje de Programacin 9 2.3 Programas Traductores 10 2.4 Definicin Programacin Estructurada 10 2.5 Resolucin de un Problema 11 Tema N 3: Sentencias Bsicas de Programacin 12 3.1 Estructura Bsica Simple o Secuencial 12 3.2 Estructura Bsica Selectiva 14 3.3 Estructura Bsica Repetitiva 22 SEGUNDA UNIDAD Tema N 4: Modularizacin de Programas 30 4.1 Paso de Parmetros 30 4.2 Procedimientos 31 4.3 Funciones 31 Tema N 5: Libreras de Programacin creadas por el usuario 36 Tema N 6: Funciones Recursivas 38 TERCERA UNIDAD Tema N 7: Estructuras de Datos 40 7.1 Definicin de Estructura de Datos 40 7.2 Clasificacin de Estructura de Datos 40 Tema N 8: Arreglos Unidimensionales 41 8.1 Actualizacin de Arreglos Unidimensionales 42 8.2 Bsqueda de Arreglos Unidimensionales 45 8.3 Ordenacin de Arreglos Unidimensionales 47 Tema N 9: Arreglos Bidimensionales 51 9.1 Actualizacin de Arreglos Bidimensionales 54 9.2 Aplicacin de Arreglos Bidimensionales 56 Tema N 10: Registro (Estructura) 60 Tema N 11: Union 64 Tema N 12: Tipos de Datos Abstractos (TDA) 64 Tema N 13: Clases y Programacin Orientada a Objetos 65 Tema N 14: Punteros a Direccin de Memoria 67
Pg. 5
Asignatura: Algoritmia y Estructura de Datos
14.1 Declaracin de variables tipo puntero 67 Tema N 15: Estructuras de Datos Estticas 71 15.1 Lista Enlazada Simple 71 15.2 Lista Enlazadas Circular 76 15.3 Lista Enlazada Doble 76 15.4: Colas 77 15.5 Pilas 80 Tema N 16: Estructuras de Datos Dinmicas 82 16.1 rbol General 82 16.2 rbol Binario 87 16.3 rboles Binarios de Bsqueda( ABB ) 88 16.4 Grafos 92 CUARTA UNIDAD Tema N 17: Archivos (Ficheros) 93 BIBLIOGRAFA Y DIRECCIONES ELECTRNICAS 96
Pg. 6
Asignatura: Algoritmia y Estructura de Datos
PRIMERA UNIDAD
Tema N 1: Algoritmo
1.1 Definicin de Algoritmo
La palabra algoritmo se dio en honor del matemtico persa del siglo IX, Khowrizm.
Un algoritmo es un conjunto ordenado y finito de instrucciones que conducen a la solucin de un problema.
Por ejemplo:
- Al instalar un equipo de sonido ejecutamos las instrucciones (algoritmo) contenidas en el manual del equipo.
- Algoritmo matemtico de Euclides para la obtencin del mximo comn divisor de dos nmeros.
Si un algoritmo puede ser ejecutado por una computadora, se dice que es un algoritmo computacional; en caso contrario, se dice que es un algoritmo no computacional.
Para que un algoritmo sea computacional se debe expresar en instrucciones a travs de un lenguaje de programacin, teniendo como resultado un programa.
Todo algoritmo puede ser descompuesto en tres partes:
Entrada de datos.
Proceso.
Salida de resultados.
En cada uno de ellos se necesita el uso de variables:
Variable:
Es una localizacin o casillero en la memoria principal que almacena un valor que puede cambiar en el transcurso de la ejecucin del programa. Tiene un nombre, un tipo de dato y un valor. Antes de poder utilizar una variable es necesario declararla especificando su nombre y su tipo de dato.
Ejemplo 1:
Entero edad
Ejemplo 2:
Real peso, talla
PROCESO E
Datos
S
Resultado
Pg. 7
Asignatura: Algoritmia y Estructura de Datos
1.2 Caractersticas de un algoritmo
Ser preciso: los pasos del algoritmo deben desarrollarse en un orden estricto, ya que el desarrollo de cada paso debe obedecer a un orden lgico.
Ser definido. en el rea de programacin, el algoritmo se desarrolla como paso fundamental para desarrollar un programa. El computador solo desarrollar las tareas programadas y con los datos suministrados; no puede improvisar el dato que necesite para realizar un proceso.
Ser finito: implica que el nmero de pasos de un algoritmo, por grande y complicado que sea el problema que soluciona, debe ser limitado, es decir debe llegar a un final.
Presentacin formal: para que el algoritmo sea entendido por cualquier persona interesada es necesario que se exprese en alguna de las formas comnmente aceptadas; si no puede no ser muy til ya que solo lo entender quien lo dise. Las formas de presentacin de algoritmos son: el pseudocdigo, diagrama de flujo y diagramas de Nassi/Schneiderman, entre otras.
Correccin: el algoritmo debe ser correcto, debe solucionar el problema para el cual fue diseado. Para garantizar que el algoritmo logre el objetivo, es necesario ponerlo a prueba: verificacin o prueba de escritorio.
Eficiencia: es evaluar los recursos que requiere para almacenar datos y para ejecutar operaciones frente al beneficio que ofrece. En cuanto menos recursos requiere ser ms eficiente el algoritmo.
1.3 Instrucciones Algortmicas Bsicas
a. Entrada: Consiste en obtener un dato de un dispositivo de entrada, como el teclado, y almacenarlo en una variable. En general, la accin de ingresar un dato a una variable se expresa en el pseudocdigo mediante la palabra LEER, de la siguiente forma:
LEER variable
Ejemplo: LEER edad
b. Salida: Consiste en mostrar el valor de una variable en un dispositivo de salida, como la pantalla. En general, la accin de mostrar el valor de una variable se expresa en el pseudocdigo mediante la palabra IMPRIMIR (ESCRIBIR) de la siguiente forma:
IMPRIMIR variable
Ejemplo: IMPRIMIR TotalCompra
c. Asignacin: Consiste en dar a una variable el valor de una expresin. La asignacin se expresa en el pseudocdigo de la siguiente forma:
variable = expresin o variable expresin
Donde variable y el valor de expresin deben tener el mismo tipo de dato.
Ejemplo:
resultado numero1 + numero 2
Pg. 8
Asignatura: Algoritmia y Estructura de Datos
1.4 Representacin del Algoritmo
a. Pseudocdigo: Es la representacin del algoritmo en lenguaje natural. Ejemplo: sumar dos nmeros enteros.
INICIO entero numero1, numero2, resultado Leer numero1 Leer numero2 resultado numero1 + numero 2 Escribir El resultado de la suma es: Escribir resultado FIN
b. Diagrama de Flujo Estructurado: Representacin con flujos entre los procesos a realizar. Los principales smbolos de representacin para este diagrama son.
c. Diagrama Nassi/Schneiderman (N-S)
Representacin en bloques, es decir cada uno de los procesos como ingreso/salida de datos, decisiones, acciones, repeticiones; estn representados en bloques de tareas consecutivos.
INICIO
Declaracin de variables
Lectura de Datos
Accin 1
Accin 2
Accin n
Reporte de Datos
FIN
Inicio/Fin del algoritmo
Procesos del algoritmo
Entada/Salida Estndar de Datos del algoritmo
Flujo de recorrido entre Procesos del algoritmo
Punto de Decisin del algoritmo
Subrutinas en el algoritmo
Conector del algoritmo en la misma hoja
Conector del algoritmo en otra hoja
Pg. 9
Asignatura: Algoritmia y Estructura de Datos
Actividades
Elaborar el algoritmo y su respectiva representacin, identificando los elementos de entrada y los elementos de salida, para los siguientes casos:
a. El proceso de asistir a clases a un centro de estudios.
b. El proceso de solicitar un libro en la biblioteca de una universidad.
c. El proceso de un punto de ventas de un supermercado.
d. El proceso de intercambiar dos valores numricos.
e. El proceso de calcular la regla de tres simple.
f. El proceso de matrcula para elaborar una lista de contactos digital.
g. El proceso de Matrcula en una universidad.
Tema N 2: Programacin Estructurada
2.1 Programa
Secuencia de instrucciones que especifican las operaciones que debe realizar la computadora, en la cual cada paso del algoritmo est expresado por medio de una instruccin.
2.2 Lenguaje de Programacin
Conjunto de sentencias utilizadas para escribir secuencias de instrucciones que para que ejecute un programa en una computadora.
a. Lenguaje Mquina: Lenguaje de programacin que la computadora interpreta y ejecuta directamente, y est compuesto de instrucciones codificadas en binario (0, 1).
b. Lenguaje de Bajo Nivel: tambin llamados lenguajes ensambladores, permiten al programador escribir instrucciones de un programa usando abreviaturas del lenguaje natural (ingls), tambin llamadas palabras nemotcnicas (ADD, DIV, SUB, etc).
c. Lenguaje de Alto Nivel: permite al programador escribir las instrucciones de un programa utilizando palabras o expresiones sintcticas muy similares al lenguaje natural (ingls).
Pg. 10
Asignatura: Algoritmia y Estructura de Datos
2.3 Programas Traductores
Traducen los programas fuente de a cdigo mquina. Pueden ser:
a. Intrpretes: es un traductor que toma un programa fuente, lo traduce y a continuacin lo ejecuta.
b. Compilador: es un traductor que toma un programa fuente, y lo traduce sentencia por sentencia.
La compilacin es el proceso de traduccin del programa fuente a programa objeto (traducido a cdigo mquina), a travs de un programa enlazador, para conducir al programa ejecutable.
2.4 Definicin Programacin Estructurada
Conjunto de tcnicas para escribir, verificar, depurar, y mantener los programas, es una metodologa de desarrollo de programas llamada refinamientos sucesivos: se plantea una operacin como un todo y se divide en segmentos ms sencillos o de menor complejidad. Una vez terminado todos los segmentos del programa, se procede a unificar las aplicaciones, esta integracin debe ser sencilla.
PROGRAMA
FUENTE
COMPILADOR
(Traductor)
PROGRAMA
OBJETO
PROGRAMA
ENLAZADOR
PROGRAMA
EJECUTABLE
PROGRAMA
FUENTE
INTERPRETE
PROGRAMA
EJECUTABLE
PROGRAMA
FUENTE
COMPILADOR
PROGRAMA
OBJETO
Pg. 11
Asignatura: Algoritmia y Estructura de Datos
La representacin grafica de la programacin estructurada se realiza a travs de diagramas de flujo o flow chart, Diagramas N-S, el cual representa el programa con sus entradas, procesos y salidas.
El conjunto de tcnicas para este enfoque son:
a. Recursos Abstractos
Descomponer una determinada accin compleja en acciones ms simples, para ser ejecutadas y que sern instrucciones.
b. Diseo Descendente
El problema se descompone en niveles o pasos sucesivos: que hace? como lo hace?
c. Estructuras bsicas
Son estructuras de control para el programa:
Secuenciales
Selectivas
Repetitivas
ste conjunto de tcnicas permite elaborar programas en cualquier lenguaje de programacin.
Las estructuras bsicas mencionadas sern desarrolladas mas adelante en otras sesiones de clase.
2.5 Resolucin de un Problema
Los siguientes pasos propuestos para la resolucin de problemas estn basados en el Ciclo de Vida Clsico en la Construccin de un Software.
1. Anlisis del Problema
2. Diseo del Algoritmo
3. Expresar el algoritmo en un programa.
4. Ejecucin y Validacin del programa.
Que hace ?
Como hace?
Pg. 12
Asignatura: Algoritmia y Estructura de Datos
Tema N 3: Sentencias Bsicas de Programacin
Las sentencias de programacin a utilizar es una las tcnicas de programacin del enfoque estructurado: Estructuras Bsicas.
3.1 Estructura Bsica Simple o Secuencial
Es una estructura paso a paso, sin bifurcaciones ni repeticiones; donde la salida de un proceso es entrada para otro.
Diagrama de Flujo:
Diagrama N-S:
INICIO
Declaracin de variables
Lectura de Datos
Accin 1
Accin 2
Accin n
Reporte de Datos
FIN
Ejemplo
Calcular el rea de un tringulo. Area = (base * altura) / 2
Solucin
Leyenda de Datos base: valor de la base del tringulo altura: valor de la altura del triangulo Area: valor del resultado del clculo del rea del tringulo
INICIO
Declaracin de Variables
Lectura de Datos
Accin 1
Accin n
FIN
Accin 2
Reporte de Datos
Pg. 13
Asignatura: Algoritmia y Estructura de Datos
Diagrama de Flujo:
Diagrama N-S:
INICIO
real base, altura, Area
Leer base
Leer altura
Area (base * altura) / 2;
Escribir El valor del rea para el tringulo es:
Escribir Area
FIN
Cdigo en C:
#include
using namespace std;
void main( )
{ float base, altura, Area;
coutbase;
cout
Pg. 14
Asignatura: Algoritmia y Estructura de Datos
Cond 1
3.2 Estructura Bsica Selectiva
Es una estructura que tiene un punto de decisin para realizar un conjunto de acciones. Pueden ser:
E. B. Selectiva Simple
E. B. Selectiva Compuesta
E. B. Selectiva Anidada
E. B. Selectiva Mltiple
a. Estructura Bsica Selectiva Simple:
Se tiene un punto de decisin que evala una condicin y si es Verdadero, ejecuta un conjunto de Acciones.
Diagrama de Flujo:
Diagrama N-S:
INICIO
Declaracin de variables
Lectura de Datos
V F
Accin 1
Accin 2
Accin n
Reporte de Datos
FIN
Declaracin de Variables
Lectura de Datos
INICIO
Accin n
FIN
Accin 1
Reporte de Datos
Cond 1
V F
Pg. 15
Asignatura: Algoritmia y Estructura de Datos
Ejemplo
Sumar dos nmeros enteros positivos c = a + b
Solucin
Diagrama de Flujo:
Diagrama N-S:
Cdigo C: #include
using namespace std;
int main( )
{ float a, b, c;
couta; cout0 V F
INICIO
Pg. 16
Asignatura: Algoritmia y Estructura de Datos
Cond 1
if (a>0 && b>0)
{ c = a + b;
cout
Pg. 17
Asignatura: Algoritmia y Estructura de Datos
Ejemplo:
Sumar dos nmeros enteros si son positivos, sino multiplicarlos.
Solucin:
Diagrama de Flujo
Diagrama N-S
Cdigo C: #include
using namespace std;
void main( )
{ int a, b, c;
couta;
cout0
V F
c a * b
Escribir El valor de la
multiplicacion es , c
Pg. 18
Asignatura: Algoritmia y Estructura de Datos
Cond 2
Cond 1
if(a>0 && b> 0)
{ c = a + b;
cout
Pg. 19
Asignatura: Algoritmia y Estructura de Datos
F V
F V
Ejemplo:
Ingresar un nmero entero y si es positivo y diferente de cero, reportar si se encuentra entre los diez primeros nmeros.
Solucin:
Diagrama de Flujo
Diagrama N-S
INICIO
entero a
Leer a
a > 0
Escribir No es un nmero mayor que cero
a>=1 && a>10
Escribir Son mas de los primeros 10 Escribir Primeros 10
FIN
Cdigo C: #include
using namespace std;
void main( )
{ int a;
couta;
if(a>0)
if(a>=1 && a
Pg. 20
Asignatura: Algoritmia y Estructura de Datos
Cond 1 1 2 3
d. Estructura Bsica Selectiva Mltiple: se tiene un punto de decisin que evala ms de dos alternativas para realizar un conjunto de acciones.
Diagrama de Flujo
Diagrama N-S
INICIO
Declaracin de variables
Lectura de Datos
default
Accin 1 Accin 2 Accin 3 Accin 4
Accin n Accin m Accin m Accin m
Reporte de Datos
FIN
Ejemplo
Ingresa cinco nmeros e imprime que vocal es.
Solucin:
INICIO
Declaracin de Variables
Lectura de Datos
Accin m
FIN
Accin 2
Reporte de Datos
Cond 1 default
1
Accin n
Accin 1
3 2
Accin m
Accin 3
Accin m
Accin 4
Accin 4
Leyenda de Datos
num: valor del numero entero positivo
Pg. 21
Asignatura: Algoritmia y Estructura de Datos
Diagrama de Flujo
Diagrama N-S
INICIO
entero num
Leer num
num 1 2 3 4 5 default
Escribir Vocal A
Escribir Vocal E
Escribir Vocal I
Escribir Vocal O
Escribir Vocal U
Escribir No es Vocal
FIN
Cdigo C: #include
using namespace std;
void main( )
{ int num;
coutnum;
switch(num)
{ case 1: cout
Pg. 22
Asignatura: Algoritmia y Estructura de Datos
3.3 Estructura Bsica Repetitiva
Es una estructura permite iterar o repetir un conjunto de acciones dada una condicin. Pueden ser:
E. B. Repetitiva Mientras
E. B. Repetitiva Hacer-Mientras
E. B. Repetitiva Para
a. Estructura Bsica Repetitiva Mientras: primero evala una expresin condicional y si es verdadera permite realizar el conjunto de acciones y regresa evaluar nuevamente la expresin condicional, hasta que deje de cumplir (Falso).
Diagrama de Flujo
Diagrama N-S
INICIO
Declaracin de variables
Lectura de Datos
Cond 1
Accin 1
.
Accin n
Accin 2
Reporte de Datos
FIN
Ejemplo
Imprimir la serie Fibonacci, menor a un lmite dado: 0,1,1,2,3,5,8,13,.
Cond 1
INICIO
Declaracin de Variables
Lectura de Datos
Accin n
FIN
Accin 1
V
F
Accin 2
Pg. 23
Asignatura: Algoritmia y Estructura de Datos
Diagrama de Flujo
Diagrama N-S
INICIO
entero lim, a=0, b=1, c
Leer lim
Escribir a
b
Pg. 24
Asignatura: Algoritmia y Estructura de Datos
while(b
Pg. 25
Asignatura: Algoritmia y Estructura de Datos
Ejemplo
Leer un nmero entero mayor que cero, sino es as, volver a solicitar el nmero con esas condiciones.
Diagrama de Flujo
Diagrama N-S
INICIO
entero num
Leer num
num
Pg. 26
Asignatura: Algoritmia y Estructura de Datos
do{
do{ coutm;
}while(m=m && m>0)
{ n=n-m;
venta=venta+m;
cs++;
if(n>0)
{ cout
Pg. 27
Asignatura: Algoritmia y Estructura de Datos
c. Estructura Bsica Repetitiva Para: permite repetir un conjunto de acciones, secuencialmente hasta llegar a un lmite dado.
Diagrama de Flujo
Diagrama N-S
INICIO
Declaracin de variables
Lectura de Datos
i = 0 ; i
Pg. 28
Asignatura: Algoritmia y Estructura de Datos
Ejemplo:
Calcular el Factorial de un nmero.
Diagrama de Flujo
Diagrama N-S
INICIO
entero num, i , p =1
Leer num
i = 1 ; i
Pg. 29
Asignatura: Algoritmia y Estructura de Datos
Actividades
Elaborar el Pseudo cdigo, Diagrama de Flujo y Diagrama N-S, y Cdigo en C respectivo para:
1. La presin, el volumen y la temperatura de una masa de aire se relacionan por la formula:
Masa = (presin * volumen)/(0.37 * (temperatura + 460))
Calcular la masa respectiva.
2. En un hospital existen tres reas: Ginecologa, Pediatra, Traumatologa. El presupuesto anual del hospital se reparte conforme a la siguiente tabla:
rea Porcentaje del presupuesto
i. Ginecologa 40%
ii. Traumatologa 30%
iii. Pediatra 30%
Obtener la cantidad de dinero que recibir cada rea, para cualquier monto presupuestal.
3. Encuentre el menor de tres nmeros dados.
4. Una fbrica de TV necesita que le ayuden a controlar el manejo de sus inventarios y pedidos de venta.
Cuando llega un pedido, un programa debe verificar si existe suficiente cantidad de TV en inventario. Si es as, debe reportar un mensaje PEDIDO COMPLETO y se debe dar la disminucin del inventario.
Adems se necesita reportar:
El nmero de TV que quedan en el inventario final.
El nmero de pedidos completos.
El nmero de pedidos incompletos.
El nmero de TV vendidos.
El nmero de TV que faltan para completar los pedidos incompletos.
5. Lea un nmero entero e indique cual es su dgito mayor.
6. Suponga que tiene la calificacin final de un grupo de 40 alumnos, calcular la calificacin promedio y la calificacin mas baja de todo el grupo.
7. Cuantos dgitos pares y cuantos dgitos impares tiene un nmero entero.
8. En una universidad se pueden llevar hasta 22 crditos en un ciclo. Elabora el cdigo que permita a un alumno matricularse sin pasarse del lmite.
9. Una vendedora de pan tiene n unidades de pan al comenzar el da. Si cada cliente le pide m panes, cuantos clientes son atendidos completamente, cuantos panes quedan para el ultimo cliente?
10. Elabore el cdigo para una tienda para leer por cada cliente el monto total de su compra; Al final del da reportar la cantidad total de ventas y el nmero de clientes atendidos.
11. Un censador recopila datos del ltimo censo nacional, al final de un da desea conocer de las persona encuestadas el porcentaje que tiene estudios de primaria, el porcentaje que tiene estudios de secundaria, porcentaje de carrera tcnica, porcentaje de estudios profesionales, y porcentaje con estudios de post grado.
Pg. 30
Asignatura: Algoritmia y Estructura de Datos
SEGUNDA UNIDAD
Tema N 4: Modularizacin de Programas
4.1 Paso de Parmetros
Para llamar un bloque de cdigo ms de una vez, es tener las instrucciones en subprogramas que se invocan cada vez que se necesiten. Los subprogramas son partes separadas de cdigo que ejecutan tareas pequeas de un programa principal.
Parmetros de entrada (valor)
Guarda en memoria una copia temporal de la variable, dentro del procedimiento solo se utiliza la copia, cuando se modifica el valor del parmetro solo afecta al almacenamiento temporal, la variable actual fuera del procedimiento nunca se toca.
Parmetros de entrada/salida (referencia)
Los cambios que se efecten sobre dicha variable dentro del procedimiento se mantienen incluso despus de que este haya terminado, es decir los cambios afectan al programa principal.
Ejemplo:
Pg. 31
Asignatura: Algoritmia y Estructura de Datos
4.2 Procedimientos
Se utilizan para imprimir valores a ser utilizados en el programa.
Declaracin:
void NombreProcedimiento( )
void NombreProcedimiento (argumentos)
4.3 Funciones
Se utilizan para retornar un valor a ser utilizado en el programa.
Declaracin:
Tipo_dato NombreFuncin( )
Tipo_dato NombreFuncin(argumentos)
Si se tiene el siguiente programa simple para sumar dos nmeros:
//Programa Simple
#include
using namespace std;
void main()
{ int a,b,c;
couta;
coutb;
c=a+b;
cout
Pg. 32
Asignatura: Algoritmia y Estructura de Datos
//Procedimientos con Argumentos: Ejemplo1
#include
using namespace std;
void sumar(int a, int b)
{ int c;
c=a+b;
cout
Pg. 33
Asignatura: Algoritmia y Estructura de Datos
//Funciones con Argumentos: Ejemplo1
#include
using namespace std;
int sumar(int a, int b)
{ int c;
c=a+b;
return c;
}
void main()
{ int sum,a,b;
couta;
coutb;
sum=sumar(a,b);
cout
Pg. 34
Asignatura: Algoritmia y Estructura de Datos
Otra Manera de definir un Procedimiento y una Funcin:
//Procedimientos con Argumentos
#include
using namespace std;
void sumar(int a, int b);
int main()
{ int a,b;
couta;
coutb;
sumar(a,b);
return 0;
}
void sumar(int a, int b)
{ int c;
c=a+b;
cout
Pg. 35
Asignatura: Algoritmia y Estructura de Datos
Ejemplos:
1. Elaborar un programa para calcular a la funcin de acuerdo a lo sgte.:
y = x 2 + 5 si x = 2
2. Para repartir una herencia se tiene en cuenta: Si la cantidad de hijos es menor a 4, se repartir exactamente entre el nmero de hijos; si son cuatro o ms hijos, la mitad le tocar al hermano mayor y el resto se dividir entre los dems hermanos.
#include
using namespace std;
float ecuaciones()
{ float x,y;
coutx;
if(x
Pg. 36
Asignatura: Algoritmia y Estructura de Datos
Actividades
Construir los programas usando funciones y procedimientos en Cdigo en C respectivo para:
1. Realizar un programa que tenga un mdulo reciba dos argumentos a, b (enteros) y que intercambie los valores de dichas variables.
-> Elaborar un mdulo para leer a y b.
2. En un banco, a los clientes que de tipo 1, 2, 3, que aperturan cuentas de Ahorro(A), Corriente (C), o Valores (V), todos en nuevos soles, se les otorga un bono (dlares), de acuerdo a la sgte. Tabla:
Reportar el Tipo de Cliente, la Cuenta que apertura, el monto total de la cuenta.
Considere el ingreso del tipo de cambio de moneda al da.
3. En un colegio, a la pensin de sus alumnos de tipo A, B, C, de acuerdo al promedio obtenido, le asignan becas:
De acuerdo a la beca obtenida, se le descuenta al pago de su pensin:
Mostrar el tipo de alumno, la beca obtenida, y el monto total de pago de pensin,
4. Elaborar los mdulos de programa adecuados que permita leer las edades de n personas y reporte el mayor, el menor y el promedio de edades.
Tema N 5: Libreras de Programacin creadas por el usuario
Las libreras estndar del procesador del lenguaje C: iostream.h, math.h, conio.h, stdio.h, etc., existen liberas de cabecera (header, de alli la extensin .h) que pueden ser creadas por el programador, y ser invocadas en diferentes programas fuente (el programa con extensin .cpp) como parte de la reutilizacin de cdigo.
Cuenta:
Tipo cliente
A C V
1 $ 500 $ 400 $ 300
2 $ 400 $ 300 $ 200
3 $ 300 $ 200 $ 100
Promedio
Alumno
0 10 11 - 16 17 -20
A A ++ A + A -
B B ++ B + B -
C C ++ C+ C -
A ++ = 5 % A + = 7% A - = 10 %
B ++ = 3 % B + = 5 % B - = 7 %
C ++ = 1 % C+ = 3% C - = 5 %
Pg. 37
Asignatura: Algoritmia y Estructura de Datos
Ejemplo 1:
Leer un nmero entero diferente a cero, y si es positivo, reportar El numero es positivo, caso contrario es negativo.
Solucin:
- Crear la librera con extensin .h para la funcin de lectura de datos enteros, llamado lecturadato.h.
- Crear el programa .cpp que invoca a la librera .h , lecturadato.h, creada por el programador.
Ejemplo 2:
Desarrollar la sgte. Ecuacin solo si son nmeros positivos y diferentes a cero.
y = x * (2x - a)
Solucin:
- La funcin para la lectura de datos enteros y diferentes a cero ya fue creada para el programa del ejemplo 1.
- Solo se crear el programa fuente con extensin .cpp para desarrollar la ecuacin.
#include
using namespace std;
int leedatoe()
{ int dato;
do{
coutdato;
}while(dato==0);
return dato;
}
#include
#include c:\programas\lecturadato.h
using namespace std;
void main()
{ int num;
num=leedatoe();
if(num>0)
cout
Pg. 38
Asignatura: Algoritmia y Estructura de Datos
Actividades
Construir los programas usando funciones y procedimientos y libreras de programacin:
1. Una empresa categoriza a sus artculos como A, B y C, adems a sus clientes como Excelente(E), Bueno(B), Regular(R) y Malo(M), estableciendo polticas de descuento (en %) de acuerdo a la sgte. tabla:
Tipo Artculo
Tipo Cliente A B C
Excelente (E) 40 30 20
Bueno (B) 30 20 10
Regular (R) 20 10 0
Malo (M) 0 0 0
El cliente Excelente y Bueno puede pagar en Efectivo, Cheque o crdito, el cliente Regular puede pagar en Efectivo o Cheque y el cliente Malo solo paga en efectivo.
2. En un cajero se puede realizar las operaciones de depsito, saldo, y retiro. Elabore un programa permitir a un cliente realizar estas operaciones las veces que lo requiera.
Tema N 6: Funciones Recursivas
Se denominan funciones recursivas a aquellas que se invocan a s mismas en un programa.
Hay que tener algunas cosas en cuenta en las funciones recursivas:
- Toda funcin recursiva debe tener algn punto de finalizacin.
- La funcin debe tender a ese punto de finalizacin.
La funcin factorial:
n!
4! = 4 * 3 * 2 * 1
4 * 3! Es decir n*(n-1)!
3! = 3 * 2 * 1
3 * 2! Es decir n*(n-1)!
2! = 2 * 1
2 * 1! Es decir n*(n-1)!
1! = 1 * 0!
0! = 1
int factorial(int n)
{ if (n == 0)
return 1;
else
return n*factorial(n-1);
}
4! = 4 * 3 * 2 * 1
4 * 3!
3! = 3 * 2 * 1
3 * 2!
2! = 2 * 1
2 * 1!
1! = 1 * 0!
0! = 1
1 * 1 * 2 * 3 * 4 = 24
Pg. 39
Asignatura: Algoritmia y Estructura de Datos
La funcin multiplicacin:
a * b
3 * 4 = 3 + 3 + 3 + 3
3 + (3 * 3)
3 * 3 = 3 + 3 + 3
3 + (3 * 2)
3 * 2 = 3 + 3
3 + (3 *1)
3 * 1 = 3
int multiplica(int a, int b)
{ if (a == 0 || b == 0)
return 0;
else
if (b == 1)
return a;
else
return a+multiplica(a,b-1);
}
Actividades
Investigar y Exponer las funciones recursivas de:
1. Serie Fibonacci
2. Mximo Comn Divisor
3. Torres de Hanoi.
3 * 4 = 3 + 3 + 3 + 3
3 + (3 * 3)
3 * 3 = 3 + 3 + 3
3 + (3 * 2)
3 * 2 = 3 + 3
3 + (3 *1) 3 * 1 = 3 3 + 3 + 3 + 3 = 12
Pg. 40
Asignatura: Algoritmia y Estructura de Datos
- Arreglos - Registros - Archivos - Cadenas
- Listas - Pilas - Colas
- Arboles - Grafos
TERCERA UNIDAD
Tema N 7: Estructuras de Datos
7.1 Definicin de Estructura de Datos
Una estructura de datos es una coleccin de datos que se caracteriza por su organizacin y por el conjunto de operaciones que se definen para su manipulacin.
7.2 Clasificacin de Estructura de Datos
Estructura de Datos
Simples
Estructuras de Datos
Compuestos
Estructuras de Datos Estticos: Son aquellas en las que la cantidad de memoria que ocupan se define antes de ejecutar el programa. Durante la ejecucin del mismo este tamao asignado no puede alterarse.
Estructuras de Datos Dinmicos: Son aquellas en las que no es necesario reservar espacio de memoria antes de ejecutar el programa, ya que este espacio se puede asignar durante su ejecucin segn se necesite. As mismo dicho espacio puede ser liberado para poder ser utilizado por otros datos.
Actividades
Investigar y Exponer cuales son las estructuras de datos:
1. Estndar.
2. Creadas por el Programador.
- Enteros - Reales - Caracter
Estructuras de Datos Estndar
Estructuras de Datos No Estndar (Definidos por el programador)
Lineales
Estructuras de Datos Dinmicos
Estructuras de Datos Estticos
No Lineales
Pg. 41
Asignatura: Algoritmia y Estructura de Datos
//Programa para promediar las alturas de los alumnos
#include
#define N 5
using namespace std;
void leerarre(double array[ ])
{ int i;
for(i=0;i
Pg. 42
Asignatura: Algoritmia y Estructura de Datos
El siguiente programa lee un arreglo de nmeros enteros y encuentra el mayor y menor elemento. El mx de elementos es 100 pero solo ingresa n elementos.
8.1 Actualizacin de Arreglos Unidimensionales
Los Arreglos necesitan actualizarse mientras se efecta algn proceso con ellos. La actualizacin de arreglos consiste en tres operaciones: Aadir elementos al final del arreglo (siempre y cuando exista espacio en el arreglo), Insertar elementos en cualquier posicin del arreglo y Eliminar elementos.
Aadir
//Aadir un valor en la ultima posicin #include
#define MAX 100
using namespace std;
int leenum()
{ int num;
do{ coutnum; cout
Pg. 43
Asignatura: Algoritmia y Estructura de Datos
void ingresadatos(int V[MAX], int n)
{ int i;
cout
Pg. 44
Asignatura: Algoritmia y Estructura de Datos
void mostrar(int V[MAX], int n)
{ int i;
cout
Pg. 45
Asignatura: Algoritmia y Estructura de Datos
void mostrar(int V[MAX], int n)
{ int i;
cout
Pg. 46
Asignatura: Algoritmia y Estructura de Datos
ingresadatos(A,num); cout
Pg. 47
Asignatura: Algoritmia y Estructura de Datos
void bbinaria(int a[MAX], int n)
{ int elem; int BAJO, ALTO, CENTRAL; BAJO=1; ALTO=n;
cout
Pg. 48
Asignatura: Algoritmia y Estructura de Datos
Ejemplos:
1. Elaborar un programa que dado dos arreglos numricos A y B de n1 y n2 elementos respectivamente, guarde en un tercer arreglo C los elementos que estn en A pero no estn en B. Ejemplo:
5 15 5
8 9 12
12 8 2
6 6
9 45
2 22
7
Solucin:
#include
#define MAX 100
using namespace std;
void ingresadatos(int V[MAX], int n,char titu[20])
{ int i;
cout
Pg. 49
Asignatura: Algoritmia y Estructura de Datos
for(i=0;i
Pg. 50
Asignatura: Algoritmia y Estructura de Datos
void mostrar(int V[MAX], int n, char titu[20])
{ int i;
cout
Pg. 51
Asignatura: Algoritmia y Estructura de Datos
10. Crear un mdulo de programa donde se eliminen los elementos repetidos en un Arreglo de n elementos.
11. Buscar un elemento en un arreglo de n elementos, utilizando bsqueda binaria (previamente ordenado con el mtodo de la burbuja y sin que exista elementos repetidos), y eliminarlo.
Tema N 9: Arreglos Bidimensionales
Tambin llamado matrices, es un conjunto finito y ordenado de elementos de un mismo tipo de dato. La definicin de un arreglo es como sigue:
TipoDato NombreMatriz[nfilas][ncolumnas]
Ejm. Entero M[4][5]
columnas
filas
Para declarar un arreglo bidimensional en lenguaje C++ se sigue la siguiente sintaxis:
Tipo de Dato Nombre del arreglo [# filas] [# columnas];
Lectura y Presentacin de Datos en una Matriz: #include
#define MAX 100
using namespace std;
int leenum()
{int num;
do{ cin>>num; cout
Pg. 52
Asignatura: Algoritmia y Estructura de Datos
void main()
{ int B[MAX][MAX]; int nf,nc;
cout
Pg. 53
Asignatura: Algoritmia y Estructura de Datos
void diagonalsecundaria(int M[MAX][MAX], int nf, int nc)
{ int i,j,k;
k=nc-1;
if(nf==nc)
{ for(i=0;i
Pg. 54
Asignatura: Algoritmia y Estructura de Datos
9.1 Actualizacin de Arreglos Bidimensionales
//Insertar fila y columna de una matriz
//Se entiende que se realizan los procedimientos de lectura de datos
int insertar_fila(int M[MAX][MAX], int nf, int nc)
{ int i,j,pos;
do{ coutpos;
}while(posnf);
for(i=nf-1;i>=pos;i--)
for(j=0;j
Pg. 55
Asignatura: Algoritmia y Estructura de Datos
//Borrar fila y columna de una matriz
.. //Se entiende que se realizan los procedimientos de lectura de datos
int borrar_fila(int M[MAX][MAX], int nf, int nc)
{ int i,j,pos;
do{ coutpos;
}while(pos=nf);
for(i=pos;i
Pg. 56
Asignatura: Algoritmia y Estructura de Datos
9.2 Aplicacin de Arreglos Bidimensionales
1. Imprimir lo nmeros que rodean a un nmero X, la primera vez que se encuentra en la Matriz incluido el nmero X:
4 3 7 9 3 7 9
M 1 4 5 8 4 5 8
2 5 4 1 5 4 1
7 -6 3 4
Solucin:
.. //Se entiende que se realizan los procedimientos de lectura de datos
void rodean(int M[MAX][MAX], int nf, int nc,int n)
{int i,j;
int f,c;
int ban=0;
for(i=0;i
Pg. 57
Asignatura: Algoritmia y Estructura de Datos
0 1 2 3
0
1
2
0 1 2 3
0
1
2
0 1 2 3
0
1
2
0 1 2 3
0
1
2
2. Ingresa un Numero N y luego imprime fila y columna N de la matriz, si solo existe la fila N, solo se imprime dicha fila.
3 5 2 1 1
6 -5 7 9 9
8 1 4 -3 -3
3 5 2 1 2
6 -5 7 9 7
8 1 4 -3 8 1 4 -3
Solucin:
.. //Se entiende que se realizan los procedimientos de lectura de datos void seleccion(int M[MAX][MAX], int nf, int nc)
{ int i,j,n;
do{ coutn;
}while(n=nf && n>=nc));
cout
Pg. 58
Asignatura: Algoritmia y Estructura de Datos
3. Invertir Diagonal Principal de una Matriz:
6 8 1 4 8 1
M 7 2 5 M 7 2 5
1 5 4 1 5 6
.. //Se entiende que se realizan los procedimientos de lectura de datos
void mostrar(int M[MAX][MAX], int nf, int nc)
{ int i,j;
cout
Pg. 59
Asignatura: Algoritmia y Estructura de Datos
//Se entiende que se realizan los procedimientos de lectura de datos
void mostrar(int M[MAX][MAX], int nf, int nc)
{
int i,j;
cout
Pg. 60
Asignatura: Algoritmia y Estructura de Datos
Tema N 10: Registro (Estructura)
Una estructura (registro) es un tipo definido por el usuario en base a otros tipos de datos con el objeto de reunir informacin de un mismo elemento o entidad, a diferencia de un arreglo que tiene datos homogneos.
Ejemplo:
Juan 19 1.73 M
nombre
(cadena)
edad
(int)
Talla
(float)
sexo
(char)
Cada componente de la estructura se denomina campo.
Declaracin: struct nombre{
char f[5];
char e[3];
int s;
char a;
};
Ejemplo:
Datos afines
respecto a la
estructura.
#include
using namespace std;
struct{
int dia;
int mes;
long int anual;
}hoy;
void main( )
{
couthoy.dia;
couthoy.mes;
couthoy.anual;
cout
Pg. 61
Asignatura: Algoritmia y Estructura de Datos
struct domicilio{
char nombre[30];
char calle[30];
int num;
char ciudad[20];
};
typedef struct domicilio;
void main( )
{
domicilio Oficina, casa;
}
Uso del typedef: Siempre en los programas se realiza una tarea de modelado de los datos que consiste en convertir los datos reales en datos aplicables en un programa informtico. En C existe una palabra reservada llamada typedef que sirve para crear tipos de datos propios. Permite dar una mayor claridad y simplicidad al cdigo, aunque su uso es opcional. Su sintaxis es la siguiente:
typedef definicinDelTipo NombreDelTipoDeDatos
Definir estructuras con typedef
#include
using namespace std;
struct direccion{
char nombre[30];
char calle[30];
int num;
char ciudad[30];
};
void main( )
{ direccion oficina, casa;
cout
Pg. 62
Asignatura: Algoritmia y Estructura de Datos
Asignacin de estructuras
#include
#include
using namespace std;
typedef struct{
char nombre[25];
char apellidos[50];
int edad;
} Persona;
void main( )
{ Persona p1,p2;
strcpy(p1.nombre,"Pepe");
strcpy(p1.apellidos,"Villegas Varas");
p1.edad=12;
p2=p1; // Asignacin de estructuras
cout
Pg. 63
Asignatura: Algoritmia y Estructura de Datos
Ejemplo de Invocacin de una Estructura en Otra:
Utilizar estructuras anidadas: una para fecha con da, mes y ao; y otra para persona, la cual se invocar como inscrito y tiene nombres, apellidos, nacimiento (que es del tipo fecha), y sexo. Reportar los datos ingresados.
#include
#include
#define N 50
using namespace std;
struct fecha{
int dia;
int mes;
long int anual;
};
struct persona{
char nombres[N];
char apellidos[N];
fecha fnacimiento;
char sexo[10];
};
void main()
{ persona inscrito;
cout
Pg. 64
Asignatura: Algoritmia y Estructura de Datos
Tema N 11: Union
Son a primera vista, entidades muy similares a las estructuras, estn formadas por un nmero cualquiera de miembros, al igual que aquellas, pero en ste caso no existen simultneamente todos los miembros, y slo uno de ellos tendr un valor vlido.
A diferencia de la Estructura, esta es una localidad de memoria que se utiliza para compartir datos de diferentes tipos.
Ejemplo: Entonces struct tabla {
char nombre[30];
char tipo;
char cadena[5];
int entero;
};
Actividades
1. Elaborar un programa en C, para demostrar el uso y la diferencia de la unin con respecto a los registros.
Tema N 12: Tipos de Datos Abstractos (TDA)
Es un tipo de dato definido por el programador, que consta de datos y operaciones.
Ejm: clases, listas, pilas, colas.
TDA = Representacin (datos) + Operaciones (funciones y procedimientos)
Actividades
1. Investigar y exponer los tipos de datos abstractos que se pueden usar en la construccin de un programa.
Si tipo es c , se
utiliza cadena, pero
si es e , se utiliza
entero.
struct tabla{
char nombre[30];
char tipo;
union {
char cadena[5];
int entero;
} dato;
};
class alumno
{
private:
string nombre;
string carrera;
public:
alumno();
~alumno();
void ingresar();
void imprimir();
};
alumno
nombre
carrera
ingresar
imprimir
Pg. 65
Asignatura: Algoritmia y Estructura de Datos
Tema N 13: Clases y Programacin Orientada a Objetos
Es una tcnica o estilo de programacin basada en elementos bsicos llamados objetos.
Objeto: Es una entidad que se caracteriza por determinados atributos llamados datos miembro y por ciertas funciones denominados funciones miembro o mtodos que permiten su manipulacin.
Clase: Una clase es la definicin formal de los atributos y funciones miembro de un conjunto de objetos que se realiza en un programa.
class < nombre de la clase >
{ < private:/public: >
tipodato atributo;
tipodato atributo;
tipodato atributo;
< private:/public: >
Funcion/procedimiento();
Funcion/procedimiento();
Funcion/procedimiento();
};
Los datos y funciones miembro pueden ser definidos como private o public.
private: slo pueden ser accesados desde funciones miembro.
public: pueden ser accesados directamente, sin utilizar funciones miembro.
Usualmente se debe declarar los datos miembro tipo private y las funciones miembro tipo public.
Para accesar desde fuera del objeto a sus datos pblicos y funciones miembro pblicas escribe.
< nombre del objeto >.< dato miembro >
< nombre del objeto >.< funcion miembro >
Constructor: Un constructor es una funcin miembro que permite inicializar los datos miembro de un objeto. Tiene las siguientes caractersticas:
- Su nombre es igual al de la clase.
- No devuelve valores.
- Puede haber ms de un constructor.
- Se invoca al momento de declarar al objeto.
Destructor: Un destructor es una funcin que permite liberar el rea de memoria ocupada por un objeto cuando este ya no va ser usado .Sus caractersticas son:
- Su nombre es igual al de la clase pero precedido por el smbolo ~ .
- No devuelve valores.
- Slo puede haber un destructor.
- Se invoca al momento de salir o abandonar el mbito donde fue creado el objeto.
Pg. 66
Asignatura: Algoritmia y Estructura de Datos
#include
#include
using namespace std;
class alumno
{ private:
string nombre;
string carrera;
public:
alumno();
~alumno();
void ingresar();
void imprimir();
};
alumno::alumno()
{ nombre=" ";
carrera=" ";
}
alumno::~alumno()
{
}
void alumno::ingresar()
{ coutnombre;
coutcarrera;
}
void alumno::imprimir()
{ cout
Pg. 67
Asignatura: Algoritmia y Estructura de Datos
Tema N 14: Punteros a Direccin de Memoria
Un puntero es un tipo especial de variable, que almacena el valor de una direccin de memoria, esta direccin puede ser la de una variable individual, pero mas frecuentemente ser la de un elemento de un array, una estructura u objeto de una clase. Los punteros, tambien pertenecen a un tipo, se dice que un puntero 'apunta a' ese tipo al que pertenece.
MEMORIA
200
p 800
800
x 23
p es una variable tipo puntero.
x es una variable tipo int apuntada por p.
14.1 Declaracin de variables tipo puntero
tipo de dato apuntado * variable tipo puntero:
Ejemplos:
int *p; // p es una variable tipo puntero que apunta a una variable tipo int.
float *q; // q es una variable tipo puntero que apunta a una variable tipo float.
char *r; // r es una variable tipo puntero que apunta a una variable tipo char.
Para hacer referencia a la variable apuntada se usa la notacin:
*variable tipo puntero
Ejemplo:
MEMORIA
200
p 800
800
x 23
*p
*p es otro nombre para la variable x
Pg. 68
Asignatura: Algoritmia y Estructura de Datos
Variables estticas
Son aquellas que se declaran expresamente en los programas y a las que el sistema operativo asigna una posicin de memoria antes de la ejecucin del mismo.
Variables dinmicas
Son variables que se crean y se destruyen durante la ejecucin del programa. No son declaradas explcitamente en los programas.
Operador &
Devuelve la direccin de memoria de una variable. Su sintaxis es:
& nombre de variable
Ejemplo:
#include
using namespace std;
void main ()
{ int x,y; // Variables de tipo entero
int *p; // Puntero a una variable de tipo entero
// Leemos la direccin de la variable x mediante & y lo almacenamos en la variable puntero p
p = &x; // p contiene la direccin en la que se encuentra x
// Utilizando el operador *, podemos acceder a su informacin. *p representa ahora el valor de la variable x
*p = 10; // Ahora x contiene el valor 10
cout
Pg. 69
Asignatura: Algoritmia y Estructura de Datos
Ejemplo: int *p;
float *q;
p = new int; // crea una variable dinmica de tipo int y hace que p apunte a ella.
q = new float;// crea una variable dinmica de tipo float y hace que q apunte a ella.
NOTA:
No se puede asignar un valor constante a una variable tipo puntero ni ingresar un valor por teclado para ella.
int *p;
p = 800; // ERROR
cin>>p; // ERROR Si es posible imprimir el valor de un puntero: cout
Pg. 70
Asignatura: Algoritmia y Estructura de Datos
Constante NULL
Es una constante predefinida en C++ cuyo valor es cero (0) y sirve para inicializar una variable tipo puntero que no apunta a ninguna variable.
variable tipo puntero = NULL;
void main()
{ int *p;
p = new int;
*p = 17;
cout
Pg. 71
Asignatura: Algoritmia y Estructura de Datos
Tema N 15: Estructuras de Datos Dinmicas
15.1 Lista Enlazada Simple
Una lista enlazada es una estructura de datos dinmica formada por un conjunto de elementos llamados nodos.
Cada nodo consta de dos partes:
- Una que contiene el dato.
- Otra que contiene la direccin del siguiente nodo.
Nodo
Dato Direcc nodo sig
Los nodos son variables dinmicas que se crean y destruyen de acuerdo a los requerimientos del proceso.
- Para acceder a la lista es necesario un puntero que contenga la direccin del primer nodo.
- Si la lista est vaca dicho puntero tendr el valor NULL.
- El ltimo elemento de la lista se reconoce porque su puntero al siguiente tiene valor NULL.
Representacin Grfica de una Lista Enlazada
Lista
9.1 Listas Simplemente Enlazadas
Es un conjunto de elementos en los que cada elemento contiene la posicin o direccin del sgte. campo de la Lista.
Donde cada elemento de la lista simplemente enlazada llamado nodo se define:
struct nodo{
int n; //el campo puede ser string, float, estructura, etc.
nodo * sgte; // direccin al siguiente nodo
};
12 30 21 54 NULL
NULL Lista
Pg. 72
Asignatura: Algoritmia y Estructura de Datos
ListasSE.h
#include
#include
#define MAX 100
using namespace std;
struct nodo
{ int dato;
nodo *sig;
};
typedef nodo *pnodo;
class lista
{ private:
pnodo pL;
public:
lista();
~lista();
void insertar_comienzo();
void insertar_final();
void insertar_despues();
void eliminar_inicio();
void eliminar_final();
void buscar();
pnodo buscar_despues(int x);
void buscar_anterior();
void imprimir();
};
lista::lista()
{
pL = NULL;
}
lista::~lista()
{
pnodo p,q;
if ( pL != NULL )
{ p = pL;
while ( p != NULL )
{ q = (*p).sig;
delete p;
p = q;
}
pL=p;
}
}
void lista::insertar_comienzo()
{
pnodo nuevo;
int valor;
coutvalor;
nuevo = new nodo;
(*nuevo).dato = valor;
(*nuevo).sig = pL;
pL = nuevo;
}
Pg. 73
Asignatura: Algoritmia y Estructura de Datos
void lista::insertar_final()
{ pnodo nuevo,aux;
int valor;
nuevo = new nodo;
coutvalor;
(*nuevo).dato = valor;
(*nuevo).sig = NULL;
if ( pL == NULL )
pL = nuevo;
else
{ aux = pL;
while ( (*aux).sig != NULL )
aux = (*aux).sig;
(*aux).sig = nuevo;
}
}
void lista::insertar_despues()
{ pnodo nuevo,r,temp;
int num;
nuevo=new nodo;
cout(*nuevo).dato;
coutnum;
r=lista::buscar_despues(num);
if(r==NULL)
cout
Pg. 74
Asignatura: Algoritmia y Estructura de Datos
if(ban==0)
{cout
Pg. 75
Asignatura: Algoritmia y Estructura de Datos
void lista::eliminar_inicio()
{ pnodo aux;
if(pL==NULL)
{ cout
Pg. 76
Asignatura: Algoritmia y Estructura de Datos
cout
Pg. 77
Asignatura: Algoritmia y Estructura de Datos
Gracias a los punteros ant y sig es que puede recorrerse la LDE en forma bidireccional, lo cual constituye una ventaja importante frente a una lista enlazada simple que slo puede recorrerse en un sentido.
En contraparte, el espacio ocupado en memoria es mayor debido a la inclusin de un segundo puntero.
Para tener acceso a la lista es necesario un puntero Ld que contenga la direccin del primer nodo.
El campo ant del primer nodo tiene valor NULO, pues no existe un nodo anterior a este, anlogamente, el ltimo nodo tiene tambin en su campo sig el valor NULO para expresar el hecho de que no existe un siguiente nodo.
ListaDE NULL
NULL
Actividades
1. Utilizando los algoritmos de implementacin de la lista simplemente enlazada, implementar los programas para:
a. Lista Circular.
b. Lista Doblemente Enlazada.
15.4 Colas
Una Cola es una lista ordenada de elementos en la cual las inserciones se realizan por un extremo llamado Final y las eliminaciones por el otro extremo denominado Frente. Una Cola es una estructura tipo FIFO ( First In - First Out ) ya que los elementos se sacan de la cola en el mismo orden en que fueron insertados. La estructura de los nodos de una cola es la siguiente:
Para especificar una cola son necesarios dos punteros, uno que apunte al primer elemento de la cola y el otro al ltimo elemento de la cola.
Cola NULL
En una cola se definen dos operaciones:
Encolar: insertar un nuevo elemento al final de la cola
Desencolar: eliminar el elemento del comienzo de la cola
12 30 21 54
dato sig
12 30 21 54
Pg. 78
Asignatura: Algoritmia y Estructura de Datos
Cola.h
#include
using namespace std;
struct nodo
{ int dato;
nodo *sig;
};
typedef nodo *pnodo;
class cola
{ private:
pnodo pL;
public:
cola();
~cola();
void encolar();
void desencolar();
void mostrar();
};
cola::cola()
{ pL = NULL; }
cola::~cola()
{ pnodo p,q;
if ( pL != NULL )
{ p = pL;
while ( p != NULL )
{ q = (*p).sig;
delete p;
p = q;
}
pL=p;
}
}
void cola::encolar()
{ pnodo nuevo,aux;
int valor;
nuevo = new nodo;
coutvalor;
(*nuevo).dato = valor;
(*nuevo).sig = NULL;
if ( pL == NULL )
pL = nuevo;
else
{ aux = pL;
while ( (*aux).sig != NULL )
aux = (*aux).sig;
(*aux).sig = nuevo;
}
}
Pg. 79
Asignatura: Algoritmia y Estructura de Datos
void cola::desencolar()
{ pnodo aux;
if(pL==NULL)
{ cout
Pg. 80
Asignatura: Algoritmia y Estructura de Datos
15.5 Pilas
Una Pila es una lista de elementos en la cual las inserciones y las eliminaciones se realizan por un mismo extremo llamado Cima.
Una Pila es una estructura tipo LIFO ( Last In - First Out ) ya que los elementos se sacan de la pila en orden contrario al que fueron insertados.
La estructura de los nodos de una pila es la siguiente:
Para especificar una pila es necesario un puntero, que apunte al primer elemento de la pila, es decir a la cima.
Pila NULL
En una pila slo estn permitidas dos operaciones:
Apilar: Insertar un elemento por el lado de la cima
Desapilar: Eliminar el elemento de la cima de la pila
Pila.h
#include
using namespace std;
struct nodo
{ int dato;
nodo *sig;
};
typedef nodo *pnodo;
class stack
{ private:
pnodo pL;
public:
stack();
~stack();
void apilar();
void desapilar();
void mostrar();
};
stack::stack()
{ pL = NULL;
}
stack::~stack()
{ pnodo p,q;
if ( pL != NULL )
{ p = pL;
dato sig
12 30 21 54
Pg. 81
Asignatura: Algoritmia y Estructura de Datos
while ( p != NULL )
{ q = (*p).sig;
delete p;
p = q;
}
pL=p;
}
}
void stack::apilar()
{ pnodo nuevo,aux;
int valor;
nuevo = new nodo;
coutvalor;
(*nuevo).dato = valor;
(*nuevo).sig = NULL;
if ( pL == NULL )
pL = nuevo;
else
{ aux = pL;
while ( (*aux).sig != NULL )
aux = (*aux).sig;
(*aux).sig = nuevo;
}
}
void stack::desapilar()
{pnodo aux=pL,temp;
if(pL==NULL)
{ cout
Pg. 82
Asignatura: Algoritmia y Estructura de Datos
Pila.cpp
#include
#include "Pila.h"
using namespace std;
void main()
{ stack S; int opc;
do
{ cout
Pg. 83
Asignatura: Algoritmia y Estructura de Datos
Conceptos Bsicos sobre rboles
Hoja: Todo nodo que no tiene hijos.
Ejemplo: B, C, H, I, P, Q, K, L, M, N
Peso del rbol: Cantidad de Hojas.
Ejemplo: 10
Camino: Enlace entre dos nodos consecutivos y rama es un camino que termina en hoja.
Ejemplo: camino ( A , Q ) = A E J Q
Longitud del camino: Es la cantidad de aristas que conforman un camino.
Ejemplo: longitud_camino ( A , Q ) = 3
Nivel: Cada nodo tiene asociado un nivel, determinado por la logintud de camino desde la raiz hasta el nodo especifico.
Ejemplo:
Nivel 0 A
Nivel 1 B,C,D,E,F,G
Nivel 2 H,I,J,K,L,M,N
Nivel 3 P,Q
Profundidad de un rbol: Es el numero mximo de nodos en una rama. Es decir nivel mas alto de los nodos ms uno.
Ejemplo:
profundidad = nivel +1
profundidad = 3 +1 = 4
Representacin Primer Hijo Siguiente Hermano
Cada nodo del rbol solo tiene dos punteros, uno para apuntar a su primer hijo y otro para apuntar a su siguiente hermano.
A
B C D E F G
H I J K L M N
P Q
Pg. 84
Asignatura: Algoritmia y Estructura de Datos
#include
#define MAX 10
using namespace std;
struct nodo
{ int dato;
nodo * hijo;
nodo * her;
};
typedef nodo *pnodo;
class arbol
{public: //cambiar a privada para recursividad de mostrar
pnodo rpri;
public:
arbol();
~arbol();
pnodo buscar(pnodo aux, pnodo pos,int d);
void mostrar(pnodo aux);
void inserta_principal();
void inserta_hijo();
void inserta_hermano();
};
arbol::arbol()
{rpri =NULL;}
arbol::~arbol()
{ }
pnodo arbol::buscar(pnodo aux, pnodo pos, int d)
{ pnodo aux2;
if (aux==NULL)
{ pos=NULL; }
else
{ if((*aux).dato ==d)
{ pos=aux;
}
else
{
aux2=(*aux).hijo;
do
{ while(aux2!=NULL && (*aux2).hijo ==NULL)
{ if((*aux2).dato==d)
{ pos=aux2;
break;
}
aux2=(*aux2).her;
}
if(aux2==NULL && pos==NULL)
return NULL;
if(aux2!=NULL)
{ pos=buscar(aux2,pos,d);
aux2=(*aux2).her;
}
else
break;
}while(aux2!=NULL);
}
}
return pos;
}
Pg. 85
Asignatura: Algoritmia y Estructura de Datos
void arbol::mostrar(pnodo aux)
{pnodo aux2,aux3;
//usando recursion para mostrar
if(aux==rpri)
{ cout
Pg. 86
Asignatura: Algoritmia y Estructura de Datos
void arbol::inserta_hermano()
{pnodo herma,pos=NULL;
int num;
herma=new nodo;
cout
Pg. 87
Asignatura: Algoritmia y Estructura de Datos
16.2 rbol Binario
Un rbol Binario es aquel en el que cada uno de sus nodos puede tener 0, 1 o 2 hijos.
Raiz
Subarbol
Izquierdo
Subarbol
Derecho
Ejemplo:
A
B C
D E F
G
Recorrido de rboles Binarios
a) Recorrido en Orden
Recorrer el subrbol izquierdo en orden
Visitar el nodo raz
Recorrer el subrbol derecho en orden
b) Recorrido en Pre-Orden
Visitar el nodo raz
Recorrer el subrbol izquierdo en pre-orden
Recorrer el subrbol derecho en pre-orden
c) Recorrido en Post-Orden
Recorrer el subrbol izquierdo en post-orden
Recorrer el subrbol derecho en post-orden
Visitar el nodo raz
rbol de Expresin
Es un rbol binario en el que las hojas contienen los operandos y los nodos internos los operadores de una expresin matemtica.
Ejemplo: ( a ^ ( b * c ) ) + ( ( d * e ) f ) / g )
+
/
a g
b c
-
f
d e
*
*
^
Pg. 88
Asignatura: Algoritmia y Estructura de Datos
16.3 rboles Binarios de Bsqueda ( ABB )
Un ABB es un rbol binario en el que para todos sus nodos ( excepto sus hojas ) se cumple que el dato almacenado en l, es mayor a todos los datos de los nodos del subrbol izquierdo pero menor a todos los datos de los nodos del subrbol derecho.
Ejemplo:
6
2 8
1 4
3
10
9
Para poder tener acceso al rbol es necesario un puntero que contenga la direccin de la raz.
arbolabb.h
#include
using namespace std;
struct nodoABB
{ nodoABB *hizq;
int dato;
nodoABB *hder;
};
typedef nodoABB *pnodoABB;
class abb
{ private:
pnodoABB praiz;
public:
abb();
~abb();
pnodoABB getraiz();
pnodoABB buscar( int x );
void insertar( int x );
void imprimeenorden( pnodoABB p );
void imprimepreorden( pnodoABB p );
void imprimepostorden( pnodoABB p );
void eliminaarbol( pnodoABB p );
};
abb::abb()
{ praiz = NULL;
}
abb::~abb()
{ eliminaarbol(praiz);
praiz = NULL;
}
Pg. 89
Asignatura: Algoritmia y Estructura de Datos
pnodoABB abb::getraiz()
{ return praiz;
}
pnodoABB abb::buscar( int x )
{ pnodoABB p; int ok;
if ( praiz == NULL )
return NULL;
else
{ ok = 0;
p = praiz;
while ( p != NULL && ok == 0 )
if ( (*p).dato == x )
ok = 1;
else
if ( x < (*p).dato )
p = (*p).hizq;
else
p = (*p).hder;
return p;
}
}
void abb::insertar( int x )
{ pnodoABB p,q,r,pos;
char h;
p = new nodoABB;
(*p).dato = x;
(*p).hizq = NULL;
(*p).hder = NULL;
if ( praiz == NULL )
praiz = p;
else
{ pos=buscar(x);
if(pos!=NULL)
cout
Pg. 90
Asignatura: Algoritmia y Estructura de Datos
void abb::imprimeenorden( pnodoABB p )
{
pnodoABB Ai,Ad;
if ( p != NULL )
{ Ai = (*p).hizq;
Ad = (*p).hder;
imprimeenorden(Ai);
cout
Pg. 91
Asignatura: Algoritmia y Estructura de Datos
ArbolBinario.cpp
#include
#include "arbolabb.h"
using namespace std;
void main()
{ abb A;
pnodoABB b,r;
int i, x, sn, n, cn,opc;
do
{ cout
Pg. 92
Asignatura: Algoritmia y Estructura de Datos
16.4 Grafos
Un grafo es el objeto abstracto bsico de estudio en teora de los grafos. Informalmente, un grafo se concibe y se representa como un conjunto de objetos llamados vrtices o nodos unidos por enlaces llamados aristas. Las aristas pueden tener direccin (grafo dirigido).
Consta de vrtices (o nodos) y aristas. Los vrtices son objetos que contienen informacin y las aristas son conexiones entre vrtices.
Un camino entre dos vrtices es una lista de vrtices en la que dos elementos sucesivos estn conectados por una arista del grafo.
El grafo ser conexo si existe un camino desde cualquier nodo del grafo hasta cualquier otro. Si no es conexo constar de varias componentes conexas.
Un camino simple es un camino desde un nodo a otro en el que ningn nodo se repite (no se pasa dos veces). Si el camino simple tiene como primer y ltimo elemento al mismo nodo se denomina ciclo. Cuando el grafo no tiene ciclos tenemos un rbol (ver rboles). Varios rboles independientes forman un bosque. Un rbol de expansin de un grafo es una reduccin del grafo en el que solo entran a formar parte el nmero mnimo de aristas que forman un rbol y conectan a todos los nodos.
Segn el nmero de aristas que contiene, un grafo es completo si cuenta con todas las aristas posibles (es decir, todos los nodos estn conectados con todos), disperso si tiene relativamente pocas aristas y denso si le faltan pocas para ser completo. Las aristas son la mayor parte de las veces bidireccionales, es decir, si una arista conecta dos nodos A y B se puede recorrer tanto en sentido hacia B como en sentido hacia A: estos son llamados grafos no dirigidos. Sin embargo, en ocasiones tenemos que las uniones son unidireccionales. Estas uniones se suelen dibujar con una flecha y definen un grafo dirigido. Cuando las aristas llevan un coste asociado (un entero al que se denomina peso) el grafo es ponderado. Una red es un grafo dirigido y ponderado.
Grafo no dirigido
Grafo dirigido
Ejemplo:
La imagen es una representacin del siguiente grafo:
V:={1,2,3,4,5,6}
E:={{1,2},{1,5},{2,3},{2,5},{3,4},{4,5},{4,6}}
El hecho que el vrtice 1 sea adyacente con el vrtice 2 puede ser denotado como 1 ~ 2.
En la Teora de las categoras una categora puede ser considerada como un multigrafo dirigido, con los objetos como vrtices y los morfismos como aristas dirigidas.
En ciencias de la computacin los grafos dirigidos son usados para representar mquinas de estado finito y algunas otras estructuras discretas.
Una relacin binaria R en un conjunto X es un grafo dirigido simple. Dos vrtices a, b en X estn conectados por una arista dirigida ab si aRb.
Actividades
1. Utilizando las estructuras de datos estudiadas, construir el programa que implemente la definicin y las operaciones de un grafo.
Pg. 93
Asignatura: Algoritmia y Estructura de Datos
CUARTA UNIDAD
Tema N 17: Archivos (Ficheros)
Existen programas que trabajan con informacin almacenada en memoria principal, pero no es apropiado porque:
- Los datos con los que necesita trabajar el programa son demasiado grandes (ocupan mucha memoria) para que entren en la memoria principal.
- Interesa mantener la informacin despus de cada ejecucin, por eso se necesita utilizar datos procedentes de otros programas (editores, etc.), o generar datos para que puedan ser utilizados por otros programas.
Para estos casos se necesitan ficheros para contener la informacin en memoria secundaria (disco duro, cds, etc.).
Conceptos Bsicos
CAMPO: El campo es la unidad minima de informacin de un registro. Es un item de campos elementales como nombre, numero de empleados, ciudad, etc. Los caracteres se agrupan en campos de datos. Se caracteriza por su tamano o longitud y su tipo de dato, por lo general se supone como longitud fija.
Ejemplo: Campos
Nombre Direccion FechaNacimiento
Los datos contenidos en un campo pueden dividirse en subcampos.
Ejemplo para el campo fecha:
0 7 0 4 2 0 0 8
Dia Mes Ano
REGISTRO: Es una coleccin de informacin por lo general relacionada a una entidad en particular. Los registros organizados en campos se llaman registros lgicos.
Ejemplo:
Empleado
Pueden ser todos de longitud fija, es decir para el ejemplo anterior, los registros empleados pueden contener el mismo nmero de campos: nombre, fecha de nacimiento, direccion, etc.
FICHERO: Es una coleccin de registros relacionados entre si, con aspectos en comun y organizados para un propsito especifico.
Nombre Direccion FechaNacimiento
Pg. 94
Asignatura: Algoritmia y Estructura de Datos
BASE DE DATOS: Es una coleccin de archivos que contienen datos relacionados y se acceden a traves de un conjunto de programas. En C++ un fichero es simplemente un flujo externo que se puede abrir para entrada (dando lugar a un flujo de archivo de entrada), para salida (dando lugar a un flujo de archivo de salida) o para entrada-salida (archivo o fichero de entrada-salida o archivo de E/S).
Una biblioteca en C++ que proporciona funciones y operadores para el manejo de ficheros es la
biblioteca fstream. #include
Declaracin de Variables de tipo "Fichero":
ifstream nombrefichero; // Para ficheros de entrada
ofstream nombrefichero; // Para ficheros de salida
Apertura de Ficheros de Texto:
(La lectura y la escritura en un archivo de texto se puede realizar directamente con los operadores > al igual que se realiza sobre los flujos estndares cin y cout.
// Apertura para Lectura
in.open(nombrefichero);
// Apertura para Escritura(borra el contenido si lo hubiera)
out.open(nombrefichero);
// Apertura para aadir datos al final
out.open(nombrefichero,ios::app);
// Apertura para Lectura y Escritura
in.open(nombrefichero,ios::in|ios:: out);
// Apertura para Lectura y Escritura
out.open(nombrefichero,ios::in|ios:: out);
Apertura de Ficheros Binarios:
Tiene la informacin tal cual est en memoria, es decir, sin convertirla a texto, La manera de leer y escribir en ficheros binarios consiste en utilizar las funciones read() y write().
// Apertura para Lectura
in.open(nombre,ios::binary);
// Apertura para Escritura(borra el contenido si lo hubiera)
out.open(nombre,ios::binary);
// Apertura para aadir datos al final
out.open(nombre,ios::binary| ios::app);
// Apertura para Lectura y Escritura
in.open(nombre, ios::binary |ios::in | ios:: out);
// Apertura para Lectura y Escritura
out.open(nombre, ios::binary |ios::in | ios:: out);
Cierre de ficheros.
Un fichero anteriormente abierto y con un descriptor asociado a l debe ser cerrado con el fin de liberar los recursos asociados a l de la siguiente forma:
nombrefichero.close()
Pg. 95
Asignatura: Algoritmia y Estructura de Datos
Ejemplo 1: Crear Archivos1.cpp (para crear un fichero llamado ejemplo.txt)
Deteccin de fin de fichero y otras funciones.
La funcin eof() que devuelve true si se ha alcanzado el final del fichero y falso en cualquier otro caso.
Ejemplo2: Leer el archivo creado ejemplo.txt.
Actividades
1. Presentar el algoritmo de Ordenacin sobre:
a. Ordenacin por Seleccin.
b. Ordenacin por Insercin Directa.
c. Ordenacin por Insercin Binaria.
d. Ordenacin Shell.
e. Ordenacin Heapsort.
f. Ordenacin Quicksort.
#include
#include
using namespace std;
void main()
{ ofstream fichero("ejemplo.txt"); //Fichero de salida
fichero
Pg. 96
Asignatura: Algoritmia y Estructura de Datos
REFERENCIAS BIBLIOGRFICAS
Y DIRECCIONES ELECTRNICAS
Ceballos Sierra, Francisco. C / C++ curso de programacin. 6ta ed. Mexico: AlfaOmega; 2006. Joyanes Aguilar, Luis. Fundamentos de Programacin. 2da. ed. Espaa: McGraw-Hill; 2003. Joyanes Aguilar, Luis. Estructura de Datos. 1ra. ed. Espaa: McGraw-Hill; 2000. Raffo Lecca, Eduardo. Turbo C++. 1 ed. Lima: Mundigraph; 2000. Baeza Yates, Ricardo. Algorimtia. Dpto. de Cs. de la Computacin, Univ. de Chile: 2002. Disponible en www.dcc.uchile.cl/~rbaeza/inf/algoritmia.pdf Cceres Gonzlez Abdiel E. Dr. Apuntes para el curso de Estructuras de datos en C/C++ . ITESM-CCM: 2005. Disponible en http://bjcu.uca.edu.ni/LibrosIsti/estrdatos.pdf Rodrguez Moreno, Pedro. El Lenguaje C (Programacin Avanzada). Sistemas de Computacin I (IECI) Departamento de Sistemas de Informacin. Facultad de Ciencias Empresariales. Chile; 2005. Disponible en http://www.face.ubiobio.cl/~prodrigu/sc1/Cap2-Lenguaje-C-(Programacion-Avanzada)-part-1.pdf