Transcript
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


Recommended