[UCR]
[/\]

Universidad de Costa Rica
Escuela de Ciencias de la
Computación e Informática
[<=] [home] [<>] [\/] [=>

CI-1101 Programación I

II Semestre 2014 Adolfo Di Mare

 

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:

  1. 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.
  2. Estructurar los algoritmos por medio de jerarquías funcionales o procedimentales.
  3. 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.
  4. 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.
  5. Comprender y usar esquemas de recursión en el diseño de algoritmos de poca complejidad.
  6. 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.
  7. 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.
  8. Comprender y aplicar esquemas básicos de documentación interna y externa de programas.

 

CONTENIDOS

  1. Nociones básicas de sistema operativo, arquitectura de un computador, lenguaje de programación, algoritmo.
  2. Conceptualización y definición de clases, atributos de clases, instancias de clases, tipos y variables.
  3. Entrada y salida de datos.
  4. Estructuras básicas de control: secuenciación, bifurcación, iteración.
  5. 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).
  6. Distintos tipos de módulos: procedimiento, función, clase, programa, unidad (es decir, un conjunto de procedimientos o funciones y estructuras de datos).
  7. Estructuras de datos basadas en arreglos.
  8. Estructura de una clase: parte pública, parte privada, constructores y destructores.
  9. 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,
  10. 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.
  11. Algoritmos de búsqueda secuencial y búsqueda binaria.
  12. Diferencia entre memoria estática y memoria dinámica.
  13. Funcionalidad de clases contenedoras básicas: arreglos (unidimensionales y multidimensionales), lista, pila, cola, conjunto, árbol binario ordenado.
  14. Implantación de clases contenedoras básicas: arreglo, lista, pila, cola, conjunto y árbol binario ordenado.

 

CONTENIDOS ADICIONALES

  1. 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:

  1. Al menos 8 Filminas de estudio.
  2. Número del capítulo o sección del libro de texto en el que se discute el tema.
  3. Número y página de los ejercicios del libro de texto relevantes al tema discutido en clase.
  4. 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.
Tareas, proyectos, quices   20%    (Prof. Di Mare)
Examen Parcial #1   20%    jueves 25 de setiembre
Examen Parcial #2   25%    jueves 30 de octubre
Examen Final   35%    Jueves 20 de noviembre
 


 

INDICE DE MATERIALES DEL CURSO

Exámenes
P #1  -  P #2
Final
Tareas
#1  -  #2  -  #3  -  #4
#5  -  #6  -  #7  -  #8  -  #9
(Prof. Di Mare)
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: Operaciones matriciales para regresión lineal múltiple
# 7: Menúes de restaurante
# 8: Mediciones de eficiencia para HerenciaOrdenada
# 9: Menúes de restaurante Android
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   [Java]   [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

[DiM­88] Di Mare, Adolfo: Convenciones de Programación para Pascal, Reporte Técnico ECCI­01­88, Proyecto 326­86­053, Escuela de Ciencias de la Computación e Informática, Universidad de Costa Rica, 1988.
      http://www.di-mare.com/adolfo/p/convpas.htm

 

[mailto:] Adolfo Di Mare <adolfo@di-mare.com>
Copyright © 2014
Derechos de autor reservados © 2014
[home] <> [/\]