Programación procedimental

Entrada y salida

Leer e imprimir números

]]>
Lee e imprime un número real. Obtener código fuente.

Formatear horas, minutos, segundos

]]>
Lee los tres campos de una hora y los imprime con formato. Obtener código fuente.

Expresiones y condicionales

Índice de masa corporal

El siguiente programa fue el resultado de un proceso de análisis (comprensión del problema), diseño (de un algoritmo en pseudocódigo), implementación (traducción del algoritmo a Java) y pruebas (de cada uno de los anteriores). El rastro del diseño se puede ver en los comentarios en el código.

]]>
Lee masas y alturas. Imprime el índice de masa corporal y la categoría nutricional de acuerdo a la OMS. Obtener código fuente.

Números aleatorios

Produce números aleatorios enteros en un rango dado, por ejemplo, si el rango es 00 a 75 (inclusive), producirá números válidos para un bingo.

]]>
Números aleatorios en rango. Obtener código fuente.

Operadores relacionales

Los operadores ariméticos (+, -, *, /, %) funcionan únicamente con tipos de datos primitivos (enteros y flotantes). Sólo existe una única excepción: el operador + puede concatenar textos (String). Los demás operadores de Java sólo trabajan con tipos de datos primitivos: operadores relacionales (==, >, >=, <, <=), operadores lógicos (!, &&, ||). Sin embargo hay que tener algunos cuidados. Por ejemplo, el operador de igualdad == sólo funciona con enteros, y en caso de flotantes sólo funciona cuando se compara contra 0.0.

]]>
Algunos errores comunes con operadores. Obtener código fuente.

Los operadores de asignación (=) tienen variantes cortas para cada operador aritmético (+=, -=, *=, /=, %=), y operadores de pre/post-incremento (++) y pre/post-decremento (--). Estos últimos deben evitarse combinar en una misma expresión.

Ciclos

Se mostró cómo crear un ejercicio desde cero. Las instrucciones se encuentran en la sección Ejercicios inventados del curso. El ejercicio completo puede obtenerse en:

Se crearon 11 casos de prueba, varios con datos inválidos. El siguiente programa usa excepciones de Java para reaccionar a esas condiciones anormales.

]]>
Imprime rectángulos rellenos o no de tamaño arbitrario. Obtener código fuente.

Subrutinas

Permutaciones y combinaciones

El siguiente ejemplo muestra el resultado de cómo un problema se dividió en varios subproblemas recursivamente. Un subproblema que requiere su propio proceso de análisis, diseño e implementación, es buen canditato para implementarse como una subrutina. Cada subrutina debe tener su propia documentación. Aquí se usa notación JavaDoc.

]]>
Imprime una tabla con permutaciones y combinaciones, ambas con repetición y sin repetición. Obtener código fuente.

Indirección, arreglos y matrices

Mediana estadística

]]>
Calcula la mediana de un número conocido de datos reales. Obtener código fuente.

Leer e imprimir una matrix

]]>
Crea una matriz de dimensiones arbitrarias, la llena leyendo valores de la entrada estándar, y la imprime en la salida estándar. Obtener código fuente.

Recursión

Factorial

]]>
Factorial iterativo, recursivo puro, y con recursión de cola. Obtener código fuente.

Nota: El compilador de Java no soporta recursión de cola al momento de escribir (nov-2017).

Fibonacci

]]>
Fibonacci iterativo, recursivo puro, y con recursión de cola. Obtener código fuente.

Potencia entera

]]>
Calcula la potencia entera minimizand la cantidad de multiplicaciones. Obtener código fuente.

Programación orientada a objetos

Clases e instancias

Índice de masa corporal (versión OO)

]]>
Clase Solution que hace de vista y controlador. Obtener código fuente.
]]>
Clase Person que hace de modelo. Obtener código fuente.

Desigualdad triangular

Diseño de la solución:

]]>
Documentación en Markdown (design.md). Obtener código fuente.
Diagrama de clases. Ver en LucidChart.
Diagrama de secuencia. Ver en LucidChart.

Estructura del proyecto, sus carpetas y archivos:

Las clases deben estar en control de versiones en la carpeta src/ de su proyecto. Se presentan a continuación la clase controladora y la clase modelo.

]]>
TriangleInequality.java. Obtener código fuente.
]]>
ArgumentAnalyzer.java. Obtener código fuente.
]]>
Triangle.java. Obtener código fuente.
]]>
MutableDouble.java: una clase que permite crear objetos en memoria dinámica, los cuales almacenan un único valor real. Por estar en memoria dinámica, cualquier método que tenga una referencia a estos objetos, puede modificar el double interno. Obtener código fuente.

Herencia y polimorfismo (tema extra)

Personas de la Universidad

]]>
Ejemplo de entrada: varios tipos de personas. Obtener código fuente.
]]>
Clase controladora Solution.java. Obtener código fuente.
]]>
Clase Persona. Obtener código fuente.
]]>
Clase Estudiante. Obtener código fuente.
]]>
Clase Funcionario. Obtener código fuente.
]]>
Clase Profesor. Obtener código fuente.
]]>
Clase Administrativo. Obtener código fuente.

Estructuras de datos y algoritmos

Areglo dinámico

Clase Array

Una clase arreglo dinámico puede crecer. En Java la clase de biblioteca ArrayList realiza esta funcionalidad.

En el siguiente ejemplo, la clase controladora Solution usa el arreglo dinámico para calcular la mediana sin saber la cantidad de datos que vienen en la entrada estándar.

]]>
Clase controladora Solution. Obtener código fuente.
]]>
Clase arreglo dinámico de reales. Obtener código fuente.

Clase Matrix

Una clase que administra una matriz, de dimensiones arbitrarias, y realiza operaciones matemáticas comunes de las matrices.

]]>
Programa que lee dos matrices e imprime la suma de ellas. Obtener código fuente.
]]>
Clase Matrix que reprsenta una matriz matemática de números reales. Obtener código fuente.

Lista enlazada

]]>
Lee una lista de elementos de cualquier longitud y la almacena en una lista doblemente enlazada. Obtener código fuente.
]]>
Implementa una lista doblemente enlazada de textos. Obtener código fuente.

Árbol binario

Diccionario (mapa)

]]>
Lee palabras con definiciones de un archivo diccionario. Obtener código fuente.
]]>
Implementa un árbol binario de búsqueda que guarda parejas (llave, valor). Obtener código fuente.

Programación orientada a eventos

Interfaz gráfica del usuario (GUI)

Train Lane Game

El archivo TrainLaneGame.zip contiene el proyecto completo, que incluye el código fuente, imágenes, archivos de configuración de Eclipse.

]]>
Controlador general. Obtener código fuente.
]]>
MainWindow: usa componentes gráficos para construirse. Obtener código fuente.
]]>
ObstacleBoard: un componente gráfico que usa un contexto gráfico para dibujarse. Obtener código fuente.
]]>
ObstacleMatrix: Clase incompleta que representa el modelo del juego. Obtener código fuente.