|
|
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, 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.
- 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.
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:
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
Adolfo Di Mare <adolfo@di-mare.com>
Copyright © 2000
Derechos de autor reservados © 2000