Un programma senza input è ridondante? [chiuso]

6

Ci sono programmi utili che non prendono input come: Input da tastiera dell'utente; un'interruzione da un orologio; dati da un altro server, ecc.

Un programma che ha calcolato / stampato dati predefiniti potrebbe essere trasformato in un file, giusto?

    
posta Tobi 11.03.2017 - 23:00
fonte

7 risposte

9

Un esempio in cui un tale programma può essere utile è quando il programma è molto più corto del suo output. Ciò significa che il programma è fondamentalmente una versione compressa del suo output.

Alcuni casi pratici d'uso:

  • File zip autoestraenti
  • Programmi il cui output è in realtà infinito , ad esempio yes(1) che genera ripetutamente "y". (Grazie a blrfl per averlo menzionato in un commento.)

Il termine teorico per questo concetto (quando l'output è finito) è complessità di Kolmogorov . Da Wikipedia :

Consider the following two strings of 32 lowercase letters and digits:

abababababababababababababababab

4c1j5b2p0cv4w1x8rx2y39umgw5q85s7

The first string has a short English-language description, namely "ab 16 times", which consists of 11 characters. The second one has no obvious simple description (using the same character set) other than writing down the string itself, which has 32 characters.

More formally, the complexity of a string is the length of the shortest possible description of the string in some fixed universal description language [...].

(Nota: questa lingua di descrizione universale fissa di solito è un linguaggio di programmazione completo di Turing.)

    
risposta data 12.03.2017 - 03:03
fonte
4

Un sacco di utility di sistema. I comandi shutdown, reboot, poweroff.

Ce ne sono altri che non riesco a pensare in questo momento, ne sono sicuro.

    
risposta data 12.03.2017 - 06:02
fonte
3

Sì, test unitari (almeno scritti in modo decente).

Modifica

Per essere meno disinvolto : Ci sono molte diverse configurazioni di test di unità, ma si riducono efficacemente a quanto segue, il codice base sotto test è trattato come una libreria e i test di unità sono essenzialmente uno grande programma che quando viene eseguito stampa qualcosa di simile a

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

Se i tuoi test unitari sono deterministici (che generalmente dovrebbero essere il debug dei test non deterministici è il peggiore), questa sarà solo una stringa costante.

Ora, una volta entrati nel mondo reale, il confine è davvero confuso qui, ma penso che il punto generale che un programma senza input sia un buon modo per imparare qualche altro set di codice sorgente.

    
risposta data 12.03.2017 - 03:13
fonte
1

Dipende da cosa intendi per ridondante. Ecco alcuni che potrei pensare in un paio di minuti:

  • Un programma che crea musica o arte

  • Un programma che balla, o invia istruzioni a un robot che balla

  • Un programma che modella una società virtuale e produce la sua probabile durata di vita in condizioni variabili

  • Un radiofaro

Qualcuna di queste cose è ridondante?

    
risposta data 11.03.2017 - 23:46
fonte
1

I programmi di questo tipo si presentano occasionalmente e sono utili per rispondere a una domanda specifica eseguendo alcuni calcoli. Ma una volta che il programma funziona correttamente e produce il risultato, non è più necessario eseguirlo.

Ad esempio, una volta ho scritto un programma del genere per produrre un insieme di matrici che convertono gli angoli di Eulero in una matrice ortogonale per tutti i possibili sistemi di angoli di Eulero. L'input è stato essenzialmente generato all'interno del programma (un insieme di permutazioni). Il programma ha moltiplicato simbolicamente 3 o 2 matrici insieme per ogni possibile sistema di angolo di Eulero e ha prodotto un file TeX con le matrici risultanti. Era meno lavoro e meno incline agli errori a scrivere il programma che a fare la matematica a mano. Non c'era alcun input dall'ambiente, però. Hai appena eseguito il comando e ha scritto il file. E una volta che ero soddisfatto che funzionasse correttamente, non l'ho più eseguito da allora.

    
risposta data 12.03.2017 - 02:58
fonte
1

Un programma che calcola la sequenza dei numeri primi.

    
risposta data 12.03.2017 - 09:15
fonte
0

Un programma che non richiede assolutamente alcun input da un utente o dall'ambiente darà un risultato molto prevedibile. Se il risultato è solo dati, è possibile memorizzarlo in un file invece di eseguire il programma più e più volte. Sarebbe una costante propagazione al più alto livello.

Tuttavia, prevedibile non significa identico. Un programma senza alcun input potrebbe ancora produrre risultati diversi ad ogni calcolo. L'esempio tipico è un'applicazione di simulazione che utilizza numeri casuali. Questo caso è comunque borderline, perché si potrebbe sostenere che il generatore di numeri casuali (o il suo seme) è una forma speciale di input dell'ambiente.

Tuttavia un programma può avere effetti collaterali. Ad esempio, potrebbe attivare e disattivare alcuni LED (o semafori). Oppure visualizza un conto alla rovescia in una finestra. Tali "effetti collaterali" potrebbero non essere sostituibili con un risultato precompilato in un file. Quindi no: anche senza alcun input un programma non è necessariamente "ridondante"!

    
risposta data 12.03.2017 - 02:04
fonte

Leggi altre domande sui tag