Вы находитесь на странице: 1из 128

ALGORTMIA Y

ESTRUCTURA
DE DATOS

Carol Roxana Rojas Moreno


Cada autor es responsable del contenido de su propio texto.
De esta edicin:
Universidad Continental S.A.C 2012
Jr. Junin 355, Miraflores, Lima-18
Telfono: 213 2760

Derechos reservados
Primera Edicin: Noviembre 2013
Tiraje: 500 ejemplares

Autor: Carol Roxana Rojas Moreno


Oficina de Produccin 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 publicacin no puede ser reproducida, en todo ni en parte, ni registrada en o


trasmitida por un sistema de recuperacin de informacin, en ninguna forma ni por
ningn medio sea mecnico, fotoqumico, electrnico, magntico, electroptico, por
fotocopia, o cualquier otro sin el permiso previo por escrito de la Universidad.
INTRODUCCIN 9

DIAGRAMA DE PRESENTACIN DE LA ASIGNATURA 11

UNIDAD I: ALGORITMOS Y PROGRAMACIN ESTRUCTURADA 13


DIAGRAMA DE PRESENTACIN DE LA UNIDAD i
Tema N 1: Algoritmo
1 Definicin del algoritmo 14
2 Caractersticas de un algoritmo 17
3 Instrucciones algortmicas bsicas 17
4 Representacin del algoritmo 18

Tema N 2: Programacin Estructurada


 1 Programa 26
2 Lenguaje de programacin 27
3 Programas traductores 28
4 Definicin programacin estructurada 29

Tema N 3: Sentencias Bsicas de Programacin


1 Estructura bsica secuencial 31
2 Estructura bsica selectiva 31
3 Estructura bsica repetitiva 32

ACTIVIDAD N1 34

Tema N 4: Modularizacin de Programas


1 Definicin de mdulos de programa 34
2 Paso de Parmetros 34
3 Procedimientos 35
4 Funciones 36
5 Libreras de programacin creadas por el usuario 40

Tema N 5: Funciones Recursivas


 1 Definicin de recursividad 42
2 Recursividad de factorial 43
3 Recursividad de la multiplicacin 43
4 Recursividad de torres de hanoi 43

ACTIVIDAD N2 44

Lectura seleccionada N1 45

GLOSARIO de la unidad i 46
BIBLIOGRAFA DE LA UNIDAD I 47

Autoevaluacin DE LA UNIDAD i 47

UNIDAD II: ESTRUCTURA DE DATOS ESTTICAS 51


DIAGRAMA DE PRESENTACIN DE LA UNIDAD ii

TEMA 1: Estructuras de Datos


1 Definicin de estructura de datos 52
2 Clasificacin de estructura de datos 52

Tema N 2: Arreglos Unidimensionales


1 Definicin de arreglos unidimensionales 53
2 Algoritmos de actualizacin 54
3 Bsqueda de arreglos unidimensionales 57
4 Ordenacin de arreglos unidimensionales 59

ACTIVIDAD N1 60

Tema N 3: Arreglos Bidimensionales


1 Definicin de arreglos bidimensionales 61
2 Algoritmos de actualizacin de arreglos bidimensionales 63

ACTIVIDAD N2 65

Lectura seleccionada n 1 65

GLOSARIO de la unidad ii 67

Bibliografa de la unidad ii 67

Autoevaluacin de la unidad ii 67

UNIDAD III: ESTRUCTURAS DE DATOS DINMICA LINEAL 71


DIAGRAMA DE PRESENTACIN DE LA UNIDAD iii

Tema N 1: Registro (Estructura) y Unin


1 Definicin de registro (estructura) 72
2 Mdulos y estructuras 74
3 Invocacin de una estructura en otra 75
4 Definicin de unin: ejemplo prctico 76

Tema N 2: Tipos de Datos Abstractos (TDA)


 1 Definicin de TDA 77
2 Clases y programacin orientada a objetos 78
Tema N 3: Puntero a Direccin de Memoria
 1 Definicin de puntero a direccin de memoria 80
2 Creacin y eliminacin de variables dinmicas 82

ACTIVIDAD N1 83

Tema N 4: Estructuras de Datos Dinmicas Lineal


1 Listas enlazadas: simple, doble, circular 84
2 Colas y pilas 90

ACTIVIDAD N2 95

Lecturas seleccionada n 1 95

GLOSARIO de la unidad iii 97

Bibliografa de la unidad iii 97

Autoevaluacin de la unidad iii 97

UNIDAD IV: ESTRUCTURAS DE DATOS DINMICA NO LINEAL 101


DIAGRAMA DE PRESENTACIN DE LA UNIDAD iv

Tema N 1: rbol y Grafo


1 rbol General: Conceptos bsicos y algoritmos de manipulacin 102
2 rbol binario: recorridos: preorden, inorden, postorden 106
3 rboles binarios de bsqueda ( abb ) 107
4 Grafos: Conceptos y algoritmos de manipulacin 111

ACTIVIDAD N1 118

Tema N 2: Archivo (Fichero)


1 Archivo: conceptos y algoritmos de manipulacin 119

ACTIVIDAD N2 121

Lecturas seleccionada n 1 122

GLOSARIO de la unidad iv 123

Bibliografa Y DIRECCIONES ELECTRNICAS 123

Autoevaluacin de la unidad iv 124

ANEXO
Clave de respuesta de Autoevaluaciones 127
INTRODUCCIN

A
lgoritmia y Estructura de Datos es una asignatura que cas: Sentencias Bsicas de Programacin: Secuenciales, Selecti-
se desarrolla con una modalidad de educacin virtual, vas y Repetitivas y la Modularizacin en la Programacin Estruc-
y el presente manual autoformativo es su material di- turada, es decir, se puede dividir a un programa complejo, en
dctico ms importante. segmentos de programa mas simples (Modularizacin), y poder
ser reutilizados en otros programas, a travs del uso de funcio-
nes y procedimientos, y en algunos casos usando el concepto
Esta asignatura tiene como finalidad proporcionar al estudian-
de recursividad. Unidad II: Estructuras de Datos Estticas, pre-
te, los conocimientos necesarios en las tcnicas y estructuras de
sentando los algoritmos de creacin y actualizacin de Arreglos
datos para iniciarse en la programacin asistida por un compu-
Unidimensionales y Bidimensionales, Unidad III: Estructuras
tador y basado en el enfoque estructurado, requeridos en su
de Datos Dinmica Lineal, donde se expone las formas de alma-
formacin bsica para poder desarrollar programas en otros
cenamiento temporal de datos a travs estructuras listas, pilas,
niveles ms avanzados.
cola. Unidad IV: Estructuras de Datos Dinmica No Lineal, en
esta ltima unidad, se exponen otras formas de almacenamien-
La competencia a desarrollar es: Construye algoritmos en un to de datos como rboles, grafos, archivos.
lenguaje de programacin, utilizando las sentencias bsicas de
programacin, diferenciando su uso para la propuesta de solu-
Para el estudio del manual y la ejecucin de las actividades, se
cin de un problema, y con ello construye programas computa-
recomienda para cada unidad:
cionales utilizando mdulos de programa (funciones y procedi-
mientos), valorando la reutilizacin de los mdulo, y utilizando Realizar el estudio de los contenidos. Esta lectura ser ana-
las diferentes estructuras de datos: estticas y dinmicas para ltica y reflexiva subrayando, resumiendo y asimilando la in-
almacenar datos temporalmente, diferenciando el uso de las formacin.
estructuras con respecto al uso de los archivos como almacena- Pasar al estudio de las lecturas seleccionadas, que son de
miento de datos permanente, promoviendo el inters por otras estudio de profundizacin o ampliacin.
tcnicas de almacenamiento. Desarrollar las actividades programadas para cada semana
en el aula virtual y asistidas por un lenguaje de programa-
El presente material consta de cuatro unidades: Unidad I: Algo- cin, con la asesora del Profesor Tutor.
ritmos y Programacin Estructurada, que presenta conceptos, Desarrollar la auto evaluacin, que es una preparacin para
representaciones y programacin del algoritmo, con sus tcni- la prueba final de la asignatura. .
8
ALGORTMIA Y ESTRUCTURA DE DATOS
Desarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
9

Lecturas Glosario Bibliografa


seleccionadas

PRESENTACIN DE LA ASIGNATURA Recordatorio Anotaciones


Diagrama Objetivos Inicio

COMPETENCIA DE LA ASIGNATURA

Desarrollo
Construye Actividades enAutoevaluacin
algoritmos un lenguaje de programacin, utilizando las sentencias b-
de contenidos
sicas de programacin, diferenciando su uso para la propuesta de solucin de un
problema, y con ello construye programas computacionales utilizando mdulos de
programa (funciones y procedimientos), valorando la reutilizacin de los mdulo,
y utilizando las diferentes estructuras de datos: estticas y dinmicas para almacenar
datos temporalmente, diferenciando el uso de las estructuras con respecto al uso de
los archivos como
Lecturas almacenamiento
Glosario Bibliografa de datos permanente, promoviendo el inters
seleccionadas
por otras tcnicas de almacenamiento.

UNIDADES
Recordatorio DIDCTICAS
Anotaciones

UNIDAD I UNIDAD II UNIDAD III UNIDAD IV

Algoritmos y Pro- Estructuras de Estructuras de Estructuras de


gramacin Estruc- Datos Estticas Datos Dinmica Datos Dinmica No
turada Lineal Lineal

TIEMPO MNIMO DE ESTUDIO


UNIDAD I UNIDAD II UNIDAD III UNIDAD IV

1 y 2 semana 3 y 4 semana 5 y 6 semana 7 y 8 semana


16 horas 16 horas 16 horas 16 horas
10
ALGORTMIA Y ESTRUCTURA DE DATOS
Desarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
11

Diagrama Objetivos Inicio Lecturas Glosario Bibliografa


seleccionadas

Desarrollo
UNIDAD I: ALGORITMOS Y PROGRAMACIN ESTRUCTURADA
Actividades Autoevaluacin
de contenidos
Recordatorio Anotaciones

DIAGRAMA DE PRESENTACIN DE LA UNIDAD


Diagrama
Lecturas Objetivos
Glosario Inicio
Bibliografa
seleccionadas

LECTURAS
CONTENIDOS ACTIVIDADES
SELECCIONADAS
Desarrollo Actividades Autoevaluacin
de contenidos
Recordatorio Anotaciones

AUTOEVALUACIN BIBLIOGRAFA
Lecturas Glosario Bibliografa
seleccionadas

ORGANIZACIN DE LOS APRENDIZAJES


Recordatorio Anotaciones

CONOCIMIENTOS PROCEDIMIENTOS ACTITUDES

Tema N 1: Algoritmo 1.
Analiza diferentes situacio- 1.
Asume con responsabilidad
1. Definicin del Algoritmo nes problema para proponer sus actividades acadmicas
2. Caractersticas de un algoritmo un algoritmo computacional asignadas
3. Instrucciones Algortmicas como solucin
Bsicas
2. Aplica el flujo de trabajo de 2. Realiza con honestidad las eva-
4. Representacin del Algoritmo
la sentencia de programacin
luaciones asignadas
secuencial
Tema N 2: Programacin Es-
3. Aplica las sentencias de pro-
tructurada
gramacin selectiva en la
1. Programa
construccin de un algoritmo
2. Lenguaje de Programacin
como solucin de un proble-
3. Programas Traductores
ma
4. Definicin Programacin Es-
tructurada 4. Aplica las sentencias de pro-
gramacin repetitiva en la
construccin de un algoritmo
Tema N 3: Sentencias Bsicas
como solucin de un proble-
de Programacin
ma
1. Estructura Bsica Simple o
Secuencial 5. Aplica los conceptos de la
2. Estructura Bsica Selectiva modularizacin a travs de las
3. Estructura Bsica Repetitiva Funciones, Procedimientos
6. Construye Libreras de Pro-
Tema N 4: Modularizacin de gramacin, para la reutiliza-
Programas cin de mdulos en los pro-
1. Definicin de Mdulos de gramas
Programa 7. Aplica algoritmos recursivos
2. Paso de Parmetros en la construccin de progra-
3. Procedimientos mas
4. Funciones
5. Libreras de Programacin Actividad N 1
creadas por el usuario
Elaboracin de Algoritmos y
programas usando las senten-
Lectura seleccionada N 1 cias bsicas de programacin
Introduccin a los Subalgorit-
mos o Subprogramas Luis Jo-
yanes Aguilar Actividad N 2
Elaboracin de programas
Tema N 5: Funciones Recursi- usando mdulos y libreras de
vas programas, y elaboracin de
algoritmos recursivos
1. Definicin de Recursividad
2. Recursividad del Factorial
3. Recursividad de la Multipli- Control de Lectura N 1
cacin
Sentencias de Programacin
4. Recursividad de Torres de
en los Algoritmos y Mdulos de
Hanoi Programa

Autoevaluacin de la Unidad I
ollo
nidos 12
Actividades Autoevaluacin UNIDAD I: ALGORITMOS Y PROGRAMACIN ESTRUCTURADA

as Glosario Bibliografa
nadas
TEMA N 1: ALGORITMO
1 DEFINICIN DE ALGORITMO
torio Anotaciones 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 definicin 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 solucin de un problema.

La palabra algoritmo se deriva de la traduccin al latn del nombre rabe


Al-Khuwarizmi, matemtico y astrnomo rabe que escribi un tratado sobre
manipulacin de nmeros y ecuaciones en el siglo IX. (Angela Carrasco Loli.
Principios de Programacin)

Tenemos algunos ejemplos de algoritmo:


- Al instalar un equipo de sonido, ejecutamos las instrucciones (algoritmo) conteni-
das en el manual del equipo.
- El algoritmo matemtico de Euclides para la obtencin del mximo comn divi-
sor de dos nmeros.

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 programacin. (Trminos 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 CARACTERSTICAS DE UN ALGORITMO

Un algoritmo debe ser preciso e indicar el orden de realizacin 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 algn mo-
mento, o sea, debe tener un nmero finito de pasos.
(Luis Joyanes Aguilar. Fundamentos de Programacin.)

Para que pueda escribir las instrucciones algortmicas, necesita conocer lo que es
una Variable: Es una localizacin o casillero en la memoria principal que almacena
un valor que puede cambiar en el transcurso de la ejecucin del programa.

Tiene un nombre, un tipo de dato y un valor. Antes de poder utilizar una variable
es necesario declararla especificando su nombre y su tipo de dato.
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD I: ALGORITMOS Y PROGRAMACIN ESTRUCTURADADesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
13

Lecturas Glosario Bibliografa


seleccionadas
Ejemplo 1: Entero edad
Ejemplo 2: Real peso, talla

Recordatorio Anotaciones

3 INSTRUCCIONES ALGORTMICAS BSICAS


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-
docdigo mediante la palabra LEER, de la siguiente forma:

Ejemplo: LEER variable


LEER edad
En lenguaje C/C++: cin>>edad;

b. Salida: Consiste en mostrar el valor de una variable en un dispositivo de salida,


como la pantalla del computador, se expresa en el pseudocdigo mediante la pala-
bra ESCRIBIR,de la siguiente forma:

Ejemplo: ESCRIBIR variable


ESCRIBIR TotalCompra
En lenguaje C/C++: cout<<TotalCompra;

c. Asignacin: Consiste en dar a una variable el valor de una expresin. La asigna-


cin se expresa en el pseudocdigo de la siguiente forma:
variable expresin

Donde variable y el valor de expresin deben tener el mismo tipo de dato.


Ejemplo:
resultado numero1 + numero 2
En lenguaje C/C++: resultado = numero1 + numero 2;

4 REPRESENTACIN DEL ALGORITMO


Para poder comprender el orden lgico en el que realizan los pasos de un algorit-
mo, se hace uso de diagramas de representacin, definidas por conjunto de smbo-
los y significado de cada uno de ellos

A continuacin se le mostrar algunas de las representaciones de algoritmos ms


conocidas:
a. Pseudocdigo: Es la representacin del algoritmo en el lenguaje natural del
programador.

Ejemplo: algoritmo para sumar dos nmeros enteros.


INICIO
entero numero1, numero2, resultado
Leer numero1
Leer numero2
resultado numero1 + numero 2
Escribir El resultado de la suma es:
Escribir resultado
FIN

Descripcin:
- Todo algoritmo por ser finito, tiene un INICIO un FIN.
- Las variables numero1, numero2 y resultado, son asignadas como tipo de dato entero.
ollo
nidos 14
Actividades Autoevaluacin UNIDAD I: ALGORITMOS Y PROGRAMACIN ESTRUCTURADA

as Glosario Bibliografa
nadas
- 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
torio Anotaciones
El resultado es: y Escribir el valor pantalla de la variable resultado)

b. Diagrama de Flujo Estructurado: Representacin con flujos entre los procesos a


realizar. Los principales smbolos de representacin para este diagrama son:

c. Diagrama Nassi/Schneiderman (N-S): Representacin en bloques, es decir cada


uno de los procesos como ingreso/salida de datos, decisiones, acciones, repeticio-
nes; estn representados en bloques de tareas consecutivos.

INICIO
Declaracin de variables
Lectura de Datos
Accin 1
Accin 2
Accin n
Reporte de Datos
FIN

Se le mostrar ejemplos de estas dos ltimas representaciones de algoritmos en el


tema de Sentencias de Programacin.

TEMA N 2: PROGRAMACIN ESTRUCTURADA


1 PROGRAMA
Se ha preguntado como el computador puede realizar las rdenes como ingresar datos por
teclado, reproducir msica, editar imgenes? Todo esto es posible gracias a la ejecucin
de algn programa, es decir, un conjunto de pasos ordenados y finitos (algoritmo)
escrito en un lenguaje de programacin (programa fuente).

2 LENGUAJE DE PROGRAMACIN
As como Ud. conoce el alfabeto (smbolos), gramtica y semntica de un idioma
como por ejemplo el castellano o el ingls, as es como usar un lenguaje de pro-
gramacin, con sus propios smbolos, gramtica y semntica.
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD I: ALGORITMOS Y PROGRAMACIN ESTRUCTURADADesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
15

Lecturas Glosario Bibliografa


seleccionadas
Entonces, el lenguaje de programacin 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 programacin que ya fueron revisados en alguna


Recordatorio Anotaciones

asignatura previa a esta, las que recordamos como:

a. Lenguaje Mquina: Lenguaje de programacin que la computadora interpreta


y ejecuta directamente, y est compuesto de instrucciones codificadas en binario
(0, 1).

b. Lenguaje de Bajo Nivel: tambin llamados lenguajes ensambladores, permiten


al programador escribir instrucciones de un programa usando abreviaturas del len-
guaje natural (ingls), tambin llamadas palabras nemotcnicas (ADD, DIV, SUB,
etc).

c. Lenguaje de Alto Nivel: permite al programador escribir las instrucciones de un


programa utilizando palabras o expresiones sintcticas muy similares al lenguaje
natural (ejemplo: el ingls).

Recuerde que as escriba un programa en un lenguaje de alto nivel, el compu-


tador debe traducir estas instrucciones a lenguaje mquina, es decir, en cdigo
binario.

3 PROGRAMAS TRADUCTORES
Son aquello programas que traducen algoritmos escritos en un programa en len-
guaje de alto nivel hacia el lenguaje de cdigo mquina.

a. Intrprete: es un traductor que toma un programa fuente, lo traduce y a conti-


nuacin lo ejecuta.

La siguiente figura muestra el flujo de desarrollo de un intrprete.

PROGRAMA FUENTE

INTERPRETE

TRADUCCIN Y
EJECUCIN LINEA
POR LINEA

Figura Nro 2: Programa Intrprete


(Luis Joyanes Aguilar. Fundamentos de Programacin)

b. Compilador: la traduccin del programa se realiza en una sola operacin llama-


