ANALISIS Y DISEÑO
ALGORITMOS Implementacion en: C++, JAVA !"!
Análisis y Diseño de ALGORITMOS. Técnicas y Metodologías básicas de Programación
implementadas en C++, JAVA y PHP Primera !dición, Abril "#$%
&"#$%, 'erec(os )eser*ados por Artro 'ía Plido !l contenido de esta obra está protegido por ley -eda pro(ibida s reprodcción total o parcial de este libro, por cal.ier medio, sin permiso escrito del ator
Hec(o el 'epósito /egal en la 0iblioteca 1acional del Per2 13 de )egistro4 'erec(os )eser*ados con5orme a /ey 6bra impresa en los Talleres 7rá5icos de !ditorial8 P!)9
A mí recordada madre María Pulido Soles, mágica 5lor de mi grandea centella de l y sabidría: en el sempiterno amor .e tengo, (acia ella:
A la bendición de 'ios, mi .erido (i;o Sebástian Díaz Quiroz, l de mi e
A mi Padre Marcelo 'ía y mis (ermanos /ciano, )eina, !sebia, José, Micaela, Jose5a, >ernando, Virginia, Jacinto, Alberto, Maria4 inagotables 5entes de cari=o, bondad y apoyo:
A todos los estdiantes .e me brindaron el apoyo y con5iana amical y 5le
!#olo$o 'esde (ace mc(o tiempo los algoritmos (an e
Introdu""i(n a los Al)orit*os
Aprenderá los conceptos 5ndamentales de los elementos básicos del proceso de la in5ormación en na comptadora Conoce los recrsos principales y necesarios para empear a 5ormlar na solción
$a%ítulo +'
Introdu""i(n a la ro)ra*a"i(n stru"turada
)econoce los aspectos 5ndamentales de n lenga;e de programación como C++, JAVA y PHP, así como la importancia para generar na solción con ellos $a%ítulo -'
erra*ientas de ro)ra*a"i(n y stru"turas %ara la /or*ula"i(n de Al)orit*os
'escbre las técnicas y metodologías para empear a 5ormlar solciones a tra *és de los algoritmos, psedocodigo, diagramas de 5l;o y diagramas 1B Aprenderá a resol*er problemas a tra*és de la comptadora mediante la codi5icación de la solción en n determinado lenga;e de programación4 C++, JAVA y PHP
$a%ítulo 0'
Ti%os de Datos stru"turados o*o)1neos' Arre)los y $adenas de $ara"teres
Concentra el almacenamiento estático de los datos, interpretados como in5ormación !n5ocara casos especiales *inclados al tratamiento de la in5ormación generada por el con;nto de caracteres, representado como na estrctra
$a%ítulo 2'
Modularidad' ro"edi*ientos y 3un"iones 4M1todos5
Comprenderá las técnicas de organiación a tra*és de mecanismos capaces de agrpar las rtinas, .e generan solciones, mediante *alores límites y condiciones en na *ariable Aprenderá a descomponer la solción de n problema, encontrando mecanismos independientes, capaces de lle*ar *alores de *ariables de manera local y global $a%ítulo 6'
stru"turas, 7ni(n, nu*era"i(n
Aprenderá ne*os aspectos de organiar la in5ormación a medida del programador y atendiendo el conte
M1todos de Ordena*iento y 9:s;ueda
'escbrirá los di*ersos métodos para interpretar mediante rtinas de estrctras de códigos, 5ormas de ordenar, bscar e intercalar n dato dentro n blo.e de in5ormación $a%ítulo <'
Ar"#i=os 4/i"#eros5
Conocerá la estrctra interna de la generación de n almacenamiento interno y e
$a%ítulo >'
Re"ursi=idad
Aprenderá estrategias de programación para simpli5icar na solción retiliando las mismas rtinas $a%ítulo &?'
Me*oria Diná*i"a y Mane@o de unteros
Conocerá la organiación dinámica del almacenamiento del *alor de na *ariable en la memoria del comptador
Cal.ier comentario, critica yo sgerencia, en*íenos s email, a nestra dirección de correo electrónico4 in5ormesDprogramandotipscom, .e gentilmente lo atenderemos con el 2nico 5in de me;orar, seg2n ss sgerencias Asimismo pede *isitar nestro Eebsite4 EEEprogramandotipscom pblicacionesp(p Arturo Díaz Pulido.
INDICE DE CONTENIDOS Introducción………………………………………………………………………………….
LV LVF
Razones para leer este libro……………………………………………….…………….
LVFF
CD de Soporte………………………………. :::::::::::::::
LVFF
Cubo mágico (Cubo de Rubik de 3x3x3 )……..…………………………………….......
$ $a%ítulo I' Introdu""i(n a los Al)orit*os &.&. &.+.
Introdu""i(n::::::::::::::::::::::::::: le*entos de ntorno de Al)orit*os y ro)ra*a"i(n..
$"$ Fn5ormación y Procesamiento de la in5ormación:::::::::: $"" HardEare:::::::::::::::::::::::::: $"@ Bo5tEare::::::::::::::::::::::::::: $"G 'ato::::::::::::::::::::::::::::: $"% Fn5ormación:::::::::::::::::::::::::: $" Algoritmo ::::::::::::::::::::: $"I Tipos de /enga;es Algorítmicos $" /enga;es de Programación $"K Tipos de instrcciones $"$# Tradctores de /enga;e $"$$Programa $"$" Metodología para solcionar problemas por medio de las comptadoras $"$@ Acti*idades de Programación $"$G Acti*idades Propestas
" @ @ @ G G % I $$ $$ $I $ "# "#
1.3. ntidades
%ri*iti=as
$@$ Tipos de datos $@" !nciones internas $@K 6peración de asignación $@$# !ntrada y Balida de in5ormación &.-.&&. Acti*idades )eseltas &.-.&+. Acti*idades Propestas
"% "K @$ @$ @G @% G$ G$ G@
$a%ítulo II' Introdu""i(n a la ro)ra*a"i(n stru"turada "on $BB, CAA y
G%
G "$
Fntrodcción
+.+.
Len)ua@e de ro)ra*a"i(n $BB
""$ """ ""@ ""G ""% "" ""I "" ""K
'eclaraciones Pre*ias !strctra 0ásica de n Programa Tipos de 'atos Palabras reser*adas Comentarios 6peradores 7estión de !ntrada Balida en C++ !strctra de Control 0ibliogra5ía
GI G %# %G %I
%I +.-.
Len)ua@e de ro)ra*a"i(n CAA
"@$ !strctra de n Programa en JAVA "@" Fdenti5icadores "@@ Palabras reser*adas "@G /iterales "@% Arrays "@ 6peradores "@I Beparadores "@ !strctras de control de >l;o "@K !inaliadores "@$I Fmport "@$ Pa.etes de Ja*a "@$K 0ibliogra5ía
% %K # " " @ G I I" I@ I@ I@
Len)ua@e de ro)ra*a"i(n
IG
"G$ Conceptos básicos "G" Tipos de *ariables "G@ Comentarios "GG !strctra de n programa PHP "G% 6peraciones y 6peradores "G !strctras de Control "GI 6peración de Balida "G Mane;o de cadenas "GK >nciones de5inidas por el 9sario "G$# /ibrería "G$$!n*ío y recepción de datos "G$" Met(od 7!T y P6BT "G$@ 0ibliogra5ía "G$G Acti*idades de Programación
IG
+.0.
I% II IK # " " % %
I $a%itulo III' erra*ientas y stru"turas Al)orít*i"as %ara /or*ular %ro)ra*as
"on $BB, CAA y
K
-.&.
erra*ientas Al)orít*i"as
@$$ Asignación @$" )epresentación 7rá5ica de los Algoritmos @$"$ 'iagrama de >l;o @$"" 'iagrama !strctrado 1B N1assiBc(neidermanO @$@ Psedocodigo @$G Anidamiento de estrctras -.+.
stru"turas Al)orít*i"as %ara 3or*ula"i(n de ro)ra*as
@"$ Becenciales Acti*idades de Programación )eseltas Acti*idades de Programación Propestas @"" Condicionales @""$ Bimples @""" Compestas @""@ M2ltiples o en Cascada Acti*idades de Programación )eseltas Acti*idades de Programación Propestas @"@ )epetiti*as o Fterati*as @"@$ Cíclicas N'esdeHastaHacerO Acti*idades de Programación )eseltas Acti*idades de Programación Propestas @"@" Aciclicas @"@"$ Mientras Hacer Acti*idades de Programación )eseltas Variables Tipo 0andera
K K K$ K" K" K" K@ K@ KG KI $## $#$ $#" $#@ $#G $#% $# $#I
Acti*idades de Programación Propestas @"@"" Hacer 8 Mientras
$$I
Acti*idades de Programación )eseltas Acti*idades de Programación Propestas
$$ $$
@@ T1"ni"as de Diseño de Al)orit*os @@$ 'i*ide y *encerás @@" Algoritmos Voraces Ná*idosO @@@ Programación dinámica @@G 0ac tracing NVelta atrásO @@% )ami5icación y poda Nbranc(andbondO
$$K $"# $"% $" $@# $@%
$a%itulo I' Ti%os de Datos stru"turados o*o)1neos' Arre)los y $adenas
$@%
de $ara"teres
$@%
G$ Fntrodcción G" Arreglos G"$ Vectores Acti*idades de Programación )eseltas Acti*idades de Programación Propestas G"" Matrices Acti*idades de Programación )eseltas Acti*idades de Programación Propestas G"@ Mltidimensionales Acti*idades de Programación )eseltas Practica de /aboratorio Acti*idades de Programación Propestas G@
Cadenas de Caracteres Acti*idades de Programación )eseltas Acti*idades de Programación Propestas
$% $G $G $G "$@ "$@ "G% "G "G "%# "K$ "K% "K% "K @$"
$a%ítulo ' Modularidad
%$ %" %@ %G %% % %I
Fntrodcción a los sbprogramas o sbalgoritmos >nciones Procedimientos mbitos4 *ariables locales y globales Paso de parámetros4 por Valor y por re5erencia >nciones y procedimientos como parámetros !5ectos laterales Acti*idades de Programación )eseltas Acti*idades de Programación Propestas
@$I @"# @"$ @G@ @%@ @%@ @% @G
$a%ítulo I' stru"turas, 7ni(n y nu*era"i(n
$ " @ G % I
Fntrodcción !strctras o registros Acceso a registros Anidamiento de !strctras Array de !strctras )egistros como Parámetros Tratamientos de registros en C++ Acti*idades de Programación )eseltas
@ @I
@@ @G @%
K
Tratamientos de registros en JAVA
@
Acti*idades de Programación )eseltas
@K"
Tratamientos de registros en PHP
G#K
Acti*idades de Programación )eseltas
G$$
Acti*idades de Programación Propestas
G$@
$# 9niones $$ !nmeraciones Acti*idades de Programación Propestas
G$ G"# G"G G@$
$a%ítulo II' M1todos de Ordena*iento y 9:s;uedas
Fntrodcción I" 6rdenamiento 8.+.&. Clasi5icación de los Algoritmos de 6rdenamiento I"" Algoritmos de inserción I""$ Fnserción directa I""" Fnserción binaria I""@ B(ell I"@ Algoritmos de intercambio I"@$ Método de la 0rb;a I"@" Método B(ae N*ibración o sacdidaO I"@@ -ic Bort NMétodo de ordenación rápidaO I"G Algoritmos de Belección I"% Belección 'irecta I" Algoritmos de !nmeración I"$ MergeBort Nordenamiento por meclaO I"" )adi< Bort I"@ HeapBort I@ 02s.edas I@$ 02s.eda /ineal o Becencial I@$$ 02s.eda secencial con Centinela I@" 02s.eda binaria o dicotómica I@@ 02s.eda por trans5ormación de cla*es o Has(ing IG 6rdenación !
Acti*idades de Programación Propestas
GG% G%$ G@ G G$ G" G@ G G GK$ GKG GK GK %"$ %" %"I %" %"K
$a%ítulo III' Ar"#i=os
Fntrodcción " Tratamiento de Arc(i*os en /enga;e C++ "$ Apertra de n arc(i*o "" Cierre de n arc(i*o "@ Traba;ando con Arc(i*os de 'i5erentes Modos "@$ Arc(i*os 0inarios <.&.
%@$ %@$ %@" %@G %@%
"@" Arc(i*os de Acceso Aleatorio "G Tipos, >nciones y Clases sados >recentemente con >ic(eros "% Tipos de Arc(i*os
%@ %G# %G"
@ Tratamiento de Arc(i*os en /enga;e JAVA @$ !l criterio del modo de acceso @" Clases de Btreams @@ Bbclases de FnptBtream @G >ic(eros de Te
%G@ %G% %G %GK
G Tratamiento de Arc(i*os en /enga;e PHP G$ 6peraciones con arc(i*os
%%@
Acti*idades de Programación Propestas %%% $a%ítulo IE' Re"ursi=idad
K$ K" K@ KG K%
Fntrodcción Procedimientos recrsi*os Como generar )ecrsi*idad o )ecrsión !strctra de na 5nción o procedimiento recrsi*o /a Mltiplicación de los cone;os Acti*idades de Programación )eseltas Acti*idades de Programación Propestas
$a%ítulo E' Mane@o de unteros
$#$ Fntrodcción $#" Pnteros $#@ /os operadores de pnteros $#G Asignación de Pnteros $#% Fnicialiación de Pnteros $# )egistro a Pnteros $#I Pnteros a Pnteros $# Aritmética de Pnteros $#K Comparación de Pnteros $#$# Correspondencia entre pnteros y *ectores $#$$ 7estión dinámica de la memoria $#$" Array de registros dinámicos $#$@ )e5erencias en PHP $#$G )e5erencias 7lobales $#$% Pasar por )e5erencias $#$ 'e*ol*er re5erencias $#$I 6b;etos y re5erencias Acti*idades de Programación Propestas
%% %%I %% %%K %%K %" %G %I %I %I# %I" %II %II %IK %IK %@ % ## ## #$ #G #
AFDI$S
A%1ndi"e A' ROH$TOS RS7LTOS F' $BB, CAA y
$@ $@
A%1ndi"e 9' RO9LMAS H ALGORITMOS ORA$S A%1ndi"e $' ALGORITMO ARA RSOLR L $79O D R79I A%1ndi"e D' 9I9LIOGRA/IA
"G "% @$ @" %" %G %% % %K # @ I" I% I II I # K" K" I## I$ I$K I$K I"" I"@ I"@ I"% I@I IG$
IG" IG" IG@ IGG IG IGI IG I%# I%$ I%$ I%I I@ I% I I I IK II$ IIG II II #K %
INTROD%CCION /os algoritmos se presentan en las di*ersas rtinas .e e5ectamos a diario, es decir .e en nestro entorno e;ectamos nestras tareas a tra*és de na secencia de pasos !l desarrollo de algoritmos es n tema 5ndamental en el dise=o de solciones de problemas, antes de ser atomatiados en programas para ser operados a tra*és de na comptadora !l algoritmo nos da la solción genérica a n problema y lo podremos emplear todas las *eces .e se nos presente ese mismo problema Por e;emplo, el algoritmo de la di*isión es genérico e independiente de los n2meros .e tengamos .e di*idir 9na *e descbierto n algoritmo para e5ectar na tarea, la realiación de ésta ya no re.iere entender los principios en .e se basa dic(o algoritmo, pes el proceso se redce a segir las instrcciones del mismo Por e;emplo, podemos (acer na di*isión sigiendo el algoritmo sin entender por .é 5nciona el algoritmo /a inteligencia re.erida para lle*ar a cabo la tarea está codi5icada en el algoritmo /as má.inas algorítmicas son a.ellas capaces de lle*ar a cabo algoritmos, y entre ellas están los comptadores !n el ámbito de los comptadores, los algoritmos se e
podemos constrir na má.ina para lle*arla a cabo siempre .e la tecnología (aya a*anado lo s5iciente Bi no encontramos n algoritmo, es posible .e la e;ección esté 5era de las capacidades de las má.inas 9n comptador es todo aparato o má.ina destinada a procesar in5ormación, entendiéndose por proceso las scesi*as 5ases, maniplaciones o trans5ormaciones .e s5re la in5ormación para resol*er n problema determinado, sigiendo las instrcciones de n programa registrado Razones para leer este libro
!ste libro le permitirá conocer y estdiar las di*ersas técnicas básicas de programación, así como aprender la programación estrctrada en los lenga;es de programación como C++, JAVA y PHP Biendo my importante tener n claro conocimiento de las di5erencias .e cada no de ellos mestra, este libro se desarrolló basado en la necesidad .e los estdiantes presentan cando bscan encontrar di*ersas 5ormas de como plantear na solción así como para a.ellos .e bs.en la integración de ss solciones a ni*el de los di*ersos entornos de estos lenga;es de programación El CD de soporte
!n este libro se inclye n C' con más de "## e;emplos *istos a ni*el del libro y otros .e no 5eron inclidos en esta obra didáctica por raones de espacios /as 5ormas de *er los códigos 5entes de los e;emplos del libro otros se pede (acerse de " maneras4
A ni*el de n arc(i*o índice Eeb Síndice(tm el cal le mostrara na página local enlaada a s C' y poder consltar la in5ormación por temas y capítlos, seg2n la
estrctra del libro Be pede e
Cubo máico !Cubo de Rubi" de #$#$#)
Conocido como n ple mecánico tridimensional se integra en este libro, como n material didáctico para poner en practica di*ersos e;ercicios mentales, ya .e para resol*er
el cbo de )bi, es necesario memoriar na serie de algoritmos o secencias con lo cal estamos traba;ando la memoria y otros aspectos del aprendia;e