Introduccion al Analisis y Diseño de Algoritmos

download Introduccion al Analisis y Diseño de Algoritmos

of 18

description

Fase inicio

Transcript of Introduccion al Analisis y Diseño de Algoritmos

ANALISIS Y DISEOALGORITMOSImplementacion en: C++, JAVA y PHP

Anlisis y Diseo de ALGORITMOS. Tcnicas y Metodologas bsicas de Programacin implementadas en C++, JAVA y PHP.Primera Edicin, Abril 2015.

2015, Derechos Reservados por Arturo Daz Pulido.El contenido de esta obra est protegido por ley. Queda prohibida su reproduccin total o parcial de este libro, por cualquier medio, sin permiso escrito del autor.

Hecho el Depsito Legal en la Biblioteca Nacional del Per N de Registro:Derechos Reservados conforme a Ley.Obra impresa en los Talleres Grficos de Editorial. PERU.

A m recordada madre Mara Pulido Soles,mgica flor de mi grandeza...centella de luz y sabiduraen el sempiterno amor que tengo, hacia ella

A la bendicin de Dios, mi querido hijo Sebstian Daz Quiroz, luz de mi existir, impregnacin dulce a mi vida...

A mi compaera incondicional Erika Quiroz Snchez, albergue de confianza y perseverancia en mis proyectos

A mi Padre Marcelo Daz y mis hermanos Luciano, Reina, Eusebia, Jos, Micaela, Josefa, Fernando, Virginia, Jacinto, Alberto, Mariza: inagotables fuentes de cario, bondad y apoyo

A todos los estudiantes que me brindaron el apoyo y confianzaamical y flexible a mis perseverancias de estudios, para que yo tomar la luz de las ideas que compart con ellos

Prologo

Desde hace mucho tiempo los algoritmos han existido para solucionar problemas. En la actualidad se han convertido en el fundamento bsico de la programacin de computadoras; y porque no decirlo en la generacin de soluciones de diversos problemas de las ciencias y la rutinas constantes del hombre.

La utilizacin de las computadoras en la solucin de problemas, hace de los algoritmos una codificacin exacta y precisa, basada en una lgica y matemtica gestionable por las computadoras y el hombre. Es as que esto conlleva a la generacin de un lenguaje comn hombre mquina, llamado programa. Est permitir adaptar a la computadora a soluciones de problemas a medida del usuario.

En este ejemplar encontrara una variedad de ejercicios resueltos as como propuestos e implementados en 3 lenguajes de programacin como C++, JAVA y PHP, siendo estos de mucha aplicacin.

Captulo 1:Introduccin a los Algoritmos

Aprender los conceptos fundamentales de los elementos bsicos del proceso de la informacin en una computadora. Conoce los recursos principales y necesarios para empezar a formular una solucin.

Captulo 2:Introduccin a la Programacin Estructurada

Reconoce los aspectos fundamentales de un lenguaje de programacin como C++, JAVA y PHP, as como la importancia para generar una solucin con ellos.

Captulo 3:Herramientas de Programacin y Estructuras para la Formulacin de Algoritmos

Descubre las tcnicas y metodologas para empezar a formular soluciones a travs de los algoritmos, pseudocodigo, diagramas de flujo y diagramas N-S. Aprender a resolver problemas a travs de la computadora mediante la codificacin de la solucin en un determinado lenguaje de programacin: C++, JAVA y PHP.

Captulo 4:Tipos de Datos Estructurados Homogneos: Arreglos y Cadenas de Caracteres

Concentra el almacenamiento esttico de los datos, interpretados como informacin. Enfocara casos especiales vinculados al tratamiento de la informacin generada por el conjunto de caracteres, representado como una estructura.

Captulo 5:

Modularidad: Procedimientos y funciones (Mtodos)

Comprender las tcnicas de organizacin a travs de mecanismos capaces de agrupar las rutinas, que generan soluciones, mediante valores lmites y condiciones en una variable. Aprender a descomponer la solucin de un problema, encontrando mecanismos independientes, capaces de llevar valores de variables de manera local y global.