da compilacin del programa, es decir se traducen las instrucciones del programa
en un solo bloque. El programa compilado y depurado (eliminado los errores de
cdigo 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.


ollo
nidos 16
Actividades Autoevaluacin UNIDAD I: ALGORITMOS Y PROGRAMACIN ESTRUCTURADA

as Glosario Bibliografa
nadas

PROGRAMA FUENTE
torio Anotaciones

COMPLADOR

PROGRAMA OBJETIVO

Figura Nro 3: Programa Compilador


(Luis Joyanes Aguilar. Fundamentos de Programacin)

La compilacin es el proceso de traduccin del programa fuente a programa objeto


(traducido a cdigo mquina), a travs de un programa enlazador (conduce a un
programa en lenguaje mquina directamente ejecutable), para obtener el progra-
ma ejecutable. El detalle del proceso de un compilador se muestra en la siguiente
figura:

PROGRAMA FUENTE

COMPLADOR

PROGRAMA OBJETIVO

PROGRAMA ENLAZADOR

PROGRAMA EJECUTABLE

Figura Nro 4: Detalle de un Programa Compilador


(Luis Joyanes Aguilar. Fundamentos de Programacin)

4 DEFINICIN PROGRAMACIN ESTRUCTURADA


Existen dos enfoques de programacin 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, tcnicas y herramientas.

En esta asignatura, por ser de formacin bsica en su carrera y para facilitar el ini-
cio del estudiante en la elaboracin de programas, usaremos la Programacin del
Enfoque Estructurado.

La Programacin Estructurada es un conjunto de tcnicas para escribir, verificar,


depurar, y mantener los programas realizando refinamientos sucesivos es decir un
todo se divide en segmentos ms sencillos o de menor complejidad que al darles
solucin, 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 Bsicas.
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD I: ALGORITMOS Y PROGRAMACIN ESTRUCTURADADesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
17

Lecturas Glosario Bibliografa


seleccionadas
Estructuras de Control Bsicas (Flujos de Control)
Las estructuras bsicas que permiten iniciarse sin dificultad en la programacin, se
conocen como:
Secuenciales Recordatorio Anotaciones

Selectivas
Repetitivas

ste conjunto de tcnicas permite elaborar programas en cualquier lenguaje de


programacin.

Las estructuras de Control Bsicas mencionadas, o tambin conocidas como Sen-


tencias Bsicas de Programacin, sern desarrolladas ms adelante.

NOTA:
Estructura de un Programa en C/C++
Para iniciar la elaboracin de programas en esta asignatura, se muestra la Estructu-
ra de un Programa Simple en C++, en el Tema de Mdulos de Programa, la estruc-
tura del programa tendr algunas modificaciones.

Figura Nro 5: Estructura simple de un Programa en C/C++


(Elaboracin personal)

Descripcin:
- El smbolo #, es una directiva del procesador que permite acceder la carpeta include.

- La carpeta o librera include, es propia del compilador, es donde se encuentran


las libreras de cabecera (extensin .h) del lenguaje C/C++

- Una de las libreras 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
estndar, es decir un conjunto de smbolos para lenguajes de programacin.

- El Mdulo Principal main( ), en el cual se escribirn las instrucciones de progra-


ma o invocaciones a otros mdulos de programa.
ollo
nidos 18
Actividades Autoevaluacin UNIDAD I: ALGORITMOS Y PROGRAMACIN ESTRUCTURADA

as Glosario Bibliografa
nadas
TEMA N 3: SENTENCIAS BSICAS DE PROGRAMACIN
1 ESTRUCTURA BSICA SECUENCIAL
torio Anotaciones En un mundo ideal, el orden de realizacin de tareas no tendran ninguna restric-
cin (condicin o seleccin), es decir se realizaran 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

Declaracin de variables

Lectura de datos

Accin 1

Accin 2

Accin n

Reporte de datos

FIN

Diagrama N-S:

INICIO
Declaracin de variables
Lectura de Datos
Accin 1
Accin 2
Accin n
Reporte de Datos
FIN

Ejemplo:
Calcular el rea de un tringulo. rea = (base * altura) / 2

Solucin

Leyenda de Datos
Base: valor de la base del tringulo
Altura: valor de la altura del tringulo
rea: valor del resultado del clculo del rea del tringulo
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD I: ALGORITMOS Y PROGRAMACIN ESTRUCTURADADesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
19

Lecturas Glosario Bibliografa


seleccionadas
Diagrama de Flujo:

INICIO Recordatorio Anotaciones

real base, altura, rea

Leer base

Leer altura

rea (base*altura)/2

Escribir "El valor del rea


para el tringulo es:"

Escribir rea

FIN

Diagrama N-S:

INICIO
real base, altura, rea
Leer base
Leer altura
rea (base*altura)/2
Escribir "EL valor del rea para el tringulo es:"
Escribir rea
FIN

Cdigo en C++:
#include<iostream>
using namespace std;
void main( )
{ float base, altura, Area;
cout<<Ingrese valor de la base: ;
cin>>base;
cout<<\n; //Salto de lnea
cout<<Ingrese valor de la altura: ;
cin>>altura;
cout<<\n;

Area = (base * altura) / 2;

cout<<El valor del rea para el tringulo es: ;


ollo
nidos 20
Actividades Autoevaluacin UNIDAD I: ALGORITMOS Y PROGRAMACIN ESTRUCTURADA

as Glosario Bibliografa
nadas
cout<<Area;
cout<<\n;
system(PAUSE);
torio Anotaciones
}

2 ESTRUCTURA BSICA SELECTIVA


Es una estructura que tiene un punto de decisin para realizar un conjunto de
acciones. Pueden ser:
E. B. Selectiva Simple
E. B. Selectiva Compuesta
E. B. Selectiva Mltiple

a. Estructura Bsica Selectiva Simple:


Se tiene un punto de decisin que evala una condicin y si es Verdadero, ejecuta
un conjunto de Acciones.
Diagrama de Flujo:

INICIO

Declaracin de variables

Lectura de datos

F V
Cond 1

Accin 1

Accin n

Reporte de datos

FIN

Diagrama N-S:

INICIO
Declaracin de variables
Lectura de datos
V cond 1 F
Accin 1
Accin 2
Accin n
Reporte de datos
FIN
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD I: ALGORITMOS Y PROGRAMACIN ESTRUCTURADADesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
21

Lecturas Glosario Bibliografa


seleccionadas
Ejemplo:
Sumar dos nmeros enteros positivos c = a + b

Recordatorio Anotaciones
Solucin:

Leyenda de Datos
a: valor del primer nmero entero positivo
b: valor del segundo nmero entero positivo
c: valor del resultado la suma de dos nmeros a y b

Diagrama de Flujo:

INICIO

entero a,b,c

Leer a, b

F V
a > 0 && b > 0
ca+b

Escribir "El valor de la suma es:" c

FIN

Diagrama N-S:

INICIO
Entero a, b, c
Leer a, b
V a>0 && b>0 F
ca+b
Escribir "El valor la suma es:", c
FIN

Cdigo C:
#include<iostream>
using namespace std;
int main( )
{ float a, b, c;
cout<<Ingrese primer nmero: ;
cin>>a; cout<<\n;
cout<<Ingrese segundo nmero: ;
cin>>b; cout<<\n;
ollo
nidos 22
Actividades Autoevaluacin UNIDAD I: ALGORITMOS Y PROGRAMACIN ESTRUCTURADA

as Glosario Bibliografa
nadas
if (a>0 && b>0)
{ c = a + b;
cout<<El valor la suma es: ;
torio Anotaciones
cout<<c;
cout<<\n;
}
system(PAUSE);
return 0;
}

b. Estructura Bsica Selectiva Compuesta:


Se tiene un punto de decisin que evala una condicin y si es Verdadero, ejecuta
un conjunto de Acciones, y si es Falsa ejecuta otro conjunto de acciones.
Diagrama de Flujo:

INICIO

Declaracin de variables

Lectura de datos

F V
Cond 1

Accin 2 Accin 1

Accin m Accin n

Reporte de datos

FIN

Diagrama N-S:

INICIO
Declaracin de variables
Lectura de datos
V cond 1 F
Accin 1 Accin 2
... ...
Accin n Accin m
Reporte de datos
FIN

Ejemplo:
Sumar dos nmeros enteros si son positivos, sino multiplicarlos.
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD I: ALGORITMOS Y PROGRAMACIN ESTRUCTURADADesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
23

Lecturas Glosario Bibliografa


seleccionadas
Solucin:

Leyenda de Datos
a: valor del primer nmero entero positivo Recordatorio Anotaciones
b: valor del segundo nmero entero positivo
c: valor del resultado la suma de dos nmeros a y b

Diagrama de Flujo:

INICIO

entero a,b,c

Leer a, b

F V
a > 0 && b > 0

ca*b ca+b

Escribir "El valor de la Escribir "El valor de


multiplicacin es:" c la suma es:" c

FIN

Diagrama N-S:

INICIO
Entero a, b, c
Leer a, b
V a>0 && b>0 F
ca+b ca*b
Escribir "El valor la suma es:", c Escribir "El valor la multiplicacin es:", c
FIN

Cdigo C:
#include<iostream>
using namespace std;
void main( )
{ int a, b, c;
cout<<Ingrese primer nmero: ;
cin>>a;
cout<<\n;
cout<<Ingrese segundo nmero: ;
cin>>b;
cout<<\n;
if(a>0 && b> 0)
ollo
nidos 24
Actividades Autoevaluacin UNIDAD I: ALGORITMOS Y PROGRAMACIN ESTRUCTURADA

as Glosario Bibliografa
nadas
{ c = a + b;
cout<<El valor la suma es: ;
cout<<c; cout<<\n;
torio Anotaciones
}
else
{ c = a * b;
cout<<El valor la multiplicacion es: ;
cout<<c; cout<<\n;
}
system(PAUSE);
}

c. Estructura Bsica Selectiva Mltiple:


Se tiene un punto de decisin que evala ms de dos alternativas para realizar un
conjunto de acciones.
Diagrama de Flujo:

INICIO

Declaracin de variables

Lectura de datos

1 default
Cond 1
3 3
Accin 1 Accin 2 Accin 3 Accin 4

Accin n Accin m Accin m Accin m

Accin 4

Reporte de datos

FIN

Diagrama N-S:

INICIO
Declaracin de variables
Lectura de datos
1 2 3 cond 1 default

Accin 1 Accin 2 Accin 3 Accin 4


... ... ... ...
Accin n Accin m Accin m Accin m
Reporte de datos
FIN
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD I: ALGORITMOS Y PROGRAMACIN ESTRUCTURADADesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
25

Lecturas Glosario Bibliografa


seleccionadas
Ejemplo:
Ingresa cinco nmeros e imprime que vocal es.

Recordatorio Anotaciones
Solucin:

Leyenda de Datos
num: valor del nmero entero positivo

Diagrama de Flujo:

INICIO

entero num.

Leer num.

1 num default
2 3 4 5

Escribir Escribir Escribir Escribir Escribir Escribir


"Vocal A" "Vocal A" "Vocal A" "Vocal A" "Vocal A" "Vocal A"

FIN

Diagrama N-S:

INICIO
Entero a, b, c
Leer a, b
1 2 3 4 5 num default

Escribir Escribir Escribir Escribir Escribir Escribir "No


"Vocal A" "Vocal E" "Vocal I" "Vocal O" "Vocal U" es vocal "
FIN

Cdigo C:
#include<iostream>
using namespace std;
void main( )
{ int num;
cout<<Ingrese nmero: ;
cin>>num;

switch(num)
{ case 1: cout<<Vocal A; break;
case 2: cout<<Vocal E; break;
case 3: cout<<Vocal I; break;
ollo
nidos 26
Actividades Autoevaluacin UNIDAD I: ALGORITMOS Y PROGRAMACIN ESTRUCTURADA

as Glosario Bibliografa
nadas
case 4: cout<<Vocal O; break;
case 5: cout<<Vocal U; break;
default: cout<<No es numero para una vocal;
torio Anotaciones
}
system(PAUSE);
}

Existe una conformacin de la Estructura Selectiva que ayuda en la elaboracin de


programas:

Estructura Bsica Selectiva Anidada: se evala una condicin y si es Verdadero, eje-


cuta un nuevo punto de decisin y as sucesivamente, y si es Falsa ejecuta otro con-
junto de acciones.
Diagrama de Flujo:

INICIO

Declaracin de variables

Lectura de datos

F V
Cond 1
F V
Accin 2 Cond 2

Accin 1
Accin m
Accin n

Reporte de datos

FIN

Diagrama N-S:

INICIO
Declaracin de variables
Lectura de datos
F Cond 1 V

Accin 2 V Cond 2 F
... Accin 1
... ...
Accin m Accin n
Reporte de datos
FIN
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD I: ALGORITMOS Y PROGRAMACIN ESTRUCTURADADesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
27

Lecturas Glosario Bibliografa


seleccionadas
Ejemplo:
Ingresar un nmero entero y si es positivo y diferente de cero, reportar si se encuen-
tra entre los diez primeros nmeros.
Recordatorio Anotaciones

Solucin:
Leyenda de Datos
a: valor del nmero entero

Diagrama de Flujo:

INICIO

entero a

Leer a

F V
a>0
F V
a > = 1 && a >10
Escribir "No
es un nmero Escribir "Son mas Escribir
mayor que de los primeros l0" "Primeros 10"
cero"

FIN

Diagrama N-S:

INICIO
Entero a
Leer a
F a>0 V

Escribir "No es F a >= 1 && a > 10 V


un nmero mayor
Escribir "Son mas de los Escribir "Primeros 10"
que cero"
primeros 10"
FIN

Cdigo C:
#include<iostream>
using namespace std;
void main( )
{ int a;
cout<<Ingrese nmero: ;
cin>>a;
if(a>0)
if(a>=1 && a<10)
cout<<Primeros 10;
ollo
nidos 28
Actividades Autoevaluacin UNIDAD I: ALGORITMOS Y PROGRAMACIN ESTRUCTURADA

as Glosario Bibliografa
nadas else
cout<<Son ms de los primeros 10;
else
torio Anotaciones cout<<No es un nmero mayor que cero;
system(PAUSE);
}

3 ESTRUCTURA BSICA REPETITIVA


Es una estructura permite repetir un conjunto de acciones dada una condicin.
Pueden ser:
E. B. Repetitiva Mientras
E. B. Repetitiva Hacer-Mientras
E. B. Repetitiva Para

a. Estructura Bsica Repetitiva Mientras:


Primero evala una expresin condicional y si es verdadera permite realizar el con-
junto de acciones y regresa evaluar nuevamente la expresin condicional, hasta que
deje de cumplir (Falso).
Diagrama de Flujo:

INICIO

Declaracin de variables

Lectura de datos

F
Cond 1
V
Accin 1

Accin n

Accin 2

FIN

Diagrama N-S:

INICIO
Declaracin de variables
Lectura de datos
Cond 1
Accin 1
...
Accin n
Accin 2
Reporte de datos
FIN
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD I: ALGORITMOS Y PROGRAMACIN ESTRUCTURADADesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
29

Lecturas Glosario Bibliografa


seleccionadas
Ejemplo:
Imprimir la serie Fibonacci, menor a un lmite dado: 0,1,1,2,3,5,8,13,.
Diagrama de Flujo:
Recordatorio Anotaciones

INICIO

entero lim, a=0, b=1, c

Leer lim

Escribir a

F
b<=lim
V

Escribir b

ca+b

ab

bc

FIN

Diagrama N-S:

INICIO
entero min, a=0, b=1, c
Leer lim
Escribir a
b <= lim
Escribir
ca+b
ab
bc
FIN

Cdigo C:
#include<iostream>
using nameaspace std;
void main( )
{ int lim, a=0, b=1,c;

cout<<Ingrese lmite: ;
cin>>lim;
ollo
nidos 30
Actividades Autoevaluacin UNIDAD I: ALGORITMOS Y PROGRAMACIN ESTRUCTURADA

as Glosario Bibliografa
nadas
cout<<a;
while(b<=lim)
{ cout<<b;
torio Anotaciones
c=a+b;
a=b;
b=c;
}
system(PAUSE);
}

b. Estructura Bsica Repetitiva Hacer - Mientras


Realiza al menos una vez un conjunto de acciones, y luego evala una expresin
condicional, si es Verdadero regresa a repetir el conjunto de acciones, si no cum-
ple, termina la repeticin.
Diagrama de Flujo:

INICIO

Declaracin de variables

Lectura de datos

Accin 1

Accin n

V
Cond 1
F

Accin 2

Reporte de Datos

FIN

Diagrama N-S:

INICIO
Declaracin de variables
Lectura de datos
Accin 1
...
Accin n
Cond 1
Accin 2
Reporte de datos
FIN
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD I: ALGORITMOS Y PROGRAMACIN ESTRUCTURADADesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
31

Lecturas Glosario Bibliografa


seleccionadas
Ejemplo:
Leer un nmero entero mayor que cero, sino es as, volver a solicitar el nmero
con esas condiciones.
Diagrama de Flujo: Recordatorio Anotaciones

INICIO

entero num

Leer num

V
num <= 0
F

FIN

Diagrama N-S:

INICIO
entero mun
Leer num
num <= 0
FIN

Cdigo C:
#include<iostream>
using namespace std;
void main()
{ int num;

do{
cout<< Ingrese un numero entero mayor a cero: ;
cin>>num;
}while(num <= 0);
system(PAUSE);
}

c. Estructura Bsica Repetitiva Para:


Tambien conocida como Desde Por, permite repetir un conjunto de acciones, se-
cuencialmente hasta llegar a un lmite dado; recorrido se realiza desde una variable
o ndice de recorrido y avanza de uno en uno hasta llegar al lmite.
Diagrama de Flujo:
ollo
nidos 32
Actividades Autoevaluacin UNIDAD I: ALGORITMOS Y PROGRAMACIN ESTRUCTURADA

as Glosario Bibliografa
nadas

INICIO

torio Anotaciones

Declaracin de variables

Lectura de datos

Definir variables de recorrido y limite

Inicializar la variable de recorrido

F
Variable es menor a limite

Accin 1

Accin n

Incrementar variable de recorrido

Accin 2

Reporte de Datos

FIN

Diagrama N-S:

INICIO
Declaracin de variables
Lectura de datos
i = 0; i <= limite; i ++
Accin 1
...
Accin n
Accin 2
Reporte de datos
FIN

Ejemplo:
Calcular el Factorial de un nmero (n!).
Diagrama de Flujo:
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD I: ALGORITMOS Y PROGRAMACIN ESTRUCTURADADesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
33

Lecturas Glosario Bibliografa


seleccionadas

INICIO

Recordatorio Anotaciones

entero i, num, p = 1

Escribir " Ingrese numero para factorial"

Leer num

i1

F
i < = num
V

pp*i

i ++

Escribir " El factorial es", p

FIN

Diagrama N-S:

INICIO
entero num i, p = 1
Leer num
i = 1; i <= num; i ++
pp*i
Escribir "el factorial es:"
Escribir p
FIN

Cdigo C:
#include<iostream>
using namespace std;
void main( )
{ int num, i, p=1;
cout<<Ingrese numero para factorial: ;
cin>>num;
for(i=1;i<=num; i++)
{ p = p * i;
}
cout<<El factorial de <<n<<es: <<p;
system(PAUSE);
}
ollo
nidos 34
Actividades Autoevaluacin UNIDAD I: ALGORITMOS Y PROGRAMACIN ESTRUCTURADA

as Glosario Bibliografa Diagrama Objetivos Inicio


nadas

ACTIVIDAD N 1
Desarrollo Actividades Autoevaluacin
de contenidos
torio Anotaciones
Esta actividad puede consultarla en su aula virtual.

Lecturas Glosario Bibliografa


seleccionadas

Recordatorio Anotaciones

TEMA N 4: MODULARIZACIN DE PROGRAMAS


1 DEFINICIN DE MDULOS 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 transaccin etc. Pero en alguna etapa
de crecimiento, asignamos estas tareas a otros colaboradores, quienes interactan
entre s, y al final le informan de su cumplimiento. Es lo mismo que pasa en la ela-
boracin de mdulos de programa.

Los Mdulos de Programa (subprogramas) son partes separadas de cdigo que


ejecutan tareas pequeas de un mdulo principal. El mdulo es con un conjunto
de instrucciones precisas, independientes y reutilizables.

Para poder crear los mdulos de programa, debe conocer las formas en que se pa-
san los datos de un mdulo a otro, al ser invocados.

2 PASO DE PARMETROS
Parmetros 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 afectara a Ud. que es el dato original.

Es decir, se guarda en memoria una copia temporal de la variable, y dentro del


mdulo solo se utiliza la copia para las modificaciones.

Parmetros 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 ubicacin), las modificaciones que se realicen
siempre se mantendrn en Ud., por ser el dato original.

Es decir, los cambios que se efecten sobre dicha variable dentro del procedimiento
se mantienen incluso despus de que este haya terminado.

La siguiente figura muestra un programa, haciendo uso de los tipos de paso de


parmetros.
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD I: ALGORITMOS Y PROGRAMACIN ESTRUCTURADADesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
35

Lecturas Glosario Bibliografa


seleccionadas

Recordatorio Anotaciones

Figura Nro 6: Programa Ejemplo de Paso de Parmetros


(Elaboracin personal)

Descripcin:
- En el programa se tienen dos mdulos: el Principal: main (no olvide que siempre
debe existir) y el mdulo f (que como programadores, estamos creando).

- En el mdulo 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 mdulo Principal se invoca al mdulo f, al que se le enva los valores


de x, y: f(x,y) significa f(1,1);

- Esa invocacin permite que se desarrolle el mdulo 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 parntesis.

- La variable a, servir para un paso de parmetros de entrada, y la variable b para


