SlideShare una empresa de Scribd logo
1 de 128
Descargar para leer sin conexión
Carol Roxana Rojas Moreno
ALGORÍTMIA Y
ESTRUCTURA
DE DATOS
Cada autor es responsable del contenido de su propio texto.
De esta edición:
© Universidad Continental S.A.C 2012
Jr. Junin 355, Miraflores, Lima-18
Teléfono: 213 2760
Derechos reservados
Primera Edición: Noviembre 2013
Tiraje: 500 ejemplares
Autor: Carol Roxana Rojas Moreno
Oficina de Producción de Contenidos y Recursos
Impreso en el Perú - Rebelars S.A.C
Jr. Los Bosques 555 - El Tambo - Huancayo
Fondo Editorial de la Universidad Continental
Todos los derechos reservados.
Esta publicación no puede ser reproducida, en todo ni en parte, ni registrada en o
trasmitida por un sistema de recuperación de información, en ninguna forma ni por
ningún medio sea mecánico, fotoquímico, electrónico, magnético, electroóptico, por
fotocopia, o cualquier otro sin el permiso previo por escrito de la Universidad.
INTRODUCCIÓN 9
DIAGRAMA DE PRESENTACIÓN DE LA ASIGNATURA 11
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA 13
DIAGRAMA DE PRESENTACIÓN DE LA UNIDAD i
Tema N° 1: Algoritmo
1 Definición del algoritmo 14
2 Características de un algoritmo 17
3 Instrucciones algorítmicas básicas 17
4 Representación del algoritmo 18
Tema N° 2: Programación Estructurada
1 Programa 26
2 Lenguaje de programación 27
3 Programas traductores 28
4 Definición programación estructurada 29
Tema N° 3: Sentencias Básicas de Programación
1 Estructura básica secuencial 31
2 Estructura básica selectiva 31
3 Estructura básica repetitiva 32
ACTIVIDAD N°1 34
Tema N° 4: Modularización de Programas
1 Definición de módulos de programa 34
2 Paso de Parámetros 34
3 Procedimientos 35
4 Funciones 36
5 Librerías de programación creadas por el usuario 40
Tema N° 5: Funciones Recursivas
1 Definición de recursividad 42
2 Recursividad de factorial 43
3 Recursividad de la multiplicación 43
4 Recursividad de torres de hanoi 43
ACTIVIDAD N°2 44
Lectura seleccionada N°1 45
GLOSARIO de la unidad i 46
BIBLIOGRAFÍA DE LA UNIDAD I 47
Autoevaluación DE LA UNIDAD i 47
UNIDAD II: ESTRUCTURA DE DATOS ESTÁTICAS 51
DIAGRAMA DE PRESENTACIÓN DE LA UNIDAD ii
TEMA 1: Estructuras de Datos
1 Definición de estructura de datos 52
2 Clasificación de estructura de datos 52
Tema N° 2: Arreglos Unidimensionales
1 Definición de arreglos unidimensionales 53
2 Algoritmos de actualización 54
3 Búsqueda de arreglos unidimensionales 57
4 Ordenación de arreglos unidimensionales 59
ACTIVIDAD N°1 60
Tema N° 3: Arreglos Bidimensionales
1 Definición de arreglos bidimensionales 61
2 Algoritmos de actualización de arreglos bidimensionales 63
ACTIVIDAD N°2 65
Lectura seleccionada n° 1 65
GLOSARIO de la unidad ii 67
Bibliografía de la unidad ii 67
Autoevaluación de la unidad ii 67
UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICA LINEAL 71
DIAGRAMA DE PRESENTACIÓN DE LA UNIDAD iii
Tema N° 1: Registro (Estructura) y Unión
1 Definición de registro (estructura) 72
2 Módulos y estructuras 74
3 Invocación de una estructura en otra 75
4 Definición de unión: ejemplo práctico 76
Tema N° 2: Tipos de Datos Abstractos (TDA)
1 Definición de TDA 77
2 Clases y programación orientada a objetos 78
Tema N° 3: Puntero a Dirección de Memoria
1 Definición de puntero a dirección de memoria 80
2 Creación y eliminación de variables dinámicas 82
ACTIVIDAD N°1 83
Tema N° 4: Estructuras de Datos Dinámicas Lineal
1 Listas enlazadas: simple, doble, circular 84
2 Colas y pilas 90
ACTIVIDAD N°2 95
Lecturas seleccionada n° 1 95
GLOSARIO de la unidad iii 97
Bibliografía de la unidad iii 97
Autoevaluación de la unidad iii 97
UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICA NO LINEAL 101
DIAGRAMA DE PRESENTACIÓN DE LA UNIDAD iv
Tema N° 1: Árbol y Grafo
1 Árbol General: Conceptos básicos y algoritmos de manipulación 102
2 Árbol binario: recorridos: preorden, inorden, postorden 106
3 Árboles binarios de búsqueda ( abb ) 107
4 Grafos: Conceptos y algoritmos de manipulación 	 111
ACTIVIDAD N°1 118
Tema N° 2: Archivo (Fichero)
1 Archivo: conceptos y algoritmos de manipulación 119
ACTIVIDAD N°2 121
Lecturas seleccionada n° 1 122
GLOSARIO de la unidad iv 123
Bibliografía Y DIRECCIONES ELECTRÓNICAS 123
Autoevaluación de la unidad iv 124
ANEXO
Clave de respuesta de Autoevaluaciones 127
INTRODUCCIÓN
A
lgoritmia y Estructura de Datos es una asignatura que
se desarrolla con una modalidad de educación virtual,
y el presente manual autoformativo es su material di-
dáctico más importante.
Esta asignatura tiene como finalidad proporcionar al estudian-
te, los conocimientos necesarios en las técnicas y estructuras de
datos para iniciarse en la programación asistida por un compu-
tador y basado en el enfoque estructurado, requeridos en su
formación básica para poder desarrollar programas en otros
niveles más avanzados.
La competencia a desarrollar es: Construye algoritmos en un
lenguaje de programación, utilizando las sentencias básicas de
programación, diferenciando su uso para la propuesta de solu-
ción de un problema, y con ello construye programas computa-
cionales utilizando módulos de programa (funciones y procedi-
mientos), valorando la reutilización de los módulo, y utilizando
las diferentes estructuras de datos: estáticas y dinámicas para
almacenar datos temporalmente, diferenciando el uso de las
estructuras con respecto al uso de los archivos como almacena-
miento de datos permanente, promoviendo el interés por otras
técnicas de almacenamiento.
El presente material consta de cuatro unidades: Unidad I: Algo-
ritmos y Programación Estructurada, que presenta conceptos,
representaciones y programación del algoritmo, con sus técni-
cas: Sentencias Básicas de Programación: Secuenciales, Selecti-
vas y Repetitivas y la Modularización en la Programación Estruc-
turada, es decir, se puede dividir a un programa complejo, en
segmentos de programa mas simples (Modularización), y poder
ser reutilizados en otros programas, a través del uso de funcio-
nes y procedimientos, y en algunos casos usando el concepto
de recursividad. Unidad II: Estructuras de Datos Estáticas, pre-
sentando los algoritmos de creación y actualización de Arreglos
Unidimensionales y Bidimensionales, Unidad III: Estructuras
de Datos Dinámica Lineal, donde se expone las formas de alma-
cenamiento temporal de datos a través estructuras listas, pilas,
cola. Unidad IV: Estructuras de Datos Dinámica No Lineal, en
esta última unidad, se exponen otras formas de almacenamien-
to de datos como árboles, grafos, archivos.
Para el estudio del manual y la ejecución de las actividades, se
recomienda para cada unidad:
•	 Realizar el estudio de los contenidos. Esta lectura será ana-
lítica y reflexiva subrayando, resumiendo y asimilando la in-
formación.
•	 Pasar al estudio de las lecturas seleccionadas, que son de
estudio de profundización o ampliación.
•	 Desarrollar las actividades programadas para cada semana
en el aula virtual y asistidas por un lenguaje de programa-
ción, con la asesoría del Profesor Tutor.
•	 Desarrollar la auto evaluación, que es una preparación para
la prueba final de la asignatura. .
8
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
9Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
COMPETENCIA DE LA ASIGNATURA
Construye algoritmos en un lenguaje de programación, utilizando las sentencias bá-
sicas de programación, diferenciando su uso para la propuesta de solución de un
problema, y con ello construye programas computacionales utilizando módulos de
programa (funciones y procedimientos), valorando la reutilización de los módulo,
y utilizando las diferentes estructuras de datos: estáticas y dinámicas para almacenar
datos temporalmente, diferenciando el uso de las estructuras con respecto al uso de
los archivos como almacenamiento de datos permanente, promoviendo el interés
por otras técnicas de almacenamiento.
UNIDADES DIDÁCTICAS
UNIDAD I UNIDAD II UNIDAD III UNIDAD IV
“Algoritmos y Pro-
gramación Estruc-
turada”
“Estructuras de
Datos Estáticas”
“Estructuras de
Datos Dinámica
Lineal”
“Estructuras de
Datos Dinámica No
Lineal”
TIEMPO MÍNIMO DE ESTUDIO
UNIDAD I UNIDAD II UNIDAD III UNIDAD IV
1ª y 2ª semana
16 horas
3ª y 4ª semana
16 horas
5ª y 6ª semana
16 horas
7ª y 8ª semana
16 horas
Diagrama Objetivos Inicio
Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
PRESENTACIÓN DE LA ASIGNATURA
10
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
11Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
Diagrama Objetivos Inicio
Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
Diagrama Objetivos Inicio
Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
DIAGRAMA DE PRESENTACIÓN DE LA UNIDAD
ORGANIZACIÒN DE LOS APRENDIZAJES
CONOCIMIENTOS PROCEDIMIENTOS ACTITUDES
Tema N° 1: Algoritmo
1. Definición del Algoritmo
2. Características de un algoritmo
3. Instrucciones Algorítmicas
Básicas
4. Representación del Algoritmo
Tema N° 2: Programación Es-
tructurada
1. Programa
2. Lenguaje de Programación
3. Programas Traductores
4. Definición Programación Es-
tructurada
Tema Nº 3: Sentencias Básicas
de Programación
1. Estructura Básica Simple o
Secuencial
2. Estructura Básica Selectiva
3. Estructura Básica Repetitiva
Tema Nº 4: Modularización de
Programas
1. Definición de Módulos de
Programa
2. Paso de Parámetros
3. Procedimientos
4. Funciones
5. Librerías de Programación
creadas por el usuario
Lectura seleccionada N° 1
Introducción a los Subalgorit-
mos o Subprogramas – Luis Jo-
yanes Aguilar
Tema Nº 5: Funciones Recursi-
vas
1. Definición de Recursividad
2. Recursividad del Factorial
3. Recursividad de la Multipli-
cación
4. Recursividad de Torres de
Hanoi
Autoevaluación de la Unidad I
1.	Analiza diferentes situacio-
nes problema para proponer
un algoritmo computacional
como solución
2.	Aplica el flujo de trabajo de
la sentencia de programación
secuencial
3.	Aplica las sentencias de pro-
gramación selectiva en la
construcción de un algoritmo
como solución de un proble-
ma
4.	Aplica las sentencias de pro-
gramación repetitiva en la
construcción de un algoritmo
como solución de un proble-
ma
5.	Aplica los conceptos de la
modularización a través de las
Funciones, Procedimientos
6.	Construye Librerías de Pro-
gramación, para la reutiliza-
ción de módulos en los pro-
gramas
7.	Aplica algoritmos recursivos
en la construcción de progra-
mas
Actividad N° 1
Elaboración de Algoritmos y
programas usando las senten-
cias básicas de programación
Actividad N° 2
Elaboración de programas
usando módulos y librerías de
programas, y elaboración de
algoritmos recursivos
Control de Lectura Nº 1
Sentencias de Programación
en los Algoritmos y Módulos de
Programa
1.	Asume con responsabilidad
sus actividades académicas
asignadas
2. Realiza con honestidad las eva-
luaciones asignadas
CONTENIDOS
AUTOEVALUACIÓN
LECTURAS
SELECCIONADAS
BIBLIOGRAFÍA
ACTIVIDADES
12ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
TEMA N° 1: ALGORITMO
1 	DEFINICIÓN DE ALGORITMO
¿En su quehacer diario, realiza sus actividades generalmente en un orden, organizado, finali-
za y realiza otro conjunto de actividades de similar manera?
Entonces quiere decir que está realizando un algoritmo, y en este caso, al desarro-
llarlo sin ayuda de un computador, se trata de un algoritmo no computacional.
La definición de “Algoritmo” es precisamente como Ud. pensó que desarrolla sus
actividades diarias, es decir: “Un algoritmo es un conjunto ordenado y finito de
actividades, que generalmente, conducen a la solución de un problema”.
La palabra algoritmo se deriva de la traducción al latín del nombre árabe
Al-Khuwarizmi, matemático y astrónomo árabe que escribió un tratado sobre
manipulación de números y ecuaciones en el siglo IX. (Angela Carrasco Loli.
Principios de Programación)
Tenemos algunos ejemplos de algoritmo:
- Al instalar un equipo de sonido, ejecutamos las instrucciones (algoritmo) conteni-
das en el manual del equipo.
- El algoritmo matemático de Euclides para la obtención del máximo común divi-
sor de dos números.
Algunos algoritmos pueden ser ejecutados con ayuda de una computadora, a esto le
llamamos algoritmo computacional, donde las actividades desarrolladas se llaman
instrucciones y se expresan en un lenguaje de programación. (Términos que se
explican mas adelante).
Todo algoritmo puede ser descompuesto en tres partes, como se muestra en la
siguiente figura:
E: Entrada de datos.
P: Proceso.
S: Salida de resultados.
Figura Nro 1: Partes de un algoritmo
2 	CARACTERÍSTICAS DE UN ALGORITMO
•	 Un algoritmo debe ser preciso e indicar el orden de realización de cada
paso.
•	 Un algoritmo debe ser definido. El algoritmo dos veces, se debe obtener el
mismo resultado cada vez.
•	 Un algoritmo debe ser finito: Si se sigue use debe terminar en algún mo-
mento, o sea, debe tener un número finito de pasos.
(Luis Joyanes Aguilar. Fundamentos de Programación.)
Para que pueda escribir las instrucciones algorítmicas, necesita conocer lo que es
una Variable: Es una localización o casillero en la memoria principal que almacena
un valor que puede cambiar en el transcurso de la ejecución del programa.
Tiene un nombre, un tipo de dato y un valor. Antes de poder utilizar una variable
es necesario declararla especificando su nombre y su tipo de dato.
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
13Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
Ejemplo 1: Entero edad
Ejemplo 2: Real peso, talla
3 	INSTRUCCIONES ALGORÍTMICAS BÁSICAS
a. Entrada: Consiste en obtener un dato de un dispositivo de entrada, como el
teclado el lector óptico, etc., y almacenarlo en una variable, y se expresa en el pseu-
docódigo mediante la palabra LEER, de la siguiente forma:
Ejemplo: LEER variable
LEER edad
• En lenguaje C/C++: cinedad;
b. Salida: Consiste en mostrar el valor de una variable en un dispositivo de salida,
como la pantalla del computador, se expresa en el pseudocódigo mediante la pala-
bra ESCRIBIR,de la siguiente forma:
Ejemplo: ESCRIBIR variable
ESCRIBIR TotalCompra
• En lenguaje C/C++: coutTotalCompra;
c. Asignación: Consiste en dar a una variable el valor de una expresión. La asigna-
ción se expresa en el pseudocódigo de la siguiente forma:
variable expresión
Donde variable y el valor de expresión deben tener el mismo tipo de dato.
Ejemplo:
resultado numero1 + numero 2
En lenguaje C/C++: resultado = numero1 + numero 2;
4 	REPRESENTACIÓN DEL ALGORITMO
Para poder comprender el orden lógico en el que realizan los pasos de un algorit-
mo, se hace uso de diagramas de representación, definidas por conjunto de símbo-
los y significado de cada uno de ellos
A continuación se le mostrará algunas de las representaciones de algoritmos más
conocidas:
a.	Pseudocódigo: Es la representación del algoritmo en el lenguaje natural del
programador.
Ejemplo: algoritmo para sumar dos números enteros.
INICIO
entero numero1, numero2, resultado
Leer numero1
Leer numero2
resultado numero1 + numero 2
Escribir “El resultado de la suma es: ”
Escribir resultado
FIN
Descripción:
- Todo algoritmo por ser finito, tiene un INICIO un FIN.
- Las variables numero1, numero2 y resultado, son asignadas como tipo de dato entero.
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
14ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
- Note que se mantiene las tres partes de un algoritmo: ENTRADA (Leer numero1,
Leer numero2), PROCESO (La suma de numero1 y numero2, y dicho valor de
suma asignado a la variable resultado) y SALIDA (Escribir el mensaje por pantalla
“El resultado es: ” y Escribir el valor pantalla de la variable resultado)
b.	 Diagrama de Flujo Estructurado: Representación con flujos entre los procesos a
realizar. Los principales símbolos de representación para este diagrama son:
c.	 Diagrama Nassi/Schneiderman (N-S): Representación en bloques, es decir cada
uno de los procesos como ingreso/salida de datos, decisiones, acciones, repeticio-
nes; están representados en bloques de tareas consecutivos.
INICIO
Declaración de variables
Lectura de Datos
Acción 1
Acción 2
Acción n
Reporte de Datos
FIN
Se le mostrará ejemplos de estas dos últimas representaciones de algoritmos en el
tema de Sentencias de Programación.
TEMA N° 2: PROGRAMACIÓN ESTRUCTURADA
1 	PROGRAMA
¿Se ha preguntado como el computador puede realizar las órdenes como ingresar datos por
teclado, reproducir música, editar imágenes? Todo esto es posible gracias a la ejecución
de algún programa, es decir, un conjunto de pasos ordenados y finitos (algoritmo)
escrito en un lenguaje de programación (programa fuente).
2 	LENGUAJE DE PROGRAMACIÓN
Así como Ud. conoce el alfabeto (símbolos), gramática y semántica de un idioma
como por ejemplo el castellano o el inglés, así es como usará un lenguaje de pro-
gramación, con sus propios símbolos, gramática y semántica.
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
15Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
Entonces, el lenguaje de programación es un conjunto de sentencias utilizadas para es-
cribir secuencias de instrucciones para que ejecute un programa en una computadora.
Existen los siguientes lenguajes de programación que ya fueron revisados en alguna
asignatura previa a esta, las que recordamos como:
a.	 Lenguaje Máquina: Lenguaje de programación que la computadora interpreta
y ejecuta directamente, y está compuesto de instrucciones codificadas en binario
(0, 1).
b.	 Lenguaje de Bajo Nivel: también llamados lenguajes ensambladores, permiten
al programador escribir instrucciones de un programa usando abreviaturas del len-
guaje natural (inglés), también llamadas palabras nemotécnicas (ADD, DIV, SUB,
etc).
c.	 Lenguaje de Alto Nivel: permite al programador escribir las instrucciones de un
programa utilizando palabras o expresiones sintácticas muy similares al lenguaje
natural (ejemplo: el inglés).
Recuerde que así escriba un programa en un lenguaje de alto nivel, el compu-
tador debe traducir estas instrucciones a lenguaje máquina, es decir, en código
binario.
3 	PROGRAMAS TRADUCTORES
Son aquello programas que traducen algoritmos escritos en un programa en len-
guaje de alto nivel hacia el lenguaje de código máquina.
a.	Intérprete: es un traductor que toma un programa fuente, lo traduce y a conti-
nuación lo ejecuta.
La siguiente figura muestra el flujo de desarrollo de un intérprete.
PROGRAMA FUENTE
TRADUCCIÓN Y
EJECUCIÓN LINEA
POR LINEA
INTERPRETE
Figura Nro 2: Programa Intérprete
(Luis Joyanes Aguilar. Fundamentos de Programación)
b.	Compilador: la traducción del programa se realiza en una sola operación llama-
da compilación del programa, es decir se traducen las instrucciones del programa
en un solo bloque. El programa compilado y depurado (eliminado los errores de
código fuente) se denomina programa ejecutable porque ya se puede ejecutar di-
rectamente y cuantas veces de desee, y puede volver a compilarse por ejemplo en el
lenguaje C/C++.
En la siguiente figura se muestra del flujo de desarrollo de un compilador.
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
16ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
PROGRAMA FUENTE
PROGRAMA OBJETIVO
COMPLADOR
Figura Nro 3: Programa Compilador
(Luis Joyanes Aguilar. Fundamentos de Programación)
La compilación es el proceso de traducción del programa fuente a programa objeto
(traducido a código máquina), a través de un programa enlazador (conduce a un
programa en lenguaje máquina directamente ejecutable), para obtener el progra-
ma ejecutable. El detalle del proceso de un compilador se muestra en la siguiente
figura:
PROGRAMA FUENTE
PROGRAMA OBJETIVO
PROGRAMA EJECUTABLE
COMPLADOR
PROGRAMA ENLAZADOR
Figura Nro 4: Detalle de un Programa Compilador
(Luis Joyanes Aguilar. Fundamentos de Programación)
4 	DEFINICIÓN PROGRAMACIÓN ESTRUCTURADA
Existen dos enfoques de programación y por lo tanto de desarrollo de software,
muy utilizados en la actualidad, el Enfoque Estructurado y el Enfoque Orientado a
Objetos, cada uno con sus conceptos, técnicas y herramientas.
En esta asignatura, por ser de formación básica en su carrera y para facilitar el ini-
cio del estudiante en la elaboración de programas, usaremos la Programación del
Enfoque Estructurado.
La Programación Estructurada es un conjunto de técnicas para escribir, verificar,
depurar, y mantener los programas realizando refinamientos sucesivos es decir un
todo se divide en segmentos más sencillos o de menor complejidad que al darles
solución, se proceden a unificar.
Para que estos segmentos de programa realicen las tareas que se le asignen, se recu-
rre a las Estructuras de Control Básicas.
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
17Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
Estructuras de Control Básicas (Flujos de Control)
Las estructuras básicas que permiten iniciarse sin dificultad en la programación, se
conocen como:
•	 Secuenciales
•	Selectivas
•	Repetitivas
Éste conjunto de técnicas permite elaborar programas en cualquier lenguaje de
programación.
Las estructuras de Control Básicas mencionadas, o también conocidas como Sen-
tencias Básicas de Programación, serán desarrolladas más adelante.
NOTA:
Estructura de un Programa en C/C++
Para iniciar la elaboración de programas en esta asignatura, se muestra la Estructu-
ra de un Programa Simple en C++, en el Tema de Módulos de Programa, la estruc-
tura del programa tendrá algunas modificaciones.
Figura Nro 5: Estructura simple de un Programa en C/C++
(Elaboración personal)
Descripción:
-	 El símbolo #, es una directiva del procesador que permite acceder la carpeta include.
-	La carpeta o librería include, es propia del compilador, es donde se encuentran
las librerías de cabecera (extensión .h) del lenguaje C/C++
-	Una de las librerías de cabecera es el iostream, (i:imput, o:output, stream: flujo
de cadenas) que permite reconocer las instrucciones de entrada, salida y manejo
de caracteres o cadenas (simbolos) dentro del programa.
-	using namespace std; indica que se está haciendo uso del espacio de nombres
estándar, es decir un conjunto de símbolos para lenguajes de programación.
-	 El Módulo Principal main( ), en el cual se escribirán las instrucciones de progra-
ma o invocaciones a otros módulos de programa.
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
18ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
TEMA N° 3: SENTENCIAS BÁSICAS DE PROGRAMACIÓN
1 	ESTRUCTURA BÁSICA SECUENCIAL
En un mundo ideal, el orden de realización de tareas no tendrían ninguna restric-
ción (condición o selección), es decir se realizarían de forma secuencial.
Es una estructura paso a paso, sin bifurcaciones ni repeticiones; donde la salida de
un proceso es entrada para otro.
Diagrama de Flujo:
INICIO
Lectura de datos
Acción 2
Acción n
Reporte de datos
FIN
Declaración de variables
Acción 1
Diagrama N-S:
INICIO
Declaración de variables
Lectura de Datos
Acción 1
Acción 2
Acción n
Reporte de Datos
FIN
Ejemplo:
Calcular el área de un triángulo. Área = (base * altura) / 2
Solución
Leyenda de Datos
Base: valor de la base del triángulo
Altura: valor de la altura del triángulo
Área: valor del resultado del cálculo del área del triángulo
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
19Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
Diagrama de Flujo:
INICIO
Leer base
Área ← (base*altura)/2
Escribir El valor del área
para el triángulo es:
Escribir área
FIN
real ← base, altura, área
Leer altura
Diagrama N-S:
INICIO
real ← base, altura, área
Leer base
Leer altura
Área (base*altura)/2
Escribir EL valor del área para el triángulo es:
Escribir área
FIN
Código en C++:
#includeiostream
using namespace std;
void main( )
{ 	 float base, altura, Area;
cout”Ingrese valor de la base: ”;
cinbase;
cout”n”;	 //Salto de línea
cout”Ingrese valor de la altura: ”;
cinaltura;
cout”n”;
Area = (base * altura) / 2;
cout”El valor del área para el triángulo es: ”;
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
20ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
coutArea;
cout”n”;
system(“PAUSE”);
}
2 	ESTRUCTURA BÁSICA SELECTIVA
Es una estructura que tiene un punto de decisión para realizar un conjunto de
acciones. Pueden ser:
• E. B. Selectiva Simple
• E. B. Selectiva Compuesta
• E. B. Selectiva Múltiple
a.	 Estructura Básica Selectiva Simple:
Se tiene un punto de decisión que evalúa una condición y si es Verdadero, ejecuta
un conjunto de Acciones.
Diagrama de Flujo:
INICIO
Lectura de datos
Acción 1
Acción n
Reporte de datos
FIN
Declaración de variables
Cond 1
Diagrama N-S:
INICIO
Declaración de variables
Lectura de datos
V cond 1 F
Acción 1
Acción 2
Acción n
Reporte de datos
FIN
F V
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
21Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
Ejemplo:
Sumar dos números enteros positivos c = a + b
Solución:
Leyenda de Datos
a: valor del primer número entero positivo
b: valor del segundo número entero positivo
c: valor del resultado la suma de dos números a y b
Diagrama de Flujo:
INICIO
Leer a, b
c ← a + b
Escribir El valor de la suma es: c
FIN
entero ← a,b,c
a  0  b  0
F V
Diagrama N-S:
INICIO
Entero ← a, b, c
Leer a, b
V a0  b0 F
c ← a + b
Escribir El valor la suma es:, c
FIN
Código C:
#includeiostream
using namespace std;
int main( )
{ 	 float a, b, c;
cout”Ingrese primer número: ”;
cina; cout”n”;
cout”Ingrese segundo número: ”;
cinb; cout”n”;
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
22ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
if (a0  b0)
{	 c = a + b;
cout”El valor la suma es: ”;
coutc;
cout”n”;
}
system(“PAUSE”);
return 0;
}
b. Estructura Básica Selectiva Compuesta:
Se tiene un punto de decisión que evalúa una condición y si es Verdadero, ejecuta
un conjunto de Acciones, y si es Falsa ejecuta otro conjunto de acciones.
Diagrama de Flujo:
INICIO
Lectura de datos
Acción 1Acción 2
Acción nAcción m
Reporte de datos
FIN
Declaración de variables
Cond 1
F V
Diagrama N-S:
INICIO
Declaración de variables
Lectura de datos
V cond 1 F
Acción 1 Acción 2
... ...
Acción n Acción m
Reporte de datos
FIN
Ejemplo:
Sumar dos números enteros si son positivos, sino multiplicarlos.
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
23Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
Solución:
Leyenda de Datos
a: valor del primer número entero positivo
b: valor del segundo número entero positivo
c: valor del resultado la suma de dos números a y b
Diagrama de Flujo:
INICIO
Leer a, b
c ← a + bc ← a * b
Escribir El valor de
la suma es: c
Escribir El valor de la
multiplicación es: c
FIN
entero ← a,b,c
a  0  b  0
F V
Diagrama N-S:
INICIO
Entero ← a, b, c
Leer a, b
V a0  b0 F
c ← a + b c ← a * b
Escribir El valor la suma es:, c Escribir El valor la multiplicación es:, c
FIN
Código C:
#includeiostream
using namespace std;
void main( )
{ 	 int a, b, c;
cout”Ingrese primer número: ”;
cina;
cout”n”;
cout”Ingrese segundo número: ”;
cinb;
cout”n”;
if(a0  b 0)
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
24ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
{	 c = a + b;
cout”El valor la suma es: ”;
coutc; cout”n”;
}
else
{	 c = a * b;
cout”El valor la multiplicacion es: ”;
coutc; cout”n”;
}
system(“PAUSE”);
}
c. Estructura Básica Selectiva Múltiple:
Se tiene un punto de decisión que evalúa más de dos alternativas para realizar un
conjunto de acciones.
Diagrama de Flujo:
INICIO
Lectura de datos
Acción 4
Reporte de datos
FIN
Declaración de variables
Cond 1
Acción 3
Acción m
Acción 1
Acción n
Acción 2
Acción m
Acción 4
Acción m
default
33
1
Diagrama N-S:
INICIO
Declaración de variables
Lectura de datos
1 2 3 cond 1 default
Acción 1 Acción 2 Acción 3 Acción 4
... ... ... ...
Acción n Acción m Acción m Acción m
Reporte de datos
FIN
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
25Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
Ejemplo:
Ingresa cinco números e imprime que vocal es.
Solución:
Leyenda de Datos
num: valor del número entero positivo
Diagrama de Flujo:
INICIO
Leer num.
Escribir
Vocal A
Escribir
Vocal A
Escribir
Vocal A
Escribir
Vocal A
Escribir
Vocal A
Escribir
Vocal A
FIN
entero ← num.
num default1
3 4 5
2
Diagrama N-S:
INICIO
Entero ← a, b, c
Leer a, b
1 2 3 4 5 num default
Escribir
Vocal A
Escribir
Vocal E
Escribir
Vocal I
Escribir
Vocal O
Escribir
Vocal U
Escribir No
es vocal 
FIN
Código C:
#includeiostream
using namespace std;
void main( )
{ int num;
cout”Ingrese número: ”;
cinnum;
switch(num)
{ case 1: cout”Vocal A”; break;
case 2: cout”Vocal E”; break;
case 3: cout”Vocal I”; break;
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
26ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
case 4: cout”Vocal O”; break;
case 5: cout”Vocal U”; break;
default: cout”No es numero para una vocal”;
}
system(“PAUSE”);
}
Existe una conformación de la Estructura Selectiva que ayuda en la elaboración de
programas:
Estructura Básica Selectiva Anidada: se evalúa una condición y si es Verdadero, eje-
cuta un nuevo punto de decisión y así sucesivamente, y si es Falsa ejecuta otro con-
junto de acciones.
Diagrama de Flujo:
INICIO
Lectura de datos
Reporte de datos
FIN
Declaración de variables
Cond 1
Cond 2
Acción 1
Acción n
Acción 2
Acción m
V
V
F
F
Diagrama N-S:
INICIO
Declaración de variables
Lectura de datos
F Cond 1 V
Acción 2 V Cond 2 F
... Acción 1
... ...
Acción m Acción n
Reporte de datos
FIN
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
27Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
Ejemplo:
Ingresar un número entero y si es positivo y diferente de cero, reportar si se encuen-
tra entre los diez primeros números.
Solución:
Leyenda de Datos
a: valor del número entero
Diagrama de Flujo:
INICIO
Leer a
Escribir
Primeros 10
Escribir Son mas
de los primeros l0
Escribir No
es un número
mayor que
cero
FIN
entero ← a
a  0
a  = 1  a 10
F
F
V
V
Diagrama N-S:
INICIO
Entero a
Leer a
F a  0 V
Escribir No es
un número mayor
que cero
F a = 1  a  10 V
Escribir Son mas de los
primeros 10
Escribir Primeros 10
FIN
Código C:
#includeiostream
using namespace std;
void main( )
{ int a;
cout”Ingrese número: ”;
cina;
if(a0)
	 if(a=1  a10)
		 cout”Primeros 10”;
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
28ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
	else
		 cout”Son más de los primeros 10”;
else
	 cout”No es un número mayor que cero”;
system(“PAUSE”);
}
3 	ESTRUCTURA BÁSICA REPETITIVA
Es una estructura permite repetir un conjunto de acciones dada una condición.
Pueden ser:
• E. B. Repetitiva Mientras
• E. B. Repetitiva Hacer-Mientras
• E. B. Repetitiva Para
a. Estructura Básica Repetitiva Mientras:
Primero evalúa una expresión condicional y si es verdadera permite realizar el con-
junto de acciones y regresa evaluar nuevamente la expresión condicional, hasta que
deje de cumplir (Falso).
Diagrama de Flujo:
INICIO
Lectura de datos
FIN
Declaración de variables
Cond 1
Acción 1
Acción n
V
F
Acción 2
Diagrama N-S:
INICIO
Declaración de variables
Lectura de datos
Cond 1
Acción 1
...
Acción n
Acción 2
Reporte de datos
FIN
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
29Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
Ejemplo:
Imprimir la serie Fibonacci, menor a un límite dado: 0,1,1,2,3,5,8,13,….
Diagrama de Flujo:
INICIO
Leer lim
Escribir a
Escribir b
FIN
entero ← lim, a=0, b=1, c
b=lim
c ← a + b
a ← b
V
F
b ← c
Diagrama N-S:
INICIO
entero ← min, a=0, b=1, c
Leer lim
Escribir a
b = lim
Escribir
c ← a + b
a ← b
b ← c
FIN
Código C:
#includeiostream
using nameaspace std;
void main( )
{ 	 int lim, a=0, b=1,c;
cout”Ingrese límite: ”;
cinlim;
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
30ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
couta;
while(b=lim)
{	 coutb;
		 c=a+b;
a=b;
		 b=c;
}
system(“PAUSE”);
}
b. Estructura Básica Repetitiva Hacer - Mientras
Realiza al menos una vez un conjunto de acciones, y luego evalúa una expresión
condicional, si es Verdadero regresa a repetir el conjunto de acciones, si no cum-
ple, termina la repetición.
Diagrama de Flujo:
INICIO
Lectura de datos
Reporte de Datos
FIN
Declaración de variables
Cond 1
Acción 1
Acción n
V
F
Acción 2
Diagrama N-S:
INICIO
Declaración de variables
Lectura de datos
Acción 1
...
Acción n
Cond 1
Acción 2
Reporte de datos
FIN
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
31Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
Ejemplo:
Leer un número entero mayor que cero, sino es así, volver a solicitar el número
con esas condiciones.
Diagrama de Flujo:
INICIO
Leer num
FIN
entero ← num
num = 0
V
F
Diagrama N-S:
INICIO
entero ← mun
Leer num
num = 0
FIN
Código C:
#includeiostream
using namespace std;
void main()
{ 	 int num;
	
do{	
cout” Ingrese un numero entero mayor a cero:	 “;
	 cinnum;
	 }while(num = 0);
system(“PAUSE”);
}
c. Estructura Básica Repetitiva Para:
Tambien conocida como Desde ó Por, permite repetir un conjunto de acciones, se-
cuencialmente hasta llegar a un límite dado; recorrido se realiza desde una variable
o índice de recorrido y avanza de uno en uno hasta llegar al límite.
Diagrama de Flujo:
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
32ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
INICIO
Lectura de datos
Reporte de Datos
FIN
Declaración de variables
Definir variables de recorrido y limite
Inicializar la variable de recorrido
Incrementar variable de recorrido
Variable es menor a limite
Acción 1
Acción n
V
F
Acción 2
Diagrama N-S:
INICIO
Declaración de variables
Lectura de datos
i = 0; i = limite; i ++
Acción 1
...
Acción n
Acción 2
Reporte de datos
FIN
Ejemplo:
Calcular el Factorial de un número (n!).
Diagrama de Flujo:
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
33Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
INICIO
Escribir  Ingrese numero para factorial
Escribir  El factorial es, p
Leer num
FIN
entero ← i, num, p = 1
i ← 1
i  = num
p ← p * i
i ++
V
F
Diagrama N-S:
INICIO
entero ← num i, p = 1
Leer num
i = 1; i = num; i ++
p ← p * i
Escribir el factorial es:
Escribir p
FIN
Código C:
#includeiostream
using namespace std;
void main( )
{ 	 int num, i, p=1;
cout”Ingrese numero para factorial: ”;
cinnum;
for(i=1;i=num; i++)
{ p = p * i;
}
cout”El factorial de ”n”es: ”p;
system(“PAUSE”);
}
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
34ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
Diagrama Objetivos Inicio
Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
ACTIVIDAD N° 1
Esta actividad puede consultarla en su aula virtual.
TEMA N° 4: MODULARIZACIÓN DE PROGRAMAS
1 	DEFINICIÓN DE MÓDULOS DE PROGRAMA
Imagine que está iniciando un negocio y no tiene colaboradores, y asume todas las
tareas para su funcionamiento: buscar proveedor, ofrecer y publicitar el producto o
servicio, estar involucrados en el proceso de transacción etc. Pero en alguna etapa
de crecimiento, asignamos estas tareas a otros colaboradores, quienes interactúan
entre sí, y al final le informan de su cumplimiento. Es lo mismo que pasa en la ela-
boración de módulos de programa.
Los Módulos de Programa (subprogramas) son partes separadas de código que
ejecutan tareas pequeñas de un módulo principal. El módulo es con un conjunto
de instrucciones precisas, independientes y reutilizables.
Para poder crear los módulos de programa, debe conocer las formas en que se pa-
san los datos de un módulo a otro, al ser invocados.
2 	PASO DE PARÁMETROS
Parámetros de entrada (valor)
Imagine nuevamente, que se hace un clon de su persona, todas las modificaciones
que haga sobre él (cambio de peinado, forma de vestir, aprendizaje de otro idioma)
no le afectaría a Ud. que es el dato original.
Es decir, se guarda en memoria una copia temporal de la variable, y dentro del
módulo solo se utiliza la copia para las modificaciones.
Parámetros de entrada/salida (referencia)
Ahora el ejemplo ya no es clonar a su persona, sino que es Ud. mismo, y donde sea
que se encuentre (o referencia de ubicación), las modificaciones que se realicen
siempre se mantendrán en Ud., por ser el dato original.
Es decir, los cambios que se efectúen sobre dicha variable dentro del procedimiento
se mantienen incluso después de que este haya terminado.
La siguiente figura muestra un programa, haciendo uso de los tipos de paso de
parámetros.
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
35Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
Figura Nro 6: Programa Ejemplo de Paso de Parámetros
(Elaboración personal)
Descripción:
-	En el programa se tienen dos módulos: el Principal: main (no olvide que siempre
debe existir) y el módulo f (que como programadores, estamos creando).
-	 En el módulo Principal se está declarando dos variables: x, y a las cuales se les está
asignando el valor de 1, a cada una respectivamente.
-	En el mismo módulo Principal se invoca al módulo f, al que se le envía los valores
de x, y: f(x,y) significa f(1,1);
-	Esa invocación permite que se desarrolle el módulo void f (int a, int b), es decir
la variable a, recibe el valor de la variable x y la variable b recibe el valor de la va-
riable y, por estar en un orden dentro del paréntesis.
-	La variable a, servirá para un paso de parámetros de entrada, y la variable b para
un paso de parámetros de entrada/salida por que lo acompaña el operador de
dirección  (para hacer referencia, es decir apuntar a la dirección de memoria de
la variable y)
-	Es decir, la variable a, recibe el valor de 1 proveniente de x, mientras que la varia-
ble b recibe la dirección de memoria (en base hexadecimal) de la variable y.
-	El módulo f, es independiente al módulo Principal, por lo que la declaración de
la variable a es de forma local, es decir las modificaciones o cambios de valores a
la variable a, solo es afectada en el módulo f, mientras que el valor original de x se
mantiene y no sufre los cambios que realice en la variable a.
-	Lo mismo ocurriría con la variable b, pero en este caso, b no es copia de y, sino
que invoca la dirección de memoria de y, por lo que los cambios que realice en b,
afecta directamente a y.
Se tiene dos tipos de módulos de programa: Procedimiento y Función.
3 	PROCEDIMIENTOS
Son módulos que se utilizan para elaborar un conjunto de instrucciones, indepen-
dientes y reutilizables, pero definiendo claramente el significado y utilidad de esa
porción de programa (cohesión).
Declaración en C/C++:
void NombreProcedimiento( )
void NombreProcedimiento (argumentos)
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
36ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
4 	FUNCIONES
Son módulos que tienen la misma definición de un procedimiento, pero con la
particularidad de que permite devolver UN valor en una variable.
Declaración en C/C++:
Tipo_dato NombreFunción( )
Tipo_dato NombreFunción(argumentos)
Nota:
-	 En la Función, el Tipo de dato que se escribe al declararla, debe ser el mismo tipo
de dato de la variable cuyo valor se devuelve (retorna)
-	En el Procedimiento, como no devuelve ningún valor, se escribe la palabra void,
que indica vació o sin especificar un tipo de dato.
-	Tanto en función y en procedimiento, se puede declarar con o sin argumentos,
es decir los argumentos son el envío de valores de variables a través de estos mó-
dulos y pueden ser paso de parámetros por entrada o paso de parámetros por
entrada/salida.
Pasamos a un ejemplo, simple en solucionar, pero el objetivo de este ejemplo es
crear y comparar el uso de Función, Procedimiento, con o sin argumentos.
Ejemplo: se tiene el siguiente programa simple para sumar dos números
//Programa Simple
#includeiostream
using namespace std;
void main()
{	 int a,b,c;
cout”Ingrese valor de a: t”;
cina;
cout”Ingrese valor de b: t”;
cinb;
c=a+b;
coutc; cout”n”;
system(“PAUSE”);
}
Es simple porque todas las instrucciones de programa para lograr sumar dos núme-
ros, es decir la entrada de datos en la variable a y b, el proceso de sumar y asignar
y la salida del resultado en la variable c, se están escribiendo solo en el Módulo
Principal main( )
A continuación se muestra la forma para crear un módulo llamado sumar, usando
la siguiente técnica: creando el módulo antes del módulo que lo invoca.
El desarrollo del programa se muestra con el uso Procedimiento con y sin argumen-
tos, y usando Función con y sin argumentos.
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
37Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
//Procedimientos con Argumentos: Ejemplo 1
#includeiostream
using namespace std;
void sumar(int a, int b)
{ int c;
c=a+b;
coutc; cout”n”;
}
void main()
{ int a,b;
cout”Ingrese valor de a: t”; cina;
cout”Ingrese valor de b: t”; cinb;
sumar(a,b);
system(“PAUSE”);
}
//Procedimientos sin Argumentos: Ejemplo 2
#includeiostream
using namespace std;
void sumar()
{ int a,b,c;
cout”Ingrese valor de a: t”; cina;
cout”Ingrese valor de b: t”; cinb;
c=a+b;
coutc;
}
void main()
{	 sumar( );
system(“PAUSE”);
}
Descripción:
-	En ambos casos, con o sin argumentos, el módulo sumar( ) está realzando exac-
tamente la tarea para la cual ha sido creada, es decir, sumar dos números.
-	Además, en el Módulo principal main( ), se invoca al módulo sumar ( ) exacta-
mente con su nombre, sin ayuda de ninguna otra variable, ya que no devuelve
ningún valor.
-	Pero, en ambos casos, la tarea de leer los valores de a y b, están siendo asumidos
en el primer caso por el módulo principal, o en el segundo caso, por el módulo
sumar. Esta tarea también será asumida por un módulo apropiado que permita
realizar la tarea de obtener los valores, sin recargar la responsabilidad de otros
módulos. (Se verá mas adelante)
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
38ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
//Funciones con Argumentos: Ejemplo1
#includeiostream
using namespace std;
int sumar(int a, int b)
{	 int c;
c=a+b;
return c;
}
void main()
{	 int sum,a,b;
cout”Ingrese valor de a: t”; cina;
cout”Ingrese valor de b: t”; cinb;
sum=sumar(a,b);
cout”Valor de la suma de a y b: “sum;
cout”n”;
system(“PAUSE”);
}
//Funciones sin Argumentos: Ejemplo 2
#includeiostream
using namespace std;
int sumar()
{	 int a,b,c;
cout”Ingrese valor de a: t”; cina;
cout”Ingrese valor de b: t”; cinb;
c=a+b;
return c;
}
void main()
{	 int sum;
sum=sumar();
cout”Valor de la suma de a y b: “sum;
cout”n”;
system(“PAUSE”);
}
Descripción:
-	En ambos casos, con o sin argumentos, el módulo sumar( ) está realzando exac-
tamente la tarea para la cual ha sido creada, es decir, sumar dos números.
-	El módulo sumar( ), está siendo declarado acompañado de un tipo de dato
entero: int, ya que es el mismo tipo de dato de la variable que está devolviendo
(return) en este caso, la variable c.
-	Por lo que, el módulo principal, al invocar al módulo sumar, debe recibir el va-
lor que se está devolviendo, y para esto se recomienda el uso de una variable que
reciba dicho valor, en el ejemplo la variable sum, la cual debe estar declarada
con el mismo tipo de dato de la variable que recibe.
-	De igual manera que en el ejemplo de Procedimientos, la tarea de leer los valo-
res de a y b, deben ser asumidos por un módulo apropiado.
Otra Manera de definir un Procedimiento y una Función, con o sin argumentos,
es con la técnica: declarar de manera global a la función o procedimiento, es
decir en la cabecera del programa, y luego desarrollar las instrucciones de la fun-
ción o procedimiento después del Módulo Principal.
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
39Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
//Procedimientos con Argumentos
#includeiostream
using namespace std;
void sumar(int a, int b);
int main()
{	 int a,b;
cout”Ingrese valor de a: t”; cina;
cout”Ingrese valor de b: t”; cinb;
sumar(a,b);
return 0;
}
void sumar(int a, int b)
{	 int c;
c=a+b;
coutc;
cout”n”;
}
//Funciones con Argumentos
#includeiostream
using namespace std;
int sumar(int a, int b);
void main()
{	 int sum,a,b;
cout”Ingrese valor de a: t”; cina;
cout”Ingrese valor de b: t”; cinb;
sum=sumar(a,b);
cout”Valor de la suma de a y b: “sum;
cout”n”;
}
int sumar(int a, int b)
{	 int c;
c=a+b;
return c;
}
Descripción:
-	El ejemplo anterior solo ha sido dado con Procedimientos y Funciones con ar-
gumentos, pero también puede darse sin argumentos.
-	En esta forma, el orden de creación de los módulos no es relevante, siempre y
cuando estén declarados de manera global en el programa.
Ejemplo:
Para repartir una herencia se tiene en cuenta: Si la cantidad de hijos es menor a
4, se repartirá exactamente entre el número de hijos; si son cuatro o más hijos, la
mitad le tocará al hermano mayor y el resto se dividirá entre los demás hermanos.
#includeiostream
using namespace std;
//procedimientos sin argumentos
void herencia()
{ float her,may;
int num;
cout”Ingresar importe de herencia n”;
cinher;
cout”Ingresar cantidad de hijos n”;
cinnum;
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
40ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
if(num4)
	 {	 her=her/num;
	 	 cout”Herencia a cada hijo es “her; 	
}
else
	 { may=her/2;
her=may/(num-1);
cout”nHerencia de hermano mayor es”may;
cout”nHerencia de cada hijo es “her;
}
}
void main( )
{	 herencia( );
system(“PAUSE”);
}
5 	LIBRERÍAS DE PROGRAMACIÓN CREADAS POR EL USUARIO
Al elaborar programas, además de crear módulos independientes y reutilizables en
el programa fuente, Ud. se verá en la necesidad de usar esos mismos módulos en
otros programas fuentes, diferentes entre sí, ya que el algoritmo que necesita son
los mismos para cada uno de ellos.
Existen librerías de cabecera (header, de alli la extensión “.h”), y algunas son pro-
pias del del lenguaje C como: iostream.h, math.h, conio.h, stdio.h, srting.h y otras
que pueden ser creadas por el programador, y ser invocadas en diferentes progra-
mas fuente (el programa con extensión “.cpp”) como parte de la reutilización de
código.
Ejemplo 1:
Leer un número entero diferente a cero, y si es positivo, reportar “El numero es
positivo”, caso contrario es negativo.
Solución:
- Crear la librería con extensión .h llamado lecturadato.h para crear la función de
lectura de datos enteros, llamada leedatoe( ).
lecturadato.h
#includeiostream
using namespace std;
int leedatoe()
{ int dato;
do{
	 cout”Ingrese valor del dato”;
	 cindato;
}while(dato==0);
return dato;	
}
- Crear el programa Ejemplo.cpp que invoca a la librería lecturadato.h, especifican-
do la ruta que se encuentre:
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
41Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
Ejemplo: cpp
#includeiostream
#include “c:programaslecturadato.h”
using namespace std;
void main()
{ int num;
num=leedatoe();
if(num0)
	 cout”El numero es positivo”;
else
cout”El numero es negativo”;
system(“PAUSE”);
}
Descripción:
-	 Al invocar a lecturadato.h, a través de su ruta de ubicación, permite usar las veces que se
requeira, al módulo leedatoe( ) que se encuentra ubicado dentro de librería creada.
-	Si se tiene otro programa con la extensión .cpp, puede también invocar a la libre-
ría lecturadato.h, sin ningún inconveniente.
-	Puede agregar otros módulos de lectura a la librería lecturadato.h, según el tipo
de dato que necesite.
-	Escribir la ruta de la librería se hace innecesaria por la ayuda que ofrece las inter-
faces de la herramienta de programación que ese esté usando.
Ejemplo: LecturaDatos.h
Figura Nro 7: Ejemplo de Librería LecturaDatos.h
(Elaboración personal)
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
42ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
RepartoHerencia.cpp
Figura Nro 8: Ejemplo de Programa Fuente RepartoHerencia.cpp
(Elaboración personal)
Descripción:
-	Como puede ver, en el programa fuente RepartoHerencia.cpp, se invoca al mó-
dulo leedatod( ) y leedatoe( ) para obtener los valores de monto de herencia y
cantidad de hijos respectivamente; dichos módulos están creados en la librería
LecturaDatos.h, que es invocada en el programa fuente.
-	 El módulo principal main( ) se debe escribir líneas abajo del programa fuente, y debe
invocar al módulo Herencia( ), como ya se ha explicado en el ejemplo anterior.
TEMA N° 6: FUNCIONES RECURSIVAS
En cierta ocasión en un aula de clase, pregunté si podían definir o dar un ejemplo de
recursividad, sorprendiéndome la respuesta de un estudiante: “Si yo tengo un apuro
económico, vendo mi reproductor de música, y atiendo ese apuro. Es decir, un recurso
que le pertenece a una entidad, es usada nuevamente por la misma entidad para buscar
una solución, eso es Recursividad”, finalizó.
1 	DEFINICIÓN DE RECURSIVIDAD
Entonces, se denominan funciones recursivas a aquellas que se invocan a sí mis-
mas en un programa, para desarrollar un determinado proceso.
Hay que tener algunas cosas en cuenta, en las funciones recursivas:
- Toda función recursiva debe tener algún punto de finalización o valor base.
- La función recursiva debe acercarse a ese punto de finalización o valor base.
(Eduardo Raffo Lecca, Turbo C++)
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
43Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
2 	RECURSIVIDAD DEL FACTORIAL
n!
4! = 4 * 3 * 2 * 1
4 * 3! → Es decir n*(n-1)!
	 3! = 3 * 2 * 1
	 3 * 2! → Es decir n*(n-1)!
		 2! = 2 * 1
			 2 * 1! → Es decir n*(n-1)!
			 1! = 1 * 0!
					 0! = 1 		
