|
|
Universidad de Costa Rica
Escuela de Ciencias de la
Computación e Informática
|
CI-1101 Programación I
REQUISITOS
CI-1010
Introducción a Computación e Informática
| Horas: | 4 |
|
Créditos: | 4 |
OBJETIVO
Proveer al estudiante la formación básica en
programación para su adecuado desempeño en los
cursos subsiguientes del área de programación,
fomentando en el estudiante habilidades generales para la
resolución de problemas de programación.
OBJETIVOS ESPECIFICOS
Al finalizar el curso, el estudiante será capaz de:
- Diseñar e
implementar clases, algoritmos y estructuras de datos de
poca complejidad con base en algún lenguaje de
programación orientado a objetos.
- Estructurar los
algoritmos por medio de jerarquías
funcionales o
procedimentales.
- Comprender y usar esquemas procedimentales básicos (de
entrada y salida de datos, de bifurcación, de
iteración y de
recursión), en el diseño de algoritmos de
poca complejidad.
- Comprender y usar esquemas de estructuras de datos
básicos (tanto de
memoria estática como de
memoria dinámica) en el diseño de
algoritmos de poca complejidad.
- Comprender y usar esquemas de
recursión en el diseño de algoritmos de
poca complejidad.
- Comprender y usar un grupo pequeño de clases
contenedoras (constituido al menos por arreglos, listas,
pilas, colas y árboles binarios ordenados) en el
diseño de algoritmos de poca complejidad.
- Usar con fluidez un ambiente de programación para la
elaboración de programas y para su depuración.
El ambiente deberá soportar tanto la
programación procedimental como la programación
por objetos.
- Comprender y aplicar esquemas básicos de
documentación interna y externa de
programas.
CONTENIDOS
- Nociones básicas de sistema operativo, arquitectura de
un computador, lenguaje de programación,
algoritmo.
- Conceptualización y definición de
clases, atributos de clases,
instancias de clases,
tipos y
variables.
- Entrada y salida de datos.
- Estructuras básicas de control: secuenciación,
bifurcación,
iteración.
- Conceptualización e
implementación de
métodos por medio de funciones (sin
parámetros, con parámetros de valor, con
parámetros de referencia).
- Distintos tipos de
módulos: procedimiento, función, clase,
programa,
unidad (es decir, un conjunto de procedimientos o
funciones y estructuras de datos).
- Estructuras de datos basadas en arreglos.
- Estructura de una clase: parte pública,
parte privada,
constructores y
destructores.
- Funciones recursivas tales como: factorial, Fibbonacci,
multiplicación de enteros, potencia de dos
números, máximo común divisor de dos
números, Torres de Hanoi; además, recorrido,
inserción y borrado sobre árboles
binarios,
- Esquemas
genéricos de algoritmos de ordenamiento
básicos, tales como: burbuja, selección e
inserción. Idealmente, la implementación de
estos algoritmos debería estudiarse en el contexto de
arreglos básicos, así como de la clase
lista.
- Algoritmos de búsqueda secuencial y búsqueda
binaria.
- Diferencia entre memoria estática y memoria
dinámica.
- Funcionalidad de
clases contenedoras básicas: arreglos
(unidimensionales y multidimensionales), lista, pila, cola,
conjunto, árbol binario ordenado.
- Implantación de clases contenedoras básicas:
arreglo, lista, pila, cola, conjunto y árbol binario
ordenado.
CONTENIDOS ADICIONALES
- Nociones preliminares de
herencia,
polimorfismo, clases abstractas,
funciones virtuales,
abstracción,
encapsulamiento y
ocultamiento de información.
Las tareas escritas consistirán en "premios", esto es,
asignaciones cortas que cada estudiante debe cumplir. Antes de que
termine el lunes de cada semana el estudiante debe instalar en una
única página Internet al menos 8 filminas en las que
resuma el material cubierto en la semana anterior. También
debe enviarle al profesor la dirección Internet en donde
dejó sus fichas de estudio, las que le servirán
luego al estudiante y a todos sus compañeros para repasar
la materia cubierta. Siempre debe usar formato HTML para las
filiminas.
Las filminas son responsabilidad individual de cada estudiante. Si
al revisarlas se detectan copias, perderá los puntos tanto
el alumno que copió como el que se dejó copiar.
|
Al finalizar cada lección el estudiante debe revisar el
libro de texto, para determinar los
capítulos y secciones en donde se discute cada uno de los
temas cubiertos en la lección. Como resultado de esta
investigación cada estudiante debe incluir en sus filminas
un reporte con secciones claramente delimitadas y que contenga los
siguiente:
- Al menos 8 Filminas de estudio.
- Número del capítulo o sección del
libro de texto en el que se discute
el tema.
- Número y página de los ejercicios del
libro de texto relevantes al tema
discutido en clase.
- Copia de un párrafo pequeño, de 2 o 3
renglones, tomado de alguno de los libros de texto.
|
EVALUACION
El peso de la evaluación estará en los
exámenes, aunque es indispensable que todos los estudiantes
realicen los proyectos.
|
INDICE DE MATERIALES DEL CURSO
- Tareas (Prof. Di Mare)
-
# 1:
Números de Armstrong
-
# 2:
Inversión de los valores de un vector
-
# 3:
Comparación de vectores
-
# 4:
Juego de toques y famas
-
# 5:
Juego del Gato (Tic Tac Toe)
-
# 6:
Herencia Ordenada para Java
-
# 7:
Matriz del peine inverso
-
# 8:
Concurrencia para Java
- Ejemplos de laboratorio (Prof. Di Mare)
-
Laboratorio # 1
[Java]
[C++]:
Números de Armstrong
-
Laboratorio # 2
[Java]
[C++]:
El tamaño de cada tipo de datos
-
Laboratorio # 3
[Java]
[C++]:
while
vs for
[Matriz]
-
Laboratorio # 4
[Java]
[C++]:
La clase año bisiesto
-
Laboratorio # 5
[Java]
[CIN]
[C++]:
Calculadora de números enteros
-
Laboratorio # 6
[Java]
[C++]:
Clase
ord_int
para mantener varios números ordenados
-
Laboratorio # 7
[Java]
[C++]:
Recursividad de las funciones
Fibonacci()
y Factorial()
-
Laboratorio # 8
[Java]
[C++]:
Ordenamiento por
Seleccion()
, Insercion()
y Burbuja()
-
Laboratorio # 9
[Java]
[C++]:
Una clase para clasificar edades
-
Laboratorio # 10
[C++]:
La clase Bolsa para contar números
-
Laboratorio # 11
[C++]:
Argumentos por valor y argumentos por referencia
-
Laboratorio # 12
[Java]
[C++]:
Uso de argumentos en la línea de comandos
-
Laboratorio # 13
[C++]:
Lectura de los nombres de archivos del directorio actual
-
Laboratorio # 14
[Java]
[C++]:
Búsqueda lineal y binaria en un vector ordenado
-
Laboratorio # 15
[Java]
[C++]:
Muestra cómo centrar una hilera
-
Laboratorio # 16
[Java]
[C++]:
Muestra como usar una matriz
NxM
-
Laboratorio # 17
[Java]
[C++]:
La lista
-
Laboratorio # 18
[Java]:
Java pasa copias de referencias
-
Laboratorio # 19
[Java]:
Fibonacci()
super-lerdo y super-rápido
-
Laboratorio # 20
[Java]:
Manejo de Excepciones
-
Laboratorio # 21
[Java]:
Manipulación de hileras
-
Laboratorio # 22
[Java]:
Ventanas
-
Laboratorio # 23
[Java]:
Iteradores
-
Laboratorio # 24
[Java]:
Generador de todos los subconjuntos
-
Laboratorio # 25
[Java]:
String vs StringBuffer
-
Laboratorio # 26
[Java]:
Ejemplo de métodos polimórficos con herencia.
-
Laboratorio # 27
[Java]:
Muestra algunos límites de la aritmética entera.
-
Laboratorio # 28
[Java]:
Muestra error al usar '
static
'.
- Herramientas
-
http://www.DrJava.org
&&
DrJava.htm
-
http://cs.joensuu.fi/jeliot
-
http://www.BlueJ.org
-
http://www.JCreator.com
-
http://java.sun.com/javase/downloads/index.jsp
- Bibliotecas de programas
-
http://math.nist.gov/javanumerics/jama/
-
http://jchart2d.sourceforge.net/
-
http://sourceforge.net/projects/javacsv/
-
http://www.jfree.org/jfreechart/
LIBRO DE TEXTO
Como lenguaje de programación en el curso se usa Java, por
lo que conviene que el estudiante adquiera un buen libro de texto
para el lenguaje, como por ejemplo el de
Deitel & Deitel o el de
Ceballos. Es conveniente que cada
estudiante tenga acceso a su propio libro de Java, que es el
lenguaje que se usará como marco de referencia en todo el
curso. Cada estudiante es responsable de conseguir sus libros.
- Ceballos, Francisco Javier
- Java 2 - Curso de Programación - 3º ed.,
ISBN 970-15-1164-6, Alfaomega Ra-Ma, 2006.
http://www.fjceballos.es/publicaciones_java.html
http://www.ra-ma.es/down/Java2-IGyApIn3ed-Ceballos.zip
- Deitel, H.M.; Deitel, P.J.
- Java Cómo programar 5ta edición,
ISBN 970-26-0518-0, Prentice-Hall, 2004.
http://www.deitel.com/
ftp://ftp.prenhall.com/pub/deitel/J_HTP/java-htp5e/examples/java5-examples.zip
BIBLIOGRAFIA
- Gosling,James &
Joy, Bill & Steele, Guy & Bracha, Gilad
- The Java Language Specification, 3rd Ed; Addison-Wesley, 2005.
- Hommel, Scott (editor)
- Java Code Conventions
http://java.sun.com/docs/codeconv/CodeConventions.pdf
- Stroustrup, Bjarne
- "The C++ programming language (3rd ed)"; Addison-Wesley;
1998.
http://www.research.att.com/~bs/3rd.html
- Sun Microsystems
-
"Página oficial de Javasoft"
http://java.sun.com
- Sun Microsystems
-
JavaTM Platform,
Standard Edition 6 API Specification
http://java.sun.com/javase/6/docs/api/
- Sun Microsystems
-
Trail: Learning the Java Language;
The JavaTM Tutorials
http://java.sun.com/docs/books/tutorial/java/
MATERIAL DE REFERENCIA
Adolfo Di Mare <adolfo@di-mare.com>
Copyright © 2012
Derechos de autor reservados © 2012