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
1

Considrense las siguientes definiciones en lenguaje C:


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
m

a) L1 =

k 1

L2 =

k 1

y L = L1 + L2 =

t
k 1

t
k 1

donde tk es el tamao del k-simo campo


i 1

b) Dir(R1.Si) = + L2 +

k 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
i 1

a) Dir(R.Si) = +

t
k 1

b) T =

k 1

k 1

i 1

tk = k =

c) Dir(R.S101) = 50505 +

= +

=+

k 1

(i 1)i
2

n( n 1)
2

101(100)
= 50505 + 5050 = 55555
2

Problema 3
i 1

a) Dir(R.e->Si) = +

t
k 1
3

b) Dir(R.e->S4) = +

t
k 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 1in} donde ti es el tamao de vi, y
Tv = L*T u
Problema 5
i 1

a) Dir(v[k].Si) = + k*T +

T j

con T =

j 1

T
j 1

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
i if

a) Dir(T[i, j]) = + (

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

(j ic)]*T

k 1

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

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

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

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