Lecture 3
Lecture 3
Lecture 3
12 de abril de 2019
REPRESENTACIÓN
DE NÚMEROS EN
EL COMPUTADOR
Representación de un Número Real:
Conversión de Formato IEEE a Decimal
Simple Precisión
value = (-1)0 *(1 + b21*2-2)*2(124 - 127) = (-1)0 *(1 + 1*2-2)*2(124 - 127) = 0.15625
Doble Precisión
Representación de un Número Real:
Conversión de Decimal a Formato IEEE
Simple Precisión: Para representar un número real en el formato IEEE de 32 bits se deben
aplicar los siguientes pasos:
Parte fraccionaria:
0.375 * 2 = 0.750 = 0 + 0.750 b−1 = 0 y = 3 bits
0.750 * 2 = 1.500 = 1 + 0.500 b−2 = 1
0.500 * 2 = 1.000 = 1 + 0.000 b−3 = 1. La fracción es 0, por lo tanto el cálculo termina aquí
Link: https://www.youtube.com/watch?v=pQs_wx8eoQ8
INTRODUCCIÓN
A MATLAB
Matlab
MATrix - LABoratory
Link: http://www.mathworks.com/
Curso Básico de Matlab (1)
Variables:
Aquí se muestra una
Ventana de comandos: lista de todas las
Aquí se escriben las funciones o comandos a variables creadas
ejecutar en Matlab. Por ejemplo: desde el inicio de
Directorio de Trabajo: sesión en Matlab
Path del directorio de
trabajo actual de Matlab y
su contenido
Historial de Comandos:
Aquí se guardan los
comandos ejecutados en la
ventana de comandos de
Matlab desde su instalación
Curso Básico de Matlab (2)
Ejemplos de scripts:
Aquí se muestran algunos ejemplos de scripts
creados en Matlab.
NOTA: Los nombres de los scripts no pueden
contener espacios en blanco, ni carcateres
especiales (+,*,., -, etc.). Si se quiere separar
las palabras que forman el nombre del script
se puede usar guión bajo: nombre1_nombre2.m
Curso Básico de Matlab (3)
Lista de scripts:
Aquí se muestran todos los scripts que han
sido abiertos en Matlab.
Curso Básico de Matlab (4)
Comentarios:
Note que los comentarios van precedidos del
símbolo de porcentaje “%” y el editor los
muestra en verde.
Instrucciones:
Las instrucciones, comandos y funciones se
marcan con color negro
Texto:
En Matlab el texto se coloca entre comillas
simples ( ‘ ‘ ). Note que el texto se muestra en
color rozado
Curso Básico de Matlab (5)
Ayuda de Matlab:
Esta opción activa la ventana de ayuda de Matlab
Curso Básico de Matlab (6)
Ventana Ayuda de Matlab
Links de consulta:
http://www.mathworks.com/
http://www.maths.dundee.ac.uk/software/MatlabNotes.pdf
http://www.dummies.com/how-to/computers-software/programming/MATLAB.html
http://mat21.etsii.upm.es/ayudainf/aprendainf/Matlab70/matlab70primero.pdf
FUNCIONES
ÚTILES PARA
CIENCIAS DE LA
COMPUTACIÓN
Funciones Útiles para Ciencias de la
Computación
Para las siguientes definiciones asuma que n y a son enteros no negativos:
Ejemplos:
entero
mod(k,M) = k – M*floor(k/M)
a b (mod n)
Ejemplos:
1) 83 63 (mod 10). Lo anterior se lee como “83 es congruente con 63, módulo
10”. Esto ocurre porque al dividir 83 y 63 por 10, ambos dejan el mismo resto o
residuo que es 3. De manera equivalente, también se puede verificar fácilmente
que 83 – 63 = 20 es un múltiplo de 10.
El análisis realizado en este ejercicio explica por qué, excepto en año bisiesto
donde se agrega un día a febrero, el mismo mes y día en años consecutivos se
mueve un día de la semana para adelante.
2. Hoy viernes, un amigo le llama por teléfono y le dice que la última vez que se
vieron personalmente fue hace 600 días. Entonces, ¿la última vez que Usted vio
a su amigo personalmente fue un viernes?
R: Falso. Fue domingo.
donde
h = día de la semana (0 = sábado, 1 = domingo, 2 = lunes,...)
q = día del mes
m = mes (enero*, febrero*, marzo = 3, abril = 4, mayo = 5, ….)
J = la centuria = ⌊año / 100⌋
K = año de la centuria = mod(año,100)
*Enero y febrero se cuentan como meses 13 y 14 del año anterior. Por ejemplo,
que el 2 de enero del 2013, es m =13; año=2012.
Fuente: https://es.wikipedia.org/wiki/Congruencia_de_Zeller
Un ISBN de 10 caracteres tiene cuatro partes: un código de grupo (group), un código de editor
(publisher), un código que identifica al libro de manera única entre otros publicados por ese editor (title)
y un carácter de verificación para validar el ISBN (check digit).
Fuente: https://en.wikipedia.org/wiki/International_Standard_Book_Number
s = 1*x1 + 2*x2 + 3*x3 + ... + 9*x9, donde xi es el i-esimo número del código
ISBN de izquierda a derecha
10 – mod(x,10)
10 – mod(25,10) = 5 (10 → 0)
Ejemplo 1: consideremos que la memoria de un computador tiene 11 celdas indexadas desde 0 a 10. Para
guardar o recuperar un número n, podemos tomar como primera opción para la localización la función de
dispersión:
h(n) = mod(n,11)
La siguiente figura muestra el resultado de almacenar 15, 558, 32, 132, 102 y 5, en este orden, en celdas
que originalmente estaban vacías:
Colisión: Una colisión ocurre para una función de dispersión h si h(n1) = h(n2), pero n1 n2.
Para manejar colisiones se requiere una política para solución de colisión. Una política sencilla es
encontrar la celda superior inmediata disponible para contener ese dato. En este caso se puede asumir
que la primera celda sigue a la última (En el ejemplo podemos asumir que 0 sigue a 10).
Ejemplo 2: Suponga que queremos guardar 257. Como h(257) = 4, el número 257 debe guardarse en el
lugar 4; sin embargo, esta posición ya está ocupada. La celda superior inmediata a 4 que está vacía es la 6.
Por lo tanto, el número 257 se guarda en la posición 6 de la memoria.
Aplicaciones de la Función Mod:
Función de Dispersión o Hashing (2)
Búsqueda de un número n guardado en base a una función de hashing: Si se quiere
localizar un valor guardado n, se siguen los siguientes pasos:
1. Calcular m = h(n).
2. Buscar el número n en el lugar m.
3. Si n no está en esa posición, se busca en la siguiente posición más alta.
4. Si n no está en esta posición, se procede a la siguiente posición más alta y así
sucesivamente.
5. Si se encuentra una celda vacía o se regresa a la posición original, se concluye
que n no está presente; de otra manera se obtiene la posición de n.
Si las colisiones son poco frecuentes y si cuando ocurre una colisión ésta se
resuelve con rapidez, entonces la función de dispersión proporciona un método
muy rápido para almacenar y recuperar datos.
Aplicaciones de la Función Mod:
Números Seudoaleatorios (1)
Los computadores muchas veces se usan para simular el comportamiento aleatorio: Un
programa para un juego quizá simule el lanzamiento de dados, un programa para el
servicio a clientes quizá simule la llegada de los clientes a un banco, etc.
xn = mod(a*xn − 1 + c, m).
Aplicaciones de la Función Mod:
Números Seudoaleatorios (2)
Ejemplo: Si m = 11, a = 7, c = 5, y s = 3, entonces
Nota curiosa: En la década de 1990, Daniel Corriveau de Quebec ganó tres juegos seguidos de un
juego de lotería en computador en Montreal, eligiendo cada vez 19 de 20 números correctamente. Las
posibilidades en contra de esta hazaña son 6 mil millones a 1. Al principio, los oficiales suspicaces se
rehusaron a pagarle. Aunque Corriveau atribuyó su éxito a la teoría del caos, lo que pasó en realidad fue
que siempre que cortaban la energía eléctrica, el generador de números aleatorios iniciaba con la misma
semilla, y generaba la misma sucesión de números aleatorios. El abatido casino pagó al final a Corriveau
los $600,000 que le debían.
Link: http://www.americancasinoguide.com/gambling-stories/costly-casino-mistakes-the-keno-mix-up.html
Aplicaciones de la Función Mod:
Fórmula Autoreferencial de Tupper
DEMO MATLAB:
FormulaTupper.m
Links: http://mathworld.wolfram.com/TuppersSelf-ReferentialFormula.html
https://www.youtube.com/watch?v=_s5RFgd59ao
Aplicaciones de la Función Mod:
Representación de una Imágen Binaria Mediante la Fórmula de Tupper
17 píxeles
106 píxeles
Pasos para representar una imagen con la fórmula de Tupper:
1. Obtener la secuencia correspondiente de bits recorriendo la imagen binaria de abajo hacia arriba y de izquierda a
derecha.
2. Transformar la secuencia binaria al número decimal m.
3. Multiplicar el número decimal por 17: n = 17*m.
4. Reemplazar el valor obtenido para n en la fórmula de Tupper (slide anterior).
Aplicaciones de la Función Mod:
Máximo Común Divisor (Método 2)
a = 105 y b = 30
r = mod(a,b) = mod(105,30) = 15 y a = 30 y b = 15
r = mod(a,b) = mod(30,15) = 0 y a = 15 y b = 0 (el algoritmo termina)
mcd(30,105) = a = 15
Aplicaciones de la Función Mod:
Números Primos
Número Primo: Es un entero mayor que 1 cuyos únicos divisores positivos son 1 y
él mismo.
(1) Supongamos que r*n y s*n tienen el mismo módulo p, entonces se tiene que r s (mod p), lo cual
implica que la operación mod(si, p), con siS e i = 1, 2, …, p – 1, da un resultado diferente para cada
elemento de S. (2) Cuando se calcula mod(sk, p), con (sk = k*n)S y k = 1, 2, 3, …, p - 1, se obtiene un
número diferente de 0 porque k no es divisible por p. (3) En esta última operación tampoco se
obtiene p porque si k*n p (mod p) k 1 (mod p) p = 1, lo cual contradice el hecho que p es un
número primo. De (1), (2) y (3) se concluye que los elementos de la secuencia S deben ser
congruentes, en módulo p, con los elementos de la secuencia 1, 2, 3, ..., p – 1 en algún orden.
Multiplicando todas estas congruencias entre si se tiene que