[UCR]
[/\]

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

CI-1101 Programación I

II Semestre 2000 Edgar Casasola
Adolfo Di Mare   Javier Vázquez
Josefina Pujol   Vladimir Lara  

 

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, Fibonacci, 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.

 

EVALUACION

      El peso de la evaluación estará en los exámenes, aunque es indispensable que todos los estudiantes realicen los proyectos.

Examen Parcial   30%      Tareas Programadas   30%      (Prof. Di Mare)
Examen Final   35%      Otros 5%  

 

INDICE DE MATERIALES DEL CURSO

Exámenes
P #1  -  P #2  -  Final
Tareas
#1  -  #2  -  #3  -  #4  -  #5
#6  -  #7  -  #8  -  #9  -  #10
(Prof. Di Mare)
Tareas (Prof. Di Mare)
# 1: Números de Armstrong
# 2: Errores de compilación y de ejecución #1
# 3: Errores de compilación y de ejecución #2
# 4: Una clase C++ para años bisiestos
# 5: Calculadora
# 6: istream& operator >> (istream&, poly&)
# 7: La clase Bolsa
# 8: La clase Bolsa implementada usando punteros
# 9: La clase Vector redimensionable
# 10: El renglón más largo
Ejemplos de laboratorio (Prof. Di Mare)
Laboratorio # 1   [Java]   [C++]: Números de Armstrong
Laboratorio # 3   [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   [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.

 

LIBRO DE TEXTO

      Como lenguaje de programación en el curso se usa C++, por lo que conviene que el estudiante adquiera un buen libro de texto para el lenguaje, como por ejemplo el de Deitel & Deitel, que está escrito en lengua inglesa, aunque la versión en español también se puede usar, pese a que no toma en cuenta todos los cambios y detalles que forman parte del C++ estándar. Es conveniente que cada estudiante tenga acceso al libro de Bjarne Stroustrup sobre C++, que es el lenguaje que se usar  como marco de referencia en todo el curso. Este libro tiene un costo de unos $ 45, y se puede conseguir en Internet. Cada estudiante es responsable de conseguir sus libros. Además, en el sitio Internet del curso habrá material adicional (como los FAQ's).


C++: FAQ's e Hiperenlaces

BIBLIOGRAFIA

Capper, D.M.
"C++ for Scientists, Engineers and Mathematicians"; Springer-Verlag; 1996.
Ceballos, Francisco J.
"Programación Orientada a objetos con C++"; Addison-wesley Iberoamericana; 1993.
Eckel, B.
"Using C++"; Mc-Graw Hill; 1994.
Deitel, H.M.; Deitel, P.J.
"Cómo programar en C/C++, segunda edición", Prentice-Hall, 1994.
      ftp://ftp.prenhall.com/pub/deitel/C++_HTP/C++HTP2e/c++htp2e_examples.zip
Deitel, H.M.; Deitel, P.J.
"C++ How to Program, Third Edition", ISBN-0-13-089571-7, Prentice-Hall, 2000.
      http://www.deitel.com/
      http://deitelandassociates.com/oldsite/books/2000/cpphtp3/cpphtp3_examples.zip
Heileman, Gregory
"Estructuras de Datos, Algoritmos y Programación Orientada a Objetos"; Mc-Graw Hill; 1998.
Ladd, S. R.
"Components and Algorithms"; M & T; 1994.
Stauggard, Andrew Jr.
"Técnicas estructuradas y orientadas a objetos"; Prentice-Hall; 1998.
Sedgewick, Robert
"Algoritmos en C++"; Addison-Wesley; 1995
Stroustrup, Bjarne
"El lenguaje de programación C++ (2nda edición)"; Addison-Wesley Pub. Comp.; 1993.
Stroustrup, Bjarne
"The C++ programming language (3rd ed)"; Addison-Wesley; 1998.
Algún manual del ambiente de programación que se use

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 © 2000
Derechos de autor reservados © 2000
[home] <> [/\]