2
•• Au8erst fruchtbar Hartwig Thomas Ehrlos sei, wer Schlechtes dabei denkt. In diesem Beitrag geht es um eine recht bekannte Ubungsaufgabe, deren Losung selten in der Literatur auftaucht. Fur eine laue Stunde,in der man gerade einmal nicht mit real existierenden Softwareproblemen kampft (und auch sonst nichts Besseres zu tun hat), ist ein kleines Denkspiel auf jeden Fall bestens geeignet. Gesucht ist ein Programm, das sich seiber im Quellcode aus- gibt. Das Programm soli da- zu als ASCII-File vorliegen, dessen Kompilat (Turbo-Pas- cal >= 4.0) genaudenDatei- inhalt del' Quelle auf den Bild- schirm schreibt. Die Aufgabe gilt als gelost, wenn zwei iden- tische Dateien entstehen, so- fern man die Bildschirmausga- be in eine zweite Datei umlei- tet. Selbstverstandlich gilt jede 'billige Losung' als boses Foul (zum Beispiel Quelldatei als vorhanden annehmen, sie ein- lesen und wieder ausgeben). Bevor Sie zur Losung wei- terblattern odeI' die Uberlegun- gendazu lesen, diirfen Sie ruhig einmal ein paar Minuten Bedenkzeit einlegen und ei- nen eigenen Weg suchen. Um Ihnen die Entscheidung leichter zu machen, habe ich die Losung geringfUgig ver- schliisselt. Denkpause Nun gut. Die gestellte Aufgabe verwirrt anfangs hauptsachlich durch ihreUnbestimmtheit. Sie scheint nicht wesentlich von der gewahlten Programmier- sprache abzuhangen. Gesucht ist also erst einmal eine ab- strakte Programmiersprache, in del' die Aufgabe garantiert los- bar ist. Eine solche Sprache muG mindestens einenBefehl kennen, del' ein Argument auf dem Bjjdschirm ausgibt. Wenn aile Ausgabebefehle Ihre Argu- mente nul' hochstens einmal ausgeben, ist die Aufgabe of- fensichtlich nicht IOsbar. Die minimale Programmier- sprache, die diesem Anspruch geniigt, besitzt einen einzigen Befehl, del' das nachfolgende Zeichen zweimal auf den Bild- schirm schreibt. Del' Quellcode fUr diesen Befehl sei A;eine weitere Vorgabe, daG die Pro- grammiersprache keine Garnie- rungen fUr Beginn und Ende verlangt. In diesel' Sprache lau- tet die Losung: AA Offenbar schreibt dieses Pro- gramm seinen eigenen Quell- text auf den Bildschirm, da der Befehl A das darauffolgende A zweimal ausgibt. Konkretisierung In Pascal und ahnlichen Spra- chen muG man einerseits Be- zeichner als Zeichenketten und andererseits am Anfang und Endeeine Minimalgarnierung in Kauf nehmen. Um diesel' Tatsache Rechnung zu tragen, modifiziere ich die obige Pro- grammiersprache etwas. Sie hat jetzt folgende Syntax: 'A' betrachtet die zwei folgen- den Symbole als Argumente; 'B' hat keine Argumente und die Semantik: 'A'startet das Programm und gibt jedes derbeiden Argumen- tezweimal auf dem Bildschirm aus; 'B' beendet das Programm ord- nungsgemaG. Die Problemlosung in diesel'er- weiterten Sprache lautet AABB. Nach diesel' Grundidee ent- wickelt mandann das Pascal- Programm, das die Aufgabe lOst. Die Probe fUhrt eine Batch-Datei durch: Sie kompi- liert das Original, fiihrt es mit Redirection aus, kompiliert das Ergebnis, startet es mit erneuter Ausgabeumleitung und ver- gleicht die beiden ASCII-Files (siehe Kasten). Del'Zusatz- schritt mit doppelterKompilati- on ist iibrigens nul' notig, wenn del' verwendete Editor uner- wiinschte Returns, Linefeeds odeI' Ctrl-Zs einfiigt odeI'an- hangt. Das Losungsprogramm lehnt sichrecht nah an das Schema AABB an. Damit keine Schwierigkeiten mit Zeilenen- den innerhalb del' Argumente auftreten, fehlt del' in Standard- Pascal notige Header 'pro- gram(input,output);', wiees in Turbo-Pascal ja erlaubt ist. DaherpaGt auch das ganzeA auf eine Zeile (diefLir den Compiler hochstens 129 Zei- chen lang sein darf), was eine zusatzliche Aufblahung durch Mehrfachzeilenbehand- lungeinspart. Trotz ihrer Plausibilitat und einem Anschein del' Natiirlich- keit besteht die oben angefiihrte Herleitung denletztenTest auf Perfektion nicht. Die Notwen- digkeit derhergeleiteten Struk- tur del' Losung ist nicht gege- ben. Die Frage, ob ein selbstre- produzierendes Programm am doppelten Auftauchen seiner Teilezu erkennen ist, bleibt offen. Die kleine Programmieraufgabe ist sicherlich nur Spielerei. Die Eigenschaft del' Selbstrepro- duktion hat unterdem Namen 'Computerviren' erst einmal einen schlechten Ruf erhalten. 1m anbrechenden Zeitalterdel' Computernetze schiiren zum Teil dieselben EDV-Manager die Angst VOl' dem Virus, die VOl' nicht allzu langeI' Zeit auf ihrem Time-Sharing-Main- frame aile Benutzern ihre Macht unterwarfen und ihnen ihre Aufsicht zumuteten. Del' PC ohne Festplatte ist dieange- priesene Losung, und Daten-

