Práctica 2: Datos

Anuncio
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)
Descargar