Documente Academic
Documente Profesional
Documente Cultură
Se sabe que los m campos de R1 ocupan un espacio de tamao L1 y los n campos de R2 ocupan un espacio de tamao L2. Suponer que el compilador genera cdigo para representar ambas variables en forma contigua, R1 a continuacin de R2. a) Proponer frmulas para calcular los tamaos L1, L2 y L (correspondiente al espacio total ocupado por ambas variables). b) Si la direccin base de R2 es , proponer una frmula para acceder al i-simo campo de R1. c) Si se sabe, que el ltimo campo de R2 (de tamao 4) comienza en la direccin 13556 y que los tamaos de los tres primeros campos de R1 son 12, 1 y 6, respectivamente, determinar la direccin en la cual comienza el cuarto campo de R1. Problema 2 Se sabe que el primer campo de una struct R, de n campos, tiene tamao 1 y que, a partir del segundo, cada campo tiene el tamao del anterior incrementado en 1. a) Desarrollar una frmula para acceder al i-simo campo de R. b) Proponer una expresin para calcular el tamao de R. c) Determinar la direccin de comienzo del centsimo primer campo de R, cuando n = 150 y la direccin base de su representacin en memoria es = 50505. Problema 3 Con base en las definiciones struct Nodo { Nodo *link; } typedef Nodo *Enlace; struct Reg { float f; Enlace e; } Reg R; y en la sentencia R.e = new Nodo; a) Desarrollar una frmula para acceder al i-simo campo del nodo apuntado por R.e. b) Si struct Nodo { bool b; // 1 byte char c; // 1 byte int i; // 2 bytes Enlace d; // 4 bytes Nodo *link; } y R.e = 84206, utilizar la frmula desarrollada en el punto anterior para determinar la direccin del ltimo campo del nodo apuntado por R.e. Problema 4 Considrense las siguientes definiciones en lenguaje C:
1
typedef union {<tipo1> u1; <tipo2> u2; ... <tipon> un;} variante; typedef variante vector[L]; typedef struct {vector v, variante u, vector w} registro; registro q; Proponer una frmula para acceder al elemento q.w[i] si, durante ejecucin, q se sita en memoria a partir de la direccin . Problema 5 Con respecto a un arreglo unidimensional v de estructuras de n campos, en lenguaje C: a) Proponer una frmula para acceder al j-simo campo del k-simo elemento de v. b) Conforme a la especificacin de datos typedef struct{char c; int i; void *p; float f;} reg; typedef reg vec[100]; vec v; obtener la direccin de v[50].f si, durante ejecucin, v se sita a partir de la direccin 2776 en memoria. Considerar tamaos 1, 2, 4 y 4 para los tipos char, int, void * y float. Problema 6 Con el propsito de ahorrar espacio, cierto lenguaje permite representar en RAM slo los valores significativos de una matriz triangular inferior T linealizada por filas. a) Proponer una frmula para acceder un elemento T[i, j]. b) Utilizar la declaracin var T : array[-3..1, -1..3] of integer; y la frmula propuesta para determinar la direccin del elemento T[0, 2] si, durante ejecucin, T se encuentra almacenada a partir de la direccin 98755. Problema 7 es un lenguaje que establece el orden [columna,fila] para los ndices de arreglos bidimensionales, es decir, linealiza por columnas. a) Proponer una frmula de acceso al elemento [i,j] de un arreglo B declarado en PASTRAN. b) Usar la declaracin Integer B : Array[3..8,-1..3]; y la frmula desarrollada en el punto anterior, para determinar la direccin del elemento B[7,2] si, durante ejecucin, B se sita a partir de la direccin 43188 y se sabe que un Integer ocupa dos bytes.
PASTRAN
Problema 8 Un arreglo tridimensional v se declara como v : array[IP..SP,IF..SF,IC..SC] of <tipo>; en lenguaje Pascal, y como <tipo> v[P][F][C]; en lenguaje C. a) Proponer una frmula para acceder al elemento v[i,j,k]. b) Proponer una frmula para acceder al elemento v[i][j][k].
SOLUCIONES Problema 1 a) L1 =
t
k= 1
L2 =
t
k= 1
L = L1 + L2 =
t
k= 1
t
k= 1
t
k= 1 k
i 1
a) Dir(R1.S4) = +
t
k= 1
t
k= 1 n k =1
i 1
= +
k
k= 1
i 1
= +
(i 1)i 2
b) T =
t k = k =
k= 1
n(n +1) 2
t
k= 1 3 k= 1
i 1
Luego, Dir(R.e->S4) = 84206 + 1 + 1 + 2 = 84210 Problema 4 Dir(q.w[i]) = + Tv + Tu + i*Tu con, Tu = max{ti 1 i n} donde ti es el tamao de vi, y Tv = L*Tu Problema 5 a) Dir(v[k].Si) = + k*T +
T j
j= 1
i 1
con T =
3
T
j= 1 j
j 4
T
j= 1
con T =
T
j= 1
= 1 + 2 + 4 + 4 = 11
i if
(j ic)]*T
b) Dir(T[0, 2]) = 98755 + [*(0 (-3))*(0 (-3) + 1) + (2 (-1))]*2 = 98755 + [*(3)*(4) + (3)]*2 = 98755 + [6 + 3]*2 = 98755 + 18 = 98773
Problema 7 a) Dir(B[i,j]) = + (i ic)*S + (j if)*T con S = (sf - if + 1)*T b) Dir(B[7,2]) = = = = Problema 8 a) Dir(v[i,j,k]) = + (i IP)*M + (j IF)*V + (k IC)*E con V = (SC IC + 1)*E y M = (SF IF + 1)*V b) En este caso, IP = IF = IC = 0, SC = C 1 y SF = F 1 Luego, V = (C 1 0 + 1)*E y M = (F 1 0 + 1)*V Por lo tanto Dir(v[i][j][k]) = + i*M + j*V + k*E con V = C*E y M = F*V Dir(B[j,i]) = + (j ic)*S + (i if)*T
43188 + (7 3)*(3 (-1) + 1)*2 + (2 (-1))*2 43188 + 4*5*2 + 3*2 43188 + 40 + 6 43234