Ist ein eingangsloses Programm überflüssig?

Gibt es nützliche Programme, die keine Eingaben machen wie: Tastatureingabe eines Benutzers; eine Unterbrechung von einer Uhr; Daten von einem anderen Server usw.

Ein Programm, das vordefinierte Daten berechnet/ausgedruckt hat, könnte in eine Datei umgewandelt werden, oder?

6
Ein Totmannschalter, der nicht konfiguriert werden muss. Nun, ich denke, das würde einen Timer als Eingabe benötigen, obwohl Sie einen Timer approximieren könnten, indem Sie in einer Schleife sitzen. Wirklich jedes Programm, bei dem Sie die Eingabedaten fest verdrahten.
hinzugefügt der Autor sgwill, Quelle
In seiner einfachsten Form eine Würfelrolle. Sie verfügen normalerweise über Benutzereingaben, die bestimmen, was gerollt werden soll. Sie können jedoch eine haben, bei der sich die Eingabe in der Befehlszeile befindet, und Sie können sie mit einer Batch-Datei aufrufen, die vordefinierte Eingabe bereitstellt - die Batch-Datei würde somit zu einem Programm mit Null-Eingabe werden.
hinzugefügt der Autor Sander Rijken, Quelle
Wie wäre es mit einem Programm, das die Ziffern von Pi berechnet? Wie wäre es mit einem Programm, das die Antwort für einige mathematische Probleme berechnen soll, bei denen die "Eingabe" im Programm selbst fest programmiert ist (während der Programmier- oder Kompilierungsphase)?
hinzugefügt der Autor Ryan Cox, Quelle
Ist das einzige Beispiel für eine mathematische Annäherung?
hinzugefügt der Autor cmrhema, Quelle
Die Verwendung des Wortes "nützlich" in den Details der Frage kennzeichnet dies.
hinzugefügt der Autor cmrhema, Quelle
" ... Eingaben von einem Benutzer, einer Umgebung usw., wie z. B. Tasteneingaben oder der aktuellen Uhrzeit [oder einem Server]"
hinzugefügt der Autor cmrhema, Quelle
Diese Frage wurde zu Recht in die Warteschleife gestellt.
hinzugefügt der Autor cmrhema, Quelle
Die Antwort lautet yes (1) :-)
hinzugefügt der Autor Schroeder, Quelle
Wenn Sie "überflüssig" sagen, meinen Sie wirklich "nutzlos"?
hinzugefügt der Autor whatsisname, Quelle
Programme ohne Eingabe können nützliche Nebenwirkungen haben. Ein inputless pure -Programm könnte wahrscheinlich in eine flache Datei umgewandelt werden.
hinzugefügt der Autor closeparen, Quelle
Werden durch "Eingabe" auch die Daten vom Server als Eingabe verwendet? Ich denke an eine reine Informations-App, die keine Benutzerinteraktion erfordert, aber die Daten werden vom Server bereitgestellt, um sie leichter handhabbar zu machen.
hinzugefügt der Autor Suraj, Quelle

7 Antworten

Ein Beispiel, wo ein solches Programm nützlich sein kann, ist, wenn das Programm viel kürzer als seine Ausgabe ist. Das bedeutet, dass das Programm grundsätzlich eine komprimierte Version seiner Ausgabe ist.

Einige praktische Anwendungsfälle:

  • Selbstentpackende ZIP-Dateien
  • Programme, deren Ausgabe tatsächlich unendlich ist, wie yes (1) , wobei wiederholt "y" ausgegeben wird. (Danke an blrfl, dass Sie dies in einem Kommentar erwähnt haben.)

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

Beachten Sie die folgenden zwei Zeichenfolgen aus 32 Kleinbuchstaben und Ziffern:

  ababababababababababababababababababababab

4c1j5b2p0cv4w1x8rx2y39umgw5q85s7
 
     

Die erste Zeichenfolge enthält eine kurze Beschreibung in Englisch, nämlich "ab   16 mal ", bestehend aus 11 Zeichen. Das zweite hat keine   naheliegende einfache Beschreibung (mit demselben Zeichensatz) mit Ausnahme von   Schreiben Sie die Zeichenfolge selbst auf, die aus 32 Zeichen besteht.

     

Formal ist die Komplexität einer Zeichenfolge die Länge der Zeichenfolge   kürzeste mögliche Beschreibung der Zeichenfolge in einem festen Universal   Beschreibungssprache [...].

(Hinweis: Bei dieser festen universellen Beschreibungssprache handelt es sich normalerweise um eine Turing-vollständige Programmiersprache.)

9
hinzugefügt

Viele Systemprogramme. Die Befehle zum Herunterfahren, Neustart und Ausschalten.

