Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
ESTRUCTURA
DE DATOS
Derechos reservados
Primera Edicin: Noviembre 2013
Tiraje: 500 ejemplares
ACTIVIDAD N1 34
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
ACTIVIDAD N1 60
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
ACTIVIDAD N1 83
ACTIVIDAD N2 95
Lecturas seleccionada n 1 95
ACTIVIDAD N1 118
ACTIVIDAD N2 121
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
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
Desarrollo
UNIDAD I: ALGORITMOS Y PROGRAMACIN ESTRUCTURADA
Actividades Autoevaluacin
de contenidos
Recordatorio Anotaciones
LECTURAS
CONTENIDOS ACTIVIDADES
SELECCIONADAS
Desarrollo Actividades Autoevaluacin
de contenidos
Recordatorio Anotaciones
AUTOEVALUACIN BIBLIOGRAFA
Lecturas Glosario Bibliografa
seleccionadas
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.
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).
E: Entrada de datos.
P: Proceso.
S: Salida de resultados.
Figura Nro 1: Partes de un algoritmo
2 CARACTERSTICAS DE UN ALGORITMO
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
Recordatorio Anotaciones
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)
INICIO
Declaracin de variables
Lectura de Datos
Accin 1
Accin 2
Accin n
Reporte de Datos
FIN
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
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.
PROGRAMA FUENTE
INTERPRETE
TRADUCCIN Y
EJECUCIN LINEA
POR LINEA
as Glosario Bibliografa
nadas
PROGRAMA FUENTE
torio Anotaciones
COMPLADOR
PROGRAMA OBJETIVO
PROGRAMA FUENTE
COMPLADOR
PROGRAMA OBJETIVO
PROGRAMA ENLAZADOR
PROGRAMA EJECUTABLE
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.
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
Selectivas
Repetitivas
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.
Descripcin:
- El smbolo #, es una directiva del procesador que permite acceder la carpeta include.
- using namespace std; indica que se est haciendo uso del espacio de nombres
estndar, es decir un conjunto de smbolos para lenguajes de programacin.
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.
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
Leer base
Leer altura
rea (base*altura)/2
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;
as Glosario Bibliografa
nadas
cout<<Area;
cout<<\n;
system(PAUSE);
torio Anotaciones
}
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
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
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;
}
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
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
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);
}
INICIO
Declaracin de variables
Lectura de datos
1 default
Cond 1
3 3
Accin 1 Accin 2 Accin 3 Accin 4
Accin 4
Reporte de datos
FIN
Diagrama N-S:
INICIO
Declaracin de variables
Lectura de datos
1 2 3 cond 1 default
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
FIN
Diagrama N-S:
INICIO
Entero a, b, c
Leer a, b
1 2 3 4 5 num default
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);
}
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
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
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);
}
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
INICIO
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);
}
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
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);
}
as Glosario Bibliografa
nadas
INICIO
torio Anotaciones
Declaracin de variables
Lectura de datos
F
Variable es menor a limite
Accin 1
Accin n
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
INICIO
Recordatorio Anotaciones
entero i, num, p = 1
Leer num
i1
F
i < = num
V
pp*i
i ++
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
ACTIVIDAD N 1
Desarrollo Actividades Autoevaluacin
de contenidos
torio Anotaciones
Esta actividad puede consultarla en su aula virtual.
Recordatorio Anotaciones
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, los cambios que se efecten sobre dicha variable dentro del procedimiento
se mantienen incluso despus de que este haya terminado.
Recordatorio Anotaciones
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.
- 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.
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.
//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( )
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
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.
- 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
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.
- 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.
Descripcin:
- El ejemplo anterior solo ha sido dado con Procedimientos y Funciones con ar-
gumentos, pero tambin puede darse sin argumentos.
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;
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);
}
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;
}
#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.
- 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
as Glosario Bibliografa
nadas
RepartoHerencia.cpp
torio Anotaciones
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.
1 DEFINICIN DE RECURSIVIDAD
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
- 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.
as Glosario Bibliografa
nadas
torio Anotaciones
ACTIVIDAD N 2
Desarrollo Actividades Autoevaluacin
de contenidos
Recordatorio Anotaciones
ALGORTMIA Y ESTRUCTURA DE DATOS
Diagrama Objetivos Inicio
UNIDAD I: ALGORITMOS Y PROGRAMACIN ESTRUCTURADADesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
45
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
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.
GLOSARIO DE LA UNIDAD I
Lecturas Glosario Bibliografa
seleccionadas
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
o Anotaciones
Joyanes Aguilar, Luis. Fundamentos de Programacin. 4ta. ed. Espaa: McGraw-Hill;
2008.
Objetivos Inicio
AUTOEVALUACIN DE LA UNIDAD I
Actividades Autoevaluacin
s
s
Glosario
1. Indique la alternativa que describa la caracterstica Ser Preciso de un algoritmo:
Bibliografa
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.
as Glosario Bibliografa
nadas
Para:
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.
if(num > 0)
if(num > 30 && num < 60 )
cout<<pow(num,2);
else
return a*modulo(a,b-1);
}
10. Indique la alternativa que indique la(s) variables(s) que sean paso de parmetros
por referencia.
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
Desarrollo
UNIDAD II: ESTRUCTURAS DE DATOS ESTTICAS
Actividades Autoevaluacin
de contenidos
Recordatorio Anotaciones
LECTURAS
CONTENIDOS ACTIVIDADES
Desarrollo Actividades Autoevaluacin SELECCIONADAS
de contenidos
Recordatorio Anotaciones
Lecturas Glosario
AUTOEVALUACIN
Bibliografa
BIBLIOGRAFA
seleccionadas
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
Por ejemplo, se tiene una estructura estndar de tipo real para una variable deno-
minada precio:
Declaracin en C/C++: float precio;
12.6
float precio
char Mensaje b i e n v e n i d o ` \0
struct Paciente{
int codPaciente;
string apePaciente;
string nombPaciente;
char generoPaciente;
};
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).
TipoDato NombreArreglo[tamao]
Ejemplo: Entero M[10]
as Glosario Bibliografa
nadas
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.
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
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");
}
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");
}
#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
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");
}
ACTIVIDAD N 1
Desarrollo Actividades Autoevaluacin
de contenidos
Recordatorio Anotaciones
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD II: ESTRUCTURAS DE DATOS ESTTICASDesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
61
TipoDato NombreMatriz[nfilas][ncolumnas]
Ejemplo: Entero M[4][5]
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";
}
}
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");
}
ACTIVIDAD N 2
Desarrollo Actividades Autoevaluacin
de contenidos
Recordatorio Anotaciones
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.
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
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.
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.
GLOSARIO DE LA AUNIDAD II
Lecturas Glosario Bibliografa
seleccionadas
Recordatorio Anotaciones
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
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.
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
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:
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
10. Dado el siguiente bloque de cdigo para bsqueda binaria en una arreglo unidi-
mensional, indique la alternativa que es correcta:
Desarrollo
UNIDAD III: ESTRUCTURAS DE DATOS DINMICAS LINEAL
Actividades Autoevaluacin
de contenidos
Recordatorio Anotaciones
LECTURAS
CONTENIDOS ACTIVIDADES
Desarrollo Actividades Autoevaluacin
SELECCIONADAS
de contenidos
Recordatorio Anotaciones
Lecturas Glosario
AUTOEVALUACIN
Bibliografa
BIBLIOGRAFA
seleccionadas
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
#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");
}
#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
#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";
}
Ejemplo:
#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
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.";
}
1 DEFINICIN DE TDA
Es un tipo de dato definido por el programador, que consta de datos y operaciones.
Ejemplo: clases, listas, pilas, colas.
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.
OBJETOS CLASE
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.
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
#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");
}
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.
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.
Ejemplo:
#include <iostream>
using namespace std;
void main ()
{ int x,y; // Variables de tipo entero
int *p; // Puntero a una variable de tipo entero
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
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
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
- 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
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
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;
}
ACTIVIDAD N 1
Desarrollo Actividades Autoevaluacin
de contenidos
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
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 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.
ListasSE.h
#include <iostream>
#include <string>
#define MAX 100
using namespace std;
struct nodo
{ int dato;
nodo *sig;
};
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
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
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.
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
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.
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
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
ACTIVIDAD N 2
Desarrollo Actividades Autoevaluacin
de contenidos
Recordatorio Anotaciones
LECTURA SELECCIONADA N 1
Lecturas Glosario Bibliografa
seleccionadas
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.
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,
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.
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.
GLOSARIO
Lecturas Glosario Bibliografa
seleccionadas
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
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
struct domicilio{
char nombre[30];
Recordatorio Anotaciones char calle[30];
int num;
char ciudad[20];
};
void main( )
{
domicilio Oficina, casa;
}
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;
cambiarEdad( (I) );
}
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD III: ESTRUCTURAS DE DATOS DINMICAS LINEALDesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
99
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.
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:
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.
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
Desarrollo
UNIDAD IV: ESTRUCTURAS DE DATOS DINMICAS NO LINEAL
Actividades Autoevaluacin
de contenidos
Recordatorio Anotaciones
LECTURAS
CONTENIDOS ACTIVIDADES
Desarrollo Actividades Autoevaluacin
SELECCIONADAS
de contenidos
Recordatorio Anotaciones
AUTOEVALUACIN BIBLIOGRAFA
Lecturas Glosario Bibliografa
seleccionadas
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
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
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
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);
}
Ejemplo:
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD IV: ESTRUCTURAS DE DATOS DINMICAS NO LINEALDesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
107
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 )
Ejemplo:
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
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
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 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:
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
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
}
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
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);
}
ACTIVIDAD N 1
Desarrollo Actividades Autoevaluacin
de contenidos
Recordatorio Anotaciones
ALGORTMIA Y ESTRUCTURA DE DATOS
UNIDAD IV: ESTRUCTURAS DE DATOS DINMICAS NO LINEALDesarrollo
de contenidos
Actividades Autoevaluacin
MANUAL AUTOFORMATIVO
119
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.
as Glosario Bibliografa
nadas
torio Anotaciones
b. Algoritmos de Manipulacin.
En lenguaje C/ C++, se usa la librera: #include <fstream>
#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");
}
#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");
}
ACTIVIDAD N 2
Desarrollo Actividades Autoevaluacin
de contenidos
Recordatorio Anotaciones
ollo
nidos 122
Actividades Autoevaluacin UNIDAD IV:Objetivos
Diagrama
ESTRUCTURAS
Inicio
DE DATOS DINMICAS NO LINEAL
LECTURA SELECCIONADA N 1
Lecturas Glosario Bibliografa
seleccionadas
torio Anotaciones
En las siguientes secciones se presentan las ideas asociadas a un stream de E/s, as como
las funciones de la biblioteca stdio.h
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
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
GLOSARIO DE LA UNIDAD IV
Lecturas Glosario Bibliografa
seleccionadas
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.
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.
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.
Enlaces Web
AUTOEVALUACIN DE LA UNIDAD IV
Desarrollo Actividades Autoevaluacin
de contenidos
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
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.
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.
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
1. C 6. C
2. A 7. D
3. D 8. C
4. B 9. B
5. E 10. C
1. D 6. E
2. C 7. B
3. B 8. E
4. D 9. B
5. A 10. B
1. C 6. C
2. B 7. D
3. E 8. B
4. E 9. A
5. C 10. C
1. E 6. D
2. B 7. C
3. D 8. D
4. B 9. A
5. D 10. E
128