You are on page 1of 20

Segunda Edicin Libro de problemas Fundamentos de programacin A l g o r i t m o s , E s t r u c t u ra s d e d a t o s y O b j e t o s L u i s J O YA N E S A G U I L A R

FUNDAMENTOS DE PROGRAMACIN Libro de problemas Segunda edicin

FUNDAMENTOS DE PROGRAMACIN Libro de problemas Segunda edicin Luis Joyanes Aguilar Luis Rodrguez Baena Matilde Fernndez Azuela Departamento de Lenguajes y Sistemas Informticos e Ingeniera del Software Facultad de Informtica/Escuela Universitaria de Informtica Universidad Pontificia de Salam anca, campus Madrid

MADRID BUENOS AIRES CARACAS GUATEMALA LISBOA MXICO NUEVA YORK PANAM SAN JUAN F DE BOGOT SANTIAGO S O PAULO AUCKLAND HAMBURGO LONDRES MILN MONTREAL NUEVA RS SAN FRANCISCO SIDNEY SINGAPUR ST. LOUIS TOKIO TORONTO

FUNDAMENTOS DE PROGRAMACIN. Libro de problemas. Segunda edicin No est permitida la reproduccin total o parcial de este libro, ni su tratamiento informtico, ni la tra nsmisin de ninguna forma o por cualquier medio, ya sea electrnico, mecnico, por fot ocopia, por registro u otros mtodos, sin el permiso previo y por escrito de los t itulares del Copyright. DERECHOS RESERVADOS 2003, respecto a la segunda edicin en espaol, por McGRAW-HILL/INTERAMERICANA DE ESPAA, S. A. U. Edificio Valrealty, 1. p lanta Basauri, 17 28023 Aravaca (Madrid) ISBN: 978-84-481-3986-5 Depsito legal: S E-1388-2011 Editora: Concepcin Fernndez Madrid Asist. editorial: Amelia Nieva Diseo de cubierta: Design Master DIMA Preimpresin: Puntographic, S. L. Impreso en: Pub lidisa IMPRESO EN ESPAA - PRINTED IN SPAIN

CONTENIDO Prlogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi Captulo 1. Algoritmos y programas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1. Configuracin de u na computadora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2. Lenguajes de programacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3. Resolucin de problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.1. Fase de resolucin del problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.1.1. Anlisis de l problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.1.2. Diseo del algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.1.3. Verificacin de algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.2. Fase de implemen tacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.4. Ejercicios resueltos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Captulo 2. La resolucin de problemas con computadoras y las herramientas de programacin . . . . . . 2.1. Datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.1. Constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.2. Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1. 3. Expresiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.4. Funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2. Representacin de algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3. Diagrama de flujo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4. Diagrama Nassi-Schneiderman . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5. Pseudocdig o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5.1. Comentarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5.2. Palabras reservadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5.3. Identificadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5.4. Operadores y signos de puntuacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5.5. Literales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.6. Ejercicios resueltos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Captulo 3. Estru ctura general de un programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1. Estructura de un programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2. Estructura general de un algoritmo en pseudocdigo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3. La operacin de asignacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1 2 3 3 3 3 5 5 6 15 15 16 16 16 17 18 18 19 20 20 21 21 22 22 22 39 39 40 41 v

