Table Of ContentFUNDAMENTOS
DE PROGRAMACIÓN
Algoritmos, estructura
de datos y objetos
Cuarta edición
FUNDAMENTOS
DE PROGRAMACIÓN
Algoritmos, estructura
de datos y objetos
Cuarta edición
Luis Joyanes Aguilar
Catedrático de Lenguajes y Sistemas Informáticos
Facultad de Informática, Escuela Universitaria de Informática
Universidad Pontificia de Salamanca campus de Madrid
MADRID • BOGOTÁ • BUENOS AIRES • CARACAS • GUATEMALA • LISBOA • MÉXICO
NUEVA YORK • PANAMÁ • SAN JUAN • SANTIAGO • SÃO PAULO
AUCKLAND • HAMBURGO • LONDRES • MILÁN • MONTREAL • NUEVA DELHI • PARÍS
SAN FRANCISCO • SIDNEY • SINGAPUR • ST LOUIS • TOKIO • TORONTO
FUNDAMENTOS DE PROGRAMACIÓN. Algoritmos, estructura de datos
y objetos. Cuarta edición.
No está permitida la reproducción total o parcial de este libro, ni su tratamiento
informático, ni la transmisión de ninguna forma o por cualquier medio, ya sea elec-
trónico, mecánico, por fotocopia, por registro u otros métodos, sin el permiso previo
y por escrito de los titulares del Copyright.
DERECHOS RESERVADOS © 2008, respecto a la cuarta edición en español, por
McGRAW-HILL/INTERAMERICANA DE ESPAÑA, S. A. U.
Edifi cio Valrealty, 1.ª planta
Basauri, 17
28023 Aravaca (Madrid)
ISBN: 978-84-481-6111-8
Depósito legal: M.
Editores: José Luis García y Cristina Sánchez
Técnicos editoriales: Blanca Pecharromán y María León
Preimpresión: Nuria Fernández Sánchez
Cubierta: Escriña Diseño Gráfi co
Compuesto en: Gráfi cas Blanco, S. L.
Impreso en:
IMPRESO EN ESPAÑA - PRINTED IN SPAIN
Contenido
Prefacio a la cuarta edición ................................................................................................................................................... xvii
PARTE I. ALGORITMOS Y HERRAMIENTAS DE PROGRAMACIÓN ................................................ 1
Capítulo 1. Introducción a las computadoras y los lenguajes de programación ................................................................ 3
INTRODUCCIÓN ......................................................................................................................................................... 3
1.1. ¿Qué es una computadora? .................................................................................................................................. 4
1.1.1. Origen de las computadoras .................................................................................................................... 5
1.1.2. Clasificación de las computadoras ........................................................................................................... 6
1.2. Organización física de una computadora ............................................................................................................. 7
1.2.1. Dispositivos de Entrada/Salida (E/S): periféricos ................................................................................... 8
1.2.2. La memoria principal ............................................................................................................................... 9
1.2.3. Unidades de medida de memoria ............................................................................................................ 10
1.2.4. El procesador ........................................................................................................................................... 12
1.2.5. Propuestas para selección de la computadora ideal para aprender programación o para actividades
profesionales ............................................................................................................................................ 14
1.3. Representación de la información en las computadoras ..................................................................................... 15
1.3.1. Representación de textos ......................................................................................................................... 15
1.3.2. Representación de valores numéricos ...................................................................................................... 16
1.3.3. Representación de imágenes .................................................................................................................... 17
1.3.4. Representación de sonidos ....................................................................................................................... 18
1.4. Codificación de la información ........................................................................................................................... 19
1.4.1. Sistemas de numeración .......................................................................................................................... 19
1.5. Dispositivos de almacenamiento secundario (almacenamento masivo) .............................................................. 21
1.5.1. Discos magnéticos ................................................................................................................................... 21
1.5.2. Discos ópticos: CD-ROM y DVD ........................................................................................................... 21
1.5.3. Discos y memorias Flash USB ................................................................................................................ 24
1.5.4. Otros dispositivos de Entrada y Salida (E/S) .......................................................................................... 24
1.6. Conectores de dispositivos de E/S ....................................................................................................................... 26
1.6.1. Puertos serie y paralelo ............................................................................................................................ 26
1.6.2. USB .......................................................................................................................................................... 27
1.6.3. Bus IEEE Firewire – 1394 ....................................................................................................................... 27
1.7. Redes, Web y Web 2.0 ......................................................................................................................................... 28
1.7.1. Redes P2P, igual-a-igual (peer-to-peer, P2P) .......................................................................................... 29
1.7.2. Aplicaciones de las redes de comunicaciones ......................................................................................... 29
1.7.3. Módem ..................................................................................................................................................... 30
1.7.4. Internet y la World Wide Web ................................................................................................................. 30
1.8. El software (los programas) ................................................................................................................................. 32
1.8.1. Software del sistema ................................................................................................................................ 32
1.8.2. Software de aplicación ............................................................................................................................. 33
1.8.3. Sistema operativo ..................................................................................................................................... 34
1.8.3.1. Multiprogramación/Multitarea .................................................................................................. 35
1.8.3.2. Tiempo compartido (múltiples usuarios, time sharing) ........................................................... 35
1.8.3.3. Multiproceso ............................................................................................................................. 35
vi Contenido
1.9. Lenguajes de programación ............................................................................................................................... 36
1.9.1. Traductores de lenguaje: el proceso de traducción de un programa ..................................................... 37
1.9.2. La compilación y sus fases .................................................................................................................... 38
1.9.3. Evolución de los lenguajes de programación ........................................................................................ 39
1.9.4. Paradigmas de programación................................................................................................................. 40
1.10. Breve historia de los lenguajes de programación .............................................................................................. 42
RESUMEN .................................................................................................................................................................... 43
Capítulo 2. Metodología de la programación y desarrollo de software ............................................................................. 45
INTRODUCCIÓN ......................................................................................................................................................... 45
2.1. Fases en la resolución de problemas ................................................................................................................... 46
2.1.1. Análisis del problema .............................................................................................................................. 47
2.1.2. Diseño del algoritmo ................................................................................................................................ 48
2.1.3. Herramientas de programación ................................................................................................................ 48
2.1.4. Codificación de un programa ................................................................................................................... 51
2.1.5. Compilación y ejecución de un programa ............................................................................................... 52
2.1.6. Verificación y depuración de un programa .............................................................................................. 52
2.1.7. Documentación y mantenimiento ............................................................................................................ 53
2.2. Programación modular ......................................................................................................................................... 54
2.3. Programación estructurada .................................................................................................................................. 54
2.3.1. Datos locales y datos globales ................................................................................................................. 55
2.3.2. Modelado del mundo real ........................................................................................................................ 56
2.4. Programación orientada a objetos ........................................................................................................................ 56
2.4.1. Propiedades fundamentales de la orientación a objetos .......................................................................... 57
2.4.2. Abstracción .............................................................................................................................................. 57
2.4.3. Encapsulación y ocultación de datos ....................................................................................................... 58
2.4.4. Objetos ..................................................................................................................................................... 59
2.4.5. Clases ....................................................................................................................................................... 61
2.4.6. Generalización y especialización: herencia ............................................................................................. 61
2.4.7 Reusabilidad ............................................................................................................................................. 63
2.4.8. Polimorfismo ............................................................................................................................................ 63
2.5. Concepto y características de algoritmos ............................................................................................................ 64
2.5.1. Características de los algoritmos ............................................................................................................. 65
2.5.2. Diseño del algoritmo ................................................................................................................................ 66
2.6. Escritura de algoritmos ........................................................................................................................................ 68
2.7. Representación gráfica de los algoritmos ............................................................................................................ 69
2.7.1. Pseudocódigo ........................................................................................................................................... 70
2.7.2. Diagramas de flujo ................................................................................................................................... 71
2.7.3. Diagramas de Nassi-Schneiderman (N-S) ............................................................................................... 80
RESUMEN .................................................................................................................................................................... 81
EJERCICIOS ................................................................................................................................................................. 81
Capítulo 3. Estructura general de un programa .................................................................................................................. 83
INTRODUCCIÓN ......................................................................................................................................................... 83
3.1. Concepto de programa ......................................................................................................................................... 84
3.2. Partes constitutivas de un programa .................................................................................................................... 84
3.3. Instrucciones y tipos de instrucciones ................................................................................................................. 85
3.3.1. Tipos de instrucciones ............................................................................................................................. 85
3.3.2. Instrucciones de asignación ..................................................................................................................... 86
3.3.3. Instrucciones de lectura de datos (entrada) ............................................................................................. 87
3.3.4. Instrucciones de escritura de resultados (salida) ..................................................................................... 87
3.3.5. Instrucciones de bifurcación .................................................................................................................... 87
3.4. Elementos básicos de un programa ..................................................................................................................... 89
3.5. Datos, tipos de datos y operaciones primitivas ................................................................................................... 89
3.5.1. Datos numéricos ...................................................................................................................................... 90
3.5.2. Datos lógicos (booleanos) ....................................................................................................................... 92
3.5.3. Datos tipo carácter y tipo cadena............................................................................................................. 92
Contenido vii
3.6. Constantes y variables ....................................................................................................................................... 92
3.6.1. Declaración de constants y variables ..................................................................................................... 94
3.7. Expresiones ........................................................................................................................................................ 94
3.7.1. Expresiones aritméticas ......................................................................................................................... 95
3.7.2. Reglas de prioridad ................................................................................................................................ 97
3.7.3. Expresiones lógicas (booleanas) ........................................................................................................... 99
3.8. Funciones internas ............................................................................................................................................. 102
3.9. La operación de asignación ............................................................................................................................... 104
3.9.1. Asignación aritmética ............................................................................................................................ 105
3.9.2. Asignación lógica .................................................................................................................................. 105
3.9.3. Asignación de cadenas de caracteres..................................................................................................... 105
3.9.4. Asignación múltiple ............................................................................................................................... 105
3.9.5. Conversión de tipo ................................................................................................................................. 106
3.10. Entrada y salida de información ........................................................................................................................ 107
3.11. Escritura de algoritmos/programas .................................................................................................................... 108
3.11.1. Cabecera del programa o algoritmo .................................................................................................... 108
3.11.2. Declaración de variables ..................................................................................................................... 108
3.11.3. Declaración de constantes numéricas .................................................................................................. 109
3.11.4. Declaración de constantes y variables carácter ................................................................................... 109
3.11.5. Comentarios ......................................................................................................................................... 110
3.11.6. Estilo de escritura de algoritmos/programas ....................................................................................... 111
ACTIVIDADES DE PROGRAMACIÓN RESUELTAS .............................................................................................. 113
CONCEPTOS CLAVE .................................................................................................................................................. 124
RESUMEN .................................................................................................................................................................... 124
EJERCICIOS ................................................................................................................................................................. 125
Capítulo 4. Flujo de control I: Estructuras selectivas ......................................................................................................... 127
INTRODUCCIÓN ......................................................................................................................................................... 127
4.1. El flujo de control de un programa ...................................................................................................................... 128
4.2. Estructura secuencial ........................................................................................................................................... 128
4.3. Estructuras selectivas ........................................................................................................................................... 130
4.4. Alternativa simple (si-entonces/if-then) .................................................................................................... 131
4.4.1. Alternativa doble (si-entonces-sino/if-then-else) .................................................................... 132
4.5. Alternativa múltiple (según_sea, caso de/case) ........................................................................................ 137
4.6. Estructuras de decisión anidadas (en escalera) .................................................................................................... 144
4.7. La sentencia ir-a (goto) ................................................................................................................................... 148
ACTIVIDADES DE PROGRAMACIÓN RESUELTAS .............................................................................................. 151
CONCEPTOS CLAVE .................................................................................................................................................. 154
RESUMEN .................................................................................................................................................................... 154
EJERCICIOS ................................................................................................................................................................. 155
Capítulo 5. Flujo de control II: Estructuras repetitivas ...................................................................................................... 157
INTRODUCCIÓN ......................................................................................................................................................... 157
5.1. Estructuras repetitivas .......................................................................................................................................... 158
5.2. Estructura mientras ("while") ..................................................................................................................... 160
5.2.1. Ejecución de un bucle cero veces ............................................................................................................ 162
5.2.2. Bucles infinitos ........................................................................................................................................ 163
5.2.3. Terminación de bucles con datos de entrada ........................................................................................... 163
5.3. Estructura hacer-mientras ("do-while") ................................................................................................. 165
5.4. Diferencias entre mientras (while) y hacer-mientras (do-while): una aplicación en C++ .................... 167
5.5. Estructura repetir ("repeat") ........................................................................................................................ 168
5.6. Estructura desde/para ("for") ........................................................................................................................ 171
5.6.1. Otras representaciones de estructuras repetitivas desde/para (for) .................................................... 171
5.6.2. Realización de una estructura desde con estructura mientras ............................................................ 174
5.7. Salidas internas de los bucles .............................................................................................................................. 175
5.8. Sentencias de salto interrumpir (break) y continuar (continue) ............................................................ 176
5.8.1. Sentencia interrumpir (break) ........................................................................................................... 176
5.8.2. Sentencia continuar (continue) ......................................................................................................... 177
viii Contenido
5.9. Comparación de bucles while, for y do-while: una aplicación en C++ ..................................................... 178
5.10. Diseño de bucles (lazos) .................................................................................................................................... 179
5.10.1. Bucles para diseño de sumas y productos ........................................................................................... 179
5.10.2. Fin de un bucle .................................................................................................................................... 179
5.11. Estructuras repetitivas anidadas ......................................................................................................................... 181
5.11.1. Bucles (lazos) anidados: una aplicación en C++ ................................................................................ 183
ACTIVIDADES DE PROGRAMACIÓN RESUELTAS .............................................................................................. 186
CONCEPTOS CLAVE .................................................................................................................................................. 197
RESUMEN .................................................................................................................................................................... 197
EJERCICIOS ................................................................................................................................................................. 198
REFERENCIAS BIBLIOGRÁFICAS .......................................................................................................................... 199
Capítulo 6. Subprogramas (subalgoritmos): Funciones ..................................................................................................... 201
INTRODUCCIÓN ......................................................................................................................................................... 201
6.1. Introducción a los subalgoritmos o subprogramas ............................................................................................ 202
6.2. Funciones ........................................................................................................................................................... 203
6.2.1. Declaración de funciones ......................................................................................................................... 204
6.2.2. Invocación a las funciones ....................................................................................................................... 205
6.3. Procedimientos (subrutinas) ................................................................................................................................ 210
6.3.1. Sustitución de argumentos/parámetros .................................................................................................... 211
6.4. Ámbito: variables locales y globales ................................................................................................................... 215
6.5. Comunicación con subprogramas: paso de parámetros....................................................................................... 218
6.5.1. Paso de parámetros .................................................................................................................................. 219
6.5.2. Paso por valor .......................................................................................................................................... 219
6.5.3. Paso por referencia................................................................................................................................... 220
6.5.4. Comparaciones de los métodos de paso de parámetros .......................................................................... 221
6.5.5. Síntesis de la transmisión de parámetros ................................................................................................. 223
6.6. Funciones y procedimientos como parámetros ................................................................................................... 225
6.7. Los efectos laterales ............................................................................................................................................. 227
6.7.1. En procedimientos ................................................................................................................................... 227
6.7.2. En funciones ............................................................................................................................................ 228
6.8. Recursión (recursividad) ...................................................................................................................................... 229
6.9. Funciones en C/C++ , Java y C# ......................................................................................................................... 231
6.10. Ámbito (alcance) y almacenamiento en C/C++ y Java ....................................................................................... 233
6.11. Sobrecarga de funciones en C++ y Java .............................................................................................................. 235
ACTIVIDADES DE PROGRAMACIÓN RESUELTAS .............................................................................................. 238
CONCEPTOS CLAVE .................................................................................................................................................. 242
RESUMEN .................................................................................................................................................................... 242
EJERCICIOS ................................................................................................................................................................. 243
PARTE II. ESTRUCTURA DE DATOS ......................................................................................................... 245
Capítulo 7. Estructuras de datos I (arrays y estructuras) .................................................................................................... 247
INTRODUCCIÓN ......................................................................................................................................................... 247
7.1. Introducción a las estructuras de datos ................................................................................................................ 248
7.2. Arrays (arreglos) unidimensionales: los vectores ................................................................................................ 248
7.3. Operaciones con vectores .................................................................................................................................... 251
7.3.1. Asignación ............................................................................................................................................... 252
7.3.2. Lectura/escritura de datos ........................................................................................................................ 253
7.3.3. Acceso secuencial al vector (recorrido) ................................................................................................... 253
7.3.4. Actualización de un vector ...................................................................................................................... 255
7.4. Arrays de varias dimensiones .............................................................................................................................. 258
7.4.1. Arrays bidimensionales (tablas/matrices) ................................................................................................ 258
7.5. Arrays multidimensionales .................................................................................................................................. 260
7.6. Almacenamiento de arrays en memoria .............................................................................................................. 262
7.6.1. Almacenamiento de un vector ................................................................................................................. 262
7.6.2. Almacenamiento de arrays multidimensionales ...................................................................................... 263