un paso de parmetros de entrada/salida por que lo acompaa el operador de
direccin & (para hacer referencia, es decir apuntar a la direccin 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 direccin de memoria (en base hexadecimal) de la variable y.

- El mdulo f, es independiente al mdulo Principal, por lo que la declaracin 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 mdulo f, mientras que el valor original de x se
mantiene y no sufre los cambios que realice en la variable a.

- Lo mismo ocurrira con la variable b, pero en este caso, b no es copia de y, sino


que invoca la direccin de memoria de y, por lo que los cambios que realice en b,
afecta directamente a y.
Se tiene dos tipos de mdulos de programa: Procedimiento y Funcin.

3 PROCEDIMIENTOS
Son mdulos que se utilizan para elaborar un conjunto de instrucciones, indepen-
dientes y reutilizables, pero definiendo claramente el significado y utilidad de esa
porcin de programa (cohesin).
Declaracin en C/C++:
void NombreProcedimiento( )
void NombreProcedimiento (argumentos)
ollo
nidos 36
Actividades Autoevaluacin UNIDAD I: ALGORITMOS Y PROGRAMACIN ESTRUCTURADA

as Glosario Bibliografa
nadas
4 FUNCIONES
Son mdulos que tienen la misma definicin de un procedimiento, pero con la
particularidad de que permite devolver UN valor en una variable.
torio Anotaciones
Declaracin en C/C++:
Tipo_dato NombreFuncin( )
Tipo_dato NombreFuncin(argumentos)

Nota:
- En la Funcin, 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 ningn valor, se escribe la palabra void,
que indica vaci o sin especificar un tipo de dato.
- Tanto en funcin y en procedimiento, se puede declarar con o sin argumentos,
es decir los argumentos son el envo de valores de variables a travs de estos m-
dulos y pueden ser paso de parmetros por entrada o paso de parmetros por
entrada/salida.

Pasamos a un ejemplo, simple en solucionar, pero el objetivo de este ejemplo es


crear y comparar el uso de Funcin, Procedimiento, con o sin argumentos.

Ejemplo: se tiene el siguiente programa simple para sumar dos nmeros

//Programa Simple
#include<iostream>
using namespace std;
void main()
{ int a,b,c;
cout<<Ingrese valor de a: \t;
cin>>a;
cout<<Ingrese valor de b: \t;
cin>>b;
c=a+b;
cout<<c; cout<<\n;
system(PAUSE);
}

Es simple porque todas las instrucciones de programa para lograr sumar dos nme-
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 estn escribiendo solo en el Mdulo
Principal main( )

A continuacin se muestra la forma para crear un mdulo llamado sumar, usando


la siguiente tcnica: creando el mdulo antes del mdulo que lo invoca.

El desarrollo del programa se muestra con el uso Procedimiento con y sin argumen-
tos, y usando Funcin con y sin argumentos.
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD I: ALGORITMOS Y PROGRAMACIN ESTRUCTURADADesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
37

Lecturas Glosario Bibliografa


seleccionadas

//Procedimientos con Argumentos: Ejemplo 1


#include<iostream>
using namespace std; Recordatorio Anotaciones
void sumar(int a, int b)
{ int c;
c=a+b;
cout<<c; cout<<\n;
}
void main()
{ int a,b;
cout<<Ingrese valor de a: \t; cin>>a;
cout<<Ingrese valor de b: \t; cin>>b;
sumar(a,b);
system(PAUSE);
}

//Procedimientos sin Argumentos: Ejemplo 2


#include<iostream>
using namespace std;
void sumar()
{ int a,b,c;
cout<<Ingrese valor de a: \t; cin>>a;
cout<<Ingrese valor de b: \t; cin>>b;
c=a+b;
cout<<c;
}
void main()
{ sumar( );
system(PAUSE);
}

Descripcin:
- En ambos casos, con o sin argumentos, el mdulo sumar( ) est realzando exac-
tamente la tarea para la cual ha sido creada, es decir, sumar dos nmeros.

- Adems, en el Mdulo principal main( ), se invoca al mdulo sumar ( ) exacta-


mente con su nombre, sin ayuda de ninguna otra variable, ya que no devuelve
ningn valor.

- Pero, en ambos casos, la tarea de leer los valores de a y b, estn siendo asumidos
en el primer caso por el mdulo principal, o en el segundo caso, por el mdulo
sumar. Esta tarea tambin ser asumida por un mdulo apropiado que permita
realizar la tarea de obtener los valores, sin recargar la responsabilidad de otros
mdulos. (Se ver mas adelante)
ollo
nidos 38
Actividades Autoevaluacin UNIDAD I: ALGORITMOS Y PROGRAMACIN ESTRUCTURADA

as Glosario Bibliografa
nadas

//Funciones con Argumentos: Ejemplo1


#include<iostream>
torio Anotaciones
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; cin>>a;
cout<<Ingrese valor de b: \t; cin>>b;
sum=sumar(a,b);
cout<<Valor de la suma de a y b: <<sum;
cout<<\n;
system(PAUSE);
}

//Funciones sin Argumentos: Ejemplo 2


#include<iostream>
using namespace std;
int sumar()
{ int a,b,c;
cout<<Ingrese valor de a: \t; cin>>a;
cout<<Ingrese valor de b: \t; cin>>b;
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);
}

Descripcin:
- En ambos casos, con o sin argumentos, el mdulo sumar( ) est realzando exac-
tamente la tarea para la cual ha sido creada, es decir, sumar dos nmeros.

- El mdulo sumar( ), est siendo declarado acompaado 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 mdulo principal, al invocar al mdulo 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 mdulo apropiado.

Otra Manera de definir un Procedimiento y una Funcin, con o sin argumentos,


es con la tcnica: declarar de manera global a la funcin o procedimiento, es
decir en la cabecera del programa, y luego desarrollar las instrucciones de la fun-
cin o procedimiento despus del Mdulo Principal.
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD I: ALGORITMOS Y PROGRAMACIN ESTRUCTURADADesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
39

Lecturas Glosario Bibliografa


seleccionadas

//Procedimientos con Argumentos


#include<iostream>
using namespace std;
Recordatorio Anotaciones
void sumar(int a, int b);
int main()
{ int a,b;
cout<<Ingrese valor de a: \t; cin>>a;
cout<<Ingrese valor de b: \t; cin>>b;
sumar(a,b);
return 0;
}
void sumar(int a, int b)
{ int c;
c=a+b;
cout<<c;
cout<<\n;
}

//Funciones con Argumentos


#include<iostream>
using namespace std;
int sumar(int a, int b);
void main()
{ int sum,a,b;
cout<<Ingrese valor de a: \t; cin>>a;
cout<<Ingrese valor de b: \t; cin>>b;
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;
}

Descripcin:
- El ejemplo anterior solo ha sido dado con Procedimientos y Funciones con ar-
gumentos, pero tambin puede darse sin argumentos.

- En esta forma, el orden de creacin de los mdulos no es relevante, siempre y


cuando estn 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 nmero de hijos; si son cuatro o ms hijos, la
mitad le tocar al hermano mayor y el resto se dividir entre los dems hermanos.

#include<iostream>
using namespace std;

//procedimientos sin argumentos


void herencia()
{ float her,may;
int num;
cout<<Ingresar importe de herencia \n;
cin>>her;
cout<<Ingresar cantidad de hijos \n;
cin>>num;
ollo
nidos 40
Actividades Autoevaluacin UNIDAD I: ALGORITMOS Y PROGRAMACIN ESTRUCTURADA

as Glosario Bibliografa
nadas

if(num<4)
{ her=her/num;
cout<<Herencia a cada hijo es <<her;
torio Anotaciones
}
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 LIBRERAS DE PROGRAMACIN CREADAS POR EL USUARIO


Al elaborar programas, adems de crear mdulos independientes y reutilizables en
el programa fuente, Ud. se ver en la necesidad de usar esos mismos mdulos en
otros programas fuentes, diferentes entre s, ya que el algoritmo que necesita son
los mismos para cada uno de ellos.

Existen libreras de cabecera (header, de alli la extensin .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 extensin .cpp) como parte de la reutilizacin de
cdigo.

Ejemplo 1:
Leer un nmero entero diferente a cero, y si es positivo, reportar El numero es
positivo, caso contrario es negativo.

Solucin:
- Crear la librera con extensin .h llamado lecturadato.h para crear la funcin de
lectura de datos enteros, llamada leedatoe( ).

lecturadato.h

#include<iostream>
using namespace std;
int leedatoe()
{ int dato;
do{
cout<<Ingrese valor del dato;
cin>>dato;
}while(dato==0);
return dato;
}

- Crear el programa Ejemplo.cpp que invoca a la librera lecturadato.h, especifican-


do la ruta que se encuentre:
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD I: ALGORITMOS Y PROGRAMACIN ESTRUCTURADADesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
41

Lecturas Glosario Bibliografa


seleccionadas
Ejemplo: cpp

#include<iostream>
Recordatorio Anotaciones
#include c:\programas\lecturadato.h
using namespace std;
void main()
{ int num;
num=leedatoe();
if(num>0)
cout<<El numero es positivo;
else
cout<<El numero es negativo;
system(PAUSE);
}

Descripcin:
- Al invocar a lecturadato.h, a travs de su ruta de ubicacin, permite usar las veces que se
requeira, al mdulo leedatoe( ) que se encuentra ubicado dentro de librera creada.

- Si se tiene otro programa con la extensin .cpp, puede tambin invocar a la libre-
ra lecturadato.h, sin ningn inconveniente.

- Puede agregar otros mdulos de lectura a la librera lecturadato.h, segn el tipo


de dato que necesite.

- Escribir la ruta de la librera se hace innecesaria por la ayuda que ofrece las inter-
faces de la herramienta de programacin que ese est usando.

Ejemplo: LecturaDatos.h

Figura Nro 7: Ejemplo de Librera LecturaDatos.h


(Elaboracin personal)
ollo
nidos 42
Actividades Autoevaluacin UNIDAD I: ALGORITMOS Y PROGRAMACIN ESTRUCTURADA

as Glosario Bibliografa
nadas
RepartoHerencia.cpp

torio Anotaciones

Figura Nro 8: Ejemplo de Programa Fuente RepartoHerencia.cpp


(Elaboracin personal)

Descripcin:
- 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 mdulos estn creados en la librera
LecturaDatos.h, que es invocada en el programa fuente.

- El mdulo principal main( ) se debe escribir lneas abajo del programa fuente, y debe
invocar al mdulo Herencia( ), como ya se ha explicado en el ejemplo anterior.

TEMA N 6: FUNCIONES RECURSIVAS

En cierta ocasin en un aula de clase, pregunt si podan definir o dar un ejemplo de


recursividad, sorprendindome la respuesta de un estudiante: Si yo tengo un apuro
econmico, vendo mi reproductor de msica, y atiendo ese apuro. Es decir, un recurso
que le pertenece a una entidad, es usada nuevamente por la misma entidad para buscar
una solucin, eso es Recursividad, finaliz.

1 DEFINICIN 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 funcin recursiva debe tener algn punto de finalizacin o valor base.
- La funcin recursiva debe acercarse a ese punto de finalizacin o valor base.
(Eduardo Raffo Lecca, Turbo C++)
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD I: ALGORITMOS Y PROGRAMACIN ESTRUCTURADADesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
43

Lecturas Glosario Bibliografa


seleccionadas
2 RECURSIVIDAD DEL FACTORIAL
n!
4! = 4 * 3 * 2 * 1
4! = 4 * 3 * 2 * 1 Recordatorio Anotaciones
4 * 3! Es decir n*(n-1)! 4 * 3!
3! = 3 * 2 * 1 3! = 3 * 2 * 1
3 * 2!
3 * 2! Es decir n*(n-1)! 2! = 2 * 1
2! = 2 * 1 2 * 1!
2 * 1! Es decir n*(n-1)! 1! = 1 * 0!
0! = 1
1! = 1 * 0!
0! = 1 1 * 1 * 2 * 3 * 4 = 24

int factorial(int n)
{ if (n == 0)
return 1;
else
return n*factorial(n-1);
}

3 RECURSIVIDAD DE LA MULTIPLICACIN
a*b
3*4=3+3+3+3
3*4=3+3+3+3 3 + (3 * 3)
3 + (3 * 3) 3*3=3+3+3
3 + (3 * 2)
3*3=3+3+3 3*2=3+3
3 + (3 * 2) 3 + (3 * 1)
3*2=3+3 3*1 =3

3 + (3 *1) 3 + 3 + 3 + 3 = 12
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 estn dispuestos del tamao grande al ms pequeo. No puede estar un
disco grande sobre uno pequeo.

A continuacin se tiene el algoritmo, puesto a prueba a travs del Mtodo del r-


bol, muy til para comprobar la recursividad.
ollo
nidos 44
Actividades Autoevaluacin UNIDAD I: ALGORITMOS Y PROGRAMACIN ESTRUCTURADA

as Glosario Bibliografa
nadas

torio Anotaciones

Figura Nro 9: Ejemplo de Mtodo del rbol para Torres de Hanoi


(Elaboracin personal)

Diagrama Objetivos Inicio

ACTIVIDAD N 2
Desarrollo Actividades Autoevaluacin
de contenidos

Esta actividad puede consultarla en su aula virtual.

Lecturas Glosario Bibliografa


seleccionadas

Recordatorio Anotaciones
ALGORTMIA Y ESTRUCTURA DE DATOS
Diagrama Objetivos Inicio
UNIDAD I: ALGORITMOS Y PROGRAMACIN ESTRUCTURADADesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
45

Desarrollo Actividades Autoevaluacin


de contenidos Lecturas Glosario Bibliografa
seleccionadas

LECTURA SELECCIONADA N 1
Lecturas Glosario Bibliografa
seleccionadas
Recordatorio Anotaciones
INTRODUCCIN A LOS SUBALGORITMOS O SUBPROGRAMAS
Luis Joyanes Aguilar, 2008, Fundamentos de Programacin. Pg. 202

Recordatorio Anotaciones

Un mtodo ya citado para solucionar un problema complejo es dividirlo en subproble-


mas problemas ms sencillos y a continuacin dividir estos subproblemas en otros
ms simples, hasta que los problemas ms pequeos sean fciles de resolver. Esta tcnica
de dividir el problema principal en subproblemas se suele denominar divide y vence-
rs (divide and conquer). Este mtodo de disear la solucin de un problema principal
obteniendo las soluciones de sus subproblemas se conoce como diseo descendente
(top-down design). Se denomina descendente, ya que se inicia en la parte superior
con un problema general y el diseo especfico 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 diseo descendente pueden implementarse fcilmente en lenguajes


de programacin de alto nivel, como C/C++, Pascal o Fortran. Estas partes independientes
se denominan subprogramas o subalgoritmos si se empelan desde el concepto algortmico.

La correspondencia entre el diseo descendente y la solucin por computadora en


trminos de programa principal y subprogramas se analizar a lo largo de este captulo.
Consideremos el problema del clculo de la superficie (rea) de un rectngulo. Este
problema se puede dividir en tres subproblemas:
Subproblema 1: Entrada de datos de altura y base.
Subproblema 2: Clculo 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 // clculo de la superficie
Escribir (base, altura, rea) // salida de resultados

El mtodo descendente se muestra en la Figura:

Figura Nro 10: Diseo Descendente


(Fuente: Luis Joyanes Aguilar. Fundamentos de Programacin)

El problema principal se soluciona por el correspondiente programa o algoritmo prin-


cipal tambin llamado controlador o conductor (driver) y la solucin de los sub-
problemas mediante subprogramas, conocidos como procedimientos (subrutinas) o
funciones. Los subprogramas, cuando se tratan en lenguaje algortmico, se denominan
tambin subalgoritmos.
ollo
nidos 46
Actividades Autoevaluacin UNIDAD I: ALGORITMOS Y PROGRAMACIN ESTRUCTURADA

as Glosario Bibliografa
nadas
Un subprograma puede realizar las mismas acciones que un programa: 1) aceptar datos,
2) realizar algunos clculos, 3) devolver resultados. Un subprograma, sin embargo, se
utiliza por el programa para un propsito especfico. El subprograma recibe datos des-
torio Anotaciones
de el programa y le devuelve resultados. Haciendo un smil 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 continuacin
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: funcin y procedimiento


(Fuente: Luis Joyanes Aguilar. Fundamentos de Programacin)

Figura Nro 12: Un programa con diferentes niveles de subprogramas


(Fuente: Luis Joyanes Aguilar. Fundamentos de Programacin)

Diagrama Objetivos Inicio

Desarrollo Actividades Autoevaluacin


de contenidos

GLOSARIO DE LA UNIDAD I
Lecturas Glosario Bibliografa
seleccionadas

Argumento: valores suministrados a un mdulo de programa, al momento de ser invo-


cado.
Recordatorio Anotaciones

Librera: es un archivo, que contiene cdigo, usualmente en mdulos de programa.


Que pueden ser reutilizados por diferentes proyectos de programa.

Programa fuente: algoritmo codificado en un lenguaje de programacin, que adminis-


tra otros mdulos de programa, y es necesario para la ejecucin del programa.

String.h: librera del compilador, en este caso el C/C++, que permite usar el tipo de dato
del mismo nombre: string.
ALGORTMIA Y ESTRUCTURA DE DATOS
Objetivos Inicio
UNIDAD I: ALGORITMOS Y PROGRAMACIN ESTRUCTURADADesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
47

Actividades Autoevaluacin
os Lecturas Glosario Bibliografa
seleccionadas

BIBLIOGRAFA DE LA UNIDAD I
Glosario Bibliografa
s
Recordatorio Anotaciones

Carrasco Loli Angela. Principios de Programacin. Junio 2005

o Anotaciones
Joyanes Aguilar, Luis. Fundamentos de Programacin. 4ta. ed. Espaa: McGraw-Hill;
2008.

Raffo Lecca, Eduardo. Turbo C++. 1 ed. Lima: Mundigraph; 2000.

Objetivos Inicio

AUTOEVALUACIN DE LA UNIDAD I
Actividades Autoevaluacin
s

INSTRUCCIONES: Lee detenidamente y responde las siguientes preguntas:

s
Glosario
1. Indique la alternativa que describa la caracterstica Ser Preciso de un algoritmo:
Bibliografa

a) Slo se desarrollarn las tareas programadas y con los datos suministrados.


b) Las tareas desarrolladas deben permitir ponerlas a prueba antes de ejecutar.
o Anotaciones
c) Las tareas de un algoritmo tienen un orden de realizacin.
d) Se emplear los recursos necesarios para el desarrollo de las tareas.
e) Se debe expresar en una forma estndar, comnmente aceptada.

2. El programa traductor denominado compilador realiza el siguiente flujo de trabajo.


a) Obtiene el programa fuente, genera el cdigo objeto, lo enlaza al cdigo mqui-
na y genera el programa ejecutable.
b) Obtiene el programa fuente, genera el cdigo algoritmo, lo enlaza al cdigo
mquina y genera el programa ejecutable.
c) Obtiene el programa fuente, genera el cdigo objeto, lo enlaza al cdigo fuente
y genera el programa ejecutable.
d) Obtiene el programa fuente, genera el cdigo mquina, lo enlaza al cdigo fuen-
te y genera el programa ejecutable.
e) Obtiene el programa fuente, genera el cdigo algoritmo, lo enlaza al cdigo
fuente y genera el programa ejecutable.

3. Dado el siguiente bloque de cdigo que utiliza una estructura repetitiva, indique
que valores lgicos de la tabla de verdad (Verdadero=V y Falso=F) se necesita en la
condicin, para que no solicite nuevamente el ingreso el valor:

a) V,V.
b) F,V. do{
cout<<Ingrese valor: ;
c) V,F.
cin>>valor;
d) F,F. }while(valor==S || valor==s);
e) FFV.

4. Indique la alternativa que presenta el orden de ejecucin de la estructura repetitiva


ollo
nidos 48
Actividades Autoevaluacin UNIDAD I: ALGORITMOS Y PROGRAMACIN ESTRUCTURADA

as Glosario Bibliografa
nadas
Para:

for( i = 0; i < n; i++)


{ accion 1;
torio Anotaciones
accin m;
}

a) Inicializa la variable de recorrido, compara que est dentro del lmite, incre-
menta la variable, realiza las acciones, e inicia nuevamente el mismo orden de
ejecucin.
b) Inicializa la variable de recorrido, compara que est dentro del lmite, realiza
las acciones, incrementa la variable e inicia nuevamente el mismo orden de
ejecucin.
c) Inicializa la variable de recorrido, compara que est dentro del lmite, incremen-
ta la variable, realiza las acciones, y finaliza el orden de ejecucin.
d) Inicializa la variable de recorrido, incrementa la variable, compara que est dentro
del lmite, realiza las acciones, e inicia nuevamente el mismo orden de ejecucin.
e) Inicializa la variable de recorrido, decrementa la variable, compara que est
dentro del lmite, realiza las acciones, e inicia nuevamente el mismo orden de
ejecucin.

5. Dado el siguiente bloque de cdigo, indique el tipo de sentencia:

if(num > 0)
if(num > 30 && num < 60 )
cout<<pow(num,2);

a) Sentencia Repetitiva Para.


b) Sentencia Selectiva Compuesta.
c) Sentencia Repetitiva Hacer-Mientras.
d) Sentencia Selectiva Mltiple.
e) Sentencia Selectiva Anidada.

6. Indique la alternativa cuyo enunciado no es correcto:


a) Las funciones y procedimientos son mdulos de programa.
b) Las funciones recursivas se invocan a s mismas.
c) Slo las funciones usan argumentos, los procedimientos no lo usan.
d) Los mdulos son independientes y reutilizables.
e) Los pasos de parmetros son dos: por valor y por referencia.

7. Indique la alternativa que defina a permite usar mdulos independientes, en dife-


rentes programas.
a) Funcin Recursiva.
b) Paso de Parmetros por valor.
c) Sentencias Repetitivas.
d) Libreras de programacin.
e) Sentencias Selectivas.

8. Indique a que algoritmo recursivo, se refiere el siguiente mdulo de programa:


ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD I: ALGORITMOS Y PROGRAMACIN ESTRUCTURADADesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
49

Lecturas Glosario Bibliografa


seleccionadas

int modulo(int a, int b)


{
if(b==0)
return 1; Recordatorio Anotaciones

else
return a*modulo(a,b-1);
}

a) Funcin Recursiva de la Multiplicacin.


b) Funcin Recursiva del Factorial.
c) Funcin Recursiva de la Potencia.
d) Funcin Recursiva de Fibonacci.
e) Funcin Recursiva de Torres de Hanoi.