vimmContenido 3.3.1. Contadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.2. Acumuladores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.3. Interruptores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.4. Ejercicios resueltos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Captulo 4. Introduccin a la programacin estructurada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1. Prog ramacin estructurada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2. Teorema de Bhm y Jacopini . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4. 3. Control del flujo de un programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.1. Estructura secuencial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.2. Estructura selectiva . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.3. Estructura repetitiva . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.4. Estructura anidada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.5. Sentencias de salto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4. Ejercicios resueltos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Captulo 5. S ubprogramas (subalgoritmos), procedimientos y funciones . . . . . . . . . . . . . . . . . . . . . . . . . 5.1. Programacin modular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2. Fun ciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2.1. Declaracin de funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3. Procedimientos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3.1. Declaracin de p rocedimientos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4. Estructura general de un algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.5. Paso de parmetros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.6. Variables locales y globales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.7. Recursividad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.8. Ejercicios resueltos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Captulo 6. Estructuras de datos (arrays y registros) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6. 1. Datos estructurados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2. Arrays (arreglos) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2.1. Arrays unidimensionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2.2. Arrays b idimensionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2.3. Recorrido de los elementos del array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2.4. Arrays como parmetr os . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.3. Conjuntos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.4. Registr os . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.4.1. Arrays de registros y arrays paralelos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 .5. Ejercicios resueltos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Captulo 7. Las cadenas de ca racteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.1. 7.2. 7.3. 7.4. Cadenas . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Operaciones con cadenas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Funciones tile s para la manipulacin de cadenas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ejercicios resueltos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 41 42 42 55 55 55 56 56 56 58 60 61 61 79 79 80 80 81 81 81 82 84 84 85 105 105 106 107 107 10 8 109 109 111 111 112 149 149 150 151 151 159 159 160 160 160 161 161 Captulo 8. Archivos (ficheros). Archivos secuenciales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.1. Conceptos generales so bre archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.1.1. Jerarquizacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.1.2. Clasificacin de los archivos segn su funcin . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.1.3. Operaciones bsicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.1.4. Otras operaciones usuales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 .1.5. Soportes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Contenidommvii 8.2. Flujos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.3. Organizacin secu encial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.3.1. Archivos de texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.3.2. Man tenimiento de archivos secuenciales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.4. Ejercicios resueltos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Captulo 9. Archivos directos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Organizacin directa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.1.1. Funciones de conversin de clave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.1.2. Tratamiento de sinnimos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 .1.3. Mantenimiento de archivos directos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.2. Organizacin secuencial indexada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.3. Modos de a cceso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.3.1. Archivos indexados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.4. Ejerc icios resueltos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Captulo 10. Ordenacin, bsqueda e intercalac in . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bsqueda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.1.1. Bsqueda secuencial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.1.2. Bsqueda binaria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.1.3. Bsqueda por transformacin de cla ves . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.1.3.1. Funcio nes de conversin de clave . . . . . . . . . . . . . . . . . . . . . . . . . . 10. 1.3.2. Resolucin de colisiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2. Ordenacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2.1. Orden acin interna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2.1.1. Seleccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2.1.2. Burbuja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 .2.1.3. Insercin directa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2.1.4. Insercin binaria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2.1.5. Shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 .2.1.6. Ordenacin rpida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.3. Intercalacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.4. Ejer cicios resueltos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Captulo 11. Bsqueda, ordenacin y fusin exte rnas (archivos) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.1. Conceptos generales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2. Bsqueda externa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.3. Fusin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.4. Ordena cin externa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.4.1. Particin de archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.4.1.1. Particin por contenido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.4.1.2. Particin en secuencias de longitud 1 . . . . . . . . . . . . . . . . . . . . . . . . 11.4.1.3. Particin en secuencias de longitud N . . . . .

. . . . . . . . . . . . . . . . . . 11.4.1.4. Particin en secuencias de longitud N con clasificacin interna de dichas secuencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.4.1.5. Particin segn el mtodo de seleccin por sustitucin . . . . . . . . . . . 11.4.1.6. Particin por el mtodo de se leccin natural . . . . . . . . . . . . . . . . . . 11.4.2. Ordenacin por mezcla di recta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.4.3. Ordenacin por mezcla natural . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.5. Ejercicios resueltos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C aptulo 12. Estructuras dinmicas lineales de datos (listas enlazadas, pilas, colas) . . . . . . . . . . . . . . . . . 12.1. Estructuras dinmicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.2. Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.1. 9.1. 161 161 162 163 164 185 185 186 187 187 187 189 189 190 223 223 223 224 224 224 226 227 227 227 228 228 228 229 229 230 232 239 239 239 239 240 240 240 240 240 240 241 241 241 241 242 261 261 262

