PUERTA | PUERTA-CS-2003 | Pregunta 73

El siguiente fragmento de programa está escrito en un lenguaje de programación que permite variables y no permite declaraciones anidadas de funciones.

global int i = 100, j = 5;
void P(x)
{
    int i = 10;
    print(x + 10);
    i = 200;
    j = 20;
    print(x);
}
main()
{
    P(i + j);
}

Si el lenguaje de programación utiliza un alcance estático y un mecanismo de paso de parámetros de llamada por necesidad, los valores impresos por el programa anterior son

(A) 115, 220
(B) 25, 220
(C) 25, 15
(D) 115, 105

Respuesta: (D)
Explicación: Antecedentes:
Call-by-need es un paradigma de lenguaje declarativo y funcional. A diferencia de la llamada por valor, solo evalúa el argumento dado a una función cuando es necesario y lo almacena en caché para su uso posterior. Call-by-name es un poco diferente de call-by-need en el sentido de que se evalúa de manera perezosa pero no almacena en caché el valor calculado. Por lo tanto, call-by-need requiere evaluar una vez si se está usando el argumento, call-by-value necesita evaluarlo sin importar si el argumento se usa o no, y call-by-name evalúa el mismo argumento varias veces como y cuando se usa.

Explicación :

El valor de la variable x no cambia en ningún momento en la función P(x). Por lo tanto, cualquiera que sea su valor cuando se llame a esta función, solo se utilizará en todas las sentencias de impresión. Claramente, el programa imprimirá 100+5+10, 100+5, es decir, 115, 105.

Esta solución es aportada por vineet purswani

Otra solución:

Aquí, en la función principal, la función P (i + j) se llama con valores de argumentos i = 100 y j = 5 (desde el alcance estático). Ahora, cuando se llama P (100 + 5), aquí en la función P, j es una variable libre y i es una variable local. Ahora eche un vistazo a los pasos en la función P:

paso_1: la variable local i se inicializa al valor 0.

paso_2: Aquí se imprime el valor de x + 10 y, dado que se llama por necesidad, el valor de x se calcula en 105 y se almacena en caché para su uso posterior. También se imprime 115 aquí.

paso_3: Ahora, se me asigna el valor 200.

paso_4: Aquí, j es una variable libre, por lo que su alcance se busca en el bloque externo inmediato hasta que encontramos la declaración de la variable j. El valor de la variable global j se cambia de 5 a 20.

paso_5: el valor x se imprime como 105. Ya que utiliza el valor almacenado en caché de x.

La salida sería similar al lenguaje de programación C, ya que C solo realiza un alcance estático .

Esta solución es aportada por Nirmal Bharadwaj
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 *