Análise de fluxo e optimização

 

  1. Considere uma função, designada  raizes que recebe os valores dos três factores de uma equação do segundo grau :  a x2 +  b x +  c, e devolva o número de raízes.
    Gere a sequência de instruções em notação pós-fixada, utilize as menemónicas disponibilizadas pelas rotinas  Postfix, assumindo que os factores são números reais em precisão dupla.
  2. Traduza para código postfixado o seguinte programa em  C:
       int main()
        {
          int n = 45, i = 0, j = 1, *seg = &i;
    
          while (n-- > 0) {
            print(*seg = i + j);
            seg = (seg == &i) ? &j : &i;
          }
          return 0;
        }
       
      
  3. Considere a função em  C:
       int find(int tab[], int max, int val)
        {
          int i;
          for (i = 0; i < max; i++)
            if (tab[i] == val)
              break;
          return i;
        }
      
    1. Identifique as optimizações independentes da máquina possíveis.
    2. Traduza para código postfixado optimizado a função acima.
    3. Identifique os blocos básicos.
    4. Represente o diagrama de análise de fluxo resultante.

     

  4. Traduza para código postfixado optimizado o seguinte programa em  C:

     

       int main()
        {
          int a[10], i = 1;
          a[0] = 0;
          while (i < 10)
            a[i++] = a[i-1] + 2 * i - 1;
          return a[[9];
        }
      
    1. Identifique os blocos básicos.
    2. Que optimizações poderiam ser efectuadas.
    3. Represente o diagrama de análise de fluxo de controlo resultante.
    4. Represente o diagrama de análise de fluxo de dados do bloco do ciclo.

     

  5. Traduza para código postfixado o seguinte programa em  C:
    double pi(int i) {
      int i, n;
      double res = 0;
    
      if (i > 0) {
          for (n = 1; n < i; n++)
              res = res + pow(-1,n-1)/(2*n-1);
          return res * 4;
      }
      return 0;
    }