viiimmContenido 12.3. 12.4. 12.5. Pilas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.3.1. Ap licaciones de las pilas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Colas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.4 .1. Doble cola . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.4.2. Aplicaciones de las colas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ejercic ios resueltos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 266 266 266 267 267 307 307 308 308 30 9 310 311 312 312 313 313 315 333 333 334 335 336 357 357 357 358 358 358 359 36 0 360 360 360 363 363 364 364 365 366 366 367 368 369 369 370 370 371 371 Captulo 13. Estructuras de datos no lineales (rboles y grafos) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.1. rboles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.1.1. Terminologa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.1.2. rboles binarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.1.2.1. Conversin de un rbol general en binario . . . . . . . . . . . . . . . . . . . . 13.1.2.2. Implementacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.1.2.3. Recorridos de un rbol bin ario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.1.2.4. rbol bin ario de bsqueda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 3.2. Grafos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.2.1. Terminologa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.2.1. Representacin de los grafos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.3. Ejercicios resueltos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Captulo 14. Recursividad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.1. Concepto y tipos de recursividad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.2. Uso adecuado de la recursivi dad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.3. Mtodos para la resolucin de problemas que utilizan recursividad . . . . . . . . . . . . . . . . 14.4. Ejercicios resueltos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C aptulo15. Introduccin a la Programacin Orientada a Objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.1. Mecanismos de abstraccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.1 .1. Funciones y procedimientos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.1.2. Mdulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.1.3. Tipos dat os abstractos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Modelado del mundo real: clases y objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.2.1. Atributos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.2.2. Comportamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.2.3. Identidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 5.2.4. Paso de mensajes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . El enfoque orientado a objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Clases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.4.1. Declaracin de clases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Representacin grfica de una clase en UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.5.1. Atributos . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . 15.5.2. Operaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.5.3. Representacin grfica de una clase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.5.4. Notacin de objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.5.5. Reglas pa ra encontrar clases en el anlisis . . . . . . . . . . . . . . . . . . . . . . . . . . Responsabilidad de una clase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Declaracin de objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . L os miembros de un objeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Constructores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A cceso a los miembros de un objeto, visibilidad y encapsulamiento . . . . . . . . . . . . . . Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ejercicios resueltos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.2. 15.3. 15.4. 15.5. 15.6. 15.7. 15.8. 15.9. 15.10. 15.11. 15.12.

. . . . .

Contenidommix Captulo 16. Relaciones: Asociacin, Generalizacin, Herencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.1. 16.2. 16.3. 16.4. 16.5. 16.6. 16 .7. Relaciones entre clases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Asociaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Agregaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.3.1. Composicin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Jerarqua de clases: Generalizacin y Especializacin . . . . . . . . . . . . . . . . . . . . . . . . . Clases abstractas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Polimorfismo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ejercicios resueltos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379 379 379 382 383 384 392 394 395 407 407 407 407 407 408 409 409 409 410 410 411 411 412 412 412 412 413 413 413 414 414 414 415 416 417 417 418 418 419 420 421 422 425 431 Apndice A. Especificaciones del lenguaje algortmico UPSAM. Versin 2.0 . . . . . . . . . . . . . . . . . . . . . . A.1. Elementos del lenguaje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.1 .1. Identificadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.1.2. Comentarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.1 .3. Tipos de datos estndar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.1.4. Constantes de tipos de datos estndar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.1.5. Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.2. Estructura de un programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.2.1. Declaracin de tipos de datos estructurados . . . . . . . . . . . . . . . . . . . . . . . . . . . A.2.2. Declaracin de constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.2.3. Declaracin de variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.2.4. Bibliot eca de funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.2.5. Procedimientos de entrada/salida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.2.6. Instruccin de asignacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.3. Estructuras de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.3.1. Estructuras selectivas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.3.2. Estructuras repetitivas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.4. Programacin modular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.4.1. Cuestiones generales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.4.2. Procedimientos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.4.3. Funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.5. Archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.5.1. Archivos secuenciales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.5.2. Archivos de texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.5.3. Archivos directos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.5.4. Consideraciones adicionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.6. Variables dinmicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . A.7. Programacin orientada a objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.7.1. Cables y objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.7.2. Atributos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.7.3. Mtodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.7.4. Herencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.8. Palabras reservadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Apndice B. Bibliografa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ndice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . .

PRLOGO La iniciacin de un estudiante de informtica, de ingeniera de sistemas, de ciencias d e la computacin, o de cualquier otra rama de las ciencias e ingeniera en las tcnicas de programacin del siglo XXI requiere no slo del aprendizaje clsico del diseo de al goritmos y de la comprensin de las tcnicas estructuradas, sino tambin de tcnicas ori entadas a objetos. Por esta circunstancia, esta 2. edicin ha introducido como gran novedad un captulo completo de recursividad, que muchos lectores de la primera e dicin nos haban solicitado, as como dos captulos, lo ms completos posibles, sobre pro piedades y tcnicas de programacin orientada a objetos (POO). La POO se ha converti do en un paradigma importante en todos los campos de las Ciencias de la Computac in y, por ello, es importante ensear programacin OO desde los primeros cursos de pr ogramacin. Este libro pretende iniciar al lector en la programacin orientada a obj etos, ensendole las tcnicas bsicas con el objetivo fundamental de poder aprender en una segunda etapa y de modo riguroso a programar con un enfoque orientado a obje tos y con ayuda de algn lenguaje OO tal como C++, Java o C#, e incluso Visual Bas ic o mejor VB .Net. Para conseguir los objetivos del libro utilizaremos fundamen talmente el lenguaje algortmico, con formato de pseudocdigo, herramienta ya probad a y experimentada, no slo en la primera edicin de esta obra, sino tambin en las tre s ediciones de la obra complementaria Fundamentos de programacin, y muy utilizada en numerosas universidades y centros de formacin de todo el mundo. La clave para desarrollar software es aplicar el concepto de abstraccin en el diseo e implement acin de proyectos software. En base a ello, se busca tambin ensear a resolver probl emas utilizando diversos niveles de abstraccin, y ensear cmo visualizar y analizar los problemas en niveles diferentes. El libro contiene los temas ms importantes d e la programacin tradicional tales como estructuras de control, funciones, estruc turas de datos, mtodos de ordenacin y bsqueda, junto con los conceptos fundamentale s de orientacin a objetos tales como clases, objetos, herencia, relaciones, etc. OBJETIVOS DEL LIBRO El libro pretende ensear a programar utilizando conceptos fundamentales tales com o: 1. 2. 3. Algoritmos (conjunto de instrucciones programadas para resolver una tarea especfica). Datos (una coleccin de datos que se proporcionan a los algoritmo s que se han de ejecutar para encontrar una solucin: los datos se organizarn en es tructuras de datos). Objetos (el conjunto de datos y algoritmos que los manipula n, encapsulados en un tipo de dato nuevo conocido como objeto). xi

