Está en la página 1de 22

Datos escalares y compuestos

Seccin 5.1-5.3

Objeto de datos
Objetos de datos escalares:
Numrico (Integers, Real)
Bolanos
Caracteres
Enumeraciones
Objetos compuestos:
Cadenas (String)
Puntero (Pointer)
Objetos estructurados:
Arreglos (Arrays)
Registros (Records)
Listas (Lists)
Conjuntos (Sets)

Tipos de datos
abstractos:
Clases
Objetos activos:
Tareas (Tasks)
Procesos (Processes)

Unin de objetos de datos


Un compilador crea dos clases de objetos:
Posiciones de memoria
Valores numricos
Una variable es la unin (binding) de un nombre con una
posicin de memoria:
Contenido de la posicin puede cambiar

Tipos de datos
Cada objeto de datos tiene un tipo:
Valores: para objetos de ese tipo
Operaciones: para objetos de ese tipo
Implementacin: (Representacin de almacenamiento) para
objetos de ese tipo
Atributos: (p.eje. nombre) para objetos de ese tipo
Firma: (de operaciones de f): f: tipo x tipo
tipo

L-value y R-value
Posicin de un objeto es
su L-value. Contenidos de
esa posicin es su R-value.
Porque los nombres L-value y R-value?
Considere ejecutar: A = B + C;
1. Coja el contenido de posicin B
2. Sume el contenido de posicin C
3. Almacene el resultado en la direccin A.
Para cada objeto nombrado, su posicin en el lado
derecho del operador de asignacin (=) es un acceso al
contenido de , y su posicin en el lado izquierdo del
operador de asignacin es el acceso a la direccin de.
direccin de entonces es un L-value
Contenido de entonces es un R-value
Valor, por si solo, generalmente significa Rvalue
5

Subtipos
A es un subtipo de B si todo valor de A es un valor de
B.
Nota: In C casi todo es un subtipo de integer.
Conversin entre tipos:
Dado dos variables A y B, cuando es A:=B legal?

Explicito: Todas las conversiones entre diferentes


tipos debe ser especificado
Implcito: Algunas conversiones entre diferentes tipos
estn implcitas en la definicin del lenguaje.

Ejemplos de coercin
Ejemplos en Pascal:
var A: real;
B: integer;
A := B - Implcito, denominado una coercin una
conversin automtica de un tipo a otro tipo
A := B es llamada ampliacin (widening) por cuanto el
tipo A tiene ms valores que B.
B := A (si fuera permitido) sera llamado contraccin
(narrowing) ya que B tiene menos valores que A.
Informacin se pierde en este caso.
En la mayora de los lenguajes se permite coercin de
ampliacin;
Coerciones de contraccin deben ser explicitas:
B := round(A); El entero ms cercano a A
B := trunc(A); Borrar la parte fraccional de A

Datos nmericos enteros

Enteros:
Representacin binaria
en aritmtica de
complemento a 2
Para palabras de 32-bits:
Valor mximo:
231-1
Valor mnimo:
-231
Valores positivos Valores Negativos

Datos numricos reales


Float (real): representacin de hardware

Exponentes usualmente desplazados


ejemplo, si 8 bits (256 valores)+128 sumados al
exponente
exponente de 128 = 128-128 = 0 es el verdadero
exponente
exponente de 129 = 129-128 = 1 es el verdadero
exponente
exponente de 120 = 120-128 = -8 es el exponente
9

Formato de punto flotante IEEE


IEEE standard 754 especifica 32- y 64-bit standard.
Nmeros consisten de tres campos:
S: campo de bit de signo. 0 es positivo.
E: exponente en notacin de exceso de -127. Valores (8
bits) van de 0 a 255, correspondiendo a exponentes de
2 que van de -127 a 128.
M: mantisa de 23 bits. Debido a que el primer bit de la
mantisa en un nmero normalizado es 1, puede ser
omitido e insertado automticamente por el hardware,
dando un 24avo bit adicional de precisin.

10

Decodificacin del formato


Dado E, y M, el valor de la representacin es:

Parmetros
E=255 y M

E=255 y M = 0
0<E<255
E=0 y M
0
E=0 y M=0

Valor
Un nmero invalido
2{E-127}(1.M)
2 {-126}.M
0

11

Ejemplo de nmero de punto flotante


+1= 20*1= 2{127-127}*(1).0 (binario)
0 01111111 000000...
+1.5= 20*1.5= 2{127-127}*(1).1 (binario) 0 01111111 100000...
-5= -22*1.25= 2{129-127}*(1).01 (binario)1 10000001 010000...
Esto da un rango desde 10-38 a 1038.
En formato de 64 bits,el exponente es extendido a 11
bits dando un rango desde -1022 a +1023, con nmeros en
el rango de 10-308 a 10308.

12

Otros datos numricos


Entero corto (C) - 16 bit, 8 bit
Entero largo (C) - 64 bit
Booleano o lgico - 1 bit con valor verdadero o falso
Byte - 8 bits

Carcter Un byte - 256 caracteres


ASCII es un cdigo de 7 bits 128 caracteres
En C, una variable tipo char es simplemente un dato
numrico entero de 8 bits

13

Enumeraciones
typedef enum cosas {A, B, C, D } NuevoTipo;
Implementado como enteros pequeos con valores:
A = 0, B = 1, C = 2, D = 3
NuevoTipo X, Y, Z;
X = A
Por que no escribir: X=0 en vez de
Facilidad de lectura
Deteccin de error

X=A?

Ejemplo:
enum { electrica, mecanica, maritima, geologia}
ClaseFacultad;
enum { viejo,nuevo } CalidadPan;
CalidadPan = fresco;

Un error que puede ser detectado


14

Declarando datos decimales


Decimal fijo en PL/I y COBOL (Para aplicaciones financieras)
DECLARE X FIXED DECIMAL(p,q);
p = nmero de dgitos decimales
q = nmero de dgitos en la fraccin
Ejemplo de decimal fijo en PL/I:

DECLARE X FIXED DECIMAL (5,3),


Y FIXED DECIMAL (6,2),
Z FIXED DECIMAL (6,1);
X = 12.345;
Y = 9876.54;

15

Usando datos decimales


Que es Z=X+Y?:
Realizando la operacin manualmente, alineamos el punto
decimal y sumamos:
0012.345
9876.540
9888.885 = FIXED DECIMAL(8,3)

p=8 debido a que al sumar dos nmeros de 4 dgitos puede dar


un resultado de 5 dgitos y se necesitan 3 lugares para la
parte fraccional.
p=8 y q=3 es conocido antes de la suma
Conocido durante la compilacin - No se requiere pruebas
en ejecucin.

16

Implementando datos decimales


Algoritmo:
1. Almacene cada nmero como un entero (12345, 987654)
El compilador conoce el factor de escala (S=3 para
X, S=2 para Y).
Valores verdaderos impresos dividiendo el entero
almacenado por 10S
2. Para sumar, alinee el punto decimal. Ajuste S en 1
multiplicando por 10.

3. 10*Y+X = 9876540 + 12345 = 9888885, Compilador


conoce S=3
4. S=1 para Z, por lo que se necesita ajustar S en la
suma en 2; divida por 102 (98888)
5. Almacene 98888 en Z. Compilador conoce S=1
Nota: S nunca aparece en memoria y no hay perdida de
exactitud al almacenar datos como enteros.
17

Datos compuestos
Cadena de caracteres: Objeto primitivo hecho de datos
de caracteres ms primitivos.
Longitud fija:
char A(10) - C
DCL B CHAR(10) - PL/I
var C packed array [1..10] of char - Pascal

Longitud variable:
DCL D CHAR(20) VARYING - PL/I - 0 a 20 caracteres
E = ABC - SNOBOL4 cualquier tamao, dinmico
F = `ABCDEFG\0' - C cualquier tamao, definido por
el programador

18

Implementacin de cadenas

19

Operaciones en cadenas
En C, arreglos y cadenas de caracteres son lo mismo.
Implementacin:
L-value(A[I]) = L-value(A[0]) + I

20

Punteros
Uso de punteros para crear estructuras de datos
arbitrarios
Cada puntero puede apuntar a un objeto de otra
estructura de datos
De manera general es muy tendiente a errores y debe ser
evitado

21

Asignacin con punteros

22

También podría gustarte