Ybadoo - Soluções em Software Livre
Turmas
1º Semestre de 2016

Desenvolva um programa em Simpletron Machine Language, que apresente a média de 2 * k, sendo k = 1, 2, ..., n. O número de termos será fornecido pelo usuário, devendo ser um valor inteiro e positivo. Por exemplo, caso o número de termos fornecido pelo usuário seja 5, o programa deverá apresentar como resposta o valor 6, ou seja, ((2 * 1) + (2 * 2) + (2 * 3) + (2 * 4) + (2 * 5)) / 5. Caso o usuário forneça um valor inválido para o número de termos, o programa deverá apresentar como resposta o valor -1.

Questão 02

A notação tradicional para expressões aritméticas, que representa uma operação binária na forma x + y, ou seja, com o operador entre seus dois operandos, é conhecida como notação infixa. Uma notação alternativa para esse tipo de expressão é a notação pré-fixa, na qual o operador é expresso antes de seus operandos. O atrativo da notação pré-fixa é que ela dispensa o uso de parênteses ao adotar a noção de pilha para a representação das expressões. Qual das seguintes expressões pré-fixas é equivalente à expressão infixa a = a v b & c v d & e sobre a gramática livre de contexto apresentada a seguir.

G = ({S, E, T, F, V}, {a, b, c, d, e, =, v, &, (, )}, P, S)
P = {SV=E
     ETvE | T
     TF&T | F
     F → (E) | V
     V → a | b | c | d | e}
  1. = v v & & a a b c d e
  2. = a v a v & b c & d e
  3. = v v a a & b c & d e
  4. = a v v a & b c & d e
  5. = a v v a & & b c d e

Questão 03

A notação tradicional para expressões aritméticas, que representa uma operação binária na forma x + y, ou seja, com o operador entre seus dois operandos, é conhecida como notação infixa. Uma notação alternativa para esse tipo de expressão é a notação pós-fixa, na qual o operador é expresso após seus operandos. O atrativo da notação pós-fixa é que ela dispensa o uso de parênteses ao adotar a noção de pilha para a representação das expressões. Qual das seguintes expressões pós-fixas é equivalente à expressão infixa a = a & b v c & d v e sobre a gramática livre de contexto apresentada a seguir.

G = ({S, E, T, F, V}, {a, b, c, d, e, =, v, &, (, )}, P, S)
P = {SV=E
     EEvT | T
     TT&F | F
     F → (E) | V
     V → a | b | c | d | e}
  1. a a b c & d & v e v =
  2. a a b c d & & e v v =
  3. a a b & c d & e v v =
  4. a a b c d e & & v v =
  5. a a b & c d & v e v =
Apresente o código de três endereços, otimizado pela aplicação do método de construção de um grafo acíclico dirigido para blocos básicos, da seguinte sequência de comandos:
X = X + Y * Z;
Y = Z * X + Y * Z;
Z = Z * X + Y * Z;

sobre a gramática livre do contexto apresentada a seguir:

G = ({A, E, T, F, V}, {x, y, z, =, +, -, *, /, (, )}, P, A)
P = {AV=E
     EE+T | E-T | T
     TT*F | T/F | F
     F → (E) | V
     V → x | y | z}

Questão 05

No programa abaixo, escrito na sintaxe do C, os parâmetros da função sum são passados por nome.

float 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));
}

O texto impresso na última linha do programa é:

  1. 5
  2. 15
  3. 25
  4. 55
  5. 125

Questão extra

O código objeto apresentado a seguir é equivalente a qual comando de atribuição?

LOAD      a, R0
LOAD      b, R1
COPY     R0, R2
ADD      R1, R0
MUL      R2, R0
SUB      R2, R1
MUL      R2, R1
ADD      R1, R0
SUB      R0, R2
STORE    R2, x
  1. x = a - ((a + b) * a + (b - a) * a)
  2. x = a - (a + b * a + b - a * a)
  3. x = a - (a + b) * a + (b - a) * a
  4. x = a - a + b * a + b - a * a
  5. x = a - (a + (b * a) + b - (a * a))