Los exámenes de selección para ingresar al programa de
Maestría en Ciencias de la Computación son dos: Matemáticas y
Programación. En los siguientes párrafos se encuentra una guía de estudio para
cada uno de estos exámenes
Guía para matemáticas
El examen de matemáticas incluirá preguntas y problemas
sobre los temas que se muestran a continuación:
- 1. Introducción a la Lógica.
- 1.1 Proposiciones.
- 1.1.1 Conectivas.
- 1.1.2 Fórmulas proposicionales y tablas de verdad.
- 1.1.3 Condicional y bicondicional.
- 1.1.4 Tautologías.
- 1.1.5 Equivalencia de fórmulas.
- 1.1.6 Ley de dualidad.
- 1.1.7 Implicaciones tautológicas.
- 1.1.8 Validación usando tablas de verdad.
- 1.2 La teoría de inferencia para el cálculo proposicional.
- 1.2.1 Validación usando tablas de verdad.
- 1.2.2 Reglas de inferencia.
- 1.2.3 Consistencia de premisas y el método indirecto de demostración.
- 1.2.4 Cláusulas de Horn y principio de resolución.
- 1.3 El cálculo de predicados.
- 1.3.1 Predicados.
- 1.3.2 La función proposicional, variables y cuantificadores.
- 1.3.3 Fórmulas de predicados.
- 1.3.4 Variables libres y acotadas.
- 1.3.5 El universo (contexto) del discurso.
- 1.3.6 Negación de formulas que contienen cuantificadores.
- 1.3.7 El empleo de predicados en matemáticas y en computación.
- 2. Conjuntos y relaciones.
- 2.1 Conjuntos y subconjuntos.
- 2.2 Conjunto potencia.
- 2.3 Álgebra de conjuntos.
- 2.4 Relación entre el álgebra de conjuntos y el álgebra de proposiciones.
- 2.5 Pares ordenados y n-adas ordenadas.
- 2.6 Producto cartesiano.
- 2.7 Relaciones.
- 2.7.1 Relaciones binarias y propiedades.
- 2.7.1.1 Particiones.
- 2.7.2 Representación matricial y gráfica de una relación.
- 2.7.3 Relación de equivalencia.
- 2.8 Relaciones de orden parcial y representación.
- 3. Funciones.
- 3.1 Función inyectiva.
- 3.2 Función sobreyectiva.
- 3.3 Función biyectiva.
- 3.4 Composición de funciones.
- 3.5 Función inversa.
- 3.6 Función característica de un conjunto.
- 4. Inducción.
- 4.1 Números naturales.
- 4.2 Inducción matemática.
- 4.2.1 Ejemplos de teoremas demostrados por inducción.
- 5. Introducción al álgebra lineal.
- 5.1 Ecuaciones lineales.
- 5.2 Operaciones de matrices: suma, multiplicación, inversa, transpuesta.
- 5.3 Representación de transformaciones lineales por matrices.
- 5.4 Transpuesta de transformación lineal.
- 5.5 Valores propios y polinomios característicos.
Bibliografía.
- Kenneth H. Rosen, "Discrete Mathematics and its Applications", 3era. ed.,
Mc GrawHill, Inc., New York, ISBN 0-07-113974-5, 1995.
- Kenneth A. Ross y Charles R. B. Wright, "Matemáticas Discretas", 2da. ed.,
Prentice Hall, ISBN 968-880-180-1, México, 1990.
- Richard Johnsonbauugh, "Matemáticas Discretas", 4ta. ed., Prentice Hall,
ISBN 970-17-0253-0, México, 1990.
- Winfried Karl Grassmann y Jean Paul Tremblay, "Matemática Discreta y
Lógica", Prentice Hall, ISBN 84-89660-04-2, Madrid, España, 1997.
- Jean-Paul Tremblay y Raun Manohar, "Matemáticas Discretas, con Aplicación
a las Ciencias de la Computación", 1ra. ed. en español, Compañía Editorial
Continental S.A. de C.V. (CECSA), ISBN 0-07-065142-6, 1ra. reimpresión,
México, 1999.
Guía para programación
El examen de programación consistirá en escribir un programa en papel para cada uno de los
problemas del examen. Cada programa deberá escribirse usando el lenguaje que se
describe a continuación.
Descripción del lenguaje de programación.
El lenguaje cuenta con los siguientes tipos de datos
simples: enteros, carácter y real. Además, en el lenguaje también se pueden usar
variables con el tipo de datos estructurado arreglo, éste debe declararse en los
comentarios definiendo el límite inferior y el superior. Las variables de tipos
de dato simples no necesitan ser definidos, ya que el tipo se sobreentiende en
las operaciones realizadas con las variables. Los operadores básicos son los
siguientes:
| Operador(es) |
Tipo de Operador |
Ejemplo |
| <- |
Asignación |
A <- 5a |
| < > =
<= >= <> |
Comparación |
A > 20, C <> B |
| and or not |
Lógico |
A>15 and C="hola" |
| + - * / |
Aritmético básico |
B <- a/5 |
| ** (doble asterisco) |
Potencia |
D <- 5**c, B <- c**(1/2) |
| % |
Módulo |
C <- b%5 |
Nota: los operadores lógicos y de comparación sólo pueden regresar
valores de False o True (éstas son constantes definidas en el lenguaje).
Las instrucciones de entrada/salida son las siguientes:
- input (una o más varibles).
- output (una o más varibles, [constantes de texto]).
Las instrucciones de control son las siguientes (las palabras reservadas están en negritas):
- Instrucción de decisión simple:
- if condición then de una a varias
instrucciones
- else de una a varias instrucciones
o también:
- if condición then de una a varias instrucciones
- Instrucción de decisión múltiple:
- case
- : condición 1: de una a varias instrucciones
- : condición 2: de una a varias instrucciones
- . . .
- : condición N: de una a varias instrucciones
- else de una a varias instrucciones
- end
- Instrucción de iteración de 0 a N veces:
- while condición do
- de una a varias instrucciones
- end
- Instrucción de iteración de 1 a N veces:
- repeat
- de una a varias instrucciones
- until condición
- Instrucción de iteración sin final explícito:
- loop
- de una a varias instrucciones
- if condición then exit
- de una a varias instrucciones
- forever
- Instrucción de iteración de M a N veces:
- for variable <- M to N by incremento do
- de una a varias instrucciones
- end
La instrucción para definir un programa es la siguiente:
- Program nombre_del_programa
- de una a varias instrucciones
- end
Además, el lenguaje cuenta con la capacidad de definir
procedimientos de la siguiente manera:
- Procedure nombre_del_procedimiento(lista de parámetros por valor)
- de una a varias instrucciones
- end
Los procedimientos también pueden trabajar como funciones de la siguiente manera:
- Procedure nombre_del_procedimiento(lista de parámetros por valor)
- de una a varias instrucciones
- return(expresión)
- end
Además en este lenguaje se aplican las siguientes reglas:
- Todas las variables son globales; es decir, pueden ser utilizadas en los
demás procedimientos que constituyen el programa.
- No hay distinción entre mayúsculas y minúsculas; es decir, ReadInput es
idéntica que readinput.
Problema de Ejemplo: El Triángulo de las Bermudas
La Figura siguiente muestra un triángulo.
Escriba un programa que calcule la suma más grande de números siguiendo una ruta
que comience en la punta y termine en algún número de la base del triángulo.
Cada paso puede ir diagonalmente abajo hacia la izquierda o derecha. El número
de renglones en el triángulo es mayor que 1 y menor o igual a 100. Los números
en el triángulo son todos enteros entre 0 y 99.
| |
|
|
|
7 |
|
|
|
|
| |
|
|
3 |
|
8 |
|
|
|
| |
|
8 |
|
1 |
|
0 |
|
|
| |
2 |
|
7 |
|
4 |
|
4 |
|
| 4 |
|
5 |
|
2 |
|
6 |
|
5 |
Si al programa se alimentara la siguiente serie de datos de entrada:
| 5 |
|
|
|
|
|
|
|
|
| 7 |
|
|
|
|
|
|
|
|
| 3 |
|
8 |
|
|
|
|
|
|
| 8 |
|
1 |
|
0 |
|
|
|
|
| 2 |
|
7 |
|
4 |
|
4 |
|
|
| 4 |
|
5 |
|
2 |
|
6 |
|
5 |
El resultado de su ejecución debería ser el siguiente:
30.
Solución del Problema de Ejemplo:
Una forma de resolver el problema es considerar el
triángulo como un árbol binario, en donde la raíz del árbol se encuentra en el
vértice superior del árbol (en este ejemplo ocupado por el número 7), el cual
tiene dos hijos (ocupados por los números 3 y 8), cada hijo tiene a su vez dos
hijos, y así sucesivamente, execepto los de la base (denominados hojas) que no
tienen ningún hijo. En estas circunstancias, el resultado se puede obtener
efectuando un recorrido en profundidad del árbol de la siguiente manera:
- Junto a cada nodo n del árbol se guarda la suma suma(n) de
los números que se encuentran en la ruta al nodo n desde la raíz.
- Al nodo raíz se le asigna un valor de suma igual al número que se
encuentra en la raíz; es decir, suma(raíz) =
número(raíz).
- En cada movimiento del recorrido en profundidad se calcula la suma de los
números correspondientes a los nodos visitados desde la raiz, y se asigna la
suma al nodo en donde se encuentra el recorrido. (Nótese que la suma
correspondiente al nodo en donde se encuentra el recorrido es igual al número
correspondiente a este nodo más la suma correspondiente al padre de este nodo;
es decir suma(n) = número(n) +
suma(padre de n).)
- Al término del recorrido se busca la hoja que tiene el valor de
suma más grande.
A continuación se muestra el programa que encuentra la
suma más grande. Este programa es una variante del algoritmo anterior en donde,
en cada movimiento del recorrido, se registra el valor suma más grande
que se haya encontrado.
program MaxSum
call
ReadInput()
call
ComputeAnswer()
call WriteOutput()
end
// T= [1..100, 1..100] //
// lee los valores del triángulo
//
procedure ReadInput
input(inp,
N)
output('Número de renglones: ',
N)
for r <- 1 to N
do
for p <- 1 to r do
read(T[r, p])
output('Leídos todos los
datos')
end // ReadInput //
// obtiene la suma de la ruta máxima
//
procedure ComputeAnswer
// m <- la suma
de la ruta máxima //
m <- MaxRS(1, 1)
end //
ComputeAnswer //
// calcula la sumatoria de una ruta //
procedure
MaxRS(r, p)
if r = N then return(MaxRS <- T[r,
p])
else return(MaxRS <- T[r, p] + call
Max(MaxRS(r+1, p), MaxRS(r+1, p+1)))
end // MaxRS //
// obtiene el
valor más grande de dos números //
procedure Max(x,
y)
if x > y then return (Max <-
x)
else return (Max <- y)
end // Max //
// escribe el resultado //
procedure
WriteOutput
output('La suma de la ruta máxima es
', m)
end // WriteOutput //