Es gibt andere, an die ich momentan nicht denken kann, da bin ich mir sicher.

4
hinzugefügt

Ja, Unit-Tests (zumindest anständig geschriebene).

Bearbeiten

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

Wenn Ihre Komponententests deterministisch sind (was im Allgemeinen das Debuggen nichtdeterministischer Tests der schlechteste ist), ist dies nur eine konstante Zeichenfolge.

Sobald Sie sich in der realen Welt befinden, ist die Grenze hier wirklich unscharf, aber ich denke, der generelle Punkt, dass ein Programm ohne Eingabe ein guter Weg ist, etwas über andere Quellcodes zu lernen.

3
hinzugefügt
Ich bin verwirrt; wird ein Komponententest nicht den von Ihnen geschriebenen Code testen und eine Eingabe machen?
hinzugefügt der Autor cmrhema, Quelle
Ich dachte, Unit-Tests benötigen Code als Eingabe, um zu testen?
hinzugefügt der Autor cmrhema, Quelle
@Tobi Nun, nein ... Unit-Tests lesen die Implementierung nicht wie eine Eingabe- oder Umgebungsressource, sondern sie enthalten die Implementierung während der Kompilierung. Um schöne, interaktive Ergebnisse zu generieren, interagiert eine Testsuite normalerweise mit der Umgebung (z. B. einer IDE oder einem Testläufer). Aber das ist wirklich optional. Es könnte genauso einfach eine Binärdatei sein, die eigenständig ausgeführt wird und die Ergebnisse auf Standard ausdrückt. Und tatsächlich habe ich selbst einige Testläufer dieser Art Cowboy gemacht ...
hinzugefügt der Autor svidgen, Quelle
@Tobi, hoffentlich bringt das Edit den Punkt heraus.
hinzugefügt der Autor walpen, Quelle

Ein Programm, das die Folge von Primzahlen berechnet.

1
hinzugefügt

Kommt drauf an, was du unter redundant meinst. Hier sind ein paar, an die ich in wenigen Minuten denken könnte:

  • Ein Programm, das Musik oder Kunst erstellt.

  • Ein Programm, das tanzt oder Anweisungen an einen Roboter sendet, der tanzt

  • Ein Programm, das eine virtuelle Gesellschaft modelliert und ihre voraussichtliche Lebensdauer unter verschiedenen Bedingungen ausgibt.

  • Ein Funkfeuer

Ist eines dieser Dinge überflüssig?

1
hinzugefügt
# 1: Was bedeutet "schafft Musik oder Kunst"? Randomly = Gesät von einer Eingabe # 2: Dies wäre eine Eingabe in einen Interpreter, der die Roboterbewegung steuert. # 3: Eine eingetragene oder eine zufällig erzeugte Gesellschaft? Letzteres wäre Nr. 4 gesetzt: Was meinen Sie mit "Funkfeuer"? ..
hinzugefügt der Autor cmrhema, Quelle
Alle diese Dinge werden Input haben, auch wenn es sich um einen zufälligen Samen handelt.
hinzugefügt der Autor RubberDuck, Quelle
Falsch; Keines der aufgeführten Elemente erfordert in etwas, das von außerhalb des Systems in das Innere des Systems verschoben wird. Und ich weiß nicht, wo Sie auf die Idee kamen, dass Zufälligkeit eine Voraussetzung dafür ist.
hinzugefügt der Autor John Wu, Quelle
# 1: Ich meine, buchstäblich komponiert ein Musikstück oder zeichnet ein Bild. Es muss keine sehr gute Musik oder ein sehr interessantes Bild sein. Weder Zufälligkeit noch Originalität sind Voraussetzung. # 2. Nein, es wäre ein out -Eintrag eines Interpreters, der die Roboterbewegung steuert. #3. Weder; eine Gesellschaft, die sich selbst bestimmt, beginnend mit einer Grundvoraussetzung, dann weiterentwickelt. # 4. Eine kontinuierliche Übertragung im elektromagnetischen Spektrum, moduliert durch die Ausgabe unseres Programms, möglicherweise gemäß einem vorbestimmten Muster.
hinzugefügt der Autor John Wu, Quelle

Programme wie dieses entstehen gelegentlich und sind nützlich, um bestimmte Fragen durch Berechnungen zu beantworten. Sobald das Programm jedoch ordnungsgemäß funktioniert und das Ergebnis liefert, müssen Sie es nicht mehr ausführen.