WRITEME Turbo Pascal Version 6.0 Copyright (c) 1983,90 Borland

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: WRITEME Turbo Pascal Version 6.0 Copyright (c) 1983,90 Borland

••

Au8erstfruchtbarHartwig ThomasEhrlos sei, wer Schlechtes dabei denkt. In diesemBeitrag geht es um eine recht bekannte Ubungsaufgabe,deren Losung selten in der Literatur auftaucht. Fur einelaue Stunde, in der man gerade einmal nicht mit realexistierenden Softwareproblemen kampft (und auchsonst nichts Besseres zu tun hat), ist ein kleinesDenkspiel auf jeden Fall bestens geeignet.

Gesucht ist ein Programm, dassich seiber im Quellcode aus-gibt. Das Programm soli da-zu als ASCII-File vorliegen,dessen Kompilat (Turbo-Pas-cal >= 4.0) genau den Datei-inhalt del' Quelle auf den Bild-schirm schreibt. Die Aufgabegilt als gelost, wenn zwei iden-tische Dateien entstehen, so-fern man die Bildschirmausga-be in eine zweite Datei umlei-tet. Selbstverstandlich gilt jede

'billige Losung' als boses Foul(zum Beispiel Quelldatei alsvorhanden annehmen, sie ein-lesen und wieder ausgeben).

Bevor Sie zur Losung wei-terblattern odeI' die Uberlegun-gen dazu lesen, diirfen Sieruhig einmal ein paar MinutenBedenkzeit einlegen und ei-nen eigenen Weg suchen.Um Ihnen die Entscheidungleichter zu machen, habe ich

die Losung geringfUgig ver-schliisselt.

DenkpauseNun gut. Die gestellte Aufgabeverwirrt anfangs hauptsachlichdurch ihre Unbestimmtheit. Siescheint nicht wesentlich vonder gewahlten Programmier-sprache abzuhangen. Gesuchtist also erst einmal eine ab-strakte Programmiersprache, indel' die Aufgabe garantiert los-bar ist. Eine solche SprachemuG mindestens einen Befehlkennen, del' ein Argument aufdem Bjjdschirm ausgibt. Wennaile Ausgabebefehle Ihre Argu-mente nul' hochstens einmalausgeben, ist die Aufgabe of-fensichtlich nicht IOsbar.Die minimale Programmier-sprache, die diesem Anspruchgeniigt, besitzt einen einzigenBefehl, del' das nachfolgendeZeichen zweimal auf den Bild-schirm schreibt. Del' QuellcodefUr diesen Befehl sei A; eineweitere Vorgabe, daG die Pro-grammiersprache keine Garnie-rungen fUr Beginn und Endeverlangt. In diesel' Sprache lau-tet die Losung:AAOffen bar schreibt dieses Pro-gramm seinen eigenen Quell-text auf den Bildschirm, da derBefehl A das darauffolgende Azweimal ausgibt.