Captulo 6:Estructuras, Unin, Enumeracin

Aprender nuevos aspectos de organizar la informacin a medida del programador y atendiendo el contexto de programacin de una solucin.n

Captulo 7:Mtodos de Ordenamiento y Bsqueda

Descubrir los diversos mtodos para interpretar mediante rutinas de estructuras de cdigos, formas de ordenar, buscar e intercalar un dato dentro un bloque de informacin.

Captulo 8:Archivos (Ficheros)

Conocer la estructura interna de la generacin de un almacenamiento interno y externo de la informacin. Descubrir los diversos mtodos para interpretar mediante rutinas de estructuras de cdigos, formas de ordenar, buscar e intercalar un dato dentro un bloque de informacin.

Captulo 9:Recursividad

Aprender estrategias de programacin para simplificar una solucin reutilizando las mismas rutinas.

Captulo 10:Memoria Dinmica y Manejo de Punteros

Conocer la organizacin dinmica del almacenamiento del valor de una variable en la memoria del computador.

Cualquier comentario, critica y/o sugerencia, envenos su e-mail, a nuestra direccin de correo electrnico: [email protected], que gentilmente lo atenderemos con el nico fin de mejorar, segn sus sugerencias. Asimismo puede visitar nuestro website: www.programandotips.com/publicaciones.php

Arturo Daz Pulido.

INDICE DE CONTENIDOS

Introduccin. Razones para leer este libro.. CD de Soporte........ Cubo mgico (Cubo de Rubik de 3x3x3).........

Captulo I: Introduccin a los Algoritmos1.1. Introduccin1.2. Elementos de Entorno de Algoritmos y Programacin..1.2.1. Informacin y Procesamiento de la informacin..1.2.2. Hardware..1.2.3. Software.1.2.4. Dato. 1.2.5. Informacin. 1.2.6. Algoritmo .1.2.7. Tipos de Lenguajes Algortmicos1.2.8. Lenguajes de Programacin1.2.9. Tipos de instrucciones1.2.10. Traductores de Lenguaje1.2.11. Programa 1.2.12. Metodologa para solucionar problemas por medio de las computadoras1.2.13. Actividades de Programacin1.2.14. Actividades Propuestas

1.3. Entidades primitivas 1.3.1. Tipos de datos1.3.2. Expresiones 1.3.3. Operadores y Operandos1.3.4. Identificadores 1.3.5. Constantes y variables1.3.6. Contadores1.3.7. Acumulares1.3.8. Funciones internas1.3.9. Operacin de asignacin1.3.10. Entrada y Salida de informacin1.3.11. Actividades Resueltas1.3.12. Actividades Propuestas

Captulo II: Introduccin a la Programacin Estructurada con C++, JAVA y PHP

2. 2.1. Introduccin 2.2. Lenguaje de Programacin C++2.2.1. Declaraciones Previas2.2.2. Estructura Bsica de un Programa2.2.3. Tipos de Datos 2.2.4. Palabras reservadas2.2.5. Comentarios2.2.6. Operadores2.2.7. Gestin de Entrada / Salida en C++2.2.8. Estructura de Control 2.2.9. Bibliografa

2.3. Lenguaje de Programacin JAVA2.3.1. Estructura de un Programa en JAVA2.3.2. Identificadores 2.3.3. Palabras reservadas2.3.4. Literales 2.3.5. Arrays 2.3.6. Operadores2.3.7. Separadores 2.3.8. Estructuras de control de Flujo2.3.9. Excepciones: try-catch-throw2.3.10. Bucles Infinitos2.3.11. Clases 2.3.12. Tipos de Clases2.3.13. Variables y Mtodos de Instancia2.3.14. mbito de una variable 2.3.15. Mtodos y Constructores2.3.16. Finalizadores 2.3.17. Import2.3.18. Paquetes de Java2.3.19. Bibliografa

