PUERTA | GATE-CS-2014-(Conjunto-2) | Pregunta 44

Para un programa en C que accede a X[i][j][k], un compilador genera el siguiente código intermedio. Suponga que el tamaño de un número entero es de 32 bits y el tamaño de un carácter es de 8 bits.

  t0 = i ∗ 1024
  t1 = j ∗ 32
  t2 = k ∗ 4
  t3 = t1 + t0
  t4 = t3 + t2
  t5 = X[t4] 

¿Cuál de las siguientes afirmaciones sobre el código fuente del programa C es CORRECTA?
(A) X se declara como “int X[32][32][8]”.
(B) X se declara como “int X[4][1024][32]”.
(C) X se declara como «char X[4][32][8]».
(D) X se declara como “char X[32][16][2]”.

Respuesta: (A)
Explicación: La expresión final se puede simplificar en forma de i, j y k siguiendo los pasos del código intermedio en orden inverso

t5 = X[t4]
   = X[t3 + t2]
   = X[t1 + t0 + t2]
   = X[i*1024 + j*32 + k*4]
   = X + i*1024 + j*32 + k*4 

Dado que k se multiplica por 4, la array debe ser una array int.
Nos quedan 2 opciones (A y B) entre las 4 opciones dadas.

X[i][j][k]’th elemento en una array unidimensional es equivalente a
X[i*M*L + j*L + k]’th elemento en una array unidimensional
(Tenga en cuenta que las arrays multidimensionales se almacenan en orden de fila mayor en C).

Entonces obtenemos las siguientes ecuaciones

j*L*4 = j*32, we get L = 8 (4 is the sizeof(int))
i*1024 = i*M*L*4, we get M = 1024/32 = 32

Por lo tanto, la opción A es la única opción correcta ya que M y L son 32 y 8 respectivamente.

Cuestionario de esta pregunta

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *