Sunteți pe pagina 1din 4

ENUNCIADOS Problema 1 Sean dos variables struct R1, R2.

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

donde tk es el tamao del k-simo campo b) Dir(R1.Si) = + L2 +


3

t
k= 1 k

i 1

a) Dir(R1.S4) = +

t
k= 1

pero = Dir(R2.Sn) + 4 = 13556 + 4 = 13560

Luego, Dir(R1.S4) = 13560 + 12 + 1 + 6 = 13579 Problema 2 a) Dir(R.Si) = +


n

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

c) Dir(R.S101) = 50505 + Problema 3 a) Dir(R.e->Si) = + b) Dir(R.e->S4) = +

101 (100 ) = 50505 + 5050 = 55555 2

t
k= 1 3 k= 1

i 1

pero = R.e = 84206

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

b) Dir(v[50].S4) = Dir(v[50].f) = 2776 + 50*T +

T
j= 1

con T =

T
j= 1

= 1 + 2 + 4 + 4 = 11

= 2776 + 50*11 + (1 + 2 + 4) = 2776 + 550 + 7 = 3333 Problema 6 a) Dir(T[i, j]) = + (

k )*T + (j ic)*T = + [*(i if)*(i if + 1) +


k= 1

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

S-ar putea să vă placă și