2.4. Lenguaje de Programacin PHP2.4.1. Conceptos bsicos2.4.2. Tipos de variables2.4.3. Comentarios2.4.4. Estructura de un programa PHP2.4.5. Operaciones y Operadores2.4.6. Estructuras de Control2.4.7. Operacin de Salida2.4.8. Manejo de cadenas2.4.9. Funciones definidas por el Usuario2.4.10. Librera2.4.11. Envo y recepcin de datos2.4.12. Method GET y POST2.4.13. Bibliografa2.4.14. Actividades de Programacin Capitulo III: Herramientas y Estructuras Algortmicas para Formular programas con C++, JAVA y PHP3. 3.1. Herramientas Algortmicas3.1.1. Asignacin3.1.2. Representacin Grfica de los Algoritmos3.1.2.1. Diagrama de Flujo3.1.2.2. Diagrama Estructurado N-S (Nassi-Schneiderman)3.1.3. Pseudocodigo3.1.4. Anidamiento de estructuras

3.2. Estructuras Algortmicas para formulacin de Programas3.2.1. Secuenciales Actividades de Programacin ResueltasActividades de Programacin Propuestas3.2.2. Condicionales3.2.2.1. Simples3.2.2.2. Compuestas 3.2.2.3. Mltiples o en CascadaActividades de Programacin ResueltasActividades de Programacin Propuestas3.2.3. Repetitivas o Iterativas 3.2.3.1. Cclicas (Desde-Hasta-Hacer)Actividades de Programacin ResueltasActividades de Programacin Propuestas3.2.3.2. Aciclicas3.2.3.2.1. Mientras - HacerActividades de Programacin ResueltasVariables Tipo BanderaActividades de Programacin Propuestas3.2.3.2.2. Hacer MientrasActividades de Programacin ResueltasActividades de Programacin Propuestas

3.3. Tcnicas de Diseo de Algoritmos3.3.1. Divide y vencers.3.3.2. Algoritmos Voraces (vidos).3.3.3. Programacin dinmica.3.3.4. Back tracking (Vuelta atrs).3.3.5. Ramificacin y poda (branch-and-bound).

Capitulo IV: Tipos de Datos Estructurados Homogneos: Arreglos y Cadenas de Caracteres3. 4. 4.1. Introduccin 4.2. Arreglos4.2.1. VectoresActividades de Programacin ResueltasActividades de Programacin Propuestas4.2.2. MatricesActividades de Programacin ResueltasActividades de Programacin Propuestas4.2.3. MultidimensionalesActividades de Programacin ResueltasPractica de LaboratorioActividades de Programacin Propuestas4.3. Cadenas de CaracteresActividades de Programacin ResueltasActividades de Programacin Propuestas

Captulo V: Modularidad5. 5.1. Introduccin a los subprogramas o subalgoritmos.5.2. Funciones.5.3. Procedimientos.5.4. mbitos: variables locales y globales.5.5. Paso de parmetros: por Valor y por referencia.5.6. Funciones y procedimientos como parmetros.5.7. Efectos laterales.Actividades de Programacin ResueltasActividades de Programacin Propuestas

Captulo VI: Estructuras, Unin y Enumeracin6. 6.1. Introduccin6.2. Estructuras o registros6.3. Acceso a registros6.4. Anidamiento de Estructuras6.5. Array de Estructuras6.6. Registros como Parmetros 6.7. Tratamientos de registros en C++Actividades de Programacin Resueltas6.8. Tratamientos de registros en JAVAActividades de Programacin Resueltas6.9. Tratamientos de registros en PHPActividades de Programacin ResueltasActividades de Programacin Propuestas6.10. Uniones6.11. EnumeracionesActividades de Programacin Propuestas