9. El paso de parmetros 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 parmetros
por referencia.

void calcular(int x, int & y)


{ int c;
c = x + y; cout<<c;
}

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.
50
ALGORTMIA Y ESTRUCTURA DE DATOS
Desarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
51

Diagrama Objetivos Inicio Lecturas Glosario Bibliografa


seleccionadas

Desarrollo
UNIDAD II: ESTRUCTURAS DE DATOS ESTTICAS
Actividades Autoevaluacin
de contenidos
Recordatorio Anotaciones

DIAGRAMA DE PRESENTACIN DE LA UNIDAD


Diagrama
Lecturas Objetivos
Glosario Inicio
Bibliografa
seleccionadas

LECTURAS
CONTENIDOS ACTIVIDADES
Desarrollo Actividades Autoevaluacin SELECCIONADAS
de contenidos
Recordatorio Anotaciones

Lecturas Glosario
AUTOEVALUACIN
Bibliografa
BIBLIOGRAFA
seleccionadas

ORGANIZACIN DE LOS APRENDIZAJES


Recordatorio Anotaciones

CONOCIMIENTOS PROCEDIMIENTOS ACTITUDES

Tema N 1: Estructuras de Aplica los algoritmos de 1. Asume con responsabilidad


1.
Datos actualizacin de arreglos sus actividades acadmicas
1. Definicin de Estructura de unidimensionales: aadir, asignadas
Datos insertar, eliminar; en la 2. Realiza con honestidad las
construccin de programas evaluaciones asignadas
2. Clasificacin de Estructura
de Datos 2.
Aplica los algoritmos de
bsqueda y ordenacin de
arreglos unidimensionales
Tema N 2: Arreglos Unidi- en la construccin de pro-
mensionales gramas
1. Definicin de Arreglos Uni- 3.
Aplica los algoritmos de
dimensionales actualizacin de arreglos
2.
Algoritmos de Actualiza- bidimensionales en la cons-
cin truccin de programas
3. Bsqueda de Arreglos Uni- 4. Usa los algoritmos de ma-
dimensionales triz transpuesta, diagonales,
4. Ordenacin de Arreglos rodean a un nmero; con
Unidimensionales arreglos bidimensionales

Tema N 3: Arreglos Bidimen- Actividad N 1


sionales Elaboracin de Programas usan-
do arreglos unidimensionales,
1.
Definicin Arreglos Bidi-
para casos propuestos
mensionales
2.
Algoritmos de Actualiza-
cin de Arreglos Bidimen- Actividad N 2
sionales Elaboracin de Programas usan-
do arreglos bidimensionales,
para casos propuestos
Lectura seleccionada N 1
Arrays Multidimensionales
Tarea Acadmica N 1
Jess Carretero Prez. Garca
Carballena, Felix. Prez Loba- Construccin de Programas y
to Jos prueba de escritorio, usando
Arreglos

Autoevaluacin de la Unidad II
ollo
nidos 52
Actividades Autoevaluacin UNIDAD II: ESTRUCTURAS DE DATOS ESTTICAS

as Glosario Bibliografa
nadas
TEMA N 1: ESTRUCTURAS DE DATOS

1 DEFINICIN DE ESTRUCTURA DE DATOS


torio Anotaciones
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 CLASIFICACIN DE ESTRUCTURA DE DATOS

A. Estructuras de Datos Simples: permiten almacenar un solo valor en un espacio de


memoria (variable)
a. Estructuras de Datos Estndar: es el almacenamiento que todos los lenguajes de
programacin utilizan, dado el tipo de dato que se defina.

Por ejemplo, se tiene una estructura estndar de tipo real para una variable deno-
minada precio:
Declaracin en C/C++: float precio;

Representacin Grfica en Memoria, asignndole el valor de precio de 12.6:

12.6

float precio

b. Estructuras de Datos No Estndar: es la estructura que no pertenece a un lenguaje


de programacin especfico, 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 Estticos: necesitan definir su tamao inicial, antes de la eje-
cucin del programa. Como ejemplo de este tipo de estructuras tenemos a los arre-
glos unidimensionales, arreglos bidimensionales y estructuras (registros).

Declaracin de Arreglo Unidimensional en C/C++: char Mensaje[11];


Representacin Grfica en Memoria, asignndole un valor en cada celda:
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD II: ESTRUCTURAS DE DATOS ESTTICASDesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
53

Lecturas Glosario Bibliografa


seleccionadas

