Como obter a diferença entre números usando dc?

2

Entrada:

> printf 1\n\n3\n
1
2
3

Saída desejada:

0
1
1

Digitando printf 1\n\n3\n | dc -e '-p' a saída é:

dc: stack empty
dc: stack empty
    
por ncomputers 28.01.2016 / 22:51

1 resposta

2

Você pode canalizar todo o conjunto de comandos diretamente para dc .

printf "1 2 3 - - p" | dc

Se você quiser subtrair uma pilha arbitrária, poderá usar uma macro.

printf "%s [-z1<r]srz1<rp" "<insert numbers here>" | dc

Então, por exemplo

printf "%s [-z1<r]srz1<rp" "100 5 2 1" | dc
96

A macro faz o seguinte:

  • [ Iniciar macro
  • - Subtrai os dois números principais e empurre de volta para a pilha
  • z1<r Pressione o tamanho da pilha para empilhar e 1, em seguida, compare LESSTHAN, se verdadeiro executar r macro
  • ]sr Fim da macro, armazenar no registro r
  • z1<r Verifique se a pilha contém elementos testando 1 < Stack Size
  • p Resultado da impressão.

  • '

por 28.01.2016 / 22:56

Tags