SlideShare una empresa de Scribd logo
Carol Roxana Rojas Moreno
ALGORÍTMIA Y
ESTRUCTURA
DE DATOS
Cada autor es responsable del contenido de su propio texto.
De esta edición:
© Universidad Continental S.A.C 2012
Jr. Junin 355, Miraflores, Lima-18
Teléfono: 213 2760
Derechos reservados
Primera Edición: Noviembre 2013
Tiraje: 500 ejemplares
Autor: Carol Roxana Rojas Moreno
Oficina de Producción de Contenidos y Recursos
Impreso en el Perú - Rebelars S.A.C
Jr. Los Bosques 555 - El Tambo - Huancayo
Fondo Editorial de la Universidad Continental
Todos los derechos reservados.
Esta publicación no puede ser reproducida, en todo ni en parte, ni registrada en o
trasmitida por un sistema de recuperación de información, en ninguna forma ni por
ningún medio sea mecánico, fotoquímico, electrónico, magnético, electroóptico, por
fotocopia, o cualquier otro sin el permiso previo por escrito de la Universidad.
INTRODUCCIÓN 9
DIAGRAMA DE PRESENTACIÓN DE LA ASIGNATURA 11
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA 13
DIAGRAMA DE PRESENTACIÓN DE LA UNIDAD i
Tema N° 1: Algoritmo
1 Definición del algoritmo 14
2 Características de un algoritmo 17
3 Instrucciones algorítmicas básicas 17
4 Representación del algoritmo 18
Tema N° 2: Programación Estructurada
1 Programa 26
2 Lenguaje de programación 27
3 Programas traductores 28
4 Definición programación estructurada 29
Tema N° 3: Sentencias Básicas de Programación
1 Estructura básica secuencial 31
2 Estructura básica selectiva 31
3 Estructura básica repetitiva 32
ACTIVIDAD N°1 34
Tema N° 4: Modularización de Programas
1 Definición de módulos de programa 34
2 Paso de Parámetros 34
3 Procedimientos 35
4 Funciones 36
5 Librerías de programación creadas por el usuario 40
Tema N° 5: Funciones Recursivas
1 Definición de recursividad 42
2 Recursividad de factorial 43
3 Recursividad de la multiplicación 43
4 Recursividad de torres de hanoi 43
ACTIVIDAD N°2 44
Lectura seleccionada N°1 45
GLOSARIO de la unidad i 46
BIBLIOGRAFÍA DE LA UNIDAD I 47
Autoevaluación DE LA UNIDAD i 47
UNIDAD II: ESTRUCTURA DE DATOS ESTÁTICAS 51
DIAGRAMA DE PRESENTACIÓN DE LA UNIDAD ii
TEMA 1: Estructuras de Datos
1 Definición de estructura de datos 52
2 Clasificación de estructura de datos 52
Tema N° 2: Arreglos Unidimensionales
1 Definición de arreglos unidimensionales 53
2 Algoritmos de actualización 54
3 Búsqueda de arreglos unidimensionales 57
4 Ordenación de arreglos unidimensionales 59
ACTIVIDAD N°1 60
Tema N° 3: Arreglos Bidimensionales
1 Definición de arreglos bidimensionales 61
2 Algoritmos de actualización de arreglos bidimensionales 63
ACTIVIDAD N°2 65
Lectura seleccionada n° 1 65
GLOSARIO de la unidad ii 67
Bibliografía de la unidad ii 67
Autoevaluación de la unidad ii 67
UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICA LINEAL 71
DIAGRAMA DE PRESENTACIÓN DE LA UNIDAD iii
Tema N° 1: Registro (Estructura) y Unión
1 Definición de registro (estructura) 72
2 Módulos y estructuras 74
3 Invocación de una estructura en otra 75
4 Definición de unión: ejemplo práctico 76
Tema N° 2: Tipos de Datos Abstractos (TDA)
1 Definición de TDA 77
2 Clases y programación orientada a objetos 78
Tema N° 3: Puntero a Dirección de Memoria
1 Definición de puntero a dirección de memoria 80
2 Creación y eliminación de variables dinámicas 82
ACTIVIDAD N°1 83
Tema N° 4: Estructuras de Datos Dinámicas Lineal
1 Listas enlazadas: simple, doble, circular 84
2 Colas y pilas 90
ACTIVIDAD N°2 95
Lecturas seleccionada n° 1 95
GLOSARIO de la unidad iii 97
Bibliografía de la unidad iii 97
Autoevaluación de la unidad iii 97
UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICA NO LINEAL 101
DIAGRAMA DE PRESENTACIÓN DE LA UNIDAD iv
Tema N° 1: Árbol y Grafo
1 Árbol General: Conceptos básicos y algoritmos de manipulación 102
2 Árbol binario: recorridos: preorden, inorden, postorden 106
3 Árboles binarios de búsqueda ( abb ) 107
4 Grafos: Conceptos y algoritmos de manipulación 	 111
ACTIVIDAD N°1 118
Tema N° 2: Archivo (Fichero)
1 Archivo: conceptos y algoritmos de manipulación 119
ACTIVIDAD N°2 121
Lecturas seleccionada n° 1 122
GLOSARIO de la unidad iv 123
Bibliografía Y DIRECCIONES ELECTRÓNICAS 123
Autoevaluación de la unidad iv 124
ANEXO
Clave de respuesta de Autoevaluaciones 127
Algoritmia y Estructura de Datos
INTRODUCCIÓN
A
lgoritmia y Estructura de Datos es una asignatura que
se desarrolla con una modalidad de educación virtual,
y el presente manual autoformativo es su material di-
dáctico más importante.
Esta asignatura tiene como finalidad proporcionar al estudian-
te, los conocimientos necesarios en las técnicas y estructuras de
datos para iniciarse en la programación asistida por un compu-
tador y basado en el enfoque estructurado, requeridos en su
formación básica para poder desarrollar programas en otros
niveles más avanzados.
La competencia a desarrollar es: Construye algoritmos en un
lenguaje de programación, utilizando las sentencias básicas de
programación, diferenciando su uso para la propuesta de solu-
ción de un problema, y con ello construye programas computa-
cionales utilizando módulos de programa (funciones y procedi-
mientos), valorando la reutilización de los módulo, y utilizando
las diferentes estructuras de datos: estáticas y dinámicas para
almacenar datos temporalmente, diferenciando el uso de las
estructuras con respecto al uso de los archivos como almacena-
miento de datos permanente, promoviendo el interés por otras
técnicas de almacenamiento.
El presente material consta de cuatro unidades: Unidad I: Algo-
ritmos y Programación Estructurada, que presenta conceptos,
representaciones y programación del algoritmo, con sus técni-
cas: Sentencias Básicas de Programación: Secuenciales, Selecti-
vas y Repetitivas y la Modularización en la Programación Estruc-
turada, es decir, se puede dividir a un programa complejo, en
segmentos de programa mas simples (Modularización), y poder
ser reutilizados en otros programas, a través del uso de funcio-
nes y procedimientos, y en algunos casos usando el concepto
de recursividad. Unidad II: Estructuras de Datos Estáticas, pre-
sentando los algoritmos de creación y actualización de Arreglos
Unidimensionales y Bidimensionales, Unidad III: Estructuras
de Datos Dinámica Lineal, donde se expone las formas de alma-
cenamiento temporal de datos a través estructuras listas, pilas,
cola. Unidad IV: Estructuras de Datos Dinámica No Lineal, en
esta última unidad, se exponen otras formas de almacenamien-
to de datos como árboles, grafos, archivos.
Para el estudio del manual y la ejecución de las actividades, se
recomienda para cada unidad:
•	 Realizar el estudio de los contenidos. Esta lectura será ana-
lítica y reflexiva subrayando, resumiendo y asimilando la in-
formación.
•	 Pasar al estudio de las lecturas seleccionadas, que son de
estudio de profundización o ampliación.
•	 Desarrollar las actividades programadas para cada semana
en el aula virtual y asistidas por un lenguaje de programa-
ción, con la asesoría del Profesor Tutor.
•	 Desarrollar la auto evaluación, que es una preparación para
la prueba final de la asignatura. .
8
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
9Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
COMPETENCIA DE LA ASIGNATURA
Construye algoritmos en un lenguaje de programación, utilizando las sentencias bá-
sicas de programación, diferenciando su uso para la propuesta de solución de un
problema, y con ello construye programas computacionales utilizando módulos de
programa (funciones y procedimientos), valorando la reutilización de los módulo,
y utilizando las diferentes estructuras de datos: estáticas y dinámicas para almacenar
datos temporalmente, diferenciando el uso de las estructuras con respecto al uso de
los archivos como almacenamiento de datos permanente, promoviendo el interés
por otras técnicas de almacenamiento.
UNIDADES DIDÁCTICAS
UNIDAD I UNIDAD II UNIDAD III UNIDAD IV
“Algoritmos y Pro-
gramación Estruc-
turada”
“Estructuras de
Datos Estáticas”
“Estructuras de
Datos Dinámica
Lineal”
“Estructuras de
Datos Dinámica No
Lineal”
TIEMPO MÍNIMO DE ESTUDIO
UNIDAD I UNIDAD II UNIDAD III UNIDAD IV
1ª y 2ª semana
16 horas
3ª y 4ª semana
16 horas
5ª y 6ª semana
16 horas
7ª y 8ª semana
16 horas
Diagrama Objetivos Inicio
Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
PRESENTACIÓN DE LA ASIGNATURA
10
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
11Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
Diagrama Objetivos Inicio
Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
Diagrama Objetivos Inicio
Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
DIAGRAMA DE PRESENTACIÓN DE LA UNIDAD
ORGANIZACIÒN DE LOS APRENDIZAJES
CONOCIMIENTOS PROCEDIMIENTOS ACTITUDES
Tema N° 1: Algoritmo
1. Definición del Algoritmo
2. Características de un algoritmo
3. Instrucciones Algorítmicas
Básicas
4. Representación del Algoritmo
Tema N° 2: Programación Es-
tructurada
1. Programa
2. Lenguaje de Programación
3. Programas Traductores
4. Definición Programación Es-
tructurada
Tema Nº 3: Sentencias Básicas
de Programación
1. Estructura Básica Simple o
Secuencial
2. Estructura Básica Selectiva
3. Estructura Básica Repetitiva
Tema Nº 4: Modularización de
Programas
1. Definición de Módulos de
Programa
2. Paso de Parámetros
3. Procedimientos
4. Funciones
5. Librerías de Programación
creadas por el usuario
Lectura seleccionada N° 1
Introducción a los Subalgorit-
mos o Subprogramas – Luis Jo-
yanes Aguilar
Tema Nº 5: Funciones Recursi-
vas
1. Definición de Recursividad
2. Recursividad del Factorial
3. Recursividad de la Multipli-
cación
4. Recursividad de Torres de
Hanoi
Autoevaluación de la Unidad I
1.	Analiza diferentes situacio-
nes problema para proponer
un algoritmo computacional
como solución
2.	Aplica el flujo de trabajo de
la sentencia de programación
secuencial
3.	Aplica las sentencias de pro-
gramación selectiva en la
construcción de un algoritmo
como solución de un proble-
ma
4.	Aplica las sentencias de pro-
gramación repetitiva en la
construcción de un algoritmo
como solución de un proble-
ma
5.	Aplica los conceptos de la
modularización a través de las
Funciones, Procedimientos
6.	Construye Librerías de Pro-
gramación, para la reutiliza-
ción de módulos en los pro-
gramas
7.	Aplica algoritmos recursivos
en la construcción de progra-
mas
Actividad N° 1
Elaboración de Algoritmos y
programas usando las senten-
cias básicas de programación
Actividad N° 2
Elaboración de programas
usando módulos y librerías de
programas, y elaboración de
algoritmos recursivos
Control de Lectura Nº 1
Sentencias de Programación
en los Algoritmos y Módulos de
Programa
1.	Asume con responsabilidad
sus actividades académicas
asignadas
2. Realiza con honestidad las eva-
luaciones asignadas
CONTENIDOS
AUTOEVALUACIÓN
LECTURAS
SELECCIONADAS
BIBLIOGRAFÍA
ACTIVIDADES
12ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
TEMA N° 1: ALGORITMO
1 	DEFINICIÓN DE ALGORITMO
¿En su quehacer diario, realiza sus actividades generalmente en un orden, organizado, finali-
za y realiza otro conjunto de actividades de similar manera?
Entonces quiere decir que está realizando un algoritmo, y en este caso, al desarro-
llarlo sin ayuda de un computador, se trata de un algoritmo no computacional.
La definición de “Algoritmo” es precisamente como Ud. pensó que desarrolla sus
actividades diarias, es decir: “Un algoritmo es un conjunto ordenado y finito de
actividades, que generalmente, conducen a la solución de un problema”.
La palabra algoritmo se deriva de la traducción al latín del nombre árabe
Al-Khuwarizmi, matemático y astrónomo árabe que escribió un tratado sobre
manipulación de números y ecuaciones en el siglo IX. (Angela Carrasco Loli.
Principios de Programación)
Tenemos algunos ejemplos de algoritmo:
- Al instalar un equipo de sonido, ejecutamos las instrucciones (algoritmo) conteni-
das en el manual del equipo.
- El algoritmo matemático de Euclides para la obtención del máximo común divi-
sor de dos números.
Algunos algoritmos pueden ser ejecutados con ayuda de una computadora, a esto le
llamamos algoritmo computacional, donde las actividades desarrolladas se llaman
instrucciones y se expresan en un lenguaje de programación. (Términos que se
explican mas adelante).
Todo algoritmo puede ser descompuesto en tres partes, como se muestra en la
siguiente figura:
E: Entrada de datos.
P: Proceso.
S: Salida de resultados.
Figura Nro 1: Partes de un algoritmo
2 	CARACTERÍSTICAS DE UN ALGORITMO
•	 Un algoritmo debe ser preciso e indicar el orden de realización de cada
paso.
•	 Un algoritmo debe ser definido. El algoritmo dos veces, se debe obtener el
mismo resultado cada vez.
•	 Un algoritmo debe ser finito: Si se sigue use debe terminar en algún mo-
mento, o sea, debe tener un número finito de pasos.
(Luis Joyanes Aguilar. Fundamentos de Programación.)
Para que pueda escribir las instrucciones algorítmicas, necesita conocer lo que es
una Variable: Es una localización o casillero en la memoria principal que almacena
un valor que puede cambiar en el transcurso de la ejecución 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.
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
13Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
Ejemplo 1: Entero edad
Ejemplo 2: Real peso, talla
3 	INSTRUCCIONES ALGORÍTMICAS BÁSICAS
a. Entrada: Consiste en obtener un dato de un dispositivo de entrada, como el
teclado el lector óptico, etc., y almacenarlo en una variable, y se expresa en el pseu-
docódigo mediante la palabra LEER, de la siguiente forma:
Ejemplo: LEER variable
LEER edad
• En lenguaje C/C++: cinedad;
b. Salida: Consiste en mostrar el valor de una variable en un dispositivo de salida,
como la pantalla del computador, se expresa en el pseudocódigo mediante la pala-
bra ESCRIBIR,de la siguiente forma:
Ejemplo: ESCRIBIR variable
ESCRIBIR TotalCompra
• En lenguaje C/C++: coutTotalCompra;
c. Asignación: Consiste en dar a una variable el valor de una expresión. La asigna-
ción se expresa en el pseudocódigo de la siguiente forma:
variable expresión
Donde variable y el valor de expresión deben tener el mismo tipo de dato.
Ejemplo:
resultado numero1 + numero 2
En lenguaje C/C++: resultado = numero1 + numero 2;
4 	REPRESENTACIÓN DEL ALGORITMO
Para poder comprender el orden lógico en el que realizan los pasos de un algorit-
mo, se hace uso de diagramas de representación, definidas por conjunto de símbo-
los y significado de cada uno de ellos
A continuación se le mostrará algunas de las representaciones de algoritmos más
conocidas:
a.	Pseudocódigo: Es la representación del algoritmo en el lenguaje natural del
programador.
Ejemplo: algoritmo para sumar dos números enteros.
INICIO
entero numero1, numero2, resultado
Leer numero1
Leer numero2
resultado numero1 + numero 2
Escribir “El resultado de la suma es: ”
Escribir resultado
FIN
Descripción:
- Todo algoritmo por ser finito, tiene un INICIO un FIN.
- Las variables numero1, numero2 y resultado, son asignadas como tipo de dato entero.
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
14ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
- Note que se mantiene las tres partes de un algoritmo: ENTRADA (Leer numero1,
Leer numero2), PROCESO (La suma de numero1 y numero2, y dicho valor de
suma asignado a la variable resultado) y SALIDA (Escribir el mensaje por pantalla
“El resultado es: ” y Escribir el valor pantalla de la variable resultado)
b.	 Diagrama de Flujo Estructurado: Representación con flujos entre los procesos a
realizar. Los principales símbolos de representación para este diagrama son:
c.	 Diagrama Nassi/Schneiderman (N-S): Representación en bloques, es decir cada
uno de los procesos como ingreso/salida de datos, decisiones, acciones, repeticio-
nes; están representados en bloques de tareas consecutivos.
INICIO
Declaración de variables
Lectura de Datos
Acción 1
Acción 2
Acción n
Reporte de Datos
FIN
Se le mostrará ejemplos de estas dos últimas representaciones de algoritmos en el
tema de Sentencias de Programación.
TEMA N° 2: PROGRAMACIÓN ESTRUCTURADA
1 	PROGRAMA
¿Se ha preguntado como el computador puede realizar las órdenes como ingresar datos por
teclado, reproducir música, editar imágenes? Todo esto es posible gracias a la ejecución
de algún programa, es decir, un conjunto de pasos ordenados y finitos (algoritmo)
escrito en un lenguaje de programación (programa fuente).
2 	LENGUAJE DE PROGRAMACIÓN
Así como Ud. conoce el alfabeto (símbolos), gramática y semántica de un idioma
como por ejemplo el castellano o el inglés, así es como usará un lenguaje de pro-
gramación, con sus propios símbolos, gramática y semántica.
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
15Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
Entonces, el lenguaje de programación es un conjunto de sentencias utilizadas para es-
cribir secuencias de instrucciones para que ejecute un programa en una computadora.
Existen los siguientes lenguajes de programación que ya fueron revisados en alguna
asignatura previa a esta, las que recordamos como:
a.	 Lenguaje Máquina: Lenguaje de programación que la computadora interpreta
y ejecuta directamente, y está compuesto de instrucciones codificadas en binario
(0, 1).
b.	 Lenguaje de Bajo Nivel: también llamados lenguajes ensambladores, permiten
al programador escribir instrucciones de un programa usando abreviaturas del len-
guaje natural (inglés), también llamadas palabras nemotécnicas (ADD, DIV, SUB,
etc).
c.	 Lenguaje de Alto Nivel: permite al programador escribir las instrucciones de un
programa utilizando palabras o expresiones sintácticas muy similares al lenguaje
natural (ejemplo: el inglés).
Recuerde que así escriba un programa en un lenguaje de alto nivel, el compu-
tador debe traducir estas instrucciones a lenguaje máquina, es decir, en código
binario.
3 	PROGRAMAS TRADUCTORES
Son aquello programas que traducen algoritmos escritos en un programa en len-
guaje de alto nivel hacia el lenguaje de código máquina.
a.	Intérprete: es un traductor que toma un programa fuente, lo traduce y a conti-
nuación lo ejecuta.
La siguiente figura muestra el flujo de desarrollo de un intérprete.
PROGRAMA FUENTE
TRADUCCIÓN Y
EJECUCIÓN LINEA
POR LINEA
INTERPRETE
Figura Nro 2: Programa Intérprete
(Luis Joyanes Aguilar. Fundamentos de Programación)
b.	Compilador: la traducción del programa se realiza en una sola operación llama-
da compilación del programa, es decir se traducen las instrucciones del programa
en un solo bloque. El programa compilado y depurado (eliminado los errores de
código fuente) se denomina programa ejecutable porque ya se puede ejecutar di-
rectamente y cuantas veces de desee, y puede volver a compilarse por ejemplo en el
lenguaje C/C++.
En la siguiente figura se muestra del flujo de desarrollo de un compilador.
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
16ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
PROGRAMA FUENTE
PROGRAMA OBJETIVO
COMPLADOR
Figura Nro 3: Programa Compilador
(Luis Joyanes Aguilar. Fundamentos de Programación)
La compilación es el proceso de traducción del programa fuente a programa objeto
(traducido a código máquina), a través de un programa enlazador (conduce a un
programa en lenguaje máquina directamente ejecutable), para obtener el progra-
ma ejecutable. El detalle del proceso de un compilador se muestra en la siguiente
figura:
PROGRAMA FUENTE
PROGRAMA OBJETIVO
PROGRAMA EJECUTABLE
COMPLADOR
PROGRAMA ENLAZADOR
Figura Nro 4: Detalle de un Programa Compilador
(Luis Joyanes Aguilar. Fundamentos de Programación)
4 	DEFINICIÓN PROGRAMACIÓN ESTRUCTURADA
Existen dos enfoques de programación y por lo tanto de desarrollo de software,
muy utilizados en la actualidad, el Enfoque Estructurado y el Enfoque Orientado a
Objetos, cada uno con sus conceptos, técnicas y herramientas.
En esta asignatura, por ser de formación básica en su carrera y para facilitar el ini-
cio del estudiante en la elaboración de programas, usaremos la Programación del
Enfoque Estructurado.
La Programación Estructurada es un conjunto de técnicas para escribir, verificar,
depurar, y mantener los programas realizando refinamientos sucesivos es decir un
todo se divide en segmentos más sencillos o de menor complejidad que al darles
solución, se proceden a unificar.
Para que estos segmentos de programa realicen las tareas que se le asignen, se recu-
rre a las Estructuras de Control Básicas.
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
17Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
Estructuras de Control Básicas (Flujos de Control)
Las estructuras básicas que permiten iniciarse sin dificultad en la programación, se
conocen como:
•	 Secuenciales
•	Selectivas
•	Repetitivas
Éste conjunto de técnicas permite elaborar programas en cualquier lenguaje de
programación.
Las estructuras de Control Básicas mencionadas, o también conocidas como Sen-
tencias Básicas de Programación, serán desarrolladas más adelante.
NOTA:
Estructura de un Programa en C/C++
Para iniciar la elaboración de programas en esta asignatura, se muestra la Estructu-
ra de un Programa Simple en C++, en el Tema de Módulos de Programa, la estruc-
tura del programa tendrá algunas modificaciones.
Figura Nro 5: Estructura simple de un Programa en C/C++
(Elaboración personal)
Descripción:
-	 El símbolo #, es una directiva del procesador que permite acceder la carpeta include.
-	La carpeta o librería include, es propia del compilador, es donde se encuentran
las librerías de cabecera (extensión .h) del lenguaje C/C++
-	Una de las librerías de cabecera es el iostream, (i:imput, o:output, stream: flujo
de cadenas) que permite reconocer las instrucciones de entrada, salida y manejo
de caracteres o cadenas (simbolos) dentro del programa.
-	using namespace std; indica que se está haciendo uso del espacio de nombres
estándar, es decir un conjunto de símbolos para lenguajes de programación.
-	 El Módulo Principal main( ), en el cual se escribirán las instrucciones de progra-
ma o invocaciones a otros módulos de programa.
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
18ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
TEMA N° 3: SENTENCIAS BÁSICAS DE PROGRAMACIÓN
1 	ESTRUCTURA BÁSICA SECUENCIAL
En un mundo ideal, el orden de realización de tareas no tendrían ninguna restric-
ción (condición o selección), es decir se realizarían de forma secuencial.
Es una estructura paso a paso, sin bifurcaciones ni repeticiones; donde la salida de
un proceso es entrada para otro.
Diagrama de Flujo:
INICIO
Lectura de datos
Acción 2
Acción n
Reporte de datos
FIN
Declaración de variables
Acción 1
Diagrama N-S:
INICIO
Declaración de variables
Lectura de Datos
Acción 1
Acción 2
Acción n
Reporte de Datos
FIN
Ejemplo:
Calcular el área de un triángulo. Área = (base * altura) / 2
Solución
Leyenda de Datos
Base: valor de la base del triángulo
Altura: valor de la altura del triángulo
Área: valor del resultado del cálculo del área del triángulo
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
19Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
Diagrama de Flujo:
INICIO
Leer base
Área ← (base*altura)/2
Escribir El valor del área
para el triángulo es:
Escribir área
FIN
real ← base, altura, área
Leer altura
Diagrama N-S:
INICIO
real ← base, altura, área
Leer base
Leer altura
Área (base*altura)/2
Escribir EL valor del área para el triángulo es:
Escribir área
FIN
Código en C++:
#includeiostream
using namespace std;
void main( )
{ 	 float base, altura, Area;
cout”Ingrese valor de la base: ”;
cinbase;
cout”n”;	 //Salto de línea
cout”Ingrese valor de la altura: ”;
cinaltura;
cout”n”;
Area = (base * altura) / 2;
cout”El valor del área para el triángulo es: ”;
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
20ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
coutArea;
cout”n”;
system(“PAUSE”);
}
2 	ESTRUCTURA BÁSICA SELECTIVA
Es una estructura que tiene un punto de decisión para realizar un conjunto de
acciones. Pueden ser:
• E. B. Selectiva Simple
• E. B. Selectiva Compuesta
• E. B. Selectiva Múltiple
a.	 Estructura Básica Selectiva Simple:
Se tiene un punto de decisión que evalúa una condición y si es Verdadero, ejecuta
un conjunto de Acciones.
Diagrama de Flujo:
INICIO
Lectura de datos
Acción 1
Acción n
Reporte de datos
FIN
Declaración de variables
Cond 1
Diagrama N-S:
INICIO
Declaración de variables
Lectura de datos
V cond 1 F
Acción 1
Acción 2
Acción n
Reporte de datos
FIN
F V
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
21Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
Ejemplo:
Sumar dos números enteros positivos c = a + b
Solución:
Leyenda de Datos
a: valor del primer número entero positivo
b: valor del segundo número entero positivo
c: valor del resultado la suma de dos números a y b
Diagrama de Flujo:
INICIO
Leer a, b
c ← a + b
Escribir El valor de la suma es: c
FIN
entero ← a,b,c
a  0  b  0
F V
Diagrama N-S:
INICIO
Entero ← a, b, c
Leer a, b
V a0  b0 F
c ← a + b
Escribir El valor la suma es:, c
FIN
Código C:
#includeiostream
using namespace std;
int main( )
{ 	 float a, b, c;
cout”Ingrese primer número: ”;
cina; cout”n”;
cout”Ingrese segundo número: ”;
cinb; cout”n”;
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
22ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
if (a0  b0)
{	 c = a + b;
cout”El valor la suma es: ”;
coutc;
cout”n”;
}
system(“PAUSE”);
return 0;
}
b. Estructura Básica Selectiva Compuesta:
Se tiene un punto de decisión que evalúa una condición y si es Verdadero, ejecuta
un conjunto de Acciones, y si es Falsa ejecuta otro conjunto de acciones.
Diagrama de Flujo:
INICIO
Lectura de datos
Acción 1Acción 2
Acción nAcción m
Reporte de datos
FIN
Declaración de variables
Cond 1
F V
Diagrama N-S:
INICIO
Declaración de variables
Lectura de datos
V cond 1 F
Acción 1 Acción 2
... ...
Acción n Acción m
Reporte de datos
FIN
Ejemplo:
Sumar dos números enteros si son positivos, sino multiplicarlos.
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
23Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
Solución:
Leyenda de Datos
a: valor del primer número entero positivo
b: valor del segundo número entero positivo
c: valor del resultado la suma de dos números a y b
Diagrama de Flujo:
INICIO
Leer a, b
c ← a + bc ← a * b
Escribir El valor de
la suma es: c
Escribir El valor de la
multiplicación es: c
FIN
entero ← a,b,c
a  0  b  0
F V
Diagrama N-S:
INICIO
Entero ← a, b, c
Leer a, b
V a0  b0 F
c ← a + b c ← a * b
Escribir El valor la suma es:, c Escribir El valor la multiplicación es:, c
FIN
Código C:
#includeiostream
using namespace std;
void main( )
{ 	 int a, b, c;
cout”Ingrese primer número: ”;
cina;
cout”n”;
cout”Ingrese segundo número: ”;
cinb;
cout”n”;
if(a0  b 0)
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
24ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
{	 c = a + b;
cout”El valor la suma es: ”;
coutc; cout”n”;
}
else
{	 c = a * b;
cout”El valor la multiplicacion es: ”;
coutc; cout”n”;
}
system(“PAUSE”);
}
c. Estructura Básica Selectiva Múltiple:
Se tiene un punto de decisión que evalúa más de dos alternativas para realizar un
conjunto de acciones.
Diagrama de Flujo:
INICIO
Lectura de datos
Acción 4
Reporte de datos
FIN
Declaración de variables
Cond 1
Acción 3
Acción m
Acción 1
Acción n
Acción 2
Acción m
Acción 4
Acción m
default
33
1
Diagrama N-S:
INICIO
Declaración de variables
Lectura de datos
1 2 3 cond 1 default
Acción 1 Acción 2 Acción 3 Acción 4
... ... ... ...
Acción n Acción m Acción m Acción m
Reporte de datos
FIN
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
25Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
Ejemplo:
Ingresa cinco números e imprime que vocal es.
Solución:
Leyenda de Datos
num: valor del número entero positivo
Diagrama de Flujo:
INICIO
Leer num.
Escribir
Vocal A
Escribir
Vocal A
Escribir
Vocal A
Escribir
Vocal A
Escribir
Vocal A
Escribir
Vocal A
FIN
entero ← num.
num default1
3 4 5
2
Diagrama N-S:
INICIO
Entero ← a, b, c
Leer a, b
1 2 3 4 5 num default
Escribir
Vocal A
Escribir
Vocal E
Escribir
Vocal I
Escribir
Vocal O
Escribir
Vocal U
Escribir No
es vocal 
FIN
Código C:
#includeiostream
using namespace std;
void main( )
{ int num;
cout”Ingrese número: ”;
cinnum;
switch(num)
{ case 1: cout”Vocal A”; break;
case 2: cout”Vocal E”; break;
case 3: cout”Vocal I”; break;
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
26ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
case 4: cout”Vocal O”; break;
case 5: cout”Vocal U”; break;
default: cout”No es numero para una vocal”;
}
system(“PAUSE”);
}
Existe una conformación de la Estructura Selectiva que ayuda en la elaboración de
programas:
Estructura Básica Selectiva Anidada: se evalúa una condición y si es Verdadero, eje-
cuta un nuevo punto de decisión y así sucesivamente, y si es Falsa ejecuta otro con-
junto de acciones.
Diagrama de Flujo:
INICIO
Lectura de datos
Reporte de datos
FIN
Declaración de variables
Cond 1
Cond 2
Acción 1
Acción n
Acción 2
Acción m
V
V
F
F
Diagrama N-S:
INICIO
Declaración de variables
Lectura de datos
F Cond 1 V
Acción 2 V Cond 2 F
... Acción 1
... ...
Acción m Acción n
Reporte de datos
FIN
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
27Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
Ejemplo:
Ingresar un número entero y si es positivo y diferente de cero, reportar si se encuen-
tra entre los diez primeros números.
Solución:
Leyenda de Datos
a: valor del número entero
Diagrama de Flujo:
INICIO
Leer a
Escribir
Primeros 10
Escribir Son mas
de los primeros l0
Escribir No
es un número
mayor que
cero
FIN
entero ← a
a  0
a  = 1  a 10
F
F
V
V
Diagrama N-S:
INICIO
Entero a
Leer a
F a  0 V
Escribir No es
un número mayor
que cero
F a = 1  a  10 V
Escribir Son mas de los
primeros 10
Escribir Primeros 10
FIN
Código C:
#includeiostream
using namespace std;
void main( )
{ int a;
cout”Ingrese número: ”;
cina;
if(a0)
	 if(a=1  a10)
		 cout”Primeros 10”;
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
28ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
	else
		 cout”Son más de los primeros 10”;
else
	 cout”No es un número mayor que cero”;
system(“PAUSE”);
}
3 	ESTRUCTURA BÁSICA REPETITIVA
Es una estructura permite repetir un conjunto de acciones dada una condición.
Pueden ser:
• E. B. Repetitiva Mientras
• E. B. Repetitiva Hacer-Mientras
• E. B. Repetitiva Para
a. Estructura Básica Repetitiva Mientras:
Primero evalúa una expresión condicional y si es verdadera permite realizar el con-
junto de acciones y regresa evaluar nuevamente la expresión condicional, hasta que
deje de cumplir (Falso).
Diagrama de Flujo:
INICIO
Lectura de datos
FIN
Declaración de variables
Cond 1
Acción 1
Acción n
V
F
Acción 2
Diagrama N-S:
INICIO
Declaración de variables
Lectura de datos
Cond 1
Acción 1
...
Acción n
Acción 2
Reporte de datos
FIN
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
29Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
Ejemplo:
Imprimir la serie Fibonacci, menor a un límite dado: 0,1,1,2,3,5,8,13,….
Diagrama de Flujo:
INICIO
Leer lim
Escribir a
Escribir b
FIN
entero ← lim, a=0, b=1, c
b=lim
c ← a + b
a ← b
V
F
b ← c
Diagrama N-S:
INICIO
entero ← min, a=0, b=1, c
Leer lim
Escribir a
b = lim
Escribir
c ← a + b
a ← b
b ← c
FIN
Código C:
#includeiostream
using nameaspace std;
void main( )
{ 	 int lim, a=0, b=1,c;
cout”Ingrese límite: ”;
cinlim;
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
30ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
couta;
while(b=lim)
{	 coutb;
		 c=a+b;
a=b;
		 b=c;
}
system(“PAUSE”);
}
b. Estructura Básica Repetitiva Hacer - Mientras
Realiza al menos una vez un conjunto de acciones, y luego evalúa una expresión
condicional, si es Verdadero regresa a repetir el conjunto de acciones, si no cum-
ple, termina la repetición.
Diagrama de Flujo:
INICIO
Lectura de datos
Reporte de Datos
FIN
Declaración de variables
Cond 1
Acción 1
Acción n
V
F
Acción 2
Diagrama N-S:
INICIO
Declaración de variables
Lectura de datos
Acción 1
...
Acción n
Cond 1
Acción 2
Reporte de datos
FIN
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
31Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
Ejemplo:
Leer un número entero mayor que cero, sino es así, volver a solicitar el número
con esas condiciones.
Diagrama de Flujo:
INICIO
Leer num
FIN
entero ← num
num = 0
V
F
Diagrama N-S:
INICIO
entero ← mun
Leer num
num = 0
FIN
Código C:
#includeiostream
using namespace std;
void main()
{ 	 int num;
	
do{	
cout” Ingrese un numero entero mayor a cero:	 “;
	 cinnum;
	 }while(num = 0);
system(“PAUSE”);
}
c. Estructura Básica Repetitiva Para:
Tambien conocida como Desde ó Por, permite repetir un conjunto de acciones, se-
cuencialmente hasta llegar a un límite dado; recorrido se realiza desde una variable
o índice de recorrido y avanza de uno en uno hasta llegar al límite.
Diagrama de Flujo:
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
32ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
INICIO
Lectura de datos
Reporte de Datos
FIN
Declaración de variables
Definir variables de recorrido y limite
Inicializar la variable de recorrido
Incrementar variable de recorrido
Variable es menor a limite
Acción 1
Acción n
V
F
Acción 2
Diagrama N-S:
INICIO
Declaración de variables
Lectura de datos
i = 0; i = limite; i ++
Acción 1
...
Acción n
Acción 2
Reporte de datos
FIN
Ejemplo:
Calcular el Factorial de un número (n!).
Diagrama de Flujo:
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
33Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
INICIO
Escribir  Ingrese numero para factorial
Escribir  El factorial es, p
Leer num
FIN
entero ← i, num, p = 1
i ← 1
i  = num
p ← p * i
i ++
V
F
Diagrama N-S:
INICIO
entero ← num i, p = 1
Leer num
i = 1; i = num; i ++
p ← p * i
Escribir el factorial es:
Escribir p
FIN
Código C:
#includeiostream
using namespace std;
void main( )
{ 	 int num, i, p=1;
cout”Ingrese numero para factorial: ”;
cinnum;
for(i=1;i=num; i++)
{ p = p * i;
}
cout”El factorial de ”n”es: ”p;
system(“PAUSE”);
}
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
34ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
Diagrama Objetivos Inicio
Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
ACTIVIDAD N° 1
Esta actividad puede consultarla en su aula virtual.
TEMA N° 4: MODULARIZACIÓN DE PROGRAMAS
1 	DEFINICIÓN DE MÓDULOS DE PROGRAMA
Imagine que está iniciando un negocio y no tiene colaboradores, y asume todas las
tareas para su funcionamiento: buscar proveedor, ofrecer y publicitar el producto o
servicio, estar involucrados en el proceso de transacción etc. Pero en alguna etapa
de crecimiento, asignamos estas tareas a otros colaboradores, quienes interactúan
entre sí, y al final le informan de su cumplimiento. Es lo mismo que pasa en la ela-
boración de módulos de programa.
Los Módulos de Programa (subprogramas) son partes separadas de código que
ejecutan tareas pequeñas de un módulo principal. El módulo es con un conjunto
de instrucciones precisas, independientes y reutilizables.
Para poder crear los módulos de programa, debe conocer las formas en que se pa-
san los datos de un módulo a otro, al ser invocados.
2 	PASO DE PARÁMETROS
Parámetros de entrada (valor)
Imagine nuevamente, que se hace un clon de su persona, todas las modificaciones
que haga sobre él (cambio de peinado, forma de vestir, aprendizaje de otro idioma)
no le afectaría a Ud. que es el dato original.
Es decir, se guarda en memoria una copia temporal de la variable, y dentro del
módulo solo se utiliza la copia para las modificaciones.
Parámetros de entrada/salida (referencia)
Ahora el ejemplo ya no es clonar a su persona, sino que es Ud. mismo, y donde sea
que se encuentre (o referencia de ubicación), las modificaciones que se realicen
siempre se mantendrán en Ud., por ser el dato original.
Es decir, los cambios que se efectúen sobre dicha variable dentro del procedimiento
se mantienen incluso después de que este haya terminado.
La siguiente figura muestra un programa, haciendo uso de los tipos de paso de
parámetros.
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
35Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
Figura Nro 6: Programa Ejemplo de Paso de Parámetros
(Elaboración personal)
Descripción:
-	En el programa se tienen dos módulos: el Principal: main (no olvide que siempre
debe existir) y el módulo f (que como programadores, estamos creando).
-	 En el módulo Principal se está declarando dos variables: x, y a las cuales se les está
asignando el valor de 1, a cada una respectivamente.
-	En el mismo módulo Principal se invoca al módulo f, al que se le envía los valores
de x, y: f(x,y) significa f(1,1);
-	Esa invocación permite que se desarrolle el módulo void f (int a, int b), es decir
la variable a, recibe el valor de la variable x y la variable b recibe el valor de la va-
riable y, por estar en un orden dentro del paréntesis.
-	La variable a, servirá para un paso de parámetros de entrada, y la variable b para
un paso de parámetros de entrada/salida por que lo acompaña el operador de
dirección  (para hacer referencia, es decir apuntar a la dirección de memoria de
la variable y)
-	Es decir, la variable a, recibe el valor de 1 proveniente de x, mientras que la varia-
ble b recibe la dirección de memoria (en base hexadecimal) de la variable y.
-	El módulo f, es independiente al módulo Principal, por lo que la declaración de
la variable a es de forma local, es decir las modificaciones o cambios de valores a
la variable a, solo es afectada en el módulo f, mientras que el valor original de x se
mantiene y no sufre los cambios que realice en la variable a.
-	Lo mismo ocurriría con la variable b, pero en este caso, b no es copia de y, sino
que invoca la dirección de memoria de y, por lo que los cambios que realice en b,
afecta directamente a y.
Se tiene dos tipos de módulos de programa: Procedimiento y Función.
3 	PROCEDIMIENTOS
Son módulos que se utilizan para elaborar un conjunto de instrucciones, indepen-
dientes y reutilizables, pero definiendo claramente el significado y utilidad de esa
porción de programa (cohesión).
Declaración en C/C++:
void NombreProcedimiento( )
void NombreProcedimiento (argumentos)
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
36ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
4 	FUNCIONES
Son módulos que tienen la misma definición de un procedimiento, pero con la
particularidad de que permite devolver UN valor en una variable.
Declaración en C/C++:
Tipo_dato NombreFunción( )
Tipo_dato NombreFunción(argumentos)
Nota:
-	 En la Función, el Tipo de dato que se escribe al declararla, debe ser el mismo tipo
de dato de la variable cuyo valor se devuelve (retorna)
-	En el Procedimiento, como no devuelve ningún valor, se escribe la palabra void,
que indica vació o sin especificar un tipo de dato.
-	Tanto en función y en procedimiento, se puede declarar con o sin argumentos,
es decir los argumentos son el envío de valores de variables a través de estos mó-
dulos y pueden ser paso de parámetros por entrada o paso de parámetros por
entrada/salida.
Pasamos a un ejemplo, simple en solucionar, pero el objetivo de este ejemplo es
crear y comparar el uso de Función, Procedimiento, con o sin argumentos.
Ejemplo: se tiene el siguiente programa simple para sumar dos números
//Programa Simple
#includeiostream
using namespace std;
void main()
{	 int a,b,c;
cout”Ingrese valor de a: t”;
cina;
cout”Ingrese valor de b: t”;
cinb;
c=a+b;
coutc; cout”n”;
system(“PAUSE”);
}
Es simple porque todas las instrucciones de programa para lograr sumar dos núme-
ros, es decir la entrada de datos en la variable a y b, el proceso de sumar y asignar
y la salida del resultado en la variable c, se están escribiendo solo en el Módulo
Principal main( )
A continuación se muestra la forma para crear un módulo llamado sumar, usando
la siguiente técnica: creando el módulo antes del módulo que lo invoca.
El desarrollo del programa se muestra con el uso Procedimiento con y sin argumen-
tos, y usando Función con y sin argumentos.
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
37Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
//Procedimientos con Argumentos: Ejemplo 1
#includeiostream
using namespace std;
void sumar(int a, int b)
{ int c;
c=a+b;
coutc; cout”n”;
}
void main()
{ int a,b;
cout”Ingrese valor de a: t”; cina;
cout”Ingrese valor de b: t”; cinb;
sumar(a,b);
system(“PAUSE”);
}
//Procedimientos sin Argumentos: Ejemplo 2
#includeiostream
using namespace std;
void sumar()
{ int a,b,c;
cout”Ingrese valor de a: t”; cina;
cout”Ingrese valor de b: t”; cinb;
c=a+b;
coutc;
}
void main()
{	 sumar( );
system(“PAUSE”);
}
Descripción:
-	En ambos casos, con o sin argumentos, el módulo sumar( ) está realzando exac-
tamente la tarea para la cual ha sido creada, es decir, sumar dos números.
-	Además, en el Módulo principal main( ), se invoca al módulo sumar ( ) exacta-
mente con su nombre, sin ayuda de ninguna otra variable, ya que no devuelve
ningún valor.
-	Pero, en ambos casos, la tarea de leer los valores de a y b, están siendo asumidos
en el primer caso por el módulo principal, o en el segundo caso, por el módulo
sumar. Esta tarea también será asumida por un módulo apropiado que permita
realizar la tarea de obtener los valores, sin recargar la responsabilidad de otros
módulos. (Se verá mas adelante)
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
38ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
//Funciones con Argumentos: Ejemplo1
#includeiostream
using namespace std;
int sumar(int a, int b)
{	 int c;
c=a+b;
return c;
}
void main()
{	 int sum,a,b;
cout”Ingrese valor de a: t”; cina;
cout”Ingrese valor de b: t”; cinb;
sum=sumar(a,b);
cout”Valor de la suma de a y b: “sum;
cout”n”;
system(“PAUSE”);
}
//Funciones sin Argumentos: Ejemplo 2
#includeiostream
using namespace std;
int sumar()
{	 int a,b,c;
cout”Ingrese valor de a: t”; cina;
cout”Ingrese valor de b: t”; cinb;
c=a+b;
return c;
}
void main()
{	 int sum;
sum=sumar();
cout”Valor de la suma de a y b: “sum;
cout”n”;
system(“PAUSE”);
}
Descripción:
-	En ambos casos, con o sin argumentos, el módulo sumar( ) está realzando exac-
tamente la tarea para la cual ha sido creada, es decir, sumar dos números.
-	El módulo sumar( ), está siendo declarado acompañado de un tipo de dato
entero: int, ya que es el mismo tipo de dato de la variable que está devolviendo
(return) en este caso, la variable c.
-	Por lo que, el módulo principal, al invocar al módulo sumar, debe recibir el va-
lor que se está devolviendo, y para esto se recomienda el uso de una variable que
reciba dicho valor, en el ejemplo la variable sum, la cual debe estar declarada
con el mismo tipo de dato de la variable que recibe.
-	De igual manera que en el ejemplo de Procedimientos, la tarea de leer los valo-
res de a y b, deben ser asumidos por un módulo apropiado.
Otra Manera de definir un Procedimiento y una Función, con o sin argumentos,
es con la técnica: declarar de manera global a la función o procedimiento, es
decir en la cabecera del programa, y luego desarrollar las instrucciones de la fun-
ción o procedimiento después del Módulo Principal.
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
39Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
//Procedimientos con Argumentos
#includeiostream
using namespace std;
void sumar(int a, int b);
int main()
{	 int a,b;
cout”Ingrese valor de a: t”; cina;
cout”Ingrese valor de b: t”; cinb;
sumar(a,b);
return 0;
}
void sumar(int a, int b)
{	 int c;
c=a+b;
coutc;
cout”n”;
}
//Funciones con Argumentos
#includeiostream
using namespace std;
int sumar(int a, int b);
void main()
{	 int sum,a,b;
cout”Ingrese valor de a: t”; cina;
cout”Ingrese valor de b: t”; cinb;
sum=sumar(a,b);
cout”Valor de la suma de a y b: “sum;
cout”n”;
}
int sumar(int a, int b)
{	 int c;
c=a+b;
return c;
}
Descripción:
-	El ejemplo anterior solo ha sido dado con Procedimientos y Funciones con ar-
gumentos, pero también puede darse sin argumentos.
-	En esta forma, el orden de creación de los módulos no es relevante, siempre y
cuando estén declarados de manera global en el programa.
Ejemplo:
Para repartir una herencia se tiene en cuenta: Si la cantidad de hijos es menor a
4, se repartirá exactamente entre el número de hijos; si son cuatro o más hijos, la
mitad le tocará al hermano mayor y el resto se dividirá entre los demás hermanos.
#includeiostream
using namespace std;
//procedimientos sin argumentos
void herencia()
{ float her,may;
int num;
cout”Ingresar importe de herencia n”;
cinher;
cout”Ingresar cantidad de hijos n”;
cinnum;
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
40ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
if(num4)
	 {	 her=her/num;
	 	 cout”Herencia a cada hijo es “her; 	
}
else
	 { may=her/2;
her=may/(num-1);
cout”nHerencia de hermano mayor es”may;
cout”nHerencia de cada hijo es “her;
}
}
void main( )
{	 herencia( );
system(“PAUSE”);
}
5 	LIBRERÍAS DE PROGRAMACIÓN CREADAS POR EL USUARIO
Al elaborar programas, además de crear módulos independientes y reutilizables en
el programa fuente, Ud. se verá en la necesidad de usar esos mismos módulos en
otros programas fuentes, diferentes entre sí, ya que el algoritmo que necesita son
los mismos para cada uno de ellos.
Existen librerías de cabecera (header, de alli la extensión “.h”), y algunas son pro-
pias del del lenguaje C como: iostream.h, math.h, conio.h, stdio.h, srting.h y otras
que pueden ser creadas por el programador, y ser invocadas en diferentes progra-
mas fuente (el programa con extensión “.cpp”) como parte de la reutilización de
código.
Ejemplo 1:
Leer un número entero diferente a cero, y si es positivo, reportar “El numero es
positivo”, caso contrario es negativo.
Solución:
- Crear la librería con extensión .h llamado lecturadato.h para crear la función de
lectura de datos enteros, llamada leedatoe( ).
lecturadato.h
#includeiostream
using namespace std;
int leedatoe()
{ int dato;
do{
	 cout”Ingrese valor del dato”;
	 cindato;
}while(dato==0);
return dato;	
}
- Crear el programa Ejemplo.cpp que invoca a la librería lecturadato.h, especifican-
do la ruta que se encuentre:
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
41Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
Ejemplo: cpp
#includeiostream
#include “c:programaslecturadato.h”
using namespace std;
void main()
{ int num;
num=leedatoe();
if(num0)
	 cout”El numero es positivo”;
else
cout”El numero es negativo”;
system(“PAUSE”);
}
Descripción:
-	 Al invocar a lecturadato.h, a través de su ruta de ubicación, permite usar las veces que se
requeira, al módulo leedatoe( ) que se encuentra ubicado dentro de librería creada.
-	Si se tiene otro programa con la extensión .cpp, puede también invocar a la libre-
ría lecturadato.h, sin ningún inconveniente.
-	Puede agregar otros módulos de lectura a la librería lecturadato.h, según el tipo
de dato que necesite.
-	Escribir la ruta de la librería se hace innecesaria por la ayuda que ofrece las inter-
faces de la herramienta de programación que ese esté usando.
Ejemplo: LecturaDatos.h
Figura Nro 7: Ejemplo de Librería LecturaDatos.h
(Elaboración personal)
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
42ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
RepartoHerencia.cpp
Figura Nro 8: Ejemplo de Programa Fuente RepartoHerencia.cpp
(Elaboración personal)
Descripción:
-	Como puede ver, en el programa fuente RepartoHerencia.cpp, se invoca al mó-
dulo leedatod( ) y leedatoe( ) para obtener los valores de monto de herencia y
cantidad de hijos respectivamente; dichos módulos están creados en la librería
LecturaDatos.h, que es invocada en el programa fuente.
-	 El módulo principal main( ) se debe escribir líneas abajo del programa fuente, y debe
invocar al módulo Herencia( ), como ya se ha explicado en el ejemplo anterior.
TEMA N° 6: FUNCIONES RECURSIVAS
En cierta ocasión en un aula de clase, pregunté si podían definir o dar un ejemplo de
recursividad, sorprendiéndome la respuesta de un estudiante: “Si yo tengo un apuro
económico, vendo mi reproductor de música, y atiendo ese apuro. Es decir, un recurso
que le pertenece a una entidad, es usada nuevamente por la misma entidad para buscar
una solución, eso es Recursividad”, finalizó.
1 	DEFINICIÓN DE RECURSIVIDAD
Entonces, se denominan funciones recursivas a aquellas que se invocan a sí mis-
mas en un programa, para desarrollar un determinado proceso.
Hay que tener algunas cosas en cuenta, en las funciones recursivas:
- Toda función recursiva debe tener algún punto de finalización o valor base.
- La función recursiva debe acercarse a ese punto de finalización o valor base.
(Eduardo Raffo Lecca, Turbo C++)
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
43Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
2 	RECURSIVIDAD DEL 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);
}
3 	RECURSIVIDAD DE LA MULTIPLICACIÓN
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);
}
4 	RECURSIVIDAD DE TORRES DE HANOI
Las restricciones para la recursividad de torres de hanoi, se expresan:
-	 Usar n discos para trasladarlos desde un poste origen, hacia un poste final, usando
un poste auxiliar.
-	 Por cierta cantidad de discos, hay una cantidad de movimientos, ni mas ni menos,
cant_movim = 2n
− 1.
-	 Los discos están dispuestos del tamaño grande al más pequeño. No puede estar un
disco grande sobre uno pequeño.
A continuación se tiene el algoritmo, puesto a prueba a través del Método del Ár-
bol, muy útil para comprobar la recursividad.
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
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
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
44ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
Figura Nro 9: Ejemplo de Método del Árbol para Torres de Hanoi
(Elaboración personal)
Diagrama Objetivos Inicio
Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
ACTIVIDAD N° 2
Esta actividad puede consultarla en su aula virtual.
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
45Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
Diagrama Objetivos Inicio
Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
	LECTURA SELECCIONADA N° 1
INTRODUCCIÓN A LOS SUBALGORITMOS O SUBPROGRAMAS
Luis Joyanes Aguilar, 2008, Fundamentos de Programación. Pág. 202
Un método ya citado para solucionar un problema complejo es dividirlo en subproble-
mas –problemas más sencillos– y a continuación dividir estos subproblemas en otros
más simples, hasta que los problemas más pequeños sean fáciles de resolver. Esta técnica
de dividir el problema principal en subproblemas se suele denominar “divide y vence-
rás” (divide and conquer). Este método de diseñar la solución de un problema principal
obteniendo las soluciones de sus subproblemas se conoce como diseño descendente
(top-down design). Se denomina descendente, ya que se inicia en la parte superior
con un problema general y el diseño específico de las soluciones de los subproblemas.
Normalmente las partes en que se divide un programa deben poder desarrollarse inde-
pendientemente entre sí.
Las soluciones de un diseño descendente pueden implementarse fácilmente en lenguajes
de programación de alto nivel, como C/C++, Pascal o Fortran. Estas partes independientes
se denominan subprogramas o subalgoritmos si se empelan desde el concepto algorítmico.
La correspondencia entre el diseño descendente y la solución por computadora en
términos de programa principal y subprogramas se analizará a lo largo de este capítulo.
Consideremos el problema del cálculo de la superficie (área) de un rectángulo. Este
problema se puede dividir en tres subproblemas:
• Subproblema 1: Entrada de datos de altura y base.
• Subproblema 2: Cálculo de la superficie.
• Subproblema 3: Salida de resultados.
El algoritmo correspondiente que resuelve los tres subproblemas es:
Leer (altura, base) // entrada de datos
Área ← base * altura // cálculo de la superficie
Escribir (base, altura, área) // salida de resultados
El método descendente se muestra en la Figura:
Figura Nro 10: Diseño Descendente
(Fuente: Luis Joyanes Aguilar. Fundamentos de Programación)
El problema principal se soluciona por el correspondiente programa o algoritmo prin-
cipal – también llamado controlador o conductor (driver) – y la solución de los sub-
problemas mediante subprogramas, conocidos como procedimientos (subrutinas) o
funciones. Los subprogramas, cuando se tratan en lenguaje algorítmico, se denominan
también subalgoritmos.
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
46ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
Un subprograma puede realizar las mismas acciones que un programa: 1) aceptar datos,
2) realizar algunos cálculos, 3) devolver resultados. Un subprograma, sin embargo, se
utiliza por el programa para un propósito específico. El subprograma recibe datos des-
de el programa y le devuelve resultados. Haciendo un símil con una oficina, el problema
es como el jefe que da instrucciones a sus subordinados – subprogramas-; cuando la ta-
rea termina, el subordinado devuelve un resultado al jefe. Se dice que el programa prin-
cipal llama o invoca al subprograma. El subprograma ejecuta la tarea, a continuación
devuelve el control al programa. Eso puede suceder en diferentes lugares del programa.
Cada vez que el programa es llamado, el control retorna al lugar donde fue hecha la
llamada como muestra la siguiente figura (Figura 12). Un subprograma puede llamar a
su vez a sus propios subprogramas (Figura 13). Existen – como ya se ha comentado – dos
tipos importantes de subprogramas: funciones y procedimientos o subrutinas.
Figura Nro 11: Un programa con un subprograma: función y procedimiento
(Fuente: Luis Joyanes Aguilar. Fundamentos de Programación)
Figura Nro 12: Un programa con diferentes niveles de subprogramas
(Fuente: Luis Joyanes Aguilar. Fundamentos de Programación)
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
Diagrama Objetivos Inicio
Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
GLOSARIO DE LA UNIDAD I
Argumento: valores suministrados a un módulo de programa, al momento de ser invo-
cado.
Librería: es un archivo, que contiene código, usualmente en módulos de programa.
Que pueden ser reutilizados por diferentes proyectos de programa.
Programa fuente: algoritmo codificado en un lenguaje de programación, que adminis-
tra otros módulos de programa, y es necesario para la ejecución del programa.
String.h: librería del compilador, en este caso el C/C++, que permite usar el tipo de dato
del mismo nombre: string.
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
47Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
Objetivos Inicio
s
Actividades Autoevaluación
s
Glosario Bibliografía
o Anotaciones
	 AUTOEVALUACIÓN DE LA UNIDAD I
INSTRUCCIONES: Lee detenidamente y responde las siguientes preguntas:
1.	 Indique la alternativa que describa la característica “Ser Preciso” de un algoritmo:
a) Sólo se desarrollarán las tareas programadas y con los datos suministrados.
b) Las tareas desarrolladas deben permitir ponerlas a prueba antes de ejecutar.
c) Las tareas de un algoritmo tienen un orden de realización.
d) Se emplear los recursos necesarios para el desarrollo de las tareas.
e) Se debe expresar en una forma estándar, comúnmente aceptada.
2.	 El programa traductor denominado compilador realiza el siguiente flujo de trabajo.
a)	 Obtiene el programa fuente, genera el código objeto, lo enlaza al código máqui-
na y genera el programa ejecutable.
b)	 Obtiene el programa fuente, genera el código algoritmo, lo enlaza al código
máquina y genera el programa ejecutable.
c)	 Obtiene el programa fuente, genera el código objeto, lo enlaza al código fuente
y genera el programa ejecutable.
d)	 Obtiene el programa fuente, genera el código máquina, lo enlaza al código fuen-
te y genera el programa ejecutable.
e)	 Obtiene el programa fuente, genera el código algoritmo, lo enlaza al código
fuente y genera el programa ejecutable.
3.	 Dado el siguiente bloque de código que utiliza una estructura repetitiva, indique
que valores lógicos de la tabla de verdad (Verdadero=V y Falso=F) se necesita en la
condición, para que no solicite nuevamente el ingreso el valor:
a)	V,V.
do{
		 cout”Ingrese valor: ”;
		cinvalor;
}while(valor==’S’ || valor==’s’);
b)	F,V.
c)	V,F.
d)	F,F.
e)	FFV.
4.	 Indique la alternativa que presenta el orden de ejecución de la estructura repetitiva
Objetivos Inicio
os
Actividades Autoevaluación
s
Glosario Bibliografía
o Anotaciones
BIBLIOGRAFÍA DE LA UNIDAD I
Carrasco Loli Angela. Principios de Programación. Junio 2005
Joyanes Aguilar, Luis. Fundamentos de Programación. 4ta. ed. España: McGraw-Hill;
2008.
Raffo Lecca, Eduardo. Turbo C++. 1 ed. Lima: Mundigraph; 2000.
48ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
Para:
for( i = 0; i  n; i++)
{ accion 1;
acción m;
}
a)	 Inicializa la variable de recorrido, compara que esté dentro del límite, incre-
menta la variable, realiza las acciones, e inicia nuevamente el mismo orden de
ejecución.
b)	 Inicializa la variable de recorrido, compara que esté dentro del límite, realiza
las acciones, incrementa la variable e inicia nuevamente el mismo orden de
ejecución.
c)	 Inicializa la variable de recorrido, compara que esté dentro del límite, incremen-
ta la variable, realiza las acciones, y finaliza el orden de ejecución.
d)	 Inicializa la variable de recorrido, incrementa la variable, compara que esté dentro
del límite, realiza las acciones, e inicia nuevamente el mismo orden de ejecución.
e)	 Inicializa la variable de recorrido, decrementa la variable, compara que esté
dentro del límite, realiza las acciones, e inicia nuevamente el mismo orden de
ejecución.
5.	 Dado el siguiente bloque de código, indique el tipo de sentencia:
if(num  0)
if(num  30  num  60 )
coutpow(num,2);
a)	 Sentencia Repetitiva Para.
b)	 Sentencia Selectiva Compuesta.
c)	 Sentencia Repetitiva Hacer-Mientras.
d)	 Sentencia Selectiva Múltiple.
e)	 Sentencia Selectiva Anidada.
6.	 Indique la alternativa cuyo enunciado no es correcto:
a)	 Las funciones y procedimientos son módulos de programa.
b)	 Las funciones recursivas se invocan a sí mismas.
c)	 Sólo las funciones usan argumentos, los procedimientos no lo usan.
d)	 Los módulos son independientes y reutilizables.
e)	 Los pasos de parámetros son dos: por valor y por referencia.
7.	 Indique la alternativa que defina a “permite usar módulos independientes, en dife-
rentes programas”.
a)	 Función Recursiva.
b)	 Paso de Parámetros por valor.
c)	 Sentencias Repetitivas.
d)	 Librerías de programación.
e)	 Sentencias Selectivas.
8.	 Indique a que algoritmo recursivo, se refiere el siguiente módulo de programa:
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
49Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
int modulo(int a, int b)
{
if(b==0)
return 1;
else
return a*modulo(a,b-1);
}
a)	 Función Recursiva de la Multiplicación.
b)	 Función Recursiva del Factorial.
c)	 Función Recursiva de la Potencia.
d)	 Función Recursiva de Fibonacci.
e)	 Función Recursiva de Torres de Hanoi.
9.	 El paso de parámetros por valor, realiza el siguiente proceso:
a)	 Crea una variable original y las modificaciones afectan a la copia de la variable
original.
b)	 Crea una copia temporal de la variable y las modificaciones solo afectan a ésta
copia.
c)	 Crea un variable original y las modificaciones solo afectan a ésta.
d)	 Crea una copia temporal de la variable y las modificaciones afectan a la variable
original.
e)	 Crea una variable original y no tiene modificaciones.
10.	Indique la alternativa que indique la(s) variables(s) que sean paso de parámetros
por referencia.
void calcular(int x, int  y)
{	 int c;
	 c = x + y; coutc;
}
a)	 La variable “x”.
b)	 La variable “x” y la variable “y”.
c)	 La variable “y”.
d)	 La variable “c” y la variable “y”.
e)	 La variable “c”.
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
50
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
51Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
Diagrama Objetivos Inicio
Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
Diagrama Objetivos Inicio
Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
DIAGRAMA DE PRESENTACIÓN DE LA UNIDAD
ORGANIZACIÒN DE LOS APRENDIZAJES
CONOCIMIENTOS PROCEDIMIENTOS ACTITUDES
Tema N° 1: Estructuras de
Datos
1. Definición de Estructura de
Datos
2.	Clasificación de Estructura
de Datos
Tema N° 2: Arreglos Unidi-
mensionales
1.	Definición de Arreglos Uni-
dimensionales
2.	Algoritmos de Actualiza-
ción
3.	Búsqueda de Arreglos Uni-
dimensionales
4. Ordenación de Arreglos
Unidimensionales
Tema N° 3: Arreglos Bidimen-
sionales
1.	Definición Arreglos Bidi-
mensionales
2.	Algoritmos de Actualiza-
ción de Arreglos Bidimen-
sionales
Lectura seleccionada N° 1
Arrays Multidimensionales –
Jesús Carretero Pérez. García
Carballena, Felix. Pérez Loba-
to José
Autoevaluación de la Unidad II
1.	Aplica los algoritmos de
actualización de arreglos
unidimensionales: añadir,
insertar, eliminar; en la
construcción de programas
2.	Aplica los algoritmos de
búsqueda y ordenación de
arreglos unidimensionales
en la construcción de pro-
gramas
3.	Aplica los algoritmos de
actualización de arreglos
bidimensionales en la cons-
trucción de programas
4.	Usa los algoritmos de ma-
triz transpuesta, diagonales,
rodean a un número; con
arreglos bidimensionales
Actividad N° 1
Elaboración de Programas usan-
do arreglos unidimensionales,
para casos propuestos
Actividad N° 2
Elaboración de Programas usan-
do arreglos bidimensionales,
para casos propuestos
Tarea Académica Nº 1
Construcción de Programas y
prueba de escritorio, usando
Arreglos
1.	Asume con responsabilidad
sus actividades académicas
asignadas
2.	Realiza con honestidad las
evaluaciones asignadas
CONTENIDOS
AUTOEVALUACIÓN
LECTURAS
SELECCIONADAS
BIBLIOGRAFÍA
ACTIVIDADES
52ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
TEMA N° 1: ESTRUCTURAS DE DATOS
1 	DEFINICIÓN DE ESTRUCTURA DE DATOS
Considere como ejemplo un librero, un espacio donde almacena libros en cada com-
partimiento (un solo tipo de dato: libro), o como a su oficina de trabajo, como un
espacio donde se almacenan elementos tales como expedientes, computadoras, gabi-
netes, personas, entre otros; es decir permite almacenar diferentes elementos (dife-
rentes tipos de datos). Entonces la estructura de datos, es aquel espacio que permite
almacenar valores, ya sean del mismo o de diferentes tipos de datos.
2 	CLASIFICACIÓN DE ESTRUCTURA DE DATOS
A.	 Estructuras de Datos Simples: permiten almacenar un solo valor en un espacio de
memoria (variable)
a.	Estructuras de Datos Estándar: es el almacenamiento que todos los lenguajes de
programación utilizan, dado el tipo de dato que se defina.
Por ejemplo, se tiene una estructura estándar de tipo real para una variable deno-
minada precio:
Declaración en C/C++: float precio;
Representación Gráfica en Memoria, asignándole el valor de precio de 12.6:
12.6
float precio
b.	Estructuras de Datos No Estándar: es la estructura que no pertenece a un lenguaje
de programación específico, y puede ser creado por el programador. En C/C++ se
definen con la palabra reservada typedef.
B.	 Estructuras de Datos Compuestas: permiten almacenar un conjunto de valores
(celdas o nodos) en un espacio de memoria. Pueden ser de dos tipos:
a.	Estructuras de Datos Estáticos: necesitan definir su tamaño inicial, antes de la eje-
cución del programa. Como ejemplo de este tipo de estructuras tenemos a los arre-
glos unidimensionales, arreglos bidimensionales y estructuras (registros).
Declaración de Arreglo Unidimensional en C/C++: char Mensaje[11];
Representación Gráfica en Memoria, asignándole un valor en cada celda:
UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
53Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
char Mensaje b i e n v e n i d o ` 0 ´
Declaración de Registro en C/C++:
struct Paciente{
int codPaciente;
string apePaciente;
string nombPaciente;
char generoPaciente;
};
Representación Gráfica en Memoria, asignándole un valor en cada celda:
b.	Estructuras de Datos Dinámicos: no necesita definir tamaño inicial, ya que los es-
pacios se van creando conforme se van ingresando los valores. Se tiene dos tipos:
lineal, por que nodos se crean uno tras otro (Ejemplo: lista, colas y pilas), y no
lineal, por que los nodos no necesariamente se encuentran uno tras otro (árbol y
grafo).
TEMA N° 2: ARREGLOS UNIDIMENSIONALES
1 	DEFINICIÓN DE ARREGLOS UNIDIMENSIONALES
También llamado vectores, es un conjunto finito y ordenado de elementos de un
mismo tipo de dato (homogéneos). La definición de un arreglo es como sigue:
			 TipoDato NombreArreglo[tamaño]
Ejemplo: 	 	 Entero 	 M[10]
Acceso a los elementos de un arreglo unidimensional:
Nombre del arreglo [posición del elemento];
Ejemplo: Gráfico de Arreglo Unidimensional
UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
54ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
23 45 34 19 62edad
edad[0]
0
edad[2]
2
edad[1]
1
edad[3]
3
edad[4]
4
Descripción:
- Nombre del arreglo: edad.
- Tamaño Máximo del arreglo (cantidad de celdas): 5
-	 Posición de cada celda: 0, 1, 2, 3, 4 (recorridos con la variable index: i , desde la
posición 0 hasta la posición del tamaño máximo -1)
- Elementos o valores dentro del arreglo, dada por cada celda: 23 en edad[0], 45 en
edad[1], 34 en edad[2], 19 en edad[3] y 62 en edad[4], es decir para leer, mostrar
u operar un valor del arreglo, escribe el nombre del arreglo y dentro de corchetes
la posición de la celda del arreglo.
El siguiente programa lee un arreglo de números enteros y encuentra el mayor y me-
nor elemento. El máx de elementos es 100 pero solo ingresa n elementos.
//Programa para hallar el mayor y menor elemento de un arreglo
#includeiostream
#include “LecturaDatos.h”
#define MAXIMO 100
using namespace std;
void leerarre(int N, int array[])
{ int i;
for(i=0;i=N-1;i++)
	 { coutIngrese altura alumno A[i]:t;
	 cinarray[i]; coutn; }
}
void comparar(int N, int array[])
{ int i, mayor, menor;
mayor=array[0];
menor=array[0];
for(i=0;i=N-1;i++)
	 { if (array[i]mayor)
		 mayor=array[i];
	 else
	 if (array[i]menor)
		 menor=array[i];	 }
coutEl mayor es :mayorn;
coutEl menor es :menorn;
}
void main()
{ int A[MAXIMO];
int n;
do{ coutIngrese cantidad de elementos (= a CERO y = que 100): ;
n=leedatoe();
}while(n=0 || nMAXIMO);
leerarre(n,A);
comparar(n,A);
system(PAUSE);
}
2 	ALGORITMOS DE ACTUALIZACIÓN
Los Arreglos necesitan actualizarse mientras se efectúa algún proceso con ellos. La
actualización de arreglos consiste en tres operaciones: Añadir elementos al final
del arreglo (siempre y cuando exista espacio en el arreglo), Insertar elementos en
UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
55Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
cualquier posición del arreglo y Eliminar elementos.
Añadir: Añadir un valor en la última posición.
#includeiostream
#include”LecturaDatos.h”
#define MAX 100
using namespace std;
void ingresadatos(int V[MAX], int n)
{ int i;
coutIngrese elementos para el arreglo ; coutn;
for(i=0;i=n-1;i++)
	 {	 coutElemento [i]:;
		 cinV[i]; }
}
void mostrar(int V[MAX], int n)
{	 int i;
	 coutLos elementos del arreglo son; coutn;
	 for(i=0;i=n-1;i++)
	 { coutElemento[i]:t;
coutV[i]; coutn; }
}
int ultimoelemento(int a[MAX], int n)
{ int i,p = n;
if (pMAX)
	 { for(i=p;i=n;i++) //ingresa nuevo elemento
		 { coutn Ingrese nuevo elemento de arreglo :t;
		 cina[i]; }
	 n=n+1;
	 return n; }
}
void main()
{	 int A[MAX];
int num,elem;
do{ coutIngrese numero de elementos para el arreglo: ;
		 num= leedatoee();
	 }while(num=0 || numMAX);
ingresadatos(A,num); coutn;
mostrar(A,num); coutn;
elem=ultimoelemento(A, num);
mostrar(A,elem);
system(PAUSE);
}
Insertar: Insertar un valor en cualquier posición, desplazando los elementos desde
la ultima celda hasta la posición que desea insertar.
#includeiostream
#include”LecturaDatos.h”
#define MAX 100
using namespace std;
void ingresadatos(int V[MAX], int n)
{	 int i;
	 coutIngrese elementos para el arreglo ; coutn;
UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
56ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
	 for(i=0;i=n-1;i++)
	 { coutElemento [i]:;
cinV[i]; }
}
void mostrar(int V[MAX], int n)
{	 int i;
	 coutLos elementos del arreglo son; coutn;
	 for(i=0;i=n-1;i++)
{ coutElemento[i]:t;
	 coutV[i]; coutn; }
}
int posicion(int a[MAX], int n)
{ int i,p;
coutn Ingrese posicion a insertar un elemento:t; p=leedatoe();
i=n-1;
while (i=p)
{	 a[i+1]=a[i];
	 i=i-1;
}
return p;
}
int nuevoelemento(int a[MAX],int p, int n)
{	 int elem;
	 coutn Ingrese nuevo elemento de arreglo a:t;
	 elem=leedatoe();
	 a[p]=elem;
	 n=n+1;
	 return n;	
}
void main()
{ 	 int A[MAX]; int num,pos,elem;
do{ coutIngrese numero de elementos para el arreglo: ;
		 num= leedatoee();
	 }while(num=0 || numMAX);
ingresadatos(A,num); coutn;
mostrar(A,num);
coutn;
pos=posicion(A,num);
elem=nuevoelemento(A,pos, num);
mostrar(A,elem);
system(PAUSE);
}
Eliminar: Eliminar un valor en cualquier posición, desplazando los elementos des-
de la derecha del valor que se quiere eliminar.
#includeiostream
#include”LecturaDatos.h”
#define MAX 100
using namespace std;
void ingresadatos(int V[MAX], int n)
{	 int i;
	 coutIngrese elementos para el arreglo ; coutn;
UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
57Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
	 for(i=0;in;i++)
	 { coutElemento [i]:;
		 cinV[i]; }
}
void mostrar(int V[MAX], int n)
{	 int i;
	 coutLos elementos del arreglo son; coutn;
	 for(i=0;in;i++)
	 { coutElemento[i]:t;
		 coutV[i]; coutn; }
}
int elimina(int a[MAX], int n)
{int i,p;
coutn Ingrese posicion a eliminar elemento de arreglo :t;
p=leedatoe();
i=p;
while (in)
{	 a[i]=a[i+1];
	 i++;
}
return n-1;
}
void main()
{	 int A[MAX]; int num,el;
do{ coutIngrese numero de elementos para el arreglo: ;
		 num= leedatoee();
	 }while(num=0 || numMAX);
ingresadatos(A,num); coutn;
mostrar(A,num); coutn;
el=elimina(A,num);
mostrar(A,el);
system(PAUSE);
}
3 	BÚSQUEDA DE ARREGLOS UNIDIMENSIONALES
La búsqueda es la recuperación de la información de los elementos de un arreglo.
Para ello se necesita recorrer el arreglo y hacer uso de uno de los métodos de bús-
queda de un elemento, revisaremos dos tipos: Búsqueda Secuencial y Búsqueda
Binaria.
A. Secuencial: recorre el arreglo celda por celda, verificando si es el elemento que
se busca, usando una bandera llamada Encontrado, el cual se asume como falsa, y
solo cambia a verdadera si encuentra el valor buscado, si terminado el recorrido en
el arreglo, no lo encuentra, la bandera se queda en el estado de falsa.
Es útil para arreglos con pocos elementos.
#includeiostream
#include”LecturaDatos.h”
#define MAX 100
using namespace std;
void ingresadatos(int V[MAX], int n)
{	 int i;
	 coutIngrese elementos para el arreglo ; coutn;
UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
58ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
	 for(i=0;in;i++)
	 { coutElemento [i]:;
		 cinV[i]; }
}
void mostrar(int V[MAX], int n)
{	 int i;
	 coutLos elementos del arreglo son; coutn;
	 for(i=0;in;i++)
	 { 	 coutElemento[i]:t;
		 coutV[i]; coutn; }
}
void bsecuencial(int a[MAX], int n)
{ int elem,i; bool Encontrado = false;
coutn Ingrese elemento a buscar en el arreglo :t; cinelem;
for(i=0;in;i++)
	 { if(a[i]==elem)
		 { Encontrado=true;
		 coutn Encontradot Posicion :titn;
		 }
	 }
if(Encontrado==false)
	 { coutn No Encontradot ; coutnn; }
}
void main()
{int A[MAX]; int num;
do{	 coutIngrese numero de elementos para el arreglo: ;
	 num= leedatoee();
}while(num=0 || numMAX);
ingresadatos(A,num); coutn;
mostrar(A,num); coutn;
bsecuencial(A,num);
system(PAUSE);
}
B. Búsqueda Binaria: Necesita que el arreglo se encuentre ordenado ascendente-
mente para poder aplicar este algoritmo, que consiste en dividir el arreglo en dos
partes y si la celda central es el elemento que se busca, termina el algoritmo, sino
se verifica si el elemento buscado se encuentra a la derecha (mayor) o la izquierda
(menor) del valor de la celda central, para solo buscar en esa porción del arreglo,
volvendo a dividira esa parte en dos, y buscar un nuevo valor central, repitiendo los
pasos anteriores.
#includeiostream
#include”LecturaDatos.h”
#define MAX 100
using namespace std;
void ingresadatos(int V[MAX], int n)
{	 int i;
	 coutIngrese elementos para el arreglo ;coutn;
	 for(i=1;i=n;i++)
	 { coutElemento [i]:;cinV[i]; }
}
void mostrar(int V[MAX], int n)
UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
59Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
{	 int i;
	 coutLos elementos del arreglo son; coutn;
	 for(i=1;i=n;i++)
	 { coutElemento[i]:t;coutV[i]; }
}
void bbinaria(int a[MAX], int n)
{	 int elem; int BAJO, ALTO, CENTRAL; 	 BAJO=1; ALTO=n;
	 coutn Ingrese elemento a buscar:t; cinelem;
	 CENTRAL=((BAJO+ALTO)/2);
	 while ((BAJO=ALTO)  (a[CENTRAL]!=elem))
		 { 	 if(elema[CENTRAL])
			 	 {ALTO=CENTRAL-1;
CENTRAL=(BAJO+ALTO)/2;
}
			 else{
				 BAJO=CENTRAL+1;
				 CENTRAL=(BAJO+ALTO)/2;
}
	 	 }
	 if(elem==a[CENTRAL])
{ coutn ENCONTRADO n;
coutn a[CENTRAL] = a[CENTRAL]; coutn;
}
	 else
coutn NO ENCONTRADO n ;
}
void main()
{int A[MAX]; int num;
do{	coutIngrese numero de elementos para el arreglo: ;
	 num= leedatoee();
}while(num=0 || numMAX);
ingresadatos(A,num); coutn;
mostrar(A,num); coutn;
bbinaria(A,num);
system(PAUSE);
}
4 	ORDENACIÓN DE ARREGLOS UNIDIMENSIONALES
Permite comparar elementos e intercambiar posiciones, ya sea en forma ascenden-
te o descendente.
//Ordenación por Burbuja
#includeiostream
#include”LecturaDatos.h”
#define MAX 100
using namespace std;
void ingresadatos(int V[MAX], int n)
{	 int i;
	 coutIngrese elementos para el arreglo ; coutn;
	 for(i=0;in;i++)
	 { coutElemento [i]:;
		 cinV[i]; }
UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
60ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
}
void mostrar(int V[MAX], int n)
{	 int i;
	 coutLos elementos del arreglo son; coutn;
	 for(i=0;in;i++)
	 { 	 coutElemento[i]:t;
		 coutV[i]; coutn; }
}
void burbuja(int a[MAX], int n)
{	 int i,j,temp;
	 for(i=0;in-1;i++)
		for(j=n-1;j=i+1;j--)
			 if (a[j]a[j-1])
		 	 {	 temp=a[j];
				 a[j]=a[j-1];
				 a[j-1]=temp;
		 	 }
}
void main()
{int A[MAX];
int num;
do{	 coutIngrese numero de elementos para el arreglo: ;
	 num= leedatoee();
}while(num=0 || numMAX);
ingresadatos(A,num); coutnn;
burbuja(A,num);
mostrar(A,num);
system(PAUSE);
}
Diagrama Objetivos Inicio
Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
ACTIVIDAD N° 1
Esta actividad puede consultarla en su aula virtual.
UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
61Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
TEMA N° 3: ARREGLOS BIDIMENSIONALES
1 	DEFINICIÓN DE ARREGLOS BIDIMENSIONALES.
También llamado matrices, es un conjunto finito y ordenado de elementos de un
mismo tipo de dato. La definición de un arreglo es como sigue:
TipoDato NombreMatriz[n°filas][nºcolumnas]
Ejemplo: 	 Entero 	 M[4][5]
//Lectura y Presentación de Datos en una Matriz:
#includeiostream
#include”LecturaDatos.h”
#define MAX 100
using namespace std;
void ingresadatos(int M[MAX][MAX], int nf,int nc)
{ int i,j;
coutIngrese elementos para la matriz ; coutn;
for(i=0;i=nf-1;i++)
for(j=0;j=nc-1;j++)
{ coutElemento [i][j]:;
cinM[i][j]; }
}
void mostrar(int M[MAX][MAX], int nf, int nc)
{ int i,j;
coutLos elementos de la matriz son; coutn;
for(i=0;i=nf-1;i++)
{for(j=0;j=nc-1;j++)
{ coutM[i][j]; coutt;
}
coutn;
}
}
void main()
{	 int B[MAX][MAX]; int nf,nc;
do{	 coutIngrese numero de filas: ;
		 nf= leedatoee();
}while(nf=0 || nfMAX);
do{	 coutIngrese numero de columnas: ;
		 nc= leedatoee();
}while(nc=0 || ncMAX);
ingresadatos(B,nf,nc); coutn;
mostrar(B,nf,nc); coutn;
}
UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
62ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
//Diagonal Principal y Diagonales de una matriz
….. //Se entiende que se realizan los procedimientos de lectura de datos
void diagonal_principal(int M[MAX][MAX], int nf, int nc)
{ int i,j;
if(nf==nc)
{ for(i=0;i=nf-1;i++)
{ for(j=0;j=nc-1;j++)
if(i==j)
{ coutn; coutM[i][j]n;
}
else
cout ;
coutn;
}
}
else
{coutColumnas y filas deben ser iguales; coutnn; }
}
void diagonalsecundaria(int M[MAX][MAX], int nf, int nc)
{ int i,j,k;
k=nc-1;
if(nf==nc)
{ for(i=0;inf;i++)
{ for(j=0;jnc;j++)
if(j == k)
{ coutM[i][j]; }
else
coutt;
k--;
coutn;
}
}
else
{ coutPara la Diagonales: columnas y filas deben ser
iguales; coutnn;
}
}
void diagonales(int M[MAX][MAX], int nf, int nc)
{ int i,j,k;
k=nc-1;
if(nf==nc)
{ for(i=0;i=nf-1;i++)
{ for(j=0;j=nc-1;j++)
if(i==j || j==k)
{ coutn; coutM[i][j]n; }
else
{cout ;}
k- -;
coutn;
}
}
UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
63Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
else
{ coutColumnas y filas deben ser iguales; coutnn; }
}
void main()
{ int B[MAX][MAX]; int nf,nc;
do{		 coutIngrese numero de filas: ;
		 nf= leedatoee();
}while(nf=0 || nfMAX);
do{		 coutIngrese numero de columnas: ;
		 nc= leedatoee();
}while(nc=0 || ncMAX);
ingresadatos(B,nf,nc); coutn;
mostrar(B,nf,nc); coutn;
coutLos elementos de la diagonal Principal: n;
diagonal_principal(B,nf,nc); coutn;
coutLos elementos de las diagonales : n;
diagonales(B,nf,nc); coutn; system(PAUSE);
}
2 	ALGORITMOS DE ACTUALIZACIÓN 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{ coutIngrese posicion para insertar fila: ;
cinpos;
}while(pos0 || posnf);
for(i=nf-1;i=pos;i--)
for(j=0;j=nc-1;j++)
M[i+1][j]=M[i][j];
for(j=0;j=nc-1;j++)
{ coutM[pos][j] : ;
cinM[pos][j];
}
nf++;
return nf;
}
int insertar_columna(int M[MAX][MAX], int nf, int nc)
{int i,j,pos;
do{ coutIngrese posicion para insertar columna: ;
cinpos;
}while(pos0 || posnc);
for(i=0;i=nf-1;i++)
for(j=nc-1;j=pos;j--)
M[i][j+1]=M[i][j];
for(i=0;i=nf-1;i++)
{ coutM[i][pos] : ;
cinM[i][pos];
}
nc++;
return nc;
}
UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
64ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
void main()
{ int B[MAX][MAX];
int nf,nc,fil,col;
do{ coutIngrese numero de filas: ;
	 nf= leedatoee();
}while(nf=0 || nfMAX);
do{	 coutIngrese numero de columnas: ;
	 nc= leedatoee();
}while(nc=0 || ncMAX);
ingresadatos(B,nf,nc); coutn;
mostrar(B,nf,nc); coutn;
coutInserta fila: n;
fil=insertar_fila(B,nf,nc); coutn;
coutMatriz Inicial con fila insertada;
mostrar(B,fil,nc); coutn;
coutInserta columna: n;
col=insertar_columna(B,nf,nc); coutn;
coutMatriz Inicial con columna insertada;
mostrar(B,nf,col); coutn;
system(PAUSE);
}
//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{ coutIngrese posicion para borrar fila: ;
cinpos;
}while(pos0 || pos=nf);
for(i=pos;i=nf-1;i++)
for(j=0;j=nc-1;j++)
M[i][j]=M[i+1][j];
nf--;
return nf;
}
int borrar_columna(int M[MAX][MAX], int nf, int nc)
{ int i,j,pos;
do{ coutIngrese posicion para insertar columna: ;
cinpos;
}while(pos0 || pos=nc);
for(i=0;i=nf-1;i++)
for(j=pos;j=nc-1;j++)
M[i][j]=M[i][j+1];
nc- -;
return nc;
}
void main()
{ int B[MAX][MAX] nf,nc,fil,col;
do{ coutIngrese numero de filas: ;
	 nf= leedatoee();
}while(nf=0 || nfMAX);
do{	 coutIngrese numero de columnas: ;
UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
65Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
	 nc= leedatoee();
}while(nc=0 || ncMAX);
ingresadatos(B,nf,nc); coutn;
mostrar(B,nf,nc); coutn;
coutElimina fila: n;
fil=borrar_fila(B,nf,nc); coutn;
coutMatriz Inicial con fila eliminada;
mostrar(B,fil,nc); coutn;
coutElimina columna: n;
col=borrar_columna(B,nf,nc); coutn;
coutMatriz Inicial con columna eliminada;
mostrar(B,nf,col); coutn;
system(PAUSE);
}
Diagrama Objetivos Inicio
Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
ACTIVIDAD N° 2
Esta actividad puede consultarla en su aula virtual.
Diagrama Objetivos Inicio
Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
	LECTURA SELECCIONADA N° 1
ARRAYS MULTIDIMENSIONALES
Jesús Carretero Pérez. García Carballena, Felix. Pérez Lobato José, 2007,
Fundamentos de Programación. Pág. 196
Hasta ahora se ha trabajado con vectores de una única dimensión, llamados arrays uni-
dimensionales. Pero el lenguaje de programación C también permite definir arrays de
varias dimensiones.
Suponga que se desea almacenar las temperaturas de un punto geográfico durante un
año, minuto a minuto. Para este problema, se podría usar la siguiente definición: 		
float temperaturas [366][24][60];
En ella encontramos:
• Float es el tipo de dato de cada elemento.
• Temperaturas es el nombre de la variable utilizada para el array multidimensional;
• [366][24][60] indica el número de elementos del array en cada dimensión. La pri-
mera dimensión tiene un total de 366 elementos, la segunda 24 y la tercera 60. La
primera dimensión está junto al nombre de la variable.
Aunque el ejemplo presenta tres dimensiones, podrían definirse muchas más. Lo habi-
tual es usar dos y tres dimensiones. Si un array unidimensional se conoce como vector,
un array bidimensional se denomina matriz.
UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
66ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
Inicialización y acceso a un array multidimensional
Considere ahora la siguiente definición de una matriz de 4 filas y 2 columnas:
	 int matriz[4][2];
Si se conocen los valores de la matriz, se puede inicializar de forma similar a un array:
int matriz[4][2]= {	 {11,12},
{21,22},
{31,32},
{41,42},
};
Para acceder al segundo elemento de la tercera fila se utiliza la siguiente expresión:
matriz[2][1]
Como se muestra en la figura 8.5, el índice de una dimensión toma valores de la misma
manera que lo hace un vector: desde cero hasta el número de elementos menos uno.
Distribución de los índices de una matriz.
Un array multidimensional también es descrito como un array de arrays de ...
Más concretamente, la variable matriz es un array de cuatro elementos.
matriz[0] ,…, matriz[3]
cuyos elementos son a su vez arrays de dos elementos cada uno
matriz[i][0] ,…, matriz[i][1] para i de 0 a 3.
En un array multidimensional de n dimensiones, los elementos de la última dimensión,
que forman un vector, se almacenan siempre en memoria consecutivamente.
En el caso de una matriz (n=2), esto significa que los valores se almacenan por filas, a di-
ferencia de otros lenguajes de programación como FORTRAN donde se almacenan por
columnas. En la siguiente figura se muestra de forma gráfica como todos los elementos
de una misma fila se almacenan consecutivamente.
Disposición de matriz en memoria.
UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
67Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
Diagrama Objetivos Inicio
Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
GLOSARIO DE LA AUNIDAD II
Celda: es un espacio de memoria dentro de un arreglo, y si es bidimensional es referen-
ciado por fila y columna que ocupe.
Dimensión: es el conjunto de elementos que puede tener un arreglo, y puede ser desde
una dimensión hasta n dimensiones.
Objetivos Inicio
os
Actividades Autoevaluación
s
Glosario Bibliografía
o Anotaciones
BIBLIOGRAFÍA DE LA UNIDAD II
Carretero Pérez, Jesús. García Carballena, Felix. Pérez Lobato José. Fundamentos de
Programación. 1ra. ed. España: Thomson; 2007.
Joyanes Aguilar, Luis. Fundamentos de Programación. 4ta. ed. España: McGraw-Hill;
2008.
Lazo Aguirre Walter, programaciòn estructurada en C. problemas resueltos. Universi-
dad Privada Antenor Orrego, 1995
Objetivos Inicio
s
Actividades Autoevaluación
s
Glosario Bibliografía
o Anotaciones
	 AUTOEVALUACIÓN DE LA UNIDAD II
INSTRUCCIONES: Lee detenidamente y responde las siguientes preguntas:
1. Indique la alternativa que describa la característica de una estructura de datos
estática:
a) Necesita definir los valores antes de ejecutar el programa.
b) No necesita definir un tamaño antes de ejecutar el programa.
c) Necesita mostrar los valores antes de ejecutar el programa.
d) Necesita definir un tamaño antes de ejecutar el programa.
e) Necesita definir un tamaño después de ejecutar el programa.
2. Los tipos de datos: entero, real, cadena; pertenecen a la siguiente clase de estructu-
ras de datos:
a) Estructuras de Datos Simple No Estándar.
b) Estructuras de Datos Compuesta Estática.
c) Estructuras de Datos Simple Estándar.
d) Estructuras de Datos Dinámica Lineal.
e) Estructuras de Datos Dinámica No Lineal.
3. Indique la alternativa que contenga tres características de un arreglo:
a) Homogéneo, Infinito, Secuencial.
b) Homogéneo, Finito, Secuencial.
c) Heterogéneo, Finito, Secuencial.
d) Heterogéneo, Infinito, Secuencial.
e) Homogéneo, Finito, No Secuencial.
4. En un arreglo unidimensional, se añade un elemento al final considerando:
a) Que se elimine el último elemento.
b) Que no importa que exceda el tamaño definido.
UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
68ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
c) Que se elimine el primer elemento.
d) Que no se exceda el tamaño definido.
e) Que se exceda a la cantidad ingresada.
5.	 Para asignar directamente un valor de una posición 2 de un arreglo A, a otra posi-
ción 5 de un arreglo B, se escribe:
a) B[5] = A[2];
b) B[2] = A[5];
c) A[5] = B[2];
d) A[2] = B[5];
e) B[5] = A[5];
6.	 Para mostrar los elementos de la diagonal principal de una matriz, el algoritmo ne-
cesita evaluar:
a) Que la posición de fila y columna no sean iguales.
b) Que la posición de una variable auxiliar y la de columna sean iguales.
c) Que la posición de una variable auxiliar y la de columna no sean iguales.
d) Que la posición de una variable auxiliar y la de fila sean iguales.
e) Que la posición de fila y columna sean iguales.
7.	 Para insertar una nueva fila en una matriz, el algoritmo inserta los valores:
a) Por fila desde la posición 0 hasta número de fila-1.
b) Por columna desde la posición 0 hasta número de columna-1.
c) Por fila desde la posición 0 hasta número de fila+1.
d) Por columna desde la posición 0 hasta número de columna+1.
e) Por columna desde la posición columna-1 hasta posición 0.
8.	 Indique lo que realiza la línea siete (línea 7.) del código para desplazar a la derecha,
en una operación de inserción de elementos en un arreglo unidimensional:
1.	 int posicion(int a[MAX], int n)
2.	 {	 int i,p;
3.	 coutn Ingrese posicion a insertar un elemento:;
4.	 cinp;
5.	 i=n-1;
6.	 while (i=p)
7.	 {	a[i+1]=a[i];
8.	 i=i-1;
9.	 }
10.	 return p;
11.	 }
a) Asigna el valor de la posición i, incrementando la variable i.
b) Asigna el valor de una posición más de i, en la posición i.
c) Asigna el valor de una posición incrementada de i.
d) Asigna el valor de una posición más de i, incrementando la variable i.
e) Asigna el valor de la posición i, en una posición más.
9.	 Indique lo que realiza la línea nueve (línea 9.) del código para la operación de eli-
minación de elementos en una columna un arreglo bidimensional:
UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
69Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
1.	 int borrar_columna(int M[MAX][MAX], int nf, int nc)
2.	 { int i,j,pos;
3.	 do{
4.	 coutIngrese posicion para insertar columna: ;
5.	 cinpos;
6.	 }while(pos0 || pos=nc);
7.	 for( i=0;i=nf-1;i++)
8.	 for( j=pos;j=nc-1;j++)
9.	 M[ i ][ j ]=M[ i ][ j + 1 ];
10.	 nc- -;
11.	 return nc;
12.	 }
a) Asigna el valor de la columna actual más uno, en una fila más uno.
b) Asigna el valor de la columna actual más uno, en la columna actual.
c) Asigna el valor de la columna actual, en una columna más uno.
d) Asigna el valor de la fila actual, en una fila más uno.
e) Asigna el valor de la fila actual más uno, en la fila actual.
10.	Dado el siguiente bloque de código para búsqueda binaria en una arreglo unidi-
mensional, indique la alternativa que es correcta:
void bbinaria(int a[MAX], int n)
{	 int elem;
int BAJO, ALTO, CENTRAL;
BAJO=0; ALTO=n-1;
coutn Ingrese elemento a buscar:t;
cinelem;
	 CENTRAL=((BAJO+ALTO)/2);
	 while ((BAJO=ALTO)  (a[CENTRAL]!=elem))
		 { if(elema[CENTRAL])
				 {ALTO=CENTRAL-1;
CENTRAL=(BAJO+ALTO)/2;
}
			 else{
				 BAJO=CENTRAL+1;
				 CENTRAL=(BAJO+ALTO)/2;
}
		 }
	 if(elem==a[CENTRAL])
{ coutn ENCONTRADO n;
coutn a[CENTRAL] = a[CENTRAL];
}
	 else
coutn NO ENCONTRADO n ;
}
a)	 Para ejecutar el algoritmo de búsqueda binaria, no es necesario que el arreglo se
encuentre ordenado, y solo se puede usar con valores numéricos.
b)	 En el algoritmo, el valor de la variable CENTRAL es la que determina si se sigue
buscando al valor requerido en un sector del arreglo, o si es que se detiene la
búsqueda.
c)	 Los valores de las variables BAJO y ALTO, pueden ser inicializadas con valores
decimales, como posición dentro de un arreglo unidimensional.
d)	 En la última sentencia selectiva compuesta del algoritmo, se asigna el valor de la
variable “elem” como valor para la posición central del arreglo.
e)	 La posición CENTRAL es un valor decimal de (BAJO + ALTO) /2.
UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
70
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
71Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
Diagrama Objetivos Inicio
Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
Diagrama Objetivos Inicio
Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
DIAGRAMA DE PRESENTACIÓN DE LA UNIDAD
ORGANIZACIÓN DE LOS APRENDIZAJES
CONOCIMIENTOS PROCEDIMIENTOS ACTITUDES
Tema Nº 1: Registro (Estructu-
ra) y Unión
1. Definición de Registro (Es-
tructura)
2.	Módulos y Estructuras
3.	Invocación de una Estructura
en Otra
4.	Definición de Unión: Ejem-
plo Práctico
Tema Nº 2: Tipos de Datos Abs-
tractos (TDA)
1.	Definición de TDA
2.	Clases y Programación Orien-
tada a Objetos
Tema Nº 3: Puntero a Dirección
de Memoria
1.	Definición de Puntero a Di-
rección de Memoria
2.	Creación y Eliminación de
Variables Dinámicas
Lectura Seleccionada N° 1
Introducción al enfoque OOP
– Rosalía Laza Fidalgo. Baltasar
García Pérez-Shofield
Tema Nº 4: Estructuras de Datos
Dinámicas Lineal
1. Listas Enlazadas: Simple, Do-
ble, Circular
2. Colas y Pilas
Autoevaluación de la Unidad III
1.	Aplica los algoritmos de crea-
ción de estructura y unión en
la construcción de programas
2.	Conoce los fundamentos de
la programación orientada a
objetos
3.	Implementa Clases como tipo
de dato abstracto
4.	Conoce la aplicación de los
punteros a direcciones de me-
moria en la construcción de
programas de estructuras de
datos dinámicas
5.	Aplica los algoritmos creación
y manipulación de datos con
los diferentes tipos de listas
enlazadas, colas y pilas en la
construcción de programas
Actividad N° 1
Elaboración de Programas usan-
do registros y clases. Elabora-
ción de informe sobre Aplicacio-
nes de Punteros a Dirección de
Memoria
Actividad N° 2
Elaboración de Programas usan-
do algoritmos para estructuras
de lista simple, doble, circular
Control de Lectura Nº 2
Estructuras de Datos Dinámicas
Lineal
1.	Asume con responsabilidad
sus actividades académicas
asignadas
2.	Realiza con honestidad las eva-
luaciones asignadas
CONTENIDOS
AUTOEVALUACIÓN
LECTURAS
SELECCIONADAS
BIBLIOGRAFÍA
ACTIVIDADES
72ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
TEMA N° 1: REGISTRO (ESTRUCTURA) Y UNIÓN
1 	DEFINICIÓN DE REGISTRO (ESTRUCTURA)
Como Ud. ha podido notar, en los arreglos unidimensionales y bidimensionales, los
valores que se pueden ingresar son del mismo tipo de dato, pero en realidad se ne-
cesitará almacenar mas datos de diferentes tipos de datos, por lo que recurriremos
en esta unidad a otras estructuras que nos lo permitan, como el STRUCT o también
llamado registro que es un tipo definido por el usuario en base a otros tipos de datos.
Ejemplo:
JUAN 19 1.73 `M´
nombre edad talla sexo
(cadena) (int) (float) (char)
Otra forma gráfica, según el tamaño del tipo de dato, ocupado en memoria:
Registro: Persona
Figura Nro 13: Ejemplo de un Registro: Persona.
(Elaboración personal)
Cada componente de la estructura se denomina campo.
Declaración:
Un ejemplo de programa usando a la estructura con nombre de variable, el cual ya
no necesita crear una variable en el Módulo Principal:
UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
73Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
#includeiostream
using namespace std;
struct{
	 int dia;
	 int mes;
	 long int anual;
}hoy;
void main( )
{
coutIngrese dia: t;
cinhoy.dia;
coutIngrese mes: t;
cinhoy.mes;
coutIngrese anno: t;
cinhoy.anual;
couthoy.dia / hoy.mes / hoy.anual;
coutn;
system(PAUSE);
}
Un ejemplo de programa usándolo como nombre de estructura, donde se necesita
de crear una o más variables en el Módulo Principal:
#includeiostream
using namespace std;
struct direccion{
		 char nombre[30];
		 char calle[30];
		 int num;
		 char ciudad[30];
	};
void main( )
{ direccion oficina, casa;
coutDatos Oficina;coutn;
coutIngrese su nombre: t;
cinoficina.nombre;
coutIngrese calle: t;
cinoficina.calle;
coutIngrese num calle: t;
cinoficina.num;
coutIngrese ciudad: t;
cinoficina.ciudad;
coutn;
coutoficina.nombre-oficina.calle-oficina.
num-oficina.ciudad; coutn; coutn;
coutDatos Casa;coutn;
coutIngrese su nombre: t;
cincasa.nombre;
coutIngrese calle: t;
cincasa.calle;
coutIngrese num calle: t;
cincasa.num;
coutIngrese ciudad: t;
cincasa.ciudad;
coutn;
coutcasa.nombre---casa.calle---casa.num---
casa.ciudad;
system(PAUSE);
}
UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
74ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
Es decir, Ud. puede crear estructuras con typedef, de la siguiente manera:
struct domicilio{
	 char nombre[30];
	 char calle[30];
	 int num;
	 char ciudad[20];
	 };
typedef struct domicilio;
void main( )
{
domicilio Oficina, casa;
}
Se puede hacer todo lo anterior de esta forma (de-
finiendo la estructura y creando el tipo a la vez):
typedef struct{
char nombre[25];
char apellidos[50];
char dni[10];
int edad;
}Persona;
void main( )
{ Persona individuo;
}
b.	 Asignación de estructuras
#includeiostream
#includestring
using namespace std;
typedef struct{
char nombre[25];
char apellidos[50];
int edad;
} Persona;
void main( )
{ Persona per1,per2;
strcpy(per1.nombre,Pepe);
strcpy(per1.apellidos,Villegas Varas);
per1.edad=12;
per2=per1; // Asignación de estructuras
coutn ---- Reporte de Datos de Pepe ----n;
coutper1.nombre;coutn;
coutper1.apellidos;coutn;
coutper1.edad;coutn;
coutn ---- Reporte de Datos de Jaime ----n;
coutper2.nombre;coutn;
coutper2.apellidos;coutn;
coutper2.edad;coutn;
}
2 	MÓDULOS Y ESTRUCTURAS
Se pueden usar los módulos de programa para operar los datos de una estructura
o registro. El ejemplo dado a continuación, usa el módulo subirEdad, que recibe
todos los campos de la estructura Persona, en una variable denominada pers.
#includeiostream
#includestring
using namespace std;
typedef struct{
char nombre[25];
UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
75Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
char apellidos[50];
int edad;
} Persona;
void subirEdad(Persona pers)
{	 pers.edad++;
coutpers.edad;coutn;
}
void main()
{ 	 Persona alumno;
strcpy(alumno.nombre,Pepe);
strcpy(alumno.apellidos,Villegas Varas);
alumno.edad=12;
coutn ---- Reporte de Datos de Pepe ----n;
cout alumno.nombre;coutn;
cout alumno.apellidos;coutn;
cout alumno.edad;coutn;
coutn ---- Reporte de Nuevos Datos de Pepe ----n;
cout alumno.nombre;coutn;
cout alumno.apellidos;coutn;
subirEdad(alumno); // Invoca al módulo procedimiento
}
3 	INVOCACIÓN DE UNA ESTRUCTURA EN OTRA
Una estructura puede ser usada dentro de otra estructura, como un tipo de dato de
uno de sus campos. Ejemplo: una estructura para fecha con día, mes y año creada
antes de la estructura persona, la cual se invocará con la variable inscrito y tiene
nombres, apellidos, nacimiento (que es del tipo fecha), y sexo.
#includeiostream
#includestring
#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;
coutnn-----Ingrese datos----- nn;
coutIngrese nombre t;
cininscrito.nombres;
coutIngrese apellidos t;
cininscrito.apellidos;
UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
76ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
coutnn-----Fecha de Nacimiento----- nn;
coutIngrese dia t;
cininscrito.fnacimiento.dia;
coutIngrese mes t;
cininscrito.fnacimiento.mes;
coutIngrese a¤o t;
cininscrito.fnacimiento.anual;
coutIngrese sexo t;
cininscrito.sexo;
	
coutnn----Los Datos ingresados fueron----- nn;
coutinscrito.nombresn;
coutinscrito.apellidosn;
coutinscrito.fnacimiento.dian;
coutinscrito.fnacimiento.mesn;
coutinscrito.fnacimiento.anualn;
coutinscrito.sexonn;
}
4 	DEFINICIÓN DE UNIÓN: EJEMPLO PRÁCTICO.
Son a primera vista, entidades muy similares a las estructuras, están formadas por
un número cualquiera de miembros, al igual que aquellas, pero en éste caso no
existen simultáneamente todos los miembros, y sólo uno de ellos tendrá un valor
válido.
A diferencia de la Estructura, esta es una localidad de memoria que se utiliza para
compartir datos de diferentes tipos.
Ejemplo:
A continuación se muestra un ejemplo práctico, donde se crea la unión denomi-
nada dato, dentro de la estructura tabla, y dependiendo si se selecciona ingresar el
tipo cadena, solo se usa el espacio de la variable char cadena[5] y ya no se necesita
ingresar en la variable int entero, y viceversa. Mientras que en una estructura, se
necesita ingresar datos a todas las variables definidas en ella.
#includeiostream
using namespace std;
struct tabla{
		 char nombre[30];
		 char tipo;
		 union {
			 char cadena[5];
UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
77Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
			 int entero;
		 } dato;
	};
void main()
{	 tabla tb;
	 coutIngrese nombre de tabla: ;
	 cintb.nombre;
	 coutIngrese tipo: ;
	 cintb.tipo;
	 if(tb.tipo == 'c')
	 {	 coutIngrese cadena: ;
		 cintb.dato.cadena;
		 coutLa cadena es: ;
		 couttb.dato.cadena;
		 coutEl entero es: ;
		 couttb.dato.entero;
	}
	else
		 if(tb.tipo == 'e')
		 {	 coutIngrese entero: ;
		 	 cintb.dato.entero;
		 	 coutEl entero es: ;
		 	 couttb.dato.entero;
		 	 coutLa cadena es: ;
		 	 couttb.dato.cadena;
		 }
		 else
		 	 coutERROR.;
}
TEMA N° 2: TIPOS DE DATOS ABSTRACTOS (TDA)
1 	DEFINICIÓN DE TDA
Es un tipo de dato definido por el programador, que consta de datos y operaciones.
Ejemplo: clases, listas, pilas, colas.
TDA = Representación (datos) + Operaciones (funciones y procedimientos)
class alumno
{
private:
string nombre;
string carrera;
public:
alumno();
~alumno();
void ingresar();
void imprimir();
};
alumno
nombre
carrera
ingresar
imprimir
UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
78ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
2 	CLASES Y PROGRAMACIÓN ORIENTADA A OBJETOS
En esta asignatura, no se pretende explicar todo lo que respecta a la programación
orientada a objetos, solo veremos los conceptos y técnicas necesarias que nos ayu-
den y faciliten la creación de algoritmos de estructuras dinámicas, mas adelante.
Esta es una técnica o estilo de programación basada en elementos básicos llamados
objetos y clases y contempla cinco fundamentos: Herencia, Jerarquía, Encapsula-
miento, Polimorfismo y Mensajes.
Objeto: entidad que se caracteriza por determinados atributos: datos miembro y
funciones miembro.
Clase: colección de objetos con atributos y funciones comunes.
OBJETOS CLASE
Figura Nro 14: Ejemplo Objetos y Clase.
(Elaboración personal)
Se puede decir entonces, que el objeto es el valor (instancia) de una clase, y la clase
es un conjunto de objetos que tienen los mismos datos y responsabilidades.
En lenguaje C/C++, una clase se declara:
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 miembros pueden ser definidos como private o public.
•	 private: sólo pueden ser accedidos desde funciones miembro.
•	 public: pueden ser accedidos directamente, sin utilizar funciones miembro.
Usualmente se debe declarar los datos miembro tipo private y las funciones miem-
bro tipo public.
UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
79Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
Para acceder desde fuera del objeto a sus datos públicos y funciones miembro
públicas escribe.
			nombre del objeto . dato miembro
			nombre del objeto . función miembro
Constructor: Un constructor es una función miembro que permite inicializar los
datos miembros de un objeto. Tiene las siguientes características:
- Su nombre es igual al de la clase.
- No devuelve valores.
- Puede haber más de un constructor.
- Se invoca al momento de declarar al objeto.
Destructor: Un destructor es una función que permite liberar el área de memoria
ocupada por un objeto cuando este ya no va ser usado .Sus características son:
- Su nombre es igual al de la clase pero precedido por el símbolo “ ~ ”.
- No devuelve valores.
- Sólo puede haber un destructor.
- Se invoca al momento de salir o abandonar el ámbito donde fue creado el objeto.
A continuación, se muestra un ejemplo de programa, donde se crea la clase alum-
no, con sus datos nombre, carrera y sus responsabilidades ingresar e imprimir; ade-
más de su respectivo constructor y destructor de clase.
#include iostream
#include string
using namespace std;
class alumno
{ private:
string nombre;
string carrera;
public:
alumno(); //constructor de clase
~alumno(); //destructor de clase
void ingresar();
void imprimir();
};
alumno::alumno()
{ nombre= ;
carrera= ;
}
alumno::~alumno()
{
}
void alumno::ingresar()
{ coutIngrese nombre: ;
cinnombre;
coutIngrese carrera: ;
cincarrera;
}
void alumno::imprimir()
{ coutNombre Alumno: ; 	
coutnombren;
coutCarrera: ; 	
UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
80ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
coutcarreran;
}
void main()
{ alumno al;
	
coutIngrese Alumno;coutn;
al.ingresar();coutn;
	
coutMostrar Alumnon; 	
al.imprimir();coutnn;
	
coutEliminar Alumnon; 	
al.~alumno();coutn;
	
coutMostrar Alumnon; 	
al.imprimir();coutn;
system(PAUSE);
}
TEMA N° 3: PUNTERO A DIRECCIÓN DE MEMORIA
1 	DEFINICIÓN DE PUNTERO A DIRECCIÓN DE MEMORIA
Un puntero es un tipo especial de variable, que almacena el valor de una dirección
de memoria, Los punteros, también pertenecen a un tipo, se dice que un puntero
'apunta a' ese tipo al que pertenece.
MEMORIA DEL COMPUTADOR
p es una variable tipo puntero.
x es una variable tipo entero (int), apuntada por p.
Entonces: 23, es el valor entero de la variable x, y 800 es la dirección de memoria de
la variable x, que es almacenada (apuntada) por la variable puntero p.
a. Declaración 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 notación:
*variable tipo puntero
En el ejemplo anterior, *p hace referencia a la variable x, es decir:
UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
81Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
int *p; // p: variable puntero que hace referencia (apunta) a la variable x
int x; // x es la variable entero, apuntado por p (*p es otro nombre para la variable x)
NOTA:
Variables estáticas: Son aquellas que se declaran expresamente en los programas y
a las que el sistema operativo asigna una posición de memoria antes de la ejecución
del mismo.
Variables dinámicas: Son variables que se crean y se destruyen durante la ejecución
del programa. No son declaradas explícitamente en los programas.
Operador de Dirección (): Devuelve la dirección de memoria de una variable. Su
sintaxis es:
 nombre de variable
Operador de Indirección (*): Devuelve el valor almacenado en una variable apun-
tada por una variable puntero.
Su sintaxis es:
* variable puntero
Ejemplo:
#include iostream
using namespace std;
void main ()
{ int x,y; // Variables de tipo entero
int *p; // Puntero a una variable de tipo entero
// Leemos la dirección de la variable x mediante 
// y lo almacenamos en la variable puntero p
p = x; // p contiene la dirección en la que se encuentra x
// Utilizando el operador *, podemos acceder a la información en x.
// *p representa ahora el valor de la variable x
*p = 10; // Ahora x contiene el valor 10
coutx;coutn; // Visualiza si x tiene el valor que recibió su puntero p
cout*p;coutn; // Visualiza el valor de x, apuntada por p
y = 15;
// Si ahora hacemos que el puntero p apunte a la variable y, utilizando el operador 
p = y;
coutyn; //Visualiza el valor de y
// El valor que ahora toma *p será el valor de y,
// ya que es la vaariable que ahora se apunta
*p = 125; // Ahora y contiene el valor 125
x = *p; // Ahora x contiene también 125
coutyn; //visualiza el nuevo valor de y
coutxn; //visualiza el nuevo valor de x
cout*pn; //Visualiza el valor de y
UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
82ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
coutxn; //visulaiza la direccion de memoriade x
coutpn; //visualiza la direccion de memoria de y
}
2 	CREACIÓN Y ELIMINACIÓN DE VARIABLES DINÁMICAS
Creación de variables dinámicas
Para crear variables dinámicas se usa el objeto new cuya sintaxis es la siguiente:
variable de tipo puntero = new tipo de dato de la variable creada ;
Ejemplo:
int *p;
float *q;
p = new int; //crea una variable dinámica de tipo int, p apunta a ella.	
q = new float; // crea una variable dinámica de tipo float, q apunta 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 de asignación
cinp; // ERROR de ingreso
Un ejemplo de creación y asignación, correctas:
int *p, *q;
	 p = new int;
	 q = new int;
	 *p = 8;
	 *q = *p;
-	 No se puede asignar una variable tipo puntero a otra que no sea de su mismo
tipo.
int *p, *q;
float *r;
p = new int;
*p = 7;
r = p; // ERROR de asignación
Eliminación de variables dinámicas
delete variable tipo puntero que apunta a la variable dinámica que será eliminada ;
Se libera el espacio ocupado por la variable dinámica para poder ser utilizado nue-
vamente.
void main()
{	 int *p;
	 p = new int;
	 *p = 17;
	 coutp;
UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
83Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
	 delete p;
	 coutp;
}
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;
	 coutp;
	 delete p;
	 coutp;
	 p = NULL;
	 coutp;
}
Diagrama Objetivos Inicio
Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
ACTIVIDAD N° 1
Esta actividad puede consultarla en su aula virtual.
UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
84ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
TEMA N° 4: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
1 	LISTAS ENLAZADAS: SIMPLE, DOBLE, CIRCULAR
Una lista enlazada es una estructura de datos dinámica formada por un conjunto
de elementos llamados nodos.
Cada nodo consta de dos partes:
- Una que contiene el (los) dato(s).
- Otra que contiene la dirección del siguiente nodo.
Ejemplo de Nodo con un dato:
Los nodos son variables dinámicas que se crean y destruyen de acuerdo a los reque-
rimientos del proceso.
-	 Para acceder a la lista es necesario un puntero que contenga la dirección del
primer nodo.
-	 Si la lista está vacía dicho puntero tendrá el valor NULL.
-	 El último elemento de la lista se reconoce porque su puntero al siguiente tiene
valor NULL.
Representación con Direcciones de Memoria de una Lista Enlazada (usamos direc-
ciones de memoria en hexadecimal, ejemplo: AF01)
Recodando que Lista (más adelante lo llamamos pL, es decir puntero a Lista) tam-
bién es un nodo, pero que sirve para guardar la dirección de memoria del primer
nodo de la lista.
Representación Gráfica de una Lista Enlazada, es decir Lista apunta (tiene la direc-
ción de memoria del primer nodo) al primer nodo con valor 12, y éste apunta al
siguiente nodo con valor 30 y así sucesivamente hasta que el último nodo con valor
54 apunta a NULL porque ya no hay nodos.	
a. Lista Enlazada Simple
Es un conjunto de elementos en los que cada elemento contiene la posición o di-
rección del siguiente campo de la Lista.
Donde cada elemento de la lista simplemente enlazada llamado nodo se define:
struct nodo{
UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
85Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
int n; //puede tener mas campos: string, float, estructura, etc.
nodo *sig; // puntero de dirección al siguiente nodo
};
ListasSE.h
#include iostream
#include string
#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_ buscar_parainsertadespues (int x);
		 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()
UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
86ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
{	 pnodo nuevo; int valor;
	 coutIngrese dato:;
	 cinvalor;
	 nuevo = new nodo;
	 (*nuevo).dato = valor;
	 (*nuevo).sig = pL;
	 pL = nuevo;
}
void lista::insertar_final()
{	 pnodo nuevo,aux; int valor;
	 nuevo = new nodo;
	 coutIngrese dato:;
	 cinvalor;
	 (*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;
	 coutIngrese dato;
	 cin(*nuevo).dato;
	 coutIngrese dato despues del nodo con valor: ; 	
	 cinnum;
	 r=lista::buscar_parainsertadespues (num);
	 if(r==NULL)
	 coutLista vacia o no se encontro;
	 else
	 { temp=(*r).sig;
	 if(temp!=NULL)
			 { (*r).sig=nuevo;
			 (*nuevo).sig=temp;
			 }
	 else
			 { (*nuevo).sig=NULL;
			 (*r).sig=nuevo;
} 	
	 }
}
void lista::buscar()
{	 pnodo pos; int valor, ban=0;
	 coutIngrese dato:;
	 cinvalor;
	 if ( pL == NULL )
UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
87Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
	 {	 coutLISTA VACIA;
		 pos=NULL; }
	 else
	 {	 pos = pL;
		 while ( pos != NULL)		
		 {	 if((*pos).dato != valor)
			 { pos = (*pos).sig;
				 ban=1;
			 }
			 else
			 {	 ban=0;
			 break;
			 }
		 }
		 if(ban==0)
		 {coutENCONTRADO; 	 }
		 else
		 {coutNO ENCONTRADO; }
	 }
}
pnodo lista::buscar_parainsertadespues(int valor)
{	 pnodo pos; int ban=0;
	 if ( pL == NULL )
	 { coutLISTA VACIA;
		 pos=NULL; }
	 else
	 {	 pos = pL;
		 while ( pos != NULL)		
		 {	 if((*pos).dato != valor)
			 { pos = (*pos).sig;
				 ban=1;
			 }
			 else
			 { ban=0;
				 break;
			 }
		 }
		 if(ban==0)
		 {coutENCONTRADO;	 }
		 else
		 {coutNO ENCONTRADO; }
	 }
	 return pos;
}
void lista::eliminar_inicio()
{	 pnodo aux;
	 if(pL==NULL)
{ coutlista vacia; }
	 else
{ aux=pL;
		 if((*pL).sig==NULL) // un nodo
	 { pL=NULL; }
UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
88ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
	 else
	 { pL=(*pL).sig; }
		 coutelemento eliminado(*aux).dato;
	 delete aux;
}
}
void lista::eliminar_final()
{	 pnodo aux=pL,temp;
if(pL==NULL)
{ coutlista vacia; }
	 else
	 { if((*pL).sig==NULL)
			 { pL=NULL; }
		 else
			 { while((*aux).sig!=NULL)
			 	 { temp=aux;
				 aux=(*aux).sig;
			 	 }
			 (*temp).sig=NULL;
			 }
		 coutelemento eliminado(*aux).dato ;
		 delete aux;
	 }
}
void lista::imprimir()
{	 pnodo p;
	 if ( pL == NULL )
		 coutLista vaciaendl;
	 else
	 {	 p = pL;
		 while (p != NULL)
		 {	 cout(*p).dato - ;
			 p = (*p).sig;
		 }
		 coutNULOendl;
	 }
}
ListasSE.cpp
#include iostream.h
#include ListasSE.h
using namespace std;
void main()
{	 lista L; pnodo b; int valor,opc;
do
	 {	 coutnmenu;
	 	 coutn1 insertar al inicio;
	 	 coutn2 insertar al final;
	 	 coutn3 insertar despues del número;
	 	 coutn4 Eliminar al inicio;
	 	 coutn5 Eliminar al final;
	 	 coutn6 Eliminar Lista;
	 	 coutn7 Buscar en lista;
UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
89Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
	 	 coutn8 Visualizar lista;
	 	 coutn9 Salir;
	 	 do
	 	 {	 coutn Seleccione opción;
cinopc;
	 	 } while(opc9);
		 switch(opc)
	 	 { case 1:L.insertar_comienzo();break;
			 case 2:L.insertar_final();break;
			 case 3:L.insertar_despues();break;
			 case 4:L.eliminar_inicio();break;
			 case 5:L.eliminar_final();break;
			 case 6:L.~lista();break;
			 case 7:L.buscar();break;
			 case 8:L.imprimir();break;
	 	 }
} while(opc!=9);
}
b. Lista Enlazada Circular Simple
Es un conjunto de nodos. Cada nodo es un registro que tiene dos campos: Un cam-
po para almacenar información de algún tipo de dato y otro campo tipo puntero
que contiene la dirección del nodo siguiente.
La particularidad que presenta, es que el último nodo de la lista no contiene NULO
en su campo sig sino la dirección del primer nodo, lo que le da la característica
circular a la lista.
Para tener acceso a la lista es necesario un puntero Lc que contenga la dirección
del primer nodo.
c. Lista Enlazada Doble
Ees un conjunto de nodos. Cada nodo es un registro que tiene tres campos: Un
campo para almacenar información de algún tipo de dato y dos campos tipo punte-
ro que contienen las direcciones de los nodos anterior y siguiente respectivamente.
*ant *sigdato
A través de los punteros ant y sig se puede recorrer la Lista en forma bidireccional,
lo cual constituye una ventaja importante frente a una lista enlazada simple que
sólo puede recorrerse en un sentido.
El campo ant del primer nodo tiene valor NULO, pues no existe un nodo anterior
a este, análogamente, el último nodo tiene también en su campo sig el valor NULO
para expresar el hecho de que no existe un siguiente nodo.
UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
90ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
2 	COLAS Y PILAS
a. 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 ele-
mentos se sacan de la cola en el mismo orden en que fueron insertados. La estruc-
tura de los nodos de una cola es la siguiente:
sigdato
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.
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
Cola.h
#include iostream
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;
UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
91Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
while ( p != NULL )
		 { q = (*p).sig;
	 delete p;
	 p = q;
		 }
pL=p;
}
}
void cola::encolar()
{	 pnodo nuevo,aux;
int valor;
nuevo = new nodo;
coutIngrese valor:;
cinvalor;
(*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 cola::desencolar()
{	 pnodo aux;
	 if(pL==NULL)
{ coutcola vacia; }
	 else
	 { aux=pL;
		 if((*pL).sig==NULL) // un nodo
	 { pL=NULL; }
	 else
			 { pL=(*pL).sig; }
		 coutelemento eliminado(*aux).dato; delete aux;
	}
}
void cola::mostrar()
{	 pnodo p;
	 if ( pL == NULL )
		 coutcola vaciaendl;
	 else
	 {	 p = pL;
		 while (p != NULL)
		 {	 cout(*p).dato - ;
			 p = (*p).sig;
		 }
		 coutNULOendl;
	 }
}
UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
92ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
Cola.cpp
#include iostream
#include Cola.h
using namespace std;
void main()
{	 cola C; int opc;
	 do
	 {	 coutnmenu;
	 	 coutn1 encolar;
	 	 coutn2 desencolar;
	 	 coutn3 mostrar;
	 	 coutn4 Salir;
	 	 do
	 	 {	 coutn Seleccione opción; cinopc;
	 	 } while(opc4);
		 switch(opc)
		 {case 1:C.encolar();break;
		 case 2:C.desencolar();break;
		 case 3:C.mostrar();break;
	 }	
	 } while(opc!=4);
}
b. 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:
sigdato
Para especificar una pila es necesario un puntero, que apunte al primer elemento
de la pila, es decir a la cima.
En una pila sólo están 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
#includeiostream
using namespace std;
struct nodo
{	 int dato;
	 nodo *sig;
UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
93Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
};
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;
while ( p != NULL )
		 { q = (*p).sig;
	 delete p;
	 p = q;
		 }
pL=p;
	 }
}
void stack::apilar()
{	 pnodo nuevo,aux;
int valor;
	 nuevo = new nodo;
	 coutIngrese dato:;
	 cinvalor;
	 (*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)
{ coutPila vacia; }
else
	 { if((*pL).sig==NULL)
			 { pL=NULL; }
	 else
UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
94ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
			 { while((*aux).sig!=NULL)
				 { temp=aux;
			 aux=(*aux).sig;
			 }
			 (*temp).sig=NULL;
			 }
	 coutelemento eliminado(*aux).dato;
	 delete aux;
}
}
void stack::mostrar()
{	 pnodo p;
	 if ( pL == NULL )
		 coutPila vaciaendl;
	 else
	 {	 p = pL;
		 while (p != NULL)
		 { cout(*p).dato - ;
			 p = (*p).sig;
		 }
		 coutNULOendl;
	 }
}
Pila.cpp
#include iostream
#include Pila.h
using namespace std;
void main()
{	 stack S; int opc;
	
do
	 {	 coutnmenu;
	 	 coutn1 apilar;
	 	 coutn2 desapilar;
	 	 coutn3 mostrar;
	 	 coutn4 Salir;
	 	 do
	 	 {	 coutn Seleccione opción;
cinopc;
	 	 } while(opc4);
	 	 switch(opc)
		 {case 1:S.apilar();break;
		 case 2:S.desapilar();break;
		 case 3:S.mostrar();break;
		 }	
	 } while(opc!=4);
}
UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
95Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
Diagrama Objetivos Inicio
Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
ACTIVIDAD N° 2
Esta actividad puede consultarla en su aula virtual.
Diagrama Objetivos Inicio
Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
	LECTURA SELECCIONADA N° 1
INTRODUCCIÓN AL ENFOQUE OOP
Rosalía Laza Fidalgo. Baltasar García Pérez-Shofield, 2008,
Metodología y Tecnología de la Programación. Pág. 1
Durante los últimos años, la Programación Orientada a Objetos (Object Oriented Pro-
gramming, u OOP) ha tomado gran importancia. El término OOP indica más de una
forma de diseño y una metodología de desarrollo que un lenguaje de programación,
ya que en realidad se pueden aplicar los principios del paradigma de programación
orientada a objetos (encapsulación, herencia y polimorfismo) en cualquier lenguaje de
programación.
A menudo se confunde la Orientación a Objetos con sistemas de ventanas, íconos y si-
milares, Interfaces Gráficas de Usuario. Esto debido a que se usan técnicas orientadas a
objetos para construir entornos. También es razonable pensar que todo lo programado
por lenguajes orientados a objetos es OOP. Esto no es cierto, ya que incluso en un len-
guaje orientado a objetos puro, es posible que un mal diseño lleve una implementación
que en realidad no siga los principios de Orientación a Objetos mencionados.
DE lo que se trata, en todo caso, es de, dado un problema a automatizar (“resolver”
mediante una aplicación), hacer una aplicación de la mejor manera posible en todos
los aspectos del desarrollo de software.
Los aspectos importantes que determinan el desarrollo de software son:
•	 Portabilidad: El software desarrollado debe funcionar independientemente del hard-
ware y del entorno de funcionamiento o Sistema Operativo sobre el cual se ejecute.
•	 Productividad: Uno de los principales objetivos es simplificar el proceso de desarro-
llo de software, para lo cual es fundamental reutilizar componentes.
•	 Mantenimiento. Constituye una de las etapas más costosas en el desarrollo de soft-
ware que, por tanto, se deberá intentar optimizar todo lo posible. Es fundamental
estructurar bien el programa para prever futuros cambios o modificaciones.
•	 Calidad: A la hora de producir software, no hay que olvidar que se deben de desa-
rrollar productos de calidad, dada a partir de una serie de aspectos como robustez,
fiabilidad, eficiencia, flexibilidad, …
Cualquier metodología de programación debe intentar producir programas portables,
reducir los tiempos de desarrollo y los costes de mantenimiento, así como mejorar la
calidad del producto.
El paradigma de programación clásico, esto es, el estructurado, se basa en tomar un
problema, y subdividirlo sucesivamente en subproblemas, hasta llegar a unos subpro-
UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
96ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
blemas suficientemente sencillos de resolver. Los principales problemas del paradigma
de programación estructurada son:
•	 Creciente complejidad de las aplicaciones: Los requisitos cada vez más ambiciosos de
las aplicaciones reflejan una sofisticación en demanda de software.
•	 Limitaciones en la modelización de problemas no estructurados: Las actuales meto-
dologías estructuradas dificultan la modelización y resolución de problemas comple-
jos no estructurados. Siguiendo una metodología estructurada, los sistemas se des-
componen en una jerarquía de módulos. Estos se diseñan para transformar entradas
y salidas bien definidas.
-	Este enfoque es el más apropiado para su empleo en problemas estructurados en
donde el comportamiento del software se conoce y se puede describir en base al
algoritmo de transformación de datos. El software se estructura según la solución
del problema en vez de enfocarlo directamente según el problema mismo. Esto
puede conducir a un separación conceptual entre el problema del mundo real y su
representación e implementación informática.
•	 Difícil reutilización del software: Es normal que se construyan y reconstruyan una y
otra vez módulos muy parecidos funcionalmente. Esto es debido a que la subdivisión
en subproblemas en la que se basa el paradigma de programación estructurada, no
supone un énfasis en que cada uno de los módulos utilizados en esos problemas sean
reutilizables.
Incluso en la actualidad, muchos de los intentos de crear librerías de componentes
de software utilizables no han tenido mucha implantación debido sobre todo a los
problemas inherentes a su reutilización. Cualquier simplificación del proceso de de-
sarrollo del software para la reutilización de componentes ya implementados.
•	 Mantenimiento difícil y costoso: El mantenimiento de las aplicaciones supone el cos-
te más importante durante el ciclo de vida. Debido a la evolución que sufren todas las
aplicaciones, a menudo se introducen ampliaciones y se desarrollan nuevos entornos
de operación, lo cual argumenta que el mantenimiento sea una actividad esencial.
Como durante el desarrollo de las aplicaciones no se han tenido en cuenta futuros
cambios, es frecuente encontrar programas mal estructurados en lo cuales es difíciles
la incorporación de nuevos módulos o estructuras de datos.
El desarrollo de la OOP empieza a destacar durante la década de los 80, partiendo de la
programación estructurada, a la vez que engloba, y dotando al programador de nuevos
elementos para el análisis y desarrollo de software. Así, las metodologías orientadas a
objetos pueden facilitar la producción de sistemas cada vez más complejos, permiten
modelar problemas no estructurados, incrementan la productividad gracias a la reutili-
zación de objetos y facilitan el mantenimiento.
La orientación a objetos puede describirse como el conjunto de disciplinas que desarro-
llan y modelizan software y que facilitan la construcción de sistemas complejos a partir
de componentes. Su característica más importante, frente a la programación estructu-
rada, es que no trata de hacer más sencillo el problema a resolver (dividiéndolo), sino
que trata de simular el problema a resolver. Así, en todo problema existen una serie
entidades (físicas o no) que interaccionan para resolverlo, de manera que simulando
estas entidades, y su comportamiento, es posible resolver el problema en cuestión. Cada
una de estas entidades es un objeto en el sistema desarrollado mediante OOP, de ahí el
nombre de programación orientada a objetos.
El atractivo de la orientación a objetos es que proporciona conceptos y herramientas
con las cuales se modela y representa el mundo real tan fielmente como sea posible.
La OOP proporciona las siguientes ventajas sobre otros lenguajes de programación:
UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
97Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
•	 Uniformidad: la representación de los objetos lleva implícita tanto el análisis como el
diseño y codificación de los mismos. Así todo el programa está compuesto de objetos
que interaccionan entre sí.
•	 Comprensión: Los programas están escritos mediante definiciones de clases, que
representan las entidades que son necesarias para resolver el problema que se esté
modelando. Los programas son más fáciles de comprender porque las clases mo-
delan los tipos de entidades involucradas en el problema a resolver, simulando ese
problema.
•	 Flexibilidad. Al tener relacionados los procedimientos que manipulan los datos con
los datos a tratar, cualquier cambio que se realice sobre ellos quedará reflejado auto-
máticamente en cualquier lugar donde éstos aparezcan.
•	 Reusabilidad. La noción de objeto permite que programas que traten las mismas es-
tructuras de datos reutilicen las definiciones de clases empeladas en otros programas
e incluso los procedimientos que los manipulan. De forma ideal, el desarrollo de un
programa “nuevo” debería poder llegar a ser una simple combinación de objetos ya
definidos en otros programas que se desarrollaron anteriormente.
La OOP no sustituye a ninguna metodología ni lenguaje de programación anterior,
es un enfoque distinto. Todos los programas que se realizan según los principios de la
OOP se pueden realizar igualmente mediante programación estructurada, aunque de
forma más costosa, puesto que los lenguajes Orientados a Objetos soportan de forma
natural la OOP. A la vez, las limitaciones observadas en el paradigma de programación
estructurada son eliminadas (al menos, parcialmente), ya que un lenguaje Orientado a
Objetos ya fuerza e invita a emplear los principios de la OOP.
Diagrama Objetivos Inicio
Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
GLOSARIO
Dirección de Memoria: es un identificador de una localización (ubicación) de un es-
pacio de memoria del computador, generalmente nombrado por una variable para su
posterior reutilización.
Dato Miembro: es un atributo (información) que se crea en el ámbito de una clase.
Función Miembro: es un método (responsabilidad) que se crea en el ámbito de una
clase.
Programación Orientada a Objetos: es el conjunto de conceptos y técnicas que tiene su
fundamento en el uso de clases y objetos, para escribir programas.
	
Objetivos Inicio
os
Actividades Autoevaluación
s
Glosario Bibliografía
o Anotaciones
BIBLIOGRAFÍA DE LA UNIDAD III:
Joyanes Aguilar, Luis. Fundamentos de Programación. 4ta. ed. España: McGraw-Hill;
2008.
Laza Fidalgo Rosalía. García Pérez-Shofield Baltasar. Metodología y Tecnología de la
Programación. 1raEd. Pearson; 2008.
UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
98ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
Diagrama Objetivos Inicio
Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
	 AUTOEVALUACIÓN DE LA UNIDAD III
INSTRUCCIONES: Lee detenidamente y responde las siguientes preguntas:
1.	 Indique la línea de código que se debe escribir en el recuadro en blanco y que per-
mite utilizar como tipo de dato a la siguiente codificación de una estructura (struct):
struct domicilio{
char nombre[30];
char calle[30];
int num;
char ciudad[20];
};
void main( )
{
domicilio Oficina, casa;
}
a) typedef struct Oficina;
b) typedef casa struct;
c) typedef struct domicilio;
d) typedef domicilio struct casa;
e) typedef struct casa;
2.	 Indique la definición de la estructura de datos UNION
a) Es una estructura de datos secuencial unidimensional con un tamaño Máximo.
b) Es una estructura de datos de diferentes tipos que solo ingresa uno de los espacios
definido.
c) Es una estructura de datos de diferentes tipos que ingresa todos los espacios de-
finidos.
d) Es una estructura de datos secuencial bidimensional con un tamaño Máximo.
e) Es exactamente igual al STRUCT, no se diferencia de ninguna manera.
3.	 Indique las líneas de código que se debe escribir en la casilla (I) y en la casilla (II),
para poder cambiar la edad de una persona según el siguiente programa:
#includeiostream
using namespace std;
typedef struct{
char nombres[25];
int edad;
} Persona;
void cambiarEdad( )
{	ed++;
couted;
}
void main()
{ Persona pers;
coutIngrese nombre;
cinpers.nombres;
coutIngrese nombre;
cinpers.edad;
cout---Cambiar Edad de Persona---;
cambiarEdad( );
}
(II)
(I)
UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
99Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
a) (I) pers (II) Persona p
b) (I) pers (II) int ed
c) (I) pers.edad (II) Persona p
d) (I) pers (II) Persona ed
e)	(I) pers.edad y (II) int ed
4.	 Indique si es Verdadero(V) o Falso(F) cada uno de los siguientes enunciados sobre
el TDA Clase:
-	El constructor se nombra igual que la clase.
-	Puede haber más de un constructor en la clase.
-	El destructor se invoca para eliminar la clase creada.
-	Puede haber más de un destructor en la clase.
a)	VVVV.
b)	FVFV.
c)	FFFV.
d)	VFVF.
e)	VVVF.
5.	 Indique la alternativa con tres de los cinco fundamentos del orientado a objetos:
a)	Herencia, Clase, Objeto.
b)	Polimorfismo, Clase, Jerarquía.
c)	Herencia, Polimorfismo, Encapsulamiento.
d)	Encapsulamiento, Polimorfismo, Objeto.
e)	Mensaje, Jerarquía, Clase.
6.	 Indique la alternativa que corresponde a un adecuado ejemplo de clase con sus
respectivos objetos:
a)	Salón de Clases: carpetas, pizarra.
b)	Universidad: Universidad Nacional, Universidad Particular.
c)	Colegio: CE San José, CE Santa María.
d)	Auto: Auto de Carrera, Auto Particular.
e)	Persona: Persona Natural, Persona Jurídica
7.	 Indique el enunciado que considere correcto para línea 3 y la línea 4 del siguiente
código que declara a dos punteros de dirección de memoria:
int *p;		 //línea 1
float *q; 		//línea 2
p = new int;	//línea 3
q = new float; 	 //línea 4
a)	Línea 3 crea una variable estática de tipo int y hace que p apunte a ella y Línea 4
crea una variable estática de tipo float y hace que q apunte a ella.
b)	Línea 3 crea una variable dinámica de tipo int y hace que q apunte a ella y Línea
4 crea una variable dinámica de tipo float y hace que p apunte a ella.
c)	Línea 3 crea una variable estática de tipo int y hace que q apunte a ella y Línea 4
crea una variable estática de tipo float y hace que p apunte a ella.
d)	Línea 3 crea una variable dinámica de tipo int y hace que p apunte a ella y Línea
4 crea una variable dinámica de tipo float y hace que q apunte a ella.
e)	Línea 3 crea una variable estática de tipo float y hace que p apunte a ella y Línea
4 crea una variable estática de tipo int y hace que q apunte a ella.
UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
100ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
8.	 Indique la alternativa con la adecuada definición de una lista simple enlazada:
a)	Es una estructura de datos estática, lineal y solo se puede ingresar un campo dato.
b)	Es una estructura de datos dinámica, lineal y se puede ingresar más de un campo
dato.
c)	Es una estructura de datos dinámica, no lineal y se puede ingresar más de un
campo dato.
d)	Es una estructura de datos estática, no lineal y solo se puede ingresar un campo dato.
e)	Es una estructura de datos estática, lineal y se puede ingresar más de un campo dato.
9.	 Indique si es Verdadero(V) o Falso(F) cada uno de los siguientes enunciados sobre
las estructuras Cola y Pila:
-	La estructura Pila usa la técnica FIFO.
-	La estructura Pila realiza las inserciones por el extremo final.
-	La estructura Cola realiza las inserciones por el extremo final.
-	La estructura Cola usa la técnica LIFO.
a)	FVVF.
b)	FVFV.
c)	FFFV.
d)	VFVF.
e)	FFVV.
10.	Indique la alternativa que defina las operaciones que se pueden realizar en una lista
simple enlazada:
a)	inserta al inicio y al final, elimina al inicio y al final.
b)	inserta al inicio y en cualquier otra posición, elimina al inicio y al final.
c)	inserta al inicio, en cualquier otra posición y al final, elimina al inicio y al final.
d)	inserta al final, elimina al inicio y al final.
e)	inserta al inicio y al final, elimina al final.
UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
101Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
Diagrama Objetivos Inicio
Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
Diagrama Objetivos Inicio
Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
DIAGRAMA DE PRESENTACIÓN DE LA UNIDAD
ORGANIZACIÓN DE LOS APRENDIZAJES
CONOCIMIENTOS PROCEDIMIENTOS ACTITUDES
Tema Nº 1: Árbol y Grafo
1. Árbol General: Conceptos
básicos y algoritmos de mani-
pulación
2.	Árbol Binario: Recorridos:
PreOrden, InOrden, PostOr-
den
3.	Árboles Binarios de Búsque-
da( ABB )
4. Grafos: Conceptos y algorit-
mos de manipulación
Tema Nº 2: Archivo (Fichero)
1. Archivo: Conceptos y algorit-
mos de manipulación
Lectura Seleccionada N° 1
Operaciones con archivos –
Jesús Carretero Pérez. García
Carballena, Felix. Pérez Lobato
José
Autoevaluación de la Unidad IV
1.	Aplica los algoritmos de crea-
ción y manipulación de datos
de con el uso de árboles en
construcción de programas
2.	Diferencia los algoritmos
creación y manipulación de
datos de con el uso de grafos
en la construcción de progra-
mas
3.	Aplica los algoritmos para ac-
ceso y manipulación de archi-
vos
Actividad N° 1
Comprobación de los algorit-
mos de recorridos de árbol, con
ejercicios propuestos
Actividad N° 2
Comprobación de los progra-
mas de ficheros, presentados en
el autoinstructivo
Tarea Académica Nº 2
Estructuras de Datos Dinámicas
No Lineal
1.	Asume con responsabilidad
sus actividades académicas
asignadas
2.	Realiza con honestidad las eva-
luaciones asignadas
CONTENIDOS
AUTOEVALUACIÓN
LECTURAS
SELECCIONADAS
BIBLIOGRAFÍA
ACTIVIDADES
102ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
TEMA N° 1: ÁRBOL Y GRAFO
1 	ÁRBOL GENERAL: CONCEPTOS BÁSICOS Y ALGORITMOS DE MA-
NIPULACIÓN.
¿Recuerda el concepto de árbol genealógico o árbol familiar? Es decir, ¿Recuerda que existe
un padre inicial y a partir de allí se tiene descendencia en un siguiente nivel, y luego esa des-
cendencia a su vez puede tener descendencia en otro nivel y así sucesivamente? Entonces se
puede decir que conocemos la definición de un árbol.
Un árbol es un conjunto de nodos, en el que existe un nodo distinguido llamado
Raíz y cero o más subárboles, cada uno de los cuales tiene su raíz conectada a la
raíz por medio de una arista.
Conceptos Básicos 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 longitud de camino
desde la raíz 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 número máximo de nodos en una rama. Es decir
nivel más alto de los nodos más uno.
Ejemplo: 	 profundidad = nivel +1
profundidad = 3 +1 = 4
Representación 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.
UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
103Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
Por ejemplo del gráfico anterior, se tiene:
#include iostream
#define MAX 10
using namespace std;
struct nodo
{ int dato;
nodo * hijo;	
nodo * her;
};
typedef nodo *pnodo;
class arbol
{public:
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
UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
104ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
	 { 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;
}
void arbol::mostrar(pnodo aux)
{pnodo aux2,aux3;
//usando recursion para mostrar
if(aux==rpri)
		 {	 coutaux-dato;
			 coutendl|;
			 coutendlvendl;
			 aux2=aux-hijo;
			 arbol::mostrar(aux2);
		 }
else
{	if(aux==NULL)
		 coutNULL;
	else
	 {	 coutaux-dato;
		 cout-;
		 aux2=aux-her;
		 if(aux2!=NULL)
			 arbol::mostrar(aux2);
		 else	
			 arbol::mostrar(aux2);
		 aux3=aux-hijo;
		 coutendl|;
		 coutendlvendl;
		 if(aux3!=NULL)
		 	 arbol::mostrar(aux3);
		 else
		 	 arbol::mostrar(aux3);
	}
}
}
UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
105Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
void arbol::inserta_principal()
{ rpri = new nodo;
coutt Ingresar la raiz: ;
cinrpri-dato;
coutendl;
rpri-hijo=NULL;
}
void arbol::inserta_hijo()
{nodo *hij,*pos=NULL;
int num;
hij=new nodo;
cout-- ***De que nodo desea que sea el hijo: ;
cinnum;
pos=buscar(rpri,pos,num);
if(pos==NULL)
	 coutt--** Arbol vacio o no se encontro nodo **--;
else
{ if(pos-hijo==NULL)
{ coutt Ingrese numero a insertar: ; cinhij-dato;
	pos-hijo=hij;
	hij-her=NULL;
	hij-hijo=NULL;
}
else
	 coutNO SE PUEDE INGRESAR UN HIJO. DEBE INGRESAR COMO
HERMANOendl;
}
}
void arbol::inserta_hermano()
{pnodo herma,pos=NULL;
int num;
herma=new nodo;
coutt De que nodo desea que sea el hermano: endl;
cinnum;
if(num==rpri-dato)
coutNOSEPUEDEINGRESARUNHERMANOALARAIZPRINCIPALendl;
else
{ pos=buscar(rpri,pos,num);
if(pos==NULL)
{ coutt Arbol vacio o no se encontro endl; }
else
{coutt Ingrese nro a insertar: ;
cinherma-dato;
pos-her=herma;
herma-her=NULL;
herma-hijo=NULL;
}
}
}
void main()
{int opc;
UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
106ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
arbol p;
bool band=false;
coutendl;
coutt -----**** MENU ****----- endlendl;
		 coutt Insertar raiz principalendl;
		 p.inserta_principal();
		 band=true;
	 do{ if(band==true)
		 {	 coutt -----**** MENU ****----- endlendl;
			 coutt 1 - insertar hijoendl;
			 coutt 2 - insertar hermanoendl;
			 coutt 3 - Visualizar Arbolendl;
			 coutt 4 - Salirendl;
			 do
			 {	 coutt Seleccione opcion: ;
						 cinopc;
			 }while(opc4);
			 switch(opc)
			 { case 1:p.inserta_hijo();break;
				 case 2:p.inserta_hermano();break;
				 case 3:p.mostrar(p.rpri);break;		 	 	
	 }
		 }
		 else
		 coutDebe insertar la raiz;
} while(opc!=4);
}
2 	ÁRBOL BINARIO: RECORRIDOS: PREORDEN, INORDEN, POSTORDEN
A.	 Árbol Binario
Es un árbol, en el que cada uno de sus nodos puede tener 0, 1 o 2 hijos.
Ejemplo:
UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
107Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
Recorrido de Árboles Binarios
a)	 Recorrido en Orden
	 - Recorrer el subárbol izquierdo en orden
	 - Visitar el nodo raíz
	 - Recorrer el subárbol derecho en orden
b)	 Recorrido en Pre-Orden
	 - Visitar el nodo raíz
	 - Recorrer el subárbol izquierdo en pre-orden
	 - Recorrer el subárbol derecho en pre-orden
c)	 Recorrido en Post-Orden
	 - Recorrer el subárbol izquierdo en post-orden
	 - Recorrer el subárbol derecho en post-orden
	 - Visitar el nodo raíz
B.	 Árbol de Expresión
Es un árbol binario en el que las hojas contienen los operandos y los nodos internos
los operadores de una expresión matemática.
Ejemplo: ( a ^ ( b * c ) ) + ( ( d * e ) – f ) / g )
3 	ÁRBOLES BINARIOS DE BÚSQUEDA ( 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
subárbol izquierdo pero menor a todos los datos de los nodos del subárbol derecho.
Ejemplo:
Para poder tener acceso al árbol
es necesario un puntero que
contenga la dirección de la raíz.
UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
108ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
arbolabb.h
#includeiostream
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;
}
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;
UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
109Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
	 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)
			 coutElemento ya existe;
else
		 { q = praiz;
			 while ( q != NULL )
			 { r = q;
			 	 if ( x  (*q).dato )
		 		 { q = (*q).hizq;
					 h = 'i';
		 		 }
		 		 else
		 		 { q = (*q).hder;
					 h = 'd';
	 		 }
			 }
			 if ( h == 'i' )
				 (*r).hizq = p;
			 else
				 (*r).hder = p;
		 }
	 }
}
void abb::imprimeenorden( pnodoABB p )
{	 pnodoABB Ai,Ad;
if ( p != NULL )
	 {	 Ai = (*p).hizq;
	 Ad = (*p).hder;
	 imprimeenorden(Ai);
	 cout(*p).dato ;
		 imprimeenorden(Ad);
	 }
}
void abb::imprimepreorden( pnodoABB p )
{ 	pnodoABB Ai,Ad;
	 if ( p != NULL )
	 {	 Ai = (*p).hizq;
	 Ad = (*p).hder;
	 cout(*p).dato ;
		imprimepreorden(Ai);
	 imprimepreorden(Ad);
	 }
}
UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
110ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
void abb::imprimepostorden( pnodoABB p )
{ pnodoABB Ai,Ad;
	 if ( p != NULL )
	 {	 Ai = (*p).hizq;
	 Ad = (*p).hder;
		 imprimepostorden(Ai);
	 imprimepostorden(Ad);
		 cout(*p).dato ;
	 }
}
void abb::eliminaarbol( pnodoABB p )
{	 pnodoABB Ai,Ad;
	 if ( p != NULL )
	 {	 Ai = (*p).hizq;
	 Ad = (*p).hder;
		 eliminaarbol(Ai);
	 eliminaarbol(Ad);
		 delete p;
	}
}
ArbolBinario.cpp
#include iostream.h
#include arbolabb.h
using namespace std;
void main()
{	 abb A;
pnodoABB b,r;
	 int i, x, sn, n, cn,opc;
do
	 {	 coutn Menu n;
	 	 coutn1 insertar nodo;
	 	 coutn2 mostrar in orden;
	 	 coutn3 mostrar pre orden;
	 	 coutn4 mostrar post orden;
		 coutn5 Salir;
	 	 do
		 { coutnn Seleccione opcion: ;
cinopc;
		 } while(opc5);
		 switch(opc)
		 { case 1:{	 coutIngrese hoja: ;	
					 cinx;
			 	 A.insertar(x);
					 r = A.getraiz();
				 }break;
			 case 2:A.imprimeenorden(r);break;
			 case 3:A.imprimepreorden(r);;break;
			 case 4:A.imprimepostorden(r);break;
		 }	
	 } while(opc!=5);
}
UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
111Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
4 	GRAFOS: CONCEPTOS Y ALGORITMOS DE MANIPULACIÓN
Imagine que tiene que dirigirse en auto, de su hogar a su centro de trabajo, Ud.
tiene un acostumbrado camino para lograr ese objetivo, pero ocurre un imprevisto
que bloquea el camino y le obliga en ese instante, a decidir optar por otro camino,
UD. evalúa en función al tiempo, la distancia y su apuro en llegar cual camino opta-
rá optimizando sus recursos. A esto se denomina una red o grafo.
Un grafo es un conjunto de objetos llamados vértices o nodos unidos por enlaces
llamados aristas. Las aristas pueden tener dirección (grafo dirigido).
Un camino entre dos vértices es una lista de vértices en la que dos elementos suce-
sivos están conectados por una arista del grafo.
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 sen-
tido hacia A: estos son llamados grafos no dirigidos. Sin embargo, en ocasiones
tenemos que las uniones son unidireccionales y definen un grafo dirigido. Cuando
las aristas llevan un coste asociado (un entero al que se denomina peso) el grafo es
ponderado.
Grafo no dirigido:
Grafo dirigido:
Ejemplo:
A continuación, se muestra el programa desarrollado por un grupo de alumnos,
estudiantes de esta misma asignatura en la modalidad presencial.
Grafo.cpp
#includeiostream
#includestring
#includeprocess.h
#includectype.h
using namespace std;
#define MAX 10
struct nodo
{	 int v;
	 int p;
	 nodo *sgte;
};
int V,A;
nodo *a[MAX],*z;
bool ban=true;
int leedatoO(int a,int b)
{	 int dato;
	 do
	 {	 cout: ;
UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
112ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
		 cindato;
		 if(dato=a||datob)
			 coutErrorn;
	 }while(dato=a||datob);
	 return dato;
}
int leedato(int a,int b)
{	 int dato;
	 do
	 {	 cout: ;
		 cindato;
		 if(datoa||datob)
			 coutErrorn;
	 }while(datoa||datob);
	 return dato;
}
char letra(int n)
{ switch(n+1)
{	 case 1:return 'A';
	 case 2:return 'B';
	 case 3:return 'C';
	 case 4:return 'D';
	 case 5:return 'E';
	 case 6:return 'F';
	 case 7:return 'G';
	 case 8:return 'H';
	 case 9:return 'I';
	 case 10:return 'J';
	 default:return '*';
}
}
int numero(char l)
{ switch(l)
{	 case 'A':return 1;
	 case 'B':return 2;
	 case 'C':return 3;
	 case 'D':return 4;
	 case 'E':return 5;
	 case 'F':return 6;
	 case 'G':return 7;
	 case 'H':return 8;
	 case 'I':return 9;
	 case 'J':return 10;
	 default: return -1;
}
}
int leervertice()
{	 int n; char v1;
	 do
	 {	 cout: ;
		 cinv1;
UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
113Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
		 v1=toupper(v1);
		 n=numero(v1);
		 n- -;
		 if(n=V||a[n]==NULL)
			 coutError! vertice no validon;
	 } while(n=V||a[n]==NULL);
	 return n;
}
void vertices()
{	 int i;
	 coutIngrese numero de Vertices;
	 V=leedatoO(0,MAX);
	 z=new nodo;
	 z-sgte=z;
	 for (i=0; iV; i++)
	 {	 a[i]=z;
		 cout letra(i);
	 }
	 coutn;
	 ban=false;
}
bool pruebaarista(int n1,int n2)
{	 nodo *aux;
	 aux=a[n1];
	 while(aux!=z)
	 {	 if(aux-v==n2)
			 return false;
		 aux=aux-sgte;
	 }
	 return true;
}
nodo *buscararista(int n1,int n2)
{	 nodo *aux,*pos=NULL;
	 bool band=true;
	 aux=a[n1];
	 while(aux!=zband)
	 {	 if(aux-v==n2)
		 {	 pos=aux;
			 band=false;
		 }
		 aux=aux-sgte;
	 }
	 return pos;
}
void insertararista()
{	 int v1,v2,peso; 	 nodo *t;
	 coutVertice 1;
	 v1=leervertice();
	 do
	 {	 coutVertice 2;
		 v2=leervertice();
UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
114ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
		 if(v2==v1)
		 coutError los dos vertices no pueden ser iguales!n;
	 }while(v2==v1);
	 coutIngrese el peso de la arista;
	 peso=leedato(0,1000);
	 if(pruebaarista(v1,v2))
	 {	 t=new nodo;
		 t-v=v2;
		 t-p=peso;
		 t-sgte=a[v1];
		 a[v1]=t;
		 t=new nodo;
		 t-v=v1;
		 t-p=peso;
		 t-sgte=a[v2];
		 a[v2]=t;
		 coutVinculado letra(v1)--letra(v2);
	 }
	 else
	 coutYa estaba vinculado!nVinculoletra(v1)-letra(v2);
	 t=buscararista(v1,v2);
	 cout Peso: t-pn;
}
void eliminarnodo(nodo *w,int n)
{	 nodo *aux;
aux=a[n];
	if(aux-sgte==z)
		 a[n]=z;
	else
	 {	 while(aux-sgte!=w)
			 aux=aux-sgte;
		 aux-sgte=w-sgte;
	}
}
void eliminararista()
{	 int v1,v2; nodo *posb1,*posb2;
	 coutVertice Inicial;
	 v1=leervertice();
	 do
	 {	 coutVertice 2;
		 v2=leervertice();
		 if(v2==v1)
		 coutError los dos vertices no pueden ser iguales!n;
	 }while(v2==v1);
	 posb1=buscararista(v1,v2);
	 posb2=buscararista(v2,v1);
	 if(posb1==NULL)
		 coutNo habia arista!n;
	 else
	 {	 eliminarnodo(posb1,v1);
		 eliminarnodo(posb2,v2);
UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
115Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
		 coutEliminado letra(v1)-letra(v2)n;			
delete posb1;
delete posb2;
	 }
}
void mostrargrafo()
{	 int i,num;
	 bool banari=true,banver=true;
	 nodo *aux;
	 for(i=0;iV;i++)
		 if(a[i]!=z)
			 banari=false;
	 if(banari)
	 {	 for(i=0;iV;i++)
			 coutletra(i)n;
		 coutNo hay aristas disponibles, solo vertices!n;
	 }
	 else
	 {	 for(i=0;iV;i++)
		 {	 if(a[i]!=NULL)
			 { aux=a[i];
				 banver=true;
while(aux!=z)
			 {	 num=aux-v;
					 if(numi)
					 coutletra(i)-aux-p-letra(num)n;
					 aux=aux-sgte;
					 banver=false;
			 }
			 if(banver)
					 coutletra(i)n;
			 }
		 }
	 }
}
void visitar(int k,int val[MAX],int n)
{	 nodo *t;
	 val[k]=1;
	 for (t=a[k];t!=z;t=t-sgte)
		 if (val[t-v]==0)
		 { cout--letra(t-v);
			 visitar(t-v,val,V);
		 }
}
void recorrer()
{	 int k,val[MAX];
	 for (k=0;kV;k++)
		 val[k]=0;
	 k=0;
	 while(kV)
	 {	 if (val[k]==0a[k]!=NULL)
		 {	 coutnletra(k);
UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
116ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
			 visitar(k,val,V);
		 }
		 k++;
	 }coutn;
}
void nuevovertice()
{	 int i,aux,lleno=0;
	 bool banver=true;
	 for(i=0;iV;i++)
	 {	 if(a[i]==NULLbanver)
		 {	 banver=false;
			 aux=i;
		 }
		 if(a[i]!=NULL)
			 lleno++;
	 }
	 if(lleno10)
	 {	 if(banver)
		 {	 a[V]=z;
			 V++;
		 }
		 else
			 a[aux]=z;
		 coutUsted tiene disponible los siguientes vertices:n;
		 for(i=0;iV;i++)
			 if(a[i]!=NULL)
		 cout letra(i);
		coutn;
	 }
	 else
		 coutYa no puede aumentar vertices!n;
}
void eliminarvertice()
{	 int i,ve;
	 bool banver=true;
	 nodo *pos;
	 for(i=0;iV;i++)
		 if(a[i]!=NULL)
			 banver=false;
	 if(banver)
		 coutYa no puede eliminar vertices!n;
	 else
	 {	 coutIndique el vertice a eliminar;
		 ve=leervertice();
		 a[ve]=NULL;
		 for(i=0;iV;i++)
		 {	 if(a[i]!=NULL)
			 { pos=buscararista(i,ve);
				 if(pos!=NULL)
					 eliminarnodo(pos,i);
			 }
UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
117Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
		 }
	 }
	 coutUsted tiene disponible los siguientes vertices:n;
		 for(i=0;iV;i++)
			 if(a[i]!=NULL)
				 cout letra(i);
	 coutn;	
}
void main()
{	 int opc;
	 bool banopc=false;
	 system(color 0c);
	 do
	 {	 if(ban)
		 { coutnÛÛÛÛÛÛÛÛÛ M E N U ÛÛÛÛÛÛÛÛÛ;
	 	 coutn1 Ingresar numero de vertices;
		 coutn7 Salirendl;
		 }
		 else
		 {coutnÛÛÛÛÛÛÛÛÛ M E N U ÛÛÛÛÛÛÛÛÛ;
		 coutn2 Ingresar Arista (Vincular);
		 coutn3 Eliminar Arista;
		 coutn4 Mostrar Grafo;
		 coutn5 Insertar vertice;
		 coutn6 Eliminar vertice;
		 coutn7 Recorrer;
		 coutn8 Salirendl;
		 }
		 do
		 {	 coutSeleccione una opcion :t;
			 cinopc;
			 if(ban)
			 { if(opc!=8opc!=1)
			 {coutOpcion No validan;
					 banopc=true;
			 }
			 else
					 banopc=false;
			 }
			 else
			 {if(opc2||opc8)
			 {	 coutOpcion No validan;
					 banopc=true;
			 }
			 	 else
					 banopc=false;
			 }
		 }
		 while(banopc==true);
		 system(cls);
		 switch(opc)
UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
118ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
		 {	 case 1:vertices();break;
		 case 2:insertararista();break;
		 case 3:eliminararista();break;
		 case 4:mostrargrafo();break;
		 case 5:nuevovertice();break;
		 case 6:eliminarvertice();break;
		 case 7:recorrer();break;
		 }
	 }
	 while(opc!=8);
}
Diagrama Objetivos Inicio
Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
ACTIVIDAD N° 1
Esta actividad puede consultarla en su aula virtual.
UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
119Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
Tema N° 2: ARCHIVO (FICHERO)
1 	ARCHIVO: CONCEPTOS Y ALGORITMOS DE MANIPULACIÓN
Se ha revisado en este manual, estructuras de datos estáticas y dinámicas, que per-
miten sólo el almacenamiento temporal de la información, pero como Ud. mismo
hace uso cotidiano, existen almacenamientos históricos, como los archivos (fiche-
ro) que crea en un computador.
Un archivo o fichero es un conjunto de datos estructurados en una colección de
entidades elementales o básicas denominadas registros, que son de igual tipo y
constan a su vez de diferentes entidades de nivel más bajo denominadas campos.
(Luis Joyanes Aguilar, Fundamentos de Programación)
Es decir, la forma de almacenar nuestros datos en el computador se realiza a través
de archivos que guardan información de diferente tipo, desde una hoja de cálcu-
lo, un procesador de texto, imágenes, sonido, de sistema operativo y tantos como
puedan ser creados; además de que cada uno de ellos se almacenan con diferentes
extensiones como .doc, .xls, .jpg, .mp3, .mp4, entre otros, tal como se puede apre-
ciar en la siguiente figura:
Figura Nro 15: Ejemplo de Archivos en el computador.
(Elaboración personal)
a.	Conceptos.
•	 Campo: es un dato elemental de la realidad como nombre de persona, código de
alumno, precio de producto, nombre de ciudad y todo lo que podamos abstraer.
•	 Registro: es un conjunto de campos que tienen una común información del re-
gistro, otorgándole significado; como por ejemplo el Registro de Alumnos, que
a su vez tiene los campos código, nombre, apellidos.
•	 Archivo: es un conjunto de registros (datos estructurados) que tienen una re-
lación de información entre sí; se da por ejemplo el registro de matrícula de
alumnos al curso Matemática, que tiene un conjunto de registros de alumnos
de dicho curso.
•	 Base de Datos: es un conjunto de archivos, con datos relacionados, por ejemplo
el archivo de registro de matrícula de alumnos al curso de Matemática y el regis-
tro de cursos que se pueden matricular los alumnos en una universidad.
El ejemplo de estos conceptos se representa en la siguiente figura:
UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
120ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
Figura Nro 16: Conceptos de Archivos.
(Elaboración personal)
b.	 Algoritmos de Manipulación.
En lenguaje C/ C++, se usa la librería: #include fstream
Declaración de Variables de tipo Fichero:
ifstream nombrefichero; // Para ficheros de entrada
ofstream nombrefichero; // Para ficheros de salida
- Ficheros de Tipo Texto:
Ejemplo 1: Crear Archivos1.cpp (para crear un fichero llamado “ejemplo.txt”)
UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
121Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
#includeiostream
#include fstream
using namespace std;
void main()
{	 fstream fichero; // Declaracion de la variable fichero
	 char texto[200];
	 fichero.open(ejemplo.txt, ios::in); // Abrir para lectura
	 fichero  texto; 	 // Leer una primera linea
	 while (!fichero.eof()) 	 // Mientras nos sea final de fichero
		 { cout  texto  endl; // Mostrar lo leido
		 fichero  texto; // Volver a leer
		 }
	 fichero.close(); 		 // Cerrar Fichero
	system(pause);
}
Ejemplo 2: Crear Archivos1.cpp (para crear un fichero llamado “ejemplo.txt”)
#includeiostream
#include fstream
using namespace std;
void main()
{	 ofstream fichero(ejemplo.txt); //Fichero de salida
	 fichero  Hola  endl;
	 fichero  Adios  endl;
	fichero.close();
	system(pause);	
}
- Ficheros de Tipo Binario:
Tiene la información tal cual está en memoria, es decir, sin convertirla a texto.
Para leer y escribir en ficheros binarios: read() y write().
in.open(nombre,ios::binary); // Apertura para Lectura
out.open(nombre,ios::binary); // Apertura para Escritura,
in.open(nombre, ios::binary |ios::in | ios:: out); // Apertura
para Lectura y Escritura
Diagrama Objetivos Inicio
Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
ACTIVIDAD N° 2
Esta actividad puede consultarla en su aula virtual.
UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
122ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
Diagrama Objetivos Inicio
Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
	LECTURA SELECCIONADA N° 1
OPERACIONES CON ARCHIVOS
Carretero Pérez. García Carballena, Felix. Pérez Lobato José, 2007, Fundamentos de Programa-
ción. Pág. 236
En la biblioteca stdio.h se define el de datos FILE* para representar un archivo. Este
tipo de datos se conoce como stream. Cuando se crea o se abre un archivo se crea un
stream (flujo) en el que se almacena toda la información que necesitan las funciones de
stio.h para poder operar.
En la siguiente figura se muestran dos situaciones típicas: la escritura de datos en un
archivo y la posterior lectura de los mismos. Para ambas situaciones se muestran los pa-
sos habituales, indicando de forma genérica las operaciones que han de usarse de una
biblioteca de entada/salida (en adelante E/S) y su relación con un stream.
En las siguientes secciones se presentan las ideas asociadas a un stream de E/s, así como
las funciones de la biblioteca stdio.h
Pasos habituales en la escritura y lectura de archivos.
Streams (flujos) de E/S
Como se ha comentado anteriormente, el tipo de datos FILE* permite representar un
archivo, guardándose toda la información necesaria. ¿qué tipo de información se guarda?
Cuando se crea o abre un stream, la biblioteca stdio.h realiza la petición del servicio
correspondiente al sistema operativo. El sistema operativo en respuesta genera un des-
criptor de archivo para poder identificarlo. Parte de la información del stream es des-
criptor asociado al archivo. Este descriptor es transparente, aunque hay una función
para conocerlo (fileno).
… Todo archivo abierto lleva asociado un puntero de posición que indica el lugar don-
de se realizará la siguiente lectura o escritura. Cuando se crea un archivo, el puntero
de la posición es cero (comienzo del archivo). Según se escribe en el archivo, el punto
donde se escribe es el mismo donde terminó la escritura anterior, salvo que se indique
una nueva posición con la función fseek.
Además de todo lo anterior, en el momento de abrir o crear un stream hay que indicar
de qué tipo de archivo se trata. Se definen dos tipos de stream:
•	 De texto: Formados por líneas de caracteres, cada una de las cuales está formada por
cero o más caracteres terminados con un carácter de salto de línea. La última línea
puede no terminar en un salto de línea.
UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
123Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
•	 Binarios: Formados por una secuencia ordenada caracteres, sin separadores especia-
les, que pueden almacenar cualquier tipo de información.
Hay mas información asociada a un stream, como un indicador de error que indica si se
ha producido un error de E/S y un indicador de fin de archivo (EOF, End Of File) que
indica si se ha alcanzado el fin del archivo.
Cuando se inicia un programa se abren, por defecto, tres streams de texto, por lo que
no deben abrirse explícitamente con posterioridad, so pena de obtener un error. Estos
streams son:
•	 Entrada estándar (stdin), que permite leer de la entrada convencional del computa-
dor, suele ser el teclado.
•	 Salida estándar (stdout), que permite escribir en la salida convencional del compu-
tador, suele ser la pantalla.
•	 Salida de error estándar (stderr), que permite escribir en la salida convencional de
error del computador, que suele ser también la pantalla, si bien en algunos casos
existen otros dispositivos, como impresoras, asociados a estas salidas de error.
Estos tres streams son tres variables globales que pueden usarse en cualquier archivo
que incluya directa o indirectamente la biblioteca stdio.h
Diagrama Objetivos Inicio
Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
GLOSARIO DE LA UNIDAD IV
Arista: es la conexión entre nodos ó vértices, y pueden contener información.
Stream: es el flujo de datos desde o hacia un programa.
Vértice: objeto o nodo que contiene información.
Objetivos Inicio
os
Actividades Autoevaluación
s
Glosario Bibliografía
o Anotaciones
BIBLIOGRAFÍA DE LA UNIDAD IV
Carretero Pérez, Jesús. García Carballena, Felix. Pérez Lobato José. Fundamentos de
Programación. 1ra. ed. España: Thomson; 2007.
Joyanes Aguilar, Luis. Fundamentos de Programación. 4ta. ed. España: McGraw-Hill;
2008.
Carrasco Loli Angela. Principios de Programación. Junio 2005
Carretero Pérez, Jesús. García Carballena, Felix. Pérez Lobato José. Fundamentos de
Programación. 1ra. ed. España: Thomson; 2007.
Ceballos Sierra, Francisco. C / C++ curso de programación. 6ta ed. Mexico: AlfaOmega;
2006.
Joyanes Aguilar, Luis. Fundamentos de Programación. 4ta. ed. España: McGraw-Hill;
2008.
UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
124ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
Joyanes Aguilar, Luis. Zahonero Martinez, Ignacio. Programación en C. Metodologías,
Algoritmos y Estructura de Datos. 2da. ed. España: McGraw-Hill; 2005.
Laza Fidalgo Rosalía. García Pérez-Shofield Baltasar. Metodología y Tecnología de la
Programación. 1raEd. Pearson; 2008.
Raffo Lecca, Eduardo. Turbo C++. 1 ed. Lima: Mundigraph; 2000.
Enlaces Web
•	 Baeza Yates, Ricardo. Algoritmia. Dpto. de Cs. de la Computación, Univ. de Chile:
2002. Disponible en www.dcc.uchile.cl/~rbaeza/inf/algoritmia.pdf
•	 C++ con Clase. Disponible en http://c.conclase.net/curso/index.php
•	 Manual de C. Disponible en http://www.programacionutn.com.ar/manuales
•	 Zorrilla Marta. Fundamentos de Programación. Universidad de Zorrilla. Disponible
en http://personales.unican.es/zorrillm/PDFs/Docencia/ProgramacionComputa-
doras/temario/Tema1-presentaci%C3%B3n.pdf
Diagrama Objetivos Inicio
Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
	 AUTOEVALUACIÓN DE LA UNIDAD IV
INSTRUCCIONES: Lee detenidamente y responde las siguientes preguntas:
1. Indique la alternativa que contenga la definición de: Hoja y de Camino en un Árbol
General:
a) La hoja es el nodo que tiene otras ramificaciones de nodos y el Camino es la
cantidad de aristas entre dos nodos.
b)	 La hoja es el nodo que tiene otros caminos de nodos y el Camino es la cantidad
de vértices entre dos nodos.
c)	 La hoja es el nodo que no tiene polimorfismo de nodos y el Camino es la canti-
dad de hojas entre dos nodos.
d)	 La hoja es el nodo que tiene otros caminos de nodos y el Camino es la cantidad
de polimorfismo entre dos nodos.
e)	 La hoja es el nodo que no tiene otras ramificaciones de nodos y el Camino es la
cantidad de aristas entre dos nodos.
2.	 Dado el siguiente árbol general, indique la alternativa que corresponda a los valores
de los conceptos de árbol: Nivel, Hojas, Camino(B-R).
UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
125Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
a)	 Nivel=4; Hojas=E,J,K,R,M,N,S,H,P; Camino (B-R)=A-B-F-L-R.
b)	 Nivel=4; Hojas=E,J,K,R,M,N,S,H,P; Camino (B-R)=B-F-L-R.
c)	 Nivel=5; Hojas=E,J,K,R,M,N,S,H,P; Camino (B-R)=B-F-L-R.
d)	 Nivel=5; Hojas=R,S; Camino (B-R)=B-F-L-R.
e)	 Nivel=4; Hojas=E,R,S,P; Camino (B-R)=A-B-F-L-R.
3.	 Indique la alternativa que contenga el orden de recorrido de un Arbol Binario de
Búsqueda:
a)	 Pre Orden(SAIzquierdo, SADerecho, Raíz), InOrden(SAIzquierdo, Raíz, SADe-
recho), PostOrden (Raíz , SAIzquierdo, SADerecho)
b)	 Pre Orden(Raíz, SAIzquierdo, SADerecho), InOrden(SAIzquierdo, Raíz, SADe-
recho), PostOrden (Raíz , SAIzquierdo, SADerecho)
c)	 Pre Orden(SAIzquierdo, Raíz, SADerecho), InOrden(SAIzquierdo, Raíz, SADe-
recho), PostOrden (, Raíz, SAIzquierdo, SADerecho)
d)	 Pre Orden(Raíz, SAIzquierdo, SADerecho), InOrden(SAIzquierdo, Raíz, SADe-
recho), PostOrden (SAIzquierdo, SADerecho, Raíz)
e)	 Pre Orden(SAIzquierdo, Raíz, SADerecho), InOrden(Raíz, SAIzquierdo, SADe-
recho), PostOrden (SAIzquierdo, SADerecho, Raíz)
4.	 Indique la alternativa que diferencie a un Árbol General (1) de un Árbol Binario (2):
a)	 (1) sólo tiene de 0 hasta 2 hijos, y (2) puede tener más de 2 hijos.
b)	 (1) puede tener más de 2 hijos, y (2) sólo tiene de 0 hasta 2 hijos.
c)	 (1) sólo tiene de 0 hasta 1 hijo, y (2) puede tener hasta 4 hijos.
d)	 (1) sólo tiene 1 hijo, y (2) sólo tiene de 0 hasta 2 hijos.
e)	 (1) puede tener más de 2 hijos y (2) sólo tiene 2 hijos.
5.	 Dado el siguiente Árbol Binario de Búsqueda, seleccione la alternativa con la rela-
ción adecuada:
I. Los valores del árbol son ade-
cuados.
II. Los valores del árbol son in-
adecuados.
a) El recorrido en PreOrden es:
37,24,16,31,33,74,52,86,68
b) Se invalida todo resultado de recorrido.
a)	I,a.
b)	II,c.
c)	I,c.
UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
126ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
d)	II,b
e)	I,b.
6.	 Indique si es Verdadero(V) o Falso(F) cada uno de los siguientes enunciados
sobre grafo:
-	El grafo es una estructura de datos no lineal.
-	El grafo puede ser binario y tener recorrido pre orden.
-	El grafo tiene vértices y aristas.
a)	FFF.
b)	FVF.
c)	VVF.
d)	VFV.
e)	FFV.
7.	 Indique la alternativa que sugiera la estructura de datos que permita representar
la red de transporte público de sus ciudad:
a)	 Lista Doble
b)	Árbol
c)	Grafo
d)	Cola
e)	 Lista Circular
8.	 En una arista de un grafo de red de transporte público, se puede considerar los
siguientes valores de información:
a)	 Sólo tiempo.
b)	 Tiempo y distancia.
c)	 Sólo distancia.
d)	 Tiempo, distancia y costo.
e)	 Sólo costo.
9.	 Indique la alternativa que contenga las dos librerías de fstream para crear Archivos:
a)	 ifstream, ofstream
b)	 ifstream, ostream
c)	 istream, ofstream
d)	 istream, ostream
e)	 fstream, iostream
10.	La diferencia entre un archivo de texto (1) y un archivo binario (2) es:
a)	 (1) son líneas de caracteres, guardan cualquier tipo de información, y (2) son
secuencia de caracteres que terminan en salto de línea.
b)	 (1) son líneas de caracteres, terminados en un salto de línea, y (2) son secuencia
de caracteres que terminan en salto de línea.
c)	 (1) son líneas de caracteres, guardan cualquier tipo de información, y (2) son
secuencia de caracteres sin separadores especiales.
d)	 (1) son líneas de caracteres, sin separadores especiales, y (2) son secuencia de
caracteres que guardan cualquier tipo de información.
e)	 (1) son líneas de caracteres, terminados en un salto de línea, y (2) son secuencia
de caracteres sin separadores especiales.
•	
UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
127Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
ANEXO
CLAVES DE RESPUESTAS AUTOEVALUACIÓN DE LA UNIDAD I
CLAVES DE RESPUESTAS AUTOEVALUACIÓN DE LA UNIDAD II
CLAVES DE RESPUESTAS AUTOEVALUACIÓN DE LA UNIDAD III
CLAVES DE RESPUESTAS AUTOEVALUACIÓN DE LA UNIDAD IV
1. C 6. C
2. A 7. D
3. D 8. C
4. B 9. B
5. E 10. C
1. E 6. D
2. B 7. C
3. D 8. D
4. B 9. A
5. D 10. E
1. C 6. C
2. B 7. D
3. E 8. B
4. E 9. A
5. C 10. C
1. D 6. E
2. C 7. B
3. B 8. E
4. D 9. B
5. A 10. B
ANEXO
128

Más contenido relacionado

PDF
Historia de la topografia
DOCX
PDF
107. GUÍA PARA LEVANTAMIENTOS TOPOGRÁFICOS.pdf
PPT
Altimetria
PDF
4 nuevo marco geodésico sncp
PDF
Generalidades de la topografía
DOCX
Topografía - Medición de distancias
PPS
Coordenadas Utm
Historia de la topografia
107. GUÍA PARA LEVANTAMIENTOS TOPOGRÁFICOS.pdf
Altimetria
4 nuevo marco geodésico sncp
Generalidades de la topografía
Topografía - Medición de distancias
Coordenadas Utm

La actualidad más candente (20)

PPTX
Presentacion ensayo para suelos
DOCX
informe de nivelacion topografica con nivel de ingeniero
PPTX
Topografia aplicada a la construcción
PDF
C07 nivelacion y corrección por curvatura y refraccion
PDF
Manual del teodolito espanish
PPTX
civil 3d basico.pptx
DOCX
DOCX
Informe 02 nivelacion y teodolito
PDF
Altimetria
PDF
Sistema pararrayos, (ICA-Procobre, Jun 2016)
DOCX
Fundamentos de programación librería string C++
DOCX
Levantamineto topográfico con teodolito
PDF
Informe de granulometria pdf
PPT
OPERACIONES CON MATRICES, INTERPOLACIONES, AJUSTE DE CURVAS, POLINOMIOS
PDF
Examen parcial I suelos.pdf
PDF
Cap9 curvas-nivel
ODP
Trabajando con curvas de nivel
PDF
Altimetria topo ii
PDF
Ejercicio no. 8 aeropuerto
PDF
Simbolos topograficos
Presentacion ensayo para suelos
informe de nivelacion topografica con nivel de ingeniero
Topografia aplicada a la construcción
C07 nivelacion y corrección por curvatura y refraccion
Manual del teodolito espanish
civil 3d basico.pptx
Informe 02 nivelacion y teodolito
Altimetria
Sistema pararrayos, (ICA-Procobre, Jun 2016)
Fundamentos de programación librería string C++
Levantamineto topográfico con teodolito
Informe de granulometria pdf
OPERACIONES CON MATRICES, INTERPOLACIONES, AJUSTE DE CURVAS, POLINOMIOS
Examen parcial I suelos.pdf
Cap9 curvas-nivel
Trabajando con curvas de nivel
Altimetria topo ii
Ejercicio no. 8 aeropuerto
Simbolos topograficos
Publicidad

Similar a Algoritmia y Estructura de Datos (20)

PDF
ALGORITMOSAlgoritmo yy estructura de datos
DOC
Estructura datos ucc_jairo
PPTX
Estructura de datos presentacion y sesion 1
PPTX
Estructura de datos - presentacion y sesion 1
PDF
estructuradedatospresentacion-130513115330-phpapp02 (1).pdf
DOCX
Estructura de datos
PDF
Syllabus
PDF
Sorribas
PDF
Estructura Datos
PDF
Programación del curso - Estructura de Datos I
PPTX
Rc doris gonzalez
DOC
Algoritmos y estructura de datos 1
PDF
G18301.1
PDF
Algoritmos y estructuras de datos en Python - digital.pdf
PDF
Guia programacion ii segundo semestre 2011 unipamplona
PPTX
Rc alfredo rodriguez_pptx
PPTX
Rc alfredo rodriguez_pptx
PPTX
introduccion a la prgramacion
PDF
Edp 2013-contenidos -programacion-2013
DOCX
Trabajo final programacion
ALGORITMOSAlgoritmo yy estructura de datos
Estructura datos ucc_jairo
Estructura de datos presentacion y sesion 1
Estructura de datos - presentacion y sesion 1
estructuradedatospresentacion-130513115330-phpapp02 (1).pdf
Estructura de datos
Syllabus
Sorribas
Estructura Datos
Programación del curso - Estructura de Datos I
Rc doris gonzalez
Algoritmos y estructura de datos 1
G18301.1
Algoritmos y estructuras de datos en Python - digital.pdf
Guia programacion ii segundo semestre 2011 unipamplona
Rc alfredo rodriguez_pptx
Rc alfredo rodriguez_pptx
introduccion a la prgramacion
Edp 2013-contenidos -programacion-2013
Trabajo final programacion
Publicidad

Último (20)

PPTX
Software para la educación instituciones superiores
PPTX
376060032-Diapositivas-de-Ingenieria-ESTRUCTURAL.pptx
PDF
SISTEMAS DE PUESTA A TIERRA: Una introducción a los fundamentos de los sistem...
PPTX
A8B08CED-D3D9-415C-B4A3-2A6CA6409A48.1.1Presentación Dirección 2022 unidade...
PPTX
TOPOGRAFÍA - INGENIERÍA CIVIL - PRESENTACIÓN
PDF
LIBRO UNIVERSITARIO DESARROLLO ORGANIZACIONAL BN.pdf
PDF
Clase 2 de abril Educacion adistancia.pdf
PDF
Informe Comision Investigadora Final distribución electrica años 2024 y 2025
PDF
UD3 -Producción, distribución del aire MA.pdf
PDF
ntc5951 Metodo de ensayo para determinar las propiedades de tension en plasti...
PPTX
leyes de los gases Ideales. combustible refinación
PPTX
PRESENTACION DIAPOSITIVA PARA UN PROYECTO .pptx
PPTX
Presentacion ppt rx en soldadura tp 231 vladimir Osuna 7114958 20241.pptx
PPTX
DEBL Presentación PG 23.pptx [Autoguardado].pptx
PDF
FUNCION CUADRATICA FUNCIONES RAIZ CUADRADA
PPT
357161027-seguridad-industrial-diapositivas-ppt.ppt
PPTX
Manual ISO9001_2015_IATF_16949_2016.pptx
DOCX
Cumplimiento normativo y realidad laboral
PDF
Matriz_Seguimiento_Estu_Consult_2024_ACT.pdf
PDF
S15 Protección de redes electricas 2025-1_removed.pdf
Software para la educación instituciones superiores
376060032-Diapositivas-de-Ingenieria-ESTRUCTURAL.pptx
SISTEMAS DE PUESTA A TIERRA: Una introducción a los fundamentos de los sistem...
A8B08CED-D3D9-415C-B4A3-2A6CA6409A48.1.1Presentación Dirección 2022 unidade...
TOPOGRAFÍA - INGENIERÍA CIVIL - PRESENTACIÓN
LIBRO UNIVERSITARIO DESARROLLO ORGANIZACIONAL BN.pdf
Clase 2 de abril Educacion adistancia.pdf
Informe Comision Investigadora Final distribución electrica años 2024 y 2025
UD3 -Producción, distribución del aire MA.pdf
ntc5951 Metodo de ensayo para determinar las propiedades de tension en plasti...
leyes de los gases Ideales. combustible refinación
PRESENTACION DIAPOSITIVA PARA UN PROYECTO .pptx
Presentacion ppt rx en soldadura tp 231 vladimir Osuna 7114958 20241.pptx
DEBL Presentación PG 23.pptx [Autoguardado].pptx
FUNCION CUADRATICA FUNCIONES RAIZ CUADRADA
357161027-seguridad-industrial-diapositivas-ppt.ppt
Manual ISO9001_2015_IATF_16949_2016.pptx
Cumplimiento normativo y realidad laboral
Matriz_Seguimiento_Estu_Consult_2024_ACT.pdf
S15 Protección de redes electricas 2025-1_removed.pdf

Algoritmia y Estructura de Datos

  • 1. Carol Roxana Rojas Moreno ALGORÍTMIA Y ESTRUCTURA DE DATOS
  • 2. Cada autor es responsable del contenido de su propio texto. De esta edición: © Universidad Continental S.A.C 2012 Jr. Junin 355, Miraflores, Lima-18 Teléfono: 213 2760 Derechos reservados Primera Edición: Noviembre 2013 Tiraje: 500 ejemplares Autor: Carol Roxana Rojas Moreno Oficina de Producción de Contenidos y Recursos Impreso en el Perú - Rebelars S.A.C Jr. Los Bosques 555 - El Tambo - Huancayo Fondo Editorial de la Universidad Continental Todos los derechos reservados. Esta publicación no puede ser reproducida, en todo ni en parte, ni registrada en o trasmitida por un sistema de recuperación de información, en ninguna forma ni por ningún medio sea mecánico, fotoquímico, electrónico, magnético, electroóptico, por fotocopia, o cualquier otro sin el permiso previo por escrito de la Universidad.
  • 3. INTRODUCCIÓN 9 DIAGRAMA DE PRESENTACIÓN DE LA ASIGNATURA 11 UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA 13 DIAGRAMA DE PRESENTACIÓN DE LA UNIDAD i Tema N° 1: Algoritmo 1 Definición del algoritmo 14 2 Características de un algoritmo 17 3 Instrucciones algorítmicas básicas 17 4 Representación del algoritmo 18 Tema N° 2: Programación Estructurada 1 Programa 26 2 Lenguaje de programación 27 3 Programas traductores 28 4 Definición programación estructurada 29 Tema N° 3: Sentencias Básicas de Programación 1 Estructura básica secuencial 31 2 Estructura básica selectiva 31 3 Estructura básica repetitiva 32 ACTIVIDAD N°1 34 Tema N° 4: Modularización de Programas 1 Definición de módulos de programa 34 2 Paso de Parámetros 34 3 Procedimientos 35 4 Funciones 36 5 Librerías de programación creadas por el usuario 40 Tema N° 5: Funciones Recursivas 1 Definición de recursividad 42 2 Recursividad de factorial 43 3 Recursividad de la multiplicación 43 4 Recursividad de torres de hanoi 43 ACTIVIDAD N°2 44 Lectura seleccionada N°1 45 GLOSARIO de la unidad i 46
  • 4. BIBLIOGRAFÍA DE LA UNIDAD I 47 Autoevaluación DE LA UNIDAD i 47 UNIDAD II: ESTRUCTURA DE DATOS ESTÁTICAS 51 DIAGRAMA DE PRESENTACIÓN DE LA UNIDAD ii TEMA 1: Estructuras de Datos 1 Definición de estructura de datos 52 2 Clasificación de estructura de datos 52 Tema N° 2: Arreglos Unidimensionales 1 Definición de arreglos unidimensionales 53 2 Algoritmos de actualización 54 3 Búsqueda de arreglos unidimensionales 57 4 Ordenación de arreglos unidimensionales 59 ACTIVIDAD N°1 60 Tema N° 3: Arreglos Bidimensionales 1 Definición de arreglos bidimensionales 61 2 Algoritmos de actualización de arreglos bidimensionales 63 ACTIVIDAD N°2 65 Lectura seleccionada n° 1 65 GLOSARIO de la unidad ii 67 Bibliografía de la unidad ii 67 Autoevaluación de la unidad ii 67 UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICA LINEAL 71 DIAGRAMA DE PRESENTACIÓN DE LA UNIDAD iii Tema N° 1: Registro (Estructura) y Unión 1 Definición de registro (estructura) 72 2 Módulos y estructuras 74 3 Invocación de una estructura en otra 75 4 Definición de unión: ejemplo práctico 76 Tema N° 2: Tipos de Datos Abstractos (TDA) 1 Definición de TDA 77 2 Clases y programación orientada a objetos 78
  • 5. Tema N° 3: Puntero a Dirección de Memoria 1 Definición de puntero a dirección de memoria 80 2 Creación y eliminación de variables dinámicas 82 ACTIVIDAD N°1 83 Tema N° 4: Estructuras de Datos Dinámicas Lineal 1 Listas enlazadas: simple, doble, circular 84 2 Colas y pilas 90 ACTIVIDAD N°2 95 Lecturas seleccionada n° 1 95 GLOSARIO de la unidad iii 97 Bibliografía de la unidad iii 97 Autoevaluación de la unidad iii 97 UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICA NO LINEAL 101 DIAGRAMA DE PRESENTACIÓN DE LA UNIDAD iv Tema N° 1: Árbol y Grafo 1 Árbol General: Conceptos básicos y algoritmos de manipulación 102 2 Árbol binario: recorridos: preorden, inorden, postorden 106 3 Árboles binarios de búsqueda ( abb ) 107 4 Grafos: Conceptos y algoritmos de manipulación 111 ACTIVIDAD N°1 118 Tema N° 2: Archivo (Fichero) 1 Archivo: conceptos y algoritmos de manipulación 119 ACTIVIDAD N°2 121 Lecturas seleccionada n° 1 122 GLOSARIO de la unidad iv 123 Bibliografía Y DIRECCIONES ELECTRÓNICAS 123 Autoevaluación de la unidad iv 124 ANEXO Clave de respuesta de Autoevaluaciones 127
  • 7. INTRODUCCIÓN A lgoritmia y Estructura de Datos es una asignatura que se desarrolla con una modalidad de educación virtual, y el presente manual autoformativo es su material di- dáctico más importante. Esta asignatura tiene como finalidad proporcionar al estudian- te, los conocimientos necesarios en las técnicas y estructuras de datos para iniciarse en la programación asistida por un compu- tador y basado en el enfoque estructurado, requeridos en su formación básica para poder desarrollar programas en otros niveles más avanzados. La competencia a desarrollar es: Construye algoritmos en un lenguaje de programación, utilizando las sentencias básicas de programación, diferenciando su uso para la propuesta de solu- ción de un problema, y con ello construye programas computa- cionales utilizando módulos de programa (funciones y procedi- mientos), valorando la reutilización de los módulo, y utilizando las diferentes estructuras de datos: estáticas y dinámicas para almacenar datos temporalmente, diferenciando el uso de las estructuras con respecto al uso de los archivos como almacena- miento de datos permanente, promoviendo el interés por otras técnicas de almacenamiento. El presente material consta de cuatro unidades: Unidad I: Algo- ritmos y Programación Estructurada, que presenta conceptos, representaciones y programación del algoritmo, con sus técni- cas: Sentencias Básicas de Programación: Secuenciales, Selecti- vas y Repetitivas y la Modularización en la Programación Estruc- turada, es decir, se puede dividir a un programa complejo, en segmentos de programa mas simples (Modularización), y poder ser reutilizados en otros programas, a través del uso de funcio- nes y procedimientos, y en algunos casos usando el concepto de recursividad. Unidad II: Estructuras de Datos Estáticas, pre- sentando los algoritmos de creación y actualización de Arreglos Unidimensionales y Bidimensionales, Unidad III: Estructuras de Datos Dinámica Lineal, donde se expone las formas de alma- cenamiento temporal de datos a través estructuras listas, pilas, cola. Unidad IV: Estructuras de Datos Dinámica No Lineal, en esta última unidad, se exponen otras formas de almacenamien- to de datos como árboles, grafos, archivos. Para el estudio del manual y la ejecución de las actividades, se recomienda para cada unidad: • Realizar el estudio de los contenidos. Esta lectura será ana- lítica y reflexiva subrayando, resumiendo y asimilando la in- formación. • Pasar al estudio de las lecturas seleccionadas, que son de estudio de profundización o ampliación. • Desarrollar las actividades programadas para cada semana en el aula virtual y asistidas por un lenguaje de programa- ción, con la asesoría del Profesor Tutor. • Desarrollar la auto evaluación, que es una preparación para la prueba final de la asignatura. .
  • 8. 8
  • 9. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 9Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones COMPETENCIA DE LA ASIGNATURA Construye algoritmos en un lenguaje de programación, utilizando las sentencias bá- sicas de programación, diferenciando su uso para la propuesta de solución de un problema, y con ello construye programas computacionales utilizando módulos de programa (funciones y procedimientos), valorando la reutilización de los módulo, y utilizando las diferentes estructuras de datos: estáticas y dinámicas para almacenar datos temporalmente, diferenciando el uso de las estructuras con respecto al uso de los archivos como almacenamiento de datos permanente, promoviendo el interés por otras técnicas de almacenamiento. UNIDADES DIDÁCTICAS UNIDAD I UNIDAD II UNIDAD III UNIDAD IV “Algoritmos y Pro- gramación Estruc- turada” “Estructuras de Datos Estáticas” “Estructuras de Datos Dinámica Lineal” “Estructuras de Datos Dinámica No Lineal” TIEMPO MÍNIMO DE ESTUDIO UNIDAD I UNIDAD II UNIDAD III UNIDAD IV 1ª y 2ª semana 16 horas 3ª y 4ª semana 16 horas 5ª y 6ª semana 16 horas 7ª y 8ª semana 16 horas Diagrama Objetivos Inicio Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones PRESENTACIÓN DE LA ASIGNATURA
  • 10. 10
  • 11. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 11Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones Diagrama Objetivos Inicio Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA Diagrama Objetivos Inicio Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones DIAGRAMA DE PRESENTACIÓN DE LA UNIDAD ORGANIZACIÒN DE LOS APRENDIZAJES CONOCIMIENTOS PROCEDIMIENTOS ACTITUDES Tema N° 1: Algoritmo 1. Definición del Algoritmo 2. Características de un algoritmo 3. Instrucciones Algorítmicas Básicas 4. Representación del Algoritmo Tema N° 2: Programación Es- tructurada 1. Programa 2. Lenguaje de Programación 3. Programas Traductores 4. Definición Programación Es- tructurada Tema Nº 3: Sentencias Básicas de Programación 1. Estructura Básica Simple o Secuencial 2. Estructura Básica Selectiva 3. Estructura Básica Repetitiva Tema Nº 4: Modularización de Programas 1. Definición de Módulos de Programa 2. Paso de Parámetros 3. Procedimientos 4. Funciones 5. Librerías de Programación creadas por el usuario Lectura seleccionada N° 1 Introducción a los Subalgorit- mos o Subprogramas – Luis Jo- yanes Aguilar Tema Nº 5: Funciones Recursi- vas 1. Definición de Recursividad 2. Recursividad del Factorial 3. Recursividad de la Multipli- cación 4. Recursividad de Torres de Hanoi Autoevaluación de la Unidad I 1. Analiza diferentes situacio- nes problema para proponer un algoritmo computacional como solución 2. Aplica el flujo de trabajo de la sentencia de programación secuencial 3. Aplica las sentencias de pro- gramación selectiva en la construcción de un algoritmo como solución de un proble- ma 4. Aplica las sentencias de pro- gramación repetitiva en la construcción de un algoritmo como solución de un proble- ma 5. Aplica los conceptos de la modularización a través de las Funciones, Procedimientos 6. Construye Librerías de Pro- gramación, para la reutiliza- ción de módulos en los pro- gramas 7. Aplica algoritmos recursivos en la construcción de progra- mas Actividad N° 1 Elaboración de Algoritmos y programas usando las senten- cias básicas de programación Actividad N° 2 Elaboración de programas usando módulos y librerías de programas, y elaboración de algoritmos recursivos Control de Lectura Nº 1 Sentencias de Programación en los Algoritmos y Módulos de Programa 1. Asume con responsabilidad sus actividades académicas asignadas 2. Realiza con honestidad las eva- luaciones asignadas CONTENIDOS AUTOEVALUACIÓN LECTURAS SELECCIONADAS BIBLIOGRAFÍA ACTIVIDADES
  • 12. 12ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones TEMA N° 1: ALGORITMO 1 DEFINICIÓN DE ALGORITMO ¿En su quehacer diario, realiza sus actividades generalmente en un orden, organizado, finali- za y realiza otro conjunto de actividades de similar manera? Entonces quiere decir que está realizando un algoritmo, y en este caso, al desarro- llarlo sin ayuda de un computador, se trata de un algoritmo no computacional. La definición de “Algoritmo” es precisamente como Ud. pensó que desarrolla sus actividades diarias, es decir: “Un algoritmo es un conjunto ordenado y finito de actividades, que generalmente, conducen a la solución de un problema”. La palabra algoritmo se deriva de la traducción al latín del nombre árabe Al-Khuwarizmi, matemático y astrónomo árabe que escribió un tratado sobre manipulación de números y ecuaciones en el siglo IX. (Angela Carrasco Loli. Principios de Programación) Tenemos algunos ejemplos de algoritmo: - Al instalar un equipo de sonido, ejecutamos las instrucciones (algoritmo) conteni- das en el manual del equipo. - El algoritmo matemático de Euclides para la obtención del máximo común divi- sor de dos números. Algunos algoritmos pueden ser ejecutados con ayuda de una computadora, a esto le llamamos algoritmo computacional, donde las actividades desarrolladas se llaman instrucciones y se expresan en un lenguaje de programación. (Términos que se explican mas adelante). Todo algoritmo puede ser descompuesto en tres partes, como se muestra en la siguiente figura: E: Entrada de datos. P: Proceso. S: Salida de resultados. Figura Nro 1: Partes de un algoritmo 2 CARACTERÍSTICAS DE UN ALGORITMO • Un algoritmo debe ser preciso e indicar el orden de realización de cada paso. • Un algoritmo debe ser definido. El algoritmo dos veces, se debe obtener el mismo resultado cada vez. • Un algoritmo debe ser finito: Si se sigue use debe terminar en algún mo- mento, o sea, debe tener un número finito de pasos. (Luis Joyanes Aguilar. Fundamentos de Programación.) Para que pueda escribir las instrucciones algorítmicas, necesita conocer lo que es una Variable: Es una localización o casillero en la memoria principal que almacena un valor que puede cambiar en el transcurso de la ejecución 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. UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 13. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 13Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones Ejemplo 1: Entero edad Ejemplo 2: Real peso, talla 3 INSTRUCCIONES ALGORÍTMICAS BÁSICAS a. Entrada: Consiste en obtener un dato de un dispositivo de entrada, como el teclado el lector óptico, etc., y almacenarlo en una variable, y se expresa en el pseu- docódigo mediante la palabra LEER, de la siguiente forma: Ejemplo: LEER variable LEER edad • En lenguaje C/C++: cinedad; b. Salida: Consiste en mostrar el valor de una variable en un dispositivo de salida, como la pantalla del computador, se expresa en el pseudocódigo mediante la pala- bra ESCRIBIR,de la siguiente forma: Ejemplo: ESCRIBIR variable ESCRIBIR TotalCompra • En lenguaje C/C++: coutTotalCompra; c. Asignación: Consiste en dar a una variable el valor de una expresión. La asigna- ción se expresa en el pseudocódigo de la siguiente forma: variable expresión Donde variable y el valor de expresión deben tener el mismo tipo de dato. Ejemplo: resultado numero1 + numero 2 En lenguaje C/C++: resultado = numero1 + numero 2; 4 REPRESENTACIÓN DEL ALGORITMO Para poder comprender el orden lógico en el que realizan los pasos de un algorit- mo, se hace uso de diagramas de representación, definidas por conjunto de símbo- los y significado de cada uno de ellos A continuación se le mostrará algunas de las representaciones de algoritmos más conocidas: a. Pseudocódigo: Es la representación del algoritmo en el lenguaje natural del programador. Ejemplo: algoritmo para sumar dos números enteros. INICIO entero numero1, numero2, resultado Leer numero1 Leer numero2 resultado numero1 + numero 2 Escribir “El resultado de la suma es: ” Escribir resultado FIN Descripción: - Todo algoritmo por ser finito, tiene un INICIO un FIN. - Las variables numero1, numero2 y resultado, son asignadas como tipo de dato entero. UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 14. 14ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones - Note que se mantiene las tres partes de un algoritmo: ENTRADA (Leer numero1, Leer numero2), PROCESO (La suma de numero1 y numero2, y dicho valor de suma asignado a la variable resultado) y SALIDA (Escribir el mensaje por pantalla “El resultado es: ” y Escribir el valor pantalla de la variable resultado) b. Diagrama de Flujo Estructurado: Representación con flujos entre los procesos a realizar. Los principales símbolos de representación para este diagrama son: c. Diagrama Nassi/Schneiderman (N-S): Representación en bloques, es decir cada uno de los procesos como ingreso/salida de datos, decisiones, acciones, repeticio- nes; están representados en bloques de tareas consecutivos. INICIO Declaración de variables Lectura de Datos Acción 1 Acción 2 Acción n Reporte de Datos FIN Se le mostrará ejemplos de estas dos últimas representaciones de algoritmos en el tema de Sentencias de Programación. TEMA N° 2: PROGRAMACIÓN ESTRUCTURADA 1 PROGRAMA ¿Se ha preguntado como el computador puede realizar las órdenes como ingresar datos por teclado, reproducir música, editar imágenes? Todo esto es posible gracias a la ejecución de algún programa, es decir, un conjunto de pasos ordenados y finitos (algoritmo) escrito en un lenguaje de programación (programa fuente). 2 LENGUAJE DE PROGRAMACIÓN Así como Ud. conoce el alfabeto (símbolos), gramática y semántica de un idioma como por ejemplo el castellano o el inglés, así es como usará un lenguaje de pro- gramación, con sus propios símbolos, gramática y semántica. UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 15. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 15Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones Entonces, el lenguaje de programación es un conjunto de sentencias utilizadas para es- cribir secuencias de instrucciones para que ejecute un programa en una computadora. Existen los siguientes lenguajes de programación que ya fueron revisados en alguna asignatura previa a esta, las que recordamos como: a. Lenguaje Máquina: Lenguaje de programación que la computadora interpreta y ejecuta directamente, y está compuesto de instrucciones codificadas en binario (0, 1). b. Lenguaje de Bajo Nivel: también llamados lenguajes ensambladores, permiten al programador escribir instrucciones de un programa usando abreviaturas del len- guaje natural (inglés), también llamadas palabras nemotécnicas (ADD, DIV, SUB, etc). c. Lenguaje de Alto Nivel: permite al programador escribir las instrucciones de un programa utilizando palabras o expresiones sintácticas muy similares al lenguaje natural (ejemplo: el inglés). Recuerde que así escriba un programa en un lenguaje de alto nivel, el compu- tador debe traducir estas instrucciones a lenguaje máquina, es decir, en código binario. 3 PROGRAMAS TRADUCTORES Son aquello programas que traducen algoritmos escritos en un programa en len- guaje de alto nivel hacia el lenguaje de código máquina. a. Intérprete: es un traductor que toma un programa fuente, lo traduce y a conti- nuación lo ejecuta. La siguiente figura muestra el flujo de desarrollo de un intérprete. PROGRAMA FUENTE TRADUCCIÓN Y EJECUCIÓN LINEA POR LINEA INTERPRETE Figura Nro 2: Programa Intérprete (Luis Joyanes Aguilar. Fundamentos de Programación) b. Compilador: la traducción del programa se realiza en una sola operación llama- da compilación del programa, es decir se traducen las instrucciones del programa en un solo bloque. El programa compilado y depurado (eliminado los errores de código fuente) se denomina programa ejecutable porque ya se puede ejecutar di- rectamente y cuantas veces de desee, y puede volver a compilarse por ejemplo en el lenguaje C/C++. En la siguiente figura se muestra del flujo de desarrollo de un compilador. UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 16. 16ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones PROGRAMA FUENTE PROGRAMA OBJETIVO COMPLADOR Figura Nro 3: Programa Compilador (Luis Joyanes Aguilar. Fundamentos de Programación) La compilación es el proceso de traducción del programa fuente a programa objeto (traducido a código máquina), a través de un programa enlazador (conduce a un programa en lenguaje máquina directamente ejecutable), para obtener el progra- ma ejecutable. El detalle del proceso de un compilador se muestra en la siguiente figura: PROGRAMA FUENTE PROGRAMA OBJETIVO PROGRAMA EJECUTABLE COMPLADOR PROGRAMA ENLAZADOR Figura Nro 4: Detalle de un Programa Compilador (Luis Joyanes Aguilar. Fundamentos de Programación) 4 DEFINICIÓN PROGRAMACIÓN ESTRUCTURADA Existen dos enfoques de programación y por lo tanto de desarrollo de software, muy utilizados en la actualidad, el Enfoque Estructurado y el Enfoque Orientado a Objetos, cada uno con sus conceptos, técnicas y herramientas. En esta asignatura, por ser de formación básica en su carrera y para facilitar el ini- cio del estudiante en la elaboración de programas, usaremos la Programación del Enfoque Estructurado. La Programación Estructurada es un conjunto de técnicas para escribir, verificar, depurar, y mantener los programas realizando refinamientos sucesivos es decir un todo se divide en segmentos más sencillos o de menor complejidad que al darles solución, se proceden a unificar. Para que estos segmentos de programa realicen las tareas que se le asignen, se recu- rre a las Estructuras de Control Básicas. UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 17. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 17Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones Estructuras de Control Básicas (Flujos de Control) Las estructuras básicas que permiten iniciarse sin dificultad en la programación, se conocen como: • Secuenciales • Selectivas • Repetitivas Éste conjunto de técnicas permite elaborar programas en cualquier lenguaje de programación. Las estructuras de Control Básicas mencionadas, o también conocidas como Sen- tencias Básicas de Programación, serán desarrolladas más adelante. NOTA: Estructura de un Programa en C/C++ Para iniciar la elaboración de programas en esta asignatura, se muestra la Estructu- ra de un Programa Simple en C++, en el Tema de Módulos de Programa, la estruc- tura del programa tendrá algunas modificaciones. Figura Nro 5: Estructura simple de un Programa en C/C++ (Elaboración personal) Descripción: - El símbolo #, es una directiva del procesador que permite acceder la carpeta include. - La carpeta o librería include, es propia del compilador, es donde se encuentran las librerías de cabecera (extensión .h) del lenguaje C/C++ - Una de las librerías de cabecera es el iostream, (i:imput, o:output, stream: flujo de cadenas) que permite reconocer las instrucciones de entrada, salida y manejo de caracteres o cadenas (simbolos) dentro del programa. - using namespace std; indica que se está haciendo uso del espacio de nombres estándar, es decir un conjunto de símbolos para lenguajes de programación. - El Módulo Principal main( ), en el cual se escribirán las instrucciones de progra- ma o invocaciones a otros módulos de programa. UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 18. 18ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones TEMA N° 3: SENTENCIAS BÁSICAS DE PROGRAMACIÓN 1 ESTRUCTURA BÁSICA SECUENCIAL En un mundo ideal, el orden de realización de tareas no tendrían ninguna restric- ción (condición o selección), es decir se realizarían de forma secuencial. Es una estructura paso a paso, sin bifurcaciones ni repeticiones; donde la salida de un proceso es entrada para otro. Diagrama de Flujo: INICIO Lectura de datos Acción 2 Acción n Reporte de datos FIN Declaración de variables Acción 1 Diagrama N-S: INICIO Declaración de variables Lectura de Datos Acción 1 Acción 2 Acción n Reporte de Datos FIN Ejemplo: Calcular el área de un triángulo. Área = (base * altura) / 2 Solución Leyenda de Datos Base: valor de la base del triángulo Altura: valor de la altura del triángulo Área: valor del resultado del cálculo del área del triángulo UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 19. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 19Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones Diagrama de Flujo: INICIO Leer base Área ← (base*altura)/2 Escribir El valor del área para el triángulo es: Escribir área FIN real ← base, altura, área Leer altura Diagrama N-S: INICIO real ← base, altura, área Leer base Leer altura Área (base*altura)/2 Escribir EL valor del área para el triángulo es: Escribir área FIN Código en C++: #includeiostream using namespace std; void main( ) { float base, altura, Area; cout”Ingrese valor de la base: ”; cinbase; cout”n”; //Salto de línea cout”Ingrese valor de la altura: ”; cinaltura; cout”n”; Area = (base * altura) / 2; cout”El valor del área para el triángulo es: ”; UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 20. 20ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones coutArea; cout”n”; system(“PAUSE”); } 2 ESTRUCTURA BÁSICA SELECTIVA Es una estructura que tiene un punto de decisión para realizar un conjunto de acciones. Pueden ser: • E. B. Selectiva Simple • E. B. Selectiva Compuesta • E. B. Selectiva Múltiple a. Estructura Básica Selectiva Simple: Se tiene un punto de decisión que evalúa una condición y si es Verdadero, ejecuta un conjunto de Acciones. Diagrama de Flujo: INICIO Lectura de datos Acción 1 Acción n Reporte de datos FIN Declaración de variables Cond 1 Diagrama N-S: INICIO Declaración de variables Lectura de datos V cond 1 F Acción 1 Acción 2 Acción n Reporte de datos FIN F V UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 21. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 21Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones Ejemplo: Sumar dos números enteros positivos c = a + b Solución: Leyenda de Datos a: valor del primer número entero positivo b: valor del segundo número entero positivo c: valor del resultado la suma de dos números a y b Diagrama de Flujo: INICIO Leer a, b c ← a + b Escribir El valor de la suma es: c FIN entero ← a,b,c a 0 b 0 F V Diagrama N-S: INICIO Entero ← a, b, c Leer a, b V a0 b0 F c ← a + b Escribir El valor la suma es:, c FIN Código C: #includeiostream using namespace std; int main( ) { float a, b, c; cout”Ingrese primer número: ”; cina; cout”n”; cout”Ingrese segundo número: ”; cinb; cout”n”; UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 22. 22ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones if (a0 b0) { c = a + b; cout”El valor la suma es: ”; coutc; cout”n”; } system(“PAUSE”); return 0; } b. Estructura Básica Selectiva Compuesta: Se tiene un punto de decisión que evalúa una condición y si es Verdadero, ejecuta un conjunto de Acciones, y si es Falsa ejecuta otro conjunto de acciones. Diagrama de Flujo: INICIO Lectura de datos Acción 1Acción 2 Acción nAcción m Reporte de datos FIN Declaración de variables Cond 1 F V Diagrama N-S: INICIO Declaración de variables Lectura de datos V cond 1 F Acción 1 Acción 2 ... ... Acción n Acción m Reporte de datos FIN Ejemplo: Sumar dos números enteros si son positivos, sino multiplicarlos. UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 23. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 23Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones Solución: Leyenda de Datos a: valor del primer número entero positivo b: valor del segundo número entero positivo c: valor del resultado la suma de dos números a y b Diagrama de Flujo: INICIO Leer a, b c ← a + bc ← a * b Escribir El valor de la suma es: c Escribir El valor de la multiplicación es: c FIN entero ← a,b,c a 0 b 0 F V Diagrama N-S: INICIO Entero ← a, b, c Leer a, b V a0 b0 F c ← a + b c ← a * b Escribir El valor la suma es:, c Escribir El valor la multiplicación es:, c FIN Código C: #includeiostream using namespace std; void main( ) { int a, b, c; cout”Ingrese primer número: ”; cina; cout”n”; cout”Ingrese segundo número: ”; cinb; cout”n”; if(a0 b 0) UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 24. 24ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones { c = a + b; cout”El valor la suma es: ”; coutc; cout”n”; } else { c = a * b; cout”El valor la multiplicacion es: ”; coutc; cout”n”; } system(“PAUSE”); } c. Estructura Básica Selectiva Múltiple: Se tiene un punto de decisión que evalúa más de dos alternativas para realizar un conjunto de acciones. Diagrama de Flujo: INICIO Lectura de datos Acción 4 Reporte de datos FIN Declaración de variables Cond 1 Acción 3 Acción m Acción 1 Acción n Acción 2 Acción m Acción 4 Acción m default 33 1 Diagrama N-S: INICIO Declaración de variables Lectura de datos 1 2 3 cond 1 default Acción 1 Acción 2 Acción 3 Acción 4 ... ... ... ... Acción n Acción m Acción m Acción m Reporte de datos FIN UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 25. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 25Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones Ejemplo: Ingresa cinco números e imprime que vocal es. Solución: Leyenda de Datos num: valor del número entero positivo Diagrama de Flujo: INICIO Leer num. Escribir Vocal A Escribir Vocal A Escribir Vocal A Escribir Vocal A Escribir Vocal A Escribir Vocal A FIN entero ← num. num default1 3 4 5 2 Diagrama N-S: INICIO Entero ← a, b, c Leer a, b 1 2 3 4 5 num default Escribir Vocal A Escribir Vocal E Escribir Vocal I Escribir Vocal O Escribir Vocal U Escribir No es vocal FIN Código C: #includeiostream using namespace std; void main( ) { int num; cout”Ingrese número: ”; cinnum; switch(num) { case 1: cout”Vocal A”; break; case 2: cout”Vocal E”; break; case 3: cout”Vocal I”; break; UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 26. 26ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones case 4: cout”Vocal O”; break; case 5: cout”Vocal U”; break; default: cout”No es numero para una vocal”; } system(“PAUSE”); } Existe una conformación de la Estructura Selectiva que ayuda en la elaboración de programas: Estructura Básica Selectiva Anidada: se evalúa una condición y si es Verdadero, eje- cuta un nuevo punto de decisión y así sucesivamente, y si es Falsa ejecuta otro con- junto de acciones. Diagrama de Flujo: INICIO Lectura de datos Reporte de datos FIN Declaración de variables Cond 1 Cond 2 Acción 1 Acción n Acción 2 Acción m V V F F Diagrama N-S: INICIO Declaración de variables Lectura de datos F Cond 1 V Acción 2 V Cond 2 F ... Acción 1 ... ... Acción m Acción n Reporte de datos FIN UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 27. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 27Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones Ejemplo: Ingresar un número entero y si es positivo y diferente de cero, reportar si se encuen- tra entre los diez primeros números. Solución: Leyenda de Datos a: valor del número entero Diagrama de Flujo: INICIO Leer a Escribir Primeros 10 Escribir Son mas de los primeros l0 Escribir No es un número mayor que cero FIN entero ← a a 0 a = 1 a 10 F F V V Diagrama N-S: INICIO Entero a Leer a F a 0 V Escribir No es un número mayor que cero F a = 1 a 10 V Escribir Son mas de los primeros 10 Escribir Primeros 10 FIN Código C: #includeiostream using namespace std; void main( ) { int a; cout”Ingrese número: ”; cina; if(a0) if(a=1 a10) cout”Primeros 10”; UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 28. 28ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones else cout”Son más de los primeros 10”; else cout”No es un número mayor que cero”; system(“PAUSE”); } 3 ESTRUCTURA BÁSICA REPETITIVA Es una estructura permite repetir un conjunto de acciones dada una condición. Pueden ser: • E. B. Repetitiva Mientras • E. B. Repetitiva Hacer-Mientras • E. B. Repetitiva Para a. Estructura Básica Repetitiva Mientras: Primero evalúa una expresión condicional y si es verdadera permite realizar el con- junto de acciones y regresa evaluar nuevamente la expresión condicional, hasta que deje de cumplir (Falso). Diagrama de Flujo: INICIO Lectura de datos FIN Declaración de variables Cond 1 Acción 1 Acción n V F Acción 2 Diagrama N-S: INICIO Declaración de variables Lectura de datos Cond 1 Acción 1 ... Acción n Acción 2 Reporte de datos FIN UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 29. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 29Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones Ejemplo: Imprimir la serie Fibonacci, menor a un límite dado: 0,1,1,2,3,5,8,13,…. Diagrama de Flujo: INICIO Leer lim Escribir a Escribir b FIN entero ← lim, a=0, b=1, c b=lim c ← a + b a ← b V F b ← c Diagrama N-S: INICIO entero ← min, a=0, b=1, c Leer lim Escribir a b = lim Escribir c ← a + b a ← b b ← c FIN Código C: #includeiostream using nameaspace std; void main( ) { int lim, a=0, b=1,c; cout”Ingrese límite: ”; cinlim; UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 30. 30ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones couta; while(b=lim) { coutb; c=a+b; a=b; b=c; } system(“PAUSE”); } b. Estructura Básica Repetitiva Hacer - Mientras Realiza al menos una vez un conjunto de acciones, y luego evalúa una expresión condicional, si es Verdadero regresa a repetir el conjunto de acciones, si no cum- ple, termina la repetición. Diagrama de Flujo: INICIO Lectura de datos Reporte de Datos FIN Declaración de variables Cond 1 Acción 1 Acción n V F Acción 2 Diagrama N-S: INICIO Declaración de variables Lectura de datos Acción 1 ... Acción n Cond 1 Acción 2 Reporte de datos FIN UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 31. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 31Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones Ejemplo: Leer un número entero mayor que cero, sino es así, volver a solicitar el número con esas condiciones. Diagrama de Flujo: INICIO Leer num FIN entero ← num num = 0 V F Diagrama N-S: INICIO entero ← mun Leer num num = 0 FIN Código C: #includeiostream using namespace std; void main() { int num; do{ cout” Ingrese un numero entero mayor a cero: “; cinnum; }while(num = 0); system(“PAUSE”); } c. Estructura Básica Repetitiva Para: Tambien conocida como Desde ó Por, permite repetir un conjunto de acciones, se- cuencialmente hasta llegar a un límite dado; recorrido se realiza desde una variable o índice de recorrido y avanza de uno en uno hasta llegar al límite. Diagrama de Flujo: UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 32. 32ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones INICIO Lectura de datos Reporte de Datos FIN Declaración de variables Definir variables de recorrido y limite Inicializar la variable de recorrido Incrementar variable de recorrido Variable es menor a limite Acción 1 Acción n V F Acción 2 Diagrama N-S: INICIO Declaración de variables Lectura de datos i = 0; i = limite; i ++ Acción 1 ... Acción n Acción 2 Reporte de datos FIN Ejemplo: Calcular el Factorial de un número (n!). Diagrama de Flujo: UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 33. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 33Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones INICIO Escribir Ingrese numero para factorial Escribir El factorial es, p Leer num FIN entero ← i, num, p = 1 i ← 1 i = num p ← p * i i ++ V F Diagrama N-S: INICIO entero ← num i, p = 1 Leer num i = 1; i = num; i ++ p ← p * i Escribir el factorial es: Escribir p FIN Código C: #includeiostream using namespace std; void main( ) { int num, i, p=1; cout”Ingrese numero para factorial: ”; cinnum; for(i=1;i=num; i++) { p = p * i; } cout”El factorial de ”n”es: ”p; system(“PAUSE”); } UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 34. 34ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones Diagrama Objetivos Inicio Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones ACTIVIDAD N° 1 Esta actividad puede consultarla en su aula virtual. TEMA N° 4: MODULARIZACIÓN DE PROGRAMAS 1 DEFINICIÓN DE MÓDULOS DE PROGRAMA Imagine que está iniciando un negocio y no tiene colaboradores, y asume todas las tareas para su funcionamiento: buscar proveedor, ofrecer y publicitar el producto o servicio, estar involucrados en el proceso de transacción etc. Pero en alguna etapa de crecimiento, asignamos estas tareas a otros colaboradores, quienes interactúan entre sí, y al final le informan de su cumplimiento. Es lo mismo que pasa en la ela- boración de módulos de programa. Los Módulos de Programa (subprogramas) son partes separadas de código que ejecutan tareas pequeñas de un módulo principal. El módulo es con un conjunto de instrucciones precisas, independientes y reutilizables. Para poder crear los módulos de programa, debe conocer las formas en que se pa- san los datos de un módulo a otro, al ser invocados. 2 PASO DE PARÁMETROS Parámetros de entrada (valor) Imagine nuevamente, que se hace un clon de su persona, todas las modificaciones que haga sobre él (cambio de peinado, forma de vestir, aprendizaje de otro idioma) no le afectaría a Ud. que es el dato original. Es decir, se guarda en memoria una copia temporal de la variable, y dentro del módulo solo se utiliza la copia para las modificaciones. Parámetros de entrada/salida (referencia) Ahora el ejemplo ya no es clonar a su persona, sino que es Ud. mismo, y donde sea que se encuentre (o referencia de ubicación), las modificaciones que se realicen siempre se mantendrán en Ud., por ser el dato original. Es decir, los cambios que se efectúen sobre dicha variable dentro del procedimiento se mantienen incluso después de que este haya terminado. La siguiente figura muestra un programa, haciendo uso de los tipos de paso de parámetros. UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 35. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 35Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones Figura Nro 6: Programa Ejemplo de Paso de Parámetros (Elaboración personal) Descripción: - En el programa se tienen dos módulos: el Principal: main (no olvide que siempre debe existir) y el módulo f (que como programadores, estamos creando). - En el módulo Principal se está declarando dos variables: x, y a las cuales se les está asignando el valor de 1, a cada una respectivamente. - En el mismo módulo Principal se invoca al módulo f, al que se le envía los valores de x, y: f(x,y) significa f(1,1); - Esa invocación permite que se desarrolle el módulo void f (int a, int b), es decir la variable a, recibe el valor de la variable x y la variable b recibe el valor de la va- riable y, por estar en un orden dentro del paréntesis. - La variable a, servirá para un paso de parámetros de entrada, y la variable b para un paso de parámetros de entrada/salida por que lo acompaña el operador de dirección (para hacer referencia, es decir apuntar a la dirección de memoria de la variable y) - Es decir, la variable a, recibe el valor de 1 proveniente de x, mientras que la varia- ble b recibe la dirección de memoria (en base hexadecimal) de la variable y. - El módulo f, es independiente al módulo Principal, por lo que la declaración de la variable a es de forma local, es decir las modificaciones o cambios de valores a la variable a, solo es afectada en el módulo f, mientras que el valor original de x se mantiene y no sufre los cambios que realice en la variable a. - Lo mismo ocurriría con la variable b, pero en este caso, b no es copia de y, sino que invoca la dirección de memoria de y, por lo que los cambios que realice en b, afecta directamente a y. Se tiene dos tipos de módulos de programa: Procedimiento y Función. 3 PROCEDIMIENTOS Son módulos que se utilizan para elaborar un conjunto de instrucciones, indepen- dientes y reutilizables, pero definiendo claramente el significado y utilidad de esa porción de programa (cohesión). Declaración en C/C++: void NombreProcedimiento( ) void NombreProcedimiento (argumentos) UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 36. 36ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones 4 FUNCIONES Son módulos que tienen la misma definición de un procedimiento, pero con la particularidad de que permite devolver UN valor en una variable. Declaración en C/C++: Tipo_dato NombreFunción( ) Tipo_dato NombreFunción(argumentos) Nota: - En la Función, el Tipo de dato que se escribe al declararla, debe ser el mismo tipo de dato de la variable cuyo valor se devuelve (retorna) - En el Procedimiento, como no devuelve ningún valor, se escribe la palabra void, que indica vació o sin especificar un tipo de dato. - Tanto en función y en procedimiento, se puede declarar con o sin argumentos, es decir los argumentos son el envío de valores de variables a través de estos mó- dulos y pueden ser paso de parámetros por entrada o paso de parámetros por entrada/salida. Pasamos a un ejemplo, simple en solucionar, pero el objetivo de este ejemplo es crear y comparar el uso de Función, Procedimiento, con o sin argumentos. Ejemplo: se tiene el siguiente programa simple para sumar dos números //Programa Simple #includeiostream using namespace std; void main() { int a,b,c; cout”Ingrese valor de a: t”; cina; cout”Ingrese valor de b: t”; cinb; c=a+b; coutc; cout”n”; system(“PAUSE”); } Es simple porque todas las instrucciones de programa para lograr sumar dos núme- ros, es decir la entrada de datos en la variable a y b, el proceso de sumar y asignar y la salida del resultado en la variable c, se están escribiendo solo en el Módulo Principal main( ) A continuación se muestra la forma para crear un módulo llamado sumar, usando la siguiente técnica: creando el módulo antes del módulo que lo invoca. El desarrollo del programa se muestra con el uso Procedimiento con y sin argumen- tos, y usando Función con y sin argumentos. UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 37. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 37Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones //Procedimientos con Argumentos: Ejemplo 1 #includeiostream using namespace std; void sumar(int a, int b) { int c; c=a+b; coutc; cout”n”; } void main() { int a,b; cout”Ingrese valor de a: t”; cina; cout”Ingrese valor de b: t”; cinb; sumar(a,b); system(“PAUSE”); } //Procedimientos sin Argumentos: Ejemplo 2 #includeiostream using namespace std; void sumar() { int a,b,c; cout”Ingrese valor de a: t”; cina; cout”Ingrese valor de b: t”; cinb; c=a+b; coutc; } void main() { sumar( ); system(“PAUSE”); } Descripción: - En ambos casos, con o sin argumentos, el módulo sumar( ) está realzando exac- tamente la tarea para la cual ha sido creada, es decir, sumar dos números. - Además, en el Módulo principal main( ), se invoca al módulo sumar ( ) exacta- mente con su nombre, sin ayuda de ninguna otra variable, ya que no devuelve ningún valor. - Pero, en ambos casos, la tarea de leer los valores de a y b, están siendo asumidos en el primer caso por el módulo principal, o en el segundo caso, por el módulo sumar. Esta tarea también será asumida por un módulo apropiado que permita realizar la tarea de obtener los valores, sin recargar la responsabilidad de otros módulos. (Se verá mas adelante) UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 38. 38ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones //Funciones con Argumentos: Ejemplo1 #includeiostream using namespace std; int sumar(int a, int b) { int c; c=a+b; return c; } void main() { int sum,a,b; cout”Ingrese valor de a: t”; cina; cout”Ingrese valor de b: t”; cinb; sum=sumar(a,b); cout”Valor de la suma de a y b: “sum; cout”n”; system(“PAUSE”); } //Funciones sin Argumentos: Ejemplo 2 #includeiostream using namespace std; int sumar() { int a,b,c; cout”Ingrese valor de a: t”; cina; cout”Ingrese valor de b: t”; cinb; c=a+b; return c; } void main() { int sum; sum=sumar(); cout”Valor de la suma de a y b: “sum; cout”n”; system(“PAUSE”); } Descripción: - En ambos casos, con o sin argumentos, el módulo sumar( ) está realzando exac- tamente la tarea para la cual ha sido creada, es decir, sumar dos números. - El módulo sumar( ), está siendo declarado acompañado de un tipo de dato entero: int, ya que es el mismo tipo de dato de la variable que está devolviendo (return) en este caso, la variable c. - Por lo que, el módulo principal, al invocar al módulo sumar, debe recibir el va- lor que se está devolviendo, y para esto se recomienda el uso de una variable que reciba dicho valor, en el ejemplo la variable sum, la cual debe estar declarada con el mismo tipo de dato de la variable que recibe. - De igual manera que en el ejemplo de Procedimientos, la tarea de leer los valo- res de a y b, deben ser asumidos por un módulo apropiado. Otra Manera de definir un Procedimiento y una Función, con o sin argumentos, es con la técnica: declarar de manera global a la función o procedimiento, es decir en la cabecera del programa, y luego desarrollar las instrucciones de la fun- ción o procedimiento después del Módulo Principal. UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 39. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 39Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones //Procedimientos con Argumentos #includeiostream using namespace std; void sumar(int a, int b); int main() { int a,b; cout”Ingrese valor de a: t”; cina; cout”Ingrese valor de b: t”; cinb; sumar(a,b); return 0; } void sumar(int a, int b) { int c; c=a+b; coutc; cout”n”; } //Funciones con Argumentos #includeiostream using namespace std; int sumar(int a, int b); void main() { int sum,a,b; cout”Ingrese valor de a: t”; cina; cout”Ingrese valor de b: t”; cinb; sum=sumar(a,b); cout”Valor de la suma de a y b: “sum; cout”n”; } int sumar(int a, int b) { int c; c=a+b; return c; } Descripción: - El ejemplo anterior solo ha sido dado con Procedimientos y Funciones con ar- gumentos, pero también puede darse sin argumentos. - En esta forma, el orden de creación de los módulos no es relevante, siempre y cuando estén declarados de manera global en el programa. Ejemplo: Para repartir una herencia se tiene en cuenta: Si la cantidad de hijos es menor a 4, se repartirá exactamente entre el número de hijos; si son cuatro o más hijos, la mitad le tocará al hermano mayor y el resto se dividirá entre los demás hermanos. #includeiostream using namespace std; //procedimientos sin argumentos void herencia() { float her,may; int num; cout”Ingresar importe de herencia n”; cinher; cout”Ingresar cantidad de hijos n”; cinnum; UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 40. 40ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones if(num4) { her=her/num; cout”Herencia a cada hijo es “her; } else { may=her/2; her=may/(num-1); cout”nHerencia de hermano mayor es”may; cout”nHerencia de cada hijo es “her; } } void main( ) { herencia( ); system(“PAUSE”); } 5 LIBRERÍAS DE PROGRAMACIÓN CREADAS POR EL USUARIO Al elaborar programas, además de crear módulos independientes y reutilizables en el programa fuente, Ud. se verá en la necesidad de usar esos mismos módulos en otros programas fuentes, diferentes entre sí, ya que el algoritmo que necesita son los mismos para cada uno de ellos. Existen librerías de cabecera (header, de alli la extensión “.h”), y algunas son pro- pias del del lenguaje C como: iostream.h, math.h, conio.h, stdio.h, srting.h y otras que pueden ser creadas por el programador, y ser invocadas en diferentes progra- mas fuente (el programa con extensión “.cpp”) como parte de la reutilización de código. Ejemplo 1: Leer un número entero diferente a cero, y si es positivo, reportar “El numero es positivo”, caso contrario es negativo. Solución: - Crear la librería con extensión .h llamado lecturadato.h para crear la función de lectura de datos enteros, llamada leedatoe( ). lecturadato.h #includeiostream using namespace std; int leedatoe() { int dato; do{ cout”Ingrese valor del dato”; cindato; }while(dato==0); return dato; } - Crear el programa Ejemplo.cpp que invoca a la librería lecturadato.h, especifican- do la ruta que se encuentre: UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 41. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 41Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones Ejemplo: cpp #includeiostream #include “c:programaslecturadato.h” using namespace std; void main() { int num; num=leedatoe(); if(num0) cout”El numero es positivo”; else cout”El numero es negativo”; system(“PAUSE”); } Descripción: - Al invocar a lecturadato.h, a través de su ruta de ubicación, permite usar las veces que se requeira, al módulo leedatoe( ) que se encuentra ubicado dentro de librería creada. - Si se tiene otro programa con la extensión .cpp, puede también invocar a la libre- ría lecturadato.h, sin ningún inconveniente. - Puede agregar otros módulos de lectura a la librería lecturadato.h, según el tipo de dato que necesite. - Escribir la ruta de la librería se hace innecesaria por la ayuda que ofrece las inter- faces de la herramienta de programación que ese esté usando. Ejemplo: LecturaDatos.h Figura Nro 7: Ejemplo de Librería LecturaDatos.h (Elaboración personal) UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 42. 42ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones RepartoHerencia.cpp Figura Nro 8: Ejemplo de Programa Fuente RepartoHerencia.cpp (Elaboración personal) Descripción: - Como puede ver, en el programa fuente RepartoHerencia.cpp, se invoca al mó- dulo leedatod( ) y leedatoe( ) para obtener los valores de monto de herencia y cantidad de hijos respectivamente; dichos módulos están creados en la librería LecturaDatos.h, que es invocada en el programa fuente. - El módulo principal main( ) se debe escribir líneas abajo del programa fuente, y debe invocar al módulo Herencia( ), como ya se ha explicado en el ejemplo anterior. TEMA N° 6: FUNCIONES RECURSIVAS En cierta ocasión en un aula de clase, pregunté si podían definir o dar un ejemplo de recursividad, sorprendiéndome la respuesta de un estudiante: “Si yo tengo un apuro económico, vendo mi reproductor de música, y atiendo ese apuro. Es decir, un recurso que le pertenece a una entidad, es usada nuevamente por la misma entidad para buscar una solución, eso es Recursividad”, finalizó. 1 DEFINICIÓN DE RECURSIVIDAD Entonces, se denominan funciones recursivas a aquellas que se invocan a sí mis- mas en un programa, para desarrollar un determinado proceso. Hay que tener algunas cosas en cuenta, en las funciones recursivas: - Toda función recursiva debe tener algún punto de finalización o valor base. - La función recursiva debe acercarse a ese punto de finalización o valor base. (Eduardo Raffo Lecca, Turbo C++) UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 43. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 43Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones 2 RECURSIVIDAD DEL 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); } 3 RECURSIVIDAD DE LA MULTIPLICACIÓN 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); } 4 RECURSIVIDAD DE TORRES DE HANOI Las restricciones para la recursividad de torres de hanoi, se expresan: - Usar n discos para trasladarlos desde un poste origen, hacia un poste final, usando un poste auxiliar. - Por cierta cantidad de discos, hay una cantidad de movimientos, ni mas ni menos, cant_movim = 2n − 1. - Los discos están dispuestos del tamaño grande al más pequeño. No puede estar un disco grande sobre uno pequeño. A continuación se tiene el algoritmo, puesto a prueba a través del Método del Ár- bol, muy útil para comprobar la recursividad. 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 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 UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 44. 44ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones Figura Nro 9: Ejemplo de Método del Árbol para Torres de Hanoi (Elaboración personal) Diagrama Objetivos Inicio Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones ACTIVIDAD N° 2 Esta actividad puede consultarla en su aula virtual. UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 45. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 45Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones Diagrama Objetivos Inicio Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones LECTURA SELECCIONADA N° 1 INTRODUCCIÓN A LOS SUBALGORITMOS O SUBPROGRAMAS Luis Joyanes Aguilar, 2008, Fundamentos de Programación. Pág. 202 Un método ya citado para solucionar un problema complejo es dividirlo en subproble- mas –problemas más sencillos– y a continuación dividir estos subproblemas en otros más simples, hasta que los problemas más pequeños sean fáciles de resolver. Esta técnica de dividir el problema principal en subproblemas se suele denominar “divide y vence- rás” (divide and conquer). Este método de diseñar la solución de un problema principal obteniendo las soluciones de sus subproblemas se conoce como diseño descendente (top-down design). Se denomina descendente, ya que se inicia en la parte superior con un problema general y el diseño específico de las soluciones de los subproblemas. Normalmente las partes en que se divide un programa deben poder desarrollarse inde- pendientemente entre sí. Las soluciones de un diseño descendente pueden implementarse fácilmente en lenguajes de programación de alto nivel, como C/C++, Pascal o Fortran. Estas partes independientes se denominan subprogramas o subalgoritmos si se empelan desde el concepto algorítmico. La correspondencia entre el diseño descendente y la solución por computadora en términos de programa principal y subprogramas se analizará a lo largo de este capítulo. Consideremos el problema del cálculo de la superficie (área) de un rectángulo. Este problema se puede dividir en tres subproblemas: • Subproblema 1: Entrada de datos de altura y base. • Subproblema 2: Cálculo de la superficie. • Subproblema 3: Salida de resultados. El algoritmo correspondiente que resuelve los tres subproblemas es: Leer (altura, base) // entrada de datos Área ← base * altura // cálculo de la superficie Escribir (base, altura, área) // salida de resultados El método descendente se muestra en la Figura: Figura Nro 10: Diseño Descendente (Fuente: Luis Joyanes Aguilar. Fundamentos de Programación) El problema principal se soluciona por el correspondiente programa o algoritmo prin- cipal – también llamado controlador o conductor (driver) – y la solución de los sub- problemas mediante subprogramas, conocidos como procedimientos (subrutinas) o funciones. Los subprogramas, cuando se tratan en lenguaje algorítmico, se denominan también subalgoritmos. UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 46. 46ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones Un subprograma puede realizar las mismas acciones que un programa: 1) aceptar datos, 2) realizar algunos cálculos, 3) devolver resultados. Un subprograma, sin embargo, se utiliza por el programa para un propósito específico. El subprograma recibe datos des- de el programa y le devuelve resultados. Haciendo un símil con una oficina, el problema es como el jefe que da instrucciones a sus subordinados – subprogramas-; cuando la ta- rea termina, el subordinado devuelve un resultado al jefe. Se dice que el programa prin- cipal llama o invoca al subprograma. El subprograma ejecuta la tarea, a continuación devuelve el control al programa. Eso puede suceder en diferentes lugares del programa. Cada vez que el programa es llamado, el control retorna al lugar donde fue hecha la llamada como muestra la siguiente figura (Figura 12). Un subprograma puede llamar a su vez a sus propios subprogramas (Figura 13). Existen – como ya se ha comentado – dos tipos importantes de subprogramas: funciones y procedimientos o subrutinas. Figura Nro 11: Un programa con un subprograma: función y procedimiento (Fuente: Luis Joyanes Aguilar. Fundamentos de Programación) Figura Nro 12: Un programa con diferentes niveles de subprogramas (Fuente: Luis Joyanes Aguilar. Fundamentos de Programación) UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA Diagrama Objetivos Inicio Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones GLOSARIO DE LA UNIDAD I Argumento: valores suministrados a un módulo de programa, al momento de ser invo- cado. Librería: es un archivo, que contiene código, usualmente en módulos de programa. Que pueden ser reutilizados por diferentes proyectos de programa. Programa fuente: algoritmo codificado en un lenguaje de programación, que adminis- tra otros módulos de programa, y es necesario para la ejecución del programa. String.h: librería del compilador, en este caso el C/C++, que permite usar el tipo de dato del mismo nombre: string.
  • 47. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 47Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA Objetivos Inicio s Actividades Autoevaluación s Glosario Bibliografía o Anotaciones AUTOEVALUACIÓN DE LA UNIDAD I INSTRUCCIONES: Lee detenidamente y responde las siguientes preguntas: 1. Indique la alternativa que describa la característica “Ser Preciso” de un algoritmo: a) Sólo se desarrollarán las tareas programadas y con los datos suministrados. b) Las tareas desarrolladas deben permitir ponerlas a prueba antes de ejecutar. c) Las tareas de un algoritmo tienen un orden de realización. d) Se emplear los recursos necesarios para el desarrollo de las tareas. e) Se debe expresar en una forma estándar, comúnmente aceptada. 2. El programa traductor denominado compilador realiza el siguiente flujo de trabajo. a) Obtiene el programa fuente, genera el código objeto, lo enlaza al código máqui- na y genera el programa ejecutable. b) Obtiene el programa fuente, genera el código algoritmo, lo enlaza al código máquina y genera el programa ejecutable. c) Obtiene el programa fuente, genera el código objeto, lo enlaza al código fuente y genera el programa ejecutable. d) Obtiene el programa fuente, genera el código máquina, lo enlaza al código fuen- te y genera el programa ejecutable. e) Obtiene el programa fuente, genera el código algoritmo, lo enlaza al código fuente y genera el programa ejecutable. 3. Dado el siguiente bloque de código que utiliza una estructura repetitiva, indique que valores lógicos de la tabla de verdad (Verdadero=V y Falso=F) se necesita en la condición, para que no solicite nuevamente el ingreso el valor: a) V,V. do{ cout”Ingrese valor: ”; cinvalor; }while(valor==’S’ || valor==’s’); b) F,V. c) V,F. d) F,F. e) FFV. 4. Indique la alternativa que presenta el orden de ejecución de la estructura repetitiva Objetivos Inicio os Actividades Autoevaluación s Glosario Bibliografía o Anotaciones BIBLIOGRAFÍA DE LA UNIDAD I Carrasco Loli Angela. Principios de Programación. Junio 2005 Joyanes Aguilar, Luis. Fundamentos de Programación. 4ta. ed. España: McGraw-Hill; 2008. Raffo Lecca, Eduardo. Turbo C++. 1 ed. Lima: Mundigraph; 2000.
  • 48. 48ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA Para: for( i = 0; i n; i++) { accion 1; acción m; } a) Inicializa la variable de recorrido, compara que esté dentro del límite, incre- menta la variable, realiza las acciones, e inicia nuevamente el mismo orden de ejecución. b) Inicializa la variable de recorrido, compara que esté dentro del límite, realiza las acciones, incrementa la variable e inicia nuevamente el mismo orden de ejecución. c) Inicializa la variable de recorrido, compara que esté dentro del límite, incremen- ta la variable, realiza las acciones, y finaliza el orden de ejecución. d) Inicializa la variable de recorrido, incrementa la variable, compara que esté dentro del límite, realiza las acciones, e inicia nuevamente el mismo orden de ejecución. e) Inicializa la variable de recorrido, decrementa la variable, compara que esté dentro del límite, realiza las acciones, e inicia nuevamente el mismo orden de ejecución. 5. Dado el siguiente bloque de código, indique el tipo de sentencia: if(num 0) if(num 30 num 60 ) coutpow(num,2); a) Sentencia Repetitiva Para. b) Sentencia Selectiva Compuesta. c) Sentencia Repetitiva Hacer-Mientras. d) Sentencia Selectiva Múltiple. e) Sentencia Selectiva Anidada. 6. Indique la alternativa cuyo enunciado no es correcto: a) Las funciones y procedimientos son módulos de programa. b) Las funciones recursivas se invocan a sí mismas. c) Sólo las funciones usan argumentos, los procedimientos no lo usan. d) Los módulos son independientes y reutilizables. e) Los pasos de parámetros son dos: por valor y por referencia. 7. Indique la alternativa que defina a “permite usar módulos independientes, en dife- rentes programas”. a) Función Recursiva. b) Paso de Parámetros por valor. c) Sentencias Repetitivas. d) Librerías de programación. e) Sentencias Selectivas. 8. Indique a que algoritmo recursivo, se refiere el siguiente módulo de programa:
  • 49. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 49Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones int modulo(int a, int b) { if(b==0) return 1; else return a*modulo(a,b-1); } a) Función Recursiva de la Multiplicación. b) Función Recursiva del Factorial. c) Función Recursiva de la Potencia. d) Función Recursiva de Fibonacci. e) Función Recursiva de Torres de Hanoi. 9. El paso de parámetros por valor, realiza el siguiente proceso: a) Crea una variable original y las modificaciones afectan a la copia de la variable original. b) Crea una copia temporal de la variable y las modificaciones solo afectan a ésta copia. c) Crea un variable original y las modificaciones solo afectan a ésta. d) Crea una copia temporal de la variable y las modificaciones afectan a la variable original. e) Crea una variable original y no tiene modificaciones. 10. Indique la alternativa que indique la(s) variables(s) que sean paso de parámetros por referencia. void calcular(int x, int y) { int c; c = x + y; coutc; } a) La variable “x”. b) La variable “x” y la variable “y”. c) La variable “y”. d) La variable “c” y la variable “y”. e) La variable “c”. UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 50. 50
  • 51. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 51Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones Diagrama Objetivos Inicio Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS Diagrama Objetivos Inicio Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones DIAGRAMA DE PRESENTACIÓN DE LA UNIDAD ORGANIZACIÒN DE LOS APRENDIZAJES CONOCIMIENTOS PROCEDIMIENTOS ACTITUDES Tema N° 1: Estructuras de Datos 1. Definición de Estructura de Datos 2. Clasificación de Estructura de Datos Tema N° 2: Arreglos Unidi- mensionales 1. Definición de Arreglos Uni- dimensionales 2. Algoritmos de Actualiza- ción 3. Búsqueda de Arreglos Uni- dimensionales 4. Ordenación de Arreglos Unidimensionales Tema N° 3: Arreglos Bidimen- sionales 1. Definición Arreglos Bidi- mensionales 2. Algoritmos de Actualiza- ción de Arreglos Bidimen- sionales Lectura seleccionada N° 1 Arrays Multidimensionales – Jesús Carretero Pérez. García Carballena, Felix. Pérez Loba- to José Autoevaluación de la Unidad II 1. Aplica los algoritmos de actualización de arreglos unidimensionales: añadir, insertar, eliminar; en la construcción de programas 2. Aplica los algoritmos de búsqueda y ordenación de arreglos unidimensionales en la construcción de pro- gramas 3. Aplica los algoritmos de actualización de arreglos bidimensionales en la cons- trucción de programas 4. Usa los algoritmos de ma- triz transpuesta, diagonales, rodean a un número; con arreglos bidimensionales Actividad N° 1 Elaboración de Programas usan- do arreglos unidimensionales, para casos propuestos Actividad N° 2 Elaboración de Programas usan- do arreglos bidimensionales, para casos propuestos Tarea Académica Nº 1 Construcción de Programas y prueba de escritorio, usando Arreglos 1. Asume con responsabilidad sus actividades académicas asignadas 2. Realiza con honestidad las evaluaciones asignadas CONTENIDOS AUTOEVALUACIÓN LECTURAS SELECCIONADAS BIBLIOGRAFÍA ACTIVIDADES
  • 52. 52ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones TEMA N° 1: ESTRUCTURAS DE DATOS 1 DEFINICIÓN DE ESTRUCTURA DE DATOS Considere como ejemplo un librero, un espacio donde almacena libros en cada com- partimiento (un solo tipo de dato: libro), o como a su oficina de trabajo, como un espacio donde se almacenan elementos tales como expedientes, computadoras, gabi- netes, personas, entre otros; es decir permite almacenar diferentes elementos (dife- rentes tipos de datos). Entonces la estructura de datos, es aquel espacio que permite almacenar valores, ya sean del mismo o de diferentes tipos de datos. 2 CLASIFICACIÓN DE ESTRUCTURA DE DATOS A. Estructuras de Datos Simples: permiten almacenar un solo valor en un espacio de memoria (variable) a. Estructuras de Datos Estándar: es el almacenamiento que todos los lenguajes de programación utilizan, dado el tipo de dato que se defina. Por ejemplo, se tiene una estructura estándar de tipo real para una variable deno- minada precio: Declaración en C/C++: float precio; Representación Gráfica en Memoria, asignándole el valor de precio de 12.6: 12.6 float precio b. Estructuras de Datos No Estándar: es la estructura que no pertenece a un lenguaje de programación específico, y puede ser creado por el programador. En C/C++ se definen con la palabra reservada typedef. B. Estructuras de Datos Compuestas: permiten almacenar un conjunto de valores (celdas o nodos) en un espacio de memoria. Pueden ser de dos tipos: a. Estructuras de Datos Estáticos: necesitan definir su tamaño inicial, antes de la eje- cución del programa. Como ejemplo de este tipo de estructuras tenemos a los arre- glos unidimensionales, arreglos bidimensionales y estructuras (registros). Declaración de Arreglo Unidimensional en C/C++: char Mensaje[11]; Representación Gráfica en Memoria, asignándole un valor en cada celda: UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
  • 53. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 53Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones char Mensaje b i e n v e n i d o ` 0 ´ Declaración de Registro en C/C++: struct Paciente{ int codPaciente; string apePaciente; string nombPaciente; char generoPaciente; }; Representación Gráfica en Memoria, asignándole un valor en cada celda: b. Estructuras de Datos Dinámicos: no necesita definir tamaño inicial, ya que los es- pacios se van creando conforme se van ingresando los valores. Se tiene dos tipos: lineal, por que nodos se crean uno tras otro (Ejemplo: lista, colas y pilas), y no lineal, por que los nodos no necesariamente se encuentran uno tras otro (árbol y grafo). TEMA N° 2: ARREGLOS UNIDIMENSIONALES 1 DEFINICIÓN DE ARREGLOS UNIDIMENSIONALES También llamado vectores, es un conjunto finito y ordenado de elementos de un mismo tipo de dato (homogéneos). La definición de un arreglo es como sigue: TipoDato NombreArreglo[tamaño] Ejemplo: Entero M[10] Acceso a los elementos de un arreglo unidimensional: Nombre del arreglo [posición del elemento]; Ejemplo: Gráfico de Arreglo Unidimensional UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
  • 54. 54ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones 23 45 34 19 62edad edad[0] 0 edad[2] 2 edad[1] 1 edad[3] 3 edad[4] 4 Descripción: - Nombre del arreglo: edad. - Tamaño Máximo del arreglo (cantidad de celdas): 5 - Posición de cada celda: 0, 1, 2, 3, 4 (recorridos con la variable index: i , desde la posición 0 hasta la posición del tamaño máximo -1) - Elementos o valores dentro del arreglo, dada por cada celda: 23 en edad[0], 45 en edad[1], 34 en edad[2], 19 en edad[3] y 62 en edad[4], es decir para leer, mostrar u operar un valor del arreglo, escribe el nombre del arreglo y dentro de corchetes la posición de la celda del arreglo. El siguiente programa lee un arreglo de números enteros y encuentra el mayor y me- nor elemento. El máx de elementos es 100 pero solo ingresa n elementos. //Programa para hallar el mayor y menor elemento de un arreglo #includeiostream #include “LecturaDatos.h” #define MAXIMO 100 using namespace std; void leerarre(int N, int array[]) { int i; for(i=0;i=N-1;i++) { coutIngrese altura alumno A[i]:t; cinarray[i]; coutn; } } void comparar(int N, int array[]) { int i, mayor, menor; mayor=array[0]; menor=array[0]; for(i=0;i=N-1;i++) { if (array[i]mayor) mayor=array[i]; else if (array[i]menor) menor=array[i]; } coutEl mayor es :mayorn; coutEl menor es :menorn; } void main() { int A[MAXIMO]; int n; do{ coutIngrese cantidad de elementos (= a CERO y = que 100): ; n=leedatoe(); }while(n=0 || nMAXIMO); leerarre(n,A); comparar(n,A); system(PAUSE); } 2 ALGORITMOS DE ACTUALIZACIÓN Los Arreglos necesitan actualizarse mientras se efectúa algún proceso con ellos. La actualización de arreglos consiste en tres operaciones: Añadir elementos al final del arreglo (siempre y cuando exista espacio en el arreglo), Insertar elementos en UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
  • 55. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 55Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones cualquier posición del arreglo y Eliminar elementos. Añadir: Añadir un valor en la última posición. #includeiostream #include”LecturaDatos.h” #define MAX 100 using namespace std; void ingresadatos(int V[MAX], int n) { int i; coutIngrese elementos para el arreglo ; coutn; for(i=0;i=n-1;i++) { coutElemento [i]:; cinV[i]; } } void mostrar(int V[MAX], int n) { int i; coutLos elementos del arreglo son; coutn; for(i=0;i=n-1;i++) { coutElemento[i]:t; coutV[i]; coutn; } } int ultimoelemento(int a[MAX], int n) { int i,p = n; if (pMAX) { for(i=p;i=n;i++) //ingresa nuevo elemento { coutn Ingrese nuevo elemento de arreglo :t; cina[i]; } n=n+1; return n; } } void main() { int A[MAX]; int num,elem; do{ coutIngrese numero de elementos para el arreglo: ; num= leedatoee(); }while(num=0 || numMAX); ingresadatos(A,num); coutn; mostrar(A,num); coutn; elem=ultimoelemento(A, num); mostrar(A,elem); system(PAUSE); } Insertar: Insertar un valor en cualquier posición, desplazando los elementos desde la ultima celda hasta la posición que desea insertar. #includeiostream #include”LecturaDatos.h” #define MAX 100 using namespace std; void ingresadatos(int V[MAX], int n) { int i; coutIngrese elementos para el arreglo ; coutn; UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
  • 56. 56ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones for(i=0;i=n-1;i++) { coutElemento [i]:; cinV[i]; } } void mostrar(int V[MAX], int n) { int i; coutLos elementos del arreglo son; coutn; for(i=0;i=n-1;i++) { coutElemento[i]:t; coutV[i]; coutn; } } int posicion(int a[MAX], int n) { int i,p; coutn Ingrese posicion a insertar un elemento:t; p=leedatoe(); i=n-1; while (i=p) { a[i+1]=a[i]; i=i-1; } return p; } int nuevoelemento(int a[MAX],int p, int n) { int elem; coutn Ingrese nuevo elemento de arreglo a:t; elem=leedatoe(); a[p]=elem; n=n+1; return n; } void main() { int A[MAX]; int num,pos,elem; do{ coutIngrese numero de elementos para el arreglo: ; num= leedatoee(); }while(num=0 || numMAX); ingresadatos(A,num); coutn; mostrar(A,num); coutn; pos=posicion(A,num); elem=nuevoelemento(A,pos, num); mostrar(A,elem); system(PAUSE); } Eliminar: Eliminar un valor en cualquier posición, desplazando los elementos des- de la derecha del valor que se quiere eliminar. #includeiostream #include”LecturaDatos.h” #define MAX 100 using namespace std; void ingresadatos(int V[MAX], int n) { int i; coutIngrese elementos para el arreglo ; coutn; UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
  • 57. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 57Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones for(i=0;in;i++) { coutElemento [i]:; cinV[i]; } } void mostrar(int V[MAX], int n) { int i; coutLos elementos del arreglo son; coutn; for(i=0;in;i++) { coutElemento[i]:t; coutV[i]; coutn; } } int elimina(int a[MAX], int n) {int i,p; coutn Ingrese posicion a eliminar elemento de arreglo :t; p=leedatoe(); i=p; while (in) { a[i]=a[i+1]; i++; } return n-1; } void main() { int A[MAX]; int num,el; do{ coutIngrese numero de elementos para el arreglo: ; num= leedatoee(); }while(num=0 || numMAX); ingresadatos(A,num); coutn; mostrar(A,num); coutn; el=elimina(A,num); mostrar(A,el); system(PAUSE); } 3 BÚSQUEDA DE ARREGLOS UNIDIMENSIONALES La búsqueda es la recuperación de la información de los elementos de un arreglo. Para ello se necesita recorrer el arreglo y hacer uso de uno de los métodos de bús- queda de un elemento, revisaremos dos tipos: Búsqueda Secuencial y Búsqueda Binaria. A. Secuencial: recorre el arreglo celda por celda, verificando si es el elemento que se busca, usando una bandera llamada Encontrado, el cual se asume como falsa, y solo cambia a verdadera si encuentra el valor buscado, si terminado el recorrido en el arreglo, no lo encuentra, la bandera se queda en el estado de falsa. Es útil para arreglos con pocos elementos. #includeiostream #include”LecturaDatos.h” #define MAX 100 using namespace std; void ingresadatos(int V[MAX], int n) { int i; coutIngrese elementos para el arreglo ; coutn; UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
  • 58. 58ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones for(i=0;in;i++) { coutElemento [i]:; cinV[i]; } } void mostrar(int V[MAX], int n) { int i; coutLos elementos del arreglo son; coutn; for(i=0;in;i++) { coutElemento[i]:t; coutV[i]; coutn; } } void bsecuencial(int a[MAX], int n) { int elem,i; bool Encontrado = false; coutn Ingrese elemento a buscar en el arreglo :t; cinelem; for(i=0;in;i++) { if(a[i]==elem) { Encontrado=true; coutn Encontradot Posicion :titn; } } if(Encontrado==false) { coutn No Encontradot ; coutnn; } } void main() {int A[MAX]; int num; do{ coutIngrese numero de elementos para el arreglo: ; num= leedatoee(); }while(num=0 || numMAX); ingresadatos(A,num); coutn; mostrar(A,num); coutn; bsecuencial(A,num); system(PAUSE); } B. Búsqueda Binaria: Necesita que el arreglo se encuentre ordenado ascendente- mente para poder aplicar este algoritmo, que consiste en dividir el arreglo en dos partes y si la celda central es el elemento que se busca, termina el algoritmo, sino se verifica si el elemento buscado se encuentra a la derecha (mayor) o la izquierda (menor) del valor de la celda central, para solo buscar en esa porción del arreglo, volvendo a dividira esa parte en dos, y buscar un nuevo valor central, repitiendo los pasos anteriores. #includeiostream #include”LecturaDatos.h” #define MAX 100 using namespace std; void ingresadatos(int V[MAX], int n) { int i; coutIngrese elementos para el arreglo ;coutn; for(i=1;i=n;i++) { coutElemento [i]:;cinV[i]; } } void mostrar(int V[MAX], int n) UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
  • 59. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 59Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones { int i; coutLos elementos del arreglo son; coutn; for(i=1;i=n;i++) { coutElemento[i]:t;coutV[i]; } } void bbinaria(int a[MAX], int n) { int elem; int BAJO, ALTO, CENTRAL; BAJO=1; ALTO=n; coutn Ingrese elemento a buscar:t; cinelem; CENTRAL=((BAJO+ALTO)/2); while ((BAJO=ALTO) (a[CENTRAL]!=elem)) { if(elema[CENTRAL]) {ALTO=CENTRAL-1; CENTRAL=(BAJO+ALTO)/2; } else{ BAJO=CENTRAL+1; CENTRAL=(BAJO+ALTO)/2; } } if(elem==a[CENTRAL]) { coutn ENCONTRADO n; coutn a[CENTRAL] = a[CENTRAL]; coutn; } else coutn NO ENCONTRADO n ; } void main() {int A[MAX]; int num; do{ coutIngrese numero de elementos para el arreglo: ; num= leedatoee(); }while(num=0 || numMAX); ingresadatos(A,num); coutn; mostrar(A,num); coutn; bbinaria(A,num); system(PAUSE); } 4 ORDENACIÓN DE ARREGLOS UNIDIMENSIONALES Permite comparar elementos e intercambiar posiciones, ya sea en forma ascenden- te o descendente. //Ordenación por Burbuja #includeiostream #include”LecturaDatos.h” #define MAX 100 using namespace std; void ingresadatos(int V[MAX], int n) { int i; coutIngrese elementos para el arreglo ; coutn; for(i=0;in;i++) { coutElemento [i]:; cinV[i]; } UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
  • 60. 60ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones } void mostrar(int V[MAX], int n) { int i; coutLos elementos del arreglo son; coutn; for(i=0;in;i++) { coutElemento[i]:t; coutV[i]; coutn; } } void burbuja(int a[MAX], int n) { int i,j,temp; for(i=0;in-1;i++) for(j=n-1;j=i+1;j--) if (a[j]a[j-1]) { temp=a[j]; a[j]=a[j-1]; a[j-1]=temp; } } void main() {int A[MAX]; int num; do{ coutIngrese numero de elementos para el arreglo: ; num= leedatoee(); }while(num=0 || numMAX); ingresadatos(A,num); coutnn; burbuja(A,num); mostrar(A,num); system(PAUSE); } Diagrama Objetivos Inicio Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones ACTIVIDAD N° 1 Esta actividad puede consultarla en su aula virtual. UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
  • 61. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 61Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones TEMA N° 3: ARREGLOS BIDIMENSIONALES 1 DEFINICIÓN DE ARREGLOS BIDIMENSIONALES. También llamado matrices, es un conjunto finito y ordenado de elementos de un mismo tipo de dato. La definición de un arreglo es como sigue: TipoDato NombreMatriz[n°filas][nºcolumnas] Ejemplo: Entero M[4][5] //Lectura y Presentación de Datos en una Matriz: #includeiostream #include”LecturaDatos.h” #define MAX 100 using namespace std; void ingresadatos(int M[MAX][MAX], int nf,int nc) { int i,j; coutIngrese elementos para la matriz ; coutn; for(i=0;i=nf-1;i++) for(j=0;j=nc-1;j++) { coutElemento [i][j]:; cinM[i][j]; } } void mostrar(int M[MAX][MAX], int nf, int nc) { int i,j; coutLos elementos de la matriz son; coutn; for(i=0;i=nf-1;i++) {for(j=0;j=nc-1;j++) { coutM[i][j]; coutt; } coutn; } } void main() { int B[MAX][MAX]; int nf,nc; do{ coutIngrese numero de filas: ; nf= leedatoee(); }while(nf=0 || nfMAX); do{ coutIngrese numero de columnas: ; nc= leedatoee(); }while(nc=0 || ncMAX); ingresadatos(B,nf,nc); coutn; mostrar(B,nf,nc); coutn; } UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
  • 62. 62ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones //Diagonal Principal y Diagonales de una matriz ….. //Se entiende que se realizan los procedimientos de lectura de datos void diagonal_principal(int M[MAX][MAX], int nf, int nc) { int i,j; if(nf==nc) { for(i=0;i=nf-1;i++) { for(j=0;j=nc-1;j++) if(i==j) { coutn; coutM[i][j]n; } else cout ; coutn; } } else {coutColumnas y filas deben ser iguales; coutnn; } } void diagonalsecundaria(int M[MAX][MAX], int nf, int nc) { int i,j,k; k=nc-1; if(nf==nc) { for(i=0;inf;i++) { for(j=0;jnc;j++) if(j == k) { coutM[i][j]; } else coutt; k--; coutn; } } else { coutPara la Diagonales: columnas y filas deben ser iguales; coutnn; } } void diagonales(int M[MAX][MAX], int nf, int nc) { int i,j,k; k=nc-1; if(nf==nc) { for(i=0;i=nf-1;i++) { for(j=0;j=nc-1;j++) if(i==j || j==k) { coutn; coutM[i][j]n; } else {cout ;} k- -; coutn; } } UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
  • 63. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 63Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones else { coutColumnas y filas deben ser iguales; coutnn; } } void main() { int B[MAX][MAX]; int nf,nc; do{ coutIngrese numero de filas: ; nf= leedatoee(); }while(nf=0 || nfMAX); do{ coutIngrese numero de columnas: ; nc= leedatoee(); }while(nc=0 || ncMAX); ingresadatos(B,nf,nc); coutn; mostrar(B,nf,nc); coutn; coutLos elementos de la diagonal Principal: n; diagonal_principal(B,nf,nc); coutn; coutLos elementos de las diagonales : n; diagonales(B,nf,nc); coutn; system(PAUSE); } 2 ALGORITMOS DE ACTUALIZACIÓN 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{ coutIngrese posicion para insertar fila: ; cinpos; }while(pos0 || posnf); for(i=nf-1;i=pos;i--) for(j=0;j=nc-1;j++) M[i+1][j]=M[i][j]; for(j=0;j=nc-1;j++) { coutM[pos][j] : ; cinM[pos][j]; } nf++; return nf; } int insertar_columna(int M[MAX][MAX], int nf, int nc) {int i,j,pos; do{ coutIngrese posicion para insertar columna: ; cinpos; }while(pos0 || posnc); for(i=0;i=nf-1;i++) for(j=nc-1;j=pos;j--) M[i][j+1]=M[i][j]; for(i=0;i=nf-1;i++) { coutM[i][pos] : ; cinM[i][pos]; } nc++; return nc; } UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
  • 64. 64ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones void main() { int B[MAX][MAX]; int nf,nc,fil,col; do{ coutIngrese numero de filas: ; nf= leedatoee(); }while(nf=0 || nfMAX); do{ coutIngrese numero de columnas: ; nc= leedatoee(); }while(nc=0 || ncMAX); ingresadatos(B,nf,nc); coutn; mostrar(B,nf,nc); coutn; coutInserta fila: n; fil=insertar_fila(B,nf,nc); coutn; coutMatriz Inicial con fila insertada; mostrar(B,fil,nc); coutn; coutInserta columna: n; col=insertar_columna(B,nf,nc); coutn; coutMatriz Inicial con columna insertada; mostrar(B,nf,col); coutn; system(PAUSE); } //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{ coutIngrese posicion para borrar fila: ; cinpos; }while(pos0 || pos=nf); for(i=pos;i=nf-1;i++) for(j=0;j=nc-1;j++) M[i][j]=M[i+1][j]; nf--; return nf; } int borrar_columna(int M[MAX][MAX], int nf, int nc) { int i,j,pos; do{ coutIngrese posicion para insertar columna: ; cinpos; }while(pos0 || pos=nc); for(i=0;i=nf-1;i++) for(j=pos;j=nc-1;j++) M[i][j]=M[i][j+1]; nc- -; return nc; } void main() { int B[MAX][MAX] nf,nc,fil,col; do{ coutIngrese numero de filas: ; nf= leedatoee(); }while(nf=0 || nfMAX); do{ coutIngrese numero de columnas: ; UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
  • 65. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 65Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones nc= leedatoee(); }while(nc=0 || ncMAX); ingresadatos(B,nf,nc); coutn; mostrar(B,nf,nc); coutn; coutElimina fila: n; fil=borrar_fila(B,nf,nc); coutn; coutMatriz Inicial con fila eliminada; mostrar(B,fil,nc); coutn; coutElimina columna: n; col=borrar_columna(B,nf,nc); coutn; coutMatriz Inicial con columna eliminada; mostrar(B,nf,col); coutn; system(PAUSE); } Diagrama Objetivos Inicio Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones ACTIVIDAD N° 2 Esta actividad puede consultarla en su aula virtual. Diagrama Objetivos Inicio Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones LECTURA SELECCIONADA N° 1 ARRAYS MULTIDIMENSIONALES Jesús Carretero Pérez. García Carballena, Felix. Pérez Lobato José, 2007, Fundamentos de Programación. Pág. 196 Hasta ahora se ha trabajado con vectores de una única dimensión, llamados arrays uni- dimensionales. Pero el lenguaje de programación C también permite definir arrays de varias dimensiones. Suponga que se desea almacenar las temperaturas de un punto geográfico durante un año, minuto a minuto. Para este problema, se podría usar la siguiente definición: float temperaturas [366][24][60]; En ella encontramos: • Float es el tipo de dato de cada elemento. • Temperaturas es el nombre de la variable utilizada para el array multidimensional; • [366][24][60] indica el número de elementos del array en cada dimensión. La pri- mera dimensión tiene un total de 366 elementos, la segunda 24 y la tercera 60. La primera dimensión está junto al nombre de la variable. Aunque el ejemplo presenta tres dimensiones, podrían definirse muchas más. Lo habi- tual es usar dos y tres dimensiones. Si un array unidimensional se conoce como vector, un array bidimensional se denomina matriz. UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
  • 66. 66ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones Inicialización y acceso a un array multidimensional Considere ahora la siguiente definición de una matriz de 4 filas y 2 columnas: int matriz[4][2]; Si se conocen los valores de la matriz, se puede inicializar de forma similar a un array: int matriz[4][2]= { {11,12}, {21,22}, {31,32}, {41,42}, }; Para acceder al segundo elemento de la tercera fila se utiliza la siguiente expresión: matriz[2][1] Como se muestra en la figura 8.5, el índice de una dimensión toma valores de la misma manera que lo hace un vector: desde cero hasta el número de elementos menos uno. Distribución de los índices de una matriz. Un array multidimensional también es descrito como un array de arrays de ... Más concretamente, la variable matriz es un array de cuatro elementos. matriz[0] ,…, matriz[3] cuyos elementos son a su vez arrays de dos elementos cada uno matriz[i][0] ,…, matriz[i][1] para i de 0 a 3. En un array multidimensional de n dimensiones, los elementos de la última dimensión, que forman un vector, se almacenan siempre en memoria consecutivamente. En el caso de una matriz (n=2), esto significa que los valores se almacenan por filas, a di- ferencia de otros lenguajes de programación como FORTRAN donde se almacenan por columnas. En la siguiente figura se muestra de forma gráfica como todos los elementos de una misma fila se almacenan consecutivamente. Disposición de matriz en memoria. UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
  • 67. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 67Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones Diagrama Objetivos Inicio Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones GLOSARIO DE LA AUNIDAD II Celda: es un espacio de memoria dentro de un arreglo, y si es bidimensional es referen- ciado por fila y columna que ocupe. Dimensión: es el conjunto de elementos que puede tener un arreglo, y puede ser desde una dimensión hasta n dimensiones. Objetivos Inicio os Actividades Autoevaluación s Glosario Bibliografía o Anotaciones BIBLIOGRAFÍA DE LA UNIDAD II Carretero Pérez, Jesús. García Carballena, Felix. Pérez Lobato José. Fundamentos de Programación. 1ra. ed. España: Thomson; 2007. Joyanes Aguilar, Luis. Fundamentos de Programación. 4ta. ed. España: McGraw-Hill; 2008. Lazo Aguirre Walter, programaciòn estructurada en C. problemas resueltos. Universi- dad Privada Antenor Orrego, 1995 Objetivos Inicio s Actividades Autoevaluación s Glosario Bibliografía o Anotaciones AUTOEVALUACIÓN DE LA UNIDAD II INSTRUCCIONES: Lee detenidamente y responde las siguientes preguntas: 1. Indique la alternativa que describa la característica de una estructura de datos estática: a) Necesita definir los valores antes de ejecutar el programa. b) No necesita definir un tamaño antes de ejecutar el programa. c) Necesita mostrar los valores antes de ejecutar el programa. d) Necesita definir un tamaño antes de ejecutar el programa. e) Necesita definir un tamaño después de ejecutar el programa. 2. Los tipos de datos: entero, real, cadena; pertenecen a la siguiente clase de estructu- ras de datos: a) Estructuras de Datos Simple No Estándar. b) Estructuras de Datos Compuesta Estática. c) Estructuras de Datos Simple Estándar. d) Estructuras de Datos Dinámica Lineal. e) Estructuras de Datos Dinámica No Lineal. 3. Indique la alternativa que contenga tres características de un arreglo: a) Homogéneo, Infinito, Secuencial. b) Homogéneo, Finito, Secuencial. c) Heterogéneo, Finito, Secuencial. d) Heterogéneo, Infinito, Secuencial. e) Homogéneo, Finito, No Secuencial. 4. En un arreglo unidimensional, se añade un elemento al final considerando: a) Que se elimine el último elemento. b) Que no importa que exceda el tamaño definido. UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
  • 68. 68ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones c) Que se elimine el primer elemento. d) Que no se exceda el tamaño definido. e) Que se exceda a la cantidad ingresada. 5. Para asignar directamente un valor de una posición 2 de un arreglo A, a otra posi- ción 5 de un arreglo B, se escribe: a) B[5] = A[2]; b) B[2] = A[5]; c) A[5] = B[2]; d) A[2] = B[5]; e) B[5] = A[5]; 6. Para mostrar los elementos de la diagonal principal de una matriz, el algoritmo ne- cesita evaluar: a) Que la posición de fila y columna no sean iguales. b) Que la posición de una variable auxiliar y la de columna sean iguales. c) Que la posición de una variable auxiliar y la de columna no sean iguales. d) Que la posición de una variable auxiliar y la de fila sean iguales. e) Que la posición de fila y columna sean iguales. 7. Para insertar una nueva fila en una matriz, el algoritmo inserta los valores: a) Por fila desde la posición 0 hasta número de fila-1. b) Por columna desde la posición 0 hasta número de columna-1. c) Por fila desde la posición 0 hasta número de fila+1. d) Por columna desde la posición 0 hasta número de columna+1. e) Por columna desde la posición columna-1 hasta posición 0. 8. Indique lo que realiza la línea siete (línea 7.) del código para desplazar a la derecha, en una operación de inserción de elementos en un arreglo unidimensional: 1. int posicion(int a[MAX], int n) 2. { int i,p; 3. coutn Ingrese posicion a insertar un elemento:; 4. cinp; 5. i=n-1; 6. while (i=p) 7. { a[i+1]=a[i]; 8. i=i-1; 9. } 10. return p; 11. } a) Asigna el valor de la posición i, incrementando la variable i. b) Asigna el valor de una posición más de i, en la posición i. c) Asigna el valor de una posición incrementada de i. d) Asigna el valor de una posición más de i, incrementando la variable i. e) Asigna el valor de la posición i, en una posición más. 9. Indique lo que realiza la línea nueve (línea 9.) del código para la operación de eli- minación de elementos en una columna un arreglo bidimensional: UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
  • 69. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 69Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones 1. int borrar_columna(int M[MAX][MAX], int nf, int nc) 2. { int i,j,pos; 3. do{ 4. coutIngrese posicion para insertar columna: ; 5. cinpos; 6. }while(pos0 || pos=nc); 7. for( i=0;i=nf-1;i++) 8. for( j=pos;j=nc-1;j++) 9. M[ i ][ j ]=M[ i ][ j + 1 ]; 10. nc- -; 11. return nc; 12. } a) Asigna el valor de la columna actual más uno, en una fila más uno. b) Asigna el valor de la columna actual más uno, en la columna actual. c) Asigna el valor de la columna actual, en una columna más uno. d) Asigna el valor de la fila actual, en una fila más uno. e) Asigna el valor de la fila actual más uno, en la fila actual. 10. Dado el siguiente bloque de código para búsqueda binaria en una arreglo unidi- mensional, indique la alternativa que es correcta: void bbinaria(int a[MAX], int n) { int elem; int BAJO, ALTO, CENTRAL; BAJO=0; ALTO=n-1; coutn Ingrese elemento a buscar:t; cinelem; CENTRAL=((BAJO+ALTO)/2); while ((BAJO=ALTO) (a[CENTRAL]!=elem)) { if(elema[CENTRAL]) {ALTO=CENTRAL-1; CENTRAL=(BAJO+ALTO)/2; } else{ BAJO=CENTRAL+1; CENTRAL=(BAJO+ALTO)/2; } } if(elem==a[CENTRAL]) { coutn ENCONTRADO n; coutn a[CENTRAL] = a[CENTRAL]; } else coutn NO ENCONTRADO n ; } a) Para ejecutar el algoritmo de búsqueda binaria, no es necesario que el arreglo se encuentre ordenado, y solo se puede usar con valores numéricos. b) En el algoritmo, el valor de la variable CENTRAL es la que determina si se sigue buscando al valor requerido en un sector del arreglo, o si es que se detiene la búsqueda. c) Los valores de las variables BAJO y ALTO, pueden ser inicializadas con valores decimales, como posición dentro de un arreglo unidimensional. d) En la última sentencia selectiva compuesta del algoritmo, se asigna el valor de la variable “elem” como valor para la posición central del arreglo. e) La posición CENTRAL es un valor decimal de (BAJO + ALTO) /2. UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
  • 70. 70
  • 71. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 71Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones Diagrama Objetivos Inicio Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL Diagrama Objetivos Inicio Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones DIAGRAMA DE PRESENTACIÓN DE LA UNIDAD ORGANIZACIÓN DE LOS APRENDIZAJES CONOCIMIENTOS PROCEDIMIENTOS ACTITUDES Tema Nº 1: Registro (Estructu- ra) y Unión 1. Definición de Registro (Es- tructura) 2. Módulos y Estructuras 3. Invocación de una Estructura en Otra 4. Definición de Unión: Ejem- plo Práctico Tema Nº 2: Tipos de Datos Abs- tractos (TDA) 1. Definición de TDA 2. Clases y Programación Orien- tada a Objetos Tema Nº 3: Puntero a Dirección de Memoria 1. Definición de Puntero a Di- rección de Memoria 2. Creación y Eliminación de Variables Dinámicas Lectura Seleccionada N° 1 Introducción al enfoque OOP – Rosalía Laza Fidalgo. Baltasar García Pérez-Shofield Tema Nº 4: Estructuras de Datos Dinámicas Lineal 1. Listas Enlazadas: Simple, Do- ble, Circular 2. Colas y Pilas Autoevaluación de la Unidad III 1. Aplica los algoritmos de crea- ción de estructura y unión en la construcción de programas 2. Conoce los fundamentos de la programación orientada a objetos 3. Implementa Clases como tipo de dato abstracto 4. Conoce la aplicación de los punteros a direcciones de me- moria en la construcción de programas de estructuras de datos dinámicas 5. Aplica los algoritmos creación y manipulación de datos con los diferentes tipos de listas enlazadas, colas y pilas en la construcción de programas Actividad N° 1 Elaboración de Programas usan- do registros y clases. Elabora- ción de informe sobre Aplicacio- nes de Punteros a Dirección de Memoria Actividad N° 2 Elaboración de Programas usan- do algoritmos para estructuras de lista simple, doble, circular Control de Lectura Nº 2 Estructuras de Datos Dinámicas Lineal 1. Asume con responsabilidad sus actividades académicas asignadas 2. Realiza con honestidad las eva- luaciones asignadas CONTENIDOS AUTOEVALUACIÓN LECTURAS SELECCIONADAS BIBLIOGRAFÍA ACTIVIDADES
  • 72. 72ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones TEMA N° 1: REGISTRO (ESTRUCTURA) Y UNIÓN 1 DEFINICIÓN DE REGISTRO (ESTRUCTURA) Como Ud. ha podido notar, en los arreglos unidimensionales y bidimensionales, los valores que se pueden ingresar son del mismo tipo de dato, pero en realidad se ne- cesitará almacenar mas datos de diferentes tipos de datos, por lo que recurriremos en esta unidad a otras estructuras que nos lo permitan, como el STRUCT o también llamado registro que es un tipo definido por el usuario en base a otros tipos de datos. Ejemplo: JUAN 19 1.73 `M´ nombre edad talla sexo (cadena) (int) (float) (char) Otra forma gráfica, según el tamaño del tipo de dato, ocupado en memoria: Registro: Persona Figura Nro 13: Ejemplo de un Registro: Persona. (Elaboración personal) Cada componente de la estructura se denomina campo. Declaración: Un ejemplo de programa usando a la estructura con nombre de variable, el cual ya no necesita crear una variable en el Módulo Principal: UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
  • 73. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 73Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones #includeiostream using namespace std; struct{ int dia; int mes; long int anual; }hoy; void main( ) { coutIngrese dia: t; cinhoy.dia; coutIngrese mes: t; cinhoy.mes; coutIngrese anno: t; cinhoy.anual; couthoy.dia / hoy.mes / hoy.anual; coutn; system(PAUSE); } Un ejemplo de programa usándolo como nombre de estructura, donde se necesita de crear una o más variables en el Módulo Principal: #includeiostream using namespace std; struct direccion{ char nombre[30]; char calle[30]; int num; char ciudad[30]; }; void main( ) { direccion oficina, casa; coutDatos Oficina;coutn; coutIngrese su nombre: t; cinoficina.nombre; coutIngrese calle: t; cinoficina.calle; coutIngrese num calle: t; cinoficina.num; coutIngrese ciudad: t; cinoficina.ciudad; coutn; coutoficina.nombre-oficina.calle-oficina. num-oficina.ciudad; coutn; coutn; coutDatos Casa;coutn; coutIngrese su nombre: t; cincasa.nombre; coutIngrese calle: t; cincasa.calle; coutIngrese num calle: t; cincasa.num; coutIngrese ciudad: t; cincasa.ciudad; coutn; coutcasa.nombre---casa.calle---casa.num--- casa.ciudad; system(PAUSE); } UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
  • 74. 74ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones Es decir, Ud. puede crear estructuras con typedef, de la siguiente manera: struct domicilio{ char nombre[30]; char calle[30]; int num; char ciudad[20]; }; typedef struct domicilio; void main( ) { domicilio Oficina, casa; } Se puede hacer todo lo anterior de esta forma (de- finiendo la estructura y creando el tipo a la vez): typedef struct{ char nombre[25]; char apellidos[50]; char dni[10]; int edad; }Persona; void main( ) { Persona individuo; } b. Asignación de estructuras #includeiostream #includestring using namespace std; typedef struct{ char nombre[25]; char apellidos[50]; int edad; } Persona; void main( ) { Persona per1,per2; strcpy(per1.nombre,Pepe); strcpy(per1.apellidos,Villegas Varas); per1.edad=12; per2=per1; // Asignación de estructuras coutn ---- Reporte de Datos de Pepe ----n; coutper1.nombre;coutn; coutper1.apellidos;coutn; coutper1.edad;coutn; coutn ---- Reporte de Datos de Jaime ----n; coutper2.nombre;coutn; coutper2.apellidos;coutn; coutper2.edad;coutn; } 2 MÓDULOS Y ESTRUCTURAS Se pueden usar los módulos de programa para operar los datos de una estructura o registro. El ejemplo dado a continuación, usa el módulo subirEdad, que recibe todos los campos de la estructura Persona, en una variable denominada pers. #includeiostream #includestring using namespace std; typedef struct{ char nombre[25]; UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
  • 75. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 75Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones char apellidos[50]; int edad; } Persona; void subirEdad(Persona pers) { pers.edad++; coutpers.edad;coutn; } void main() { Persona alumno; strcpy(alumno.nombre,Pepe); strcpy(alumno.apellidos,Villegas Varas); alumno.edad=12; coutn ---- Reporte de Datos de Pepe ----n; cout alumno.nombre;coutn; cout alumno.apellidos;coutn; cout alumno.edad;coutn; coutn ---- Reporte de Nuevos Datos de Pepe ----n; cout alumno.nombre;coutn; cout alumno.apellidos;coutn; subirEdad(alumno); // Invoca al módulo procedimiento } 3 INVOCACIÓN DE UNA ESTRUCTURA EN OTRA Una estructura puede ser usada dentro de otra estructura, como un tipo de dato de uno de sus campos. Ejemplo: una estructura para fecha con día, mes y año creada antes de la estructura persona, la cual se invocará con la variable inscrito y tiene nombres, apellidos, nacimiento (que es del tipo fecha), y sexo. #includeiostream #includestring #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; coutnn-----Ingrese datos----- nn; coutIngrese nombre t; cininscrito.nombres; coutIngrese apellidos t; cininscrito.apellidos; UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
  • 76. 76ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones coutnn-----Fecha de Nacimiento----- nn; coutIngrese dia t; cininscrito.fnacimiento.dia; coutIngrese mes t; cininscrito.fnacimiento.mes; coutIngrese a¤o t; cininscrito.fnacimiento.anual; coutIngrese sexo t; cininscrito.sexo; coutnn----Los Datos ingresados fueron----- nn; coutinscrito.nombresn; coutinscrito.apellidosn; coutinscrito.fnacimiento.dian; coutinscrito.fnacimiento.mesn; coutinscrito.fnacimiento.anualn; coutinscrito.sexonn; } 4 DEFINICIÓN DE UNIÓN: EJEMPLO PRÁCTICO. Son a primera vista, entidades muy similares a las estructuras, están formadas por un número cualquiera de miembros, al igual que aquellas, pero en éste caso no existen simultáneamente todos los miembros, y sólo uno de ellos tendrá un valor válido. A diferencia de la Estructura, esta es una localidad de memoria que se utiliza para compartir datos de diferentes tipos. Ejemplo: A continuación se muestra un ejemplo práctico, donde se crea la unión denomi- nada dato, dentro de la estructura tabla, y dependiendo si se selecciona ingresar el tipo cadena, solo se usa el espacio de la variable char cadena[5] y ya no se necesita ingresar en la variable int entero, y viceversa. Mientras que en una estructura, se necesita ingresar datos a todas las variables definidas en ella. #includeiostream using namespace std; struct tabla{ char nombre[30]; char tipo; union { char cadena[5]; UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
  • 77. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 77Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones int entero; } dato; }; void main() { tabla tb; coutIngrese nombre de tabla: ; cintb.nombre; coutIngrese tipo: ; cintb.tipo; if(tb.tipo == 'c') { coutIngrese cadena: ; cintb.dato.cadena; coutLa cadena es: ; couttb.dato.cadena; coutEl entero es: ; couttb.dato.entero; } else if(tb.tipo == 'e') { coutIngrese entero: ; cintb.dato.entero; coutEl entero es: ; couttb.dato.entero; coutLa cadena es: ; couttb.dato.cadena; } else coutERROR.; } TEMA N° 2: TIPOS DE DATOS ABSTRACTOS (TDA) 1 DEFINICIÓN DE TDA Es un tipo de dato definido por el programador, que consta de datos y operaciones. Ejemplo: clases, listas, pilas, colas. TDA = Representación (datos) + Operaciones (funciones y procedimientos) class alumno { private: string nombre; string carrera; public: alumno(); ~alumno(); void ingresar(); void imprimir(); }; alumno nombre carrera ingresar imprimir UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
  • 78. 78ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones 2 CLASES Y PROGRAMACIÓN ORIENTADA A OBJETOS En esta asignatura, no se pretende explicar todo lo que respecta a la programación orientada a objetos, solo veremos los conceptos y técnicas necesarias que nos ayu- den y faciliten la creación de algoritmos de estructuras dinámicas, mas adelante. Esta es una técnica o estilo de programación basada en elementos básicos llamados objetos y clases y contempla cinco fundamentos: Herencia, Jerarquía, Encapsula- miento, Polimorfismo y Mensajes. Objeto: entidad que se caracteriza por determinados atributos: datos miembro y funciones miembro. Clase: colección de objetos con atributos y funciones comunes. OBJETOS CLASE Figura Nro 14: Ejemplo Objetos y Clase. (Elaboración personal) Se puede decir entonces, que el objeto es el valor (instancia) de una clase, y la clase es un conjunto de objetos que tienen los mismos datos y responsabilidades. En lenguaje C/C++, una clase se declara: 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 miembros pueden ser definidos como private o public. • private: sólo pueden ser accedidos desde funciones miembro. • public: pueden ser accedidos directamente, sin utilizar funciones miembro. Usualmente se debe declarar los datos miembro tipo private y las funciones miem- bro tipo public. UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
  • 79. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 79Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones Para acceder desde fuera del objeto a sus datos públicos y funciones miembro públicas escribe. nombre del objeto . dato miembro nombre del objeto . función miembro Constructor: Un constructor es una función miembro que permite inicializar los datos miembros de un objeto. Tiene las siguientes características: - Su nombre es igual al de la clase. - No devuelve valores. - Puede haber más de un constructor. - Se invoca al momento de declarar al objeto. Destructor: Un destructor es una función que permite liberar el área de memoria ocupada por un objeto cuando este ya no va ser usado .Sus características son: - Su nombre es igual al de la clase pero precedido por el símbolo “ ~ ”. - No devuelve valores. - Sólo puede haber un destructor. - Se invoca al momento de salir o abandonar el ámbito donde fue creado el objeto. A continuación, se muestra un ejemplo de programa, donde se crea la clase alum- no, con sus datos nombre, carrera y sus responsabilidades ingresar e imprimir; ade- más de su respectivo constructor y destructor de clase. #include iostream #include string using namespace std; class alumno { private: string nombre; string carrera; public: alumno(); //constructor de clase ~alumno(); //destructor de clase void ingresar(); void imprimir(); }; alumno::alumno() { nombre= ; carrera= ; } alumno::~alumno() { } void alumno::ingresar() { coutIngrese nombre: ; cinnombre; coutIngrese carrera: ; cincarrera; } void alumno::imprimir() { coutNombre Alumno: ; coutnombren; coutCarrera: ; UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
  • 80. 80ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones coutcarreran; } void main() { alumno al; coutIngrese Alumno;coutn; al.ingresar();coutn; coutMostrar Alumnon; al.imprimir();coutnn; coutEliminar Alumnon; al.~alumno();coutn; coutMostrar Alumnon; al.imprimir();coutn; system(PAUSE); } TEMA N° 3: PUNTERO A DIRECCIÓN DE MEMORIA 1 DEFINICIÓN DE PUNTERO A DIRECCIÓN DE MEMORIA Un puntero es un tipo especial de variable, que almacena el valor de una dirección de memoria, Los punteros, también pertenecen a un tipo, se dice que un puntero 'apunta a' ese tipo al que pertenece. MEMORIA DEL COMPUTADOR p es una variable tipo puntero. x es una variable tipo entero (int), apuntada por p. Entonces: 23, es el valor entero de la variable x, y 800 es la dirección de memoria de la variable x, que es almacenada (apuntada) por la variable puntero p. a. Declaración 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 notación: *variable tipo puntero En el ejemplo anterior, *p hace referencia a la variable x, es decir: UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
  • 81. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 81Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones int *p; // p: variable puntero que hace referencia (apunta) a la variable x int x; // x es la variable entero, apuntado por p (*p es otro nombre para la variable x) NOTA: Variables estáticas: Son aquellas que se declaran expresamente en los programas y a las que el sistema operativo asigna una posición de memoria antes de la ejecución del mismo. Variables dinámicas: Son variables que se crean y se destruyen durante la ejecución del programa. No son declaradas explícitamente en los programas. Operador de Dirección (): Devuelve la dirección de memoria de una variable. Su sintaxis es: nombre de variable Operador de Indirección (*): Devuelve el valor almacenado en una variable apun- tada por una variable puntero. Su sintaxis es: * variable puntero Ejemplo: #include iostream using namespace std; void main () { int x,y; // Variables de tipo entero int *p; // Puntero a una variable de tipo entero // Leemos la dirección de la variable x mediante // y lo almacenamos en la variable puntero p p = x; // p contiene la dirección en la que se encuentra x // Utilizando el operador *, podemos acceder a la información en x. // *p representa ahora el valor de la variable x *p = 10; // Ahora x contiene el valor 10 coutx;coutn; // Visualiza si x tiene el valor que recibió su puntero p cout*p;coutn; // Visualiza el valor de x, apuntada por p y = 15; // Si ahora hacemos que el puntero p apunte a la variable y, utilizando el operador p = y; coutyn; //Visualiza el valor de y // El valor que ahora toma *p será el valor de y, // ya que es la vaariable que ahora se apunta *p = 125; // Ahora y contiene el valor 125 x = *p; // Ahora x contiene también 125 coutyn; //visualiza el nuevo valor de y coutxn; //visualiza el nuevo valor de x cout*pn; //Visualiza el valor de y UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
  • 82. 82ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones coutxn; //visulaiza la direccion de memoriade x coutpn; //visualiza la direccion de memoria de y } 2 CREACIÓN Y ELIMINACIÓN DE VARIABLES DINÁMICAS Creación de variables dinámicas Para crear variables dinámicas se usa el objeto new cuya sintaxis es la siguiente: variable de tipo puntero = new tipo de dato de la variable creada ; Ejemplo: int *p; float *q; p = new int; //crea una variable dinámica de tipo int, p apunta a ella. q = new float; // crea una variable dinámica de tipo float, q apunta 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 de asignación cinp; // ERROR de ingreso Un ejemplo de creación y asignación, correctas: int *p, *q; p = new int; q = new int; *p = 8; *q = *p; - No se puede asignar una variable tipo puntero a otra que no sea de su mismo tipo. int *p, *q; float *r; p = new int; *p = 7; r = p; // ERROR de asignación Eliminación de variables dinámicas delete variable tipo puntero que apunta a la variable dinámica que será eliminada ; Se libera el espacio ocupado por la variable dinámica para poder ser utilizado nue- vamente. void main() { int *p; p = new int; *p = 17; coutp; UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
  • 83. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 83Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones delete p; coutp; } 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; coutp; delete p; coutp; p = NULL; coutp; } Diagrama Objetivos Inicio Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones ACTIVIDAD N° 1 Esta actividad puede consultarla en su aula virtual. UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
  • 84. 84ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones TEMA N° 4: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL 1 LISTAS ENLAZADAS: SIMPLE, DOBLE, CIRCULAR Una lista enlazada es una estructura de datos dinámica formada por un conjunto de elementos llamados nodos. Cada nodo consta de dos partes: - Una que contiene el (los) dato(s). - Otra que contiene la dirección del siguiente nodo. Ejemplo de Nodo con un dato: Los nodos son variables dinámicas que se crean y destruyen de acuerdo a los reque- rimientos del proceso. - Para acceder a la lista es necesario un puntero que contenga la dirección del primer nodo. - Si la lista está vacía dicho puntero tendrá el valor NULL. - El último elemento de la lista se reconoce porque su puntero al siguiente tiene valor NULL. Representación con Direcciones de Memoria de una Lista Enlazada (usamos direc- ciones de memoria en hexadecimal, ejemplo: AF01) Recodando que Lista (más adelante lo llamamos pL, es decir puntero a Lista) tam- bién es un nodo, pero que sirve para guardar la dirección de memoria del primer nodo de la lista. Representación Gráfica de una Lista Enlazada, es decir Lista apunta (tiene la direc- ción de memoria del primer nodo) al primer nodo con valor 12, y éste apunta al siguiente nodo con valor 30 y así sucesivamente hasta que el último nodo con valor 54 apunta a NULL porque ya no hay nodos. a. Lista Enlazada Simple Es un conjunto de elementos en los que cada elemento contiene la posición o di- rección del siguiente campo de la Lista. Donde cada elemento de la lista simplemente enlazada llamado nodo se define: struct nodo{ UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
  • 85. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 85Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones int n; //puede tener mas campos: string, float, estructura, etc. nodo *sig; // puntero de dirección al siguiente nodo }; ListasSE.h #include iostream #include string #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_ buscar_parainsertadespues (int x); 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() UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
  • 86. 86ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones { pnodo nuevo; int valor; coutIngrese dato:; cinvalor; nuevo = new nodo; (*nuevo).dato = valor; (*nuevo).sig = pL; pL = nuevo; } void lista::insertar_final() { pnodo nuevo,aux; int valor; nuevo = new nodo; coutIngrese dato:; cinvalor; (*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; coutIngrese dato; cin(*nuevo).dato; coutIngrese dato despues del nodo con valor: ; cinnum; r=lista::buscar_parainsertadespues (num); if(r==NULL) coutLista vacia o no se encontro; else { temp=(*r).sig; if(temp!=NULL) { (*r).sig=nuevo; (*nuevo).sig=temp; } else { (*nuevo).sig=NULL; (*r).sig=nuevo; } } } void lista::buscar() { pnodo pos; int valor, ban=0; coutIngrese dato:; cinvalor; if ( pL == NULL ) UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
  • 87. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 87Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones { coutLISTA VACIA; pos=NULL; } else { pos = pL; while ( pos != NULL) { if((*pos).dato != valor) { pos = (*pos).sig; ban=1; } else { ban=0; break; } } if(ban==0) {coutENCONTRADO; } else {coutNO ENCONTRADO; } } } pnodo lista::buscar_parainsertadespues(int valor) { pnodo pos; int ban=0; if ( pL == NULL ) { coutLISTA VACIA; pos=NULL; } else { pos = pL; while ( pos != NULL) { if((*pos).dato != valor) { pos = (*pos).sig; ban=1; } else { ban=0; break; } } if(ban==0) {coutENCONTRADO; } else {coutNO ENCONTRADO; } } return pos; } void lista::eliminar_inicio() { pnodo aux; if(pL==NULL) { coutlista vacia; } else { aux=pL; if((*pL).sig==NULL) // un nodo { pL=NULL; } UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
  • 88. 88ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones else { pL=(*pL).sig; } coutelemento eliminado(*aux).dato; delete aux; } } void lista::eliminar_final() { pnodo aux=pL,temp; if(pL==NULL) { coutlista vacia; } else { if((*pL).sig==NULL) { pL=NULL; } else { while((*aux).sig!=NULL) { temp=aux; aux=(*aux).sig; } (*temp).sig=NULL; } coutelemento eliminado(*aux).dato ; delete aux; } } void lista::imprimir() { pnodo p; if ( pL == NULL ) coutLista vaciaendl; else { p = pL; while (p != NULL) { cout(*p).dato - ; p = (*p).sig; } coutNULOendl; } } ListasSE.cpp #include iostream.h #include ListasSE.h using namespace std; void main() { lista L; pnodo b; int valor,opc; do { coutnmenu; coutn1 insertar al inicio; coutn2 insertar al final; coutn3 insertar despues del número; coutn4 Eliminar al inicio; coutn5 Eliminar al final; coutn6 Eliminar Lista; coutn7 Buscar en lista; UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
  • 89. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 89Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones coutn8 Visualizar lista; coutn9 Salir; do { coutn Seleccione opción; cinopc; } while(opc9); switch(opc) { case 1:L.insertar_comienzo();break; case 2:L.insertar_final();break; case 3:L.insertar_despues();break; case 4:L.eliminar_inicio();break; case 5:L.eliminar_final();break; case 6:L.~lista();break; case 7:L.buscar();break; case 8:L.imprimir();break; } } while(opc!=9); } b. Lista Enlazada Circular Simple Es un conjunto de nodos. Cada nodo es un registro que tiene dos campos: Un cam- po para almacenar información de algún tipo de dato y otro campo tipo puntero que contiene la dirección del nodo siguiente. La particularidad que presenta, es que el último nodo de la lista no contiene NULO en su campo sig sino la dirección del primer nodo, lo que le da la característica circular a la lista. Para tener acceso a la lista es necesario un puntero Lc que contenga la dirección del primer nodo. c. Lista Enlazada Doble Ees un conjunto de nodos. Cada nodo es un registro que tiene tres campos: Un campo para almacenar información de algún tipo de dato y dos campos tipo punte- ro que contienen las direcciones de los nodos anterior y siguiente respectivamente. *ant *sigdato A través de los punteros ant y sig se puede recorrer la Lista en forma bidireccional, lo cual constituye una ventaja importante frente a una lista enlazada simple que sólo puede recorrerse en un sentido. El campo ant del primer nodo tiene valor NULO, pues no existe un nodo anterior a este, análogamente, el último nodo tiene también en su campo sig el valor NULO para expresar el hecho de que no existe un siguiente nodo. UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
  • 90. 90ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones 2 COLAS Y PILAS a. 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 ele- mentos se sacan de la cola en el mismo orden en que fueron insertados. La estruc- tura de los nodos de una cola es la siguiente: sigdato 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. 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 Cola.h #include iostream 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; UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
  • 91. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 91Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones while ( p != NULL ) { q = (*p).sig; delete p; p = q; } pL=p; } } void cola::encolar() { pnodo nuevo,aux; int valor; nuevo = new nodo; coutIngrese valor:; cinvalor; (*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 cola::desencolar() { pnodo aux; if(pL==NULL) { coutcola vacia; } else { aux=pL; if((*pL).sig==NULL) // un nodo { pL=NULL; } else { pL=(*pL).sig; } coutelemento eliminado(*aux).dato; delete aux; } } void cola::mostrar() { pnodo p; if ( pL == NULL ) coutcola vaciaendl; else { p = pL; while (p != NULL) { cout(*p).dato - ; p = (*p).sig; } coutNULOendl; } } UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
  • 92. 92ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones Cola.cpp #include iostream #include Cola.h using namespace std; void main() { cola C; int opc; do { coutnmenu; coutn1 encolar; coutn2 desencolar; coutn3 mostrar; coutn4 Salir; do { coutn Seleccione opción; cinopc; } while(opc4); switch(opc) {case 1:C.encolar();break; case 2:C.desencolar();break; case 3:C.mostrar();break; } } while(opc!=4); } b. 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: sigdato Para especificar una pila es necesario un puntero, que apunte al primer elemento de la pila, es decir a la cima. En una pila sólo están 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 #includeiostream using namespace std; struct nodo { int dato; nodo *sig; UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
  • 93. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 93Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones }; 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; while ( p != NULL ) { q = (*p).sig; delete p; p = q; } pL=p; } } void stack::apilar() { pnodo nuevo,aux; int valor; nuevo = new nodo; coutIngrese dato:; cinvalor; (*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) { coutPila vacia; } else { if((*pL).sig==NULL) { pL=NULL; } else UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
  • 94. 94ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones { while((*aux).sig!=NULL) { temp=aux; aux=(*aux).sig; } (*temp).sig=NULL; } coutelemento eliminado(*aux).dato; delete aux; } } void stack::mostrar() { pnodo p; if ( pL == NULL ) coutPila vaciaendl; else { p = pL; while (p != NULL) { cout(*p).dato - ; p = (*p).sig; } coutNULOendl; } } Pila.cpp #include iostream #include Pila.h using namespace std; void main() { stack S; int opc; do { coutnmenu; coutn1 apilar; coutn2 desapilar; coutn3 mostrar; coutn4 Salir; do { coutn Seleccione opción; cinopc; } while(opc4); switch(opc) {case 1:S.apilar();break; case 2:S.desapilar();break; case 3:S.mostrar();break; } } while(opc!=4); } UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
  • 95. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 95Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones Diagrama Objetivos Inicio Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones ACTIVIDAD N° 2 Esta actividad puede consultarla en su aula virtual. Diagrama Objetivos Inicio Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones LECTURA SELECCIONADA N° 1 INTRODUCCIÓN AL ENFOQUE OOP Rosalía Laza Fidalgo. Baltasar García Pérez-Shofield, 2008, Metodología y Tecnología de la Programación. Pág. 1 Durante los últimos años, la Programación Orientada a Objetos (Object Oriented Pro- gramming, u OOP) ha tomado gran importancia. El término OOP indica más de una forma de diseño y una metodología de desarrollo que un lenguaje de programación, ya que en realidad se pueden aplicar los principios del paradigma de programación orientada a objetos (encapsulación, herencia y polimorfismo) en cualquier lenguaje de programación. A menudo se confunde la Orientación a Objetos con sistemas de ventanas, íconos y si- milares, Interfaces Gráficas de Usuario. Esto debido a que se usan técnicas orientadas a objetos para construir entornos. También es razonable pensar que todo lo programado por lenguajes orientados a objetos es OOP. Esto no es cierto, ya que incluso en un len- guaje orientado a objetos puro, es posible que un mal diseño lleve una implementación que en realidad no siga los principios de Orientación a Objetos mencionados. DE lo que se trata, en todo caso, es de, dado un problema a automatizar (“resolver” mediante una aplicación), hacer una aplicación de la mejor manera posible en todos los aspectos del desarrollo de software. Los aspectos importantes que determinan el desarrollo de software son: • Portabilidad: El software desarrollado debe funcionar independientemente del hard- ware y del entorno de funcionamiento o Sistema Operativo sobre el cual se ejecute. • Productividad: Uno de los principales objetivos es simplificar el proceso de desarro- llo de software, para lo cual es fundamental reutilizar componentes. • Mantenimiento. Constituye una de las etapas más costosas en el desarrollo de soft- ware que, por tanto, se deberá intentar optimizar todo lo posible. Es fundamental estructurar bien el programa para prever futuros cambios o modificaciones. • Calidad: A la hora de producir software, no hay que olvidar que se deben de desa- rrollar productos de calidad, dada a partir de una serie de aspectos como robustez, fiabilidad, eficiencia, flexibilidad, … Cualquier metodología de programación debe intentar producir programas portables, reducir los tiempos de desarrollo y los costes de mantenimiento, así como mejorar la calidad del producto. El paradigma de programación clásico, esto es, el estructurado, se basa en tomar un problema, y subdividirlo sucesivamente en subproblemas, hasta llegar a unos subpro- UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
  • 96. 96ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones blemas suficientemente sencillos de resolver. Los principales problemas del paradigma de programación estructurada son: • Creciente complejidad de las aplicaciones: Los requisitos cada vez más ambiciosos de las aplicaciones reflejan una sofisticación en demanda de software. • Limitaciones en la modelización de problemas no estructurados: Las actuales meto- dologías estructuradas dificultan la modelización y resolución de problemas comple- jos no estructurados. Siguiendo una metodología estructurada, los sistemas se des- componen en una jerarquía de módulos. Estos se diseñan para transformar entradas y salidas bien definidas. - Este enfoque es el más apropiado para su empleo en problemas estructurados en donde el comportamiento del software se conoce y se puede describir en base al algoritmo de transformación de datos. El software se estructura según la solución del problema en vez de enfocarlo directamente según el problema mismo. Esto puede conducir a un separación conceptual entre el problema del mundo real y su representación e implementación informática. • Difícil reutilización del software: Es normal que se construyan y reconstruyan una y otra vez módulos muy parecidos funcionalmente. Esto es debido a que la subdivisión en subproblemas en la que se basa el paradigma de programación estructurada, no supone un énfasis en que cada uno de los módulos utilizados en esos problemas sean reutilizables. Incluso en la actualidad, muchos de los intentos de crear librerías de componentes de software utilizables no han tenido mucha implantación debido sobre todo a los problemas inherentes a su reutilización. Cualquier simplificación del proceso de de- sarrollo del software para la reutilización de componentes ya implementados. • Mantenimiento difícil y costoso: El mantenimiento de las aplicaciones supone el cos- te más importante durante el ciclo de vida. Debido a la evolución que sufren todas las aplicaciones, a menudo se introducen ampliaciones y se desarrollan nuevos entornos de operación, lo cual argumenta que el mantenimiento sea una actividad esencial. Como durante el desarrollo de las aplicaciones no se han tenido en cuenta futuros cambios, es frecuente encontrar programas mal estructurados en lo cuales es difíciles la incorporación de nuevos módulos o estructuras de datos. El desarrollo de la OOP empieza a destacar durante la década de los 80, partiendo de la programación estructurada, a la vez que engloba, y dotando al programador de nuevos elementos para el análisis y desarrollo de software. Así, las metodologías orientadas a objetos pueden facilitar la producción de sistemas cada vez más complejos, permiten modelar problemas no estructurados, incrementan la productividad gracias a la reutili- zación de objetos y facilitan el mantenimiento. La orientación a objetos puede describirse como el conjunto de disciplinas que desarro- llan y modelizan software y que facilitan la construcción de sistemas complejos a partir de componentes. Su característica más importante, frente a la programación estructu- rada, es que no trata de hacer más sencillo el problema a resolver (dividiéndolo), sino que trata de simular el problema a resolver. Así, en todo problema existen una serie entidades (físicas o no) que interaccionan para resolverlo, de manera que simulando estas entidades, y su comportamiento, es posible resolver el problema en cuestión. Cada una de estas entidades es un objeto en el sistema desarrollado mediante OOP, de ahí el nombre de programación orientada a objetos. El atractivo de la orientación a objetos es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible. La OOP proporciona las siguientes ventajas sobre otros lenguajes de programación: UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
  • 97. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 97Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones • Uniformidad: la representación de los objetos lleva implícita tanto el análisis como el diseño y codificación de los mismos. Así todo el programa está compuesto de objetos que interaccionan entre sí. • Comprensión: Los programas están escritos mediante definiciones de clases, que representan las entidades que son necesarias para resolver el problema que se esté modelando. Los programas son más fáciles de comprender porque las clases mo- delan los tipos de entidades involucradas en el problema a resolver, simulando ese problema. • Flexibilidad. Al tener relacionados los procedimientos que manipulan los datos con los datos a tratar, cualquier cambio que se realice sobre ellos quedará reflejado auto- máticamente en cualquier lugar donde éstos aparezcan. • Reusabilidad. La noción de objeto permite que programas que traten las mismas es- tructuras de datos reutilicen las definiciones de clases empeladas en otros programas e incluso los procedimientos que los manipulan. De forma ideal, el desarrollo de un programa “nuevo” debería poder llegar a ser una simple combinación de objetos ya definidos en otros programas que se desarrollaron anteriormente. La OOP no sustituye a ninguna metodología ni lenguaje de programación anterior, es un enfoque distinto. Todos los programas que se realizan según los principios de la OOP se pueden realizar igualmente mediante programación estructurada, aunque de forma más costosa, puesto que los lenguajes Orientados a Objetos soportan de forma natural la OOP. A la vez, las limitaciones observadas en el paradigma de programación estructurada son eliminadas (al menos, parcialmente), ya que un lenguaje Orientado a Objetos ya fuerza e invita a emplear los principios de la OOP. Diagrama Objetivos Inicio Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones GLOSARIO Dirección de Memoria: es un identificador de una localización (ubicación) de un es- pacio de memoria del computador, generalmente nombrado por una variable para su posterior reutilización. Dato Miembro: es un atributo (información) que se crea en el ámbito de una clase. Función Miembro: es un método (responsabilidad) que se crea en el ámbito de una clase. Programación Orientada a Objetos: es el conjunto de conceptos y técnicas que tiene su fundamento en el uso de clases y objetos, para escribir programas. Objetivos Inicio os Actividades Autoevaluación s Glosario Bibliografía o Anotaciones BIBLIOGRAFÍA DE LA UNIDAD III: Joyanes Aguilar, Luis. Fundamentos de Programación. 4ta. ed. España: McGraw-Hill; 2008. Laza Fidalgo Rosalía. García Pérez-Shofield Baltasar. Metodología y Tecnología de la Programación. 1raEd. Pearson; 2008. UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
  • 98. 98ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones Diagrama Objetivos Inicio Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones AUTOEVALUACIÓN DE LA UNIDAD III INSTRUCCIONES: Lee detenidamente y responde las siguientes preguntas: 1. Indique la línea de código que se debe escribir en el recuadro en blanco y que per- mite utilizar como tipo de dato a la siguiente codificación de una estructura (struct): struct domicilio{ char nombre[30]; char calle[30]; int num; char ciudad[20]; }; void main( ) { domicilio Oficina, casa; } a) typedef struct Oficina; b) typedef casa struct; c) typedef struct domicilio; d) typedef domicilio struct casa; e) typedef struct casa; 2. Indique la definición de la estructura de datos UNION a) Es una estructura de datos secuencial unidimensional con un tamaño Máximo. b) Es una estructura de datos de diferentes tipos que solo ingresa uno de los espacios definido. c) Es una estructura de datos de diferentes tipos que ingresa todos los espacios de- finidos. d) Es una estructura de datos secuencial bidimensional con un tamaño Máximo. e) Es exactamente igual al STRUCT, no se diferencia de ninguna manera. 3. Indique las líneas de código que se debe escribir en la casilla (I) y en la casilla (II), para poder cambiar la edad de una persona según el siguiente programa: #includeiostream using namespace std; typedef struct{ char nombres[25]; int edad; } Persona; void cambiarEdad( ) { ed++; couted; } void main() { Persona pers; coutIngrese nombre; cinpers.nombres; coutIngrese nombre; cinpers.edad; cout---Cambiar Edad de Persona---; cambiarEdad( ); } (II) (I) UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
  • 99. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 99Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones a) (I) pers (II) Persona p b) (I) pers (II) int ed c) (I) pers.edad (II) Persona p d) (I) pers (II) Persona ed e) (I) pers.edad y (II) int ed 4. Indique si es Verdadero(V) o Falso(F) cada uno de los siguientes enunciados sobre el TDA Clase: - El constructor se nombra igual que la clase. - Puede haber más de un constructor en la clase. - El destructor se invoca para eliminar la clase creada. - Puede haber más de un destructor en la clase. a) VVVV. b) FVFV. c) FFFV. d) VFVF. e) VVVF. 5. Indique la alternativa con tres de los cinco fundamentos del orientado a objetos: a) Herencia, Clase, Objeto. b) Polimorfismo, Clase, Jerarquía. c) Herencia, Polimorfismo, Encapsulamiento. d) Encapsulamiento, Polimorfismo, Objeto. e) Mensaje, Jerarquía, Clase. 6. Indique la alternativa que corresponde a un adecuado ejemplo de clase con sus respectivos objetos: a) Salón de Clases: carpetas, pizarra. b) Universidad: Universidad Nacional, Universidad Particular. c) Colegio: CE San José, CE Santa María. d) Auto: Auto de Carrera, Auto Particular. e) Persona: Persona Natural, Persona Jurídica 7. Indique el enunciado que considere correcto para línea 3 y la línea 4 del siguiente código que declara a dos punteros de dirección de memoria: int *p; //línea 1 float *q; //línea 2 p = new int; //línea 3 q = new float; //línea 4 a) Línea 3 crea una variable estática de tipo int y hace que p apunte a ella y Línea 4 crea una variable estática de tipo float y hace que q apunte a ella. b) Línea 3 crea una variable dinámica de tipo int y hace que q apunte a ella y Línea 4 crea una variable dinámica de tipo float y hace que p apunte a ella. c) Línea 3 crea una variable estática de tipo int y hace que q apunte a ella y Línea 4 crea una variable estática de tipo float y hace que p apunte a ella. d) Línea 3 crea una variable dinámica de tipo int y hace que p apunte a ella y Línea 4 crea una variable dinámica de tipo float y hace que q apunte a ella. e) Línea 3 crea una variable estática de tipo float y hace que p apunte a ella y Línea 4 crea una variable estática de tipo int y hace que q apunte a ella. UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
  • 100. 100ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones 8. Indique la alternativa con la adecuada definición de una lista simple enlazada: a) Es una estructura de datos estática, lineal y solo se puede ingresar un campo dato. b) Es una estructura de datos dinámica, lineal y se puede ingresar más de un campo dato. c) Es una estructura de datos dinámica, no lineal y se puede ingresar más de un campo dato. d) Es una estructura de datos estática, no lineal y solo se puede ingresar un campo dato. e) Es una estructura de datos estática, lineal y se puede ingresar más de un campo dato. 9. Indique si es Verdadero(V) o Falso(F) cada uno de los siguientes enunciados sobre las estructuras Cola y Pila: - La estructura Pila usa la técnica FIFO. - La estructura Pila realiza las inserciones por el extremo final. - La estructura Cola realiza las inserciones por el extremo final. - La estructura Cola usa la técnica LIFO. a) FVVF. b) FVFV. c) FFFV. d) VFVF. e) FFVV. 10. Indique la alternativa que defina las operaciones que se pueden realizar en una lista simple enlazada: a) inserta al inicio y al final, elimina al inicio y al final. b) inserta al inicio y en cualquier otra posición, elimina al inicio y al final. c) inserta al inicio, en cualquier otra posición y al final, elimina al inicio y al final. d) inserta al final, elimina al inicio y al final. e) inserta al inicio y al final, elimina al final. UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICAS LINEAL
  • 101. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 101Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones Diagrama Objetivos Inicio Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL Diagrama Objetivos Inicio Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones DIAGRAMA DE PRESENTACIÓN DE LA UNIDAD ORGANIZACIÓN DE LOS APRENDIZAJES CONOCIMIENTOS PROCEDIMIENTOS ACTITUDES Tema Nº 1: Árbol y Grafo 1. Árbol General: Conceptos básicos y algoritmos de mani- pulación 2. Árbol Binario: Recorridos: PreOrden, InOrden, PostOr- den 3. Árboles Binarios de Búsque- da( ABB ) 4. Grafos: Conceptos y algorit- mos de manipulación Tema Nº 2: Archivo (Fichero) 1. Archivo: Conceptos y algorit- mos de manipulación Lectura Seleccionada N° 1 Operaciones con archivos – Jesús Carretero Pérez. García Carballena, Felix. Pérez Lobato José Autoevaluación de la Unidad IV 1. Aplica los algoritmos de crea- ción y manipulación de datos de con el uso de árboles en construcción de programas 2. Diferencia los algoritmos creación y manipulación de datos de con el uso de grafos en la construcción de progra- mas 3. Aplica los algoritmos para ac- ceso y manipulación de archi- vos Actividad N° 1 Comprobación de los algorit- mos de recorridos de árbol, con ejercicios propuestos Actividad N° 2 Comprobación de los progra- mas de ficheros, presentados en el autoinstructivo Tarea Académica Nº 2 Estructuras de Datos Dinámicas No Lineal 1. Asume con responsabilidad sus actividades académicas asignadas 2. Realiza con honestidad las eva- luaciones asignadas CONTENIDOS AUTOEVALUACIÓN LECTURAS SELECCIONADAS BIBLIOGRAFÍA ACTIVIDADES
  • 102. 102ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones TEMA N° 1: ÁRBOL Y GRAFO 1 ÁRBOL GENERAL: CONCEPTOS BÁSICOS Y ALGORITMOS DE MA- NIPULACIÓN. ¿Recuerda el concepto de árbol genealógico o árbol familiar? Es decir, ¿Recuerda que existe un padre inicial y a partir de allí se tiene descendencia en un siguiente nivel, y luego esa des- cendencia a su vez puede tener descendencia en otro nivel y así sucesivamente? Entonces se puede decir que conocemos la definición de un árbol. Un árbol es un conjunto de nodos, en el que existe un nodo distinguido llamado Raíz y cero o más subárboles, cada uno de los cuales tiene su raíz conectada a la raíz por medio de una arista. Conceptos Básicos 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 longitud de camino desde la raíz 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 número máximo de nodos en una rama. Es decir nivel más alto de los nodos más uno. Ejemplo: profundidad = nivel +1 profundidad = 3 +1 = 4 Representación 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. UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
  • 103. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 103Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones Por ejemplo del gráfico anterior, se tiene: #include iostream #define MAX 10 using namespace std; struct nodo { int dato; nodo * hijo; nodo * her; }; typedef nodo *pnodo; class arbol {public: 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 UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
  • 104. 104ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones { 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; } void arbol::mostrar(pnodo aux) {pnodo aux2,aux3; //usando recursion para mostrar if(aux==rpri) { coutaux-dato; coutendl|; coutendlvendl; aux2=aux-hijo; arbol::mostrar(aux2); } else { if(aux==NULL) coutNULL; else { coutaux-dato; cout-; aux2=aux-her; if(aux2!=NULL) arbol::mostrar(aux2); else arbol::mostrar(aux2); aux3=aux-hijo; coutendl|; coutendlvendl; if(aux3!=NULL) arbol::mostrar(aux3); else arbol::mostrar(aux3); } } } UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
  • 105. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 105Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones void arbol::inserta_principal() { rpri = new nodo; coutt Ingresar la raiz: ; cinrpri-dato; coutendl; rpri-hijo=NULL; } void arbol::inserta_hijo() {nodo *hij,*pos=NULL; int num; hij=new nodo; cout-- ***De que nodo desea que sea el hijo: ; cinnum; pos=buscar(rpri,pos,num); if(pos==NULL) coutt--** Arbol vacio o no se encontro nodo **--; else { if(pos-hijo==NULL) { coutt Ingrese numero a insertar: ; cinhij-dato; pos-hijo=hij; hij-her=NULL; hij-hijo=NULL; } else coutNO SE PUEDE INGRESAR UN HIJO. DEBE INGRESAR COMO HERMANOendl; } } void arbol::inserta_hermano() {pnodo herma,pos=NULL; int num; herma=new nodo; coutt De que nodo desea que sea el hermano: endl; cinnum; if(num==rpri-dato) coutNOSEPUEDEINGRESARUNHERMANOALARAIZPRINCIPALendl; else { pos=buscar(rpri,pos,num); if(pos==NULL) { coutt Arbol vacio o no se encontro endl; } else {coutt Ingrese nro a insertar: ; cinherma-dato; pos-her=herma; herma-her=NULL; herma-hijo=NULL; } } } void main() {int opc; UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
  • 106. 106ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones arbol p; bool band=false; coutendl; coutt -----**** MENU ****----- endlendl; coutt Insertar raiz principalendl; p.inserta_principal(); band=true; do{ if(band==true) { coutt -----**** MENU ****----- endlendl; coutt 1 - insertar hijoendl; coutt 2 - insertar hermanoendl; coutt 3 - Visualizar Arbolendl; coutt 4 - Salirendl; do { coutt Seleccione opcion: ; cinopc; }while(opc4); switch(opc) { case 1:p.inserta_hijo();break; case 2:p.inserta_hermano();break; case 3:p.mostrar(p.rpri);break; } } else coutDebe insertar la raiz; } while(opc!=4); } 2 ÁRBOL BINARIO: RECORRIDOS: PREORDEN, INORDEN, POSTORDEN A. Árbol Binario Es un árbol, en el que cada uno de sus nodos puede tener 0, 1 o 2 hijos. Ejemplo: UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
  • 107. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 107Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones Recorrido de Árboles Binarios a) Recorrido en Orden - Recorrer el subárbol izquierdo en orden - Visitar el nodo raíz - Recorrer el subárbol derecho en orden b) Recorrido en Pre-Orden - Visitar el nodo raíz - Recorrer el subárbol izquierdo en pre-orden - Recorrer el subárbol derecho en pre-orden c) Recorrido en Post-Orden - Recorrer el subárbol izquierdo en post-orden - Recorrer el subárbol derecho en post-orden - Visitar el nodo raíz B. Árbol de Expresión Es un árbol binario en el que las hojas contienen los operandos y los nodos internos los operadores de una expresión matemática. Ejemplo: ( a ^ ( b * c ) ) + ( ( d * e ) – f ) / g ) 3 ÁRBOLES BINARIOS DE BÚSQUEDA ( 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 subárbol izquierdo pero menor a todos los datos de los nodos del subárbol derecho. Ejemplo: Para poder tener acceso al árbol es necesario un puntero que contenga la dirección de la raíz. UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
  • 108. 108ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones arbolabb.h #includeiostream 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; } 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; UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
  • 109. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 109Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones 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) coutElemento ya existe; else { q = praiz; while ( q != NULL ) { r = q; if ( x (*q).dato ) { q = (*q).hizq; h = 'i'; } else { q = (*q).hder; h = 'd'; } } if ( h == 'i' ) (*r).hizq = p; else (*r).hder = p; } } } void abb::imprimeenorden( pnodoABB p ) { pnodoABB Ai,Ad; if ( p != NULL ) { Ai = (*p).hizq; Ad = (*p).hder; imprimeenorden(Ai); cout(*p).dato ; imprimeenorden(Ad); } } void abb::imprimepreorden( pnodoABB p ) { pnodoABB Ai,Ad; if ( p != NULL ) { Ai = (*p).hizq; Ad = (*p).hder; cout(*p).dato ; imprimepreorden(Ai); imprimepreorden(Ad); } } UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
  • 110. 110ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones void abb::imprimepostorden( pnodoABB p ) { pnodoABB Ai,Ad; if ( p != NULL ) { Ai = (*p).hizq; Ad = (*p).hder; imprimepostorden(Ai); imprimepostorden(Ad); cout(*p).dato ; } } void abb::eliminaarbol( pnodoABB p ) { pnodoABB Ai,Ad; if ( p != NULL ) { Ai = (*p).hizq; Ad = (*p).hder; eliminaarbol(Ai); eliminaarbol(Ad); delete p; } } ArbolBinario.cpp #include iostream.h #include arbolabb.h using namespace std; void main() { abb A; pnodoABB b,r; int i, x, sn, n, cn,opc; do { coutn Menu n; coutn1 insertar nodo; coutn2 mostrar in orden; coutn3 mostrar pre orden; coutn4 mostrar post orden; coutn5 Salir; do { coutnn Seleccione opcion: ; cinopc; } while(opc5); switch(opc) { case 1:{ coutIngrese hoja: ; cinx; A.insertar(x); r = A.getraiz(); }break; case 2:A.imprimeenorden(r);break; case 3:A.imprimepreorden(r);;break; case 4:A.imprimepostorden(r);break; } } while(opc!=5); } UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
  • 111. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 111Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones 4 GRAFOS: CONCEPTOS Y ALGORITMOS DE MANIPULACIÓN Imagine que tiene que dirigirse en auto, de su hogar a su centro de trabajo, Ud. tiene un acostumbrado camino para lograr ese objetivo, pero ocurre un imprevisto que bloquea el camino y le obliga en ese instante, a decidir optar por otro camino, UD. evalúa en función al tiempo, la distancia y su apuro en llegar cual camino opta- rá optimizando sus recursos. A esto se denomina una red o grafo. Un grafo es un conjunto de objetos llamados vértices o nodos unidos por enlaces llamados aristas. Las aristas pueden tener dirección (grafo dirigido). Un camino entre dos vértices es una lista de vértices en la que dos elementos suce- sivos están conectados por una arista del grafo. 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 sen- tido hacia A: estos son llamados grafos no dirigidos. Sin embargo, en ocasiones tenemos que las uniones son unidireccionales y definen un grafo dirigido. Cuando las aristas llevan un coste asociado (un entero al que se denomina peso) el grafo es ponderado. Grafo no dirigido: Grafo dirigido: Ejemplo: A continuación, se muestra el programa desarrollado por un grupo de alumnos, estudiantes de esta misma asignatura en la modalidad presencial. Grafo.cpp #includeiostream #includestring #includeprocess.h #includectype.h using namespace std; #define MAX 10 struct nodo { int v; int p; nodo *sgte; }; int V,A; nodo *a[MAX],*z; bool ban=true; int leedatoO(int a,int b) { int dato; do { cout: ; UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
  • 112. 112ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones cindato; if(dato=a||datob) coutErrorn; }while(dato=a||datob); return dato; } int leedato(int a,int b) { int dato; do { cout: ; cindato; if(datoa||datob) coutErrorn; }while(datoa||datob); return dato; } char letra(int n) { switch(n+1) { case 1:return 'A'; case 2:return 'B'; case 3:return 'C'; case 4:return 'D'; case 5:return 'E'; case 6:return 'F'; case 7:return 'G'; case 8:return 'H'; case 9:return 'I'; case 10:return 'J'; default:return '*'; } } int numero(char l) { switch(l) { case 'A':return 1; case 'B':return 2; case 'C':return 3; case 'D':return 4; case 'E':return 5; case 'F':return 6; case 'G':return 7; case 'H':return 8; case 'I':return 9; case 'J':return 10; default: return -1; } } int leervertice() { int n; char v1; do { cout: ; cinv1; UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
  • 113. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 113Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones v1=toupper(v1); n=numero(v1); n- -; if(n=V||a[n]==NULL) coutError! vertice no validon; } while(n=V||a[n]==NULL); return n; } void vertices() { int i; coutIngrese numero de Vertices; V=leedatoO(0,MAX); z=new nodo; z-sgte=z; for (i=0; iV; i++) { a[i]=z; cout letra(i); } coutn; ban=false; } bool pruebaarista(int n1,int n2) { nodo *aux; aux=a[n1]; while(aux!=z) { if(aux-v==n2) return false; aux=aux-sgte; } return true; } nodo *buscararista(int n1,int n2) { nodo *aux,*pos=NULL; bool band=true; aux=a[n1]; while(aux!=zband) { if(aux-v==n2) { pos=aux; band=false; } aux=aux-sgte; } return pos; } void insertararista() { int v1,v2,peso; nodo *t; coutVertice 1; v1=leervertice(); do { coutVertice 2; v2=leervertice(); UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
  • 114. 114ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones if(v2==v1) coutError los dos vertices no pueden ser iguales!n; }while(v2==v1); coutIngrese el peso de la arista; peso=leedato(0,1000); if(pruebaarista(v1,v2)) { t=new nodo; t-v=v2; t-p=peso; t-sgte=a[v1]; a[v1]=t; t=new nodo; t-v=v1; t-p=peso; t-sgte=a[v2]; a[v2]=t; coutVinculado letra(v1)--letra(v2); } else coutYa estaba vinculado!nVinculoletra(v1)-letra(v2); t=buscararista(v1,v2); cout Peso: t-pn; } void eliminarnodo(nodo *w,int n) { nodo *aux; aux=a[n]; if(aux-sgte==z) a[n]=z; else { while(aux-sgte!=w) aux=aux-sgte; aux-sgte=w-sgte; } } void eliminararista() { int v1,v2; nodo *posb1,*posb2; coutVertice Inicial; v1=leervertice(); do { coutVertice 2; v2=leervertice(); if(v2==v1) coutError los dos vertices no pueden ser iguales!n; }while(v2==v1); posb1=buscararista(v1,v2); posb2=buscararista(v2,v1); if(posb1==NULL) coutNo habia arista!n; else { eliminarnodo(posb1,v1); eliminarnodo(posb2,v2); UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
  • 115. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 115Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones coutEliminado letra(v1)-letra(v2)n; delete posb1; delete posb2; } } void mostrargrafo() { int i,num; bool banari=true,banver=true; nodo *aux; for(i=0;iV;i++) if(a[i]!=z) banari=false; if(banari) { for(i=0;iV;i++) coutletra(i)n; coutNo hay aristas disponibles, solo vertices!n; } else { for(i=0;iV;i++) { if(a[i]!=NULL) { aux=a[i]; banver=true; while(aux!=z) { num=aux-v; if(numi) coutletra(i)-aux-p-letra(num)n; aux=aux-sgte; banver=false; } if(banver) coutletra(i)n; } } } } void visitar(int k,int val[MAX],int n) { nodo *t; val[k]=1; for (t=a[k];t!=z;t=t-sgte) if (val[t-v]==0) { cout--letra(t-v); visitar(t-v,val,V); } } void recorrer() { int k,val[MAX]; for (k=0;kV;k++) val[k]=0; k=0; while(kV) { if (val[k]==0a[k]!=NULL) { coutnletra(k); UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
  • 116. 116ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones visitar(k,val,V); } k++; }coutn; } void nuevovertice() { int i,aux,lleno=0; bool banver=true; for(i=0;iV;i++) { if(a[i]==NULLbanver) { banver=false; aux=i; } if(a[i]!=NULL) lleno++; } if(lleno10) { if(banver) { a[V]=z; V++; } else a[aux]=z; coutUsted tiene disponible los siguientes vertices:n; for(i=0;iV;i++) if(a[i]!=NULL) cout letra(i); coutn; } else coutYa no puede aumentar vertices!n; } void eliminarvertice() { int i,ve; bool banver=true; nodo *pos; for(i=0;iV;i++) if(a[i]!=NULL) banver=false; if(banver) coutYa no puede eliminar vertices!n; else { coutIndique el vertice a eliminar; ve=leervertice(); a[ve]=NULL; for(i=0;iV;i++) { if(a[i]!=NULL) { pos=buscararista(i,ve); if(pos!=NULL) eliminarnodo(pos,i); } UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
  • 117. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 117Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones } } coutUsted tiene disponible los siguientes vertices:n; for(i=0;iV;i++) if(a[i]!=NULL) cout letra(i); coutn; } void main() { int opc; bool banopc=false; system(color 0c); do { if(ban) { coutnÛÛÛÛÛÛÛÛÛ M E N U ÛÛÛÛÛÛÛÛÛ; coutn1 Ingresar numero de vertices; coutn7 Salirendl; } else {coutnÛÛÛÛÛÛÛÛÛ M E N U ÛÛÛÛÛÛÛÛÛ; coutn2 Ingresar Arista (Vincular); coutn3 Eliminar Arista; coutn4 Mostrar Grafo; coutn5 Insertar vertice; coutn6 Eliminar vertice; coutn7 Recorrer; coutn8 Salirendl; } do { coutSeleccione una opcion :t; cinopc; if(ban) { if(opc!=8opc!=1) {coutOpcion No validan; banopc=true; } else banopc=false; } else {if(opc2||opc8) { coutOpcion No validan; banopc=true; } else banopc=false; } } while(banopc==true); system(cls); switch(opc) UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
  • 118. 118ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones { case 1:vertices();break; case 2:insertararista();break; case 3:eliminararista();break; case 4:mostrargrafo();break; case 5:nuevovertice();break; case 6:eliminarvertice();break; case 7:recorrer();break; } } while(opc!=8); } Diagrama Objetivos Inicio Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones ACTIVIDAD N° 1 Esta actividad puede consultarla en su aula virtual. UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
  • 119. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 119Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones Tema N° 2: ARCHIVO (FICHERO) 1 ARCHIVO: CONCEPTOS Y ALGORITMOS DE MANIPULACIÓN Se ha revisado en este manual, estructuras de datos estáticas y dinámicas, que per- miten sólo el almacenamiento temporal de la información, pero como Ud. mismo hace uso cotidiano, existen almacenamientos históricos, como los archivos (fiche- ro) que crea en un computador. Un archivo o fichero es un conjunto de datos estructurados en una colección de entidades elementales o básicas denominadas registros, que son de igual tipo y constan a su vez de diferentes entidades de nivel más bajo denominadas campos. (Luis Joyanes Aguilar, Fundamentos de Programación) Es decir, la forma de almacenar nuestros datos en el computador se realiza a través de archivos que guardan información de diferente tipo, desde una hoja de cálcu- lo, un procesador de texto, imágenes, sonido, de sistema operativo y tantos como puedan ser creados; además de que cada uno de ellos se almacenan con diferentes extensiones como .doc, .xls, .jpg, .mp3, .mp4, entre otros, tal como se puede apre- ciar en la siguiente figura: Figura Nro 15: Ejemplo de Archivos en el computador. (Elaboración personal) a. Conceptos. • Campo: es un dato elemental de la realidad como nombre de persona, código de alumno, precio de producto, nombre de ciudad y todo lo que podamos abstraer. • Registro: es un conjunto de campos que tienen una común información del re- gistro, otorgándole significado; como por ejemplo el Registro de Alumnos, que a su vez tiene los campos código, nombre, apellidos. • Archivo: es un conjunto de registros (datos estructurados) que tienen una re- lación de información entre sí; se da por ejemplo el registro de matrícula de alumnos al curso Matemática, que tiene un conjunto de registros de alumnos de dicho curso. • Base de Datos: es un conjunto de archivos, con datos relacionados, por ejemplo el archivo de registro de matrícula de alumnos al curso de Matemática y el regis- tro de cursos que se pueden matricular los alumnos en una universidad. El ejemplo de estos conceptos se representa en la siguiente figura: UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
  • 120. 120ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones Figura Nro 16: Conceptos de Archivos. (Elaboración personal) b. Algoritmos de Manipulación. En lenguaje C/ C++, se usa la librería: #include fstream Declaración de Variables de tipo Fichero: ifstream nombrefichero; // Para ficheros de entrada ofstream nombrefichero; // Para ficheros de salida - Ficheros de Tipo Texto: Ejemplo 1: Crear Archivos1.cpp (para crear un fichero llamado “ejemplo.txt”) UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
  • 121. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 121Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones #includeiostream #include fstream using namespace std; void main() { fstream fichero; // Declaracion de la variable fichero char texto[200]; fichero.open(ejemplo.txt, ios::in); // Abrir para lectura fichero texto; // Leer una primera linea while (!fichero.eof()) // Mientras nos sea final de fichero { cout texto endl; // Mostrar lo leido fichero texto; // Volver a leer } fichero.close(); // Cerrar Fichero system(pause); } Ejemplo 2: Crear Archivos1.cpp (para crear un fichero llamado “ejemplo.txt”) #includeiostream #include fstream using namespace std; void main() { ofstream fichero(ejemplo.txt); //Fichero de salida fichero Hola endl; fichero Adios endl; fichero.close(); system(pause); } - Ficheros de Tipo Binario: Tiene la información tal cual está en memoria, es decir, sin convertirla a texto. Para leer y escribir en ficheros binarios: read() y write(). in.open(nombre,ios::binary); // Apertura para Lectura out.open(nombre,ios::binary); // Apertura para Escritura, in.open(nombre, ios::binary |ios::in | ios:: out); // Apertura para Lectura y Escritura Diagrama Objetivos Inicio Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones ACTIVIDAD N° 2 Esta actividad puede consultarla en su aula virtual. UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
  • 122. 122ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones Diagrama Objetivos Inicio Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones LECTURA SELECCIONADA N° 1 OPERACIONES CON ARCHIVOS Carretero Pérez. García Carballena, Felix. Pérez Lobato José, 2007, Fundamentos de Programa- ción. Pág. 236 En la biblioteca stdio.h se define el de datos FILE* para representar un archivo. Este tipo de datos se conoce como stream. Cuando se crea o se abre un archivo se crea un stream (flujo) en el que se almacena toda la información que necesitan las funciones de stio.h para poder operar. En la siguiente figura se muestran dos situaciones típicas: la escritura de datos en un archivo y la posterior lectura de los mismos. Para ambas situaciones se muestran los pa- sos habituales, indicando de forma genérica las operaciones que han de usarse de una biblioteca de entada/salida (en adelante E/S) y su relación con un stream. En las siguientes secciones se presentan las ideas asociadas a un stream de E/s, así como las funciones de la biblioteca stdio.h Pasos habituales en la escritura y lectura de archivos. Streams (flujos) de E/S Como se ha comentado anteriormente, el tipo de datos FILE* permite representar un archivo, guardándose toda la información necesaria. ¿qué tipo de información se guarda? Cuando se crea o abre un stream, la biblioteca stdio.h realiza la petición del servicio correspondiente al sistema operativo. El sistema operativo en respuesta genera un des- criptor de archivo para poder identificarlo. Parte de la información del stream es des- criptor asociado al archivo. Este descriptor es transparente, aunque hay una función para conocerlo (fileno). … Todo archivo abierto lleva asociado un puntero de posición que indica el lugar don- de se realizará la siguiente lectura o escritura. Cuando se crea un archivo, el puntero de la posición es cero (comienzo del archivo). Según se escribe en el archivo, el punto donde se escribe es el mismo donde terminó la escritura anterior, salvo que se indique una nueva posición con la función fseek. Además de todo lo anterior, en el momento de abrir o crear un stream hay que indicar de qué tipo de archivo se trata. Se definen dos tipos de stream: • De texto: Formados por líneas de caracteres, cada una de las cuales está formada por cero o más caracteres terminados con un carácter de salto de línea. La última línea puede no terminar en un salto de línea. UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
  • 123. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 123Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones • Binarios: Formados por una secuencia ordenada caracteres, sin separadores especia- les, que pueden almacenar cualquier tipo de información. Hay mas información asociada a un stream, como un indicador de error que indica si se ha producido un error de E/S y un indicador de fin de archivo (EOF, End Of File) que indica si se ha alcanzado el fin del archivo. Cuando se inicia un programa se abren, por defecto, tres streams de texto, por lo que no deben abrirse explícitamente con posterioridad, so pena de obtener un error. Estos streams son: • Entrada estándar (stdin), que permite leer de la entrada convencional del computa- dor, suele ser el teclado. • Salida estándar (stdout), que permite escribir en la salida convencional del compu- tador, suele ser la pantalla. • Salida de error estándar (stderr), que permite escribir en la salida convencional de error del computador, que suele ser también la pantalla, si bien en algunos casos existen otros dispositivos, como impresoras, asociados a estas salidas de error. Estos tres streams son tres variables globales que pueden usarse en cualquier archivo que incluya directa o indirectamente la biblioteca stdio.h Diagrama Objetivos Inicio Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones GLOSARIO DE LA UNIDAD IV Arista: es la conexión entre nodos ó vértices, y pueden contener información. Stream: es el flujo de datos desde o hacia un programa. Vértice: objeto o nodo que contiene información. Objetivos Inicio os Actividades Autoevaluación s Glosario Bibliografía o Anotaciones BIBLIOGRAFÍA DE LA UNIDAD IV Carretero Pérez, Jesús. García Carballena, Felix. Pérez Lobato José. Fundamentos de Programación. 1ra. ed. España: Thomson; 2007. Joyanes Aguilar, Luis. Fundamentos de Programación. 4ta. ed. España: McGraw-Hill; 2008. Carrasco Loli Angela. Principios de Programación. Junio 2005 Carretero Pérez, Jesús. García Carballena, Felix. Pérez Lobato José. Fundamentos de Programación. 1ra. ed. España: Thomson; 2007. Ceballos Sierra, Francisco. C / C++ curso de programación. 6ta ed. Mexico: AlfaOmega; 2006. Joyanes Aguilar, Luis. Fundamentos de Programación. 4ta. ed. España: McGraw-Hill; 2008. UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
  • 124. 124ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones Joyanes Aguilar, Luis. Zahonero Martinez, Ignacio. Programación en C. Metodologías, Algoritmos y Estructura de Datos. 2da. ed. España: McGraw-Hill; 2005. Laza Fidalgo Rosalía. García Pérez-Shofield Baltasar. Metodología y Tecnología de la Programación. 1raEd. Pearson; 2008. Raffo Lecca, Eduardo. Turbo C++. 1 ed. Lima: Mundigraph; 2000. Enlaces Web • Baeza Yates, Ricardo. Algoritmia. Dpto. de Cs. de la Computación, Univ. de Chile: 2002. Disponible en www.dcc.uchile.cl/~rbaeza/inf/algoritmia.pdf • C++ con Clase. Disponible en http://c.conclase.net/curso/index.php • Manual de C. Disponible en http://www.programacionutn.com.ar/manuales • Zorrilla Marta. Fundamentos de Programación. Universidad de Zorrilla. Disponible en http://personales.unican.es/zorrillm/PDFs/Docencia/ProgramacionComputa- doras/temario/Tema1-presentaci%C3%B3n.pdf Diagrama Objetivos Inicio Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones AUTOEVALUACIÓN DE LA UNIDAD IV INSTRUCCIONES: Lee detenidamente y responde las siguientes preguntas: 1. Indique la alternativa que contenga la definición de: Hoja y de Camino en un Árbol General: a) La hoja es el nodo que tiene otras ramificaciones de nodos y el Camino es la cantidad de aristas entre dos nodos. b) La hoja es el nodo que tiene otros caminos de nodos y el Camino es la cantidad de vértices entre dos nodos. c) La hoja es el nodo que no tiene polimorfismo de nodos y el Camino es la canti- dad de hojas entre dos nodos. d) La hoja es el nodo que tiene otros caminos de nodos y el Camino es la cantidad de polimorfismo entre dos nodos. e) La hoja es el nodo que no tiene otras ramificaciones de nodos y el Camino es la cantidad de aristas entre dos nodos. 2. Dado el siguiente árbol general, indique la alternativa que corresponda a los valores de los conceptos de árbol: Nivel, Hojas, Camino(B-R). UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
  • 125. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 125Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones a) Nivel=4; Hojas=E,J,K,R,M,N,S,H,P; Camino (B-R)=A-B-F-L-R. b) Nivel=4; Hojas=E,J,K,R,M,N,S,H,P; Camino (B-R)=B-F-L-R. c) Nivel=5; Hojas=E,J,K,R,M,N,S,H,P; Camino (B-R)=B-F-L-R. d) Nivel=5; Hojas=R,S; Camino (B-R)=B-F-L-R. e) Nivel=4; Hojas=E,R,S,P; Camino (B-R)=A-B-F-L-R. 3. Indique la alternativa que contenga el orden de recorrido de un Arbol Binario de Búsqueda: a) Pre Orden(SAIzquierdo, SADerecho, Raíz), InOrden(SAIzquierdo, Raíz, SADe- recho), PostOrden (Raíz , SAIzquierdo, SADerecho) b) Pre Orden(Raíz, SAIzquierdo, SADerecho), InOrden(SAIzquierdo, Raíz, SADe- recho), PostOrden (Raíz , SAIzquierdo, SADerecho) c) Pre Orden(SAIzquierdo, Raíz, SADerecho), InOrden(SAIzquierdo, Raíz, SADe- recho), PostOrden (, Raíz, SAIzquierdo, SADerecho) d) Pre Orden(Raíz, SAIzquierdo, SADerecho), InOrden(SAIzquierdo, Raíz, SADe- recho), PostOrden (SAIzquierdo, SADerecho, Raíz) e) Pre Orden(SAIzquierdo, Raíz, SADerecho), InOrden(Raíz, SAIzquierdo, SADe- recho), PostOrden (SAIzquierdo, SADerecho, Raíz) 4. Indique la alternativa que diferencie a un Árbol General (1) de un Árbol Binario (2): a) (1) sólo tiene de 0 hasta 2 hijos, y (2) puede tener más de 2 hijos. b) (1) puede tener más de 2 hijos, y (2) sólo tiene de 0 hasta 2 hijos. c) (1) sólo tiene de 0 hasta 1 hijo, y (2) puede tener hasta 4 hijos. d) (1) sólo tiene 1 hijo, y (2) sólo tiene de 0 hasta 2 hijos. e) (1) puede tener más de 2 hijos y (2) sólo tiene 2 hijos. 5. Dado el siguiente Árbol Binario de Búsqueda, seleccione la alternativa con la rela- ción adecuada: I. Los valores del árbol son ade- cuados. II. Los valores del árbol son in- adecuados. a) El recorrido en PreOrden es: 37,24,16,31,33,74,52,86,68 b) Se invalida todo resultado de recorrido. a) I,a. b) II,c. c) I,c. UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
  • 126. 126ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones d) II,b e) I,b. 6. Indique si es Verdadero(V) o Falso(F) cada uno de los siguientes enunciados sobre grafo: - El grafo es una estructura de datos no lineal. - El grafo puede ser binario y tener recorrido pre orden. - El grafo tiene vértices y aristas. a) FFF. b) FVF. c) VVF. d) VFV. e) FFV. 7. Indique la alternativa que sugiera la estructura de datos que permita representar la red de transporte público de sus ciudad: a) Lista Doble b) Árbol c) Grafo d) Cola e) Lista Circular 8. En una arista de un grafo de red de transporte público, se puede considerar los siguientes valores de información: a) Sólo tiempo. b) Tiempo y distancia. c) Sólo distancia. d) Tiempo, distancia y costo. e) Sólo costo. 9. Indique la alternativa que contenga las dos librerías de fstream para crear Archivos: a) ifstream, ofstream b) ifstream, ostream c) istream, ofstream d) istream, ostream e) fstream, iostream 10. La diferencia entre un archivo de texto (1) y un archivo binario (2) es: a) (1) son líneas de caracteres, guardan cualquier tipo de información, y (2) son secuencia de caracteres que terminan en salto de línea. b) (1) son líneas de caracteres, terminados en un salto de línea, y (2) son secuencia de caracteres que terminan en salto de línea. c) (1) son líneas de caracteres, guardan cualquier tipo de información, y (2) son secuencia de caracteres sin separadores especiales. d) (1) son líneas de caracteres, sin separadores especiales, y (2) son secuencia de caracteres que guardan cualquier tipo de información. e) (1) son líneas de caracteres, terminados en un salto de línea, y (2) son secuencia de caracteres sin separadores especiales. • UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEAL
  • 127. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 127Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones ANEXO CLAVES DE RESPUESTAS AUTOEVALUACIÓN DE LA UNIDAD I CLAVES DE RESPUESTAS AUTOEVALUACIÓN DE LA UNIDAD II CLAVES DE RESPUESTAS AUTOEVALUACIÓN DE LA UNIDAD III CLAVES DE RESPUESTAS AUTOEVALUACIÓN DE LA UNIDAD IV 1. C 6. C 2. A 7. D 3. D 8. C 4. B 9. B 5. E 10. C 1. E 6. D 2. B 7. C 3. D 8. D 4. B 9. A 5. D 10. E 1. C 6. C 2. B 7. D 3. E 8. B 4. E 9. A 5. C 10. C 1. D 6. E 2. C 7. B 3. B 8. E 4. D 9. B 5. A 10. B ANEXO
  • 128. 128