xiimmPrlogo 4. 5. 6. Clases (tipos de objetos con igual estado y comportamiento, o dicho de otro modo, los mismos atributos y operaciones). Estructuras de datos (conjunto de organizaciones de datos para tratar y manipular eficazmente datos h omogneos y heterogneos). Temas avanzados (archivos, recursividad y ordenaciones/bsq uedas avanzadas). Los dos primeros aspectos, algoritmos y datos, han permanecido invariables a lo largo de la corta historia de la informtica/computacin, pero la interrelacin entre ellos s que ha variado y continuar hacindolo. Esta interrelacin se conoce como parad igma de programacin. As pues y en resumen, los objetivos fundamentales de esta obr a son: introduccin a la programacin estructurada, estructuras de datos y programac in orientada a objetos utilizando un lenguaje algortmico UPSAM 2.0 que utiliza com o herramienta fundamental el pseudocdigo, aunque tambin se ensean las herramientas tradicionales tales como diagramas de flujo y diagramas N-S. EL LIBRO COMO HERRAMIENTA DOCENTE La experiencia de los autores desde hace muchos aos con obras muy implantadas en el mundo universitario, pero en este caso y de modo especial, la primera edicin d e Fundamentos de programacin. Libro de problemas nos ha llevado a mantener la est ructura de esta obra, actualizando el contenido que se prev para los estudiantes del actual siglo XXI y con un lenguaje de programacin como es el lenguaje algortmi co UPSAM 2.0 que pretende contener la sintaxis y las estructuras gramaticales de lenguajes modernos como Java y C# o los ya clsicos C y C++, sin olvidar los popu lares Pascal o FORTRAN. Por ello, en el contenido de la obra hemos tenido en cue nta no slo las directrices de los planes de estudio espaoles de ingeniera informtica (antigua licenciatura en informtica) y ciencias de la computacin, sino tambin de i ngenieras tales como industriales, telecomunicaciones, agrnomos o minas, o las ms r ecientes incorporadas en Espaa, como ingeniera en geodesia, ingeniera qumica o ingen iera telemtica. Nuestro conocimiento del mundo educativo latinoamericano nos ha ll evado a pensar tambin en las carreras de ingeniera de sistemas computacionales y l as licenciaturas en informtica y en sistemas de informacin, como se las conoce en Latinoamrica. Por todo lo anterior, el contenido del libro intenta seguir un prog rama estndar de un primer curso de introduccin a la programacin y, segn situaciones, un segundo curso de programacin de nivel medio, en asignaturas tales como Metodo loga de la programacin, Fundamentos de programacin, Introduccin a la programacin,... El contenido del libro abarca los citados programas y comienza con la introduccin a los algoritmos y a la programacin, para llegar a estructuras de datos y objeto s. Por esta circunstancia, la estructura del curso no ha de ser secuencial en su totalidad, sino que el profesor/maestro y el alumno/lector podrn estudiar sus ma terias en el orden que consideren ms oportuno. Se trata de describir los dos para digmas ms populares en el mundo de la programacin: el procedimental y el orientado a objetos. Los cursos de programacin en sus niveles inicial y medio estn evolucio nando para aprovechar las ventajas de nuevas y futuras tendencias en ingeniera de software y en diseo de lenguajes de programacin, especficamente diseo y programacin orientada a objetos. Algunas facultades y escuelas de ingenieros, junto con la n ueva formacin profesional (ciclos formativos de nivel superior) en Espaa y en Lati noamericana, estn introduciendo a sus alumnos en la programacin orientada a objeto s, inmediatamente despus del conocimiento de la programacin estructurada, e inclus o en ocasiones antes. El contenido del libro se ha pensado en el desarrollo de d os cuatrimestres o semestres (segn la terminologa americana) y siguiendo los descr iptores (temas centrales) recomendados por el Consejo de Universidades de Espaa p ara los planes de estudio de ingeniera en informtica, ingeniera tcnica en informtica e ingeniera tcnica en informtica de gestin, as como en asignaturas tales como introdu ccin a la programacin y fundamentos de programacin de carreras como ingeniero e ing eniero tcnico de telecomunicaciones, ingeniera telemtica, ingeniera industrial y car reras afines. As mismo y dado nuestro conocimiento de numerosas universidades lat inoamericanas, se ha pensado en carreras de ingeniera de sistemas.

