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. .
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
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
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