char Mensaje b i e n v e n i d o ` \0

Declaracin de Registro en C/C++: Recordatorio Anotaciones

struct Paciente{
int codPaciente;
string apePaciente;
string nombPaciente;
char generoPaciente;
};

Representacin Grfica en Memoria, asignndole un valor en cada celda:

b. Estructuras de Datos Dinmicos: no necesita definir tamao 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 DEFINICIN DE ARREGLOS UNIDIMENSIONALES


Tambin llamado vectores, es un conjunto finito y ordenado de elementos de un
mismo tipo de dato (homogneos). La definicin de un arreglo es como sigue:

TipoDato NombreArreglo[tamao]
Ejemplo: Entero M[10]

Acceso a los elementos de un arreglo unidimensional:


Nombre del arreglo [posicin del elemento];

Ejemplo: Grfico de Arreglo Unidimensional


ollo
nidos 54
Actividades Autoevaluacin UNIDAD II: ESTRUCTURAS DE DATOS ESTTICAS

as Glosario Bibliografa
nadas

edad[0] edad[1] edad[2] edad[3] edad[4]

torio Anotaciones
edad 23 45 34 19 62
0 1 2 3 4

Descripcin:
- Nombre del arreglo: edad.
- Tamao Mximo del arreglo (cantidad de celdas): 5
- Posicin de cada celda: 0, 1, 2, 3, 4 (recorridos con la variable index: i , desde la
posicin 0 hasta la posicin del tamao mximo -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 posicin de la celda del arreglo.

El siguiente programa lee un arreglo de nmeros enteros y encuentra el mayor y me-


nor elemento. El mx de elementos es 100 pero solo ingresa n elementos.

//Programa para hallar el mayor y menor elemento de un arreglo


#include<iostream>
#include LecturaDatos.h
#define MAXIMO 100
using namespace std;

void leerarre(int N, int array[])


{ int i;
for(i=0;i<=N-1;i++)
{ cout<<"Ingrese altura alumno A"<<"["<<i<<"]"<<":\t";
cin>>array[i]; cout<<"\n"; }
}
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]; }
cout<<"El mayor es :"<<mayor<<"\n";
cout<<"El menor es :"<<menor<<"\n";
}
void main()
{ int A[MAXIMO];
int n;
do{ cout<<"Ingrese cantidad de elementos (>= a CERO y <= que 100): ";
n=leedatoe();
}while(n<=0 || n>MAXIMO);
leerarre(n,A);
comparar(n,A);
system("PAUSE");
}

2 ALGORITMOS DE ACTUALIZACIN
Los Arreglos necesitan actualizarse mientras se efecta algn proceso con ellos. La
actualizacin de arreglos consiste en tres operaciones: Aadir elementos al final
del arreglo (siempre y cuando exista espacio en el arreglo), Insertar elementos en
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD II: ESTRUCTURAS DE DATOS ESTTICASDesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
55

Lecturas Glosario Bibliografa


seleccionadas
cualquier posicin del arreglo y Eliminar elementos.

Aadir: Aadir un valor en la ltima posicin.


Recordatorio Anotaciones
#include<iostream>
#includeLecturaDatos.h
#define MAX 100
using namespace std;
void ingresadatos(int V[MAX], int n)
{ int i;
cout<<"Ingrese elementos para el arreglo "; cout<<"\n";
for(i=0;i<=n-1;i++)
{ cout<<"Elemento ["<<i<<"]"<<":";
cin>>V[i]; }
}
void mostrar(int V[MAX], int n)
{ int i;
cout<<"Los elementos del arreglo son"; cout<<"\n";
for(i=0;i<=n-1;i++)
{ cout<<"Elemento"<<"["<<i<<"]"<<":\t";
cout<<V[i]; cout<<"\n"; }
}
int ultimoelemento(int a[MAX], int n)
{ int i,p = n;
if (p<MAX)
{ for(i=p;i<=n;i++) //ingresa nuevo elemento
{ cout<<"\n Ingrese nuevo elemento de arreglo "<<":\t";
cin>>a[i]; }
n=n+1;
return n; }
}
void main()
{ int A[MAX];
int num,elem;
do{ cout<<"Ingrese numero de elementos para el arreglo: ";
num= leedatoee();
}while(num<=0 || num>MAX);
ingresadatos(A,num); cout<<"\n";
mostrar(A,num); cout<<"\n";
elem=ultimoelemento(A, num);
mostrar(A,elem);
system("PAUSE");
}

Insertar: Insertar un valor en cualquier posicin, desplazando los elementos desde


la ultima celda hasta la posicin que desea insertar.
#include<iostream>
#includeLecturaDatos.h
#define MAX 100
using namespace std;
void ingresadatos(int V[MAX], int n)
{ int i;
cout<<"Ingrese elementos para el arreglo "; cout<<"\n";
ollo
nidos 56
Actividades Autoevaluacin UNIDAD II: ESTRUCTURAS DE DATOS ESTTICAS

as Glosario Bibliografa
nadas
for(i=0;i<=n-1;i++)
{ cout<<"Elemento ["<<i<<"]"<<":";
cin>>V[i]; }
torio Anotaciones
}
void mostrar(int V[MAX], int n)
{ int i;
cout<<"Los elementos del arreglo son"; cout<<"\n";
for(i=0;i<=n-1;i++)
{ cout<<"Elemento"<<"["<<i<<"]"<<":\t";
cout<<V[i]; cout<<"\n"; }
}
int posicion(int a[MAX], int n)
{ int i,p;
cout<<"\n 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;
cout<<"\n 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{ cout<<"Ingrese numero de elementos para el arreglo: ";
num= leedatoee();
}while(num<=0 || num>MAX);
ingresadatos(A,num); cout<<"\n";
mostrar(A,num);
cout<<"\n";
pos=posicion(A,num);
elem=nuevoelemento(A,pos, num);
mostrar(A,elem);
system("PAUSE");
}

Eliminar: Eliminar un valor en cualquier posicin, desplazando los elementos des-


de la derecha del valor que se quiere eliminar.
#include<iostream>
#includeLecturaDatos.h
#define MAX 100
using namespace std;
void ingresadatos(int V[MAX], int n)
{ int i;
cout<<"Ingrese elementos para el arreglo "; cout<<"\n";
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD II: ESTRUCTURAS DE DATOS ESTTICASDesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
57

Lecturas Glosario Bibliografa


seleccionadas
for(i=0;i<n;i++)
{ cout<<"Elemento ["<<i<<"]"<<":";
cin>>V[i]; }
Recordatorio Anotaciones
}
void mostrar(int V[MAX], int n)
{ int i;
cout<<"Los elementos del arreglo son"; cout<<"\n";
for(i=0;i<n;i++)
{ cout<<"Elemento"<<"["<<i<<"]"<<":\t";
cout<<V[i]; cout<<"\n"; }
}
int elimina(int a[MAX], int n)
{int i,p;
cout<<"\n Ingrese posicion a eliminar elemento de arreglo "<<":\t";
p=leedatoe();
i=p;
while (i<n)
{ a[i]=a[i+1];
i++;
}
return n-1;
}
void main()
{ int A[MAX]; int num,el;
do{ cout<<"Ingrese numero de elementos para el arreglo: ";
num= leedatoee();
}while(num<=0 || num>MAX);
ingresadatos(A,num); cout<<"\n";
mostrar(A,num); cout<<"\n";
el=elimina(A,num);
mostrar(A,el);
system("PAUSE");
}

3 BSQUEDA DE ARREGLOS UNIDIMENSIONALES


La bsqueda es la recuperacin de la informacin de los elementos de un arreglo.
Para ello se necesita recorrer el arreglo y hacer uso de uno de los mtodos de bs-
queda de un elemento, revisaremos dos tipos: Bsqueda Secuencial y Bsqueda
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.


#include<iostream>
#includeLecturaDatos.h
#define MAX 100
using namespace std;
void ingresadatos(int V[MAX], int n)
{ int i;
cout<<"Ingrese elementos para el arreglo "; cout<<"\n";
ollo
nidos 58
Actividades Autoevaluacin UNIDAD II: ESTRUCTURAS DE DATOS ESTTICAS

as Glosario Bibliografa
nadas
for(i=0;i<n;i++)
{ cout<<"Elemento ["<<i<<"]"<<":";
cin>>V[i]; }
torio Anotaciones
}
void mostrar(int V[MAX], int n)
{ int i;
cout<<"Los elementos del arreglo son"; cout<<"\n";
for(i=0;i<n;i++)
{ cout<<"Elemento"<<"["<<i<<"]"<<":\t";
cout<<V[i]; cout<<"\n"; }
}
void bsecuencial(int a[MAX], int n)
{ int elem,i; bool Encontrado = false;
cout<<"\n Ingrese elemento a buscar en el arreglo "<<":\t"; cin>>elem;
for(i=0;i<n;i++)
{ if(a[i]==elem)
{ Encontrado=true;
cout<<"\n Encontrado\t Posicion :\t"<<i<<"\t\n";
}
}
if(Encontrado==false)
{ cout<<"\n No Encontrado\t "; cout<<"\n\n"; }
}
void main()
{int A[MAX]; int num;
do{ cout<<"Ingrese numero de elementos para el arreglo: ";
num= leedatoee();
}while(num<=0 || num>MAX);
ingresadatos(A,num); cout<<"\n";
mostrar(A,num); cout<<"\n";
bsecuencial(A,num);
system("PAUSE");
}

B. Bsqueda 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 porcin del arreglo,
volvendo a dividira esa parte en dos, y buscar un nuevo valor central, repitiendo los
pasos anteriores.

#include<iostream>
#includeLecturaDatos.h
#define MAX 100
using namespace std;
void ingresadatos(int V[MAX], int n)
{ int i;
cout<<"Ingrese elementos para el arreglo ";cout<<"\n";
for(i=1;i<=n;i++)
{ cout<<"Elemento ["<<i<<"]"<<":";cin>>V[i]; }
}
void mostrar(int V[MAX], int n)
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD II: ESTRUCTURAS DE DATOS ESTTICASDesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
59

Lecturas Glosario Bibliografa


seleccionadas
{ int i;
cout<<"Los elementos del arreglo son"; cout<<"\n";
for(i=1;i<=n;i++)
Recordatorio Anotaciones
{ cout<<"Elemento"<<"["<<i<<"]"<<":\t";cout<<V[i]; }
}
void bbinaria(int a[MAX], int n)
{ int elem; int BAJO, ALTO, CENTRAL; BAJO=1; ALTO=n;
cout<<"\n Ingrese elemento a buscar"<<":\t"; cin>>elem;
CENTRAL=((BAJO+ALTO)/2);
while ((BAJO<=ALTO) && (a[CENTRAL]!=elem))
{ if(elem<a[CENTRAL])
{ALTO=CENTRAL-1;
CENTRAL=(BAJO+ALTO)/2;
}
else{
BAJO=CENTRAL+1;
CENTRAL=(BAJO+ALTO)/2;
}
}
if(elem==a[CENTRAL])
{ cout<<"\n ENCONTRADO \n";
cout<<"\n a["<<CENTRAL<<"] = "<<a[CENTRAL]; cout<<"\n";
}
else
cout<<"\n NO ENCONTRADO \n ";
}
void main()
{int A[MAX]; int num;
do{ cout<<"Ingrese numero de elementos para el arreglo: ";
num= leedatoee();
}while(num<=0 || num>MAX);
ingresadatos(A,num); cout<<"\n";
mostrar(A,num); cout<<"\n";
bbinaria(A,num);
system("PAUSE");
}

4 ORDENACIN DE ARREGLOS UNIDIMENSIONALES


Permite comparar elementos e intercambiar posiciones, ya sea en forma ascenden-
te o descendente.

//Ordenacin por Burbuja


#include<iostream>
#includeLecturaDatos.h
#define MAX 100
using namespace std;
void ingresadatos(int V[MAX], int n)
{ int i;
cout<<"Ingrese elementos para el arreglo "; cout<<"\n";
for(i=0;i<n;i++)
{ cout<<"Elemento ["<<i<<"]"<<":";
cin>>V[i]; }
ollo
nidos 60
Actividades Autoevaluacin UNIDAD II: ESTRUCTURAS DE DATOS ESTTICAS

as Glosario Bibliografa
nadas
}
void mostrar(int V[MAX], int n)
{ int i;
torio Anotaciones
cout<<"Los elementos del arreglo son"; cout<<"\n";
for(i=0;i<n;i++)
{ cout<<"Elemento"<<"["<<i<<"]"<<":\t";
cout<<V[i]; cout<<"\n"; }
}
void burbuja(int a[MAX], int n)
{ int i,j,temp;
for(i=0;i<n-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{ cout<<"Ingrese numero de elementos para el arreglo: ";
num= leedatoee();
}while(num<=0 || num>MAX);
ingresadatos(A,num); cout<<"\n\n";
burbuja(A,num);
mostrar(A,num);
system("PAUSE");
}

Diagrama Objetivos Inicio

ACTIVIDAD N 1
Desarrollo Actividades Autoevaluacin
de contenidos

Esta actividad puede consultarla en su aula virtual.

Lecturas Glosario Bibliografa


seleccionadas

Recordatorio Anotaciones
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD II: ESTRUCTURAS DE DATOS ESTTICASDesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
61

Lecturas Glosario Bibliografa


seleccionadas
TEMA N 3: ARREGLOS BIDIMENSIONALES

1 DEFINICIN DE ARREGLOS BIDIMENSIONALES.


Recordatorio Anotaciones
Tambin llamado matrices, es un conjunto finito y ordenado de elementos de un
mismo tipo de dato. La definicin de un arreglo es como sigue:

TipoDato NombreMatriz[nfilas][ncolumnas]
Ejemplo: Entero M[4][5]

//Lectura y Presentacin de Datos en una Matriz:


#include<iostream>
#includeLecturaDatos.h
#define MAX 100
using namespace std;
void ingresadatos(int M[MAX][MAX], int nf,int nc)
{ int i,j;
cout<<"Ingrese elementos para la matriz "; cout<<"\n";
for(i=0;i<=nf-1;i++)
for(j=0;j<=nc-1;j++)
{ cout<<"Elemento ["<<i<<"]"<<"["<<j<<"]"<<":";
cin>>M[i][j]; }
}
void mostrar(int M[MAX][MAX], int nf, int nc)
{ int i,j;
cout<<"Los elementos de la matriz son"; cout<<"\n";
for(i=0;i<=nf-1;i++)
{for(j=0;j<=nc-1;j++)
{ cout<<M[i][j]; cout<<"\t";
}
cout<<"\n";
}
}
void main()
{ int B[MAX][MAX]; int nf,nc;
do{ cout<<"Ingrese numero de filas: ";
nf= leedatoee();
}while(nf<=0 || nf>MAX);
do{ cout<<"Ingrese numero de columnas: ";
nc= leedatoee();
}while(nc<=0 || nc>MAX);
ingresadatos(B,nf,nc); cout<<"\n";
mostrar(B,nf,nc); cout<<"\n";
}
ollo
nidos 62
Actividades Autoevaluacin UNIDAD II: ESTRUCTURAS DE DATOS ESTTICAS

as Glosario Bibliografa
nadas
//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)
torio Anotaciones
{ int i,j;
if(nf==nc)
{ for(i=0;i<=nf-1;i++)
{ for(j=0;j<=nc-1;j++)
if(i==j)
{ cout<<"\n"; cout<<M[i][j]<<"\n";
}
else
cout<<" ";
cout<<"\n";
}
}
else
{cout<<"Columnas y filas deben ser iguales"; cout<<"\n\n"; }
}
void diagonalsecundaria(int M[MAX][MAX], int nf, int nc)
{ int i,j,k;
k=nc-1;
if(nf==nc)
{ for(i=0;i<nf;i++)
{ for(j=0;j<nc;j++)
if(j == k)
{ cout<<M[i][j]; }
else
cout<<"\t";
k--;
cout<<"\n";
}
}
else
{ cout<<"Para la Diagonales: columnas y filas deben ser
iguales"; cout<<"\n\n";
}
}

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)
{ cout<<"\n"; cout<<M[i][j]<<"\n"; }
else
{cout<<" ";}
k- -;
cout<<"\n";
}
}
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD II: ESTRUCTURAS DE DATOS ESTTICASDesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
63

Lecturas Glosario Bibliografa


seleccionadas
else
{ cout<<"Columnas y filas deben ser iguales"; cout<<"\n\n"; }
}
Recordatorio Anotaciones
void main()
{ int B[MAX][MAX]; int nf,nc;
do{ cout<<"Ingrese numero de filas: ";
nf= leedatoee();
}while(nf<=0 || nf>MAX);
do{ cout<<"Ingrese numero de columnas: ";
nc= leedatoee();
}while(nc<=0 || nc>MAX);
ingresadatos(B,nf,nc); cout<<"\n";
mostrar(B,nf,nc); cout<<"\n";
cout<<"Los elementos de la diagonal Principal: "<<"\n";
diagonal_principal(B,nf,nc); cout<<"\n";
cout<<"Los elementos de las diagonales : "<<"\n";
diagonales(B,nf,nc); cout<<"\n"; system("PAUSE");
}

2 ALGORITMOS DE ACTUALIZACIN DE ARREGLOS BIDIMENSIONALES


//Insertar fila y columna de una matriz
//Se entiende que se realizan los procedimientos de lectura de datos
int insertar_fila(int M[MAX][MAX], int nf, int nc)
{ int i,j,pos;
do{ cout<<"Ingrese posicion para insertar fila: ";
cin>>pos;
}while(pos<0 || pos>nf);
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++)
{ cout<<"M["<<pos<<"]"<<"["<<j<<"] : ";
cin>>M[pos][j];
}
nf++;
return nf;
}
int insertar_columna(int M[MAX][MAX], int nf, int nc)
{int i,j,pos;
do{ cout<<"Ingrese posicion para insertar columna: ";
cin>>pos;
}while(pos<0 || pos>nc);
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++)
{ cout<<"M["<<i<<"]"<<"["<<pos<<"] : ";
cin>>M[i][pos];
}
nc++;
return nc;
}
ollo
nidos 64
Actividades Autoevaluacin UNIDAD II: ESTRUCTURAS DE DATOS ESTTICAS

as Glosario Bibliografa
nadas
void main()
{ int B[MAX][MAX];
int nf,nc,fil,col;
torio Anotaciones
do{ cout<<"Ingrese numero de filas: ";
nf= leedatoee();
}while(nf<=0 || nf>MAX);
do{ cout<<"Ingrese numero de columnas: ";
nc= leedatoee();
}while(nc<=0 || nc>MAX);
ingresadatos(B,nf,nc); cout<<"\n";
mostrar(B,nf,nc); cout<<"\n";
cout<<"Inserta fila: "<<"\n";
fil=insertar_fila(B,nf,nc); cout<<"\n";
cout<<"Matriz Inicial con fila insertada";
mostrar(B,fil,nc); cout<<"\n";
cout<<"Inserta columna: "<<"\n";
col=insertar_columna(B,nf,nc); cout<<"\n";
cout<<"Matriz Inicial con columna insertada";
mostrar(B,nf,col); cout<<"\n";
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{ cout<<"Ingrese posicion para borrar fila: ";
cin>>pos;
}while(pos<0 || 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{ cout<<"Ingrese posicion para insertar columna: ";
cin>>pos;
}while(pos<0 || 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{ cout<<"Ingrese numero de filas: ";
nf= leedatoee();
}while(nf<=0 || nf>MAX);
do{ cout<<"Ingrese numero de columnas: ";
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD II: ESTRUCTURAS DE DATOS ESTTICASDesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
65

Lecturas Glosario Bibliografa


seleccionadas
nc= leedatoee();
}while(nc<=0 || nc>MAX);
ingresadatos(B,nf,nc); cout<<"\n";
Recordatorio Anotaciones
mostrar(B,nf,nc); cout<<"\n";
cout<<"Elimina fila: "<<"\n";
fil=borrar_fila(B,nf,nc); cout<<"\n";
cout<<"Matriz Inicial con fila eliminada";
mostrar(B,fil,nc); cout<<"\n";
cout<<"Elimina columna: "<<"\n";
col=borrar_columna(B,nf,nc); cout<<"\n";
cout<<"Matriz Inicial con columna eliminada";
mostrar(B,nf,col); cout<<"\n";
system("PAUSE");
}

Diagrama Objetivos Inicio

ACTIVIDAD N 2
Desarrollo Actividades Autoevaluacin
de contenidos

Esta actividad puede consultarla en su aula virtual.

Lecturas Glosario Bibliografa


seleccionadas

Diagrama Objetivos Inicio

Recordatorio Anotaciones

Desarrollo Actividades Autoevaluacin


de contenidos

LECTURA SELECCIONADA N 1
Lecturas Glosario Bibliografa
seleccionadas

ARRAYS MULTIDIMENSIONALES
Jess Carretero Prez. Garca Carballena, Felix. Prez Lobato Jos, 2007,
Recordatorio Anotaciones
Fundamentos de Programacin. Pg. 196

Hasta ahora se ha trabajado con vectores de una nica dimensin, llamados arrays uni-
dimensionales. Pero el lenguaje de programacin C tambin permite definir arrays de
varias dimensiones.

Suponga que se desea almacenar las temperaturas de un punto geogrfico durante un


ao, minuto a minuto. Para este problema, se podra usar la siguiente definicin:
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 nmero de elementos del array en cada dimensin. La pri-
mera dimensin tiene un total de 366 elementos, la segunda 24 y la tercera 60. La
primera dimensin est junto al nombre de la variable.

Aunque el ejemplo presenta tres dimensiones, podran definirse muchas ms. Lo habi-
tual es usar dos y tres dimensiones. Si un array unidimensional se conoce como vector,
un array bidimensional se denomina matriz.
ollo
nidos 66
Actividades Autoevaluacin UNIDAD II: ESTRUCTURAS DE DATOS ESTTICAS

as Glosario Bibliografa
nadas
Inicializacin y acceso a un array multidimensional
Considere ahora la siguiente definicin de una matriz de 4 filas y 2 columnas:
int matriz[4][2];
torio Anotaciones

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 expresin:
matriz[2][1]

Como se muestra en la figura 8.5, el ndice de una dimensin toma valores de la misma
manera que lo hace un vector: desde cero hasta el nmero de elementos menos uno.

Distribucin de los ndices de una matriz.

Un array multidimensional tambin es descrito como un array de arrays de ...


Ms 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 dimensin,


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 programacin como FORTRAN donde se almacenan por
columnas. En la siguiente figura se muestra de forma grfica como todos los elementos
de una misma fila se almacenan consecutivamente.

Disposicin de matriz en memoria.


ALGORTMIA Y ESTRUCTURA DE DATOS
Diagrama Objetivos Inicio
UNIDAD II: ESTRUCTURAS DE DATOS ESTTICASDesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
67

Desarrollo Actividades Autoevaluacin


de contenidos Lecturas Glosario Bibliografa
seleccionadas

GLOSARIO DE LA AUNIDAD II
Lecturas Glosario Bibliografa
seleccionadas
Recordatorio Anotaciones

Celda: es un espacio de memoria dentro de un arreglo, y si es bidimensional es referen-


ciado por fila y columna que ocupe.
Recordatorio
Objetivos Anotaciones
Inicio
Dimensin: es el conjunto de elementos que puede tener un arreglo, y puede ser desde
una dimensin hasta n dimensiones.

Actividades Autoevaluacin
os

BIBLIOGRAFA DE LA UNIDAD II
Glosario Bibliografa
s

Carretero Prez, Jess. Garca Carballena, Felix. Prez Lobato Jos. Fundamentos de
Programacin. 1ra. ed. Espaa: Thomson; 2007.

o Anotaciones
Joyanes Aguilar, Luis. Fundamentos de Programacin. 4ta. ed. Espaa: McGraw-Hill;
2008.
Lazo Aguirre Walter, programacin estructurada en C. problemas resueltos. Universi-
dad Privada Antenor Orrego, 1995
Objetivos Inicio

AUTOEVALUACIN DE LA UNIDAD II
Actividades Autoevaluacin
s

INSTRUCCIONES: Lee detenidamente y responde las siguientes preguntas:

s
Glosario
1. Indique la alternativa que describa la caracterstica de una estructura de datos
Bibliografa

esttica:
a) Necesita definir los valores antes de ejecutar el programa.
b) No necesita definir un tamao antes de ejecutar el programa.
o Anotaciones
c) Necesita mostrar los valores antes de ejecutar el programa.
d) Necesita definir un tamao antes de ejecutar el programa.
e) Necesita definir un tamao despus 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 Estndar.
b) Estructuras de Datos Compuesta Esttica.
c) Estructuras de Datos Simple Estndar.
d) Estructuras de Datos Dinmica Lineal.
e) Estructuras de Datos Dinmica No Lineal.

3. Indique la alternativa que contenga tres caractersticas de un arreglo:


a) Homogneo, Infinito, Secuencial.
b) Homogneo, Finito, Secuencial.
c) Heterogneo, Finito, Secuencial.
d) Heterogneo, Infinito, Secuencial.
e) Homogneo, Finito, No Secuencial.

4. En un arreglo unidimensional, se aade un elemento al final considerando:


a) Que se elimine el ltimo elemento.
b) Que no importa que exceda el tamao definido.
ollo
nidos 68
Actividades Autoevaluacin UNIDAD II: ESTRUCTURAS DE DATOS ESTTICAS

as Glosario Bibliografa
nadas
c) Que se elimine el primer elemento.
d) Que no se exceda el tamao definido.
e) Que se exceda a la cantidad ingresada.
torio Anotaciones

5. Para asignar directamente un valor de una posicin 2 de un arreglo A, a otra posi-


cin 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 posicin de fila y columna no sean iguales.
b) Que la posicin de una variable auxiliar y la de columna sean iguales.
c) Que la posicin de una variable auxiliar y la de columna no sean iguales.
d) Que la posicin de una variable auxiliar y la de fila sean iguales.
e) Que la posicin 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 posicin 0 hasta nmero de fila-1.
b) Por columna desde la posicin 0 hasta nmero de columna-1.
c) Por fila desde la posicin 0 hasta nmero de fila+1.
d) Por columna desde la posicin 0 hasta nmero de columna+1.
e) Por columna desde la posicin columna-1 hasta posicin 0.

8. Indique lo que realiza la lnea siete (lnea 7.) del cdigo para desplazar a la derecha,
en una operacin de insercin de elementos en un arreglo unidimensional:

1. int posicion(int a[MAX], int n)


2. { int i,p;
3. cout<<"\n Ingrese posicion a insertar un elemento:";
4. cin>>p;
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 posicin i, incrementando la variable i.


b) Asigna el valor de una posicin ms de i, en la posicin i.
c) Asigna el valor de una posicin incrementada de i.
d) Asigna el valor de una posicin ms de i, incrementando la variable i.
e) Asigna el valor de la posicin i, en una posicin ms.

9. Indique lo que realiza la lnea nueve (lnea 9.) del cdigo para la operacin de eli-
minacin de elementos en una columna un arreglo bidimensional:
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD II: ESTRUCTURAS DE DATOS ESTTICASDesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
69

Lecturas Glosario Bibliografa


seleccionadas

1. int borrar_columna(int M[MAX][MAX], int nf, int nc)


2. { int i,j,pos;
3. do{ Recordatorio Anotaciones
4. cout<<"Ingrese posicion para insertar columna: ";
5. cin>>pos;
6. }while(pos<0 || 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 ms uno, en una fila ms uno.


b) Asigna el valor de la columna actual ms uno, en la columna actual.
c) Asigna el valor de la columna actual, en una columna ms uno.
d) Asigna el valor de la fila actual, en una fila ms uno.
e) Asigna el valor de la fila actual ms uno, en la fila actual.

10. Dado el siguiente bloque de cdigo para bsqueda 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;
cout<<"\n Ingrese elemento a buscar"<<":\t";
cin>>elem;
CENTRAL=((BAJO+ALTO)/2);
while ((BAJO<=ALTO) && (a[CENTRAL]!=elem))
{ if(elem<a[CENTRAL])
{ALTO=CENTRAL-1;
CENTRAL=(BAJO+ALTO)/2;
}
else{
BAJO=CENTRAL+1;
CENTRAL=(BAJO+ALTO)/2;
}
}
if(elem==a[CENTRAL])
{ cout<<"\n ENCONTRADO \n";
cout<<"\n a["<<CENTRAL<<"] = "<<a[CENTRAL];
}
else
cout<<"\n NO ENCONTRADO \n ";
}

a) Para ejecutar el algoritmo de bsqueda binaria, no es necesario que el arreglo se


encuentre ordenado, y solo se puede usar con valores numricos.
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
bsqueda.
c) Los valores de las variables BAJO y ALTO, pueden ser inicializadas con valores
decimales, como posicin 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 posicin central del arreglo.
e) La posicin CENTRAL es un valor decimal de (BAJO + ALTO) /2.
70
ALGORTMIA Y ESTRUCTURA DE DATOS
Desarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
71

Diagrama Objetivos Inicio


Lecturas Glosario Bibliografa
seleccionadas

Desarrollo
UNIDAD III: ESTRUCTURAS DE DATOS DINMICAS LINEAL
Actividades Autoevaluacin
de contenidos
Recordatorio Anotaciones

DIAGRAMA DE PRESENTACIN DE LA UNIDAD


Diagrama
Lecturas Objetivos
Glosario Inicio
Bibliografa
seleccionadas

LECTURAS
CONTENIDOS ACTIVIDADES
Desarrollo Actividades Autoevaluacin
SELECCIONADAS
de contenidos
Recordatorio Anotaciones

Lecturas Glosario
AUTOEVALUACIN
Bibliografa
BIBLIOGRAFA
seleccionadas

ORGANIZACIN DE LOS APRENDIZAJES


Recordatorio Anotaciones

CONOCIMIENTOS PROCEDIMIENTOS ACTITUDES

Tema N 1: Registro (Estructu- 1. Aplica los algoritmos de crea- 1.


Asume con responsabilidad
ra) y Unin cin de estructura y unin en sus actividades acadmicas
1. Definicin de Registro (Es- la construccin de programas asignadas
tructura) 2. Conoce los fundamentos de 2. Realiza con honestidad las eva-
2. Mdulos y Estructuras la programacin orientada a luaciones asignadas
objetos
3. Invocacin de una Estructura
en Otra 3. Implementa Clases como tipo
de dato abstracto
4. Definicin de Unin: Ejem-
plo Prctico 4. Conoce la aplicacin de los
punteros a direcciones de me-
moria en la construccin de
Tema N 2: Tipos de Datos Abs- programas de estructuras de
tractos (TDA) datos dinmicas
1. Definicin de TDA 5. Aplica los algoritmos creacin
2. Clases y Programacin Orien- y manipulacin de datos con
tada a Objetos los diferentes tipos de listas
enlazadas, colas y pilas en la
construccin de programas
Tema N 3: Puntero a Direccin
de Memoria
1. Definicin de Puntero a Di- Actividad N 1
reccin de Memoria Elaboracin de Programas usan-
2. Creacin y Eliminacin de do registros y clases. Elabora-
Variables Dinmicas cin de informe sobre Aplicacio-
nes de Punteros a Direccin de
Memoria
Lectura Seleccionada N 1
Introduccin al enfoque OOP
Rosala Laza Fidalgo. Baltasar Actividad N 2
Garca Prez-Shofield Elaboracin de Programas usan-
do algoritmos para estructuras
de lista simple, doble, circular
Tema N 4: Estructuras de Datos
Dinmicas Lineal
1. Listas Enlazadas: Simple, Do- Control de Lectura N 2
ble, Circular Estructuras de Datos Dinmicas
2. Colas y Pilas Lineal

Autoevaluacin de la Unidad III


ollo
nidos 72
Actividades Autoevaluacin UNIDAD III: ESTRUCTURAS DE DATOS DINMICAS LINEAL

as Glosario Bibliografa
nadas
TEMA N 1: REGISTRO (ESTRUCTURA) Y UNIN

torio Anotaciones
1 DEFINICIN 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 tambin
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 grfica, segn el tamao del tipo de dato, ocupado en memoria:

Registro: Persona

Figura Nro 13: Ejemplo de un Registro: Persona.


(Elaboracin personal)

Cada componente de la estructura se denomina campo.


Declaracin:

Un ejemplo de programa usando a la estructura con nombre de variable, el cual ya


no necesita crear una variable en el Mdulo Principal:
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD III: ESTRUCTURAS DE DATOS DINMICAS LINEALDesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
73

Lecturas Glosario Bibliografa


seleccionadas

#include<iostream>
using namespace std;
struct{
Recordatorio Anotaciones
int dia;
int mes;
long int anual;
}hoy;
void main( )
{
cout<<"Ingrese dia: \t";
cin>>hoy.dia;
cout<<"Ingrese mes: \t";
cin>>hoy.mes;
cout<<"Ingrese anno: \t";
cin>>hoy.anual;
cout<<hoy.dia<<" / "<<hoy.mes<<" / "<<hoy.anual;
cout<<"\n";
system("PAUSE");
}

Un ejemplo de programa usndolo como nombre de estructura, donde se necesita


de crear una o ms variables en el Mdulo Principal:

#include<iostream>
using namespace std;
struct direccion{
char nombre[30];
char calle[30];
int num;
char ciudad[30];
};
void main( )
{ direccion oficina, casa;
cout<<"Datos Oficina";cout<<"\n";
cout<<"Ingrese su nombre: \t";
cin>>oficina.nombre;
cout<<"Ingrese calle: \t";
cin>>oficina.calle;
cout<<"Ingrese num calle: \t";
cin>>oficina.num;
cout<<"Ingrese ciudad: \t";
cin>>oficina.ciudad;
cout<<"\n";
cout<<oficina.nombre<<"-"<<oficina.calle<<"-"<<oficina.
num<<"-"<<oficina.ciudad; cout<<"\n"; cout<<"\n";
cout<<"Datos Casa";cout<<"\n";
cout<<"Ingrese su nombre: \t";
cin>>casa.nombre;
cout<<"Ingrese calle: \t";
cin>>casa.calle;
cout<<"Ingrese num calle: \t";
cin>>casa.num;
cout<<"Ingrese ciudad: \t";
cin>>casa.ciudad;
cout<<"\n";
cout<<casa.nombre<<"---"<<casa.calle<<"---"<<casa.num<<"---
"<<casa.ciudad;
system("PAUSE");
}
ollo
nidos 74
Actividades Autoevaluacin UNIDAD III: ESTRUCTURAS DE DATOS DINMICAS LINEAL

as Glosario Bibliografa
nadas
Es decir, Ud. puede crear estructuras con typedef, de la siguiente manera:

torio Anotaciones struct domicilio{ Se puede hacer todo lo anterior de esta forma (de-
char nombre[30]; finiendo la estructura y creando el tipo a la vez):
char calle[30]; typedef struct{
int num; char nombre[25];
char ciudad[20]; char apellidos[50];
}; char dni[10];
typedef struct domicilio; int edad;
}Persona;
void main( )
{ void main( )
domicilio Oficina, casa; { Persona individuo;
} }

b. Asignacin de estructuras
#include<iostream>
#include<string>
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; // Asignacin de estructuras
cout<<"\n ---- Reporte de Datos de Pepe ----\n";
cout<<per1.nombre;cout<<"\n";
cout<<per1.apellidos;cout<<"\n";
cout<<per1.edad;cout<<"\n";
cout<<"\n ---- Reporte de Datos de Jaime ----\n";
cout<<per2.nombre;cout<<"\n";
cout<<per2.apellidos;cout<<"\n";
cout<<per2.edad;cout<<"\n";
}

2 MDULOS Y ESTRUCTURAS
Se pueden usar los mdulos de programa para operar los datos de una estructura
o registro. El ejemplo dado a continuacin, usa el mdulo subirEdad, que recibe
todos los campos de la estructura Persona, en una variable denominada pers.

#include<iostream>
#include<string>
using namespace std;
typedef struct{
char nombre[25];
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD III: ESTRUCTURAS DE DATOS DINMICAS LINEALDesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
75

Lecturas Glosario Bibliografa


seleccionadas
char apellidos[50];
int edad;
} Persona;
Recordatorio Anotaciones
void subirEdad(Persona pers)
{ pers.edad++;
cout<<pers.edad;cout<<"\n";
}
void main()
{ Persona alumno;
strcpy(alumno.nombre,"Pepe");
strcpy(alumno.apellidos,"Villegas Varas");
alumno.edad=12;
cout<<"\n ---- Reporte de Datos de Pepe ----\n";
cout<< alumno.nombre;cout<<"\n";
cout<< alumno.apellidos;cout<<"\n";
cout<< alumno.edad;cout<<"\n";
cout<<"\n ---- Reporte de Nuevos Datos de Pepe ----\n";
cout<< alumno.nombre;cout<<"\n";
cout<< alumno.apellidos;cout<<"\n";
subirEdad(alumno); // Invoca al mdulo procedimiento
}

3 INVOCACIN 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 da, mes y ao 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.

#include<iostream>
#include<string>
#define N 50
using namespace std;

struct fecha{
int dia;
int mes;
long int anual;
};
struct persona{
char nombres[N];
char apellidos[N];
fecha fnacimiento;
char sexo[10];
};
void main()
{ persona inscrito;
cout<<"\n\n-----Ingrese datos----- \n\n";
cout<<"Ingrese nombre \t";
cin>>inscrito.nombres;
cout<<"Ingrese apellidos \t";
cin>>inscrito.apellidos;
ollo
nidos 76
Actividades Autoevaluacin UNIDAD III: ESTRUCTURAS DE DATOS DINMICAS LINEAL

as Glosario Bibliografa
nadas
cout<<"\n\n-----Fecha de Nacimiento----- \n\n";
cout<<"Ingrese dia \t";
cin>>inscrito.fnacimiento.dia;
torio Anotaciones
cout<<"Ingrese mes \t";
cin>>inscrito.fnacimiento.mes;
cout<<"Ingrese ao \t";
cin>>inscrito.fnacimiento.anual;
cout<<"Ingrese sexo \t";
cin>>inscrito.sexo;

cout<<"\n\n----Los Datos ingresados fueron----- \n\n";
cout<<inscrito.nombres<<"\n";
cout<<inscrito.apellidos<<"\n";
cout<<inscrito.fnacimiento.dia<<"\n";
cout<<inscrito.fnacimiento.mes<<"\n";
cout<<inscrito.fnacimiento.anual<<"\n";
cout<<inscrito.sexo<<"\n\n";
}

4 DEFINICIN DE UNIN: EJEMPLO PRCTICO.


Son a primera vista, entidades muy similares a las estructuras, estn formadas por
un nmero cualquiera de miembros, al igual que aquellas, pero en ste caso no
existen simultneamente todos los miembros, y slo uno de ellos tendr un valor
vlido.

A diferencia de la Estructura, esta es una localidad de memoria que se utiliza para


compartir datos de diferentes tipos.

Ejemplo:

A continuacin se muestra un ejemplo prctico, donde se crea la unin 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.

#include<iostream>
using namespace std;

struct tabla{
char nombre[30];
char tipo;
union {
char cadena[5];
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD III: ESTRUCTURAS DE DATOS DINMICAS LINEALDesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
77

Lecturas Glosario Bibliografa


seleccionadas
int entero;
} dato;
};
Recordatorio Anotaciones

void main()
{ tabla tb;
cout<<"Ingrese nombre de tabla: ";
cin>>tb.nombre;
cout<<"Ingrese tipo: ";
cin>>tb.tipo;

if(tb.tipo == 'c')
{ cout<<"Ingrese cadena: ";
cin>>tb.dato.cadena;
cout<<"La cadena es: ";
cout<<tb.dato.cadena;
cout<<"El entero es: ";
cout<<tb.dato.entero;
}
else
if(tb.tipo == 'e')
{ cout<<"Ingrese entero: ";
cin>>tb.dato.entero;
cout<<"El entero es: ";
cout<<tb.dato.entero;
cout<<"La cadena es: ";
cout<<tb.dato.cadena;
}
else
cout<<"ERROR.";
}

TEMA N 2: TIPOS DE DATOS ABSTRACTOS (TDA)

1 DEFINICIN DE TDA
Es un tipo de dato definido por el programador, que consta de datos y operaciones.
Ejemplo: clases, listas, pilas, colas.

TDA = Representacin (datos) + Operaciones (funciones y procedimientos)

class alumno
alumno
{
private:
string nombre; nombre
string carrera; carrera
public:
alumno();
~alumno(); ingresar
void ingresar();
imprimir
void imprimir();
};
ollo
nidos 78
Actividades Autoevaluacin UNIDAD III: ESTRUCTURAS DE DATOS DINMICAS LINEAL

as Glosario Bibliografa
nadas
2 CLASES Y PROGRAMACIN ORIENTADA A OBJETOS
En esta asignatura, no se pretende explicar todo lo que respecta a la programacin
orientada a objetos, solo veremos los conceptos y tcnicas necesarias que nos ayu-
torio Anotaciones den y faciliten la creacin de algoritmos de estructuras dinmicas, mas adelante.

Esta es una tcnica o estilo de programacin basada en elementos bsicos llamados


objetos y clases y contempla cinco fundamentos: Herencia, Jerarqua, Encapsula-
miento, Polimorfismo y Mensajes.

Objeto: entidad que se caracteriza por determinados atributos: datos miembro y


funciones miembro.

Clase: coleccin de objetos con atributos y funciones comunes.

OBJETOS CLASE

Figura Nro 14: Ejemplo Objetos y Clase.


(Elaboracin 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: slo 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.
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD III: ESTRUCTURAS DE DATOS DINMICAS LINEALDesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
79

Lecturas Glosario Bibliografa


seleccionadas
Para acceder desde fuera del objeto a sus datos pblicos y funciones miembro
pblicas escribe.
nombre del objeto . dato miembro
nombre del objeto . funcin miembro Recordatorio Anotaciones

Constructor: Un constructor es una funcin miembro que permite inicializar los


datos miembros de un objeto. Tiene las siguientes caractersticas:
- Su nombre es igual al de la clase.
- No devuelve valores.
- Puede haber ms de un constructor.
- Se invoca al momento de declarar al objeto.

Destructor: Un destructor es una funcin que permite liberar el rea de memoria


ocupada por un objeto cuando este ya no va ser usado .Sus caractersticas son:
- Su nombre es igual al de la clase pero precedido por el smbolo ~ .
- No devuelve valores.
- Slo puede haber un destructor.
- Se invoca al momento de salir o abandonar el mbito donde fue creado el objeto.

A continuacin, 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-
ms 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()
{ cout<<"Ingrese nombre: ";
cin>>nombre;
cout<<"Ingrese carrera: ";
cin>>carrera;
}

void alumno::imprimir()
{ cout<<"Nombre Alumno: ";
cout<<nombre<<"\n";
cout<<"Carrera: ";
ollo
nidos 80
Actividades Autoevaluacin UNIDAD III: ESTRUCTURAS DE DATOS DINMICAS LINEAL

as Glosario Bibliografa
nadas

cout<<carrera<<"\n";
}
torio Anotaciones
void main()
{ alumno al;

cout<<"Ingrese Alumno";cout<<"\n";
al.ingresar();cout<<"\n";

cout<<"Mostrar Alumno"<<"\n";
al.imprimir();cout<<"\n\n";

cout<<"Eliminar Alumno"<<"\n";
al.~alumno();cout<<"\n";

cout<<"Mostrar Alumno"<<"\n";
al.imprimir();cout<<"\n";
system("PAUSE");
}

TEMA N 3: PUNTERO A DIRECCIN DE MEMORIA

1 DEFINICIN DE PUNTERO A DIRECCIN DE MEMORIA


Un puntero es un tipo especial de variable, que almacena el valor de una direccin
de memoria, Los punteros, tambin 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 direccin de memoria de
la variable x, que es almacenada (apuntada) por la variable puntero p.

a. Declaracin de variables tipo puntero


tipo de dato apuntado * variable tipo puntero;

Ejemplos:
int *p; // p es una variable tipo puntero que apunta a una variable tipo int.
float *q; // q es una variable tipo puntero que apunta a una variable tipo float.
char *r; // r es una variable tipo puntero que apunta a una variable tipo char.

Para hacer referencia a la variable apuntada se usa la notacin:


*variable tipo puntero

En el ejemplo anterior, *p hace referencia a la variable x, es decir:


ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD III: ESTRUCTURAS DE DATOS DINMICAS LINEALDesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
81

Lecturas Glosario Bibliografa


seleccionadas
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)

Recordatorio Anotaciones
NOTA:
Variables estticas: Son aquellas que se declaran expresamente en los programas y
a las que el sistema operativo asigna una posicin de memoria antes de la ejecucin
del mismo.

Variables dinmicas: Son variables que se crean y se destruyen durante la ejecucin


del programa. No son declaradas explcitamente en los programas.

Operador de Direccin (&): Devuelve la direccin de memoria de una variable. Su


sintaxis es:
& nombre de variable

Operador de Indireccin (*): 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 direccin de la variable x mediante &


// y lo almacenamos en la variable puntero p
p = &x; // p contiene la direccin en la que se encuentra x

// Utilizando el operador *, podemos acceder a la informacin en x.


// *p representa ahora el valor de la variable x
*p = 10; // Ahora x contiene el valor 10

cout<<x;cout<<"\n"; // Visualiza si x tiene el valor que recibi su puntero p


cout<<*p;cout<<"\n"; // 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;
cout<<y<<"\n"; //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 tambin 125

cout<<y<<"\n"; //visualiza el nuevo valor de y


cout<<x<<"\n"; //visualiza el nuevo valor de x
cout<<*p<<"\n"; //Visualiza el valor de y
ollo
nidos 82
Actividades Autoevaluacin UNIDAD III: ESTRUCTURAS DE DATOS DINMICAS LINEAL

as Glosario Bibliografa
nadas
cout<<&x<<"\n"; //visulaiza la direccion de memoriade x
cout<<p<<"\n"; //visualiza la direccion de memoria de y
}
torio Anotaciones

2 CREACIN Y ELIMINACIN DE VARIABLES DINMICAS


Creacin de variables dinmicas
Para crear variables dinmicas 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 dinmica de tipo int, p apunta a ella.
q = new float; // crea una variable dinmica 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 asignacin
cin>>p; // ERROR de ingreso

Un ejemplo de creacin y asignacin, 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 asignacin

Eliminacin de variables dinmicas

delete variable tipo puntero que apunta a la variable dinmica que ser eliminada ;

Se libera el espacio ocupado por la variable dinmica para poder ser utilizado nue-
vamente.

void main()
{ int *p;
p = new int;
*p = 17;
cout<<p;
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD III: ESTRUCTURAS DE DATOS DINMICAS LINEALDesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
83

Lecturas Glosario Bibliografa


seleccionadas
delete p;
cout<<p;
}
Recordatorio Anotaciones

Constante NULL
Es una constante predefinida en C++ cuyo valor es cero (0) y sirve para inicializar
una variable tipo puntero que no apunta a ninguna variable.
variable tipo puntero = NULL;

void main()
{ int *p;
p = new int;
*p = 17;
cout<<p;
delete p;
cout<<p;
p = NULL;
cout<<p;
}

Diagrama Objetivos Inicio

ACTIVIDAD N 1
Desarrollo Actividades Autoevaluacin
de contenidos

Esta actividad puede consultarla en su aula virtual.

Lecturas Glosario Bibliografa


seleccionadas

Recordatorio Anotaciones
ollo
nidos 84
Actividades Autoevaluacin UNIDAD III: ESTRUCTURAS DE DATOS DINMICAS LINEAL

as Glosario Bibliografa
nadas
TEMA N 4: ESTRUCTURAS DE DATOS DINMICAS LINEAL

1 LISTAS ENLAZADAS: SIMPLE, DOBLE, CIRCULAR


torio Anotaciones
Una lista enlazada es una estructura de datos dinmica formada por un conjunto
de elementos llamados nodos.

Cada nodo consta de dos partes:


- Una que contiene el (los) dato(s).
- Otra que contiene la direccin del siguiente nodo.

Ejemplo de Nodo con un dato:

Los nodos son variables dinmicas 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 direccin del
primer nodo.
- Si la lista est vaca dicho puntero tendr el valor NULL.
- El ltimo elemento de la lista se reconoce porque su puntero al siguiente tiene
valor NULL.

Representacin con Direcciones de Memoria de una Lista Enlazada (usamos direc-


ciones de memoria en hexadecimal, ejemplo: AF01)
Recodando que Lista (ms adelante lo llamamos pL, es decir puntero a Lista) tam-
bin es un nodo, pero que sirve para guardar la direccin de memoria del primer
nodo de la lista.

Representacin Grfica de una Lista Enlazada, es decir Lista apunta (tiene la direc-
cin 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 posicin o di-
reccin del siguiente campo de la Lista.

Donde cada elemento de la lista simplemente enlazada llamado nodo se define:


struct nodo{
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD III: ESTRUCTURAS DE DATOS DINMICAS LINEALDesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
85

Lecturas Glosario Bibliografa


seleccionadas
int n; //puede tener mas campos: string, float, estructura, etc.
nodo *sig; // puntero de direccin al siguiente nodo
};
Recordatorio Anotaciones

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()
ollo
nidos 86
Actividades Autoevaluacin UNIDAD III: ESTRUCTURAS DE DATOS DINMICAS LINEAL

as Glosario Bibliografa
nadas
{ pnodo nuevo; int valor;
cout<<"Ingrese dato:";
cin>>valor;
torio Anotaciones
nuevo = new nodo;
(*nuevo).dato = valor;
(*nuevo).sig = pL;
pL = nuevo;
}
void lista::insertar_final()
{ pnodo nuevo,aux; int valor;
nuevo = new nodo;
cout<<"Ingrese dato:";
cin>>valor;
(*nuevo).dato = valor;
(*nuevo).sig = NULL;
if ( pL == NULL )
pL = nuevo;
else
{ aux = pL;
while ( (*aux).sig != NULL )
aux = (*aux).sig;
(*aux).sig = nuevo;
}
}
void lista::insertar_despues()
{ pnodo nuevo,r,temp; int num;
nuevo=new nodo;
cout<<"Ingrese dato";
cin>>(*nuevo).dato;
cout<<"Ingrese dato despues del nodo con valor: ";
cin>>num;
r=lista::buscar_parainsertadespues (num);
if(r==NULL)
cout<<"Lista 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;
cout<<"Ingrese dato:";
cin>>valor;
if ( pL == NULL )
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD III: ESTRUCTURAS DE DATOS DINMICAS LINEALDesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
87

Lecturas Glosario Bibliografa


seleccionadas
{ cout<<"LISTA VACIA";
pos=NULL; }
else
Recordatorio Anotaciones
{ pos = pL;
while ( pos != NULL)
{ if((*pos).dato != valor)
{ pos = (*pos).sig;
ban=1;
}
else
{ ban=0;
break;
}
}
if(ban==0)
{cout<<"ENCONTRADO"; }
else
{cout<<"NO ENCONTRADO"; }
}
}
pnodo lista::buscar_parainsertadespues(int valor)
{ pnodo pos; int ban=0;
if ( pL == NULL )
{ cout<<"LISTA 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)
{cout<<"ENCONTRADO"; }
else
{cout<<"NO ENCONTRADO"; }
}
return pos;
}
void lista::eliminar_inicio()
{ pnodo aux;
if(pL==NULL)
{ cout<<"lista vacia"; }
else
{ aux=pL;
if((*pL).sig==NULL) // un nodo
{ pL=NULL; }
ollo
nidos 88
Actividades Autoevaluacin UNIDAD III: ESTRUCTURAS DE DATOS DINMICAS LINEAL

as Glosario Bibliografa
nadas
else
{ pL=(*pL).sig; }
cout<<"elemento eliminado"<<(*aux).dato;
torio Anotaciones
delete aux;
}
}
void lista::eliminar_final()
{ pnodo aux=pL,temp;
if(pL==NULL)
{ cout<<"lista vacia"; }
else
{ if((*pL).sig==NULL)
{ pL=NULL; }
else
{ while((*aux).sig!=NULL)
{ temp=aux;
aux=(*aux).sig;
}
(*temp).sig=NULL;
}
cout<<"elemento eliminado"<<(*aux).dato ;
delete aux;
}
}
void lista::imprimir()
{ pnodo p;
if ( pL == NULL )
cout<<"Lista vacia"<<endl;
else
{ p = pL;
while (p != NULL)
{ cout<<(*p).dato<<" -> ";
p = (*p).sig;
}
cout<<"NULO"<<endl;
}
}

ListasSE.cpp
#include <iostream.h>
#include "ListasSE.h"
using namespace std;
void main()
{ lista L; pnodo b; int valor,opc;
do
{ cout<<"\nmenu";
cout<<"\n1 insertar al inicio";
cout<<"\n2 insertar al final";
cout<<"\n3 insertar despues del nmero";
cout<<"\n4 Eliminar al inicio";
cout<<"\n5 Eliminar al final";
cout<<"\n6 Eliminar Lista";
cout<<"\n7 Buscar en lista";
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD III: ESTRUCTURAS DE DATOS DINMICAS LINEALDesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
89

Lecturas Glosario Bibliografa


seleccionadas
cout<<"\n8 Visualizar lista";
cout<<"\n9 Salir";
do
Recordatorio Anotaciones
{ cout<<"\n Seleccione opcin";
cin>>opc;
} while(opc>9);
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 informacin de algn tipo de dato y otro campo tipo puntero
que contiene la direccin del nodo siguiente.

La particularidad que presenta, es que el ltimo nodo de la lista no contiene NULO


en su campo sig sino la direccin del primer nodo, lo que le da la caracterstica
circular a la lista.

Para tener acceso a la lista es necesario un puntero Lc que contenga la direccin


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 informacin de algn tipo de dato y dos campos tipo punte-
ro que contienen las direcciones de los nodos anterior y siguiente respectivamente.

*ant dato *sig

A travs 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
slo puede recorrerse en un sentido.

El campo ant del primer nodo tiene valor NULO, pues no existe un nodo anterior
a este, anlogamente, el ltimo nodo tiene tambin en su campo sig el valor NULO
para expresar el hecho de que no existe un siguiente nodo.
ollo
nidos 90
Actividades Autoevaluacin UNIDAD III: ESTRUCTURAS DE DATOS DINMICAS LINEAL

as Glosario Bibliografa
nadas

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:

dato sig

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;
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD III: ESTRUCTURAS DE DATOS DINMICAS LINEALDesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
91

Lecturas Glosario Bibliografa


seleccionadas
while ( p != NULL )
{ q = (*p).sig;
delete p;
Recordatorio Anotaciones
p = q;
}
pL=p;
}
}
void cola::encolar()
{ pnodo nuevo,aux;
int valor;
nuevo = new nodo;
cout<<"Ingrese valor:";
cin>>valor;
(*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)
{ cout<<"cola vacia"; }
else
{ aux=pL;
if((*pL).sig==NULL) // un nodo
{ pL=NULL; }
else
{ pL=(*pL).sig; }
cout<<"elemento eliminado"<<(*aux).dato; delete aux;
}
}
void cola::mostrar()
{ pnodo p;
if ( pL == NULL )
cout<<"cola vacia"<<endl;
else
{ p = pL;
while (p != NULL)
{ cout<<(*p).dato<<" -> ";
p = (*p).sig;
}
cout<<"NULO"<<endl;
}
}
ollo
nidos 92
Actividades Autoevaluacin UNIDAD III: ESTRUCTURAS DE DATOS DINMICAS LINEAL

as Glosario Bibliografa
nadas
Cola.cpp
#include <iostream>
#include "Cola.h"
torio Anotaciones
using namespace std;
void main()
{ cola C; int opc;
do
{ cout<<"\nmenu";
cout<<"\n1 encolar";
cout<<"\n2 desencolar";
cout<<"\n3 mostrar";
cout<<"\n4 Salir";
do
{ cout<<"\n Seleccione opcin"; cin>>opc;
} while(opc>4);
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:

dato sig

Para especificar una pila es necesario un puntero, que apunte al primer elemento
de la pila, es decir a la cima.

En una pila slo estn permitidas dos operaciones:


Apilar: Insertar un elemento por el lado de la cima
Desapilar: Eliminar el elemento de la cima de la pila

Pila.h
#include<iostream>
using namespace std;
struct nodo
{ int dato;
nodo *sig;
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD III: ESTRUCTURAS DE DATOS DINMICAS LINEALDesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
93

Lecturas Glosario Bibliografa


seleccionadas
};
typedef nodo *pnodo;
class stack
Recordatorio Anotaciones
{ 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;
cout<<"Ingrese dato:";
cin>>valor;
(*nuevo).dato = valor;
(*nuevo).sig = NULL;
if ( pL == NULL )
pL = nuevo;
else
{ aux = pL;
while ( (*aux).sig != NULL )
aux = (*aux).sig;
(*aux).sig = nuevo;
}
}
void stack::desapilar()
{pnodo aux=pL,temp;
if(pL==NULL)
{ cout<<"Pila vacia"; }
else
{ if((*pL).sig==NULL)
{ pL=NULL; }
else
ollo
nidos 94
Actividades Autoevaluacin UNIDAD III: ESTRUCTURAS DE DATOS DINMICAS LINEAL

as Glosario Bibliografa
nadas
{ while((*aux).sig!=NULL)
{ temp=aux;
aux=(*aux).sig;
torio Anotaciones
}
(*temp).sig=NULL;
}
cout<<"elemento eliminado"<<(*aux).dato;
delete aux;
}
}
void stack::mostrar()
{ pnodo p;
if ( pL == NULL )
cout<<"Pila vacia"<<endl;
else
{ p = pL;
while (p != NULL)
{ cout<<(*p).dato<<" -> ";
p = (*p).sig;
}
cout<<"NULO"<<endl;
}
}

Pila.cpp
#include <iostream>
#include "Pila.h"
using namespace std;
void main()
{ stack S; int opc;

do
{ cout<<"\nmenu";
cout<<"\n1 apilar";
cout<<"\n2 desapilar";
cout<<"\n3 mostrar";
cout<<"\n4 Salir";
do
{ cout<<"\n Seleccione opcin";
cin>>opc;
} while(opc>4);
switch(opc)
{case 1:S.apilar();break;
case 2:S.desapilar();break;
case 3:S.mostrar();break;
}
} while(opc!=4);
}
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD III: ESTRUCTURAS DE DATOS DINMICAS LINEALDesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
95

Diagrama Objetivos Inicio Lecturas Glosario Bibliografa


seleccionadas

ACTIVIDAD N 2
Desarrollo Actividades Autoevaluacin
de contenidos
Recordatorio Anotaciones

Esta actividad puede consultarla en su aula virtual.

Diagrama Objetivos Inicio


Lecturas Glosario Bibliografa
seleccionadas

Desarrollo Actividades Autoevaluacin


de contenidos
Recordatorio Anotaciones

LECTURA SELECCIONADA N 1
Lecturas Glosario Bibliografa
seleccionadas

INTRODUCCIN AL ENFOQUE OOP


Rosala Laza Fidalgo. Baltasar Garca Prez-Shofield, 2008,
Recordatorio Anotaciones Metodologa y Tecnologa de la Programacin. Pg. 1

Durante los ltimos aos, la Programacin Orientada a Objetos (Object Oriented Pro-
gramming, u OOP) ha tomado gran importancia. El trmino OOP indica ms de una
forma de diseo y una metodologa de desarrollo que un lenguaje de programacin,
ya que en realidad se pueden aplicar los principios del paradigma de programacin
orientada a objetos (encapsulacin, herencia y polimorfismo) en cualquier lenguaje de
programacin.

A menudo se confunde la Orientacin a Objetos con sistemas de ventanas, conos y si-


milares, Interfaces Grficas de Usuario. Esto debido a que se usan tcnicas orientadas a
objetos para construir entornos. Tambin 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 diseo lleve una implementacin
que en realidad no siga los principios de Orientacin a Objetos mencionados.

DE lo que se trata, en todo caso, es de, dado un problema a automatizar (resolver


mediante una aplicacin), hacer una aplicacin 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 ms 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 metodologa de programacin 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 programacin clsico, esto es, el estructurado, se basa en tomar un


problema, y subdividirlo sucesivamente en subproblemas, hasta llegar a unos subpro-
ollo
nidos 96
Actividades Autoevaluacin UNIDAD III: ESTRUCTURAS DE DATOS DINMICAS LINEAL

as Glosario Bibliografa
nadas
blemas suficientemente sencillos de resolver. Los principales problemas del paradigma
de programacin estructurada son:

torio Anotaciones Creciente complejidad de las aplicaciones: Los requisitos cada vez ms ambiciosos de
las aplicaciones reflejan una sofisticacin en demanda de software.

Limitaciones en la modelizacin de problemas no estructurados: Las actuales meto-


dologas estructuradas dificultan la modelizacin y resolucin de problemas comple-
jos no estructurados. Siguiendo una metodologa estructurada, los sistemas se des-
componen en una jerarqua de mdulos. Estos se disean para transformar entradas
y salidas bien definidas.

- Este enfoque es el ms apropiado para su empleo en problemas estructurados en


donde el comportamiento del software se conoce y se puede describir en base al
algoritmo de transformacin de datos. El software se estructura segn la solucin
del problema en vez de enfocarlo directamente segn el problema mismo. Esto
puede conducir a un separacin conceptual entre el problema del mundo real y su
representacin e implementacin informtica.

Difcil reutilizacin del software: Es normal que se construyan y reconstruyan una y


otra vez mdulos muy parecidos funcionalmente. Esto es debido a que la subdivisin
en subproblemas en la que se basa el paradigma de programacin estructurada, no
supone un nfasis en que cada uno de los mdulos utilizados en esos problemas sean
reutilizables.

Incluso en la actualidad, muchos de los intentos de crear libreras de componentes


de software utilizables no han tenido mucha implantacin debido sobre todo a los
problemas inherentes a su reutilizacin. Cualquier simplificacin del proceso de de-
sarrollo del software para la reutilizacin de componentes ya implementados.

Mantenimiento difcil y costoso: El mantenimiento de las aplicaciones supone el cos-


te ms importante durante el ciclo de vida. Debido a la evolucin que sufren todas las
aplicaciones, a menudo se introducen ampliaciones y se desarrollan nuevos entornos
de operacin, 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 difciles
la incorporacin de nuevos mdulos o estructuras de datos.

El desarrollo de la OOP empieza a destacar durante la dcada de los 80, partiendo de la


programacin estructurada, a la vez que engloba, y dotando al programador de nuevos
elementos para el anlisis y desarrollo de software. As, las metodologas orientadas a
objetos pueden facilitar la produccin de sistemas cada vez ms complejos, permiten
modelar problemas no estructurados, incrementan la productividad gracias a la reutili-
zacin de objetos y facilitan el mantenimiento.

La orientacin a objetos puede describirse como el conjunto de disciplinas que desarro-


llan y modelizan software y que facilitan la construccin de sistemas complejos a partir
de componentes. Su caracterstica ms importante, frente a la programacin estructu-
rada, es que no trata de hacer ms sencillo el problema a resolver (dividindolo), sino
que trata de simular el problema a resolver. As, en todo problema existen una serie
entidades (fsicas o no) que interaccionan para resolverlo, de manera que simulando
estas entidades, y su comportamiento, es posible resolver el problema en cuestin. Cada
una de estas entidades es un objeto en el sistema desarrollado mediante OOP, de ah el
nombre de programacin orientada a objetos.

El atractivo de la orientacin 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 programacin:


ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD III: ESTRUCTURAS DE DATOS DINMICAS LINEALDesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
97

Lecturas Glosario Bibliografa


seleccionadas
Uniformidad: la representacin de los objetos lleva implcita tanto el anlisis como el
diseo y codificacin de los mismos. As todo el programa est compuesto de objetos
que interaccionan entre s.
Comprensin: Los programas estn escritos mediante definiciones de clases, queRecordatorio Anotaciones

representan las entidades que son necesarias para resolver el problema que se est
modelando. Los programas son ms fciles 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-
mticamente en cualquier lugar donde stos aparezcan.
Reusabilidad. La nocin 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 debera poder llegar a ser una simple combinacin de objetos ya
definidos en otros programas que se desarrollaron anteriormente.

La OOP no sustituye a ninguna metodologa ni lenguaje de programacin anterior,


es un enfoque distinto. Todos los programas que se realizan segn los principios de la
OOP se pueden realizar igualmente mediante programacin estructurada, aunque de
forma ms costosa, puesto que los lenguajes Orientados a Objetos soportan de forma
natural la OOP. A la vez, las limitaciones observadas en el paradigma de programacin
estructurada son eliminadas (al menos, parcialmente), ya que un lenguaje Orientado a
Diagrama Objetivos Inicio
Objetos ya fuerza e invita a emplear los principios de la OOP.

Desarrollo Actividades Autoevaluacin


de contenidos

GLOSARIO
Lecturas Glosario Bibliografa
seleccionadas

Direccin de Memoria: es un identificador de una localizacin (ubicacin) de un es-


pacio de memoria del computador, generalmente nombrado por una variable para su
posterior reutilizacin.
Recordatorio Anotaciones

Dato Miembro: es un atributo (informacin) que se crea en el mbito de una clase.


Funcin Miembro: es un mtodo (responsabilidad) que se crea en el mbito de una
clase.

Objetivos
Programacin
Inicio
Orientada a Objetos: es el conjunto de conceptos y tcnicas que tiene su
fundamento en el uso de clases y objetos, para escribir programas.

Actividades Autoevaluacin
os

BIBLIOGRAFA DE LA UNIDAD III:


Glosario Bibliografa
s

Joyanes Aguilar, Luis. Fundamentos de Programacin. 4ta. ed. Espaa: McGraw-Hill;


2008.

o Anotaciones
Laza Fidalgo Rosala. Garca Prez-Shofield Baltasar. Metodologa y Tecnologa de la
Programacin. 1raEd. Pearson; 2008.
ollo
nidos 98
Actividades Autoevaluacin UNIDAD III: ESTRUCTURAS DE DATOS DINMICAS LINEAL

as Glosario Bibliografa Diagrama Objetivos Inicio


nadas

AUTOEVALUACIN DE LA UNIDAD III


Desarrollo Actividades Autoevaluacin
de contenidos
torio Anotaciones

INSTRUCCIONES: Lee detenidamente y responde las siguientes preguntas:


1. Indique la lnea de cdigo que se debe escribir en el recuadro en blanco y que per-
Lecturas Glosario
mite utilizar como tipo de dato a la siguiente codificacin de una estructura (struct):
Bibliografa
seleccionadas

struct domicilio{
char nombre[30];
Recordatorio Anotaciones 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 definicin de la estructura de datos UNION


a) Es una estructura de datos secuencial unidimensional con un tamao Mximo.
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 tamao Mximo.
e) Es exactamente igual al STRUCT, no se diferencia de ninguna manera.

3. Indique las lneas de cdigo que se debe escribir en la casilla (I) y en la casilla (II),
para poder cambiar la edad de una persona segn el siguiente programa:

#include<iostream>
using namespace std;
typedef struct{
char nombres[25];
int edad;
} Persona;
void cambiarEdad( (II) )
{ ed++;
cout<<ed;
}
void main()
{ Persona pers;
cout<<"Ingrese nombre";
cin>>pers.nombres;
cout<<"Ingrese nombre";
cin>>pers.edad;

cout<<"---Cambiar Edad de Persona---";

cambiarEdad( (I) );
}
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD III: ESTRUCTURAS DE DATOS DINMICAS LINEALDesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
99

Lecturas Glosario Bibliografa


seleccionadas

a) (I) pers (II) Persona p


b) (I) pers (II) int ed
Recordatorio Anotaciones
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 ms de un constructor en la clase.
- El destructor se invoca para eliminar la clase creada.
- Puede haber ms 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, Jerarqua.
c) Herencia, Polimorfismo, Encapsulamiento.
d) Encapsulamiento, Polimorfismo, Objeto.
e) Mensaje, Jerarqua, Clase.

6. Indique la alternativa que corresponde a un adecuado ejemplo de clase con sus


respectivos objetos:
a) Saln de Clases: carpetas, pizarra.
b) Universidad: Universidad Nacional, Universidad Particular.
c) Colegio: CE San Jos, CE Santa Mara.
d) Auto: Auto de Carrera, Auto Particular.
e) Persona: Persona Natural, Persona Jurdica

7. Indique el enunciado que considere correcto para lnea 3 y la lnea 4 del siguiente
cdigo que declara a dos punteros de direccin de memoria:

int *p; //lnea 1


float *q; //lnea 2
p = new int; //lnea 3
q = new float; //lnea 4

a) Lnea 3 crea una variable esttica de tipo int y hace que p apunte a ella y Lnea 4
crea una variable esttica de tipo float y hace que q apunte a ella.
b) Lnea 3 crea una variable dinmica de tipo int y hace que q apunte a ella y Lnea
4 crea una variable dinmica de tipo float y hace que p apunte a ella.
c) Lnea 3 crea una variable esttica de tipo int y hace que q apunte a ella y Lnea 4
crea una variable esttica de tipo float y hace que p apunte a ella.
d) Lnea 3 crea una variable dinmica de tipo int y hace que p apunte a ella y Lnea
4 crea una variable dinmica de tipo float y hace que q apunte a ella.
e) Lnea 3 crea una variable esttica de tipo float y hace que p apunte a ella y Lnea
4 crea una variable esttica de tipo int y hace que q apunte a ella.
ollo
nidos 100
Actividades Autoevaluacin UNIDAD III: ESTRUCTURAS DE DATOS DINMICAS LINEAL

as Glosario Bibliografa
nadas
8. Indique la alternativa con la adecuada definicin de una lista simple enlazada:
a) Es una estructura de datos esttica, lineal y solo se puede ingresar un campo dato.
b) Es una estructura de datos dinmica, lineal y se puede ingresar ms de un campo
torio Anotaciones dato.
c) Es una estructura de datos dinmica, no lineal y se puede ingresar ms de un
campo dato.
d) Es una estructura de datos esttica, no lineal y solo se puede ingresar un campo dato.
e) Es una estructura de datos esttica, lineal y se puede ingresar ms 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 tcnica 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 tcnica 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 posicin, elimina al inicio y al final.
c) inserta al inicio, en cualquier otra posicin 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.
ALGORTMIA Y ESTRUCTURA DE DATOS
Desarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
101

Diagrama Objetivos Inicio


Lecturas Glosario Bibliografa
seleccionadas

Desarrollo
UNIDAD IV: ESTRUCTURAS DE DATOS DINMICAS NO LINEAL
Actividades Autoevaluacin
de contenidos
Recordatorio Anotaciones

DIAGRAMA DE PRESENTACIN DE LA UNIDAD


Diagrama
Lecturas Objetivos
Glosario Inicio
Bibliografa
seleccionadas

LECTURAS
CONTENIDOS ACTIVIDADES
Desarrollo Actividades Autoevaluacin
SELECCIONADAS
de contenidos
Recordatorio Anotaciones

AUTOEVALUACIN BIBLIOGRAFA
Lecturas Glosario Bibliografa
seleccionadas

ORGANIZACIN DE LOS APRENDIZAJES


Recordatorio Anotaciones

CONOCIMIENTOS PROCEDIMIENTOS ACTITUDES

Tema N 1: rbol y Grafo 1. Aplica los algoritmos de crea- 1.


Asume con responsabilidad
1. rbol General: Conceptos cin y manipulacin de datos sus actividades acadmicas
bsicos y algoritmos de mani- de con el uso de rboles en asignadas
pulacin construccin de programas 2. Realiza con honestidad las eva-
2.
rbol Binario: Recorridos: 2.
Diferencia los algoritmos luaciones asignadas
PreOrden, InOrden, PostOr- creacin y manipulacin de
den datos de con el uso de grafos
en la construccin de progra-
3. rboles Binarios de Bsque-
mas
da( ABB )
3. Aplica los algoritmos para ac-
4. Grafos: Conceptos y algorit-
ceso y manipulacin de archi-
mos de manipulacin
vos

Tema N 2: Archivo (Fichero)


Actividad N 1
1. Archivo: Conceptos y algorit-
Comprobacin de los algorit-
mos de manipulacin
mos de recorridos de rbol, con
ejercicios propuestos
Lectura Seleccionada N 1
Operaciones con archivos Actividad N 2
Jess Carretero Prez. Garca
Comprobacin de los progra-
Carballena, Felix. Prez Lobato
mas de ficheros, presentados en
Jos
el autoinstructivo

Autoevaluacin de la Unidad IV
Tarea Acadmica N 2
Estructuras de Datos Dinmicas
No Lineal
ollo
nidos 102
Actividades Autoevaluacin UNIDAD IV: ESTRUCTURAS DE DATOS DINMICAS NO LINEAL

as Glosario Bibliografa
nadas
TEMA N 1: RBOL Y GRAFO

1 RBOL GENERAL: CONCEPTOS BSICOS Y ALGORITMOS DE MA-


torio Anotaciones
NIPULACIN.
Recuerda el concepto de rbol genealgico 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 definicin de un rbol.

Un rbol es un conjunto de nodos, en el que existe un nodo distinguido llamado


Raz y cero o ms subrboles, cada uno de los cuales tiene su raz conectada a la
raz por medio de una arista.

Conceptos Bsicos sobre rboles


Hoja: Todo nodo que no tiene hijos.
Ejemplo: B, C, H, I, P, Q, K, L, M, N

Peso del rbol: Cantidad de Hojas.


Ejemplo: 10
Camino: Enlace entre dos nodos consecutivos y rama es un camino que termina
en hoja.
Ejemplo: camino ( A , Q ) = A E J Q

Longitud del camino: Es la cantidad de aristas que conforman un camino.


Ejemplo: longitud_camino ( A , Q ) = 3

Nivel: Cada nodo tiene asociado un nivel, determinado por la longitud de camino
desde la raz 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 nmero mximo de nodos en una rama. Es decir


nivel ms alto de los nodos ms uno.
Ejemplo: profundidad = nivel +1
profundidad = 3 +1 = 4

Representacin Primer Hijo Siguiente Hermano


Cada nodo del rbol solo tiene dos punteros, uno para apuntar a su primer hijo y
otro para apuntar a su siguiente hermano.
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD IV: ESTRUCTURAS DE DATOS DINMICAS NO LINEALDesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
103

Lecturas Glosario Bibliografa


seleccionadas
Por ejemplo del grfico anterior, se tiene:

Recordatorio Anotaciones

#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
ollo
nidos 104
Actividades Autoevaluacin UNIDAD IV: ESTRUCTURAS DE DATOS DINMICAS NO LINEAL

as Glosario Bibliografa
nadas
{ while(aux2!=NULL && (*aux2).hijo ==NULL)
{ if((*aux2).dato==d)
{ pos=aux2;
torio Anotaciones
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)
{ cout<<aux->dato;
cout<<endl<<"|";
cout<<endl<<"v"<<endl;
aux2=aux->hijo;
arbol::mostrar(aux2);
}
else
{ if(aux==NULL)
cout<<"NULL";
else
{ cout<<aux->dato;
cout<<"->";
aux2=aux->her;
if(aux2!=NULL)
arbol::mostrar(aux2);
else
arbol::mostrar(aux2);
aux3=aux->hijo;
cout<<endl<<"|";
cout<<endl<<"v"<<endl;
if(aux3!=NULL)
arbol::mostrar(aux3);
else
arbol::mostrar(aux3);
}
}
}
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD IV: ESTRUCTURAS DE DATOS DINMICAS NO LINEALDesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
105

Lecturas Glosario Bibliografa


seleccionadas
void arbol::inserta_principal()
{ rpri = new nodo;
cout<<"\t Ingresar la raiz: ";
Recordatorio Anotaciones
cin>>rpri->dato;
cout<<endl;
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: ";
cin>>num;
pos=buscar(rpri,pos,num);
if(pos==NULL)
cout<<"\t--** Arbol vacio o no se encontro nodo **--";
else
{ if(pos->hijo==NULL)
{ cout<<"\t Ingrese numero a insertar: "; cin>>hij->dato;
pos->hijo=hij;
hij->her=NULL;
hij->hijo=NULL;
}
else
cout<<"NO SE PUEDE INGRESAR UN HIJO. DEBE INGRESAR COMO
HERMANO"<<endl;
}
}
void arbol::inserta_hermano()
{pnodo herma,pos=NULL;
int num;
herma=new nodo;
cout<<"\t De que nodo desea que sea el hermano: "<<endl;
cin>>num;
if(num==rpri->dato)
cout<<"NO SE PUEDE INGRESAR UN HERMANO A LA RAIZ PRINCIPAL"<<endl;
else
{ pos=buscar(rpri,pos,num);
if(pos==NULL)
{ cout<<"\t Arbol vacio o no se encontro "<<endl; }
else
{cout<<"\t Ingrese nro a insertar: ";
cin>>herma->dato;
pos->her=herma;
herma->her=NULL;
herma->hijo=NULL;
}
}
}

void main()
{int opc;
ollo
nidos 106
Actividades Autoevaluacin UNIDAD IV: ESTRUCTURAS DE DATOS DINMICAS NO LINEAL

as Glosario Bibliografa
nadas
arbol p;
bool band=false;
cout<<endl;
torio Anotaciones
cout<<"\t -----**** MENU ****----- "<<endl<<endl;
cout<<"\t Insertar raiz principal"<<endl;
p.inserta_principal();
band=true;
do{ if(band==true)
{ cout<<"\t -----**** MENU ****----- "<<endl<<endl;
cout<<"\t 1 -> insertar hijo"<<endl;
cout<<"\t 2 -> insertar hermano"<<endl;
cout<<"\t 3 -> Visualizar Arbol"<<endl;
cout<<"\t 4 -> Salir"<<endl;
do
{ cout<<"\t Seleccione opcion: ";
cin>>opc;
}while(opc>4);
switch(opc)
{ case 1:p.inserta_hijo();break;
case 2:p.inserta_hermano();break;
case 3:p.mostrar(p.rpri);break;
}
}
else
cout<<"Debe 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:
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD IV: ESTRUCTURAS DE DATOS DINMICAS NO LINEALDesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
107

Lecturas Glosario Bibliografa


seleccionadas
Recorrido de rboles Binarios
a) Recorrido en Orden
- Recorrer el subrbol izquierdo en orden
Recordatorio Anotaciones
- Visitar el nodo raz
- Recorrer el subrbol derecho en orden

b) Recorrido en Pre-Orden
- Visitar el nodo raz
- Recorrer el subrbol izquierdo en pre-orden
- Recorrer el subrbol derecho en pre-orden

c) Recorrido en Post-Orden
- Recorrer el subrbol izquierdo en post-orden
- Recorrer el subrbol derecho en post-orden
- Visitar el nodo raz

B. rbol de Expresin
Es un rbol binario en el que las hojas contienen los operandos y los nodos internos
los operadores de una expresin matemtica.

Ejemplo: ( a ^ ( b * c ) ) + ( ( d * e ) f ) / g )

3 RBOLES BINARIOS DE BSQUEDA ( ABB )


Un ABB es un rbol binario en el que para todos sus nodos (excepto sus hojas) se
cumple que el dato almacenado en l, es mayor a todos los datos de los nodos del
subrbol izquierdo pero menor a todos los datos de los nodos del subrbol derecho.

Ejemplo:

Para poder tener acceso al rbol


es necesario un puntero que
contenga la direccin de la raz.
ollo
nidos 108
Actividades Autoevaluacin UNIDAD IV: ESTRUCTURAS DE DATOS DINMICAS NO LINEAL

as Glosario Bibliografa
nadas
arbolabb.h
#include<iostream>
using namespace std;
torio Anotaciones
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;
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD IV: ESTRUCTURAS DE DATOS DINMICAS NO LINEALDesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
109

Lecturas Glosario Bibliografa


seleccionadas
char h;
p = new nodoABB;
(*p).dato = x;
Recordatorio Anotaciones
(*p).hizq = NULL;
(*p).hder = NULL;
if ( praiz == NULL )
praiz = p;
else
{ pos=buscar(x);
if(pos!=NULL)
cout<<"Elemento 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);
}
}
ollo
nidos 110
Actividades Autoevaluacin UNIDAD IV: ESTRUCTURAS DE DATOS DINMICAS NO LINEAL

as Glosario Bibliografa
nadas
void abb::imprimepostorden( pnodoABB p )
{ pnodoABB Ai,Ad;
if ( p != NULL )
torio Anotaciones
{ 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
{ cout<<"\n Menu \n";
cout<<"\n1 insertar nodo";
cout<<"\n2 mostrar in orden";
cout<<"\n3 mostrar pre orden";
cout<<"\n4 mostrar post orden";
cout<<"\n5 Salir";
do
{ cout<<"\n\n Seleccione opcion: ";
cin>>opc;
} while(opc>5);
switch(opc)
{ case 1:{ cout<<"Ingrese hoja: ";
cin>>x;
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);
}
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD IV: ESTRUCTURAS DE DATOS DINMICAS NO LINEALDesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
111

Lecturas Glosario Bibliografa


seleccionadas
4 GRAFOS: CONCEPTOS Y ALGORITMOS DE MANIPULACIN
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,
Recordatorio Anotaciones

UD. evala en funcin 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 vrtices o nodos unidos por enlaces


llamados aristas. Las aristas pueden tener direccin (grafo dirigido).

Un camino entre dos vrtices es una lista de vrtices en la que dos elementos suce-
sivos estn 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 continuacin, se muestra el programa desarrollado por un grupo de alumnos,


estudiantes de esta misma asignatura en la modalidad presencial.

Grafo.cpp
#include<iostream>
#include<string>
#include<process.h>
#include<ctype.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<<": ";
ollo
nidos 112
Actividades Autoevaluacin UNIDAD IV: ESTRUCTURAS DE DATOS DINMICAS NO LINEAL

as Glosario Bibliografa
nadas
cin>>dato;
if(dato<=a||dato>b)
cout<<"Error\n";
torio Anotaciones
}while(dato<=a||dato>b);
return dato;
}
int leedato(int a,int b)
{ int dato;
do
{ cout<<": ";
cin>>dato;
if(dato<a||dato>b)
cout<<"Error\n";
}while(dato<a||dato>b);
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<<": ";
cin>>v1;
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD IV: ESTRUCTURAS DE DATOS DINMICAS NO LINEALDesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
113

Lecturas Glosario Bibliografa


seleccionadas
v1=toupper(v1);
n=numero(v1);
n- -;
Recordatorio Anotaciones
if(n>=V||a[n]==NULL)
cout<<"Error! vertice no valido\n";
} while(n>=V||a[n]==NULL);
return n;
}
void vertices()
{ int i;
cout<<"Ingrese numero de Vertices";
V=leedatoO(0,MAX);
z=new nodo;
z->sgte=z;
for (i=0; i<V; i++)
{ a[i]=z;
cout<<" "<<letra(i);
}
cout<<"\n";
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!=z&&band)
{ if(aux->v==n2)
{ pos=aux;
band=false;
}
aux=aux->sgte;
}
return pos;
}
void insertararista()
{ int v1,v2,peso; nodo *t;
cout<<"Vertice 1";
v1=leervertice();
do
{ cout<<"Vertice 2";
v2=leervertice();
ollo
nidos 114
Actividades Autoevaluacin UNIDAD IV: ESTRUCTURAS DE DATOS DINMICAS NO LINEAL

as Glosario Bibliografa
nadas
if(v2==v1)
cout<<"Error los dos vertices no pueden ser iguales!\n";
}while(v2==v1);
torio Anotaciones
cout<<"Ingrese 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;
cout<<"Vinculado "<<letra(v1)<<"--"<<letra(v2);
}
else
cout<<"Ya estaba vinculado!\nVinculo"<<letra(v1)<<"-"<<letra(v2);
t=buscararista(v1,v2);
cout<<" Peso: "<<t->p<<"\n";
}
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;
cout<<"Vertice Inicial";
v1=leervertice();
do
{ cout<<"Vertice 2";
v2=leervertice();
if(v2==v1)
cout<<"Error los dos vertices no pueden ser iguales!\n";
}while(v2==v1);
posb1=buscararista(v1,v2);
posb2=buscararista(v2,v1);
if(posb1==NULL)
cout<<"No habia arista!\n";
else
{ eliminarnodo(posb1,v1);
eliminarnodo(posb2,v2);
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD IV: ESTRUCTURAS DE DATOS DINMICAS NO LINEALDesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
115

Lecturas Glosario Bibliografa


seleccionadas
cout<<"Eliminado "<<letra(v1)<<"->"<<letra(v2)<<"\n";
delete posb1;
delete posb2;
} Recordatorio Anotaciones

}
void mostrargrafo()
{ int i,num;
bool banari=true,banver=true;
nodo *aux;
for(i=0;i<V;i++)
if(a[i]!=z)
banari=false;
if(banari)
{ for(i=0;i<V;i++)
cout<<letra(i)<<"\n";
cout<<"No hay aristas disponibles, solo vertices!\n";
}
else
{ for(i=0;i<V;i++)
{ if(a[i]!=NULL)
{ aux=a[i];
banver=true;
while(aux!=z)
{ num=aux->v;
if(num>i)
cout<<letra(i)<<"-"<<aux->p<<"-"<<letra(num)<<"\n";
aux=aux->sgte;
banver=false;
}
if(banver)
cout<<letra(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;k<V;k++)
val[k]=0;
k=0;
while(k<V)
{ if (val[k]==0&&a[k]!=NULL)
{ cout<<"\n"<<letra(k);
ollo
nidos 116
Actividades Autoevaluacin UNIDAD IV: ESTRUCTURAS DE DATOS DINMICAS NO LINEAL

as Glosario Bibliografa
nadas
visitar(k,val,V);
}
k++;
torio Anotaciones
}cout<<"\n";
}
void nuevovertice()
{ int i,aux,lleno=0;
bool banver=true;
for(i=0;i<V;i++)
{ if(a[i]==NULL&&banver)
{ banver=false;
aux=i;
}
if(a[i]!=NULL)
lleno++;
}
if(lleno<10)
{ if(banver)
{ a[V]=z;
V++;
}
else
a[aux]=z;
cout<<"Usted tiene disponible los siguientes vertices:\n";
for(i=0;i<V;i++)
if(a[i]!=NULL)
cout<<" "<<letra(i);
cout<<"\n";
}
else
cout<<"Ya no puede aumentar vertices!\n";
}
void eliminarvertice()
{ int i,ve;
bool banver=true;
nodo *pos;
for(i=0;i<V;i++)
if(a[i]!=NULL)
banver=false;
if(banver)
cout<<"Ya no puede eliminar vertices!\n";
else
{ cout<<"Indique el vertice a eliminar";
ve=leervertice();
a[ve]=NULL;
for(i=0;i<V;i++)
{ if(a[i]!=NULL)
{ pos=buscararista(i,ve);
if(pos!=NULL)
eliminarnodo(pos,i);
}
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD IV: ESTRUCTURAS DE DATOS DINMICAS NO LINEALDesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
117

Lecturas Glosario Bibliografa


seleccionadas
}
}
cout<<"Usted tiene disponible los siguientes vertices:\n";
Recordatorio Anotaciones
for(i=0;i<V;i++)
if(a[i]!=NULL)
cout<<" "<<letra(i);
cout<<"\n";
}
void main()
{ int opc;
bool banopc=false;
system("color 0c");
do
{ if(ban)
{ cout<<"\n M E N U ";
cout<<"\n1 Ingresar numero de vertices";
cout<<"\n7 Salir"<<endl;
}
else
{cout<<"\n M E N U ";
cout<<"\n2 Ingresar Arista (Vincular)";
cout<<"\n3 Eliminar Arista";
cout<<"\n4 Mostrar Grafo";
cout<<"\n5 Insertar vertice";
cout<<"\n6 Eliminar vertice";
cout<<"\n7 Recorrer";
cout<<"\n8 Salir"<<endl;
}
do
{ cout<<"Seleccione una opcion :>\t";
cin>>opc;
if(ban)
{ if(opc!=8&&opc!=1)
{cout<<"Opcion No valida\n";
banopc=true;
}
else
banopc=false;
}
else
{if(opc<2||opc>8)
{ cout<<"Opcion No valida\n";
banopc=true;
}
else
banopc=false;
}
}
while(banopc==true);
system("cls");
switch(opc)
ollo
nidos 118
Actividades Autoevaluacin UNIDAD IV: ESTRUCTURAS DE DATOS DINMICAS NO LINEAL

as Glosario Bibliografa
nadas
{ case 1:vertices();break;
case 2:insertararista();break;
case 3:eliminararista();break;
torio Anotaciones
case 4:mostrargrafo();break;
case 5:nuevovertice();break;
case 6:eliminarvertice();break;
case 7:recorrer();break;
}
}
while(opc!=8);
}

Diagrama Objetivos Inicio

ACTIVIDAD N 1
Desarrollo Actividades Autoevaluacin
de contenidos

Esta actividad puede consultarla en su aula virtual.

Lecturas Glosario Bibliografa


seleccionadas

Recordatorio Anotaciones
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD IV: ESTRUCTURAS DE DATOS DINMICAS NO LINEALDesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
119

Lecturas Glosario Bibliografa


seleccionadas
Tema N 2: ARCHIVO (FICHERO)

1 ARCHIVO: CONCEPTOS Y ALGORITMOS DE MANIPULACIN


Recordatorio Anotaciones
Se ha revisado en este manual, estructuras de datos estticas y dinmicas, que per-
miten slo el almacenamiento temporal de la informacin, pero como Ud. mismo
hace uso cotidiano, existen almacenamientos histricos, como los archivos (fiche-
ro) que crea en un computador.

Un archivo o fichero es un conjunto de datos estructurados en una coleccin de


entidades elementales o bsicas denominadas registros, que son de igual tipo y
constan a su vez de diferentes entidades de nivel ms bajo denominadas campos.
(Luis Joyanes Aguilar, Fundamentos de Programacin)

Es decir, la forma de almacenar nuestros datos en el computador se realiza a travs


de archivos que guardan informacin de diferente tipo, desde una hoja de clcu-
lo, un procesador de texto, imgenes, sonido, de sistema operativo y tantos como
puedan ser creados; adems 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.


(Elaboracin personal)

a. Conceptos.
Campo: es un dato elemental de la realidad como nombre de persona, cdigo de
alumno, precio de producto, nombre de ciudad y todo lo que podamos abstraer.

Registro: es un conjunto de campos que tienen una comn informacin del re-
gistro, otorgndole significado; como por ejemplo el Registro de Alumnos, que
a su vez tiene los campos cdigo, nombre, apellidos.

Archivo: es un conjunto de registros (datos estructurados) que tienen una re-


lacin de informacin entre s; se da por ejemplo el registro de matrcula de
alumnos al curso Matemtica, 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 matrcula de alumnos al curso de Matemtica 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:


ollo
nidos 120
Actividades Autoevaluacin UNIDAD IV: ESTRUCTURAS DE DATOS DINMICAS NO LINEAL

as Glosario Bibliografa
nadas

torio Anotaciones

Figura Nro 16: Conceptos de Archivos.


(Elaboracin personal)

b. Algoritmos de Manipulacin.
En lenguaje C/ C++, se usa la librera: #include <fstream>

Declaracin 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)
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD IV: ESTRUCTURAS DE DATOS DINMICAS NO LINEALDesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
121

Lecturas Glosario Bibliografa


seleccionadas

#include<iostream>
#include <fstream>
using namespace std;
Recordatorio Anotaciones
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)

#include<iostream>
#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 informacin 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

ACTIVIDAD N 2
Desarrollo Actividades Autoevaluacin
de contenidos

Esta actividad puede consultarla en su aula virtual.

Lecturas Glosario Bibliografa


seleccionadas

Recordatorio Anotaciones
ollo
nidos 122
Actividades Autoevaluacin UNIDAD IV:Objetivos
Diagrama
ESTRUCTURAS
Inicio
DE DATOS DINMICAS NO LINEAL

Desarrollo Actividades Autoevaluacin


as Glosario Bibliografa de contenidos
nadas

LECTURA SELECCIONADA N 1
Lecturas Glosario Bibliografa
seleccionadas
torio Anotaciones

OPERACIONES CON ARCHIVOS


Carretero Prez. Garca Carballena, Felix. Prez Lobato Jos, 2007, Fundamentos de Programa-
Recordatorio
Anotaciones
cin. Pg. 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 informacin que necesitan las funciones de
stio.h para poder operar.

En la siguiente figura se muestran dos situaciones tpicas: 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 genrica las operaciones que han de usarse de una
biblioteca de entada/salida (en adelante E/S) y su relacin 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, guardndose toda la informacin necesaria. qu tipo de informacin se guarda?

Cuando se crea o abre un stream, la biblioteca stdio.h realiza la peticin del servicio
correspondiente al sistema operativo. El sistema operativo en respuesta genera un des-
criptor de archivo para poder identificarlo. Parte de la informacin del stream es des-
criptor asociado al archivo. Este descriptor es transparente, aunque hay una funcin
para conocerlo (fileno).

Todo archivo abierto lleva asociado un puntero de posicin que indica el lugar don-
de se realizar la siguiente lectura o escritura. Cuando se crea un archivo, el puntero
de la posicin es cero (comienzo del archivo). Segn se escribe en el archivo, el punto
donde se escribe es el mismo donde termin la escritura anterior, salvo que se indique
una nueva posicin con la funcin fseek.

Adems 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 lneas de caracteres, cada una de las cuales est formada por
cero o ms caracteres terminados con un carcter de salto de lnea. La ltima lnea
puede no terminar en un salto de lnea.
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD IV: ESTRUCTURAS DE DATOS DINMICAS NO LINEALDesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
123

Lecturas Glosario Bibliografa


seleccionadas
Binarios: Formados por una secuencia ordenada caracteres, sin separadores especia-
les, que pueden almacenar cualquier tipo de informacin.

Hay mas informacin asociada a un stream, como un indicador de error que indica siRecordatorio
se Anotaciones

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 explcitamente con posterioridad, so pena de obtener un error. Estos
streams son:
Entrada estndar (stdin), que permite leer de la entrada convencional del computa-
dor, suele ser el teclado.
Salida estndar (stdout), que permite escribir en la salida convencional del compu-
tador, suele ser la pantalla.
Salida de error estndar (stderr), que permite escribir en la salida convencional de
error del computador, que suele ser tambin 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
Diagrama Objetivos Inicio
que incluya directa o indirectamente la biblioteca stdio.h

Desarrollo Actividades Autoevaluacin


de contenidos

GLOSARIO DE LA UNIDAD IV
Lecturas Glosario Bibliografa
seleccionadas

Arista: es la conexin entre nodos vrtices, y pueden contener informacin.

Recordatorio Stream:
Anotaciones es el flujo de datos desde o hacia un programa.

Objetivos Inicio
Vrtice: objeto o nodo que contiene informacin.

Actividades Autoevaluacin
os

BIBLIOGRAFA DE LA UNIDAD IV
Glosario Bibliografa
s

Carretero Prez, Jess. Garca Carballena, Felix. Prez Lobato Jos. Fundamentos de
Programacin. 1ra. ed. Espaa: Thomson; 2007.

o Anotaciones
Joyanes Aguilar, Luis. Fundamentos de Programacin. 4ta. ed. Espaa: McGraw-Hill;
2008.

Carrasco Loli Angela. Principios de Programacin. Junio 2005

Carretero Prez, Jess. Garca Carballena, Felix. Prez Lobato Jos. Fundamentos de
Programacin. 1ra. ed. Espaa: Thomson; 2007.

Ceballos Sierra, Francisco. C / C++ curso de programacin. 6ta ed. Mexico: AlfaOmega;
2006.

Joyanes Aguilar, Luis. Fundamentos de Programacin. 4ta. ed. Espaa: McGraw-Hill;


2008.
ollo
nidos 124
Actividades Autoevaluacin UNIDAD IV: ESTRUCTURAS DE DATOS DINMICAS NO LINEAL

as Glosario Bibliografa
nadas
Joyanes Aguilar, Luis. Zahonero Martinez, Ignacio. Programacin en C. Metodologas,
Algoritmos y Estructura de Datos. 2da. ed. Espaa: McGraw-Hill; 2005.

torio Anotaciones Laza Fidalgo Rosala. Garca Prez-Shofield Baltasar. Metodologa y Tecnologa de la
Programacin. 1raEd. Pearson; 2008.

Raffo Lecca, Eduardo. Turbo C++. 1 ed. Lima: Mundigraph; 2000.

Enlaces Web

Baeza Yates, Ricardo. Algoritmia. Dpto. de Cs. de la Computacin, 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 Programacin. Universidad de Zorrilla. Disponible


en http://personales.unican.es/zorrillm/PDFs/Docencia/ProgramacionComputa-
doras/temario/Tema1-presentaci%C3%B3n.pdf

Diagrama Objetivos Inicio

AUTOEVALUACIN DE LA UNIDAD IV
Desarrollo Actividades Autoevaluacin
de contenidos

INSTRUCCIONES: Lee detenidamente y responde las siguientes preguntas:

Lecturas
seleccionadas
Glosario
1. Indique la alternativa que contenga la definicin de: Hoja y de Camino en un rbol
Bibliografa

General:
a) La hoja es el nodo que tiene otras ramificaciones de nodos y el Camino es la
cantidad de aristas entre dos nodos.
Recordatorio Anotaciones
b) La hoja es el nodo que tiene otros caminos de nodos y el Camino es la cantidad
de vrtices 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).
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD IV: ESTRUCTURAS DE DATOS DINMICAS NO LINEALDesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
125

Lecturas Glosario Bibliografa


seleccionadas
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.
Recordatorio Anotaciones
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


Bsqueda:
a) Pre Orden(SAIzquierdo, SADerecho, Raz), InOrden(SAIzquierdo, Raz, SADe-
recho), PostOrden (Raz , SAIzquierdo, SADerecho)
b) Pre Orden(Raz, SAIzquierdo, SADerecho), InOrden(SAIzquierdo, Raz, SADe-
recho), PostOrden (Raz , SAIzquierdo, SADerecho)
c) Pre Orden(SAIzquierdo, Raz, SADerecho), InOrden(SAIzquierdo, Raz, SADe-
recho), PostOrden (, Raz, SAIzquierdo, SADerecho)
d) Pre Orden(Raz, SAIzquierdo, SADerecho), InOrden(SAIzquierdo, Raz, SADe-
recho), PostOrden (SAIzquierdo, SADerecho, Raz)
e) Pre Orden(SAIzquierdo, Raz, SADerecho), InOrden(Raz, SAIzquierdo, SADe-
recho), PostOrden (SAIzquierdo, SADerecho, Raz)

4. Indique la alternativa que diferencie a un rbol General (1) de un rbol Binario (2):
a) (1) slo tiene de 0 hasta 2 hijos, y (2) puede tener ms de 2 hijos.
b) (1) puede tener ms de 2 hijos, y (2) slo tiene de 0 hasta 2 hijos.
c) (1) slo tiene de 0 hasta 1 hijo, y (2) puede tener hasta 4 hijos.
d) (1) slo tiene 1 hijo, y (2) slo tiene de 0 hasta 2 hijos.
e) (1) puede tener ms de 2 hijos y (2) slo tiene 2 hijos.

5. Dado el siguiente rbol Binario de Bsqueda, seleccione la alternativa con la rela-


cin adecuada:

I. Los valores del rbol son ade- a) El recorrido en PreOrden es:


cuados. 37,24,16,31,33,74,52,86,68

II. Los valores del rbol son in- b) Se invalida todo resultado de recorrido.
adecuados.

a) I,a.
b) II,c.
c) I,c.
ollo
nidos 126
Actividades Autoevaluacin UNIDAD IV: ESTRUCTURAS DE DATOS DINMICAS NO LINEAL

as Glosario Bibliografa
nadas
d) II,b
e) I,b.

torio Anotaciones
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 vrtices 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 pblico 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 pblico, se puede considerar los


siguientes valores de informacin:
a) Slo tiempo.
b) Tiempo y distancia.
c) Slo distancia.
d) Tiempo, distancia y costo.
e) Slo costo.

9. Indique la alternativa que contenga las dos libreras 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 lneas de caracteres, guardan cualquier tipo de informacin, y (2) son
secuencia de caracteres que terminan en salto de lnea.
b) (1) son lneas de caracteres, terminados en un salto de lnea, y (2) son secuencia
de caracteres que terminan en salto de lnea.
c) (1) son lneas de caracteres, guardan cualquier tipo de informacin, y (2) son
secuencia de caracteres sin separadores especiales.
d) (1) son lneas de caracteres, sin separadores especiales, y (2) son secuencia de
caracteres que guardan cualquier tipo de informacin.
e) (1) son lneas de caracteres, terminados en un salto de lnea, y (2) son secuencia
de caracteres sin separadores especiales.


ALGORTMIA Y ESTRUCTURA DE DATOS
ANEXODesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
127

Lecturas Glosario Bibliografa


seleccionadas
ANEXO

CLAVES DE RESPUESTAS AUTOEVALUACIN DE LA UNIDAD I Recordatorio Anotaciones

1. C 6. C

2. A 7. D

3. D 8. C

4. B 9. B

5. E 10. C

CLAVES DE RESPUESTAS AUTOEVALUACIN DE LA UNIDAD II

1. D 6. E

2. C 7. B

3. B 8. E

4. D 9. B

5. A 10. B

CLAVES DE RESPUESTAS AUTOEVALUACIN DE LA UNIDAD III

1. C 6. C

2. B 7. D

3. E 8. B

4. E 9. A

5. C 10. C

CLAVES DE RESPUESTAS AUTOEVALUACIN DE LA UNIDAD IV

1. E 6. D

2. B 7. C

3. D 8. D

4. B 9. A

5. D 10. E
128