Captulo VII: Mtodos de Ordenamiento y Bsquedas7. 7.1. Introduccin 7.2. Ordenamiento7.2.1. Clasificacin de los Algoritmos de Ordenamiento7.2.2. Algoritmos de insercin7.2.2.1.Insercin directa7.2.2.2.Insercin binaria7.2.2.3.Shell7.2.3. Algoritmos de intercambio7.2.3.1.Mtodo de la Burbuja7.2.3.2.Mtodo Shake (vibracin o sacudida)7.2.3.3.Quick Sort (Mtodo de ordenacin rpida)7.2.4. Algoritmos de Seleccin 7.2.5. Seleccin Directa7.2.6. Algoritmos de Enumeracin 7.2.6.1.MergeSort (ordenamiento por mezcla)7.2.6.2.Radix Sort7.2.6.3.HeapSort7.3. Bsquedas7.3.1.Bsqueda Lineal o Secuencial7.3.1.1.Bsqueda secuencial con Centinela7.3.2. Bsqueda binaria o dicotmica7.3.3.Bsqueda por transformacin de claves o Hashing7.4. Ordenacin Externa o de Archivos7.4.1. Intercalacin7.5. Complejidad de los Mtodos de OrdenamientoActividades de Programacin Propuestas

Captulo VIII: Archivos8. 8.1. Introduccin 8.2. Tratamiento de Archivos en Lenguaje C++8.2.1. Apertura de un archivo8.2.2. Cierre de un archivo8.2.3. Trabajando con Archivos de Diferentes Modos8.2.3.1. Archivos Binarios8.2.3.2. Archivos de Acceso Aleatorio8.2.4. Tipos, Funciones y Clases usados Frecuentemente con Ficheros8.2.5. Tipos de Archivos

8.3. Tratamiento de Archivos en Lenguaje JAVA8.3.1. El criterio del modo de acceso8.3.2. Clases de Streams8.3.3. Subclases de InputStream 8.3.4. Ficheros de Texto y Binarios en Java

8.4. Tratamiento de Archivos en Lenguaje PHP8.4.1. Operaciones con archivosActividades de Programacin Propuestas

Captulo IX: Recursividad9. 9.1. Introduccin 9.2. Procedimientos recursivos9.3. Como generar Recursividad o Recursin 9.4. Estructura de una funcin o procedimiento recursivo9.5. La Multiplicacin de los conejosActividades de Programacin ResueltasActividades de Programacin Propuestas

Captulo X: Manejo de Punteros10. 10.1. Introduccin 10.2. Punteros10.3. Los operadores de punteros10.4. Asignacin de Punteros10.5. Inicializacin de Punteros10.6. Registro a Punteros10.7. Punteros a Punteros10.8. Aritmtica de Punteros10.9. Comparacin de Punteros10.10. Correspondencia entre punteros y vectores10.11. Gestin dinmica de la memoria10.12. Array de registros dinmicos 10.13. Referencias en PHP10.14. Referencias Globales10.15. Pasar por Referencias10.16. Devolver referencias10.17. Objetos y referencias Actividades de Programacin Propuestas

APENDICES Apndice A: PROYECTOS RESUELTOS EN: C++, JAVA y PHP Apndice B: PROBLEMAS Y ALGORITMOS VORACES Apndice C: ALGORITMO PARA RESOLVER EL CUBO DE RUBIK Apndice D: BIBLIOGRAFIAXVXVIXVIIXVII

1233344571111171820202529

3131343541414345464748505457

57 58596062626364666772

7373737474757779808282858586878889898991

92929293939497100101102103104105106107

117

118118119120125128130

135135135158164164164213213245248248250291295295296312317320321343

353353356364368378

383384385386392409411413418420424431445451463468

481482483486488491494496498521

526527528529531531532534535538540542543545546549553

555556557558559559562564567567570572577577579579583588600600601604608613613624625

631632652654655658659660663672

675676677678680

692692700

718719719722723723725737

741742742743744746747748750751751757763765766768768769771

774776787809856

INTRODUCCION

