Fonaments d’Informàtica 1r curs d’Enginyeria Industrial Práctica 2: Datos Objetivos de la práctica En esta práctica trabajaréis con las distintas representaciones de los datos (decimal, binaria, hexadecimal). También se verán los caracteres, los números enteros y los números reales con diferente precisión. Se realizarán operaciones aritméticas y lógicas con números reales observando el rango de representación. Finalmente, realizaréis vuestro primer programa en MATLAB. Antes de comenzar En primer lugar debéis crear vuestra carpeta de trabajo con el explorador de Windows. A continuación, iniciar MALTAB y cambiar el directorio a la caperta de trabajo que habéis creado: indica cuál es el directorio actual • pwd contenidos del directorio actual • dir cambiar de directorio. • cd camino Codificación de la información » bin2dec('01001000011011110110110001100001') Seleccionar la opción Preferences dentro del menú File. Aparecerá la pantalla siguiente, que corresponde a la ficha del menú General: A la izquierda de la pantalla aparecen los diferentes formatos. Cambiar el que hay por defecto al format long y volver a realizar la orden anterior. Observar que bin2dec nos devuelve un número entero. El cambio de formato también se puede hacer con el comando format en la línea de comandos. Si escribimos format sólo utilizará el formato por defecto (short). Si queremos utilizar el formato largo pondremos format long. Probar ahora la siguientes órdenes. Observar qué devuelven. Al final obtendremos la representación binaria de la palabra ‘Hola’. » double('Hola') » char([72,111,108,97]) » dec2bin([72,111,108,97],8) » reshape(ans',1,32) Ejercicio Calcula la expresión binaria de tu nombre. Binario, octal, hexadecimal, decimal En primer lugar, convertiremos un número de binario a decimal. Ejercicio: convertir a decimal el siguiente número binario: 11011011, tal y como habéis visto en clase de teoría. Comprobar que el resultado es correcto con la siguiente orden: » bin2dec('11011011') ¿Cuál es el número decimal que corresponde a tu nombre? ¿Qué ocurre si tu nombre tiene más de 6 letras? Conversión binario – decimal – octal – decimal – binario: » bin2dec('10100101110100110001011') La siguiente orden permite convertir de decimal a cualquier base. En este caso, queremos convertir el número decimal obtenido en la orden anterior (ans) a la base octal (8). » dec2base(ans,8) Del mismo modo de cualquier base, podemos obtener el número en base decimal. » base2dec(ans,8) » dec2bin(ans) Ejercicio Convierte tu nombre (tomando como mucho las 6 primeras letras del mismo) de binario – decimal -hexadecimal – decimal – binario. ¿A qué número hexadecimal corresponde el número decimal 65535? ¿Cuál es su representación binaria? Carácteres ¿Qué obtenemos tras escribir estas dos órdenes? » reshape(0:255,16,16)' » char(ans) ¿Cuántos bits se utilizan para representar los carácteres? Con la siguiente orden obtenemos los códigos decimales de los caracteres. ans es la respuesta de la orden inmediantamente anterior. » double(ans) Indica cuál es el código decimal de las letras de la palabra ‘Castelló’. ¿A qué caracteres corresponden los valores decimales: 126, 255, 215, 63 y 224? Números enteros Las funciones siguientes convierten una dato a un entero utilizando 8, 16 ó 32 bits. uint8, uint16, uint32, int8, int16, int32 Su utilización en la siguiente: i= int8(x); La representación puede ser con signo o sin signo. MATLAB, sin embargo, no tiene definida ninguna operación arimética con enteros (antes deberían ser covertidos a reales con double, que se estudiará en el próximo apartado). Comprobar cuál es el rango de valores que se pueden representar en un dato de tipo int8. Para ello, daremos valores a un dato x, por ejemplo: >> x=90 Y definiremos: >> xent=int8(x) Comprobar que valor tiene xent. Incrementar el valor de x y comprobar qué valor toma xent. Observar qué ocurre cuando hemos sobrepasado el rango. Probar en cada uno de los restantes casos, incrementando los valores, las salidas fuera de rango Números reales Para el caso de los número reales, podemos trabajar con dos precisiones: simple precisión (32 bits) y doble precisión (64 bits). Las órdenes en MATLAB son, respectivamente: single, double Por defecto, todos los cálculos son en doble precisión. Hacer operaciones con números reales y comprobar el rango(overflow y underflow). Por ejemplo, asignar un valor a x. A continuación dividir x sucesivas veces por un número (por ejemplo 999999) y comprobar cuál es su valor en precisión simple, hasta que os salgáis del rango con precisión simple: >> x=x/999999 >> y=single(x) Cambiar el formato a long. Dividir 1 entre 10000000. Comprobar el resultado. Comprobar ahora cuál es el resultado en representación entera. Expresiones Realizar las siguientes expresiones en MATLAB. » 237 + 1411 » 7.2 * 3. 01 » 18 / 4 » 340 > 2501 » 1.1 < 1.18 » 27 ~= 3.2 » ( 4 + 8 * 6 ) / 10 » ~(( 5 < 8 ) & ( 3 > 4 )) Variables Escribir las dos expresiones siguientes en la línea de comandos de MATLAB: » longitud = 2 * 3.14 * 7; » preu_f = preu * (1 + iva); Al escribir la segunda se producirá un error porque falta definir las variables preu e iva. Calcular el número de goles por partido: >> goles = 15 >> partidos = 6 >> gpp = goles / partidos Calcular los minutos por gol: >> minutos = 208 >> goles = 5 >> mpg= minutos / goles Sabiendo los partidos ganados, los perdidos y los empatados, calcular el número de partidos jugados y los puntos obtenidos: >> pg = 3; >> pe = 2; >> pp = 2; >> pj = pg + pe + pp >> pt = 3*pg + 1*pe + 0*pp ¿Cómo se calcula los puntos por partido jugado? >> ppp = .... Escribir la siguiente expresión que representa un polinomio en x de grado 2. » y = a * x * x + b * x + c; Definir del mismo modo las variables necesarias. Observar la diferencia entre poner ; o no ponerlo. El primer programa Iniciar el editor de MATLAB con un fichero nuevo. Escribir estas instrucciones: r = 7.5; l = 2 * pi * r; s = pi * r^2; Guardar el fichero (circulo.m) y ejecutar desde la línea de comandos de MATLAB: » circulo Ejercicio La representación en coma flotante del número Pi. La representación en hexadecimal del número Pi es 400921fb54442d18. Teniendo en cuenta el standard del IEEE para representar los números en coma flontante (1 bit signo, 11 bits para el exponente y 52 bits para la mantisa), razonar cómo se obtiene el número Pi a partir de su representación hexadecimal. Ejercicios adicionales: • Comentar los tipos de números y realizar un ejercicio que permite jugar con las conversiones: (hacer antes en la pizarra un ejemplo sencillo) 1)Sea la siguiente serie binaria: 1110101100111 Octal: 16547 Hex: 1D67 Dec:7527 Pasar de dec a hex de hex a dec............ 2)Dado el número 11259375 calcular el correspondiente en hex (ABCDEF) 3)Sea la siguiente sucesión de números de decimales: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Enumerar la misma cantidad de términos en hex: 0 1 2 3 4 5 6 7 8 9 A B C D E F 10 11 12 13 14 Enumerar la misma cantidad de términos en Octal: 0 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 20 21 22 23 24 Enumerar la misma cantidad de términos en binario: 0 1 10 11 100 101 110 111 1000 1001 1010 1011 1100 1101 1110 1111 10000 10001 10010 10011 10100 Sumar 1357+ 244 en dec=1601 hex=159B Oct=1623 y en bin?(no son números binarios) 4) Convertir el número decimal 457.0125 en octal 711.006314.. en octal 5) Convertir el número 1529.0742hex en dec 1*16^3+5*16^2+2*16+9*16^0.0*16^-1+7*16^-2+4^16-3+2*16^-4 • Pedir la apertura de un script para visualizar los valores de realmin, realmax , eps, así como la facilidad de uso de complejos. %programa para el juego con comandos de datos eps n=7+2j a=imag(n) b=real(n) c=a*b d=n*conj(n) complex(2,5) realmin realmax • Pedir la realización de un pequeño script de cálculo de las raíces de una ecuación. %ejemplo de cálculo de raíces de una ecuación de 2ºgrado disp('introducir el valor de los parámetros ax2+bx+c=0') a=input('a') b=input('b') c=input('c') x1=-b+sqrt(b^2-4*a*c) x2=-b-sqrt(b^2-4*a*c)