Prlogommxiii No podamos dejar de lado las recomendaciones de la ms prestigiosa organizacin de in formticos del mundo, ACM, sobre todo pensando en nuestros lectores de Latinoamrica . Se estudi en su momento los borradores de la Curricula de Computer Science de m odo que tras su publicacin el 15 de diciembre de 2001 del Computing Curricula 200 1 Computer Science. Como lgicamente no se poda seguir todas sus directrices al pie de la letra, del cuerpo de conocimiento se opt por seguir del modo ms aproximado posible las materias, Programming Fundamentals (PF) Algorithms and Complexity (A L) y Programming Languages (PL). Uno de los temas ms debatidos en la educacin en i nformtica o en ciencias de la computacin (Computer Sciences) es el rol de la progr amacin en el currculo introductorio. A travs de la historia de la disciplina como fi elmente reconoce en la introduccin del Captulo 7 relativo a cursos de introduccin, ACM en su Computing Curricula 2001 la mayora de los cursos de introduccin a la info rmtica se han centrado principalmente en el desarrollo de habilidades o destrezas de programacin. La adopcin de un curso de introduccin a la programacin proviene de una serie de factores prcticos e histricos incluyendo los siguientes: La programac in es una tcnica esencial que debe ser dominada por cualquier estudiante de informt ica. Su insercin en los primeros cursos de la carrera asegura que los estudiantes tengan la facilidad necesaria con la programacin para cuando se matriculan en lo s cursos de nivel intermedio y avanzado. La informtica no se convirti en una disci plina acadmica hasta despus que la mayora de las instituciones ha desarrollado un c onjunto de cursos de programacin introductorias que sirvan a una gran audiencia. El modelo de programacin del currculum del 78 de la ACM defina a estos cursos como I ntroduccin a la Programacin y se les denomin CS1 y CS2. Hoy da se le sigue denominand o as despus de la publicacin de los currculo del 91 y del 91 y del 2001. Los program as de informtica deben ensear a los estudiantes cmo usar bien al menos un lenguaje de programacin. Adems, se recomienda que los programas en informtica deben ensear a los estudiantes a ser competentes en lenguajes y que hagan uso de al menos dos p aradigmas de programacin. Como consecuencia de estas ideas, el currculo 2001 de la ACM contempla la necesidad de conceptos y habilidades que son fundamentales en la prctica de la programacin con independencia del paradigma subyacente. Como resu ltado de este pensamiento, el rea de fundamentos de programacin incluye unidades s obre conceptos bsicos de programacin, estructuras de datos bsicas y procesos algortm icos. La fluidez en un lenguaje de programacin es prerrequisito para el estudio d e las ciencias de la computacin, pero la dificultad de elegir el lenguaje siempre es una dificultad ms a aadir a la ya de por s difcil misin del maestro o profesor. P or esta razn, ya en el lejano ao de 1986 cuando publicamos la primera edicin del li bro Fundamentos de programacin y tras la experiencia de sus ediciones sucesivas y sus ya casi 18 aos (la mayora de edad en casi todos los pases del mundo), la apues ta que hicimos de utilizar un lenguaje algortmico, seguimos mantenindola, y en est a ocasin hemos podido ofrecer la versin 2.0 del lenguaje UPSAM utilizada y probada en numerosas universidades espaolas y americanas. Este libro se ha escrito pensa ndo en que pudiera servir de referencia, gua de estudio y sobre todo como herrami entas de prcticas de introduccin a la programacin, con una segunda parte que, a su vez, sirviera como continuacin, y de introduccin a las estructuras de datos y a la programacin orientada a objetos; todos ellos utilizando un pseudolenguaje o leng uaje algortmico como lenguaje de programacin. El objetivo final que busca es no slo describir la sintaxis de dicho lenguaje, sino y, sobre todo, mostrar las caract ersticas ms sobresalientes del lenguaje a la vez que se ensean tcnicas de programacin estructurada y orientada a objetos. As pues, los objetivos fundamentales son: nfa sis fuerte en el anlisis, construccin y diseo de programas. Un medio de resolucin de problemas mediante tcnicas de programacin. Una introduccin a la informtica y a las ciencias de la computacin usando algoritmos y el lenguaje algortmico, basado en ps eudocdigo.