int factorial(int n)
{ if (n == 0)
return 1;
else
return n*factorial(n-1);
}
3 	RECURSIVIDAD DE LA MULTIPLICACIÓN
a * b
3 * 4 = 3 + 3 + 3 + 3
3 + (3 * 3)
	 3 * 3 = 3 + 3 + 3
	 3 + (3 * 2)
		 3 * 2 = 3 + 3
			 3 + (3 *1)
			 3 * 1 = 3
int multiplica(int a, int b)
{ if (a == 0 || b == 0)
	 return 0;
else
if (b == 1)
return a;
else
return a+multiplica(a,b-1);
}
4 	RECURSIVIDAD DE TORRES DE HANOI
Las restricciones para la recursividad de torres de hanoi, se expresan:
-	 Usar n discos para trasladarlos desde un poste origen, hacia un poste final, usando
un poste auxiliar.
-	 Por cierta cantidad de discos, hay una cantidad de movimientos, ni mas ni menos,
cant_movim = 2n
− 1.
-	 Los discos están dispuestos del tamaño grande al más pequeño. No puede estar un
disco grande sobre uno pequeño.
A continuación se tiene el algoritmo, puesto a prueba a través del Método del Ár-
bol, muy útil para comprobar la recursividad.
4! = 4 * 3 * 2 * 1
4 * 3!
	 3! = 3 * 2 * 1
	 3 * 2!
		 2! = 2 * 1
			 2 * 1!
			 1! = 1 * 0!
				 	 0! = 1