KonkretisierungIn Pascal und ahnlichen Spra-chen muG man einerseits Be-zeichner als Zeichenketten undandererseits am Anfang undEnde eine Minimalgarnierungin Kauf nehmen. Um diesel'Tatsache Rechnung zu tragen,modifiziere ich die obige Pro-grammiersprache etwas. Sie hatjetzt folgende Syntax:'A' betrachtet die zwei folgen-den Symbole als Argumente;'B' hat keine Argumenteund die Semantik:'A' startet das Programm undgibt jedes der beiden Argumen-te zweimal auf dem Bildschirmaus;'B' beendet das Programm ord-nungsgemaG.Die Problemlosung in diesel' er-weiterten Sprache lautet

AABB.

Nach diesel' Grundidee ent-wickelt man dann das Pascal-Programm, das die AufgabelOst. Die Probe fUhrt eineBatch-Datei durch: Sie kompi-liert das Original, fiihrt es mitRedirection aus, kompiliert dasErgebnis, startet es mit erneuterAusgabeumleitung und ver-gleicht die beiden ASCII-Files(siehe Kasten). Del' Zusatz-schritt mit doppelter Kompilati-on ist iibrigens nul' notig, wenndel' verwendete Editor uner-wiinschte Returns, LinefeedsodeI' Ctrl-Zs einfiigt odeI' an-hangt.

Das Losungsprogramm lehntsich recht nah an das SchemaAABB an. Damit keineSchwierigkeiten mit Zeilenen-den innerhalb del' Argumenteauftreten, fehlt del' in Standard-Pascal notige Header 'pro-gram(input,output);', wie es inTurbo-Pascal ja erlaubt ist.Daher paGt auch das ganze Aauf eine Zeile (die fLir denCompiler hochstens 129 Zei-chen lang sein darf), waseine zusatzliche Aufblahungdurch Mehrfachzeilenbehand-lung einspart.Trotz ihrer Plausibilitat undeinem Anschein del' Natiirlich-keit besteht die oben angefiihrteHerleitung den letzten Test aufPerfektion nicht. Die Notwen-digkeit der hergeleiteten Struk-tur del' Losung ist nicht gege-ben. Die Frage, ob ein selbstre-produzierendes Programm amdoppelten Auftauchen seinerTeile zu erkennen ist, bleibtoffen.

Die kleine Programmieraufgabeist sicherlich nur Spielerei. DieEigenschaft del' Selbstrepro-duktion hat unter dem Namen'Computerviren' erst einmaleinen schlechten Ruf erhalten.1m anbrechenden Zeitalter del'Computernetze schiiren zumTeil dieselben EDV-Managerdie Angst VOl' dem Virus, dieVOl' nicht allzu langeI' Zeitauf ihrem Time-Sharing-Main-frame aile Benutzern ihreMacht unterwarfen und ihnenihre Aufsicht zumuteten. Del'PC ohne Festplatte ist die ange-priesene Losung, und Daten-

Page 2: WRITEME Turbo Pascal Version 6.0 Copyright (c) 1983,90 Borland

0: \ TEXTE\03\WRITEMED>writeme >temp. pas

0: \ TEXTE\03\WRITEMEO>n: \pc \ sprachen \ turbo \ tp 60 \ t pc temp. pasTurbo Pascal Version 6.0 Copyright (c) 1983,90 BorlandInternationalTEMP.PAS (4)4 lines, 0.3 seconds, 2104 bytes code, 656 bytes data.

0: \TEXTE\03\WRITEMED>fc temp. pas writeme. pasfe: Keine Unt~rschiede festgestellt

