Um programa sem entrada é redundante?

Existem programas úteis que não aceitam entradas como: Entrada de teclado do usuário; uma interrupção de um relógio; dados de outro servidor etc.

Um programa que computou/imprimiu dados pré-definidos poderia ser transformado em um arquivo, certo?

6
Um interruptor de homem morto que não requer configuração. Bem, eu acho que isso tomaria um temporizador como entrada, embora você pudesse aproximar um temporizador sentando em um loop. Realmente, qualquer programa em que você conecte os dados de entrada.
adicionado o autor sgwill, fonte
Na sua forma mais simples, um rolo de dados. Eles geralmente têm entradas do usuário que determinam o que rolar, mas você certamente pode ter um que não, ou você pode ter um onde a entrada está na linha de comando e você pode chamá-lo com um arquivo em lote que forneceu entrada predefinida arquivo em lote se tornaria assim um programa com entrada zero.
adicionado o autor Sander Rijken, fonte
Como sobre um programa que calcula os dígitos do pi? Como cerca de um programa destinado a calcular a resposta para alguns problemas matemáticos, onde a "entrada" é embutida no próprio programa (durante a fase de programação ou compilação)?
adicionado o autor Ryan Cox, fonte
Então, é o único exemplo de aproximação matemática?
adicionado o autor cmrhema, fonte
O uso da palavra "útil" em detalhes de questão denota isso.
adicionado o autor cmrhema, fonte
" ... entradas de um usuário, ambiente, etc., como entrada de chave, ou a hora atual [ou um servidor]"
adicionado o autor cmrhema, fonte
Esta questão foi colocada em suspenso por completo.
adicionado o autor cmrhema, fonte
A resposta é sim (1) :-)
adicionado o autor Schroeder, fonte
Quando você diz "redundante", você realmente quer dizer "inútil"?
adicionado o autor whatsisname, fonte
Programas sem entrada podem ter efeitos colaterais úteis. Um programa pure sem entrada provavelmente poderia ser convertido em um arquivo simples.
adicionado o autor closeparen, fonte
Por "entrada", os dados do servidor também servem como entrada? Porque eu estou pensando em um aplicativo de informação pura que não precisa de interação do usuário, mas os dados são servidos pelo servidor para torná-lo mais gerenciável.
adicionado o autor Suraj, fonte

7 Respostas

Um exemplo em que tal programa pode ser útil é quando o programa é muito mais curto que sua saída. Isso significa que o programa é basicamente uma versão compactada de sua saída.

Alguns casos de uso prático:

  • Arquivos zip de extração automática
  • Programas cuja saída é realmente infinita </​​strong>, como yes (1) , que emite repetidamente "y". (Obrigado ao blrfl por mencionar isso em um comentário.)

The theoretical term for this concept (when the output is finite) is Kolmogorov complexity. From Wikipedia:

Considere as duas sequências de 32 letras minúsculas e dígitos seguintes:

  abababababababababababababababab

4c1j5b2p0cv4w1x8rx2y39umgw5q85s7
 
     

A primeira string tem uma descrição curta em inglês, a saber: "ab   16 vezes ", que consiste em 11 caracteres. O segundo não tem   descrição óbvia simples (usando o mesmo conjunto de caracteres) que não seja   escrevendo a própria string, que tem 32 caracteres.

     

Mais formalmente, a complexidade de uma string é o comprimento da   descrição mais curta possível da corda em algum universal fixo   linguagem de descrição [...].

(Nota: Esta linguagem de descrição universal fixa é geralmente alguma linguagem de programação completa.)

9
adicionado

Muitos utilitários do sistema. Os comandos shutdown, reboot, poweroff.

Há outros que não consigo pensar agora, tenho certeza.

4
adicionado

Sim, testes unitários (pelo menos os decentemente escritos).

Editar

To be less glib: There are a lot of different unit test setups but they effectively boil down to the following, the code base under test is treated as a library and your unit tests are essentially one big program that when run prints out something like

Test foo passed
Test bar passed
Test baz failed
     ...Details...
Test quux passed

Se seus testes unitários forem determinísticos (o que geralmente devem ser como testes não-determinísticos de depuração são os piores), isso será apenas uma string constante.

Agora, quando você entra no mundo real, a borda é realmente confusa aqui, mas acho que o ponto geral é que um programa sem entrada é uma boa maneira de aprender sobre algum outro conjunto de código-fonte.

3
adicionado
Estou confuso; um teste de unidade não testará o código que você escreveu, tornando-o uma entrada?
adicionado o autor cmrhema, fonte
Eu pensei que os testes de unidade tomam o código como uma entrada, para testar?
adicionado o autor cmrhema, fonte
@Tobi bem, não ... Testes de unidade não leem a implementação como uma entrada ou recurso ambiental, eles incluem a implementação durante a compilação. > Para gerar resultados bonitos e interativos, o conjunto de testes geralmente interage com o ambiente (como um IDE ou um executor de testes). Mas isso é opcional, na verdade. Poderia ser facilmente um binário que é executado por conta própria e descarrega os resultados para o padrão. E, de fato, eu mesmo virei alguns corredores de teste dessa natureza ...
adicionado o autor svidgen, fonte
@Tobi, esperamos que a edição mostre a questão.
adicionado o autor walpen, fonte

Um programa que calcula a seqüência de números primos.

1
adicionado

Depende do que você quer dizer com redundante. Aqui estão alguns que eu poderia pensar em alguns minutos:

  • Um programa que cria música ou arte

  • Um programa que dança ou envia instruções para um robô que dança

  • Um programa que modela uma sociedade virtual e produz sua provável duração em condições variadas

  • Um sinal de rádio

