Вы находитесь на странице: 1из 18

ANALISIS Y DISEO

ALGORITMOS
Implementacion 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 sabidura
en 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 confianza


amical 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.
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 4:

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: informes@programandotips.com, 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.

XV
XVI

Razones para leer este libro..

XVII

CD de Soporte........

XVII

Cubo mgico (Cubo de Rubik de 3x3x3).........


1
Captulo I: Introduccin a los Algoritmos
1.1. Introduccin
1.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 Algortmicos
1.2.8. Lenguajes de Programacin
1.2.9. Tipos de instrucciones
1.2.10.
Traductores de Lenguaje
1.2.11.Programa
1.2.12.
Metodologa para solucionar problemas por medio de las
computadoras
1.2.13. Actividades de Programacin
1.2.14. Actividades Propuestas

2
3
3
3
4
4
5
7
11
11
17
18
20
20

1.3. Entidades primitivas

1.3.1. Tipos de datos


1.3.2. Expresiones
1.3.3. Operadores y Operandos
1.3.4. Identificadores
1.3.5. Constantes y variables
1.3.6. Contadores
1.3.7. Acumulares
1.3.8. Funciones internas
1.3.9. Operacin de asignacin
1.3.10. Entrada y Salida de informacin
1.3.11. Actividades Resueltas
1.3.12. Actividades Propuestas

25
29
31
31
34
35
41
41
43

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

45

46
2.1. Introduccin
2.2. Lenguaje de Programacin C++
2.2.1. Declaraciones Previas
2.2.2. Estructura Bsica de un Programa
2.2.3. Tipos de Datos
2.2.4. Palabras reservadas
2.2.5. Comentarios
2.2.6. Operadores
2.2.7. Gestin de Entrada / Salida en C++
2.2.8. Estructura de Control
2.2.9. Bibliografa

47
48
50
54
57

57
2.3. Lenguaje de Programacin JAVA
2.3.1. Estructura de un Programa en JAVA
2.3.2. Identificadores
2.3.3. Palabras reservadas
2.3.4. Literales
2.3.5. Arrays
2.3.6. Operadores
2.3.7. Separadores
2.3.8. Estructuras de control de Flujo
2.3.9. Excepciones: try-catch-throw
2.3.10.
Bucles Infinitos
2.3.11.Clases
2.3.12.
Tipos de Clases
2.3.13.
Variables y Mtodos de Instancia
2.3.14.
mbito de una variable
2.3.15.
Mtodos y Constructores
2.3.16.
Finalizadores
2.3.17.
Import
2.3.18.
Paquetes de Java
2.3.19.
Bibliografa

58

2.4. Lenguaje de Programacin PHP


2.4.1. Conceptos bsicos
2.4.2. Tipos de variables
2.4.3. Comentarios
2.4.4. Estructura de un programa PHP
2.4.5. Operaciones y Operadores
2.4.6. Estructuras de Control
2.4.7. Operacin de Salida
2.4.8. Manejo de cadenas
2.4.9. Funciones definidas por el Usuario
2.4.10. Librera
2.4.11.Envo y recepcin de datos
2.4.12. Method GET y POST
2.4.13. Bibliografa
2.4.14. Actividades de Programacin

74

59
60
62
62
63
64
66
67
72
73
73
73
74
75
77
79
80
82
82
85
85
86

87
Capitulo III: Herramientas y Estructuras Algortmicas para Formular programas

88

con C++, JAVA y PHP

89

3.1. Herramientas Algortmicas


3.1.1. Asignacin
3.1.2. Representacin Grfica de los Algoritmos
3.1.2.1. Diagrama de Flujo
3.1.2.2. Diagrama Estructurado N-S (Nassi-Schneiderman)
3.1.3. Pseudocodigo
3.1.4. Anidamiento de estructuras
3.2. Estructuras Algortmicas para formulacin de Programas
3.2.1. Secuenciales
Actividades de Programacin Resueltas
Actividades de Programacin Propuestas
3.2.2. Condicionales
3.2.2.1. Simples
3.2.2.2. Compuestas
3.2.2.3. Mltiples o en Cascada
Actividades de Programacin Resueltas
Actividades de Programacin Propuestas
3.2.3. Repetitivas o Iterativas
3.2.3.1. Cclicas (Desde-Hasta-Hacer)
Actividades de Programacin Resueltas
Actividades de Programacin Propuestas
3.2.3.2. Aciclicas
3.2.3.2.1. Mientras - Hacer
Actividades de Programacin Resueltas
Variables Tipo Bandera

89
89
91
92
92
92
93
93
94
97
100
101
102
103
104
105
106
107

Actividades de Programacin Propuestas


3.2.3.2.2. Hacer Mientras

117

Actividades de Programacin Resueltas


Actividades de Programacin Propuestas

118
118

3.3. Tcnicas de Diseo de Algoritmos


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

119
120
125
128
130
135

Capitulo IV: Tipos de Datos Estructurados Homogneos: Arreglos y Cadenas

135

de Caracteres

135

4.1. Introduccin
4.2. Arreglos
4.2.1. Vectores
Actividades de Programacin Resueltas
Actividades de Programacin Propuestas
4.2.2. Matrices
Actividades de Programacin Resueltas
Actividades de Programacin Propuestas
4.2.3. Multidimensionales
Actividades de Programacin Resueltas
Practica de Laboratorio
Actividades de Programacin Propuestas
4.3.

