Aprenda a diseñar algoritmos Anívar Chaves Torres Datos de catalogación bibliográfica CHAVESTORRES, Anívar.Aprenda a diseñar algoritmos.Bogotá:Universidad Nacional Abierta y a Distancia UNAD, 2017. ISBN:978-958-651-622-8 Formato:digital Páginas:321 Aprenda a Diseñar Algoritmos Autor: Anívar Chaves Torres ISBN: 978-958-651-622-8 Escuela de Ciencias Básicas, Tecnología e Ingeniería ©Editorial Sello Editorial UNAD Universidad Nacional Abierta y a Distancia Calle 14 sur No. 14-23 Bogotá D.C Abril 2017. Esta obra está bajo una licencia Creative Commons - Atribución – No comercial – Sin Derivar 4.0 internacional. https://co.creativecommons.org/?page_id=13. A la sagrada familia, por su comprensión, su apoyo y su confianza. Rector Jaime Alberto Leal Afanador. Vicerrectora Académica y de Investigación Constanza Abadía García. Vicerrector de Medios y Mediaciones Pedagógicas Leonardo Yunda Perlaza. Vicerrector de Desarrollo Regional y Proyección Comunitaria Leonardo Evemeleth Sánchez Torres. Vicerrector de Servicios a Aspirantes, Estudiantes y Egresados Edgar Guillermo Rodríguez Díaz. Vicerrector de Relaciones Internacionales Luigi Humberto López Guzmán. Decana Escuela de Ciencias de la Educación Clara Esperanza Pedraza Goyeneche. Decana Escuela de Ciencias Agrícolas, Pecuarias y del Medio Ambiente Julialba Ángel Osorio. Decano Escuela de Ciencias Básicas, Tecnología e Ingeniería Claudio Camilo González Clavijo. Decana Escuela de Ciencias Sociales, Artes y Humanidades Sandra Milena Morales Mantilla. Decana Escuela de Ciencias Administrativas, Económicas, Contables y de Negocios Sandra Rocío Mondragón. Decana Escuela de Ciencias de la Salud Myriam Leonor Torres Agradecimiento Muchas personas han contribuido de diferentes maneras para que este trabajo pudiera llevarse a buen fin, tanto compañeros docentes como estudiantes que revisaron los temas y los ejercicios, me mostraron algunas inconsistencias y me hicieron importantes observaciones para mejorar el documento; igualmente a los funcionarios de la UNAD que participaron en el proceso de evaluación y publicación. Sin el concurso de todos ustedes no hubiera sido posible publicar este libro. Muchas gracias a todos. CONTENIDO Pág. 1. INTRODUCCIÓN............................................................................................................12 1.1 EL COMPUTADOR.......................................................................................................12 1.1.1 Componente Físico...................................................................................................14 1.1.2 Componente Lógico..................................................................................................18 1.2 CONSTRUCCION DE PROGRAMAS...........................................................................20 1.2.1 Análisis del problema................................................................................................21 1.2.2 Diseño de la solución................................................................................................22 1.2.3 Codificación del programa.........................................................................................23 1.2.4 Prueba y depuración.................................................................................................23 1.2.5 Documentación.........................................................................................................24 1.2.6 Mantenimiento...........................................................................................................25 2. ELEMENTOS DE PROGRAMACIÓN.............................................................................26 2.1 TIPOS DE DATOS........................................................................................................26 2.1.1 Datos numéricos.......................................................................................................27 2.1.2 Datos alfanuméricos..................................................................................................28 2.1.3 Datos lógicos o booleanos........................................................................................28 2.2 VARIABLES Y CONSTANTES......................................................................................29 2.2.1 Variables...................................................................................................................29 2.2.2 Tipos de variables.....................................................................................................31 2.2.3 Declaración de variables...........................................................................................33 2.2.4 Asignación de valores...............................................................................................34 2.2.5 Constantes................................................................................................................35 2.3 OPERADORES Y EXPRESIONES...............................................................................35 2.3.1 Operadores y expresiones aritméticos......................................................................35 2.3.2 Operadores y Expresiones Relacionales ..................................................................37 2.3.3 Operadores y expresiones lógicos............................................................................38 2.3.4 Jerarquía general de los operadores.........................................................................40 3. ALGORITMOS ...............................................................................................................41 3.1 CONCEPTO DE ALGORITMO......................................................................................41 3.2 CARACTERÍSTICAS DE UN ALGORITMO..................................................................42 3.3 NOTACIONES PARA ALGORITMOS...........................................................................44 3.3.1 Descripción textual....................................................................................................45 3.3.2 Pseudocódigo ...........................................................................................................45 3.3.3 Diagrama de Flujo.....................................................................................................47 3.3.4 Diagrama de Nassi-Shneiderman.............................................................................51 3.3.5 Notación Funcional....................................................................................................54 3.4 ESTRATEGIA PARA DISEÑAR ALGORITMOS...........................................................55 3.5 VERIFICACIÓN DE ALGORITMOS..............................................................................58 4. ESTRUCTURAS DE PROGRAMACIÓN........................................................................60 4.1 ESTRUCTURAS SECUENCIALES...............................................................................60 4.1.1 Asignación.................................................................................................................60 4.1.2 Entrada de datos.......................................................................................................61 4.1.3 Salida de datos..........................................................................................................62 4.1.4 Ejemplos con estructuras secuenciales ....................................................................63 4.1.5 Ejercicios propuestos................................................................................................75 4.2 ESTRUCTURAS DE DECISIÓN...................................................................................77 4.2.1 Condición..................................................................................................................77 4.2.2 Tipos de decisiones...................................................................................................78 4.2.3 Estructura SI .............................................................................................................79 4.2.4 Estructura SEGÚN SEA...........................................................................................86 4.2.5 Decisiones anidadas.................................................................................................92 4.2.6 Más ejemplos de decisiones...................................................................................100 4.2.7 Ejercicios propuestos..............................................................................................125 4.3 ESTRUCTURAS DE ITERACIÓN...............................................................................128 4.3.1 Control de iteraciones.............................................................................................128 4.3.2 Estructura MIENTRAS ............................................................................................129 4.3.3 Estructura HACER MIENTRAS...............................................................................137 4.3.4 Estructura PARA.....................................................................................................143 4.3.5 Estructuras Iterativas anidadas...............................................................................150 4.3.6 Más ejemplos de iteraciones...................................................................................155 4.3.7 Ejercicios propuestos..............................................................................................174 5. ARREGLOS .................................................................................................................177 5.1 CONCEPTO DE ARREGLO........................................................................................178 5.2 CLASES DE ARREGLOS ...........................................................................................179 5.3 MANEJO DE VECTORES...........................................................................................180 5.3.1 Declaración.............................................................................................................181 5.3.2 Acceso a elementos................................................................................................181 5.3.3 Recorrido de un vector............................................................................................182 5.4 MANEJO DE MATRICES............................................................................................187 5.4.1 Declaración.............................................................................................................187 5.4.2 Acceso a elementos................................................................................................188 5.4.3 Recorrido de una matriz..........................................................................................188 5.5 MÁS EJEMPLOS CON ARREGLOS...........................................................................192 5.6. EJERCICIOS PROPUESTOS.................................................................................204 6. SUBPROGRAMAS.......................................................................................................206 6.1.FUNCIONES...............................................................................................................207 6.1.1. Diseño de una Función ...........................................................................................208 6.1.2. Invocación de una Función .....................................................................................211 6.1.3. Más ejemplos de funciones.....................................................................................214 6.1.4 Ejercicios propuestos..............................................................................................223 6.2.PROCEDIMIENTOS....................................................................................................224 7. BÚSQUEDA Y ORDENAMIENTO................................................................................228 7.1 ALGORITMOS DE BÚSQUEDA..................................................................................228 7.1.1. Búsqueda Lineal......................................................................................................228 7.1.2. Ejemplos de búsqueda lineal ..................................................................................229 7.1.3. Búsqueda Binaria....................................................................................................231 7.1.4. Ejemplos de búsqueda binaria................................................................................234 7.1.5. Ejercicios propuestos..............................................................................................236 7.2 ALGORITMOS DE ORDENAMIENTO ........................................................................238 7.2.1 Algoritmo de intercambio.........................................................................................238 7.2.2 Algoritmo de Selección............................................................................................240 7.2.3 Algoritmo de la burbuja ...........................................................................................242 7.2.4 Algoritmo de Inserción.............................................................................................244 7.2.5 Algoritmo de Donald Shell.......................................................................................246 7.2.6 Algoritmo de Ordenamiento Rápido........................................................................250 7.2.7 Fusión de vectores ordenados................................................................................251 7.2.8 Otros algoritmos de Ordenamiento.........................................................................253 7.2.9 Un ejemplo completo...............................................................................................253 7.2.10Ejercicios propuestos..............................................................................................265 8. RECURSIVIDAD..........................................................................................................266 8.1 LA RECURSIVIDAD Y EL DISEÑO DE ALGORITMOS..............................................267 8.2 ESTRUCTURA DE UNA FUNCIÓN RECURSIVA......................................................268 8.3 EJECUCIÓN DE FUNCIONES RECURSIVAS ...........................................................270 8.4 ENVOLTURAS PARA FUNCIONES RECURSIVAS...................................................273 8.5 TIPOS DE RECURSIVIDAD........................................................................................273 8.6 EFICIENCIA DE LA RECURSIVIDAD.........................................................................274 8.7 EJEMPLOS DE SOLUCIONES RECURSIVAS...........................................................275 8.8 EJERCICIOS PROPUESTOS.....................................................................................283 9. EL CUBO DE RUBIK....................................................................................................285 9.1 DESCRIPCIÓN DEL CUBO........................................................................................285 9.2 SOLUCION ALGORÍTMICA........................................................................................287 9.3.1 Consideraciones preliminares.................................................................................287 9.3.2 Algoritmo principal para armar el cubo de Rubik.....................................................289 9.3.3 Seleccionar y posicionar un centro de referencia....................................................290 9.3.4 Armar el módulo superior........................................................................................290 9.3.5 Armar el Módulo Central .........................................................................................295 9.3.6 Armar el Módulo Inferior..........................................................................................299 REFERENCIAS.................................................................................................................308 LISTA DE FIGURAS..........................................................................................................311 LISTA DE CUADROS........................................................................................................315 LISTA DE EJEMPLOS.......................................................................................................319 PRÓLOGO Este es un libro concebido y elaborado por un profesor de programación, quien a la vez se reconoce como un estudiante permanente del tema; y por tanto, conoce muy bien las dificultades que experimentan los estudiantes para aprender fundamentos de programación y diseño de algoritmos, de igual manera que las necesidades de los profesores de contar material de referencia que incluya conceptos, ejemplos y ejercicios. Aunque los temas que se desarrollan son comunes en los libros de fundamentos de programación, aquí se presentan con un enfoque didáctico, con un lenguaje sencillo y con un nivel de detalle que cualquier persona los puede comprender, pues éste no pretende ser únicamente un documento de consulta, sino un material didáctico para el aprendizaje autónomo. Como estrategia para facilitar el aprendizaje del diseño de algoritmos se propone proceder de forma inductiva, pues un algoritmo es una solución general para problemas de un mismo tipo y sus pasos se identifican en la medida que se soluciona varios casos particulares del problema. En los ejemplos que se presenta en los capítulos se aplicará esta metodología, primero se propone valores hipotéticos para los datos del problema y se realizan los cálculos para llegar a una solución, luego se pasa a definir variables y establecer expresiones que solucionen el problema para cualquier conjunto de valores. El libro está organizado en nueve capítulos. El primero es una introducción al tema en el que se estudia las generalidades del computador, tanto en lo físico como en lo lógico, y también el proceso de construcción de software. Éste tiene como propósito proporcionar al estudiante una perspectiva para el estudio de los siguientes siete capítulos. En el capítulo dos se desarrollan algunos conceptos fundamentales en programación, como son: tipos de datos, variables y constantes, operadores y expresiones. Es necesario que el estudiante tenga claridad sobre éstos conceptos antes de adentrarse en el diseño de algoritmos, pues serán aplicados en cada uno de los temas siguientes. El capítulo tres aborda directamente el tema de los algoritmos: conceptos, características, notaciones, estrategia para el diseño y verificación. Éste tiene como propósito ofrecer soporte conceptual, pues el estudiante y el docente deben estar de acuerdo sobre lo que es y lo que no es un algoritmo, sobre cómo debe representarse para evitar ambigüedad en la solución de un problema y cómo verificar la eficacia de la misma.
Description: