datos escalares

22
1 Datos escalares y compuestos Sección 5.1-5.3

Upload: johanna20

Post on 20-Jun-2015

2.991 views

Category:

Travel


3 download

TRANSCRIPT

Page 1: Datos Escalares

1

Datos escalares y compuestos

Sección 5.1-5.3

Page 2: Datos Escalares

2

Objeto de datos

Objetos de datos escalares:

• Numérico (Integers, Real)

• Boléanos

• 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)

Page 3: Datos Escalares

3

Unión de objetos de datos

Un compilador crea dos clases de objetos:

• Posiciones de memoria

• Valores numéricos

Una variable es la unión (binding) de un nombre con una

posición de memoria:

• Contenido de la posición puede cambiar

Page 4: Datos Escalares

4

Tipos de datos

Cada objeto de datos tiene un tipo:

Valores: para objetos de ese tipo

Operaciones: para objetos de ese tipo

Implementación: (Representación 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

Page 5: Datos Escalares

5

L-value y R-value

Posición de un objeto es

su L-value. Contenidos de

esa posición es su R-value.

¿Porque los nombres L-value y R-value?

Considere ejecutar: A = B + C;

1. Coja el contenido de posición B

2. Sume el contenido de posición C

3. Almacene el resultado en la dirección A.

Para cada objeto nombrado, su posición en el lado

derecho del operador de asignación (=) es un acceso al

contenido de , y su posición en el lado izquierdo del

operador de asignación es el acceso a la dirección de.

• dirección de entonces es un L-value

• Contenido de entonces es un R-value

• Valor, por si solo, generalmente significa R-

value

Page 6: Datos Escalares

6

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.

Conversión entre tipos:

¿Dado dos variables A y B, cuando es A:=B legal?

Explicito: Todas las conversiones entre diferentes

tipos debe ser especificado

Implícito: Algunas conversiones entre diferentes tipos

están implícitas en la definición del lenguaje.

Page 7: Datos Escalares

7

Ejemplos de coerción

Ejemplos en Pascal:

var A: real;

B: integer;

A := B - Implícito, denominado una coerción – una

conversión automática de un tipo a otro tipo

A := B es llamada ampliación (widening) por cuanto el

tipo A tiene más valores que B.

B := A (si fuera permitido) sería llamado contracción

(narrowing) ya que B tiene menos valores que A.

Información se pierde en este caso.

En la mayoría de los lenguajes se permite coerción de

ampliación;

Coerciones de contracción deben ser explicitas:

B := round(A); El entero más cercano a A

B := trunc(A); Borrar la parte fraccional de A

Page 8: Datos Escalares

8

Datos númericos enteros

Enteros:

Representación binaria

en aritmética de

complemento a 2

Para palabras de 32-bits:

Valor máximo:

231-1

Valor mínimo:

-231

Valores positivos Valores Negativos

Page 9: Datos Escalares

9

Datos numéricos reales

Float (real): representación 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

Page 10: Datos Escalares

10

Formato de punto flotante IEEE

IEEE standard 754 especifica 32- y 64-bit standard.

Números consisten de tres campos:

S: campo de bit de signo. 0 es positivo.

E: exponente en notación 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 número normalizado es 1, puede ser

omitido e insertado automáticamente por el hardware,

dando un 24avo bit adicional de precisión.

Page 11: Datos Escalares

11

Decodificación del formato

Dado E, y M, el valor de la representación es:

Parámetros Valor

E=255 y M 0 Un número invalido

E=255 y M = 0

0<E<255 2{E-127}(1.M)

E=0 y M 0 2 {-126}.M

E=0 y M=0 0

Page 12: Datos Escalares

12

Ejemplo de número 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 números en

el rango de 10-308 a 10308.

Page 13: Datos Escalares

13

Otros datos numéricos

Entero corto (C) - 16 bit, 8 bit

Entero largo (C) - 64 bit

Booleano o lógico - 1 bit con valor verdadero o falso

Byte - 8 bits

Carácter – Un byte - 256 caracteres

• ASCII es un código de 7 bits 128 caracteres

En C, una variable tipo char es simplemente un dato

numérico entero de 8 bits

Page 14: Datos Escalares

14

Enumeraciones

typedef enum cosas {A, B, C, D } NuevoTipo;

• Implementado como enteros pequeños 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 X=A?

• Facilidad de lectura

• Detección de error

Ejemplo:

enum { electrica, mecanica, maritima, geologia}

ClaseFacultad;

enum { viejo,nuevo } CalidadPan;

CalidadPan = fresco; Un error que puede ser detectado

Page 15: Datos Escalares

15

Declarando datos decimales

Decimal fijo en PL/I y COBOL (Para aplicaciones financieras)

DECLARE X FIXED DECIMAL(p,q);

p = número de dígitos decimales

q = número de dígitos en la fracción

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;

Page 16: Datos Escalares

16

Usando datos decimales

¿Que es Z=X+Y?:

Realizando la operación 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 números de 4 dígitos puede dar

un resultado de 5 dígitos y se necesitan 3 lugares para la

parte fraccional.

p=8 y q=3 es conocido antes de la suma

• Conocido durante la compilación - No se requiere pruebas

en ejecución.

Page 17: Datos Escalares

17

Implementando datos decimales

Algoritmo:

1. Almacene cada número 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.

Page 18: Datos Escalares

18

Datos compuestos

Cadena de caracteres: Objeto primitivo hecho de datos

de caracteres más 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 tamaño, dinámico

F = `ABCDEFG\0' - C – cualquier tamaño, definido por

el programador

Page 19: Datos Escalares

19

Implementación de cadenas

Page 20: Datos Escalares

20

Operaciones en cadenas

En C, arreglos y cadenas de caracteres son lo mismo.

Implementación:

L-value(A[I]) = L-value(A[0]) + I

Page 21: Datos Escalares

21

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

Page 22: Datos Escalares

22

Asignación con punteros