Ybadoo - Soluções em Software Livre
Tutoriais
Compiladores

Slides

(Sebesta, 2000) Considere o programa BIGSUB apresentado a seguir:

program BIGSUB;
var
GLOBAL : integer;
LIST : array[1..2] of integer;

procedure SUB(PARAM : integer);
begin
PARAM := 3;
GLOBAL := GLOBAL + 1;
PARAM := 5;
end;

begin
LIST[1] := 3;
LIST[2] := 1;
GLOBAL := 1;
SUB(LIST[GLOBAL]);
end.

Execute manualmente o novo programa sob as mesmas pressuposições e compare os valores resultantes do array LIST em BIGSUB depois do retorno de SUB:

  1. Parâmetros são passados por valor;
  2. Parâmetros são passados por referência;
  3. Parâmetros são passados por nome;
  4. Parâmetros são passados por valor-resultado.

(Sebesta, 2000) Considere o seguinte programa escrito na sintaxe C:

void troca(int a, int b)
{
int temp;

temp = a;
a = b;
b = temp;
}

void main()
{
int valor = 2, lista[5] = {1, 3, 5, 7, 9};

troca(valor, lista[0]);
troca(lista[0], lista[1]);
troca(valor, lista[valor]);
}

Para cada um dos métodos de passagem de parâmetros seguintes, quais são todos os valores das variáveis valor e lista depois de cada uma das três chamadas a troca?

  1. Parâmetros são passados por valor;
  2. Parâmetros são passados por referência;
  3. Parâmetros são passados por nome;
  4. Parâmetros são passados por valor-resultado.

(Price, 2005) Considere o seguinte programa escrito na sintaxe Pascal:

program main;
var
a, b : integer;

procedure p(x, y, z : integer);
begin
y := y + 1
z := z + x;
end;

begin
a := 2;
b := 3;
p(a + b, a, a);
write(a);
end.

Para cada um dos métodos de passagem de parâmetros a seguir, quais são os valores impressos pelo programa.

  1. Parâmetros são passados por valor;
  2. Parâmetros são passados por referência;
  3. Parâmetros são passados por nome;
  4. Parâmetros são passados por valor-resultado.

Considere o seguinte programa escrito na sintaxe C:

float sum(int i, int lo, int hi, float term)
{
float temp = 0.0;

for(i = lo; i <= hi; i++)
{
temp = temp + term;
}

return temp;
}

void main()
{
int k = 1;

printf("%f", sum(k, 1, 5, 1/k));
}

Para cada um dos métodos de passagem de parâmetros a seguir, quais são os valores impressos pelo programa.

  1. Parâmetros são passados por valor;
  2. Parâmetros são passados por referência;
  3. Parâmetros são passados por nome;
  4. Parâmetros são passados por valor-resultado.

Considere o seguinte programa escrito na sintaxe C:

void add(int x, int y)
{
for(int i = 0; i < 3; i++)
{
x = x + y;
}
}

void main()
{
int a = 3;

add(a, a + 2);

printf("%d", a);
}

Para cada um dos métodos de passagem de parâmetros a seguir, quais são os valores impressos pelo programa.

  1. Parâmetros são passados por valor;
  2. Parâmetros são passados por referência;
  3. Parâmetros são passados por nome;
  4. Parâmetros são passados por valor-resultado.

Considere o seguinte programa escrito na sintaxe C:

void next(int w, int x, int y, int z)
{
for(int i = 0; i < 3; i++)
{
w = y;
x = z;
}
}

void main()
{
int a = 1;
int b = 2;

next(b, a, b + a, b - a);

printf("%d", a);
printf("%d", b);
}

Para cada um dos métodos de passagem de parâmetros a seguir, quais são os valores impressos pelo programa.

  1. Parâmetros são passados por valor;
  2. Parâmetros são passados por referência;
  3. Parâmetros são passados por nome;
  4. Parâmetros são passados por valor-resultado.

Considere o seguinte programa escrito na sintaxe C:

void xpto(int a, int b, int c)
{
for(int i = 0; i < 3; i++)
{
a = i + c;
b = a * c;
}
}

void main()
{
int x = 2;
int y = 3;

xpto(x, y, x + y);

printf("%d", x);
printf("%d", y);
}

