From: Stephan Beyer To: Hans-Dietrich Kirmse Subject: Turingmaschine und Halbieren Hallo, hier unsere "Stundenaufgabe" (die ich natuerlich zu hause geloest hab)... turing.pas ist die Turing-Maschine, add1.tur der erste Test (womit ich quasi die Turing-Maschine programmiert hab) und halb.tur die Halbier-Aufgabe... vollstaendig dokumentiert und somit nachvollziehbar, denk ich ;) Was vielleicht auf den ersten fluechtigen Blick nicht ganz nachvollziehbar ist und ich noch erlaeutern will: 1.) -1111111111 <= diese Zeile in halb.tur ist das "Ausgangsband"... also das, womit man anfaengt... Ich hab die Turing-Maschine so programmiert, dass die erste Zeile das Startband quasi festlegt, wobei das _erste_ Zeichen davon (hier '-') nicht mitgezaehlt wird, sondern das "Blank" angibt... Wenn man turing.pas also kompiliert und turing startet und da als Datei halb.tur eingibt, so wird 1111111111 zu 111111 halbiert... Wenn man was anderes testen will, einfach diese -1111111111 Zeile in halb.tur aendern... 2.) Die "Zustandsbezeichner" koennen irgendein String sein, der kein ' ' und kein ';' (Semikolon ist Kommentarzeichen) enthaelt. Also anstelle a, b, c, d, e, f, g, t, und u, kann man auch z0, z1, z2 (...) oder 1, 2, 3 (...), oder hans, paul, karl, (...) schreiben... Z0 ist das gleiche wie z0, A das gleiche wie a, also case-insensitive Handhabung ;) 3.) Das Eingabealphabet der Turingmaschine ist nicht, wie bei der bloeden ausm Internet auf 1 und + beschraenkt, sondern theoretisch hat man (wenn da nich steuerzeichen dabei waeren) die freie auswahl an 8-bit zeichen, mit Ausnahme von ';' und ' ' (die zwar auf das Startband gehen, aber nicht abgefragt werden koennen)... 4.) Zur Implementation hab ich eine Ringliste benutzt. Daraus folgt das Feature (man kann es auch als Bug sehen, aber ich wollte es extra so), dass ei nicht-definierten Zustaenden sich das Programm in eine Endlos- schleife haengt... aber die sieht mit dem "-> " sogar schoen aus ;) 5.) Die Schleife beendet sich bei einer "eindeutig Nichtsmachenden" Anweisung, also eine wie: z0 x x S z0 6.) Die Ausgabe der Turing-Maschine waere schoener mit uses crt und dann das alles ueberschrieben wird und nicht untereinander geklatscht wird... Dies wollte ich aber nicht weil das den Nachteil haette, dass man (zumindest unter Linux) nicht einfach hochscrollen kann und sich die Zwischenschritte angucken kann ;) 7.) wenn am Ende der Input-Datei Leerzeilen oder Kommentare sind, so haengt sich das gute Teil schon beim Lesen auf oder machtn Runtime Error.... die ist kein Feature ;) eindeutig ein Bug, oehm, Faulheitsbug ;) Bzw ist mir keine _elegante_ Loesung eingefallen, sondern nur eine funktionierende, und das wollt ich nich... ;) Weiter habe ich nix dazu zu sagen *G* gruss und n8 Stephan Beyer