Geração de código postfixado

 
  1. Gere a sequência de instruções em notação pós-fixada, utilizando as menemónicas disponibilizadas pelas rotinas  Postfix, para as seguintes rotinas em  C:
    1. Cáculo do factorial de um número:
      int factorial(int n) {
        if (n < 3) return n;
        return n * factorial(n-1);
      }
      const int FACTORIAL = 5;
      int main() {
        int f, n = FACTORIAL;
      
        if (argc() > 1)
          n = atoi(argv(1));
      
        printf("%d! = %d\n", n, factorial(n));
        return 0;
      }
      
             
            
    2. Divisores de um número:
      int main(int argc, char *argv[])
      {
        int i = 2, n, primo = 1;
      
        if (argc < 2) {
          printf("Cálculo dos divisores.\nUSE: %s número\n", argv[0]);
          return 1;
        }
      
        n = atoi(argv[1]);
      
        while (i <= n/2) {
          if (n % i == 0) {
            printf("%d é divisível por %d.\n", n, i);
            primo = 0;
          }
          i = i + 1;
        }
      
        if (primo == 1)
          printf("%d é primo.\n", n);
        return 0;
      }
             
            
    3. Classificador de triângulos:
      int main(int argc, char *argv[])
      {
        int a, b, c;
      
        if (argc < 4) {
          fprintf(stderr, "USAGE: %s a b c\n", argv[0]);
          return 1; /* erro de argumentos */
        }
      
        if ( (a = atoi(argv[1])) < 0 ||
             (b = atoi(argv[2])) < 0 ||
             (c = atoi(argv[3])) < 0) {
          printf("Dimensões negativas\n");
        } else {
          if ( a >= b+c || b >= a+c || c >= a+b) {
            printf("Não é triângulo\n");
          } else {
            if (a == b && b == c) {
              printf("Equilátero\n");
            } else {
              if (a == b || b == c) {
                printf("Escaleno\n");
              } else {
                printf("Isósceles\n");
        } } } }
        return 0;
      }