Alguma dessas coisas é redundante?

1
adicionado
# 1: O que significa "cria música ou arte"? Aleatoriamente = Semeado por uma entrada # 2: Isso seria uma entrada em um interpretador que controla o movimento robótico. # 3: Uma sociedade inserida ou gerada aleatoriamente? Este último seria semeado # 4: O que você quer dizer com "radio beacon"? ..
adicionado o autor cmrhema, fonte
Todas essas coisas terão entrada, mesmo que seja proveniente de uma semente aleatória.
adicionado o autor RubberDuck, fonte
Incorreta; nenhum dos itens que eu listei requer em colocar, como em algo que atravessa de fora do sistema para dentro do sistema. E eu não sei de onde você tirou a idéia de que a aleatoriedade é um requisito para qualquer coisa.
adicionado o autor John Wu, fonte
# 1 Quero dizer, literalmente, compõe uma peça musical ou desenha uma imagem. Não precisa ser uma música muito boa ou uma imagem muito interessante. Nem a aleatoriedade nem a originalidade são um requisito. # 2. Não, seria um out colocado em um intérprete que controla o movimento robótico. # 3. Nem; uma sociedade que se determina, começando com uma condição inicial básica e depois evoluindo. # 4. Uma transmissão contínua no espectro eletromagnético, modulada pela saída do nosso programa, potencialmente de acordo com um padrão predeterminado.
adicionado o autor John Wu, fonte

Programas como esse surgem ocasionalmente e são úteis para responder a uma pergunta específica, realizando alguns cálculos. Mas uma vez que o programa funcione corretamente e produza o resultado, não há mais necessidade de executá-lo.

Como exemplo, uma vez eu escrevi esse programa para produzir um conjunto de matrizes que convertem ângulos de Euler em uma matriz ortogonal para todos os possíveis sistemas de ângulo de Euler. A entrada foi essencialmente gerada dentro do programa (um conjunto de permutações). O programa simbolicamente multiplicou 3 ou 2 matrizes para cada possível sistema de ângulo Euler e produziu um arquivo TeX com as matrizes resultantes. Era menos trabalhoso e menos sujeito a erros para escrever o programa do que fazer as contas manualmente. Não houve entrada do ambiente, no entanto. Você acabou de executar o comando e escreveu o arquivo. E uma vez que eu estava satisfeito que estava funcionando corretamente, eu não corri de novo desde então.

1
adicionado

Um programa que não recebe absolutamente nenhuma informação de um usuário ou do ambiente fornecerá um resultado muito previsível. Se o resultado for apenas dados, você poderá armazená-lo em um arquivo, em vez de executar o programa novamente e novamente. Seria propagação constante ao mais alto nível.

No entanto, previsível não significa idêntico. Um programa sem qualquer entrada ainda poderia produzir resultados diferentes em cada cálculo. O exemplo típico é um aplicativo de simulação usando números aleatórios. Este caso é, no entanto, limítrofe, porque você poderia argumentar que o gerador de números aleatórios (ou sua semente) é uma forma especial de entrada do ambiente.

No entanto, um programa pode ter efeitos colaterais. Poderia, por exemplo, ligar e desligar alguns leds (ou semáforos). Ou exiba uma contagem regressiva em uma janela. Tais "efeitos colaterais" podem não ser substituíveis por um resultado pré-computado em um arquivo. Portanto, não: mesmo sem qualquer entrada, um programa não é necessariamente "redundante"!

0
adicionado
Caramba, estou pensando que todos aqui falharam na teoria dos sistemas básicos. Você pode ter uma saída determinista (não aleatória) que não é previsível. C.f. teoria do caos .
adicionado o autor John Wu, fonte
Aqui está o exemplo de livro didático. Nenhum sistema externo é necessário. var x = 0,002; para (int t = 0; t Veja se você pode prever x para um dado t.
adicionado o autor John Wu, fonte
Então você nunca ouviu a mesma música duas vezes?
adicionado o autor John Wu, fonte
@JohnWu "altamente dependente das condições iniciais" significa obter algum tipo de entradas do ambiente (por exemplo, estado de variáveis ​​não inicializadas). Se o programa fizer parte de um sistema dinâmico maior, ele deverá se comunicar com outros programas para gerar resultados caóticos: o IPC também é uma forma de entrada.
adicionado o autor Christophe, fonte
@ JohnWu desculpe se isso não está claro na minha resposta: o meu ponto é que no mesmo computador, este tipo de computação irá produzir o mesmo resultado em cada execução. Então eu posso executá-lo um, gravar os resultados e usar os resultados gravados depois (isto é como eu interpretei o ambíguo "redundante" na questão). É claro que se a intenção é criar impaciência e entusiasmo para um usuário que olha os resultados sobre se o resultado convergirá ou não, isso não pode ser reproduzido, e é isso que eu quis dizer com "efeitos colaterais". Se o loop nunca termina, permanecemos na parte do efeito colateral da minha resposta
adicionado o autor Christophe, fonte
@JohnWu sim eu faço :-) eu amo o efeito colateral em minhas emoções. E pessoalmente, eu nunca guardo dados que eu possa recalcular com mais precisão em um hardware melhor. Eu apenas respondo a questão teórica. E compartilho sobre a frustração que tive com meus primeiros programas de simulação há 30 anos, quando descobri que o aleatório prometido era apenas pseudo-aleatório, e que os programas precisavam de alguma informação externa para fazer coisas que poderiam me surpreender. E honestamente, você usa muitos programas interessantes que não recebem alguma entrada, evento ou feedback de seu ambiente ;-)
adicionado o autor Christophe, fonte