Cadenas de Caracteres
Actividades de Programacin Resueltas
Actividades de Programacin Propuestas

158
164
164
164
213
213
245
248
248
250
291
295
295
296
312

Captulo V: Modularidad
5.1.
5.2.
5.3.
5.4.
5.5.
5.6.
5.7.

Introduccin a los subprogramas o subalgoritmos.


Funciones.
Procedimientos.
mbitos: variables locales y globales.
Paso de parmetros: por Valor y por referencia.
Funciones y procedimientos como parmetros.
Efectos laterales.
Actividades de Programacin Resueltas
Actividades de Programacin Propuestas

317
320
321
343
353
353
356
364

Captulo VI: Estructuras, Unin y Enumeracin


6.1.
6.2.
6.3.
6.4.
6.5.
6.6.
6.7.

Introduccin
Estructuras o registros
Acceso a registros
Anidamiento de Estructuras
Array de Estructuras
Registros como Parmetros
Tratamientos de registros en C++
Actividades de Programacin Resueltas

368
378

383
384
385

6.8.
6.9.

Tratamientos de registros en JAVA

386

Actividades de Programacin Resueltas

392

Tratamientos de registros en PHP

409

Actividades de Programacin Resueltas

411

Actividades de Programacin Propuestas

413

6.10. Uniones
6.11. Enumeraciones
Actividades de Programacin Propuestas

418
420
424
431

Captulo VII: Mtodos de Ordenamiento y Bsquedas


7.1. Introduccin
7.2. Ordenamiento
7.2.1. Clasificacin de los Algoritmos de Ordenamiento
7.2.2. Algoritmos de insercin
7.2.2.1.
Insercin directa
7.2.2.2.
Insercin binaria
7.2.2.3.
Shell
7.2.3. Algoritmos de intercambio
7.2.3.1.
Mtodo de la Burbuja
7.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 Directa
7.2.6. Algoritmos de Enumeracin
7.2.6.1.
MergeSort (ordenamiento por mezcla)
7.2.6.2.
Radix Sort
7.2.6.3.
HeapSort
7.3. Bsquedas
7.3.1.
Bsqueda Lineal o Secuencial
7.3.1.1. Bsqueda secuencial con Centinela
7.3.2. Bsqueda binaria o dicotmica
7.3.3.
Bsqueda por transformacin de claves o Hashing
7.4. Ordenacin Externa o de Archivos
7.4.1. Intercalacin
7.5. Complejidad de los Mtodos de Ordenamiento
Actividades de Programacin Propuestas

445
451
463
468
481
482
483
486
488
491
494
496
498
521
526
527
528
529

Captulo VIII: Archivos


8.1. Introduccin
8.2. Tratamiento de Archivos en Lenguaje C++
8.2.1. Apertura de un archivo
8.2.2. Cierre de un archivo
8.2.3. Trabajando con Archivos de Diferentes Modos
8.2.3.1. Archivos Binarios

531
531
532
534
535

8.2.3.2. Archivos de Acceso Aleatorio


8.2.4. Tipos, Funciones y Clases usados Frecuentemente con Ficheros
8.2.5. Tipos de Archivos

538
540
542

8.3. Tratamiento de Archivos en Lenguaje JAVA


8.3.1. El criterio del modo de acceso
8.3.2. Clases de Streams
8.3.3. Subclases de InputStream
8.3.4. Ficheros de Texto y Binarios en Java

543
545
546
549

8.4. Tratamiento de Archivos en Lenguaje PHP


8.4.1. Operaciones con archivos

553

Actividades de Programacin Propuestas


555
Captulo IX: Recursividad
9.1.
9.2.
9.3.
9.4.
9.5.

Introduccin
Procedimientos recursivos
Como generar Recursividad o Recursin
Estructura de una funcin o procedimiento recursivo
La Multiplicacin de los conejos
Actividades de Programacin Resueltas
Actividades de Programacin Propuestas

Captulo X: Manejo de Punteros


10.1. Introduccin
10.2. Punteros
10.3. Los operadores de punteros
10.4. Asignacin de Punteros
10.5. Inicializacin de Punteros
10.6. Registro a Punteros
10.7. Punteros a Punteros
10.8. Aritmtica de Punteros
10.9. Comparacin de Punteros
10.10. Correspondencia entre punteros y vectores
10.11. Gestin dinmica de la memoria
10.12. Array de registros dinmicos
10.13. Referencias en PHP
10.14. Referencias Globales
10.15. Pasar por Referencias
10.16. Devolver referencias
10.17. Objetos y referencias
Actividades de Programacin Propuestas

556
557
558
559
559
562
564
567
567
570
572
577
577
579
579
583
588
600
600
601
604
608

APENDICES
-

Apndice A: PROYECTOS RESUELTOS EN: C++, JAVA y PHP

613
613

Apndice B: PROBLEMAS Y ALGORITMOS VORACES


Apndice C: ALGORITMO PARA RESOLVER EL CUBO DE RUBIK
Apndice D: BIBLIOGRAFIA

624
625
631
632
652
654
655
658
659
660
663
672
675
676
677
678
680
692
692
700
718
719
719
722
723
723
725
737
741

742
742
743
744
746
747
748
750
751
751
757
763
765
766
768
768
769
771
774
776
787
809
856

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.

Вам также может понравиться