Académique Documents
Professionnel Documents
Culture Documents
Ejercicio 1.
Considere el siguiente código en el lenguaje C:
int a = 4;
int j = 7;
int F1(int y){
float w = 0.0;
w = 5.8 + a; (*)
if !(w > y) return (int)w;
else return y;
}
void F2(int x, int y){
static int z = 0;
y += x;
j = y - x;
z += 2;
}
Ejercicio 2.
Dadas las siguientes declaraciones de tipos y la declaración de una variable arreglo, en el len-
guaje C:
a. Dé la representación del almacenamiento para la variable A. Asuma que el tipo enumerado
ocupa 1 byte, el tipo flotante 4 bytes y que α = 1000 (dirección base de A).
b. Dé la fórmula de acceso para la componente A[i].t[j] y calcule la ubicación del
objeto de datos A[7].t[5].
Ejercicio 3.
Para el siguiente código en C:
#define TAM1 3
#define TAM2 4
int i;
int j;
int matriz[TAM1][TAM1] = {{1,2,3},{4,5,6},{7,8,9}};
float pro(int x, int y, int z){
for(; x < TAM1 ; x++){
y++;
z++;
}
}
int main(int argc, const char * argv[]) {
int * p;
int * matriz1[TAM2];
for(int k = 0; k < TAM2; k++) matriz1[k] = (int *)malloc(TAM1 * sizeof(int));
for(int k = 0; k < TAM2; k++)
if(k % 2 == 0) //posiciones pares
matriz1[k] = (int*)&matriz[k][k];
p = matriz1[1];
matriz1[1] = matriz1[3];
i = 1;
j = 0;
pro(i,j,matriz[i][j]);
return 0;
}
a. Suponga que luego de ejecutar la última sentencia el espacio libre del heap se termina,
considerando que el heap es de tamaño fijo, y se ejecuta el algoritmo de Recolección de
basura. Se pide mostrar paso a paso, cada una de las etapas involucradas en la ejecución
del algoritmo, graficando cómo cambian las estructuras de almacenamiento.
b. Ejecute el subprograma pro mostrando paso a paso la ejecución. Considere que x está
pasado por valor-resultado, y pasado por referencia y z por nombre.
Ejercicio 4.
Considere el siguiente código en un lenguaje hipotético que admite anidamientos:
Program Main;
float h = 9.1, j = 2.4;
int e = 4;
procedure sub2(int i, int g)
procedure sub3(int i)
begin
i = e + g;
end; // fin de sub3
begin
g = i * 2;
sub3(g);
end; // fin de sub2
procedure sub1(float h, int e, char i)
char j = ’a’;
int function sub4()
int g = 5, e = 10;
begin
sub2(g,g);
return e - g;
end; // fin de sub4
begin
sub2(e,5);
end; // fin de sub1
begin
sub1(e + 2.3,(int)h, ’d’);
end. // fin de Main