Академический Документы
Профессиональный Документы
Культура Документы
Programacin
de Algortimos
Gua didctica
4 crditos
Titulacin
Ciclo
Ingeniero en Informtica
III
Autor:
Ing. Guido Eduardo Riofro Caldern
Estimado estudiante recuerde que la presente gua didctica est disponible en el EVA en formato PDF interactivo,
lo que le permitir acceder en lnea a todos los recursos educativos.
18307
Asesora virtual:
www.utpl.edu.ec
PROGRAMACIN DE ALGORITMOS
Gua didctica
2. ndice
2. ndice........................................................................................................................................................ 4
3. Introduccin........................................................................................................................................... 6
4. Lineamientos generales del Modelo Educativo basado en competencias y ...........
crditos acadmicos UTPL- ECTS.................................................................................................... 7
4.1. Competencias genricas.................................................................................................................... 8
4.2. Competencias especficas.................................................................................................................. 8
5. Bibliografa............................................................................................................................................ 9
5.1. Bsica................................................................................................................................................. 9
5.2. Complementaria................................................................................................................................ 9
5.3. Recursos OCW.................................................................................................................................... 10
SEGUNDO BIMESTRE
7.4. Planificacin para el trabajo del alumno......................................................................................... 37
7.5. Orientaciones especficas para el aprendizaje por competencias................................................... 38
Unidad 4. Programacin con ficheros en Java............................................................................................................... 38
8. Solucionario........................................................................................................................................... 49
9. Recursos Multimedia.......................................................................................................................... 55
PRELIMINARES
3. Introduccin
Programacin de Algoritmos es una asignatura con 4 crditos , forma parte del grupo de materias
troncales de la malla curricular y pertenece al tercer ciclo en la carrera de Sistemas Informticos y
Computacin de la Escuela de Ciencias de la Computacin. Modalidad Abierta y a Distancia.
Los algoritmos son muy importantes a la hora de programar ya que son los pasos exactos para resolver
un problema. Esto quiere decir que es un procedimiento computacional bien definido que requiere de
datos de entrada y produce un valor como salida.
Con esta asignatura se pretende que nuestros estudiantes aprendan a resolver cualquier tipo de
problemas ya sean matemticos o computacionales, a travs del diseo y anlisis de algoritmos eficientes.
Los algoritmos no solo son importantes porque nos ayudan a resolver problemas, nos obligan a pensar
y son la base de la programacin, la calidad de un programa computacional depende de la calidad del
algoritmo.
Los contenidos que abarca la asignatura estn estructurados en cinco unidades, distribuidos 3 para el
primer bimestre y 2 para el segundo bimestre.
La primera unidad comprende la Gestin de excepciones en Java, donde se explica los fundamentos
sobre el manejo de excepciones, los API de Java y su aplicacin; la unidad dos, hablaremos de los
algoritmos sobre arreglos, aqu explicaremos la estructura de un arreglo, los algoritmos de bsqueda y
ordenamiento y las operaciones sobre arreglos; la tercera unidad trata sobre los algoritmos recursivos,
donde revisaremos algunos conceptos bsicos de recursividad y ejemplos de aplicacin.
En el segundo bimestre, la unidad 4 trata de la programacin con ficheros en Java, donde revisaremos
los conceptos preliminares sobre datos, los flujos en Java, la estructura y lectura de datos en los ficheros,
algoritmos con archivos y algunos programas de aplicacin; finalmente en la unidad 5 estudiaremos
las clases y objetos en java, donde se aprender los mecanismos que dispone el lenguaje Java para
almacenar y recuperar informacin.
Como docente de la universidad me desempeo en el Instituto de Investigaciones en Ciencias de la
Computacin, es muy grato para m darles la ms cordial bienvenida a este nuevo ciclo acadmico y
recuerden estimados estudiantes que estar gustoso de acompaarles y orientarles en el proceso de
aprendizaje.
Saludos y xitos.
PRELIMINARES
Elementos de una competencia. Tres son los elementos que podemos distinguir en toda
competencia:
Un crdito acadmico es la unidad de medida del trabajo del estudiante, implica 32 horas de trabajo del
alumno (29 horas de trabajo autnomo y 3 horas de interaccin) 1.
Los crditos acadmicos que el estudiante ir acumulando en el transcurso de la carrera involucran:
aprendizaje autnomo (estudio personal), tareas de investigacin, interaccin en el Entorno Virtual de
Aprendizaje (EVA), participacin en tutoras, videoconferencias y otros eventos acadmicos (Jornadas,
seminarios, cursos, congresos avalados por la UTPL), prcticas acadmicas, pasantas preprofesionales
y de vinculacin con la colectividad; actividades de evaluacin; as como la realizacin del trabajo de
titulacin.
El modelo adoptado por la UTPL contempla dos tipos de competencias: genricas y especficas.
Competencias Genricas: Son aquellas capacidades (actitudes, habilidades y conocimientos)
comunes a todas las profesiones que se ofrecen en la UTPL. Constituyen una parte fundamental
del perfil que el estudiante debe desarrollar durante su formacin.
CONESUP (2008): Reglamento del Rgimen Acadmico del Sistema Nacional de Educacin Superior, art. 18.
PRELIMINARES
Las Unidades Acadmicas o Escuelas de la UTPL han estructurado el programa formativo contemplando
cinco mbitos o bloques de asignaturas: Formacin Bsica (10%); Genricas de carrera (15%); Troncales
(35%) Complementarias (10%); Libre configuracin (10%) y adems, el Practicum que comprende las
Pasantas preprofesionales y de vinculacin con la colectividad y Practicum Acadmico (20%).
4.1. Competencias genricas
-
-
-
-
-
-
-
-
-
-
-
-
PRELIMINARES
5. Bibliografa
5.1. Bsica
Texto: DEITEL, H. y DEITEL, P. (2010): Como Programar en Java, Mxico, Editorial Pearson Prentice
Hall.
Se ha seleccionado este texto por las ventajas pedaggicas y tcnicas que brinda al estudiante, en el
mismo se tratan temas relacionados con el lenguaje desde los conceptos, estructuras y sintaxis bsicas,
de esta forma este recurso bibliogrfico le servir al estudiante no solo en el presente ciclo sino durante
el resto de su carrera, adicionalmente en el texto se puede encontrar una gran cantidad de ejercicios los
cuales han sido explicados a detalle por parte de los autores.
Gua: Riofro, G. (2011): Gua didctica de programacin de algoritmos, Ecuador, Editorial UTPL.
La gua didctica contiene las indicaciones que usted debe tener en cuenta para realizar un estudio
eficaz, en este texto tambin se han colocado ejercicios complementarios a los que estn planteados en
el texto base.
5.2. Complementaria
Ceballos J. (2007): Java 2 Lenguaje y aplicaciones. Madrid: Editorial Alfaomega Grupo Editorial.
Libro de programacin en Java, que abarca temas relacionados con sentencias de control, matrices,
mtodos, ficheros, programacin orientada a objetos, etc.
En este video se explica el uso del IDE NetBeans para realizar programas en java.
Edualnav.
Programacin en Java [En lnea]. Disponible en http://www.youtube.com/
watch?v=DE521kI-73Q [Consultada en 23/02/2011].
El video muestra el uso de interfaz grfica NetBeans, ejemplos y manejo bsico. Parte I.
El video muestra el uso de interfaz grfica NetBeans, ejemplos y manejo bsico. Parte II.
PRELIMINARES
El video muestra el uso de interfaz grfica NetBeans, ejemplos y manejo bsico. Parte III.
Sarriguren, A., Serrano, J y Alonso, L. (2009): Introduccin a la programacin en java OpenCourseWare de la Universidad del Pas Vasco [En lnea]. Madrid. Disponible en: http://ocw.
ehu.es/ensenanzas-tecnicas/introduccion-a-la programacion-en-java/Course_listing. [Consulta
15-01-2011].
PRELIMINARES
http://ocw.upm.es/lenguajes-y-sistemas-informaticos/programacion-en-java-i/Contenidos/
LecturaObligatoria/9-objetosyclases.pdf
El contenido de este recurso dispone de informacin relevante para estudiar los temas relacionados
con Clases y Objetos en Java.
http://ocw.upm.es/lenguajes-y-sistemas-informaticos/programacion-en-java-i/Contenidos/
LecturaObligatoria/16-herencia.pdf
En este recurso se trata el tema de la herencia en Java, mismo que es muy importante para la
creacin de nuevas clases en base al comportamiento de otras ya existentes.
10
PRELIMINARES
Estimado Estudiante:
Para el mejor desempeo en sus actividades acadmicas y sobretodo de esta materia, la Universidad
pone a su disposicin una serie de recursos y estrategias para favorecer la comprensin de los temas a
tratar y lograr un aporte significativo en el conocimiento del modelado de sistemas.
Es importante destacar que para el estudio de la materia usted dispone un texto bsico, la gua didctica
y material adicional que se encuentra especificados en la bibliografa.
Le sugerimos aplicar un esquema de trabajo apropiado, en el cual pueda conjugar sus actividades
acadmicas, profesionales y familiares. A continuacin le presentamos algunos recursos y tcnicas de
estudio que le sern de mucha utilidad en el desarrollo de los contenidos de la materia:
Planifique previamente las actividades de estudio, de manera que pueda avanzar ordenadamente
en cada una de las unidades y temas establecidos en la gua de estudio. Lo alentamos a cumplir
con las actividades planificadas con la finalidad de que no se vea abocado a realizar grandes
jornadas de estudio al final de cada bimestre.
Lea detenidamente cada uno de los contenidos de la gua didctica y realice todas las actividades
que se plantean en la misma; no es aconsejable que usted trabaje de manera separada la gua
didctica y el texto bsico.
Participe activamente en el Entorno Virtual de Aprendizaje (EVA), en donde podr interactuar tanto
con sus profesores tutores y compaeros; dar criterios y opiniones en los foros de discusin que
en cada bimestre se le propondrn.
Utilice los recursos web (videos, presentaciones, podcast) que la universidad ha puesto a
disposicin y que se encuentran en la pgina principal de la UTPL a los que se puede acceder
ingresando a la pgina www.utpl.edu.ec
Desarrolle las evaluaciones a distancia (una por cada bimestre) recuerde que estas sirven como
estrategia de aprendizaje y preparacin para las evaluaciones presenciales y que se califican sobre
6 puntos.
No pierda la oportunidad de contactarse con su profesor, utilice los horarios de tutora de la materia
para resolver las inquietudes presentadas en relacin a los contenidos, desarrollo de trabajos y/o
situaciones de carcter organizativo.
Adicionalmente encontrara a lo largo de la presente gua una serie de focalizadores los cuales le indicaran
que actividades debe desarrollar para reforzar el aprendizaje.
11
PRELIMINARES
Lectura recomendada
Antes de empezar el estudio de una nueva unidad se le recomienda leer los temas relacionados en el
texto, de esta manera usted se ubicara en el contexto de estudio que se esta tratando.
Estrategia de aprendizaje
Otro aspecto importante es transmitir algunas buenas practicas en el desarrollo de aplicaciones y consejos
de programacin las cuales de la misma forma contribuyen a hacer que el proceso de aprendizaje del
estudiante sea efectivo.
De igual forma se recomienda que el estudiante pruebe diferentes lgicas para resolver un problema,
esto con la finalidad de poder diferenciar las ventajas y desventajas que pueden existir al momento de
resolver un problema.
12
PRIMER BIMESTRE
7.
PRIMER BIMESTRE
7.1. Planificacin para el trabajo del alumno
COMPETENCIAS
ESPECFICAS
OBJETIVOS DE
APRENDIZAJE
Definir
requerimientos,
disear,
implementar,
integrar,
administrar
y optimizar
soluciones
software
centralizadas,
distribuidas
soluciones web.
Aplicar la lgica
matemtica en
el contexto de
las Ciencias de
la Computacin,
con proyeccin,
al diseo
de circuitos,
programacin,
anlisis y
desarrollo de
algoritmos.
Definir y calcular
la eficiencia de
los algoritmos
utilizando
pseudocodigo
y midiendo el
desempeo de
los algoritmos
elaborados y
valorando su
utilidad.
Analizar y disear
sistemas digitales
aplicables a
la tecnologa
computacional
CRONOGRAMA
ORIENTATIVO
Unidades/Temas
Tiempo estimado
Identificar la naturaleza
Unidad 1: Gestin de
y la importancia del
Excepciones en java
control de excepciones
Fundamentos sobre el
en Java
manejo de excepciones
Aplicar las estrategias
La API de Java
de control de
excepciones en
Uso de try y catch
problemas
La instruccin throws
CONTENIDOS
Estructura de un array
Algoritmos de bsqueda
Algoritmos de
ordenamiento
Operaciones adicionales
en un arreglo
Capitulo 3: Algoritmos
recursivos
Comprender los
ejercicios propuestos
para desarrollar nuevas
propuestas de solucin
Lectura comprensiva de la
primera unidad.
Desarrollo de actividades
recomendadas en la gua
didctica.
Lectura comprensiva de la
primera unidad.
Desarrollo de actividades
recomendadas en la gua
didctica.
Lectura comprensiva de la
primera unidad.
Desarrollo de actividades
recomendadas en la gua
didctica.
Semana 7 y 8
8 horas
8 horas de autoestudio.
8 horas de interaccin
Generar excepciones
propias
Capitulo 2: Algoritmos
sobre arreglos
Semana 1 y 2
ACTIVIDADES DE
APRENDIZAJE
Introduccin y
conceptos bsicos de
recursividad
Semana 3 y 4
8 horas de autoestudio.
8 horas de interaccin
Semana 5 y 6
8 horas de autoestudio.
8 horas de interaccin.
Aplicacin de la
recursividad
Unidades 1, 2 y 3
13
PRIMER BIMESTRE
Interaccin
con el EVA
Evaluacin
Presencial
Parte
Objetiva
Evaluacin a Distancia
Comportamiento tico
X
X
Creatividad e iniciativa
Habilidades
3. Coevaluacin
2. Heteroevaluacin
Parte de
Ensayo
Actitudes
1. Autoevaluacin *
Puntaje
10%
20%
TOTAL
30%
70%
14
Actividades presenciales y
en el EVA
PORCENTAJE
Mximo 1 punto
(Completa la evaluacin a
distancia)
Conocimientos
20 puntos
Para aprobar la asignatura se requiere obtener un puntaje mnimo de 28/40 puntos, que equivale al 70%
* Son estrategias de aprendizaje, no tienen calificacin; pero debe responderlas con el fin de autocomprobar su proceso de aprendizaje.
** Recuerde que la evaluacin a distancia del primero y segundo bimestre consta de dos partes: una objetiva y otra de ensayo, debe desarrollarla y entregarla en
su respectivo centro universitario.
Sr. estudiante:
Tenga presente que la finalidad de la valoracin cualitativa es principalmente formativa; sin embargo,
en circunstancias especiales podra afectarle positiva o negativamente en su calificacin cuantitativa.
14
PRIMER BIMESTRE
Estimados participantes, a partir de este momento empezamos con el estudio de la presente asignatura,
espero que las indicaciones impartidas por mi persona a travs de la presente gua didctica les sean
de gran utilidad para obtener los conocimientos que nos hemos planteado, adicionalmente recuerden
que disponen de varios medios para solicitar ayuda o explicacin de temas puntuales y que necesiten
mayor atencin. De la misma forma al empezar cada unidad les hare una presentacin del contenido y
su ubicacin dentro del contexto de la asignatura.
La gestin de excepciones en un proceso de programacin es un tema muy importante si queremos que
nuestras aplicaciones sean robustas, de calidad y sean tiles para nuestros usuarios; pero, qu es una
excepcin? a este trmino en algunos casos lo encontraremos con el nombre de error o problema, esto
es muy cierto, pues una excepcin es una situacin poco habitual, aquella situacin que se sale de un
proceso o flujo normal, este aspecto representa especial atencin en el rea de desarrollo de aplicaciones,
puesto que los programas siguen una serie de pasos que fueron programados y en el transcurso del
mismo pueden ocurrir situaciones no previstas; imagnense ustedes como estudiantes de la UTPL que
estn realizando una matrcula on-line y repentinamente existe un fallo en la red o se digita mal un dato,
etc. Es evidente que debe existir un mecanismo que controle estas situaciones cuyo principal objetivo en
este caso particular es no dejar el proceso de matrcula inconsistente, con datos perdidos o parcialmente
grabados. En esta unidad estudiaremos las tcnicas que proporciona el lenguaje de programacin Java
para gestionar y controlar excepciones.
1.1. Fundamentos sobre el manejo de excepciones
15
PRIMER BIMESTRE
La jerarqua de clases
Todo lo relacionado con el tema de herencia es decir que mtodos son propios de una clase y
cuales son heredados
Bueno, todo esto y muchas cosas mas son importantes para un desarrollador.
16
PRIMER BIMESTRE
Sr. estudiante lea la seccin 13.4 del texto base, en la cual existe un ejercicio
explicativo de los bloques try y catch.
El uso de las sentencias try y catch es la principal forma de controlar las excepciones en java, tal como se
indica en el texto base en el bloque try se coloca las instrucciones que potencialmente podran generar
esta situacin, la sintaxis de estas instrucciones es la siguiente:
17
try {
. . . . . . . . . . .
. . . . . . . . . . .
}
catch(TipoException1 e1) {
. . . . . . . . . . .
. . . . . . . . . . .
}
catch(TipoException2 e2) {
. . . . . . . . . . .
. . . . . . . . . . .
}
PRIMER BIMESTRE
.
.
.
.
.
.
Luego de una instruccin try se debe colocar por lo menos un bloque catch cuyo cdigo se ejecuta si
y solamente si se ha generado una excepcionen en el bloque try correspondiente. En la Figura 13.2 del
texto base se podr dar cuenta que puede existir mas de un bloque catch, es decir se pueden gestionar
diferentes tipos de excepciones a la vez.
1.4. Uso de la instruccin throws
A continuacin revisemos el uso de la instruccin throws misma que sirve para declarar que en un
determinado mtodo puede ocurrir una excepcin, esto quiere decir que el control de la excepcin
se la debe realizar en la lnea de cdigo que llama a este mtodo, en la Figura 13.2 del texto base se
muestra el uso de la instruccin throws en el mtodo denominado cociente, algo importante que se
debe mencionar es que si en un mtodo se declara una o mas excepciones con esta instruccin pues es
obligatorio utilizar las instrucciones try y catch en la lnea que llama a este mtodo, en caso contrario nos
dar un error de compilacin.
1.5. Generar excepciones propias
Dependiendo de la naturaleza de la aplicacin que se este desarrollando se puede requerir lanzar una
excepcin especifica para un caso puntual, en estos casos es posible crear una clase que describa la
excepcin, la nueva clase debe heredar directa o indirectamente de Exception, en la Figura 17.4 se
presenta la codificacin de un ejemplo.
18
PRIMER BIMESTRE
Autoevaluacin 1
Pregunta
Un intento por acceder a un elemento ms all del fin del arreglo, es un ejemplo de
excepcin.
10
11
12
Si se sabe que un mtodo podra lanzar una excepcin, se debe inclur en el programa
el cdigo apropiado para manejar excepciones.
13
14
15
16
17
El compilador verifica cada una de las llamadas a un mtodo, junto con su declaracin,
para determinar si el mtodo lanza excepciones verificadas.
18
19
PRIMER BIMESTRE
19
20
Una excepcin que no sea atrapada en una aplicacin har que se ejecute el
manejador de excepciones predeterminado de Java.
21
22
23
Por convencin, todos los nombres de las clases de excepciones deben terminar con
la palabra throws.
24
25
Una poscondicin es falsa una vez que el mtodo regresa con xito.
26
Las aserciones son condiciones que deben ser verdaderas en un punto especfico de
un mtodo.
Ejercicios propuestos
Desarrolle los siguientes ejercicios planteados al final del captulo 13 del texto base: 13.17, 13.19, 13.20,
13.22
Ir a solucionario
20
PRIMER BIMESTRE
Bien, continuemos con el estudio de nuestra asignatura, en esta ocasin empezaremos con el estudio
de una estructura muy importante en el rea de la programacin, los arreglos! estos tipos de datos
pertenecen al grupo de las estructuras compuestas, es decir se forman en base a las estructuras
fundamentales, y tal como indique anteriormente son muy importantes puesto que estn presentes
en cualquier aplicacin por mas pequea o de tipo corporativa que sta sea, si bien es cierto ustedes ya
realizaron el ciclo anterior un estudio preliminar de este tema, pues en la presente unidad empezaremos
haciendo un repaso y posteriormente nos centraremos en el estudio de varios algoritmos para manipular
los valores incluidos en un arreglo, los procesos mas importantes que se realizan sobre estas estructuras
son: bsqueda de elementos, ordenamiento, insercin. Quiero indicar que el propsito principal de
este tema es que usted seor estudiante aprenda a dominar y mantener la informacin existente en
un arreglo cuya aplicacin sea en contextos especficos, tales como anlisis de datos temporales, en
el campo de la educacin para almacenar notas de estudiantes y realizar proyecciones, almacenar los
datos de las cosechas para calcular costos de produccin, etc. Bien, luego de esta pequea introduccin
iniciemos con el estudio, y ya saben mucha suerte, recuerden que la clave para tener xito y comprender
estos temas es: en primer lugar entender y seguir la indicaciones que se proponen y luego realizar los
ejercicios planteados.
2.1. Estructura de un Array
Sr. estudiante lea el captulo 7 del texto base en el cual se presenta los conceptos fundamentales de los arreglos
Fuente: http://www.google.com/imgres?imgurl=http://4.bp.blogspot.com
Figura 2.1 Arreglo de paneles solares
21
PRIMER BIMESTRE
Antes de empezar con el estudio de los algoritmos para manipular los datos almacenados en un arreglo,
recordemos algunas caractersticas importantes de este tipo de datos, adicionalmente ustedes pueden
ver la Figura 7.1 del texto base en el cual se muestra grficamente los componentes de un array:
Se diferencia claramente dos componentes; los ndices y los datos, en el lenguaje Java estos ndices
empiezan desde 0.
Son estructuras de longitud fija, es decir conservan la misma longitud desde el momento que son
creados.
En Java tambin se los conoce como tipos de referencia, puesto que una variable de tipo arreglo en
realidad lo que almacena es una referencia a memoria y no los datos propiamente, esto se puede
comprobar puesto que no es posible comparar directamente dos variables, es decir si tengo los
arreglos a y b, la expresin a==b no seria valida, en su lugar se debe utilizar el mtodo equals.
Para acceder al valor de un arreglo se debe especificar entre corchetes el ndice de la posicin,
el cual debe ser un nmero entero, este valor puede ser el resultado de cualquier operacin
matemtica.
Una vez que hemos recordado estas caractersticas, revisemos los aspectos relacionados con la
declaracin e inicializacin:
Como ustedes habrn visto en el texto base, para crear un arreglo es necesario utilizar la instruccin
new, esto se debe a que este tipo de dato es en realidad un objeto y las variables almacenan la
referencia a este objeto en memoria tal como lo indique anteriormente.
Otro aspecto importante es el relacionado con la inicializacin, fjense que es posible asignarle
valores al arreglo al momento de su declaracin o creacin, en este caso ya no se utiliza la
instruccin new puesto que la mquina virtual de Java crea el objeto con la cantidad de elementos
especificados entre las llaves (en la seccin 7.4 hay un ejemplo de esta inicializacin).
Es muy importante que usted domine ampliamente estos temas de base, puesto
que los mismos son fundamentales para la comprensin de los algoritmos de
bsqueda, ordenamiento y otros relacionados con arreglos, por lo tanto le
recomiendo codificar los ejemplos que se muestran en esta seccin del texto
base, son ejercicios muy cortos pero que le ayudaran mucho en su proceso de
aprendizaje.
Algo que me parece interesante es lo que se muestra en la seccin 7.6 del texto base, les comento que yo
como profesor de la UTPL he utilizado tradicionalmente los ciclos for clsicos para recorrer los elementos
de un arreglo << for (int i=0; i<arreglo.length; i++) >>, pero en esta ocasin se presenta una estructura
for mejorada, mas simple y que adems evita caer en los tpicos errores de acceder a elementos fuera de
rango, en la figura 7.12 se muestra el cdigo y particularmente en la lneas 12 y 13 se ve como se declara
una variable (numero) la cual recoge los elementos del arreglo en cada iteracin e internamente en el
ciclo for se utiliza esta variable.
Bien, para terminar con este repaso, en la seccin 7.9 se presentan los arreglos multidimensionales,
particularmente los bidimensionales, de la misma forma les recomiendo que revisen estos contenidos,
si bien es cierto que todas las caractersticas que revisamos en los arreglos de una dimensin se aplican
22
PRIMER BIMESTRE
en esta parte, pero obviamente en este caso existen diferencias en cuanto a la codificacin para recorrer,
inicializar, crear matrices; puesto que ahora se tiene dos subndices, la Figura 7.16 muestra la estructura
de una matriz.
2.2. Algoritmos de bsqueda
Sr. estudiante lea el captulo 16, la seccin 2 del texto base en el cual se explica
las tcnicas relacionadas con los algoritmos de bsqueda
Esta claro que un arreglo hace referencia a un conjunto de datos, por lo tanto existe una seria de
operaciones que son tpicas de realizar en esta estructura, empecemos con el estudio de los algoritmos
de bsqueda puesto que estos algoritmos son la base para la realizacin de otras operaciones como son
eliminacin, modificacin, etc.
Los algoritmos de bsqueda bsicamente pueden ser de dos tipos:
La idea bsica de la bsqueda secuencial es recorrer el arreglo e ir comparando cada elemento del
arreglo con la clave o valor buscado, se puede aplicar tanto en arreglos desordenados como en arreglos
ordenados, aunque para el caso de los arreglos ordenados se recomienda la bsqueda binaria puesto
que es mas eficiente en este caso, en la seccin 16.2 del texto base se muestra el cdigo correspondiente
a estos dos algoritmos de bsqueda.
En lo relacionado a la bsqueda binaria esta se aplica exclusivamente en arreglos ordenados puesto que
la idea bsica de esta tcnica es dividir el arreglo en dos partes e ir ubicando el elemento en la primera
mitad o en la segunda, dependiendo de su valor, si es mayor o si es menor que el elemento central del
arreglo, en la siguiente imagen se puede observar de forma grafica como trabaja este algoritmo.
El cdigo para la bsqueda binaria se encuentra disponible en el texto base, a continuacin les presento
una imagen para entender grficamente la lgica de este algoritmo; veamos que los datos en este arreglo
se encuentran ordenados y se pide buscar el elemento nmero 44, usted se puede dar cuenta que se
necesitan nicamente 5 iteraciones hasta encontrar el elemento buscado a diferencia de la busque
secuencial en al cual se requeriran por lo menos 14 comparaciones hasta encontrar el elemento.
23
PRIMER BIMESTRE
Sr. estudiante lea el captulo 16, la seccin 3 del texto base en el cual se explica
las tcnicas relacionadas con los algoritmos de ordenamiento en arreglos.
Otra de las tares fundamentales en el trabajo con arreglos es el ordenamiento de sus elementos, en la
seccin 16.3 del texto base se describen 3 tcnicas:
Cada uno de estos mtodos tiene sus ventajas y sus desventajas, en unos casos la sencillez de su
implementacin pude resultar un factor favorable, en otros casos se debe tener en cuenta la eficiencia o
el tiempo y cantidad de recursos de memoria que requieren para ejecutar su trabajo.
Por otra parte quiero mostrarles la tcnica conocida como mtodo burbuja la cual no consta en el texto
base pero seria interesante conocerla puesto que es un mtodo simple y la idea principal consiste en
acarrear los elementos menores hasta ubicarlos en su posicin correcta
24
PRIMER BIMESTRE
Descripcin
Se obtiene la cantidad de elementos del arreglo para lo cual se utiliza el atributo length del
objeto
9,10
12,13,
14
17
En cada iteracin queda ordenado el ltimo elemento por lo tanto en cada iteracin se
disminuye el limite
20, 21
Se recorre el arreglo para presentar sus elementos mediante una estructura for mejorada
25
PRIMER BIMESTRE
Descripcin
9,10,
11,12,
13
Mediante una estructura while se busca la posicin del elemento que se quiere eliminar
para lo cual se compara cada elemento del arreglo con el valor almacenado en la variable
x.
El proceso de eliminacin consiste en recorrer los elementos desde la posicin del datos
hasta el final del arreglo y moverlos una posicin hacia la izquierda, para lo cual se coloca
el elemento pos+1 en la posicin pos .
14,15,
16,17
Otra de las operaciones que son muy comunes cuando trabajamos con arreglos es la insercin de nuevos
elementos, en este caso se debe tener en cuenta que si el arreglo ya esta lleno el ultimo elemento se
perder, y la lgica es muy similar al problema presentado anteriormente puesto que los elementos se
deben mover para crear el espacio para el nuevo elemento.
26
Descripcin
Se especifica el elemento que se quiere insertar
Se busca la posicin de insercin, y teniendo en cuenta que el arreglo esta ordenado
ascendentemente, en este caso se recorre el arreglo mientras el elemento que se quiere
insertar sea menor que cada valor recorrido
Se recorre el arreglo desde el ltimo elemento hasta la posicin de insercin y se va
moviendo cada elemento una posicin a la derecha
Finalmente se copia el valor que se quiere insertar en la posicin encontrada en el proceso
anterior.
PRIMER BIMESTRE
Como se puede dar cuenta el trabajo con arreglos no es complicado puesto que lo mas importante es
manejar de forma consistente la informacin, antes de escribir el cdigo se debe analizar la solucin
para de esta manera tener la idea clara del algoritmo que se desea programar, para finalizar esta unidad
revisemos un ejercicio especfico, en esta ocasin vamos a presentar la frecuencia de ocurrencia de cada
valor en un arreglo.
Descripcin
11
La idea de este ejercicio es presentar cuantas veces esta cada elemento en el arreglo, para
lo cual se recorren todos sus elementos
Anlisis del programa Frecuencia (Figura 2.6)
Lnea
12
13,14,
15,16,
17
18
19
Descripcin
A cada elemento que lo vamos a comparar con el resto le llamaremos valorPrincipal
Es necesario verificar si cada valor principal que visitemos ya existe anteriormente en el
arreglo es decir ya ha sido contabilizado o analizado, esto para evitar presentar dos o mas
veces dicho valor, en este caso se recorre los elementos desde la posicin de valor principal
hasta el primer elemento, si elemento ya existe se coloca true en la variable correspondiente.
El proceso de contabilidar los valores se realiza nicamente si el elemento no existe
previamente, es decir si la variable yaExiste esta en false
Se inicializa el contador de elementos en 0
27
20,21,
22,23,
24
PRIMER BIMESTRE
Finalmente se visita cada casillero del arreglo para contabilizar nicamente aquellos
elementos que son iguales al valor principal
Descripcin
Importamos la clase Arrays, recordemos que nicamente las clases que estn en java.lang
se importan automticamente
Anlisis del programa EjercicioArrays (Figura)
Lnea
Descripcin
10
La clase Arrays dispone de un mtodo llamada sort, ejecutamos este mtodo envindole
como parmetro el nombre del arreglo, la posicin inicial y final que nos interesa que se
ordene, en nuestro caso queremos que se ordene todo el arreglo
12,13
16,17
En esta segunda parte se busca un elemento mediante la tcnica de bsqueda binaria disponible en la clase Arrays.
19
28
PRIMER BIMESTRE
Autoevaluacin 2
N.
Pregunta
Los arreglos que requieren dos subndices para identificar un elemento especfico se
llaman arreglos tridimensionales
El primer elemento en cada arreglo tiene el subndice cero, y algunas veces se llama
elemento cero.
10
11
12
13
14
15
29
PRIMER BIMESTRE
16
17
18
19
La bsqueda binaria se ejecuta en un tiempo O(log n), ya que cada paso elimina la
mitad de los elementos restantes.
20
21
22
23
24
25
Ejercicios propuestos
1.
2.
3.
4.
Ir a solucionario
30
PRIMER BIMESTRE
Hola estimados participantes, estamos entrando al estudio de nuestra tercera unidad, espero que los
temas tratados anteriormente estn claros. La presente unidad esta orientado al tratamiento de una
tcnica muy especial de programacin, la recursividad en primera instancia puede ser algo complicado
entender su funcionamiento, lo importante en este aspecto es empezar el estudio con ejemplos
pequeos, en este punto vale la pena comentarles que si bien es cierto existen algunos programas
que se pueden resolver tanto de forma recursiva como de forma iterativa (mediante ciclos for o while),
existen otros problemas que son netamente recursivos, en la seccin 15.1 del texto base se mencionan
algunos ejemplos de los cuales quiero resaltar que el tratamiento de arboles binarios, Torres de Hanoi,
Fractales, entre otros son de naturaleza recursiva y en algunos casos es muy complicado resolverlos de
forma iterativa como mencione anteriormente, bueno vamos a empezar y como siempre desendoles
xitos en el presente estudio y adicionalmente les recomiendo que lean el texto base en las secciones
indicadas, recuerde que la programacin es como las matemticas, debe hacer ejercicios para entender
los contenidos.
3.1. Introduccin y conceptos bsicos de recursividad
Sr. estudiante lea el captulo 15, las secciones 2,3,4,5 en el cual existe la fundamentacin terica de la recursividad y adicionalmente ejercicios explicados
sobre este tema.
Fuente: http://lanza-un-d100000.blogspot.com/
Figura 3.1 Recursividad
Tal como usted se pudo dar cuenta en la lectura realizada la recursividad es una tcnica de programacin
en la cual un mtodo se llama a si mismo, esa es la idea principal en este tema, a continuacin quiero
mostrarles algunos aspectos claves en el tratamiento de un algoritmo recursivo.
31
PRIMER BIMESTRE
El 99%(por no decir el 100%) de los mtodos recursivos deben tener una estructura condicional
(if ).
Uno de los bloques de la estructura condicional (ya sea el bloque if o el bloque else) contiene la
instruccin de terminacin del algoritmo, es decir en esta parte el algoritmo ya no realiza llamadas
a si mismo, lo cual implica el fin de las llamadas recursivas.
En el otro bloque de la estructura condicional, se implementa la llamada recursiva, es decir se
llama al mismo mtodo con nuevos valores en los parmetros.
Cada llamada recursiva implica que en la memoria del computador se estn guardando copias
de los valores que tienen las variables en ese momento, esto es muy importante puesto que un
numero excesivo de llamadas recursivas puede hacer ms lento el equipo.
Recuerde algo importante, todo mtodo recursivo debe tener una condicin de finalizacin, la ausencia
de este componente puede causar que el programa realice un nmero infinito de llamadas a si mismo,
es decir el programa nunca terminar su ejecucin y tendramos que terminar el programa de forma
inesperada, saliendo de la plataforma de desarrollo y en algunos casos es necesario reiniciar el equipo
puesto que la memoria del computador ha sido saturada.
Recuerde que es necesario leer los temas indicados en el texto base, esta actividad reforzara su
aprendizaje.
3.2. Aplicacin de la recursividad
32
PRIMER BIMESTRE
Descripcin
11
Se llama a la funcin de bsqueda binaria para lo cual se enva la posicin del primero y
ltimo elemento del arreglo, adicionalmente se enva el valor que se quiere buscar.
16
La condicin para terminar las llamadas recursivas es que la posicin del elemento final sea
mayor que la posicin del elemento inicial, en este caso se calculan nuevos valores para
estas variables y se realiza otra llamada al mismo mtodo con estos nuevos valores.
27
33
PRIMER BIMESTRE
Autoevaluacin 3
Pregunta
Una llamada recursiva puede ser una llamada a otro mtodo, que a su vez realiza una
llamada de vuelta al mtodo original.
Una pila es una estructura de datos en la que slo se pueden agregar o eliminar datos
de la parte inferior.
Las pilas se conocen como estructuras de datos ltimo en entrar, primero en salir, el
ltimo elemento que se insert en la pila, es el primero que se elimina de ella.
10
11
12
13
14
Un fractal es una figura geomtrica que se genera a partir de un patrn que se repite
en forma recursiva, un nmero infinito de veces.
15
Los fractales tienen una propiedad de auto - similitud; las subpartes son copias de
tamao reducido de toda la pieza.
16
34
PRIMER BIMESTRE
17
18
19
20
21
Ejercicios propuestos
Desarrolle los siguientes ejercicios planteados al final del captulo 15 del texto base: 15.7, 15.8, 15.9,
15.12, 15.13, 15.17
Ir a solucionario
35
SEGUNDO BIMESTRE
SEGUNDO BIMESTRE
7.4. Planificacin para el trabajo del alumno
COMPETENCIAS
ESPECFICAS
Definir
requerimientos,
disear, implementar,
integrar, administrar
y optimizar
soluciones software
centralizadas,
distribuidas
soluciones web.
Aplicar la lgica
matemtica en
el contexto de
las Ciencias de
la Computacin,
con proyeccin, al
diseo de circuitos,
programacin,
anlisis y desarrollo
de algoritmos.
Unidades/Temas
Unidad 4: Programacin de ficheros
con Java
Flujos en Java
Evaluar las tcnicas de
manejo de archivos para
seleccionar las mejor
opcin en funcin de datos
y aplicaciones especificas.
CRONOGRAMA
ORIENTATIVO
ACTIVIDADES
DE APRENDIZAJE
Tiempo estimado
Semana 9, 10 y 11:
12 horas de
autoestudio.
12 horas de
interaccin.
Lectura
comprensiva
de la primera
unidad.
Desarrollo de
actividades
recomendadas
en la gua
didctica.
Interaccin con
el EVA
Entender la filosofa de la
POO.
Definir y calcular
la eficiencia de los
algoritmos utilizando
pseudocodigo
y midiendo el
desempeo de
los algoritmos
elaborados y
valorando su utilidad.
Analizar y disear
sistemas digitales
aplicables a
la tecnologa
computacional
CONTENIDOS
OBJETIVOS DE APRENDIZAJE
Semana 12, 13 y 14
12 horas de
autoestudio.
12 horas de
interaccin.
Encapsulamiento, ocultacin
Inicio del
desarrollo de
la evaluacin a
distancia.
Lectura
comprensiva
de la primera
unidad.
Desarrollo de
actividades
recomendadas
en la gua
didctica.
Interaccin con
el EVA
Herencia
Unidades de la 4 a la 5
Semana 15 y 16
8 horas de
autoestudio.
Inicio del
desarrollo de
la evaluacin a
distancia.
Preparacin para la
evaluacin presencial
correspondiente al
primer bimestre
8 horas de interaccin.
37
SEGUNDO BIMESTRE
Una vez que hemos estudiado los temas relacionados con el control de excepciones, arreglos y
algoritmos recursivos; revisemos los mecanismos de almacenamiento de datos, tal como se indica en el
texto base la informacin que se procesa en un programa es voltil puesto que los datos se almacenan
temporalmente en la memoria del computador y la informacin esta disponible mientras la aplicacin
se este ejecutando, para tener disponibles los datos de forma permanente es necesario guardarlos
en los dispositivos de almacenamiento secundarios tales como un disco duro o un flash memory, en
esta unidad estudiaremos los mecanismos que dispone el lenguaje Java para almacenar y recuperar
informacin de estos dispositivos.
4.1. Conceptos preliminares sobre los datos.
Sr. estudiante lea el captulo 14 del texto base, las secciones 1,2,3,4,5,6
se presentan bases tericas para el manejo de archivos y ejercicios,
adicionalmente en la gua didctica se presenta otros ejemplos mas simples,
le recomiendo codificarlos para ver los resultados.
http://4.bp.blogspot.com/_jlIpEQ2vSNo/SRM6ORmt2RI/AAAAAAAAACE/5oqzKDCgrYg/s200/
Figura 4.1 Ficheros fsicos
38
SEGUNDO BIMESTRE
En la seccin 14.2 del texto base se presentan ciertas indicaciones sobre los datos y su organizacin
jerrquica desde la perspectiva informtica, se puede ver como esta estructurada la informacin desde
el elemento mas pequeo que es un bit hasta los niveles superiores y que agrupan mayor cantidad de
informacin como son los registros y los archivos, es muy importante tener claro este modelo puesto
que este es la base para crear aplicaciones que guarden informacin de forma ordenada y sobre todo
estructurada, preste principal atencin al ejemplo de registro (Nmero, Nombre, Direccin, ) que se
indica en esta parte del texto base puesto que la informacin se guarda mediante un formato de registro
en los archivos.
4.2. Flujos en Java
Sr. estudiante lea la seccin 14.3 para reforzar el estudio de los flujos.
Antes de entrar al estudio de los archivos propiamente, revisemos un concepto que es fundamental en
este tema; los flujos, desde el punto de vista del lenguaje Java un flujo es un objeto que se encuentra en
un punto intermedio entre nuestra aplicacin y el punto de origen o destino de la informacin, esto se
puede entender mediante la siguiente ilustracin.
39
SEGUNDO BIMESTRE
Descripcin
7,8
Declaramos dos objetos como flujos de entrada y salida, teclado y pantalla respectivamente.
12
13,14,
15,16
17
20
13,14,
25,25
27
30,31,
32,33
40
SEGUNDO BIMESTRE
Tal como indique en el prrafo anterior se debe tener en cuenta el tipo de dato que se va ha escribir o
leer del archivo:
Flujos de bytes
Flujos de caracteres
Flujos de datos primitivos
El paquete java.io contiene todas las clases necesarias para desarrollar aplicaciones que manipulen estos
tipos de datos; el siguiente grfico muestra algunas clases de este paquete, podr darse cuenta que en
la mayora de los casos existen clases correspondientes para el acceso y para la escritura de datos en los
ficheros:
4.4. Uso de las clases FileInputStream y FileOutputStream
Estas clases se utilizan para grabar o leer datos de tipo byte; a continuacin presento el cdigo necesario
para escribir datos en un archivo utilzando la clase FileOutputStream.
41
SEGUNDO BIMESTRE
Descripcin
Declaramos un arreglo de datos de tipo byte
8
12,13
19
20
21,22
Autoevaluacin 4
N.
Pregunta
Los datos que se almacenan en variables y arreglos son temporales; se pierden cuando
una variable local queda fuera de alcance o cuando el programa termina.
Los caracteres en Java son Unicode y estn compuestos de dos bytes, cada uno de los
cuales se compone de ocho bits.
La unin de campos dan como resultado un registro, que se implementan como class
en Java.
10
Una clave de registro identifica que un registro pertenece a una persona o entidad
especfica y es nica para cada registro.
11
12
13
14
Los archivos que se crean usando flujos basados en bytes son archivos binario.
15
Los archivos que se crean usando flujos basados en caracteres son archivos de texto.
42
SEGUNDO BIMESTRE
16
Los archivos de texto se pueden leer mediante editores de texto, mientras que los
archivos binarios se leen mediante un programa que convierte esos datos en formato
legible para los humanos.
17
La clase File se utiliza para obtener informacin acerca de los archivos y directorios.
18
19
20
21
El programador debe crear explcitamente los objetos flujo System.in, System. Out y
System.err
22
23
24
La clase JFileChooser se utiliza para mostrar un cuadro de dilogo, que permite a los
usuarios de un programa seleccionar archivos con facilidad , mediante una GUI
25
26
Ejercicios propuestos
1.
2.
Desarrolle un programa en Java para almacenar los nmeros generados por la funcin seno,
coseno y tangente, desde 0 hasta 360 grados.
Desarrolle un programa en java para grabar y recuperar los datos de un registro definido por usted.
Ir a solucionario
43
SEGUNDO BIMESTRE
Sr. estudiante lea el captulo 3, las secciones 1-8 para reforzar los conceptos
relacionados con POO
Fuente:=http://4.bp.blogspot.com/_jlIpEQ2vSNo/SRM6ORmt2RI/AAAAAAAAACE/5oqzKDCgrYg/s200/
AprendiendoJava_html_
Figura 5.1 Clase y Objetos
Tradicionalmente los programadores han desarrollado sus aplicaciones utilizando la tcnica estructurada
de programacin; la POO es una forma especial de programar en la cual se expresa nuestro desarrollo
como cosas del mundo real, esto implica una filosofa y forma de pensar diferente, pues los objetos o
mecanismos que estn en nuestro entorno tienen unas caractersticas (atributos) y un comportamiento
o forma de actuar (mtodos) , y esta visin debe verse reflejada en nuestra programacin.
44
SEGUNDO BIMESTRE
Bajo estos trminos pensemos en un Automvil para tratar de modelarlo en un esquema de POO.
Diramos que este tiene sus atributos como son color, marca, tamao, nmero de puertas, ao de
fabricacin, velocidad (en un determinado instante)etc.; estas caractersticas vendran a ser los datos;
mientras que las funcionalidades o mtodos (en trminos de POO) serian arrancar, parar, girar, acelerar,
etc. Como podr darse cuenta en un objeto se encapsula tanto datos como la programacin de su
funcionamiento; otro ejemplo ms cercano a nuestro medio informtico, sera modelar con orientacin
a objetos una ventana del Sistema Operativo Windows:
La declaracin de todos estos componentes del objeto es una clase, tambin se podra decir que una
clase de abstraccin de objetos o que es la generalizacin de un tipo especfico de objetos; siendo
ms prcticos podramos comparar a una clase como un molde de hacer pasteles, con el cual se crean
pasteles que vendran a ser los objetos los mismos que se crean de acuerdo a las caractersticas del
molde, en realidad una clase es algo as como una plantilla que se utiliza para crear objetos.
45
SEGUNDO BIMESTRE
Hablando desde el punto de vista informtico y concretamente en Java se crean objetos cuando se
define e instancia una variable de un tipo de clase, es decir de la siguiente manera:
Propios: Son aquellos que han sido declarados explcitamente en la clase que crea el objeto.
Heredados: Son aquellos que pertenecen al objeto pero que no han sido declarados explcitamente
en la clase duea del objeto, sino mas bien han sido el resultado de un proceso de herencia de
clases antecesoras.
46
SEGUNDO BIMESTRE
5.4. Mtodos
Igualmente ya lo hemos comentado que un objeto no solo est compuesto de funcionalidades o
lgica de comportamiento; los mtodos en POO son lo que para la programacin estructurada son los
procedimientos o funciones; sea que estos pueden recibir parmetros e igualmente pueden devolver
algn dato. Adicionalmente tambin pueden ser propios y heredados como los atributos.
5.3. Encapsulamiento, ocultacin
Tal parece que Encapsulamiento viene de palabra capsula; en todo caso esta define claramente lo
que es un objeto, en lo cual tanto los datos como sus funcionalidades estn encerradas dentro de esta
cpsula; esto permite el ocultamiento de estos datos; permitindole al objeto relacionarse con el exterior
nicamente a travs de mensajes; la respuesta a estos mensajes ser la informacin que otros objetos
requieren.
5.4. Herencia.
Sr. estudiante lea el captulo 9, en esta parte del texto base se explica lo relacionado con herencia en Java
La herencia es la caracterstica que permite crear clases a partir de otras ya existentes; con lo cual
reutilizamos los componentes (atributos y mtodos) de la clase inicial.
Existen dos tipos de herencia, tal como se muestra en el siguiente grfico:
Herencia Simple
Herencia Mltiple
47
SEGUNDO BIMESTRE
Autoevaluacin 5
N.
Pregunta
Para realizar una tarea en una aplicacin orientada a objetos se requiere un mtodo.
Los objetos de una misma clase deben tener los mismos datos.
Un mtodo describe los mecanismos que se encargan de realizar sus tareas y oculta
al usuario las tareas complejas que realiza.
El nombre del archivo (.java) debe ser el mismo que el nombre de la clase principal.
10
Los campos prvate de una clase pueden manipularse solo mediante los mtodos de
esa clase; para lo cual se utilizan los mtodos establecer y obtener.
11
Los atributos de una clase pueden ser atributos de instancia y atributos de clase.
12
13
14
15
Para llamar al constructor de la superclase se puede utilizar las palabras super y this
indistintamente.
16
Declarar variables de instancia como public es una mala prctica de ingeniera del
software.
Ir a solucionario
48
SOLUCIONARIO
8. Solucionario
UNIDAD 1
Pregunta
Respuesta
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
49
SOLUCIONARIO
UNIDAD 2
50
Pregunta
Respuesta
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
SOLUCIONARIO
UNIDAD 3
Pregunta
Respuesta
10
11
12
13
14
15
16
17
18
19
20
21
51
SOLUCIONARIO
UNIDAD 4
52
Pregunta
Respuesta
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
SOLUCIONARIO
UNIDAD 5
Pregunta
Respuesta
10
11
12
13
14
15
16
53
SOLUCIONARIO
2.
3.
4.
Para este ejercicio le recomiendo que tome como base la lgica para bsqueda de elementos,
luego reemplace este valor, tenga en cuenta que si el arreglo esta ordenado, al finalizar el proceso
debe quedar el elemento en la posicin correcta.
Recorra los elemento hasta la mitad e intercambie cada elemento de la primera mitad con el
correspondiente de la segunda mitad.
En este caso extraiga los elementos de cada fina ejecute un proceso de ordenamiento
independiente.
Igualmente tome como base la lgica estudiada para el caso de los arreglos
Utilice la lgica estudiada para almacenar datos en un fichero, luego desarrolle un proceso
repetitivo y almacene en cada iteracin el valor de la funcin solicitada.
Construya una clase con los datos del registro, luego cree un objeto de esta clase y guarde estos
datos.
GERC/ymtm/15-07-2011/47
vjg/2013-10-29
54