1 * 1 * 2 * 3 * 4 = 24
3 * 4 = 3 + 3 + 3 + 3
3 + (3 * 3)
	 3 * 3 = 3 + 3 + 3
	 3 + (3 * 2)
		 3 * 2 = 3 + 3
			 3 + (3 * 1)
			 3 * 1 = 3
3 + 3 + 3 + 3 = 12
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
44ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
Figura Nro 9: Ejemplo de Método del Árbol para Torres de Hanoi
(Elaboración personal)
Diagrama Objetivos Inicio
Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
ACTIVIDAD N° 2
Esta actividad puede consultarla en su aula virtual.
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
45Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
Diagrama Objetivos Inicio
Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
	LECTURA SELECCIONADA N° 1
INTRODUCCIÓN A LOS SUBALGORITMOS O SUBPROGRAMAS
Luis Joyanes Aguilar, 2008, Fundamentos de Programación. Pág. 202
Un método ya citado para solucionar un problema complejo es dividirlo en subproble-
mas –problemas más sencillos– y a continuación dividir estos subproblemas en otros
más simples, hasta que los problemas más pequeños sean fáciles de resolver. Esta técnica
de dividir el problema principal en subproblemas se suele denominar “divide y vence-
rás” (divide and conquer). Este método de diseñar la solución de un problema principal
obteniendo las soluciones de sus subproblemas se conoce como diseño descendente
(top-down design). Se denomina descendente, ya que se inicia en la parte superior
con un problema general y el diseño específico de las soluciones de los subproblemas.
Normalmente las partes en que se divide un programa deben poder desarrollarse inde-
pendientemente entre sí.
Las soluciones de un diseño descendente pueden implementarse fácilmente en lenguajes
de programación de alto nivel, como C/C++, Pascal o Fortran. Estas partes independientes
se denominan subprogramas o subalgoritmos si se empelan desde el concepto algorítmico.
La correspondencia entre el diseño descendente y la solución por computadora en
términos de programa principal y subprogramas se analizará a lo largo de este capítulo.
Consideremos el problema del cálculo de la superficie (área) de un rectángulo. Este
problema se puede dividir en tres subproblemas:
• Subproblema 1: Entrada de datos de altura y base.
• Subproblema 2: Cálculo de la superficie.
• Subproblema 3: Salida de resultados.
El algoritmo correspondiente que resuelve los tres subproblemas es:
Leer (altura, base) // entrada de datos
Área ← base * altura // cálculo de la superficie
Escribir (base, altura, área) // salida de resultados
El método descendente se muestra en la Figura:
Figura Nro 10: Diseño Descendente
(Fuente: Luis Joyanes Aguilar. Fundamentos de Programación)
El problema principal se soluciona por el correspondiente programa o algoritmo prin-
cipal – también llamado controlador o conductor (driver) – y la solución de los sub-
problemas mediante subprogramas, conocidos como procedimientos (subrutinas) o
funciones. Los subprogramas, cuando se tratan en lenguaje algorítmico, se denominan
también subalgoritmos.
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
46ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
Un subprograma puede realizar las mismas acciones que un programa: 1) aceptar datos,
2) realizar algunos cálculos, 3) devolver resultados. Un subprograma, sin embargo, se
utiliza por el programa para un propósito específico. El subprograma recibe datos des-
de el programa y le devuelve resultados. Haciendo un símil con una oficina, el problema
es como el jefe que da instrucciones a sus subordinados – subprogramas-; cuando la ta-
rea termina, el subordinado devuelve un resultado al jefe. Se dice que el programa prin-
cipal llama o invoca al subprograma. El subprograma ejecuta la tarea, a continuación
devuelve el control al programa. Eso puede suceder en diferentes lugares del programa.
Cada vez que el programa es llamado, el control retorna al lugar donde fue hecha la
llamada como muestra la siguiente figura (Figura 12). Un subprograma puede llamar a
su vez a sus propios subprogramas (Figura 13). Existen – como ya se ha comentado – dos
tipos importantes de subprogramas: funciones y procedimientos o subrutinas.
Figura Nro 11: Un programa con un subprograma: función y procedimiento
(Fuente: Luis Joyanes Aguilar. Fundamentos de Programación)
Figura Nro 12: Un programa con diferentes niveles de subprogramas
(Fuente: Luis Joyanes Aguilar. Fundamentos de Programación)
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
Diagrama Objetivos Inicio
Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
GLOSARIO DE LA UNIDAD I
Argumento: valores suministrados a un módulo de programa, al momento de ser invo-
cado.
Librería: es un archivo, que contiene código, usualmente en módulos de programa.
Que pueden ser reutilizados por diferentes proyectos de programa.
Programa fuente: algoritmo codificado en un lenguaje de programación, que adminis-
tra otros módulos de programa, y es necesario para la ejecución del programa.
String.h: librería del compilador, en este caso el C/C++, que permite usar el tipo de dato
del mismo nombre: string.
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
47Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
Objetivos Inicio
s
Actividades Autoevaluación
s
Glosario Bibliografía
o Anotaciones
	 AUTOEVALUACIÓN DE LA UNIDAD I
