Análisis Comparativo de Lenguajes

Anuncio
Análisis Comparativo de Lenguajes - Año 2016
Práctico Nro. 5
Tipos de Datos Estructurados
Corresponde a Cap. IV Tipos de Datos págs. 142-181(Pratt en Español)
Ejercicio 1.
Dada la siguiente declaración de un tipo enumerado y de una variable arreglo en lenguaje
C:
typedef enum Conector {DVI, Firewire, HDMI, USB};
Conector E[9];
a. Muestre la representación (incluyendo el descriptor) que serı́a apropiada para la
variable E y dar la fórmula de acceso para calcular la ubicación de una componente
arbitraria E[i].
b. Calcular la dirección de la componente E[5], sabiendo que la estructura comienza
en α = 1500 y el tamaño del tipo enumerado es 2 bytes.
c. Calcular el origen virtual (OV) de la estructura E y luego dar la fórmula de acceso
para una componente arbitraria E[i] utilizando el OV.
Ejercicio 2.
Sea la siguiente declaración de una variable de tipo arreglo de dos dimensiones, en un
lenguaje con sintaxis similar a la de Pascal:
var M: array[-3..-1 , -2..1] of integer;
Considerando que el tamaño del tipo entero es 2 bytes y que la estructura comienza en
α = 2000, se pide:
a. Muestre la representación del almacenamiento de la variable M si la matriz está
almacenada por filas.
b. Provea la fórmula de acceso (general) y luego calcule la dirección de la componente
M[-2,1] si la matriz está almacenada por filas.
c. Muestre la representación del almacenamiento de la variable M si la matriz está
almacenada por columnas.
d. Provea la fórmula de acceso (general) y luego calcule la dirección de la componente
M[-2,1], si la matriz está almacenada por columnas.
Ejercicio 3.
Dadas las siguientes definiciones de tipos y declaración en el lenguaje C:
enum Cat{Mujer, Hombre, Infante};
typedef struct Tcalzado{
int codigo;
Cat cat_calzado;
char marca[30];
};
Tcalzado calzado;
Tcalzado stock[70];
a. Dé la representación del almacenamiento para la variable calzado.
b. Muestre la representación del almacenamiento para la variable stock. ¿Qué conclusiones puede obtener sobre el almacenamiento de los descriptores de los arreglos en
forma contigua a las componentes?
c. Dé la fórmula de acceso para la componente stock[i].marca[j] y calcule la ubicación del objeto de datos stock[25].marca[12]. Asuma que el tipo enumerado Cat
y el char ocupan 1 byte, el entero 2 bytes y que α = 1000 (dirección base de stock).
d. Suponga que el acceso a una componente del arreglo stock se realiza mediante la
utilización de una variable i, la cual es solicitada al usuario. ¿En qué momento se
determinará el desplazamiento de la componente stock[i]?
Ejercicio 4.
A partir del siguiente trozo de código en C:
union
{
int i;
float j;
} x;
x.i = 4;
printf("El valor es %f\n",x.j);
a. Dé la representación del almacenamiento para la variable x, asuma que el tipo entero
ocupa 2 bytes y el float 4 bytes.
b. ¿Existe algún error en el código? En caso afirmativo, ¿es posible chequearlo? Justifique su respuesta.
Ejercicio 5.
Dado el siguiente código en un lenguaje hipotético, que soporta el tipo String y el subrango:
struct TFecha{
1..31 dia;
1..12 mes;
1900..2014 anio;
};
enum estado {Casado, Viudo, Divorciado, Soltero};
struct TPersona{
int codigo;
TFecha fec_nac;
String(30) domicilio;
estado e_civil;
};
TPersona persona;
a. Muestre la representación del almacenamiento para la variable persona, el campo
domicilio se implementa como un string de longitud fija declarada.
b. Muestre la fórmula de acceso y calcule la dirección para persona.domicilio(15),
sabiendo que la dirección base del registro es α = 1500, el tipo entero ocupa 2 bytes
y los tipos subrango, enumerado y char ocupan 1 byte.
c. ¿En qué tiempo se conoce el desplazamiento de la componente persona.e civil?
Ejercicio 6.
Considere que en un lenguaje particular se implementa el tipo String con longitud variable,
utilice como representación una lista encadenada de caracteres con bloques de 5 caracteres.
Realice el pseudo-código de cada una de las siguientes operaciones:
a. Una función elimina que recibe como parámetros un string y una posición, y cuyo
propósito es eliminar el caracter que se encuentra en la posición especı́ficada y retorna
el string modificado.
b. Una función Substring que retorna el substring desde la posición pasada por parámetro hasta el final del string.
Ejercicio 7.
Considerando la siguiente lista en el lenguaje Prolog:
Lista =[tenis, 58.4, 5]
Muestre de forma gráfica como Prolog la representa internamente, consulte en el apunte
El lenguaje de Programación Prolog.
Ejercicio 8.
Sea el siguiente código en un lenguaje hipotético que utiliza una variable conjunto, asuma
que el tipo conjunto se implementa como una cadena de bits:
enum marca = (Ford, Chevrolet, Fiat, Renault, Nissan, Chery);
s: set of marca;
s := [Ford, Chery, Nissan];
s := s - [Chery, Fiat]; // Diferencia de conjuntos
s := ~s; // Complemento de conjuntos
Muestre paso a paso cómo cambia la estructura del almacenamiento de la variable s.
Ejercicio 9.
Se tienen dos variables punteros p y q, p apunta a la variable x y q a la y. Las variables
x e y se encuentran en un bloque de almacenamiento que comienza en la dirección 1000,
x se encuentra en la dirección 1500 y la y en la 2000. En la siguiente figura se muestran
los punteros y el bloque de almacenamiento con las variables x e y.
Dé la representación en memoria y las direcciones absolutas y relativas, para los punteros
p y q. ¿Qué sucederı́a con los punteros si el bloque de almacenamiento se mueve a la
dirección 3000?
Ejercicios Complementarios
Ejercicio 1.
Sea la siguiente una declaración en un lenguaje con sintaxis similar a la de Pascal:
type dato=array[-2..2] of 2000..2016;
var Cad: array[-5..-3,2..4] of dato;
a. Muestre la representación del almacenamiento para la variable Cad, asumiendo que
la matriz es almacenada por columnas y que el tamaño del subrango es de 2 byte.
b. Calcule la dirección de la componente Cad[-4,3][1] asumiendo que la estructura
comienza en la dirección α = 2500.
Ejercicio 2.
Sean las siguientes declaraciones en un lenguaje tipo Pascal:
type Dias = (Lun,Mar,Mie,Jue,Vie,Sab,Dom);
reg = record
d: Dias;
t: String[30];
x: array[-3..2] of 1900..2013;
end;
var a: array[Mie..Dom] of reg;
Se pide:
a. Dé la representación de almacenamiento para la variable a. Tenga en cuenta que el
primer elemento de la enumeración tiene asociado el valor 0.
b. Dé la fórmula de acceso y calcule la dirección de la componente a[Vie].x[-2].
Considere que la dirección base del arreglo es α = 1500 y los siguientes tamaños
para subrango: 2 bytes, para el enumerado: 2 bytes y para el string: 30 bytes.
Ejercicio 3.
Realice una comparación entre los tipos arreglo y registro(struct) en el lenguaje C. Describa los aspectos positivos y negativos de cada tipo de datos cuando se considera:
a. Tipo de componente que pueden almacenar (homogéneas vs heterogéneas).
b. Número de componentes que pueden almacenar.
c. Chequeo de tipos de la fórmula de acceso a una componente (en tiempo de traducción
vs en tiempo de ejecución).
d. Factibilidad de errores en la selección de una componente.
e. Uso del almacenamiento (los elementos de la estructura deben ser almacenados en
forma contigua vs en forma separada).
Descargar