Datos escalares y compuestos




         Sección 5.1-5.3




                               1
Objeto de datos

Objetos de datos escalares:   Tipos de datos
• Numérico (Integers, Real)   abstractos:
• Boléanos        ...
Unión de objetos de datos


Un compilador crea dos clases de objetos:
• Posiciones de memoria
• Valores numéricos
Una vari...
Tipos de datos

Cada objeto de datos tiene un tipo:
Valores: para objetos de ese tipo
Operaciones: para objetos de ese tip...
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-v...
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.

Co...
Ejemplos de coerción

Ejemplos en Pascal:
   var A: real;
   B: integer;
A := B - Implícito, denominado una coerción – una...
Datos númericos enteros



Enteros:
Representación binaria
en aritmética de
complemento a 2

Para palabras de 32-bits:
Val...
Datos numéricos reales
Float (real): representación de hardware




Exponentes usualmente desplazados
ejemplo, si 8 bits (...
Formato de punto flotante IEEE

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

Números consisten de tres campos:

S:...
Decodificación del formato

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



Parámetros                      Valor
E=255 ...
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-12...
Otros datos numéricos

Entero corto (C) - 16 bit, 8 bit

Entero largo (C) - 64 bit

Booleano o lógico - 1 bit con valor ve...
Enumeraciones

typedef enum cosas {A, B, C, D } NuevoTipo;
• Implementado como enteros pequeños con valores:
       A = 0,...
Declarando datos decimales


Decimal fijo en PL/I y COBOL (Para aplicaciones financieras)
   DECLARE X FIXED DECIMAL(p,q);...
Usando datos decimales

¿Que es Z=X+Y?:

Realizando la operación manualmente, alineamos el punto
   decimal y sumamos:
   ...
Implementando datos decimales
Algoritmo:
1. Almacene cada número como un entero (12345, 987654)
   El compilador conoce el...
Datos compuestos

Cadena de caracteres: Objeto primitivo hecho de datos
   de caracteres más primitivos.

Longitud fija:
 ...
Implementación de cadenas




                            19
Operaciones en cadenas

En C, arreglos y cadenas de caracteres son lo mismo.
Implementación:
   L-value(A[I]) = L-value(A[...
Punteros

Uso de punteros para crear estructuras de datos
   arbitrarios

Cada puntero puede apuntar a un objeto de otra
 ...
Asignación con punteros




                          22
Upcoming SlideShare
Loading in …5
×

Datos Escalares

3,655 views

Published on

Published in: Travel, Business
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
3,655
On SlideShare
0
From Embeds
0
Number of Embeds
11
Actions
Shares
0
Downloads
9
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Datos Escalares

  1. 1. Datos escalares y compuestos Sección 5.1-5.3 1
  2. 2. Objeto de datos Objetos de datos escalares: Tipos de datos • Numérico (Integers, Real) abstractos: • Boléanos •Clases • Caracteres Objetos activos: • Enumeraciones •Tareas (Tasks) Objetos compuestos: •Procesos (Processes) • Cadenas (String) • Puntero (Pointer) Objetos estructurados: • Arreglos (Arrays) • Registros (Records) • Listas (Lists) • Conjuntos (Sets) 2
  3. 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 3
  4. 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 4
  5. 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 5
  6. 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. 6
  7. 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 7
  8. 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 8
  9. 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 9
  10. 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. 10
  11. 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 11
  12. 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. 12
  13. 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 13
  14. 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 14
  15. 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; 15
  16. 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. 16
  17. 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. 17
  18. 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 = `ABCDEFG0' - C – cualquier tamaño, definido por el programador 18
  19. 19. Implementación de cadenas 19
  20. 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 20
  21. 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 21
  22. 22. Asignación con punteros 22

×