So ungefahr sollte Ihr Testlauf aussehen, wenn Sie dieAufgabe gelost haben. Statt 'fe' mOssen Sie je nach DOS-Version unter Umstanden 'comp' verwenden.

qspdfevsf 1 s) t-u; tus joh*< 1 cfh jo 1 xs jufmo It *< 1 xs jufmo 1$4: -t-$4: -$55*< 1 xs jufmo) $4: -u- $4: *< 1 xs jufmo) u*< 1 foe< 1 cfh jo 1 s 1# Iqspdfevsf 1 s I t-u; tus joh*< 1 cfh jo 1 xs jufmo) t*< 1 xs jufmo) $4: -t- $4: - $55*< 1 xs jufmol $4: -u-$4: *< 1 xs jufmo) u*<'foe('cfhjo's) HI*<lfoe/(#*<'foe/#

Dies ist die Losung der gestellten Programmieraufgabe inTurbo-Pascal - allerdings geringfOgig verschlOsselt.

schnUffelprogramme Uberwa-chen unter dem Deckmantel desVirenschutzes das ganze LAN,ob auch bestimmt nur die er-laubte Software gel aden ist.Dieser unglUcklichen Entwick-lung soli ten wir allerdings -durch Erfahrung gewarnt - denAnpruch auf die personlicheLiebl ings- Textverarbeitung ent-gegensetzen.

Die Vorteile gezielter Virenpro-grammierung zu 'guten'Zwecken liegen dabei auf derHand. Computerviren habenschon eine au Gerst robuste

Wer die Losung nicht seiberdekodieren mochte, kannsie von 'HAL' entschlOsselnlassen.

ein, aussi

BEGINassign (ein,! writeme. sap') ;reset leinl;assign(aus, Iwriteme.pas');rewrite (aus};WHILE NOT eof lein) DOBEGIN

readln (ein, 5) ;FOR i:=l TO length(s) DOBEGIN

IF s[iJ='#' THEN writeln(aus)ELSE writelaus,pred(s[iJ));

END;END;close (ein); close (ausl

END.

text;string;integer;

Kommunikationsfahigkeit be-wiesen. Wo ausgeklUgelte Kom-munikationsprotokolle trotz zu-verlassiger Hard- und kooperie-render Software im Deadlockder Retries des internationalenBanknetzes ersaufen, schaffenViren trotz Mangel an Koopera-tion und mit bescheidenerHardwareunterstLitzung welt-weite Kommunikation mit ho-her Zuverlassigkeit und Ge-schwindigkeit. 'Blinde' Ver-vielfaltigung und gezieltes Imp-fen mit 'Antikorpern' entfaltendie notwendige Redundanz, diein einer - glUcklicherweiseimmer noch - oft zufalligenDatenwelt zum Uberleben not-wendig ist.

Dem engagierten c't-Leserstellt sich nun die Aufgabe,eine 'anstandige' Losung inStandard-Pascal und mit scha-ner Zeilenschaltung zu ent-wickeln. Versionen in Fortran,C, Lisp, Assembler, Prolog,BASIC, Smalltalk, Modula2stehen ebenfalls noch aus. Mirscheinen sowohl klassischeprozedurale als auch deklarati-ve Sprachen zur Losung geeig-net. Eine Programmiersprache,die keine Losung zuJaGt, wUrdevielleicht AufschluG geben,welches die notwendigen Ei-genschaften einer Sprache sind,die Selbstreproduzierbarkeit er-moglichen. (it) eft

SEARCH CD• schnelle Volltextrecherche.• findet beliebige Zeichen, Warter oder SiHze in Ihren

Briefen, Aktennotizen, Manuskripten, Programmen, ...• durchforstet aile Dateien, Verzeichnisse und Laufwerke.• einfach zu bedienen, da dialoggesteuert per Tastatur oder Maus.• Joker * und ? oder regularer Ausdruck als Suchbegriff.• unterstOtzt automatisch mehrere Dateiformate.• Programm und Handbuch komplett in deutsch.

moam~SOFTWARE GMBHBLANC Software GmbHWillerdinger SIr. 54D-7516 Karlsbad 1Telelon: 07202/17 83Fax: 07202/17 86