xivmmPrlogo En resumen, este es un libro diseado para ensear a programar utilizando un lenguaje algortmico con la herramienta de sintaxis, del pseudocdigo, y con una versin probada y actualizada UPSAM 2.0 cuya primera versin vio la luz en la prime ra edicin de la obra base de este libro Fundamentos de programacin, en el ao 1986. As, se tratar de ensear las tcnicas clsicas y avanzadas de programacin estructurada, j unto con tcnicas orientadas a objetos. La programacin orientada a objetos no es la panacea universal del programador del siglo XXI, pero le ayudar a realizar tarea s que, de otra manera, seran complejas y tediosas. El contenido del libro trata d e proporcionar soporte a un ao acadmico completo (dos semestres o cuatrimestres), alrededor de 24 a 32 semanas, dependiendo lgicamente de su calendario y planifica cin. Los nueve primeros captulos pueden comprender el primer semestre y los restan tes captulos pueden impartirse en el segundo semestre. Lgicamente la secuencia y p lanificacin real depender del maestro o profesor que marcar y sealar, semana a semana , la progresin que l considera lgica. Si es un estudiante autodidacta, su propia pr ogresin vendr marcada por las horas que dedique al estudio y al aprendizaje con la computadora, aunque no debe variar mucho del ritmo citado al principio de este prrafo. LIBRO COMPLEMENTARIO Aunque este libro ha sido escrito como una obra prctica de aprendizaje para la in troduccin a la programacin de computadoras y no se necesita ms conocimientos que lo s requeridos para la iniciacin a los estudios universitarios o de formacin profesi onal en carreras de ingeniera o licenciatura en informtica, ingeniera de sistemas, telecomunicaciones o industriales, y estudios de formacin profesional en las rama s tecnolgicas, tambin ha sido escrito pensando en ser libro complementario de la o bra Fundamentos de programacin (Joyanes, 3. ed. McGraw-Hill, 2003). Para ello el c ontenido del libro coincide casi en su totalidad con los diferentes captulos de l a citada obra. De esta manera, se pueden estudiar conjuntamente ambos libros con lo que se conseguir no slo un aprendizaje ms rpido sino y sobre todo mejor formacin terico-prctica y mayor rigor acadmico y profesional en la misma. La parte terica de este libro es suficiente para aprender los problemas y ejercicios de programacin resueltos y proponer su propias soluciones, sobre la base de que muchos ejercici os propuestos en el libro de teora ofrecen la solucin en este libro de problemas. ORGANIZACIN DEL LIBRO El libro, aunque no explcitamente, se puede considerar divido a efectos de organi zacin docente por parte de profesores (maestros) y alumnos o de lectores autodida ctas, en cuatro partes que unidas constituyen un curso completo de programacin. D ado que el conocimiento es acumulativo, los primeros captulos proporcionan el fun damento conceptual para la comprensin y aprendizaje de algoritmos, y una gua a los estudiantes a travs de ejemplos y ejercicios sencillos; y los captulos posteriore s presentan de modo progresivo la programacin en pseudocdigo en detalle, tanto en el paradigma procedimental como en el orientado a objetos. El contenido detallad o del libro es el siguiente: Captulo 1. Algoritmos y programas. Presenta una brev e descripcin del concepto y propiedades fundamentales de los algoritmos y de los programas. Introduce al lector/estudiante en los elementos bsicos de un programa, tipos de datos, operaciones bsicas, etc. soportadas por la mayora de los lenguaje s de programacin. Captulo 2. Resolucin de problemas con computadoras. Se muestran l os mtodos fundamentales para la resolucin de problemas con computadoras y las herr amientas de programacin necesarias para ello. Se describen las etapas clsicas util izadas en la resolucin de problemas, as como las herramientas clsicas tales como ps eudocdigo, diagrama de flujo y diagrama N-S. Captulo 3. Estructura general de un p rograma. Se analiza la estructura general de un programa y sus elementos bsicos. Se introduce el concepto de flujo de control y se incluyen los primeros problema s planeados de cierta complejidad y su resolucin con algunas de las herramientas descritas en el Captulo 2.

You might also like