Para cada um dos métodos de passagem de parâmetros a seguir, quais são os valores impressos pelo programa.

  1. Parâmetros são passados por valor;
  2. Parâmetros são passados por referência;
  3. Parâmetros são passados por nome;
  4. Parâmetros são passados por valor-resultado.

Considere o seguinte programa escrito na sintaxe C:

void xpto(int a, int b, int c)
{
a = b + c;
b = b * c;
}

void main()
{
int x = 2;
int y = 3;

xpto(x, y, x + y);

printf("%d", x);
printf("%d", y);
}

Para cada um dos métodos de passagem de parâmetros a seguir, quais são os valores impressos pelo programa.

  1. Parâmetros são passados por valor;
  2. Parâmetros são passados por referência;
  3. Parâmetros são passados por nome;
  4. Parâmetros são passados por valor-resultado.

Considere o seguinte programa escrito na sintaxe C:

void serie(int i, int lo, int hi, int term, int result)
{
result = term;

for (i = lo; i < hi; i++)
{
result = result + term;
}
}

void main()
{
int k = 0;

int v[5] = {0, 0, 0, 0, 0};

serie(k, 1, 5, 2 * k + 1, v[k]);
}

Para cada um dos métodos de passagem de parâmetros listados a seguir, quais são os valores das variáveis k e v após a chamada ao método serie?

  1. Parâmetros são passados por valor;
  2. Parâmetros são passados por referência;
  3. Parâmetros são passados por nome;
  4. Parâmetros são passados por valor-resultado.

Considere o seguinte programa escrito na sintaxe C:

void func (int a, int b, int c, int d)
{
for (int j = a; j < b; j++)
{
c = c + d;
}
}

void main()
{
int i = 0;

int v[5] = {1, 2, 3, 4, 5};

func(i, 5, v[i], v[i] * 2);
}

Para cada um dos métodos de passagem de parâmetros listados a seguir, quais são os valores das variáveis i e v após a chamada ao método func?

  1. Parâmetros são passados por valor;
  2. Parâmetros são passados por referência;
  3. Parâmetros são passados por nome;
  4. Parâmetros são passados por valor-resultado.

Considere o seguinte programa escrito na sintaxe C:

void sub (int a, int b, int c)
{
a = a + 1;
b = a + 2;
a = a + 1;
c = b - 3;
}

void main()
{
int i = 0;

int v[5] = {1, 2, 3, 4, 5};

sub (i, v[i], v[4]);
}

Para cada um dos métodos de passagem de parâmetros listados a seguir, quais são os valores das variáveis i e v após a chamada ao método sub?

  1. Parâmetros são passados por valor;
  2. Parâmetros são passados por referência;
  3. Parâmetros são passados por nome;
  4. Parâmetros são passados por valor-resultado.

(Price, 2005) Considere o seguinte programa escrito na sintaxe C:

void xpto(int x, int y, int z)
{
x = y + 1;

z = x + y;
}

void main()
{
int a = 3;

int b = 5;

xpto(a, a + b, b);

printf("%d - %d", a, b);
}

Para cada um dos métodos de passagem de parâmetros a seguir, quais são os valores impressos pelo programa.

  1. Parâmetros são passados por valor;
  2. Parâmetros são passados por referência;
  3. Parâmetros são passados por nome;
  4. Parâmetros são passados por valor-resultado.

Considere o seguinte programa escrito na sintaxe C:

int sum(int i, int j, int t)
{
int temp = 0;

for(; i <= j; i++)
{
temp = temp + t;
}

return temp;
}

void main()
{
int k = 1;

printf("%d", sum(k, 5, k * k));
}

Para cada um dos métodos de passagem de parâmetros a seguir, quais são os valores impressos pelo programa.

  1. Parâmetros são passados por valor;
  2. Parâmetros são passados por referência;
  3. Parâmetros são passados por nome;
  4. Parâmetros são passados por valor-resultado.

Price, Ana Maria de Alencar. (2005). Implementação de Linguagens de Programação: compiladores. 3ª edição. Porto Alegre: Instituto de Informática da UFRGS: Sagra Luzzatto. 212 páginas.

Sebesta, Robert W. (2000). Conceitos de Linguagens de Programação. 4ª edição. Porto Alegre: Bookman. 624 páginas.