INSTRUCCIONES: Lee detenidamente y responde las siguientes preguntas:
1.	 Indique la alternativa que describa la característica “Ser Preciso” de un algoritmo:
a) Sólo se desarrollarán las tareas programadas y con los datos suministrados.
b) Las tareas desarrolladas deben permitir ponerlas a prueba antes de ejecutar.
c) Las tareas de un algoritmo tienen un orden de realización.
d) Se emplear los recursos necesarios para el desarrollo de las tareas.
e) Se debe expresar en una forma estándar, comúnmente aceptada.
2.	 El programa traductor denominado compilador realiza el siguiente flujo de trabajo.
a)	 Obtiene el programa fuente, genera el código objeto, lo enlaza al código máqui-
na y genera el programa ejecutable.
b)	 Obtiene el programa fuente, genera el código algoritmo, lo enlaza al código
máquina y genera el programa ejecutable.
c)	 Obtiene el programa fuente, genera el código objeto, lo enlaza al código fuente
y genera el programa ejecutable.
d)	 Obtiene el programa fuente, genera el código máquina, lo enlaza al código fuen-
te y genera el programa ejecutable.
e)	 Obtiene el programa fuente, genera el código algoritmo, lo enlaza al código
fuente y genera el programa ejecutable.
3.	 Dado el siguiente bloque de código que utiliza una estructura repetitiva, indique
que valores lógicos de la tabla de verdad (Verdadero=V y Falso=F) se necesita en la
condición, para que no solicite nuevamente el ingreso el valor:
a)	V,V.
do{
		 cout”Ingrese valor: ”;
		cinvalor;
}while(valor==’S’ || valor==’s’);
b)	F,V.
c)	V,F.
d)	F,F.
e)	FFV.
4.	 Indique la alternativa que presenta el orden de ejecución de la estructura repetitiva
Objetivos Inicio
os
Actividades Autoevaluación
s
Glosario Bibliografía
o Anotaciones
BIBLIOGRAFÍA DE LA UNIDAD I
Carrasco Loli Angela. Principios de Programación. Junio 2005
Joyanes Aguilar, Luis. Fundamentos de Programación. 4ta. ed. España: McGraw-Hill;
2008.
Raffo Lecca, Eduardo. Turbo C++. 1 ed. Lima: Mundigraph; 2000.
48ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
Para:
for( i = 0; i  n; i++)
{ accion 1;
acción m;
}
a)	 Inicializa la variable de recorrido, compara que esté dentro del límite, incre-
menta la variable, realiza las acciones, e inicia nuevamente el mismo orden de
ejecución.
b)	 Inicializa la variable de recorrido, compara que esté dentro del límite, realiza
las acciones, incrementa la variable e inicia nuevamente el mismo orden de
ejecución.
c)	 Inicializa la variable de recorrido, compara que esté dentro del límite, incremen-
ta la variable, realiza las acciones, y finaliza el orden de ejecución.
d)	 Inicializa la variable de recorrido, incrementa la variable, compara que esté dentro
del límite, realiza las acciones, e inicia nuevamente el mismo orden de ejecución.
e)	 Inicializa la variable de recorrido, decrementa la variable, compara que esté
dentro del límite, realiza las acciones, e inicia nuevamente el mismo orden de
ejecución.
5.	 Dado el siguiente bloque de código, indique el tipo de sentencia:
if(num  0)
if(num  30  num  60 )
coutpow(num,2);
a)	 Sentencia Repetitiva Para.
b)	 Sentencia Selectiva Compuesta.
c)	 Sentencia Repetitiva Hacer-Mientras.
d)	 Sentencia Selectiva Múltiple.
e)	 Sentencia Selectiva Anidada.
6.	 Indique la alternativa cuyo enunciado no es correcto:
a)	 Las funciones y procedimientos son módulos de programa.
b)	 Las funciones recursivas se invocan a sí mismas.
c)	 Sólo las funciones usan argumentos, los procedimientos no lo usan.
d)	 Los módulos son independientes y reutilizables.
e)	 Los pasos de parámetros son dos: por valor y por referencia.
7.	 Indique la alternativa que defina a “permite usar módulos independientes, en dife-
rentes programas”.
a)	 Función Recursiva.
b)	 Paso de Parámetros por valor.
c)	 Sentencias Repetitivas.
d)	 Librerías de programación.
e)	 Sentencias Selectivas.
8.	 Indique a que algoritmo recursivo, se refiere el siguiente módulo de programa:
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
49Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
int modulo(int a, int b)
{
if(b==0)
return 1;
else
return a*modulo(a,b-1);
}
a)	 Función Recursiva de la Multiplicación.
b)	 Función Recursiva del Factorial.
c)	 Función Recursiva de la Potencia.
d)	 Función Recursiva de Fibonacci.
e)	 Función Recursiva de Torres de Hanoi.
9.	 El paso de parámetros por valor, realiza el siguiente proceso:
a)	 Crea una variable original y las modificaciones afectan a la copia de la variable
original.
b)	 Crea una copia temporal de la variable y las modificaciones solo afectan a ésta
copia.
c)	 Crea un variable original y las modificaciones solo afectan a ésta.
d)	 Crea una copia temporal de la variable y las modificaciones afectan a la variable
original.
e)	 Crea una variable original y no tiene modificaciones.
10.	Indique la alternativa que indique la(s) variables(s) que sean paso de parámetros
por referencia.
void calcular(int x, int  y)
{	 int c;
	 c = x + y; coutc;
}
a)	 La variable “x”.
b)	 La variable “x” y la variable “y”.
c)	 La variable “y”.
d)	 La variable “c” y la variable “y”.
e)	 La variable “c”.
UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
50
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
51Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
Diagrama Objetivos Inicio
Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
Diagrama Objetivos Inicio
Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
DIAGRAMA DE PRESENTACIÓN DE LA UNIDAD
ORGANIZACIÒN DE LOS APRENDIZAJES
CONOCIMIENTOS PROCEDIMIENTOS ACTITUDES
Tema N° 1: Estructuras de
Datos
1. Definición de Estructura de
Datos
2.	Clasificación de Estructura
de Datos
Tema N° 2: Arreglos Unidi-
mensionales
1.	Definición de Arreglos Uni-
dimensionales
2.	Algoritmos de Actualiza-
ción
3.	Búsqueda de Arreglos Uni-
dimensionales
4. Ordenación de Arreglos
Unidimensionales
Tema N° 3: Arreglos Bidimen-
sionales
1.	Definición Arreglos Bidi-
mensionales
2.	Algoritmos de Actualiza-
ción de Arreglos Bidimen-
sionales
Lectura seleccionada N° 1
Arrays Multidimensionales –
Jesús Carretero Pérez. García
Carballena, Felix. Pérez Loba-
to José
Autoevaluación de la Unidad II
1.	Aplica los algoritmos de
actualización de arreglos
unidimensionales: añadir,
insertar, eliminar; en la
construcción de programas
2.	Aplica los algoritmos de
búsqueda y ordenación de
arreglos unidimensionales
en la construcción de pro-
gramas
3.	Aplica los algoritmos de
actualización de arreglos
bidimensionales en la cons-
trucción de programas
4.	Usa los algoritmos de ma-
triz transpuesta, diagonales,
rodean a un número; con
arreglos bidimensionales
Actividad N° 1
Elaboración de Programas usan-
do arreglos unidimensionales,
para casos propuestos
Actividad N° 2
Elaboración de Programas usan-
do arreglos bidimensionales,
para casos propuestos
Tarea Académica Nº 1
Construcción de Programas y
prueba de escritorio, usando
Arreglos
1.	Asume con responsabilidad
sus actividades académicas
asignadas
2.	Realiza con honestidad las
evaluaciones asignadas
CONTENIDOS
AUTOEVALUACIÓN
LECTURAS
SELECCIONADAS
BIBLIOGRAFÍA
ACTIVIDADES
52ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
TEMA N° 1: ESTRUCTURAS DE DATOS
1 	DEFINICIÓN DE ESTRUCTURA DE DATOS
Considere como ejemplo un librero, un espacio donde almacena libros en cada com-
partimiento (un solo tipo de dato: libro), o como a su oficina de trabajo, como un
espacio donde se almacenan elementos tales como expedientes, computadoras, gabi-
netes, personas, entre otros; es decir permite almacenar diferentes elementos (dife-
rentes tipos de datos). Entonces la estructura de datos, es aquel espacio que permite
almacenar valores, ya sean del mismo o de diferentes tipos de datos.
2 	CLASIFICACIÓN DE ESTRUCTURA DE DATOS
A.	 Estructuras de Datos Simples: permiten almacenar un solo valor en un espacio de
memoria (variable)
a.	Estructuras de Datos Estándar: es el almacenamiento que todos los lenguajes de
programación utilizan, dado el tipo de dato que se defina.
Por ejemplo, se tiene una estructura estándar de tipo real para una variable deno-
minada precio:
Declaración en C/C++: float precio;
Representación Gráfica en Memoria, asignándole el valor de precio de 12.6:
12.6
float precio
b.	Estructuras de Datos No Estándar: es la estructura que no pertenece a un lenguaje
de programación específico, y puede ser creado por el programador. En C/C++ se
definen con la palabra reservada typedef.
B.	 Estructuras de Datos Compuestas: permiten almacenar un conjunto de valores
(celdas o nodos) en un espacio de memoria. Pueden ser de dos tipos:
a.	Estructuras de Datos Estáticos: necesitan definir su tamaño inicial, antes de la eje-
cución del programa. Como ejemplo de este tipo de estructuras tenemos a los arre-
glos unidimensionales, arreglos bidimensionales y estructuras (registros).
Declaración de Arreglo Unidimensional en C/C++: char Mensaje[11];
Representación Gráfica en Memoria, asignándole un valor en cada celda:
UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
53Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
char Mensaje b i e n v e n i d o ` 0 ´
Declaración de Registro en C/C++:
struct Paciente{
int codPaciente;
string apePaciente;
string nombPaciente;
char generoPaciente;
};
Representación Gráfica en Memoria, asignándole un valor en cada celda:
b.	Estructuras de Datos Dinámicos: no necesita definir tamaño inicial, ya que los es-
pacios se van creando conforme se van ingresando los valores. Se tiene dos tipos:
lineal, por que nodos se crean uno tras otro (Ejemplo: lista, colas y pilas), y no
lineal, por que los nodos no necesariamente se encuentran uno tras otro (árbol y
grafo).
TEMA N° 2: ARREGLOS UNIDIMENSIONALES
1 	DEFINICIÓN DE ARREGLOS UNIDIMENSIONALES
También llamado vectores, es un conjunto finito y ordenado de elementos de un
mismo tipo de dato (homogéneos). La definición de un arreglo es como sigue:
			 TipoDato NombreArreglo[tamaño]
Ejemplo: 	 	 Entero 	 M[10]
Acceso a los elementos de un arreglo unidimensional:
Nombre del arreglo [posición del elemento];
Ejemplo: Gráfico de Arreglo Unidimensional
UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
54ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
23 45 34 19 62edad
edad[0]
0
edad[2]
2
edad[1]
1
edad[3]
3
edad[4]
4
Descripción:
- Nombre del arreglo: edad.
- Tamaño Máximo del arreglo (cantidad de celdas): 5
-	 Posición de cada celda: 0, 1, 2, 3, 4 (recorridos con la variable index: i , desde la
posición 0 hasta la posición del tamaño máximo -1)
- Elementos o valores dentro del arreglo, dada por cada celda: 23 en edad[0], 45 en
edad[1], 34 en edad[2], 19 en edad[3] y 62 en edad[4], es decir para leer, mostrar
u operar un valor del arreglo, escribe el nombre del arreglo y dentro de corchetes
la posición de la celda del arreglo.
El siguiente programa lee un arreglo de números enteros y encuentra el mayor y me-
nor elemento. El máx de elementos es 100 pero solo ingresa n elementos.
//Programa para hallar el mayor y menor elemento de un arreglo
#includeiostream
#include “LecturaDatos.h”
#define MAXIMO 100
using namespace std;
void leerarre(int N, int array[])
{ int i;
for(i=0;i=N-1;i++)
	 { coutIngrese altura alumno A[i]:t;
	 cinarray[i]; coutn; }
}
void comparar(int N, int array[])
{ int i, mayor, menor;
mayor=array[0];
menor=array[0];
for(i=0;i=N-1;i++)
	 { if (array[i]mayor)
		 mayor=array[i];
	 else
	 if (array[i]menor)
		 menor=array[i];	 }
coutEl mayor es :mayorn;
coutEl menor es :menorn;
}
void main()
{ int A[MAXIMO];
int n;
do{ coutIngrese cantidad de elementos (= a CERO y = que 100): ;
n=leedatoe();
}while(n=0 || nMAXIMO);
leerarre(n,A);
comparar(n,A);
system(PAUSE);
}
2 	ALGORITMOS DE ACTUALIZACIÓN
Los Arreglos necesitan actualizarse mientras se efectúa algún proceso con ellos. La
actualización de arreglos consiste en tres operaciones: Añadir elementos al final
del arreglo (siempre y cuando exista espacio en el arreglo), Insertar elementos en
UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
55Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
cualquier posición del arreglo y Eliminar elementos.
Añadir: Añadir un valor en la última posición.
#includeiostream
#include”LecturaDatos.h”
#define MAX 100
using namespace std;
void ingresadatos(int V[MAX], int n)
{ int i;
coutIngrese elementos para el arreglo ; coutn;
for(i=0;i=n-1;i++)
	 {	 coutElemento [i]:;
		 cinV[i]; }
}
void mostrar(int V[MAX], int n)
{	 int i;
	 coutLos elementos del arreglo son; coutn;
	 for(i=0;i=n-1;i++)
	 { coutElemento[i]:t;
coutV[i]; coutn; }
}
int ultimoelemento(int a[MAX], int n)
{ int i,p = n;
if (pMAX)
	 { for(i=p;i=n;i++) //ingresa nuevo elemento
		 { coutn Ingrese nuevo elemento de arreglo :t;
		 cina[i]; }
	 n=n+1;
	 return n; }
}
void main()
{	 int A[MAX];
int num,elem;
do{ coutIngrese numero de elementos para el arreglo: ;
		 num= leedatoee();
	 }while(num=0 || numMAX);
ingresadatos(A,num); coutn;
mostrar(A,num); coutn;
elem=ultimoelemento(A, num);
mostrar(A,elem);
system(PAUSE);
}
Insertar: Insertar un valor en cualquier posición, desplazando los elementos desde
la ultima celda hasta la posición que desea insertar.
#includeiostream
#include”LecturaDatos.h”
#define MAX 100
using namespace std;
void ingresadatos(int V[MAX], int n)
{	 int i;
	 coutIngrese elementos para el arreglo ; coutn;
UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
56ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
	 for(i=0;i=n-1;i++)
	 { coutElemento [i]:;
cinV[i]; }
}
void mostrar(int V[MAX], int n)
{	 int i;
	 coutLos elementos del arreglo son; coutn;
	 for(i=0;i=n-1;i++)
{ coutElemento[i]:t;
	 coutV[i]; coutn; }
}
int posicion(int a[MAX], int n)
{ int i,p;
coutn Ingrese posicion a insertar un elemento:t; p=leedatoe();
i=n-1;
while (i=p)
{	 a[i+1]=a[i];
	 i=i-1;
}
return p;
}
int nuevoelemento(int a[MAX],int p, int n)
{	 int elem;
	 coutn Ingrese nuevo elemento de arreglo a:t;
	 elem=leedatoe();
	 a[p]=elem;
	 n=n+1;
	 return n;	
}
void main()
{ 	 int A[MAX]; int num,pos,elem;
do{ coutIngrese numero de elementos para el arreglo: ;
		 num= leedatoee();
	 }while(num=0 || numMAX);
ingresadatos(A,num); coutn;
mostrar(A,num);
coutn;
pos=posicion(A,num);
elem=nuevoelemento(A,pos, num);
mostrar(A,elem);
system(PAUSE);
}
Eliminar: Eliminar un valor en cualquier posición, desplazando los elementos des-
de la derecha del valor que se quiere eliminar.
#includeiostream
#include”LecturaDatos.h”
#define MAX 100
using namespace std;
void ingresadatos(int V[MAX], int n)
{	 int i;
	 coutIngrese elementos para el arreglo ; coutn;
UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
57Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
	 for(i=0;in;i++)
	 { coutElemento [i]:;
		 cinV[i]; }
}
void mostrar(int V[MAX], int n)
{	 int i;
	 coutLos elementos del arreglo son; coutn;
	 for(i=0;in;i++)
	 { coutElemento[i]:t;
		 coutV[i]; coutn; }
}
int elimina(int a[MAX], int n)
{int i,p;
coutn Ingrese posicion a eliminar elemento de arreglo :t;
p=leedatoe();
i=p;
while (in)
{	 a[i]=a[i+1];
	 i++;
}
return n-1;
}
void main()
{	 int A[MAX]; int num,el;
do{ coutIngrese numero de elementos para el arreglo: ;
		 num= leedatoee();
	 }while(num=0 || numMAX);
ingresadatos(A,num); coutn;
mostrar(A,num); coutn;
el=elimina(A,num);
mostrar(A,el);
system(PAUSE);
}
3 	BÚSQUEDA DE ARREGLOS UNIDIMENSIONALES
La búsqueda es la recuperación de la información de los elementos de un arreglo.
Para ello se necesita recorrer el arreglo y hacer uso de uno de los métodos de bús-
queda de un elemento, revisaremos dos tipos: Búsqueda Secuencial y Búsqueda
Binaria.
A. Secuencial: recorre el arreglo celda por celda, verificando si es el elemento que
se busca, usando una bandera llamada Encontrado, el cual se asume como falsa, y
solo cambia a verdadera si encuentra el valor buscado, si terminado el recorrido en
el arreglo, no lo encuentra, la bandera se queda en el estado de falsa.
Es útil para arreglos con pocos elementos.
#includeiostream
#include”LecturaDatos.h”
#define MAX 100
using namespace std;
void ingresadatos(int V[MAX], int n)
{	 int i;
	 coutIngrese elementos para el arreglo ; coutn;
UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
58ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
	 for(i=0;in;i++)
	 { coutElemento [i]:;
		 cinV[i]; }
}
void mostrar(int V[MAX], int n)
{	 int i;
	 coutLos elementos del arreglo son; coutn;
	 for(i=0;in;i++)
	 { 	 coutElemento[i]:t;
		 coutV[i]; coutn; }
}
void bsecuencial(int a[MAX], int n)
{ int elem,i; bool Encontrado = false;
coutn Ingrese elemento a buscar en el arreglo :t; cinelem;
for(i=0;in;i++)
	 { if(a[i]==elem)
		 { Encontrado=true;
		 coutn Encontradot Posicion :titn;
		 }
	 }
if(Encontrado==false)
	 { coutn No Encontradot ; coutnn; }
}
void main()
{int A[MAX]; int num;
do{	 coutIngrese numero de elementos para el arreglo: ;
	 num= leedatoee();
}while(num=0 || numMAX);
ingresadatos(A,num); coutn;
mostrar(A,num); coutn;
bsecuencial(A,num);
system(PAUSE);
}
B. Búsqueda Binaria: Necesita que el arreglo se encuentre ordenado ascendente-
mente para poder aplicar este algoritmo, que consiste en dividir el arreglo en dos
partes y si la celda central es el elemento que se busca, termina el algoritmo, sino
se verifica si el elemento buscado se encuentra a la derecha (mayor) o la izquierda
(menor) del valor de la celda central, para solo buscar en esa porción del arreglo,
volvendo a dividira esa parte en dos, y buscar un nuevo valor central, repitiendo los
pasos anteriores.
#includeiostream
#include”LecturaDatos.h”
#define MAX 100
using namespace std;
void ingresadatos(int V[MAX], int n)
{	 int i;
	 coutIngrese elementos para el arreglo ;coutn;
	 for(i=1;i=n;i++)
	 { coutElemento [i]:;cinV[i]; }
}
void mostrar(int V[MAX], int n)
UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
59Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
{	 int i;
	 coutLos elementos del arreglo son; coutn;
	 for(i=1;i=n;i++)
	 { coutElemento[i]:t;coutV[i]; }
}
void bbinaria(int a[MAX], int n)
{	 int elem; int BAJO, ALTO, CENTRAL; 	 BAJO=1; ALTO=n;
	 coutn Ingrese elemento a buscar:t; cinelem;
	 CENTRAL=((BAJO+ALTO)/2);
	 while ((BAJO=ALTO)  (a[CENTRAL]!=elem))
		 { 	 if(elema[CENTRAL])
			 	 {ALTO=CENTRAL-1;
CENTRAL=(BAJO+ALTO)/2;
}
			 else{
				 BAJO=CENTRAL+1;
				 CENTRAL=(BAJO+ALTO)/2;
}
	 	 }
	 if(elem==a[CENTRAL])
{ coutn ENCONTRADO n;
coutn a[CENTRAL] = a[CENTRAL]; coutn;
}
	 else
coutn NO ENCONTRADO n ;
}
void main()
{int A[MAX]; int num;
do{	coutIngrese numero de elementos para el arreglo: ;
	 num= leedatoee();
}while(num=0 || numMAX);
ingresadatos(A,num); coutn;
mostrar(A,num); coutn;
bbinaria(A,num);
system(PAUSE);
}
4 	ORDENACIÓN DE ARREGLOS UNIDIMENSIONALES
Permite comparar elementos e intercambiar posiciones, ya sea en forma ascenden-
te o descendente.
//Ordenación por Burbuja
#includeiostream
#include”LecturaDatos.h”
#define MAX 100
using namespace std;
void ingresadatos(int V[MAX], int n)
{	 int i;
	 coutIngrese elementos para el arreglo ; coutn;
	 for(i=0;in;i++)
	 { coutElemento [i]:;
		 cinV[i]; }
UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
60ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
}
void mostrar(int V[MAX], int n)
{	 int i;
	 coutLos elementos del arreglo son; coutn;
	 for(i=0;in;i++)
	 { 	 coutElemento[i]:t;
		 coutV[i]; coutn; }
}
void burbuja(int a[MAX], int n)
{	 int i,j,temp;
	 for(i=0;in-1;i++)
		for(j=n-1;j=i+1;j--)
			 if (a[j]a[j-1])
		 	 {	 temp=a[j];
				 a[j]=a[j-1];
				 a[j-1]=temp;
		 	 }
}
void main()
{int A[MAX];
int num;
do{	 coutIngrese numero de elementos para el arreglo: ;
	 num= leedatoee();
}while(num=0 || numMAX);
ingresadatos(A,num); coutnn;
burbuja(A,num);
mostrar(A,num);
system(PAUSE);
}
Diagrama Objetivos Inicio
Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
ACTIVIDAD N° 1
Esta actividad puede consultarla en su aula virtual.
UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
61Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
TEMA N° 3: ARREGLOS BIDIMENSIONALES
1 	DEFINICIÓN DE ARREGLOS BIDIMENSIONALES.
También llamado matrices, es un conjunto finito y ordenado de elementos de un
mismo tipo de dato. La definición de un arreglo es como sigue:
TipoDato NombreMatriz[n°filas][nºcolumnas]
Ejemplo: 	 Entero 	 M[4][5]
//Lectura y Presentación de Datos en una Matriz:
#includeiostream
#include”LecturaDatos.h”
#define MAX 100
using namespace std;
void ingresadatos(int M[MAX][MAX], int nf,int nc)
{ int i,j;
coutIngrese elementos para la matriz ; coutn;
for(i=0;i=nf-1;i++)
for(j=0;j=nc-1;j++)
{ coutElemento [i][j]:;
cinM[i][j]; }
}
void mostrar(int M[MAX][MAX], int nf, int nc)
{ int i,j;
coutLos elementos de la matriz son; coutn;
for(i=0;i=nf-1;i++)
{for(j=0;j=nc-1;j++)
{ coutM[i][j]; coutt;
}
coutn;
}
}
void main()
{	 int B[MAX][MAX]; int nf,nc;
do{	 coutIngrese numero de filas: ;
		 nf= leedatoee();
}while(nf=0 || nfMAX);
do{	 coutIngrese numero de columnas: ;
		 nc= leedatoee();
}while(nc=0 || ncMAX);
ingresadatos(B,nf,nc); coutn;
mostrar(B,nf,nc); coutn;
}
UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
62ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
//Diagonal Principal y Diagonales de una matriz
….. //Se entiende que se realizan los procedimientos de lectura de datos
void diagonal_principal(int M[MAX][MAX], int nf, int nc)
{ int i,j;
if(nf==nc)
{ for(i=0;i=nf-1;i++)
{ for(j=0;j=nc-1;j++)
if(i==j)
{ coutn; coutM[i][j]n;
}
else
cout ;
coutn;
}
}
else
{coutColumnas y filas deben ser iguales; coutnn; }
}
void diagonalsecundaria(int M[MAX][MAX], int nf, int nc)
{ int i,j,k;
k=nc-1;
if(nf==nc)
{ for(i=0;inf;i++)
{ for(j=0;jnc;j++)
if(j == k)
{ coutM[i][j]; }
else
coutt;
k--;
coutn;
}
}
else
{ coutPara la Diagonales: columnas y filas deben ser
iguales; coutnn;
}
}
void diagonales(int M[MAX][MAX], int nf, int nc)
{ int i,j,k;
k=nc-1;
if(nf==nc)
{ for(i=0;i=nf-1;i++)
{ for(j=0;j=nc-1;j++)
if(i==j || j==k)
{ coutn; coutM[i][j]n; }
else
{cout ;}
k- -;
coutn;
}
}
UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
63Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
else
{ coutColumnas y filas deben ser iguales; coutnn; }
}
void main()
{ int B[MAX][MAX]; int nf,nc;
do{		 coutIngrese numero de filas: ;
		 nf= leedatoee();
}while(nf=0 || nfMAX);
do{		 coutIngrese numero de columnas: ;
		 nc= leedatoee();
}while(nc=0 || ncMAX);
ingresadatos(B,nf,nc); coutn;
mostrar(B,nf,nc); coutn;
coutLos elementos de la diagonal Principal: n;
diagonal_principal(B,nf,nc); coutn;
coutLos elementos de las diagonales : n;
diagonales(B,nf,nc); coutn; system(PAUSE);
}
2 	ALGORITMOS DE ACTUALIZACIÓN DE ARREGLOS BIDIMENSIONALES
//Insertar fila y columna de una matriz
… //Se entiende que se realizan los procedimientos de lectura de datos
int insertar_fila(int M[MAX][MAX], int nf, int nc)
{ int i,j,pos;
	 do{ coutIngrese posicion para insertar fila: ;
cinpos;
}while(pos0 || posnf);
for(i=nf-1;i=pos;i--)
for(j=0;j=nc-1;j++)
M[i+1][j]=M[i][j];
for(j=0;j=nc-1;j++)
{ coutM[pos][j] : ;
cinM[pos][j];
}
nf++;
return nf;
}
int insertar_columna(int M[MAX][MAX], int nf, int nc)
{int i,j,pos;
do{ coutIngrese posicion para insertar columna: ;
cinpos;
}while(pos0 || posnc);
for(i=0;i=nf-1;i++)
for(j=nc-1;j=pos;j--)
M[i][j+1]=M[i][j];
for(i=0;i=nf-1;i++)
{ coutM[i][pos] : ;
cinM[i][pos];
}
nc++;
return nc;
}
UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
64ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
void main()
{ int B[MAX][MAX];
int nf,nc,fil,col;
do{ coutIngrese numero de filas: ;
	 nf= leedatoee();
}while(nf=0 || nfMAX);
do{	 coutIngrese numero de columnas: ;
	 nc= leedatoee();
}while(nc=0 || ncMAX);
ingresadatos(B,nf,nc); coutn;
mostrar(B,nf,nc); coutn;
coutInserta fila: n;
fil=insertar_fila(B,nf,nc); coutn;
coutMatriz Inicial con fila insertada;
mostrar(B,fil,nc); coutn;
coutInserta columna: n;
col=insertar_columna(B,nf,nc); coutn;
coutMatriz Inicial con columna insertada;
mostrar(B,nf,col); coutn;
system(PAUSE);
}
//Borrar fila y columna de una matriz
… //Se entiende que se realizan los procedimientos de lectura de datos
int borrar_fila(int M[MAX][MAX], int nf, int nc)
{ int i,j,pos;
do{ coutIngrese posicion para borrar fila: ;
cinpos;
}while(pos0 || pos=nf);
for(i=pos;i=nf-1;i++)
for(j=0;j=nc-1;j++)
M[i][j]=M[i+1][j];
nf--;
return nf;
}
int borrar_columna(int M[MAX][MAX], int nf, int nc)
{ int i,j,pos;
do{ coutIngrese posicion para insertar columna: ;
cinpos;
}while(pos0 || pos=nc);
for(i=0;i=nf-1;i++)
for(j=pos;j=nc-1;j++)
M[i][j]=M[i][j+1];
nc- -;
return nc;
}
void main()
{ int B[MAX][MAX] nf,nc,fil,col;
do{ coutIngrese numero de filas: ;
	 nf= leedatoee();
}while(nf=0 || nfMAX);
do{	 coutIngrese numero de columnas: ;
UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
65Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
	 nc= leedatoee();
}while(nc=0 || ncMAX);
ingresadatos(B,nf,nc); coutn;
mostrar(B,nf,nc); coutn;
coutElimina fila: n;
fil=borrar_fila(B,nf,nc); coutn;
coutMatriz Inicial con fila eliminada;
mostrar(B,fil,nc); coutn;
coutElimina columna: n;
col=borrar_columna(B,nf,nc); coutn;
coutMatriz Inicial con columna eliminada;
mostrar(B,nf,col); coutn;
system(PAUSE);
}
Diagrama Objetivos Inicio
Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
ACTIVIDAD N° 2
Esta actividad puede consultarla en su aula virtual.
Diagrama Objetivos Inicio
Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
	LECTURA SELECCIONADA N° 1
ARRAYS MULTIDIMENSIONALES
Jesús Carretero Pérez. García Carballena, Felix. Pérez Lobato José, 2007,
Fundamentos de Programación. Pág. 196
Hasta ahora se ha trabajado con vectores de una única dimensión, llamados arrays uni-
dimensionales. Pero el lenguaje de programación C también permite definir arrays de
varias dimensiones.
Suponga que se desea almacenar las temperaturas de un punto geográfico durante un
año, minuto a minuto. Para este problema, se podría usar la siguiente definición: 		
float temperaturas [366][24][60];
En ella encontramos:
• Float es el tipo de dato de cada elemento.
• Temperaturas es el nombre de la variable utilizada para el array multidimensional;
• [366][24][60] indica el número de elementos del array en cada dimensión. La pri-
mera dimensión tiene un total de 366 elementos, la segunda 24 y la tercera 60. La
primera dimensión está junto al nombre de la variable.
Aunque el ejemplo presenta tres dimensiones, podrían definirse muchas más. Lo habi-
tual es usar dos y tres dimensiones. Si un array unidimensional se conoce como vector,
un array bidimensional se denomina matriz.
UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
66ollo
nidos
Actividades Autoevaluación
as
nadas
Glosario Bibliografía
torio Anotaciones
Inicialización y acceso a un array multidimensional
Considere ahora la siguiente definición de una matriz de 4 filas y 2 columnas:
	 int matriz[4][2];
Si se conocen los valores de la matriz, se puede inicializar de forma similar a un array:
int matriz[4][2]= {	 {11,12},
{21,22},
{31,32},
{41,42},
};
Para acceder al segundo elemento de la tercera fila se utiliza la siguiente expresión:
matriz[2][1]
Como se muestra en la figura 8.5, el índice de una dimensión toma valores de la misma
manera que lo hace un vector: desde cero hasta el número de elementos menos uno.
Distribución de los índices de una matriz.
Un array multidimensional también es descrito como un array de arrays de ...
Más concretamente, la variable matriz es un array de cuatro elementos.
matriz[0] ,…, matriz[3]
cuyos elementos son a su vez arrays de dos elementos cada uno
matriz[i][0] ,…, matriz[i][1] para i de 0 a 3.
En un array multidimensional de n dimensiones, los elementos de la última dimensión,
que forman un vector, se almacenan siempre en memoria consecutivamente.
En el caso de una matriz (n=2), esto significa que los valores se almacenan por filas, a di-
ferencia de otros lenguajes de programación como FORTRAN donde se almacenan por
columnas. En la siguiente figura se muestra de forma gráfica como todos los elementos
de una misma fila se almacenan consecutivamente.
Disposición de matriz en memoria.
UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
ALGORÍTMIA Y ESTRUCTURA DE DATOS
MANUAL AUTOFORMATIVO
67Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
Diagrama Objetivos Inicio
Desarrollo
de contenidos
Actividades Autoevaluación
Lecturas
seleccionadas
Glosario Bibliografía
Recordatorio Anotaciones
GLOSARIO DE LA AUNIDAD II
Celda: es un espacio de memoria dentro de un arreglo, y si es bidimensional es referen-
ciado por fila y columna que ocupe.
Dimensión: es el conjunto de elementos que puede tener un arreglo, y puede ser desde
una dimensión hasta n dimensiones.
Objetivos Inicio
os
Actividades Autoevaluación
s
Glosario Bibliografía
o Anotaciones
BIBLIOGRAFÍA DE LA UNIDAD II
Carretero Pérez, Jesús. García Carballena, Felix. Pérez Lobato José. Fundamentos de
Programación. 1ra. ed. España: Thomson; 2007.
Joyanes Aguilar, Luis. Fundamentos de Programación. 4ta. ed. España: McGraw-Hill;
2008.
Lazo Aguirre Walter, programaciòn estructurada en C. problemas resueltos. Universi-
dad Privada Antenor Orrego, 1995
Objetivos Inicio
s
Actividades Autoevaluación
s
Glosario Bibliografía
o Anotaciones
	 AUTOEVALUACIÓN DE LA UNIDAD II
INSTRUCCIONES: Lee detenidamente y responde las siguientes preguntas:
1. Indique la alternativa que describa la característica de una estructura de datos
estática:
a) Necesita definir los valores antes de ejecutar el programa.
b) No necesita definir un tamaño antes de ejecutar el programa.
c) Necesita mostrar los valores antes de ejecutar el programa.
d) Necesita definir un tamaño antes de ejecutar el programa.
e) Necesita definir un tamaño después de ejecutar el programa.
2. Los tipos de datos: entero, real, cadena; pertenecen a la siguiente clase de estructu-
ras de datos:
a) Estructuras de Datos Simple No Estándar.
b) Estructuras de Datos Compuesta Estática.
c) Estructuras de Datos Simple Estándar.
d) Estructuras de Datos Dinámica Lineal.
e) Estructuras de Datos Dinámica No Lineal.
3. Indique la alternativa que contenga tres características de un arreglo:
a) Homogéneo, Infinito, Secuencial.
b) Homogéneo, Finito, Secuencial.
c) Heterogéneo, Finito, Secuencial.
d) Heterogéneo, Infinito, Secuencial.
e) Homogéneo, Finito, No Secuencial.
4. En un arreglo unidimensional, se añade un elemento al final considerando:
a) Que se elimine el último elemento.
b) Que no importa que exceda el tamaño definido.
UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos
Algoritmia y Estructura de Datos

Más contenido relacionado

La actualidad más candente

Aplicacion de la integral
Aplicacion de la integralAplicacion de la integral
Aplicacion de la integralRAFA Ortega
 
Problemas Optimizacion
Problemas OptimizacionProblemas Optimizacion
Problemas Optimizacionmaricarmen2p
 
1.0 Introduccion Metodos Numericos
1.0 Introduccion Metodos Numericos1.0 Introduccion Metodos Numericos
1.0 Introduccion Metodos Numericosmorenito9001
 
Simplificación de funciones aplicando el Álgebra de Boole
Simplificación de funciones aplicando el Álgebra de BooleSimplificación de funciones aplicando el Álgebra de Boole
Simplificación de funciones aplicando el Álgebra de BooleDanilo Vivenes
 
Aplicaciones crecimiento poblacional Ecuaciones Diferenciales
Aplicaciones crecimiento poblacional Ecuaciones DiferencialesAplicaciones crecimiento poblacional Ecuaciones Diferenciales
Aplicaciones crecimiento poblacional Ecuaciones DiferencialesCindy Adriana Bohórquez Santana
 
Algoritmos Genéticos
Algoritmos GenéticosAlgoritmos Genéticos
Algoritmos GenéticosESCOM
 
DIFERENCIACIÓN E INTEGRACIÓN ANÁLISIS NUMÉRICO
DIFERENCIACIÓN E INTEGRACIÓN ANÁLISIS NUMÉRICO DIFERENCIACIÓN E INTEGRACIÓN ANÁLISIS NUMÉRICO
DIFERENCIACIÓN E INTEGRACIÓN ANÁLISIS NUMÉRICO DeysiEscobar
 
Ecuaciones diferenciales técnicas de solución y aplicación
Ecuaciones diferenciales técnicas de solución y aplicación Ecuaciones diferenciales técnicas de solución y aplicación
Ecuaciones diferenciales técnicas de solución y aplicación Juan Zon
 
Aplicaciones de Ecuaciones Diferenciales
Aplicaciones de Ecuaciones DiferencialesAplicaciones de Ecuaciones Diferenciales
Aplicaciones de Ecuaciones DiferencialesKevin Huarachi
 
matrices
matricesmatrices
matricesmsariv
 
Metodo de Integracion por Recurrencia Y Ecuacion de Bernoulli
Metodo de Integracion por Recurrencia Y Ecuacion de BernoulliMetodo de Integracion por Recurrencia Y Ecuacion de Bernoulli
Metodo de Integracion por Recurrencia Y Ecuacion de BernoulliFrancisco Xavier
 
Practica2 Algoritmo de cambio de base, de la division
Practica2 Algoritmo de cambio de base, de la divisionPractica2 Algoritmo de cambio de base, de la division
Practica2 Algoritmo de cambio de base, de la divisionIrvingg Kennedy Mcfly
 

La actualidad más candente (20)

8748382 funciones-de-varias-variables
8748382 funciones-de-varias-variables8748382 funciones-de-varias-variables
8748382 funciones-de-varias-variables
 
Primer informe de metodos numericos
Primer informe de metodos numericosPrimer informe de metodos numericos
Primer informe de metodos numericos
 
Aplicacion de la integral
Aplicacion de la integralAplicacion de la integral
Aplicacion de la integral
 
Problemas Optimizacion
Problemas OptimizacionProblemas Optimizacion
Problemas Optimizacion
 
UNIDAD 2 - CONJUNTOS Y RELACIONES.pdf
UNIDAD 2 - CONJUNTOS Y RELACIONES.pdfUNIDAD 2 - CONJUNTOS Y RELACIONES.pdf
UNIDAD 2 - CONJUNTOS Y RELACIONES.pdf
 
1.0 Introduccion Metodos Numericos
1.0 Introduccion Metodos Numericos1.0 Introduccion Metodos Numericos
1.0 Introduccion Metodos Numericos
 
PUNTO FIJO
PUNTO FIJOPUNTO FIJO
PUNTO FIJO
 
Simplificación de funciones aplicando el Álgebra de Boole
Simplificación de funciones aplicando el Álgebra de BooleSimplificación de funciones aplicando el Álgebra de Boole
Simplificación de funciones aplicando el Álgebra de Boole
 
Aplicaciones crecimiento poblacional Ecuaciones Diferenciales
Aplicaciones crecimiento poblacional Ecuaciones DiferencialesAplicaciones crecimiento poblacional Ecuaciones Diferenciales
Aplicaciones crecimiento poblacional Ecuaciones Diferenciales
 
Metodo de Runge Kutta en Matlab
Metodo de Runge Kutta en Matlab Metodo de Runge Kutta en Matlab
Metodo de Runge Kutta en Matlab
 
Algoritmos Genéticos
Algoritmos GenéticosAlgoritmos Genéticos
Algoritmos Genéticos
 
DIFERENCIACIÓN E INTEGRACIÓN ANÁLISIS NUMÉRICO
DIFERENCIACIÓN E INTEGRACIÓN ANÁLISIS NUMÉRICO DIFERENCIACIÓN E INTEGRACIÓN ANÁLISIS NUMÉRICO
DIFERENCIACIÓN E INTEGRACIÓN ANÁLISIS NUMÉRICO
 
Ecuaciones diferenciales técnicas de solución y aplicación
Ecuaciones diferenciales técnicas de solución y aplicación Ecuaciones diferenciales técnicas de solución y aplicación
Ecuaciones diferenciales técnicas de solución y aplicación
 
Metodos numericos con matlab
Metodos numericos con matlabMetodos numericos con matlab
Metodos numericos con matlab
 
Aplicaciones de Ecuaciones Diferenciales
Aplicaciones de Ecuaciones DiferencialesAplicaciones de Ecuaciones Diferenciales
Aplicaciones de Ecuaciones Diferenciales
 
EVALUACION DE ALGORTIMOS
EVALUACION DE ALGORTIMOSEVALUACION DE ALGORTIMOS
EVALUACION DE ALGORTIMOS
 
Examen t3 calculo 3 sanchez aguilar henry
Examen t3 calculo 3 sanchez aguilar henryExamen t3 calculo 3 sanchez aguilar henry
Examen t3 calculo 3 sanchez aguilar henry
 
matrices
matricesmatrices
matrices
 
Metodo de Integracion por Recurrencia Y Ecuacion de Bernoulli
Metodo de Integracion por Recurrencia Y Ecuacion de BernoulliMetodo de Integracion por Recurrencia Y Ecuacion de Bernoulli
Metodo de Integracion por Recurrencia Y Ecuacion de Bernoulli
 
Practica2 Algoritmo de cambio de base, de la division
Practica2 Algoritmo de cambio de base, de la divisionPractica2 Algoritmo de cambio de base, de la division
Practica2 Algoritmo de cambio de base, de la division
 

Similar a Algoritmia y Estructura de Datos

Rc jorge rivera
Rc jorge riveraRc jorge rivera
Rc jorge riveraJMRIVERA25
 
Diseño instruccional sistemas de información 1
Diseño instruccional sistemas de información 1Diseño instruccional sistemas de información 1
Diseño instruccional sistemas de información 1Diliam Gonzalez
 
Secme 25694 1
Secme 25694 1Secme 25694 1
Secme 25694 1FanyLpez3
 
Rc olga chaparro
Rc olga chaparroRc olga chaparro
Rc olga chaparroOlga Lu
 
Rc jorge gomez
Rc jorge gomezRc jorge gomez
Rc jorge gomezjorge3621
 
Rc jorge gomez
Rc jorge gomezRc jorge gomez
Rc jorge gomezjorge3621
 
Programación del curso - Estructura de Datos I
Programación del curso - Estructura de Datos IProgramación del curso - Estructura de Datos I
Programación del curso - Estructura de Datos IYessenia I. Martínez M.
 
Silabo 2018-I de SIG Para la Toma de Decisiones
Silabo 2018-I de SIG Para la Toma de DecisionesSilabo 2018-I de SIG Para la Toma de Decisiones
Silabo 2018-I de SIG Para la Toma de DecisionesMitzi Linares Vizcarra
 
Estructura silvia
Estructura silviaEstructura silvia
Estructura silviaSilvia Mera
 
Sílabo (Administración de Base de Datos)
Sílabo (Administración de Base de Datos)Sílabo (Administración de Base de Datos)
Sílabo (Administración de Base de Datos)UTN
 
Introducción a la ing. informática y de sistemas
Introducción a la ing. informática y de sistemasIntroducción a la ing. informática y de sistemas
Introducción a la ing. informática y de sistemasJorge Pariasca
 
Temas de exposiciones teoria de sistemas
Temas de exposiciones teoria de sistemasTemas de exposiciones teoria de sistemas
Temas de exposiciones teoria de sistemasOswaldo Hechenleitner
 

Similar a Algoritmia y Estructura de Datos (20)

Rc jorge rivera
Rc jorge riveraRc jorge rivera
Rc jorge rivera
 
Diseño instruccional sistemas de información 1
Diseño instruccional sistemas de información 1Diseño instruccional sistemas de información 1
Diseño instruccional sistemas de información 1
 
Guía de estudio -Módulo 1
Guía de estudio -Módulo 1Guía de estudio -Módulo 1
Guía de estudio -Módulo 1
 
Rc ivan salcedo
Rc ivan salcedoRc ivan salcedo
Rc ivan salcedo
 
Secme 25694 1
Secme 25694 1Secme 25694 1
Secme 25694 1
 
Rc olga chaparro
Rc olga chaparroRc olga chaparro
Rc olga chaparro
 
Rc jorge gomez
Rc jorge gomezRc jorge gomez
Rc jorge gomez
 
Rc jorge gomez
Rc jorge gomezRc jorge gomez
Rc jorge gomez
 
Syllabus sig
Syllabus sigSyllabus sig
Syllabus sig
 
Programación del curso - Estructura de Datos I
Programación del curso - Estructura de Datos IProgramación del curso - Estructura de Datos I
Programación del curso - Estructura de Datos I
 
Silabo 2018-I de SIG Para la Toma de Decisiones
Silabo 2018-I de SIG Para la Toma de DecisionesSilabo 2018-I de SIG Para la Toma de Decisiones
Silabo 2018-I de SIG Para la Toma de Decisiones
 
Estructura silvia
Estructura silviaEstructura silvia
Estructura silvia
 
Sílabo (Administración de Base de Datos)
Sílabo (Administración de Base de Datos)Sílabo (Administración de Base de Datos)
Sílabo (Administración de Base de Datos)
 
Rc juan vargas
Rc juan vargasRc juan vargas
Rc juan vargas
 
Estructura de Datos - Instrumentación Didáctica
Estructura de Datos - Instrumentación DidácticaEstructura de Datos - Instrumentación Didáctica
Estructura de Datos - Instrumentación Didáctica
 
Introducción a la ing. informática y de sistemas
Introducción a la ing. informática y de sistemasIntroducción a la ing. informática y de sistemas
Introducción a la ing. informática y de sistemas
 
z.Tema1BBDD.pdf
z.Tema1BBDD.pdfz.Tema1BBDD.pdf
z.Tema1BBDD.pdf
 
trabajo1
trabajo1trabajo1
trabajo1
 
Temas de exposiciones teoria de sistemas
Temas de exposiciones teoria de sistemasTemas de exposiciones teoria de sistemas
Temas de exposiciones teoria de sistemas
 
03 os1 sistemas operativos
03 os1 sistemas operativos03 os1 sistemas operativos
03 os1 sistemas operativos
 

Último

Sistema de lubricación para motores de combustión interna
Sistema de lubricación para motores de combustión internaSistema de lubricación para motores de combustión interna
Sistema de lubricación para motores de combustión internamengual57
 
Six Sigma Process and the dmaic metodo process
Six Sigma Process and the dmaic metodo processSix Sigma Process and the dmaic metodo process
Six Sigma Process and the dmaic metodo processbarom
 
MODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdf
MODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdfMODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdf
MODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdfvladimirpaucarmontes
 
Gestion de proyectos para el control y seguimiento
Gestion de proyectos para el control  y seguimientoGestion de proyectos para el control  y seguimiento
Gestion de proyectos para el control y seguimientoMaxanMonplesi
 
libro de ingeniería de petróleos y operaciones
libro de ingeniería de petróleos y operacioneslibro de ingeniería de petróleos y operaciones
libro de ingeniería de petróleos y operacionesRamon Bartolozzi
 
CALCULO SISTEMA DE PUESTA A TIERRA PARA BAJA TENSION Y MEDIA TENSION
CALCULO SISTEMA DE PUESTA A TIERRA PARA BAJA TENSION Y MEDIA TENSIONCALCULO SISTEMA DE PUESTA A TIERRA PARA BAJA TENSION Y MEDIA TENSION
CALCULO SISTEMA DE PUESTA A TIERRA PARA BAJA TENSION Y MEDIA TENSIONJuan Carlos Meza Molina
 
Maquinaria Agricola utilizada en la produccion de Piña.pdf
Maquinaria Agricola utilizada en la produccion de Piña.pdfMaquinaria Agricola utilizada en la produccion de Piña.pdf
Maquinaria Agricola utilizada en la produccion de Piña.pdfdanielJAlejosC
 
2. Cristaloquimica. ingenieria geologica
2. Cristaloquimica. ingenieria geologica2. Cristaloquimica. ingenieria geologica
2. Cristaloquimica. ingenieria geologicaJUDITHYEMELINHUARIPA
 
Desigualdades e inecuaciones-convertido.pdf
Desigualdades e inecuaciones-convertido.pdfDesigualdades e inecuaciones-convertido.pdf
Desigualdades e inecuaciones-convertido.pdfRonaldLozano11
 
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023RonaldoPaucarMontes
 
Propuesta para la creación de un Centro de Innovación para la Refundación ...
Propuesta para la creación de un Centro de Innovación para la Refundación ...Propuesta para la creación de un Centro de Innovación para la Refundación ...
Propuesta para la creación de un Centro de Innovación para la Refundación ...Dr. Edwin Hernandez
 
analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)
analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)
analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)Ricardo705519
 
4º Clase Laboratorio (2024) Completo Mezclas Asfalticas Caliente (1).pdf
4º Clase Laboratorio (2024) Completo Mezclas Asfalticas Caliente (1).pdf4º Clase Laboratorio (2024) Completo Mezclas Asfalticas Caliente (1).pdf
4º Clase Laboratorio (2024) Completo Mezclas Asfalticas Caliente (1).pdfnicolascastaneda8
 
Herramientas de la productividad - Revit
Herramientas de la productividad - RevitHerramientas de la productividad - Revit
Herramientas de la productividad - RevitDiegoAlonsoCastroLup1
 
Ficha Tecnica de Ladrillos de Tabique de diferentes modelos
Ficha Tecnica de Ladrillos de Tabique de diferentes modelosFicha Tecnica de Ladrillos de Tabique de diferentes modelos
Ficha Tecnica de Ladrillos de Tabique de diferentes modelosRamiroCruzSalazar
 
ATS-FORMATO cara.pdf PARA TRABAJO SEGURO
ATS-FORMATO cara.pdf  PARA TRABAJO SEGUROATS-FORMATO cara.pdf  PARA TRABAJO SEGURO
ATS-FORMATO cara.pdf PARA TRABAJO SEGUROalejandrocrisostomo2
 
tesis maíz univesidad catolica santa maria
tesis maíz univesidad catolica santa mariatesis maíz univesidad catolica santa maria
tesis maíz univesidad catolica santa mariasusafy7
 
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.ppt
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.pptTippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.ppt
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.pptNombre Apellidos
 
Controladores Lógicos Programables Usos y Ventajas
Controladores Lógicos Programables Usos y VentajasControladores Lógicos Programables Usos y Ventajas
Controladores Lógicos Programables Usos y Ventajasjuanprv
 

Último (20)

Sistema de lubricación para motores de combustión interna
Sistema de lubricación para motores de combustión internaSistema de lubricación para motores de combustión interna
Sistema de lubricación para motores de combustión interna
 
Six Sigma Process and the dmaic metodo process
Six Sigma Process and the dmaic metodo processSix Sigma Process and the dmaic metodo process
Six Sigma Process and the dmaic metodo process
 
MODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdf
MODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdfMODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdf
MODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdf
 
Gestion de proyectos para el control y seguimiento
Gestion de proyectos para el control  y seguimientoGestion de proyectos para el control  y seguimiento
Gestion de proyectos para el control y seguimiento
 
libro de ingeniería de petróleos y operaciones
libro de ingeniería de petróleos y operacioneslibro de ingeniería de petróleos y operaciones
libro de ingeniería de petróleos y operaciones
 
CALCULO SISTEMA DE PUESTA A TIERRA PARA BAJA TENSION Y MEDIA TENSION
CALCULO SISTEMA DE PUESTA A TIERRA PARA BAJA TENSION Y MEDIA TENSIONCALCULO SISTEMA DE PUESTA A TIERRA PARA BAJA TENSION Y MEDIA TENSION
CALCULO SISTEMA DE PUESTA A TIERRA PARA BAJA TENSION Y MEDIA TENSION
 
Maquinaria Agricola utilizada en la produccion de Piña.pdf
Maquinaria Agricola utilizada en la produccion de Piña.pdfMaquinaria Agricola utilizada en la produccion de Piña.pdf
Maquinaria Agricola utilizada en la produccion de Piña.pdf
 
2. Cristaloquimica. ingenieria geologica
2. Cristaloquimica. ingenieria geologica2. Cristaloquimica. ingenieria geologica
2. Cristaloquimica. ingenieria geologica
 
Desigualdades e inecuaciones-convertido.pdf
Desigualdades e inecuaciones-convertido.pdfDesigualdades e inecuaciones-convertido.pdf
Desigualdades e inecuaciones-convertido.pdf
 
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
 
Propuesta para la creación de un Centro de Innovación para la Refundación ...
Propuesta para la creación de un Centro de Innovación para la Refundación ...Propuesta para la creación de un Centro de Innovación para la Refundación ...
Propuesta para la creación de un Centro de Innovación para la Refundación ...
 
analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)
analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)
analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)
 
4º Clase Laboratorio (2024) Completo Mezclas Asfalticas Caliente (1).pdf
4º Clase Laboratorio (2024) Completo Mezclas Asfalticas Caliente (1).pdf4º Clase Laboratorio (2024) Completo Mezclas Asfalticas Caliente (1).pdf
4º Clase Laboratorio (2024) Completo Mezclas Asfalticas Caliente (1).pdf
 
413924447-Clasificacion-de-Inventarios-ABC-ppt.ppt
413924447-Clasificacion-de-Inventarios-ABC-ppt.ppt413924447-Clasificacion-de-Inventarios-ABC-ppt.ppt
413924447-Clasificacion-de-Inventarios-ABC-ppt.ppt
 
Herramientas de la productividad - Revit
Herramientas de la productividad - RevitHerramientas de la productividad - Revit
Herramientas de la productividad - Revit
 
Ficha Tecnica de Ladrillos de Tabique de diferentes modelos
Ficha Tecnica de Ladrillos de Tabique de diferentes modelosFicha Tecnica de Ladrillos de Tabique de diferentes modelos
Ficha Tecnica de Ladrillos de Tabique de diferentes modelos
 
ATS-FORMATO cara.pdf PARA TRABAJO SEGURO
ATS-FORMATO cara.pdf  PARA TRABAJO SEGUROATS-FORMATO cara.pdf  PARA TRABAJO SEGURO
ATS-FORMATO cara.pdf PARA TRABAJO SEGURO
 
tesis maíz univesidad catolica santa maria
tesis maíz univesidad catolica santa mariatesis maíz univesidad catolica santa maria
tesis maíz univesidad catolica santa maria
 
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.ppt
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.pptTippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.ppt
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.ppt
 
Controladores Lógicos Programables Usos y Ventajas
Controladores Lógicos Programables Usos y VentajasControladores Lógicos Programables Usos y Ventajas
Controladores Lógicos Programables Usos y Ventajas
 

Algoritmia y Estructura de Datos

  • 1. Carol Roxana Rojas Moreno ALGORÍTMIA Y ESTRUCTURA DE DATOS
  • 2. Cada autor es responsable del contenido de su propio texto. De esta edición: © Universidad Continental S.A.C 2012 Jr. Junin 355, Miraflores, Lima-18 Teléfono: 213 2760 Derechos reservados Primera Edición: Noviembre 2013 Tiraje: 500 ejemplares Autor: Carol Roxana Rojas Moreno Oficina de Producción de Contenidos y Recursos Impreso en el Perú - Rebelars S.A.C Jr. Los Bosques 555 - El Tambo - Huancayo Fondo Editorial de la Universidad Continental Todos los derechos reservados. Esta publicación no puede ser reproducida, en todo ni en parte, ni registrada en o trasmitida por un sistema de recuperación de información, en ninguna forma ni por ningún medio sea mecánico, fotoquímico, electrónico, magnético, electroóptico, por fotocopia, o cualquier otro sin el permiso previo por escrito de la Universidad.
  • 3. INTRODUCCIÓN 9 DIAGRAMA DE PRESENTACIÓN DE LA ASIGNATURA 11 UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA 13 DIAGRAMA DE PRESENTACIÓN DE LA UNIDAD i Tema N° 1: Algoritmo 1 Definición del algoritmo 14 2 Características de un algoritmo 17 3 Instrucciones algorítmicas básicas 17 4 Representación del algoritmo 18 Tema N° 2: Programación Estructurada 1 Programa 26 2 Lenguaje de programación 27 3 Programas traductores 28 4 Definición programación estructurada 29 Tema N° 3: Sentencias Básicas de Programación 1 Estructura básica secuencial 31 2 Estructura básica selectiva 31 3 Estructura básica repetitiva 32 ACTIVIDAD N°1 34 Tema N° 4: Modularización de Programas 1 Definición de módulos de programa 34 2 Paso de Parámetros 34 3 Procedimientos 35 4 Funciones 36 5 Librerías de programación creadas por el usuario 40 Tema N° 5: Funciones Recursivas 1 Definición de recursividad 42 2 Recursividad de factorial 43 3 Recursividad de la multiplicación 43 4 Recursividad de torres de hanoi 43 ACTIVIDAD N°2 44 Lectura seleccionada N°1 45 GLOSARIO de la unidad i 46
  • 4. BIBLIOGRAFÍA DE LA UNIDAD I 47 Autoevaluación DE LA UNIDAD i 47 UNIDAD II: ESTRUCTURA DE DATOS ESTÁTICAS 51 DIAGRAMA DE PRESENTACIÓN DE LA UNIDAD ii TEMA 1: Estructuras de Datos 1 Definición de estructura de datos 52 2 Clasificación de estructura de datos 52 Tema N° 2: Arreglos Unidimensionales 1 Definición de arreglos unidimensionales 53 2 Algoritmos de actualización 54 3 Búsqueda de arreglos unidimensionales 57 4 Ordenación de arreglos unidimensionales 59 ACTIVIDAD N°1 60 Tema N° 3: Arreglos Bidimensionales 1 Definición de arreglos bidimensionales 61 2 Algoritmos de actualización de arreglos bidimensionales 63 ACTIVIDAD N°2 65 Lectura seleccionada n° 1 65 GLOSARIO de la unidad ii 67 Bibliografía de la unidad ii 67 Autoevaluación de la unidad ii 67 UNIDAD III: ESTRUCTURAS DE DATOS DINÁMICA LINEAL 71 DIAGRAMA DE PRESENTACIÓN DE LA UNIDAD iii Tema N° 1: Registro (Estructura) y Unión 1 Definición de registro (estructura) 72 2 Módulos y estructuras 74 3 Invocación de una estructura en otra 75 4 Definición de unión: ejemplo práctico 76 Tema N° 2: Tipos de Datos Abstractos (TDA) 1 Definición de TDA 77 2 Clases y programación orientada a objetos 78
  • 5. Tema N° 3: Puntero a Dirección de Memoria 1 Definición de puntero a dirección de memoria 80 2 Creación y eliminación de variables dinámicas 82 ACTIVIDAD N°1 83 Tema N° 4: Estructuras de Datos Dinámicas Lineal 1 Listas enlazadas: simple, doble, circular 84 2 Colas y pilas 90 ACTIVIDAD N°2 95 Lecturas seleccionada n° 1 95 GLOSARIO de la unidad iii 97 Bibliografía de la unidad iii 97 Autoevaluación de la unidad iii 97 UNIDAD IV: ESTRUCTURAS DE DATOS DINÁMICA NO LINEAL 101 DIAGRAMA DE PRESENTACIÓN DE LA UNIDAD iv Tema N° 1: Árbol y Grafo 1 Árbol General: Conceptos básicos y algoritmos de manipulación 102 2 Árbol binario: recorridos: preorden, inorden, postorden 106 3 Árboles binarios de búsqueda ( abb ) 107 4 Grafos: Conceptos y algoritmos de manipulación 111 ACTIVIDAD N°1 118 Tema N° 2: Archivo (Fichero) 1 Archivo: conceptos y algoritmos de manipulación 119 ACTIVIDAD N°2 121 Lecturas seleccionada n° 1 122 GLOSARIO de la unidad iv 123 Bibliografía Y DIRECCIONES ELECTRÓNICAS 123 Autoevaluación de la unidad iv 124 ANEXO Clave de respuesta de Autoevaluaciones 127
  • 6.
  • 7. INTRODUCCIÓN A lgoritmia y Estructura de Datos es una asignatura que se desarrolla con una modalidad de educación virtual, y el presente manual autoformativo es su material di- dáctico más importante. Esta asignatura tiene como finalidad proporcionar al estudian- te, los conocimientos necesarios en las técnicas y estructuras de datos para iniciarse en la programación asistida por un compu- tador y basado en el enfoque estructurado, requeridos en su formación básica para poder desarrollar programas en otros niveles más avanzados. La competencia a desarrollar es: Construye algoritmos en un lenguaje de programación, utilizando las sentencias básicas de programación, diferenciando su uso para la propuesta de solu- ción de un problema, y con ello construye programas computa- cionales utilizando módulos de programa (funciones y procedi- mientos), valorando la reutilización de los módulo, y utilizando las diferentes estructuras de datos: estáticas y dinámicas para almacenar datos temporalmente, diferenciando el uso de las estructuras con respecto al uso de los archivos como almacena- miento de datos permanente, promoviendo el interés por otras técnicas de almacenamiento. El presente material consta de cuatro unidades: Unidad I: Algo- ritmos y Programación Estructurada, que presenta conceptos, representaciones y programación del algoritmo, con sus técni- cas: Sentencias Básicas de Programación: Secuenciales, Selecti- vas y Repetitivas y la Modularización en la Programación Estruc- turada, es decir, se puede dividir a un programa complejo, en segmentos de programa mas simples (Modularización), y poder ser reutilizados en otros programas, a través del uso de funcio- nes y procedimientos, y en algunos casos usando el concepto de recursividad. Unidad II: Estructuras de Datos Estáticas, pre- sentando los algoritmos de creación y actualización de Arreglos Unidimensionales y Bidimensionales, Unidad III: Estructuras de Datos Dinámica Lineal, donde se expone las formas de alma- cenamiento temporal de datos a través estructuras listas, pilas, cola. Unidad IV: Estructuras de Datos Dinámica No Lineal, en esta última unidad, se exponen otras formas de almacenamien- to de datos como árboles, grafos, archivos. Para el estudio del manual y la ejecución de las actividades, se recomienda para cada unidad: • Realizar el estudio de los contenidos. Esta lectura será ana- lítica y reflexiva subrayando, resumiendo y asimilando la in- formación. • Pasar al estudio de las lecturas seleccionadas, que son de estudio de profundización o ampliación. • Desarrollar las actividades programadas para cada semana en el aula virtual y asistidas por un lenguaje de programa- ción, con la asesoría del Profesor Tutor. • Desarrollar la auto evaluación, que es una preparación para la prueba final de la asignatura. .
  • 8. 8
  • 9. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 9Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones COMPETENCIA DE LA ASIGNATURA Construye algoritmos en un lenguaje de programación, utilizando las sentencias bá- sicas de programación, diferenciando su uso para la propuesta de solución de un problema, y con ello construye programas computacionales utilizando módulos de programa (funciones y procedimientos), valorando la reutilización de los módulo, y utilizando las diferentes estructuras de datos: estáticas y dinámicas para almacenar datos temporalmente, diferenciando el uso de las estructuras con respecto al uso de los archivos como almacenamiento de datos permanente, promoviendo el interés por otras técnicas de almacenamiento. UNIDADES DIDÁCTICAS UNIDAD I UNIDAD II UNIDAD III UNIDAD IV “Algoritmos y Pro- gramación Estruc- turada” “Estructuras de Datos Estáticas” “Estructuras de Datos Dinámica Lineal” “Estructuras de Datos Dinámica No Lineal” TIEMPO MÍNIMO DE ESTUDIO UNIDAD I UNIDAD II UNIDAD III UNIDAD IV 1ª y 2ª semana 16 horas 3ª y 4ª semana 16 horas 5ª y 6ª semana 16 horas 7ª y 8ª semana 16 horas Diagrama Objetivos Inicio Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones PRESENTACIÓN DE LA ASIGNATURA
  • 10. 10
  • 11. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 11Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones Diagrama Objetivos Inicio Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA Diagrama Objetivos Inicio Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones DIAGRAMA DE PRESENTACIÓN DE LA UNIDAD ORGANIZACIÒN DE LOS APRENDIZAJES CONOCIMIENTOS PROCEDIMIENTOS ACTITUDES Tema N° 1: Algoritmo 1. Definición del Algoritmo 2. Características de un algoritmo 3. Instrucciones Algorítmicas Básicas 4. Representación del Algoritmo Tema N° 2: Programación Es- tructurada 1. Programa 2. Lenguaje de Programación 3. Programas Traductores 4. Definición Programación Es- tructurada Tema Nº 3: Sentencias Básicas de Programación 1. Estructura Básica Simple o Secuencial 2. Estructura Básica Selectiva 3. Estructura Básica Repetitiva Tema Nº 4: Modularización de Programas 1. Definición de Módulos de Programa 2. Paso de Parámetros 3. Procedimientos 4. Funciones 5. Librerías de Programación creadas por el usuario Lectura seleccionada N° 1 Introducción a los Subalgorit- mos o Subprogramas – Luis Jo- yanes Aguilar Tema Nº 5: Funciones Recursi- vas 1. Definición de Recursividad 2. Recursividad del Factorial 3. Recursividad de la Multipli- cación 4. Recursividad de Torres de Hanoi Autoevaluación de la Unidad I 1. Analiza diferentes situacio- nes problema para proponer un algoritmo computacional como solución 2. Aplica el flujo de trabajo de la sentencia de programación secuencial 3. Aplica las sentencias de pro- gramación selectiva en la construcción de un algoritmo como solución de un proble- ma 4. Aplica las sentencias de pro- gramación repetitiva en la construcción de un algoritmo como solución de un proble- ma 5. Aplica los conceptos de la modularización a través de las Funciones, Procedimientos 6. Construye Librerías de Pro- gramación, para la reutiliza- ción de módulos en los pro- gramas 7. Aplica algoritmos recursivos en la construcción de progra- mas Actividad N° 1 Elaboración de Algoritmos y programas usando las senten- cias básicas de programación Actividad N° 2 Elaboración de programas usando módulos y librerías de programas, y elaboración de algoritmos recursivos Control de Lectura Nº 1 Sentencias de Programación en los Algoritmos y Módulos de Programa 1. Asume con responsabilidad sus actividades académicas asignadas 2. Realiza con honestidad las eva- luaciones asignadas CONTENIDOS AUTOEVALUACIÓN LECTURAS SELECCIONADAS BIBLIOGRAFÍA ACTIVIDADES
  • 12. 12ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones TEMA N° 1: ALGORITMO 1 DEFINICIÓN DE ALGORITMO ¿En su quehacer diario, realiza sus actividades generalmente en un orden, organizado, finali- za y realiza otro conjunto de actividades de similar manera? Entonces quiere decir que está realizando un algoritmo, y en este caso, al desarro- llarlo sin ayuda de un computador, se trata de un algoritmo no computacional. La definición de “Algoritmo” es precisamente como Ud. pensó que desarrolla sus actividades diarias, es decir: “Un algoritmo es un conjunto ordenado y finito de actividades, que generalmente, conducen a la solución de un problema”. La palabra algoritmo se deriva de la traducción al latín del nombre árabe Al-Khuwarizmi, matemático y astrónomo árabe que escribió un tratado sobre manipulación de números y ecuaciones en el siglo IX. (Angela Carrasco Loli. Principios de Programación) Tenemos algunos ejemplos de algoritmo: - Al instalar un equipo de sonido, ejecutamos las instrucciones (algoritmo) conteni- das en el manual del equipo. - El algoritmo matemático de Euclides para la obtención del máximo común divi- sor de dos números. Algunos algoritmos pueden ser ejecutados con ayuda de una computadora, a esto le llamamos algoritmo computacional, donde las actividades desarrolladas se llaman instrucciones y se expresan en un lenguaje de programación. (Términos que se explican mas adelante). Todo algoritmo puede ser descompuesto en tres partes, como se muestra en la siguiente figura: E: Entrada de datos. P: Proceso. S: Salida de resultados. Figura Nro 1: Partes de un algoritmo 2 CARACTERÍSTICAS DE UN ALGORITMO • Un algoritmo debe ser preciso e indicar el orden de realización de cada paso. • Un algoritmo debe ser definido. El algoritmo dos veces, se debe obtener el mismo resultado cada vez. • Un algoritmo debe ser finito: Si se sigue use debe terminar en algún mo- mento, o sea, debe tener un número finito de pasos. (Luis Joyanes Aguilar. Fundamentos de Programación.) Para que pueda escribir las instrucciones algorítmicas, necesita conocer lo que es una Variable: Es una localización o casillero en la memoria principal que almacena un valor que puede cambiar en el transcurso de la ejecución del programa. Tiene un nombre, un tipo de dato y un valor. Antes de poder utilizar una variable es necesario declararla especificando su nombre y su tipo de dato. UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 13. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 13Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones Ejemplo 1: Entero edad Ejemplo 2: Real peso, talla 3 INSTRUCCIONES ALGORÍTMICAS BÁSICAS a. Entrada: Consiste en obtener un dato de un dispositivo de entrada, como el teclado el lector óptico, etc., y almacenarlo en una variable, y se expresa en el pseu- docódigo mediante la palabra LEER, de la siguiente forma: Ejemplo: LEER variable LEER edad • En lenguaje C/C++: cinedad; b. Salida: Consiste en mostrar el valor de una variable en un dispositivo de salida, como la pantalla del computador, se expresa en el pseudocódigo mediante la pala- bra ESCRIBIR,de la siguiente forma: Ejemplo: ESCRIBIR variable ESCRIBIR TotalCompra • En lenguaje C/C++: coutTotalCompra; c. Asignación: Consiste en dar a una variable el valor de una expresión. La asigna- ción se expresa en el pseudocódigo de la siguiente forma: variable expresión Donde variable y el valor de expresión deben tener el mismo tipo de dato. Ejemplo: resultado numero1 + numero 2 En lenguaje C/C++: resultado = numero1 + numero 2; 4 REPRESENTACIÓN DEL ALGORITMO Para poder comprender el orden lógico en el que realizan los pasos de un algorit- mo, se hace uso de diagramas de representación, definidas por conjunto de símbo- los y significado de cada uno de ellos A continuación se le mostrará algunas de las representaciones de algoritmos más conocidas: a. Pseudocódigo: Es la representación del algoritmo en el lenguaje natural del programador. Ejemplo: algoritmo para sumar dos números enteros. INICIO entero numero1, numero2, resultado Leer numero1 Leer numero2 resultado numero1 + numero 2 Escribir “El resultado de la suma es: ” Escribir resultado FIN Descripción: - Todo algoritmo por ser finito, tiene un INICIO un FIN. - Las variables numero1, numero2 y resultado, son asignadas como tipo de dato entero. UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 14. 14ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones - Note que se mantiene las tres partes de un algoritmo: ENTRADA (Leer numero1, Leer numero2), PROCESO (La suma de numero1 y numero2, y dicho valor de suma asignado a la variable resultado) y SALIDA (Escribir el mensaje por pantalla “El resultado es: ” y Escribir el valor pantalla de la variable resultado) b. Diagrama de Flujo Estructurado: Representación con flujos entre los procesos a realizar. Los principales símbolos de representación para este diagrama son: c. Diagrama Nassi/Schneiderman (N-S): Representación en bloques, es decir cada uno de los procesos como ingreso/salida de datos, decisiones, acciones, repeticio- nes; están representados en bloques de tareas consecutivos. INICIO Declaración de variables Lectura de Datos Acción 1 Acción 2 Acción n Reporte de Datos FIN Se le mostrará ejemplos de estas dos últimas representaciones de algoritmos en el tema de Sentencias de Programación. TEMA N° 2: PROGRAMACIÓN ESTRUCTURADA 1 PROGRAMA ¿Se ha preguntado como el computador puede realizar las órdenes como ingresar datos por teclado, reproducir música, editar imágenes? Todo esto es posible gracias a la ejecución de algún programa, es decir, un conjunto de pasos ordenados y finitos (algoritmo) escrito en un lenguaje de programación (programa fuente). 2 LENGUAJE DE PROGRAMACIÓN Así como Ud. conoce el alfabeto (símbolos), gramática y semántica de un idioma como por ejemplo el castellano o el inglés, así es como usará un lenguaje de pro- gramación, con sus propios símbolos, gramática y semántica. UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 15. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 15Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones Entonces, el lenguaje de programación es un conjunto de sentencias utilizadas para es- cribir secuencias de instrucciones para que ejecute un programa en una computadora. Existen los siguientes lenguajes de programación que ya fueron revisados en alguna asignatura previa a esta, las que recordamos como: a. Lenguaje Máquina: Lenguaje de programación que la computadora interpreta y ejecuta directamente, y está compuesto de instrucciones codificadas en binario (0, 1). b. Lenguaje de Bajo Nivel: también llamados lenguajes ensambladores, permiten al programador escribir instrucciones de un programa usando abreviaturas del len- guaje natural (inglés), también llamadas palabras nemotécnicas (ADD, DIV, SUB, etc). c. Lenguaje de Alto Nivel: permite al programador escribir las instrucciones de un programa utilizando palabras o expresiones sintácticas muy similares al lenguaje natural (ejemplo: el inglés). Recuerde que así escriba un programa en un lenguaje de alto nivel, el compu- tador debe traducir estas instrucciones a lenguaje máquina, es decir, en código binario. 3 PROGRAMAS TRADUCTORES Son aquello programas que traducen algoritmos escritos en un programa en len- guaje de alto nivel hacia el lenguaje de código máquina. a. Intérprete: es un traductor que toma un programa fuente, lo traduce y a conti- nuación lo ejecuta. La siguiente figura muestra el flujo de desarrollo de un intérprete. PROGRAMA FUENTE TRADUCCIÓN Y EJECUCIÓN LINEA POR LINEA INTERPRETE Figura Nro 2: Programa Intérprete (Luis Joyanes Aguilar. Fundamentos de Programación) b. Compilador: la traducción del programa se realiza en una sola operación llama- da compilación del programa, es decir se traducen las instrucciones del programa en un solo bloque. El programa compilado y depurado (eliminado los errores de código fuente) se denomina programa ejecutable porque ya se puede ejecutar di- rectamente y cuantas veces de desee, y puede volver a compilarse por ejemplo en el lenguaje C/C++. En la siguiente figura se muestra del flujo de desarrollo de un compilador. UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 16. 16ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones PROGRAMA FUENTE PROGRAMA OBJETIVO COMPLADOR Figura Nro 3: Programa Compilador (Luis Joyanes Aguilar. Fundamentos de Programación) La compilación es el proceso de traducción del programa fuente a programa objeto (traducido a código máquina), a través de un programa enlazador (conduce a un programa en lenguaje máquina directamente ejecutable), para obtener el progra- ma ejecutable. El detalle del proceso de un compilador se muestra en la siguiente figura: PROGRAMA FUENTE PROGRAMA OBJETIVO PROGRAMA EJECUTABLE COMPLADOR PROGRAMA ENLAZADOR Figura Nro 4: Detalle de un Programa Compilador (Luis Joyanes Aguilar. Fundamentos de Programación) 4 DEFINICIÓN PROGRAMACIÓN ESTRUCTURADA Existen dos enfoques de programación y por lo tanto de desarrollo de software, muy utilizados en la actualidad, el Enfoque Estructurado y el Enfoque Orientado a Objetos, cada uno con sus conceptos, técnicas y herramientas. En esta asignatura, por ser de formación básica en su carrera y para facilitar el ini- cio del estudiante en la elaboración de programas, usaremos la Programación del Enfoque Estructurado. La Programación Estructurada es un conjunto de técnicas para escribir, verificar, depurar, y mantener los programas realizando refinamientos sucesivos es decir un todo se divide en segmentos más sencillos o de menor complejidad que al darles solución, se proceden a unificar. Para que estos segmentos de programa realicen las tareas que se le asignen, se recu- rre a las Estructuras de Control Básicas. UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 17. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 17Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones Estructuras de Control Básicas (Flujos de Control) Las estructuras básicas que permiten iniciarse sin dificultad en la programación, se conocen como: • Secuenciales • Selectivas • Repetitivas Éste conjunto de técnicas permite elaborar programas en cualquier lenguaje de programación. Las estructuras de Control Básicas mencionadas, o también conocidas como Sen- tencias Básicas de Programación, serán desarrolladas más adelante. NOTA: Estructura de un Programa en C/C++ Para iniciar la elaboración de programas en esta asignatura, se muestra la Estructu- ra de un Programa Simple en C++, en el Tema de Módulos de Programa, la estruc- tura del programa tendrá algunas modificaciones. Figura Nro 5: Estructura simple de un Programa en C/C++ (Elaboración personal) Descripción: - El símbolo #, es una directiva del procesador que permite acceder la carpeta include. - La carpeta o librería include, es propia del compilador, es donde se encuentran las librerías de cabecera (extensión .h) del lenguaje C/C++ - Una de las librerías de cabecera es el iostream, (i:imput, o:output, stream: flujo de cadenas) que permite reconocer las instrucciones de entrada, salida y manejo de caracteres o cadenas (simbolos) dentro del programa. - using namespace std; indica que se está haciendo uso del espacio de nombres estándar, es decir un conjunto de símbolos para lenguajes de programación. - El Módulo Principal main( ), en el cual se escribirán las instrucciones de progra- ma o invocaciones a otros módulos de programa. UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 18. 18ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones TEMA N° 3: SENTENCIAS BÁSICAS DE PROGRAMACIÓN 1 ESTRUCTURA BÁSICA SECUENCIAL En un mundo ideal, el orden de realización de tareas no tendrían ninguna restric- ción (condición o selección), es decir se realizarían de forma secuencial. Es una estructura paso a paso, sin bifurcaciones ni repeticiones; donde la salida de un proceso es entrada para otro. Diagrama de Flujo: INICIO Lectura de datos Acción 2 Acción n Reporte de datos FIN Declaración de variables Acción 1 Diagrama N-S: INICIO Declaración de variables Lectura de Datos Acción 1 Acción 2 Acción n Reporte de Datos FIN Ejemplo: Calcular el área de un triángulo. Área = (base * altura) / 2 Solución Leyenda de Datos Base: valor de la base del triángulo Altura: valor de la altura del triángulo Área: valor del resultado del cálculo del área del triángulo UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 19. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 19Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones Diagrama de Flujo: INICIO Leer base Área ← (base*altura)/2 Escribir El valor del área para el triángulo es: Escribir área FIN real ← base, altura, área Leer altura Diagrama N-S: INICIO real ← base, altura, área Leer base Leer altura Área (base*altura)/2 Escribir EL valor del área para el triángulo es: Escribir área FIN Código en C++: #includeiostream using namespace std; void main( ) { float base, altura, Area; cout”Ingrese valor de la base: ”; cinbase; cout”n”; //Salto de línea cout”Ingrese valor de la altura: ”; cinaltura; cout”n”; Area = (base * altura) / 2; cout”El valor del área para el triángulo es: ”; UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 20. 20ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones coutArea; cout”n”; system(“PAUSE”); } 2 ESTRUCTURA BÁSICA SELECTIVA Es una estructura que tiene un punto de decisión para realizar un conjunto de acciones. Pueden ser: • E. B. Selectiva Simple • E. B. Selectiva Compuesta • E. B. Selectiva Múltiple a. Estructura Básica Selectiva Simple: Se tiene un punto de decisión que evalúa una condición y si es Verdadero, ejecuta un conjunto de Acciones. Diagrama de Flujo: INICIO Lectura de datos Acción 1 Acción n Reporte de datos FIN Declaración de variables Cond 1 Diagrama N-S: INICIO Declaración de variables Lectura de datos V cond 1 F Acción 1 Acción 2 Acción n Reporte de datos FIN F V UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 21. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 21Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones Ejemplo: Sumar dos números enteros positivos c = a + b Solución: Leyenda de Datos a: valor del primer número entero positivo b: valor del segundo número entero positivo c: valor del resultado la suma de dos números a y b Diagrama de Flujo: INICIO Leer a, b c ← a + b Escribir El valor de la suma es: c FIN entero ← a,b,c a 0 b 0 F V Diagrama N-S: INICIO Entero ← a, b, c Leer a, b V a0 b0 F c ← a + b Escribir El valor la suma es:, c FIN Código C: #includeiostream using namespace std; int main( ) { float a, b, c; cout”Ingrese primer número: ”; cina; cout”n”; cout”Ingrese segundo número: ”; cinb; cout”n”; UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 22. 22ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones if (a0 b0) { c = a + b; cout”El valor la suma es: ”; coutc; cout”n”; } system(“PAUSE”); return 0; } b. Estructura Básica Selectiva Compuesta: Se tiene un punto de decisión que evalúa una condición y si es Verdadero, ejecuta un conjunto de Acciones, y si es Falsa ejecuta otro conjunto de acciones. Diagrama de Flujo: INICIO Lectura de datos Acción 1Acción 2 Acción nAcción m Reporte de datos FIN Declaración de variables Cond 1 F V Diagrama N-S: INICIO Declaración de variables Lectura de datos V cond 1 F Acción 1 Acción 2 ... ... Acción n Acción m Reporte de datos FIN Ejemplo: Sumar dos números enteros si son positivos, sino multiplicarlos. UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 23. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 23Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones Solución: Leyenda de Datos a: valor del primer número entero positivo b: valor del segundo número entero positivo c: valor del resultado la suma de dos números a y b Diagrama de Flujo: INICIO Leer a, b c ← a + bc ← a * b Escribir El valor de la suma es: c Escribir El valor de la multiplicación es: c FIN entero ← a,b,c a 0 b 0 F V Diagrama N-S: INICIO Entero ← a, b, c Leer a, b V a0 b0 F c ← a + b c ← a * b Escribir El valor la suma es:, c Escribir El valor la multiplicación es:, c FIN Código C: #includeiostream using namespace std; void main( ) { int a, b, c; cout”Ingrese primer número: ”; cina; cout”n”; cout”Ingrese segundo número: ”; cinb; cout”n”; if(a0 b 0) UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 24. 24ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones { c = a + b; cout”El valor la suma es: ”; coutc; cout”n”; } else { c = a * b; cout”El valor la multiplicacion es: ”; coutc; cout”n”; } system(“PAUSE”); } c. Estructura Básica Selectiva Múltiple: Se tiene un punto de decisión que evalúa más de dos alternativas para realizar un conjunto de acciones. Diagrama de Flujo: INICIO Lectura de datos Acción 4 Reporte de datos FIN Declaración de variables Cond 1 Acción 3 Acción m Acción 1 Acción n Acción 2 Acción m Acción 4 Acción m default 33 1 Diagrama N-S: INICIO Declaración de variables Lectura de datos 1 2 3 cond 1 default Acción 1 Acción 2 Acción 3 Acción 4 ... ... ... ... Acción n Acción m Acción m Acción m Reporte de datos FIN UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 25. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 25Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones Ejemplo: Ingresa cinco números e imprime que vocal es. Solución: Leyenda de Datos num: valor del número entero positivo Diagrama de Flujo: INICIO Leer num. Escribir Vocal A Escribir Vocal A Escribir Vocal A Escribir Vocal A Escribir Vocal A Escribir Vocal A FIN entero ← num. num default1 3 4 5 2 Diagrama N-S: INICIO Entero ← a, b, c Leer a, b 1 2 3 4 5 num default Escribir Vocal A Escribir Vocal E Escribir Vocal I Escribir Vocal O Escribir Vocal U Escribir No es vocal FIN Código C: #includeiostream using namespace std; void main( ) { int num; cout”Ingrese número: ”; cinnum; switch(num) { case 1: cout”Vocal A”; break; case 2: cout”Vocal E”; break; case 3: cout”Vocal I”; break; UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 26. 26ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones case 4: cout”Vocal O”; break; case 5: cout”Vocal U”; break; default: cout”No es numero para una vocal”; } system(“PAUSE”); } Existe una conformación de la Estructura Selectiva que ayuda en la elaboración de programas: Estructura Básica Selectiva Anidada: se evalúa una condición y si es Verdadero, eje- cuta un nuevo punto de decisión y así sucesivamente, y si es Falsa ejecuta otro con- junto de acciones. Diagrama de Flujo: INICIO Lectura de datos Reporte de datos FIN Declaración de variables Cond 1 Cond 2 Acción 1 Acción n Acción 2 Acción m V V F F Diagrama N-S: INICIO Declaración de variables Lectura de datos F Cond 1 V Acción 2 V Cond 2 F ... Acción 1 ... ... Acción m Acción n Reporte de datos FIN UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 27. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 27Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones Ejemplo: Ingresar un número entero y si es positivo y diferente de cero, reportar si se encuen- tra entre los diez primeros números. Solución: Leyenda de Datos a: valor del número entero Diagrama de Flujo: INICIO Leer a Escribir Primeros 10 Escribir Son mas de los primeros l0 Escribir No es un número mayor que cero FIN entero ← a a 0 a = 1 a 10 F F V V Diagrama N-S: INICIO Entero a Leer a F a 0 V Escribir No es un número mayor que cero F a = 1 a 10 V Escribir Son mas de los primeros 10 Escribir Primeros 10 FIN Código C: #includeiostream using namespace std; void main( ) { int a; cout”Ingrese número: ”; cina; if(a0) if(a=1 a10) cout”Primeros 10”; UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 28. 28ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones else cout”Son más de los primeros 10”; else cout”No es un número mayor que cero”; system(“PAUSE”); } 3 ESTRUCTURA BÁSICA REPETITIVA Es una estructura permite repetir un conjunto de acciones dada una condición. Pueden ser: • E. B. Repetitiva Mientras • E. B. Repetitiva Hacer-Mientras • E. B. Repetitiva Para a. Estructura Básica Repetitiva Mientras: Primero evalúa una expresión condicional y si es verdadera permite realizar el con- junto de acciones y regresa evaluar nuevamente la expresión condicional, hasta que deje de cumplir (Falso). Diagrama de Flujo: INICIO Lectura de datos FIN Declaración de variables Cond 1 Acción 1 Acción n V F Acción 2 Diagrama N-S: INICIO Declaración de variables Lectura de datos Cond 1 Acción 1 ... Acción n Acción 2 Reporte de datos FIN UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 29. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 29Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones Ejemplo: Imprimir la serie Fibonacci, menor a un límite dado: 0,1,1,2,3,5,8,13,…. Diagrama de Flujo: INICIO Leer lim Escribir a Escribir b FIN entero ← lim, a=0, b=1, c b=lim c ← a + b a ← b V F b ← c Diagrama N-S: INICIO entero ← min, a=0, b=1, c Leer lim Escribir a b = lim Escribir c ← a + b a ← b b ← c FIN Código C: #includeiostream using nameaspace std; void main( ) { int lim, a=0, b=1,c; cout”Ingrese límite: ”; cinlim; UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 30. 30ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones couta; while(b=lim) { coutb; c=a+b; a=b; b=c; } system(“PAUSE”); } b. Estructura Básica Repetitiva Hacer - Mientras Realiza al menos una vez un conjunto de acciones, y luego evalúa una expresión condicional, si es Verdadero regresa a repetir el conjunto de acciones, si no cum- ple, termina la repetición. Diagrama de Flujo: INICIO Lectura de datos Reporte de Datos FIN Declaración de variables Cond 1 Acción 1 Acción n V F Acción 2 Diagrama N-S: INICIO Declaración de variables Lectura de datos Acción 1 ... Acción n Cond 1 Acción 2 Reporte de datos FIN UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 31. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 31Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones Ejemplo: Leer un número entero mayor que cero, sino es así, volver a solicitar el número con esas condiciones. Diagrama de Flujo: INICIO Leer num FIN entero ← num num = 0 V F Diagrama N-S: INICIO entero ← mun Leer num num = 0 FIN Código C: #includeiostream using namespace std; void main() { int num; do{ cout” Ingrese un numero entero mayor a cero: “; cinnum; }while(num = 0); system(“PAUSE”); } c. Estructura Básica Repetitiva Para: Tambien conocida como Desde ó Por, permite repetir un conjunto de acciones, se- cuencialmente hasta llegar a un límite dado; recorrido se realiza desde una variable o índice de recorrido y avanza de uno en uno hasta llegar al límite. Diagrama de Flujo: UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 32. 32ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones INICIO Lectura de datos Reporte de Datos FIN Declaración de variables Definir variables de recorrido y limite Inicializar la variable de recorrido Incrementar variable de recorrido Variable es menor a limite Acción 1 Acción n V F Acción 2 Diagrama N-S: INICIO Declaración de variables Lectura de datos i = 0; i = limite; i ++ Acción 1 ... Acción n Acción 2 Reporte de datos FIN Ejemplo: Calcular el Factorial de un número (n!). Diagrama de Flujo: UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 33. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 33Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones INICIO Escribir Ingrese numero para factorial Escribir El factorial es, p Leer num FIN entero ← i, num, p = 1 i ← 1 i = num p ← p * i i ++ V F Diagrama N-S: INICIO entero ← num i, p = 1 Leer num i = 1; i = num; i ++ p ← p * i Escribir el factorial es: Escribir p FIN Código C: #includeiostream using namespace std; void main( ) { int num, i, p=1; cout”Ingrese numero para factorial: ”; cinnum; for(i=1;i=num; i++) { p = p * i; } cout”El factorial de ”n”es: ”p; system(“PAUSE”); } UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 34. 34ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones Diagrama Objetivos Inicio Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones ACTIVIDAD N° 1 Esta actividad puede consultarla en su aula virtual. TEMA N° 4: MODULARIZACIÓN DE PROGRAMAS 1 DEFINICIÓN DE MÓDULOS DE PROGRAMA Imagine que está iniciando un negocio y no tiene colaboradores, y asume todas las tareas para su funcionamiento: buscar proveedor, ofrecer y publicitar el producto o servicio, estar involucrados en el proceso de transacción etc. Pero en alguna etapa de crecimiento, asignamos estas tareas a otros colaboradores, quienes interactúan entre sí, y al final le informan de su cumplimiento. Es lo mismo que pasa en la ela- boración de módulos de programa. Los Módulos de Programa (subprogramas) son partes separadas de código que ejecutan tareas pequeñas de un módulo principal. El módulo es con un conjunto de instrucciones precisas, independientes y reutilizables. Para poder crear los módulos de programa, debe conocer las formas en que se pa- san los datos de un módulo a otro, al ser invocados. 2 PASO DE PARÁMETROS Parámetros de entrada (valor) Imagine nuevamente, que se hace un clon de su persona, todas las modificaciones que haga sobre él (cambio de peinado, forma de vestir, aprendizaje de otro idioma) no le afectaría a Ud. que es el dato original. Es decir, se guarda en memoria una copia temporal de la variable, y dentro del módulo solo se utiliza la copia para las modificaciones. Parámetros de entrada/salida (referencia) Ahora el ejemplo ya no es clonar a su persona, sino que es Ud. mismo, y donde sea que se encuentre (o referencia de ubicación), las modificaciones que se realicen siempre se mantendrán en Ud., por ser el dato original. Es decir, los cambios que se efectúen sobre dicha variable dentro del procedimiento se mantienen incluso después de que este haya terminado. La siguiente figura muestra un programa, haciendo uso de los tipos de paso de parámetros. UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 35. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 35Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones Figura Nro 6: Programa Ejemplo de Paso de Parámetros (Elaboración personal) Descripción: - En el programa se tienen dos módulos: el Principal: main (no olvide que siempre debe existir) y el módulo f (que como programadores, estamos creando). - En el módulo Principal se está declarando dos variables: x, y a las cuales se les está asignando el valor de 1, a cada una respectivamente. - En el mismo módulo Principal se invoca al módulo f, al que se le envía los valores de x, y: f(x,y) significa f(1,1); - Esa invocación permite que se desarrolle el módulo void f (int a, int b), es decir la variable a, recibe el valor de la variable x y la variable b recibe el valor de la va- riable y, por estar en un orden dentro del paréntesis. - La variable a, servirá para un paso de parámetros de entrada, y la variable b para un paso de parámetros de entrada/salida por que lo acompaña el operador de dirección (para hacer referencia, es decir apuntar a la dirección de memoria de la variable y) - Es decir, la variable a, recibe el valor de 1 proveniente de x, mientras que la varia- ble b recibe la dirección de memoria (en base hexadecimal) de la variable y. - El módulo f, es independiente al módulo Principal, por lo que la declaración de la variable a es de forma local, es decir las modificaciones o cambios de valores a la variable a, solo es afectada en el módulo f, mientras que el valor original de x se mantiene y no sufre los cambios que realice en la variable a. - Lo mismo ocurriría con la variable b, pero en este caso, b no es copia de y, sino que invoca la dirección de memoria de y, por lo que los cambios que realice en b, afecta directamente a y. Se tiene dos tipos de módulos de programa: Procedimiento y Función. 3 PROCEDIMIENTOS Son módulos que se utilizan para elaborar un conjunto de instrucciones, indepen- dientes y reutilizables, pero definiendo claramente el significado y utilidad de esa porción de programa (cohesión). Declaración en C/C++: void NombreProcedimiento( ) void NombreProcedimiento (argumentos) UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 36. 36ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones 4 FUNCIONES Son módulos que tienen la misma definición de un procedimiento, pero con la particularidad de que permite devolver UN valor en una variable. Declaración en C/C++: Tipo_dato NombreFunción( ) Tipo_dato NombreFunción(argumentos) Nota: - En la Función, el Tipo de dato que se escribe al declararla, debe ser el mismo tipo de dato de la variable cuyo valor se devuelve (retorna) - En el Procedimiento, como no devuelve ningún valor, se escribe la palabra void, que indica vació o sin especificar un tipo de dato. - Tanto en función y en procedimiento, se puede declarar con o sin argumentos, es decir los argumentos son el envío de valores de variables a través de estos mó- dulos y pueden ser paso de parámetros por entrada o paso de parámetros por entrada/salida. Pasamos a un ejemplo, simple en solucionar, pero el objetivo de este ejemplo es crear y comparar el uso de Función, Procedimiento, con o sin argumentos. Ejemplo: se tiene el siguiente programa simple para sumar dos números //Programa Simple #includeiostream using namespace std; void main() { int a,b,c; cout”Ingrese valor de a: t”; cina; cout”Ingrese valor de b: t”; cinb; c=a+b; coutc; cout”n”; system(“PAUSE”); } Es simple porque todas las instrucciones de programa para lograr sumar dos núme- ros, es decir la entrada de datos en la variable a y b, el proceso de sumar y asignar y la salida del resultado en la variable c, se están escribiendo solo en el Módulo Principal main( ) A continuación se muestra la forma para crear un módulo llamado sumar, usando la siguiente técnica: creando el módulo antes del módulo que lo invoca. El desarrollo del programa se muestra con el uso Procedimiento con y sin argumen- tos, y usando Función con y sin argumentos. UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 37. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 37Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones //Procedimientos con Argumentos: Ejemplo 1 #includeiostream using namespace std; void sumar(int a, int b) { int c; c=a+b; coutc; cout”n”; } void main() { int a,b; cout”Ingrese valor de a: t”; cina; cout”Ingrese valor de b: t”; cinb; sumar(a,b); system(“PAUSE”); } //Procedimientos sin Argumentos: Ejemplo 2 #includeiostream using namespace std; void sumar() { int a,b,c; cout”Ingrese valor de a: t”; cina; cout”Ingrese valor de b: t”; cinb; c=a+b; coutc; } void main() { sumar( ); system(“PAUSE”); } Descripción: - En ambos casos, con o sin argumentos, el módulo sumar( ) está realzando exac- tamente la tarea para la cual ha sido creada, es decir, sumar dos números. - Además, en el Módulo principal main( ), se invoca al módulo sumar ( ) exacta- mente con su nombre, sin ayuda de ninguna otra variable, ya que no devuelve ningún valor. - Pero, en ambos casos, la tarea de leer los valores de a y b, están siendo asumidos en el primer caso por el módulo principal, o en el segundo caso, por el módulo sumar. Esta tarea también será asumida por un módulo apropiado que permita realizar la tarea de obtener los valores, sin recargar la responsabilidad de otros módulos. (Se verá mas adelante) UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 38. 38ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones //Funciones con Argumentos: Ejemplo1 #includeiostream using namespace std; int sumar(int a, int b) { int c; c=a+b; return c; } void main() { int sum,a,b; cout”Ingrese valor de a: t”; cina; cout”Ingrese valor de b: t”; cinb; sum=sumar(a,b); cout”Valor de la suma de a y b: “sum; cout”n”; system(“PAUSE”); } //Funciones sin Argumentos: Ejemplo 2 #includeiostream using namespace std; int sumar() { int a,b,c; cout”Ingrese valor de a: t”; cina; cout”Ingrese valor de b: t”; cinb; c=a+b; return c; } void main() { int sum; sum=sumar(); cout”Valor de la suma de a y b: “sum; cout”n”; system(“PAUSE”); } Descripción: - En ambos casos, con o sin argumentos, el módulo sumar( ) está realzando exac- tamente la tarea para la cual ha sido creada, es decir, sumar dos números. - El módulo sumar( ), está siendo declarado acompañado de un tipo de dato entero: int, ya que es el mismo tipo de dato de la variable que está devolviendo (return) en este caso, la variable c. - Por lo que, el módulo principal, al invocar al módulo sumar, debe recibir el va- lor que se está devolviendo, y para esto se recomienda el uso de una variable que reciba dicho valor, en el ejemplo la variable sum, la cual debe estar declarada con el mismo tipo de dato de la variable que recibe. - De igual manera que en el ejemplo de Procedimientos, la tarea de leer los valo- res de a y b, deben ser asumidos por un módulo apropiado. Otra Manera de definir un Procedimiento y una Función, con o sin argumentos, es con la técnica: declarar de manera global a la función o procedimiento, es decir en la cabecera del programa, y luego desarrollar las instrucciones de la fun- ción o procedimiento después del Módulo Principal. UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 39. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 39Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones //Procedimientos con Argumentos #includeiostream using namespace std; void sumar(int a, int b); int main() { int a,b; cout”Ingrese valor de a: t”; cina; cout”Ingrese valor de b: t”; cinb; sumar(a,b); return 0; } void sumar(int a, int b) { int c; c=a+b; coutc; cout”n”; } //Funciones con Argumentos #includeiostream using namespace std; int sumar(int a, int b); void main() { int sum,a,b; cout”Ingrese valor de a: t”; cina; cout”Ingrese valor de b: t”; cinb; sum=sumar(a,b); cout”Valor de la suma de a y b: “sum; cout”n”; } int sumar(int a, int b) { int c; c=a+b; return c; } Descripción: - El ejemplo anterior solo ha sido dado con Procedimientos y Funciones con ar- gumentos, pero también puede darse sin argumentos. - En esta forma, el orden de creación de los módulos no es relevante, siempre y cuando estén declarados de manera global en el programa. Ejemplo: Para repartir una herencia se tiene en cuenta: Si la cantidad de hijos es menor a 4, se repartirá exactamente entre el número de hijos; si son cuatro o más hijos, la mitad le tocará al hermano mayor y el resto se dividirá entre los demás hermanos. #includeiostream using namespace std; //procedimientos sin argumentos void herencia() { float her,may; int num; cout”Ingresar importe de herencia n”; cinher; cout”Ingresar cantidad de hijos n”; cinnum; UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 40. 40ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones if(num4) { her=her/num; cout”Herencia a cada hijo es “her; } else { may=her/2; her=may/(num-1); cout”nHerencia de hermano mayor es”may; cout”nHerencia de cada hijo es “her; } } void main( ) { herencia( ); system(“PAUSE”); } 5 LIBRERÍAS DE PROGRAMACIÓN CREADAS POR EL USUARIO Al elaborar programas, además de crear módulos independientes y reutilizables en el programa fuente, Ud. se verá en la necesidad de usar esos mismos módulos en otros programas fuentes, diferentes entre sí, ya que el algoritmo que necesita son los mismos para cada uno de ellos. Existen librerías de cabecera (header, de alli la extensión “.h”), y algunas son pro- pias del del lenguaje C como: iostream.h, math.h, conio.h, stdio.h, srting.h y otras que pueden ser creadas por el programador, y ser invocadas en diferentes progra- mas fuente (el programa con extensión “.cpp”) como parte de la reutilización de código. Ejemplo 1: Leer un número entero diferente a cero, y si es positivo, reportar “El numero es positivo”, caso contrario es negativo. Solución: - Crear la librería con extensión .h llamado lecturadato.h para crear la función de lectura de datos enteros, llamada leedatoe( ). lecturadato.h #includeiostream using namespace std; int leedatoe() { int dato; do{ cout”Ingrese valor del dato”; cindato; }while(dato==0); return dato; } - Crear el programa Ejemplo.cpp que invoca a la librería lecturadato.h, especifican- do la ruta que se encuentre: UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 41. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 41Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones Ejemplo: cpp #includeiostream #include “c:programaslecturadato.h” using namespace std; void main() { int num; num=leedatoe(); if(num0) cout”El numero es positivo”; else cout”El numero es negativo”; system(“PAUSE”); } Descripción: - Al invocar a lecturadato.h, a través de su ruta de ubicación, permite usar las veces que se requeira, al módulo leedatoe( ) que se encuentra ubicado dentro de librería creada. - Si se tiene otro programa con la extensión .cpp, puede también invocar a la libre- ría lecturadato.h, sin ningún inconveniente. - Puede agregar otros módulos de lectura a la librería lecturadato.h, según el tipo de dato que necesite. - Escribir la ruta de la librería se hace innecesaria por la ayuda que ofrece las inter- faces de la herramienta de programación que ese esté usando. Ejemplo: LecturaDatos.h Figura Nro 7: Ejemplo de Librería LecturaDatos.h (Elaboración personal) UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 42. 42ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones RepartoHerencia.cpp Figura Nro 8: Ejemplo de Programa Fuente RepartoHerencia.cpp (Elaboración personal) Descripción: - Como puede ver, en el programa fuente RepartoHerencia.cpp, se invoca al mó- dulo leedatod( ) y leedatoe( ) para obtener los valores de monto de herencia y cantidad de hijos respectivamente; dichos módulos están creados en la librería LecturaDatos.h, que es invocada en el programa fuente. - El módulo principal main( ) se debe escribir líneas abajo del programa fuente, y debe invocar al módulo Herencia( ), como ya se ha explicado en el ejemplo anterior. TEMA N° 6: FUNCIONES RECURSIVAS En cierta ocasión en un aula de clase, pregunté si podían definir o dar un ejemplo de recursividad, sorprendiéndome la respuesta de un estudiante: “Si yo tengo un apuro económico, vendo mi reproductor de música, y atiendo ese apuro. Es decir, un recurso que le pertenece a una entidad, es usada nuevamente por la misma entidad para buscar una solución, eso es Recursividad”, finalizó. 1 DEFINICIÓN DE RECURSIVIDAD Entonces, se denominan funciones recursivas a aquellas que se invocan a sí mis- mas en un programa, para desarrollar un determinado proceso. Hay que tener algunas cosas en cuenta, en las funciones recursivas: - Toda función recursiva debe tener algún punto de finalización o valor base. - La función recursiva debe acercarse a ese punto de finalización o valor base. (Eduardo Raffo Lecca, Turbo C++) UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 43. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 43Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones 2 RECURSIVIDAD DEL FACTORIAL n! 4! = 4 * 3 * 2 * 1 4 * 3! → Es decir n*(n-1)! 3! = 3 * 2 * 1 3 * 2! → Es decir n*(n-1)! 2! = 2 * 1 2 * 1! → Es decir n*(n-1)! 1! = 1 * 0! 0! = 1 int factorial(int n) { if (n == 0) return 1; else return n*factorial(n-1); } 3 RECURSIVIDAD DE LA MULTIPLICACIÓN a * b 3 * 4 = 3 + 3 + 3 + 3 3 + (3 * 3) 3 * 3 = 3 + 3 + 3 3 + (3 * 2) 3 * 2 = 3 + 3 3 + (3 *1) 3 * 1 = 3 int multiplica(int a, int b) { if (a == 0 || b == 0) return 0; else if (b == 1) return a; else return a+multiplica(a,b-1); } 4 RECURSIVIDAD DE TORRES DE HANOI Las restricciones para la recursividad de torres de hanoi, se expresan: - Usar n discos para trasladarlos desde un poste origen, hacia un poste final, usando un poste auxiliar. - Por cierta cantidad de discos, hay una cantidad de movimientos, ni mas ni menos, cant_movim = 2n − 1. - Los discos están dispuestos del tamaño grande al más pequeño. No puede estar un disco grande sobre uno pequeño. A continuación se tiene el algoritmo, puesto a prueba a través del Método del Ár- bol, muy útil para comprobar la recursividad. 4! = 4 * 3 * 2 * 1 4 * 3! 3! = 3 * 2 * 1 3 * 2! 2! = 2 * 1 2 * 1! 1! = 1 * 0! 0! = 1 1 * 1 * 2 * 3 * 4 = 24 3 * 4 = 3 + 3 + 3 + 3 3 + (3 * 3) 3 * 3 = 3 + 3 + 3 3 + (3 * 2) 3 * 2 = 3 + 3 3 + (3 * 1) 3 * 1 = 3 3 + 3 + 3 + 3 = 12 UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 44. 44ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones Figura Nro 9: Ejemplo de Método del Árbol para Torres de Hanoi (Elaboración personal) Diagrama Objetivos Inicio Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones ACTIVIDAD N° 2 Esta actividad puede consultarla en su aula virtual. UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 45. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 45Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones Diagrama Objetivos Inicio Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones LECTURA SELECCIONADA N° 1 INTRODUCCIÓN A LOS SUBALGORITMOS O SUBPROGRAMAS Luis Joyanes Aguilar, 2008, Fundamentos de Programación. Pág. 202 Un método ya citado para solucionar un problema complejo es dividirlo en subproble- mas –problemas más sencillos– y a continuación dividir estos subproblemas en otros más simples, hasta que los problemas más pequeños sean fáciles de resolver. Esta técnica de dividir el problema principal en subproblemas se suele denominar “divide y vence- rás” (divide and conquer). Este método de diseñar la solución de un problema principal obteniendo las soluciones de sus subproblemas se conoce como diseño descendente (top-down design). Se denomina descendente, ya que se inicia en la parte superior con un problema general y el diseño específico de las soluciones de los subproblemas. Normalmente las partes en que se divide un programa deben poder desarrollarse inde- pendientemente entre sí. Las soluciones de un diseño descendente pueden implementarse fácilmente en lenguajes de programación de alto nivel, como C/C++, Pascal o Fortran. Estas partes independientes se denominan subprogramas o subalgoritmos si se empelan desde el concepto algorítmico. La correspondencia entre el diseño descendente y la solución por computadora en términos de programa principal y subprogramas se analizará a lo largo de este capítulo. Consideremos el problema del cálculo de la superficie (área) de un rectángulo. Este problema se puede dividir en tres subproblemas: • Subproblema 1: Entrada de datos de altura y base. • Subproblema 2: Cálculo de la superficie. • Subproblema 3: Salida de resultados. El algoritmo correspondiente que resuelve los tres subproblemas es: Leer (altura, base) // entrada de datos Área ← base * altura // cálculo de la superficie Escribir (base, altura, área) // salida de resultados El método descendente se muestra en la Figura: Figura Nro 10: Diseño Descendente (Fuente: Luis Joyanes Aguilar. Fundamentos de Programación) El problema principal se soluciona por el correspondiente programa o algoritmo prin- cipal – también llamado controlador o conductor (driver) – y la solución de los sub- problemas mediante subprogramas, conocidos como procedimientos (subrutinas) o funciones. Los subprogramas, cuando se tratan en lenguaje algorítmico, se denominan también subalgoritmos. UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 46. 46ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones Un subprograma puede realizar las mismas acciones que un programa: 1) aceptar datos, 2) realizar algunos cálculos, 3) devolver resultados. Un subprograma, sin embargo, se utiliza por el programa para un propósito específico. El subprograma recibe datos des- de el programa y le devuelve resultados. Haciendo un símil con una oficina, el problema es como el jefe que da instrucciones a sus subordinados – subprogramas-; cuando la ta- rea termina, el subordinado devuelve un resultado al jefe. Se dice que el programa prin- cipal llama o invoca al subprograma. El subprograma ejecuta la tarea, a continuación devuelve el control al programa. Eso puede suceder en diferentes lugares del programa. Cada vez que el programa es llamado, el control retorna al lugar donde fue hecha la llamada como muestra la siguiente figura (Figura 12). Un subprograma puede llamar a su vez a sus propios subprogramas (Figura 13). Existen – como ya se ha comentado – dos tipos importantes de subprogramas: funciones y procedimientos o subrutinas. Figura Nro 11: Un programa con un subprograma: función y procedimiento (Fuente: Luis Joyanes Aguilar. Fundamentos de Programación) Figura Nro 12: Un programa con diferentes niveles de subprogramas (Fuente: Luis Joyanes Aguilar. Fundamentos de Programación) UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA Diagrama Objetivos Inicio Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones GLOSARIO DE LA UNIDAD I Argumento: valores suministrados a un módulo de programa, al momento de ser invo- cado. Librería: es un archivo, que contiene código, usualmente en módulos de programa. Que pueden ser reutilizados por diferentes proyectos de programa. Programa fuente: algoritmo codificado en un lenguaje de programación, que adminis- tra otros módulos de programa, y es necesario para la ejecución del programa. String.h: librería del compilador, en este caso el C/C++, que permite usar el tipo de dato del mismo nombre: string.
  • 47. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 47Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA Objetivos Inicio s Actividades Autoevaluación s Glosario Bibliografía o Anotaciones AUTOEVALUACIÓN DE LA UNIDAD I INSTRUCCIONES: Lee detenidamente y responde las siguientes preguntas: 1. Indique la alternativa que describa la característica “Ser Preciso” de un algoritmo: a) Sólo se desarrollarán las tareas programadas y con los datos suministrados. b) Las tareas desarrolladas deben permitir ponerlas a prueba antes de ejecutar. c) Las tareas de un algoritmo tienen un orden de realización. d) Se emplear los recursos necesarios para el desarrollo de las tareas. e) Se debe expresar en una forma estándar, comúnmente aceptada. 2. El programa traductor denominado compilador realiza el siguiente flujo de trabajo. a) Obtiene el programa fuente, genera el código objeto, lo enlaza al código máqui- na y genera el programa ejecutable. b) Obtiene el programa fuente, genera el código algoritmo, lo enlaza al código máquina y genera el programa ejecutable. c) Obtiene el programa fuente, genera el código objeto, lo enlaza al código fuente y genera el programa ejecutable. d) Obtiene el programa fuente, genera el código máquina, lo enlaza al código fuen- te y genera el programa ejecutable. e) Obtiene el programa fuente, genera el código algoritmo, lo enlaza al código fuente y genera el programa ejecutable. 3. Dado el siguiente bloque de código que utiliza una estructura repetitiva, indique que valores lógicos de la tabla de verdad (Verdadero=V y Falso=F) se necesita en la condición, para que no solicite nuevamente el ingreso el valor: a) V,V. do{ cout”Ingrese valor: ”; cinvalor; }while(valor==’S’ || valor==’s’); b) F,V. c) V,F. d) F,F. e) FFV. 4. Indique la alternativa que presenta el orden de ejecución de la estructura repetitiva Objetivos Inicio os Actividades Autoevaluación s Glosario Bibliografía o Anotaciones BIBLIOGRAFÍA DE LA UNIDAD I Carrasco Loli Angela. Principios de Programación. Junio 2005 Joyanes Aguilar, Luis. Fundamentos de Programación. 4ta. ed. España: McGraw-Hill; 2008. Raffo Lecca, Eduardo. Turbo C++. 1 ed. Lima: Mundigraph; 2000.
  • 48. 48ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA Para: for( i = 0; i n; i++) { accion 1; acción m; } a) Inicializa la variable de recorrido, compara que esté dentro del límite, incre- menta la variable, realiza las acciones, e inicia nuevamente el mismo orden de ejecución. b) Inicializa la variable de recorrido, compara que esté dentro del límite, realiza las acciones, incrementa la variable e inicia nuevamente el mismo orden de ejecución. c) Inicializa la variable de recorrido, compara que esté dentro del límite, incremen- ta la variable, realiza las acciones, y finaliza el orden de ejecución. d) Inicializa la variable de recorrido, incrementa la variable, compara que esté dentro del límite, realiza las acciones, e inicia nuevamente el mismo orden de ejecución. e) Inicializa la variable de recorrido, decrementa la variable, compara que esté dentro del límite, realiza las acciones, e inicia nuevamente el mismo orden de ejecución. 5. Dado el siguiente bloque de código, indique el tipo de sentencia: if(num 0) if(num 30 num 60 ) coutpow(num,2); a) Sentencia Repetitiva Para. b) Sentencia Selectiva Compuesta. c) Sentencia Repetitiva Hacer-Mientras. d) Sentencia Selectiva Múltiple. e) Sentencia Selectiva Anidada. 6. Indique la alternativa cuyo enunciado no es correcto: a) Las funciones y procedimientos son módulos de programa. b) Las funciones recursivas se invocan a sí mismas. c) Sólo las funciones usan argumentos, los procedimientos no lo usan. d) Los módulos son independientes y reutilizables. e) Los pasos de parámetros son dos: por valor y por referencia. 7. Indique la alternativa que defina a “permite usar módulos independientes, en dife- rentes programas”. a) Función Recursiva. b) Paso de Parámetros por valor. c) Sentencias Repetitivas. d) Librerías de programación. e) Sentencias Selectivas. 8. Indique a que algoritmo recursivo, se refiere el siguiente módulo de programa:
  • 49. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 49Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones int modulo(int a, int b) { if(b==0) return 1; else return a*modulo(a,b-1); } a) Función Recursiva de la Multiplicación. b) Función Recursiva del Factorial. c) Función Recursiva de la Potencia. d) Función Recursiva de Fibonacci. e) Función Recursiva de Torres de Hanoi. 9. El paso de parámetros por valor, realiza el siguiente proceso: a) Crea una variable original y las modificaciones afectan a la copia de la variable original. b) Crea una copia temporal de la variable y las modificaciones solo afectan a ésta copia. c) Crea un variable original y las modificaciones solo afectan a ésta. d) Crea una copia temporal de la variable y las modificaciones afectan a la variable original. e) Crea una variable original y no tiene modificaciones. 10. Indique la alternativa que indique la(s) variables(s) que sean paso de parámetros por referencia. void calcular(int x, int y) { int c; c = x + y; coutc; } a) La variable “x”. b) La variable “x” y la variable “y”. c) La variable “y”. d) La variable “c” y la variable “y”. e) La variable “c”. UNIDAD I: ALGORITMOS Y PROGRAMACIÓN ESTRUCTURADA
  • 50. 50
  • 51. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 51Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones Diagrama Objetivos Inicio Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS Diagrama Objetivos Inicio Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones DIAGRAMA DE PRESENTACIÓN DE LA UNIDAD ORGANIZACIÒN DE LOS APRENDIZAJES CONOCIMIENTOS PROCEDIMIENTOS ACTITUDES Tema N° 1: Estructuras de Datos 1. Definición de Estructura de Datos 2. Clasificación de Estructura de Datos Tema N° 2: Arreglos Unidi- mensionales 1. Definición de Arreglos Uni- dimensionales 2. Algoritmos de Actualiza- ción 3. Búsqueda de Arreglos Uni- dimensionales 4. Ordenación de Arreglos Unidimensionales Tema N° 3: Arreglos Bidimen- sionales 1. Definición Arreglos Bidi- mensionales 2. Algoritmos de Actualiza- ción de Arreglos Bidimen- sionales Lectura seleccionada N° 1 Arrays Multidimensionales – Jesús Carretero Pérez. García Carballena, Felix. Pérez Loba- to José Autoevaluación de la Unidad II 1. Aplica los algoritmos de actualización de arreglos unidimensionales: añadir, insertar, eliminar; en la construcción de programas 2. Aplica los algoritmos de búsqueda y ordenación de arreglos unidimensionales en la construcción de pro- gramas 3. Aplica los algoritmos de actualización de arreglos bidimensionales en la cons- trucción de programas 4. Usa los algoritmos de ma- triz transpuesta, diagonales, rodean a un número; con arreglos bidimensionales Actividad N° 1 Elaboración de Programas usan- do arreglos unidimensionales, para casos propuestos Actividad N° 2 Elaboración de Programas usan- do arreglos bidimensionales, para casos propuestos Tarea Académica Nº 1 Construcción de Programas y prueba de escritorio, usando Arreglos 1. Asume con responsabilidad sus actividades académicas asignadas 2. Realiza con honestidad las evaluaciones asignadas CONTENIDOS AUTOEVALUACIÓN LECTURAS SELECCIONADAS BIBLIOGRAFÍA ACTIVIDADES
  • 52. 52ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones TEMA N° 1: ESTRUCTURAS DE DATOS 1 DEFINICIÓN DE ESTRUCTURA DE DATOS Considere como ejemplo un librero, un espacio donde almacena libros en cada com- partimiento (un solo tipo de dato: libro), o como a su oficina de trabajo, como un espacio donde se almacenan elementos tales como expedientes, computadoras, gabi- netes, personas, entre otros; es decir permite almacenar diferentes elementos (dife- rentes tipos de datos). Entonces la estructura de datos, es aquel espacio que permite almacenar valores, ya sean del mismo o de diferentes tipos de datos. 2 CLASIFICACIÓN DE ESTRUCTURA DE DATOS A. Estructuras de Datos Simples: permiten almacenar un solo valor en un espacio de memoria (variable) a. Estructuras de Datos Estándar: es el almacenamiento que todos los lenguajes de programación utilizan, dado el tipo de dato que se defina. Por ejemplo, se tiene una estructura estándar de tipo real para una variable deno- minada precio: Declaración en C/C++: float precio; Representación Gráfica en Memoria, asignándole el valor de precio de 12.6: 12.6 float precio b. Estructuras de Datos No Estándar: es la estructura que no pertenece a un lenguaje de programación específico, y puede ser creado por el programador. En C/C++ se definen con la palabra reservada typedef. B. Estructuras de Datos Compuestas: permiten almacenar un conjunto de valores (celdas o nodos) en un espacio de memoria. Pueden ser de dos tipos: a. Estructuras de Datos Estáticos: necesitan definir su tamaño inicial, antes de la eje- cución del programa. Como ejemplo de este tipo de estructuras tenemos a los arre- glos unidimensionales, arreglos bidimensionales y estructuras (registros). Declaración de Arreglo Unidimensional en C/C++: char Mensaje[11]; Representación Gráfica en Memoria, asignándole un valor en cada celda: UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
  • 53. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 53Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones char Mensaje b i e n v e n i d o ` 0 ´ Declaración de Registro en C/C++: struct Paciente{ int codPaciente; string apePaciente; string nombPaciente; char generoPaciente; }; Representación Gráfica en Memoria, asignándole un valor en cada celda: b. Estructuras de Datos Dinámicos: no necesita definir tamaño inicial, ya que los es- pacios se van creando conforme se van ingresando los valores. Se tiene dos tipos: lineal, por que nodos se crean uno tras otro (Ejemplo: lista, colas y pilas), y no lineal, por que los nodos no necesariamente se encuentran uno tras otro (árbol y grafo). TEMA N° 2: ARREGLOS UNIDIMENSIONALES 1 DEFINICIÓN DE ARREGLOS UNIDIMENSIONALES También llamado vectores, es un conjunto finito y ordenado de elementos de un mismo tipo de dato (homogéneos). La definición de un arreglo es como sigue: TipoDato NombreArreglo[tamaño] Ejemplo: Entero M[10] Acceso a los elementos de un arreglo unidimensional: Nombre del arreglo [posición del elemento]; Ejemplo: Gráfico de Arreglo Unidimensional UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
  • 54. 54ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones 23 45 34 19 62edad edad[0] 0 edad[2] 2 edad[1] 1 edad[3] 3 edad[4] 4 Descripción: - Nombre del arreglo: edad. - Tamaño Máximo del arreglo (cantidad de celdas): 5 - Posición de cada celda: 0, 1, 2, 3, 4 (recorridos con la variable index: i , desde la posición 0 hasta la posición del tamaño máximo -1) - Elementos o valores dentro del arreglo, dada por cada celda: 23 en edad[0], 45 en edad[1], 34 en edad[2], 19 en edad[3] y 62 en edad[4], es decir para leer, mostrar u operar un valor del arreglo, escribe el nombre del arreglo y dentro de corchetes la posición de la celda del arreglo. El siguiente programa lee un arreglo de números enteros y encuentra el mayor y me- nor elemento. El máx de elementos es 100 pero solo ingresa n elementos. //Programa para hallar el mayor y menor elemento de un arreglo #includeiostream #include “LecturaDatos.h” #define MAXIMO 100 using namespace std; void leerarre(int N, int array[]) { int i; for(i=0;i=N-1;i++) { coutIngrese altura alumno A[i]:t; cinarray[i]; coutn; } } void comparar(int N, int array[]) { int i, mayor, menor; mayor=array[0]; menor=array[0]; for(i=0;i=N-1;i++) { if (array[i]mayor) mayor=array[i]; else if (array[i]menor) menor=array[i]; } coutEl mayor es :mayorn; coutEl menor es :menorn; } void main() { int A[MAXIMO]; int n; do{ coutIngrese cantidad de elementos (= a CERO y = que 100): ; n=leedatoe(); }while(n=0 || nMAXIMO); leerarre(n,A); comparar(n,A); system(PAUSE); } 2 ALGORITMOS DE ACTUALIZACIÓN Los Arreglos necesitan actualizarse mientras se efectúa algún proceso con ellos. La actualización de arreglos consiste en tres operaciones: Añadir elementos al final del arreglo (siempre y cuando exista espacio en el arreglo), Insertar elementos en UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
  • 55. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 55Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones cualquier posición del arreglo y Eliminar elementos. Añadir: Añadir un valor en la última posición. #includeiostream #include”LecturaDatos.h” #define MAX 100 using namespace std; void ingresadatos(int V[MAX], int n) { int i; coutIngrese elementos para el arreglo ; coutn; for(i=0;i=n-1;i++) { coutElemento [i]:; cinV[i]; } } void mostrar(int V[MAX], int n) { int i; coutLos elementos del arreglo son; coutn; for(i=0;i=n-1;i++) { coutElemento[i]:t; coutV[i]; coutn; } } int ultimoelemento(int a[MAX], int n) { int i,p = n; if (pMAX) { for(i=p;i=n;i++) //ingresa nuevo elemento { coutn Ingrese nuevo elemento de arreglo :t; cina[i]; } n=n+1; return n; } } void main() { int A[MAX]; int num,elem; do{ coutIngrese numero de elementos para el arreglo: ; num= leedatoee(); }while(num=0 || numMAX); ingresadatos(A,num); coutn; mostrar(A,num); coutn; elem=ultimoelemento(A, num); mostrar(A,elem); system(PAUSE); } Insertar: Insertar un valor en cualquier posición, desplazando los elementos desde la ultima celda hasta la posición que desea insertar. #includeiostream #include”LecturaDatos.h” #define MAX 100 using namespace std; void ingresadatos(int V[MAX], int n) { int i; coutIngrese elementos para el arreglo ; coutn; UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
  • 56. 56ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones for(i=0;i=n-1;i++) { coutElemento [i]:; cinV[i]; } } void mostrar(int V[MAX], int n) { int i; coutLos elementos del arreglo son; coutn; for(i=0;i=n-1;i++) { coutElemento[i]:t; coutV[i]; coutn; } } int posicion(int a[MAX], int n) { int i,p; coutn Ingrese posicion a insertar un elemento:t; p=leedatoe(); i=n-1; while (i=p) { a[i+1]=a[i]; i=i-1; } return p; } int nuevoelemento(int a[MAX],int p, int n) { int elem; coutn Ingrese nuevo elemento de arreglo a:t; elem=leedatoe(); a[p]=elem; n=n+1; return n; } void main() { int A[MAX]; int num,pos,elem; do{ coutIngrese numero de elementos para el arreglo: ; num= leedatoee(); }while(num=0 || numMAX); ingresadatos(A,num); coutn; mostrar(A,num); coutn; pos=posicion(A,num); elem=nuevoelemento(A,pos, num); mostrar(A,elem); system(PAUSE); } Eliminar: Eliminar un valor en cualquier posición, desplazando los elementos des- de la derecha del valor que se quiere eliminar. #includeiostream #include”LecturaDatos.h” #define MAX 100 using namespace std; void ingresadatos(int V[MAX], int n) { int i; coutIngrese elementos para el arreglo ; coutn; UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
  • 57. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 57Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones for(i=0;in;i++) { coutElemento [i]:; cinV[i]; } } void mostrar(int V[MAX], int n) { int i; coutLos elementos del arreglo son; coutn; for(i=0;in;i++) { coutElemento[i]:t; coutV[i]; coutn; } } int elimina(int a[MAX], int n) {int i,p; coutn Ingrese posicion a eliminar elemento de arreglo :t; p=leedatoe(); i=p; while (in) { a[i]=a[i+1]; i++; } return n-1; } void main() { int A[MAX]; int num,el; do{ coutIngrese numero de elementos para el arreglo: ; num= leedatoee(); }while(num=0 || numMAX); ingresadatos(A,num); coutn; mostrar(A,num); coutn; el=elimina(A,num); mostrar(A,el); system(PAUSE); } 3 BÚSQUEDA DE ARREGLOS UNIDIMENSIONALES La búsqueda es la recuperación de la información de los elementos de un arreglo. Para ello se necesita recorrer el arreglo y hacer uso de uno de los métodos de bús- queda de un elemento, revisaremos dos tipos: Búsqueda Secuencial y Búsqueda Binaria. A. Secuencial: recorre el arreglo celda por celda, verificando si es el elemento que se busca, usando una bandera llamada Encontrado, el cual se asume como falsa, y solo cambia a verdadera si encuentra el valor buscado, si terminado el recorrido en el arreglo, no lo encuentra, la bandera se queda en el estado de falsa. Es útil para arreglos con pocos elementos. #includeiostream #include”LecturaDatos.h” #define MAX 100 using namespace std; void ingresadatos(int V[MAX], int n) { int i; coutIngrese elementos para el arreglo ; coutn; UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
  • 58. 58ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones for(i=0;in;i++) { coutElemento [i]:; cinV[i]; } } void mostrar(int V[MAX], int n) { int i; coutLos elementos del arreglo son; coutn; for(i=0;in;i++) { coutElemento[i]:t; coutV[i]; coutn; } } void bsecuencial(int a[MAX], int n) { int elem,i; bool Encontrado = false; coutn Ingrese elemento a buscar en el arreglo :t; cinelem; for(i=0;in;i++) { if(a[i]==elem) { Encontrado=true; coutn Encontradot Posicion :titn; } } if(Encontrado==false) { coutn No Encontradot ; coutnn; } } void main() {int A[MAX]; int num; do{ coutIngrese numero de elementos para el arreglo: ; num= leedatoee(); }while(num=0 || numMAX); ingresadatos(A,num); coutn; mostrar(A,num); coutn; bsecuencial(A,num); system(PAUSE); } B. Búsqueda Binaria: Necesita que el arreglo se encuentre ordenado ascendente- mente para poder aplicar este algoritmo, que consiste en dividir el arreglo en dos partes y si la celda central es el elemento que se busca, termina el algoritmo, sino se verifica si el elemento buscado se encuentra a la derecha (mayor) o la izquierda (menor) del valor de la celda central, para solo buscar en esa porción del arreglo, volvendo a dividira esa parte en dos, y buscar un nuevo valor central, repitiendo los pasos anteriores. #includeiostream #include”LecturaDatos.h” #define MAX 100 using namespace std; void ingresadatos(int V[MAX], int n) { int i; coutIngrese elementos para el arreglo ;coutn; for(i=1;i=n;i++) { coutElemento [i]:;cinV[i]; } } void mostrar(int V[MAX], int n) UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
  • 59. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 59Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones { int i; coutLos elementos del arreglo son; coutn; for(i=1;i=n;i++) { coutElemento[i]:t;coutV[i]; } } void bbinaria(int a[MAX], int n) { int elem; int BAJO, ALTO, CENTRAL; BAJO=1; ALTO=n; coutn Ingrese elemento a buscar:t; cinelem; CENTRAL=((BAJO+ALTO)/2); while ((BAJO=ALTO) (a[CENTRAL]!=elem)) { if(elema[CENTRAL]) {ALTO=CENTRAL-1; CENTRAL=(BAJO+ALTO)/2; } else{ BAJO=CENTRAL+1; CENTRAL=(BAJO+ALTO)/2; } } if(elem==a[CENTRAL]) { coutn ENCONTRADO n; coutn a[CENTRAL] = a[CENTRAL]; coutn; } else coutn NO ENCONTRADO n ; } void main() {int A[MAX]; int num; do{ coutIngrese numero de elementos para el arreglo: ; num= leedatoee(); }while(num=0 || numMAX); ingresadatos(A,num); coutn; mostrar(A,num); coutn; bbinaria(A,num); system(PAUSE); } 4 ORDENACIÓN DE ARREGLOS UNIDIMENSIONALES Permite comparar elementos e intercambiar posiciones, ya sea en forma ascenden- te o descendente. //Ordenación por Burbuja #includeiostream #include”LecturaDatos.h” #define MAX 100 using namespace std; void ingresadatos(int V[MAX], int n) { int i; coutIngrese elementos para el arreglo ; coutn; for(i=0;in;i++) { coutElemento [i]:; cinV[i]; } UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
  • 60. 60ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones } void mostrar(int V[MAX], int n) { int i; coutLos elementos del arreglo son; coutn; for(i=0;in;i++) { coutElemento[i]:t; coutV[i]; coutn; } } void burbuja(int a[MAX], int n) { int i,j,temp; for(i=0;in-1;i++) for(j=n-1;j=i+1;j--) if (a[j]a[j-1]) { temp=a[j]; a[j]=a[j-1]; a[j-1]=temp; } } void main() {int A[MAX]; int num; do{ coutIngrese numero de elementos para el arreglo: ; num= leedatoee(); }while(num=0 || numMAX); ingresadatos(A,num); coutnn; burbuja(A,num); mostrar(A,num); system(PAUSE); } Diagrama Objetivos Inicio Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones ACTIVIDAD N° 1 Esta actividad puede consultarla en su aula virtual. UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
  • 61. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 61Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones TEMA N° 3: ARREGLOS BIDIMENSIONALES 1 DEFINICIÓN DE ARREGLOS BIDIMENSIONALES. También llamado matrices, es un conjunto finito y ordenado de elementos de un mismo tipo de dato. La definición de un arreglo es como sigue: TipoDato NombreMatriz[n°filas][nºcolumnas] Ejemplo: Entero M[4][5] //Lectura y Presentación de Datos en una Matriz: #includeiostream #include”LecturaDatos.h” #define MAX 100 using namespace std; void ingresadatos(int M[MAX][MAX], int nf,int nc) { int i,j; coutIngrese elementos para la matriz ; coutn; for(i=0;i=nf-1;i++) for(j=0;j=nc-1;j++) { coutElemento [i][j]:; cinM[i][j]; } } void mostrar(int M[MAX][MAX], int nf, int nc) { int i,j; coutLos elementos de la matriz son; coutn; for(i=0;i=nf-1;i++) {for(j=0;j=nc-1;j++) { coutM[i][j]; coutt; } coutn; } } void main() { int B[MAX][MAX]; int nf,nc; do{ coutIngrese numero de filas: ; nf= leedatoee(); }while(nf=0 || nfMAX); do{ coutIngrese numero de columnas: ; nc= leedatoee(); }while(nc=0 || ncMAX); ingresadatos(B,nf,nc); coutn; mostrar(B,nf,nc); coutn; } UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
  • 62. 62ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones //Diagonal Principal y Diagonales de una matriz ….. //Se entiende que se realizan los procedimientos de lectura de datos void diagonal_principal(int M[MAX][MAX], int nf, int nc) { int i,j; if(nf==nc) { for(i=0;i=nf-1;i++) { for(j=0;j=nc-1;j++) if(i==j) { coutn; coutM[i][j]n; } else cout ; coutn; } } else {coutColumnas y filas deben ser iguales; coutnn; } } void diagonalsecundaria(int M[MAX][MAX], int nf, int nc) { int i,j,k; k=nc-1; if(nf==nc) { for(i=0;inf;i++) { for(j=0;jnc;j++) if(j == k) { coutM[i][j]; } else coutt; k--; coutn; } } else { coutPara la Diagonales: columnas y filas deben ser iguales; coutnn; } } void diagonales(int M[MAX][MAX], int nf, int nc) { int i,j,k; k=nc-1; if(nf==nc) { for(i=0;i=nf-1;i++) { for(j=0;j=nc-1;j++) if(i==j || j==k) { coutn; coutM[i][j]n; } else {cout ;} k- -; coutn; } } UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
  • 63. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 63Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones else { coutColumnas y filas deben ser iguales; coutnn; } } void main() { int B[MAX][MAX]; int nf,nc; do{ coutIngrese numero de filas: ; nf= leedatoee(); }while(nf=0 || nfMAX); do{ coutIngrese numero de columnas: ; nc= leedatoee(); }while(nc=0 || ncMAX); ingresadatos(B,nf,nc); coutn; mostrar(B,nf,nc); coutn; coutLos elementos de la diagonal Principal: n; diagonal_principal(B,nf,nc); coutn; coutLos elementos de las diagonales : n; diagonales(B,nf,nc); coutn; system(PAUSE); } 2 ALGORITMOS DE ACTUALIZACIÓN DE ARREGLOS BIDIMENSIONALES //Insertar fila y columna de una matriz … //Se entiende que se realizan los procedimientos de lectura de datos int insertar_fila(int M[MAX][MAX], int nf, int nc) { int i,j,pos; do{ coutIngrese posicion para insertar fila: ; cinpos; }while(pos0 || posnf); for(i=nf-1;i=pos;i--) for(j=0;j=nc-1;j++) M[i+1][j]=M[i][j]; for(j=0;j=nc-1;j++) { coutM[pos][j] : ; cinM[pos][j]; } nf++; return nf; } int insertar_columna(int M[MAX][MAX], int nf, int nc) {int i,j,pos; do{ coutIngrese posicion para insertar columna: ; cinpos; }while(pos0 || posnc); for(i=0;i=nf-1;i++) for(j=nc-1;j=pos;j--) M[i][j+1]=M[i][j]; for(i=0;i=nf-1;i++) { coutM[i][pos] : ; cinM[i][pos]; } nc++; return nc; } UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
  • 64. 64ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones void main() { int B[MAX][MAX]; int nf,nc,fil,col; do{ coutIngrese numero de filas: ; nf= leedatoee(); }while(nf=0 || nfMAX); do{ coutIngrese numero de columnas: ; nc= leedatoee(); }while(nc=0 || ncMAX); ingresadatos(B,nf,nc); coutn; mostrar(B,nf,nc); coutn; coutInserta fila: n; fil=insertar_fila(B,nf,nc); coutn; coutMatriz Inicial con fila insertada; mostrar(B,fil,nc); coutn; coutInserta columna: n; col=insertar_columna(B,nf,nc); coutn; coutMatriz Inicial con columna insertada; mostrar(B,nf,col); coutn; system(PAUSE); } //Borrar fila y columna de una matriz … //Se entiende que se realizan los procedimientos de lectura de datos int borrar_fila(int M[MAX][MAX], int nf, int nc) { int i,j,pos; do{ coutIngrese posicion para borrar fila: ; cinpos; }while(pos0 || pos=nf); for(i=pos;i=nf-1;i++) for(j=0;j=nc-1;j++) M[i][j]=M[i+1][j]; nf--; return nf; } int borrar_columna(int M[MAX][MAX], int nf, int nc) { int i,j,pos; do{ coutIngrese posicion para insertar columna: ; cinpos; }while(pos0 || pos=nc); for(i=0;i=nf-1;i++) for(j=pos;j=nc-1;j++) M[i][j]=M[i][j+1]; nc- -; return nc; } void main() { int B[MAX][MAX] nf,nc,fil,col; do{ coutIngrese numero de filas: ; nf= leedatoee(); }while(nf=0 || nfMAX); do{ coutIngrese numero de columnas: ; UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
  • 65. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 65Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones nc= leedatoee(); }while(nc=0 || ncMAX); ingresadatos(B,nf,nc); coutn; mostrar(B,nf,nc); coutn; coutElimina fila: n; fil=borrar_fila(B,nf,nc); coutn; coutMatriz Inicial con fila eliminada; mostrar(B,fil,nc); coutn; coutElimina columna: n; col=borrar_columna(B,nf,nc); coutn; coutMatriz Inicial con columna eliminada; mostrar(B,nf,col); coutn; system(PAUSE); } Diagrama Objetivos Inicio Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones ACTIVIDAD N° 2 Esta actividad puede consultarla en su aula virtual. Diagrama Objetivos Inicio Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones LECTURA SELECCIONADA N° 1 ARRAYS MULTIDIMENSIONALES Jesús Carretero Pérez. García Carballena, Felix. Pérez Lobato José, 2007, Fundamentos de Programación. Pág. 196 Hasta ahora se ha trabajado con vectores de una única dimensión, llamados arrays uni- dimensionales. Pero el lenguaje de programación C también permite definir arrays de varias dimensiones. Suponga que se desea almacenar las temperaturas de un punto geográfico durante un año, minuto a minuto. Para este problema, se podría usar la siguiente definición: float temperaturas [366][24][60]; En ella encontramos: • Float es el tipo de dato de cada elemento. • Temperaturas es el nombre de la variable utilizada para el array multidimensional; • [366][24][60] indica el número de elementos del array en cada dimensión. La pri- mera dimensión tiene un total de 366 elementos, la segunda 24 y la tercera 60. La primera dimensión está junto al nombre de la variable. Aunque el ejemplo presenta tres dimensiones, podrían definirse muchas más. Lo habi- tual es usar dos y tres dimensiones. Si un array unidimensional se conoce como vector, un array bidimensional se denomina matriz. UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
  • 66. 66ollo nidos Actividades Autoevaluación as nadas Glosario Bibliografía torio Anotaciones Inicialización y acceso a un array multidimensional Considere ahora la siguiente definición de una matriz de 4 filas y 2 columnas: int matriz[4][2]; Si se conocen los valores de la matriz, se puede inicializar de forma similar a un array: int matriz[4][2]= { {11,12}, {21,22}, {31,32}, {41,42}, }; Para acceder al segundo elemento de la tercera fila se utiliza la siguiente expresión: matriz[2][1] Como se muestra en la figura 8.5, el índice de una dimensión toma valores de la misma manera que lo hace un vector: desde cero hasta el número de elementos menos uno. Distribución de los índices de una matriz. Un array multidimensional también es descrito como un array de arrays de ... Más concretamente, la variable matriz es un array de cuatro elementos. matriz[0] ,…, matriz[3] cuyos elementos son a su vez arrays de dos elementos cada uno matriz[i][0] ,…, matriz[i][1] para i de 0 a 3. En un array multidimensional de n dimensiones, los elementos de la última dimensión, que forman un vector, se almacenan siempre en memoria consecutivamente. En el caso de una matriz (n=2), esto significa que los valores se almacenan por filas, a di- ferencia de otros lenguajes de programación como FORTRAN donde se almacenan por columnas. En la siguiente figura se muestra de forma gráfica como todos los elementos de una misma fila se almacenan consecutivamente. Disposición de matriz en memoria. UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS
  • 67. ALGORÍTMIA Y ESTRUCTURA DE DATOS MANUAL AUTOFORMATIVO 67Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones Diagrama Objetivos Inicio Desarrollo de contenidos Actividades Autoevaluación Lecturas seleccionadas Glosario Bibliografía Recordatorio Anotaciones GLOSARIO DE LA AUNIDAD II Celda: es un espacio de memoria dentro de un arreglo, y si es bidimensional es referen- ciado por fila y columna que ocupe. Dimensión: es el conjunto de elementos que puede tener un arreglo, y puede ser desde una dimensión hasta n dimensiones. Objetivos Inicio os Actividades Autoevaluación s Glosario Bibliografía o Anotaciones BIBLIOGRAFÍA DE LA UNIDAD II Carretero Pérez, Jesús. García Carballena, Felix. Pérez Lobato José. Fundamentos de Programación. 1ra. ed. España: Thomson; 2007. Joyanes Aguilar, Luis. Fundamentos de Programación. 4ta. ed. España: McGraw-Hill; 2008. Lazo Aguirre Walter, programaciòn estructurada en C. problemas resueltos. Universi- dad Privada Antenor Orrego, 1995 Objetivos Inicio s Actividades Autoevaluación s Glosario Bibliografía o Anotaciones AUTOEVALUACIÓN DE LA UNIDAD II INSTRUCCIONES: Lee detenidamente y responde las siguientes preguntas: 1. Indique la alternativa que describa la característica de una estructura de datos estática: a) Necesita definir los valores antes de ejecutar el programa. b) No necesita definir un tamaño antes de ejecutar el programa. c) Necesita mostrar los valores antes de ejecutar el programa. d) Necesita definir un tamaño antes de ejecutar el programa. e) Necesita definir un tamaño después de ejecutar el programa. 2. Los tipos de datos: entero, real, cadena; pertenecen a la siguiente clase de estructu- ras de datos: a) Estructuras de Datos Simple No Estándar. b) Estructuras de Datos Compuesta Estática. c) Estructuras de Datos Simple Estándar. d) Estructuras de Datos Dinámica Lineal. e) Estructuras de Datos Dinámica No Lineal. 3. Indique la alternativa que contenga tres características de un arreglo: a) Homogéneo, Infinito, Secuencial. b) Homogéneo, Finito, Secuencial. c) Heterogéneo, Finito, Secuencial. d) Heterogéneo, Infinito, Secuencial. e) Homogéneo, Finito, No Secuencial. 4. En un arreglo unidimensional, se añade un elemento al final considerando: a) Que se elimine el último elemento. b) Que no importa que exceda el tamaño definido. UNIDAD II: ESTRUCTURAS DE DATOS ESTÁTICAS