Los algoritmos se presentan en las diversas rutinas que efectuamos a diario, es decir que en nuestro entorno ejecutamos nuestras tareas a travs de una secuencia de pasos. El desarrollo de algoritmos es un tema fundamental en el diseo de soluciones de problemas, antes de ser automatizados en programas para ser operados a travs de una computadora. El algoritmo nos da la solucin genrica a un problema y lo podremos emplear todas las veces que se nos presente ese mismo problema. Por ejemplo, el algoritmo de la divisin es genrico e independiente de los nmeros que tengamos que dividir. Una vez descubierto un algoritmo para efectuar una tarea, la realizacin de sta ya no requiere entender los principios en que se basa dicho algoritmo, pues el proceso se reduce a seguir las instrucciones del mismo. Por ejemplo, podemos hacer una divisin siguiendo el algoritmo sin entender por qu funciona el algoritmo. La inteligencia requerida para llevar a cabo la tarea est codificada en el algoritmo. Las mquinas algortmicas son aquellas capaces de llevar a cabo algoritmos, y entre ellas estn los computadores. En el mbito de los computadores, los algoritmos se expresan como programas. Los programas son algoritmos codificados con un lenguaje no ambiguo cuya sintaxis y semntica "entiende" el computador. Hay muchos lenguajes de programacin de computadores, entre ellos, C, C++, Java, PHP, Delphi, etc. As pues, si queremos que un computador efecte una tarea, primero debemos descubrir un algoritmo para llevarla a cabo, programar el algoritmo en la mquina consiste en representar ese algoritmo de modo que se pueda comunicar a una mquina. En otras palabras debemos transformar el algoritmo conceptual en un conjunto de instrucciones y representar estas ltimas en un lenguaje sin ambigedad. Gracias a la capacidad para comunicar nuestros pensamientos mediante algoritmos, podemos construir mquinas cuyo comportamiento simula, en alguna medida la inteligencia. El nivel de inteligencia que simula la mquina est limitado por la inteligencia que podamos comunicarle por medio de algoritmos. Las mquinas slo pueden realizar tareas algortmicas. Si encontramos un algoritmo para dirigir la ejecucin de una tarea, podemos construir una mquina para llevarla a cabo siempre que la tecnologa haya avanzado lo suficiente. Si no encontramos un algoritmo, es posible que la ejecucin est fuera de las capacidades de las mquinas. Un computador es todo aparato o mquina destinada a procesar informacin, entendindose por proceso las sucesivas fases, manipulaciones o transformaciones que sufre la informacin para resolver un problema determinado, siguiendo las instrucciones de un programa registrado.Razones para leer este libro

Este libro le permitir conocer y estudiar las diversas tcnicas bsicas de programacin, as como aprender la programacin estructurada en los lenguajes de programacin como C++, JAVA y PHP. Siendo muy importante tener un claro conocimiento de las diferencias que cada uno de ellos muestra, este libro se desarroll basado en la necesidad que los estudiantes presentan cuando buscan encontrar diversas formas de como plantear una solucin as como para aquellos que busquen la integracin de sus soluciones a nivel de los diversos entornos de estos lenguajes de programacin. El CD de soporte

En este libro se incluye un CD con ms de 200 ejemplos vistos a nivel del libro y otros que no fueron incluidos en esta obra didctica por razones de espacios. Las formas de ver los cdigos fuentes de los ejemplos del libro u otros se puede hacerse de 2 maneras: A nivel de un archivo ndice web ndice.htm el cual le mostrara una pgina local enlazada a su CD y poder consultar la informacin por temas y captulos, segn la estructura del libro. Se puede explorar el libro desde las carpetas contenedoras de los cdigos fuentes y hacer directamente la activacin de los mismos para que se puedan abrir en su PC (en el caso de tener instalado los lenguajes de programacin afines a este libro).

Cubo mgico (Cubo de Rubik de 3x3x3)

Conocido como un puzzle mecnico tridimensional se integra en este libro, como un material didctico para poner en practica diversos ejercicios mentales, ya que para resolver el cubo de Rubik, es necesario memorizar una serie de algoritmos o secuencias con lo cual estamos trabajando la memoria y otros aspectos del aprendizaje.