Als Beispiel habe ich einmal ein solches Programm geschrieben, um einen Satz von Matrizen zu erstellen, die die Euler-Winkel für alle möglichen Euler-Winkelsysteme in eine orthogonale Matrix umwandeln. Die Eingabe wurde im Wesentlichen innerhalb des Programms generiert (eine Reihe von Permutationen). Das Programm multiplizierte symbolisch 3 oder 2 Matrizen für jedes mögliche Euler-Winkelsystem und erzeugte eine TeX-Datei mit den resultierenden Matrizen. Es war weniger Arbeit und weniger fehleranfällig, das Programm zu schreiben, als die Mathematik von Hand zu machen. Es gab jedoch keinen Input aus der Umgebung. Sie haben gerade den Befehl ausgeführt und die Datei geschrieben. Und nachdem ich überzeugt war, dass es richtig funktioniert hat, habe ich es seitdem nicht mehr ausgeführt.

1
hinzugefügt

Ein Programm, das keinerlei Eingaben eines Benutzers oder der Umgebung erfordert, führt zu einem sehr vorhersehbaren Ergebnis. Wenn das Ergebnis nur Daten ist, können Sie sie in einer Datei speichern, anstatt das Programm immer wieder auszuführen. Es wäre eine konstante Ausbreitung auf die höchste Ebene.

Vorhersehbar bedeutet jedoch nicht identisch. Ein Programm ohne Eingabe könnte bei jeder Berechnung andere Ergebnisse liefern. Das typische Beispiel ist eine Simulationsanwendung mit Zufallszahlen. Dieser Fall ist jedoch grenzwertig, weil Sie argumentieren könnten, dass der Zufallszahlengenerator (oder sein Startwert) eine besondere Form der Eingabe der Umgebung ist.

Ein Programm kann jedoch Nebenwirkungen haben. Es könnte zum Beispiel einige LEDs (oder Ampeln) ein- und ausschalten. Oder zeigen Sie einen Countdown in einem Fenster an. Solche "Nebenwirkungen" sind möglicherweise nicht durch ein vorberechnetes Ergebnis in einer Datei zu ersetzen. Also nein: Auch ohne Eingabe ist ein Programm nicht unbedingt "redundant"!

0
hinzugefügt
Ja, ich denke jeder hier hat die grundlegende Systemtheorie versagt. Sie können eine deterministische (nicht zufällige) Ausgabe haben, die nicht vorhersagbar ist. Cf. Chaos-Theorie .
hinzugefügt der Autor John Wu, Quelle
Hier ist das Lehrbuchbeispiel. Keine externen Systeme erforderlich. var x = 0,002; for (int t = 0; t Prüfen Sie, ob Sie x für ein bestimmtes t vorhersagen können.
hinzugefügt der Autor John Wu, Quelle
Sie haben also noch nie ein und dasselbe Lied gehört?
hinzugefügt der Autor John Wu, Quelle
@JohnWu "stark von den Anfangsbedingungen abhängig" bedeutet, von der Umgebung bestimmte Eingaben zu erhalten (z. B. Zustand der nicht initialisierten Variablen). Wenn das Programm Teil eines größeren dynamischen Systems ist, müsste es mit anderen Programmen kommunizieren, um chaotische Ergebnisse zu erzeugen: IPC sind auch eine Form der Eingabe.
hinzugefügt der Autor Christophe, Quelle
@JohnWu Entschuldigung, wenn dies in meiner Antwort nicht klar ist: Mein Punkt ist, dass auf demselben Computer diese Art von Berechnung bei jeder Ausführung das gleiche Ergebnis liefert. Ich kann es also ausführen, die Ergebnisse aufzeichnen und die aufgezeichneten Ergebnisse danach verwenden (so interpretierte ich das mehrdeutige "überflüssig" in der Frage). Wenn die Absicht besteht, Ungeduld und Begeisterung für einen Benutzer zu erzeugen, der die Ergebnisse untersucht, ob das Ergebnis konvergieren wird oder nicht, kann dies nicht reproduziert werden, und das meinte ich mit "Nebenwirkungen". Wenn die Schleife nie endet, bleiben wir im Nebeneffekt meiner Antwort
hinzugefügt der Autor Christophe, Quelle
@JohnWu ja ich tue :-) Ich liebe den Nebeneffekt auf meine Emotionen. Und persönlich habe ich nie Daten, die ich auf einer besseren Hardware genauer berechnen könnte. Ich beantworte nur die theoretische Frage. Und ich erzähle von der Frustration, die ich vor 30 Jahren mit meinen ersten Simulationsprogrammen hatte, als ich herausfand, dass der versprochene Zufall nur Pseudo-Zufall war und dass Programme externen Input benötigten, um Dinge zu tun, die mich überraschen könnten. Und ehrlich, verwenden Sie viele interessante Programme, die keine Eingaben, Ereignisse oder Rückmeldungen aus ihrer Umgebung erhalten ;-)
hinzugefügt der Autor Christophe, Quelle