Achtung: Dies ist eine historische Web-Site. Aktuell ist https://rainer.gerhards.net/ (engl) bzw https://www.rainer-gerhards.de/ (deutsch). Alle dynamischen Funktionen, Formulare etc auf dieser Seite sind abgeschaltet.
Datenschutzerklärung Impressum

Astronomy and Space Flight, Astronomie und Raumfahrt und dies und das...

Imperative Programmierung - EOF in Pascal

rgerhards - Oct 27, 2008 - 02:56 PM
Post subject: EOF in Pascal
Die Funktio EOF in Pascal ist etwas merkwürdig definiert. Dazu habe ich nochmal in meinem guten alten Buch "Einführung in die Programmiersprache Pascal" von K.-H.Becker und G. Lapmrecht, Vieweg Verlag, 3. Auflage 1986 geblättert. Das Buch ist nur noch im Antiquariat zu erhalten, die Lektüre oftmals etwas erheiternd, aber sicherlich immer noch korrekt (ausser, dass man "Kleinrechner" nun "PC" nennt Wink) Von der Entscheidenden Seite habe ich eine Foto gemacht, dieses Bildzitat ist meiner Meinung nach vom "Fair Use" abgedeckt:



Die eigentliche Einleselogik wird auf der rechten Seite unten beschrieben. Wirklich lesen kann man es aber nur in der hier erhältlichen "grossen" Version. Um "fair use" nicht überzustrapazieren, zitiere ich den Halbsatz auf Seite 46 hier als reinen Text:

Quote:

...Wert TRUE liefert und damit die Schleife ohne Bearbeitung des zuletzt gelesenen Wertes aus der Datei beendet wird.


Dies ist ungewöhnlich in einer Programmiersprache, dadurch wird es quasi unmöglich zu erkennen, ob der letzte Wert noch gültig war oder nicht. Mit meinem kleinen Testprogramm kann man das Überprüfen:

Code:

program eoftest(input, output);

var
  i: integer;

begin
  read(i);
  while not eof do
  begin
    writeln(i);
    read(i)
  end;
  writeln('regular end of program');
end.


EOF erzeugt man unter DOS/Windows mit ctrl-Z, unter Linux und sonstigem *nix mit ctrl-D. Das Programm arbeitet korrekt, so lange man "ordentlich" einen Wert eingibt und dann die Return Taste drückt und dann erst EOF eingibt. Gibt man aber einen Wert ein, NICHT die Return-Taste und unmittelbar danach EOF, so wird der letzte Wert nicht mehr bearbeitet.
Daniel - Dec 05, 2008 - 08:36 PM
Post subject: RE: EOF in Pascal
ergibt ctrl-d nicht immer einen programmabbruch?
ich meine der prozess wird dadurch gekillt, sodass der writeln(i) nicht zuende ausgeführt wird.

aber ich schätze bei deinem post, wird das letzte writeln(...) noch ausgeführt, oder?
rgerhards - Dec 05, 2008 - 08:40 PM
Post subject: RE: EOF in Pascal
ctrl-d (unter *nix) ist eigentlich nur EOF. Was dann passiert, kommt auf die Anwendung an. Ein Abbruch (a la ctrl-c) ist es aber sicher nicht. Pascal und EOF ist ein schwieriges Thema, das man wohl besser vermeidet. In 1613 haben wir recht merkwürdige Situationen gesehen. Der gpc geht wohl teilweise ihn und ignoriert das EOF, d. h. schliesst die Datei bei EOF und öffnet sie beim nächsten read(ln) Befehlt gleich wieder. Ich persönlich halte dieses Verhalten für nicht Standard-Konform, habe das aber nie weiter verfolgt (Pascal wird in der Praxis ja eigentlich nicht benutzt, ist aber meiner festen Überzeugung nach sehr gut für die Lehre).

Rainer
Daniel - Dec 05, 2008 - 08:42 PM
Post subject: RE: EOF in Pascal
upsala .. ctrl-c mit ctr-d vertauscht.
ja du hast recht Wink

mein gott. ich war heute zu früh in der arbeit....

btw. pascal ist sehr gut für die lehre aber nur dann wenn auch der lehrer stimmt.
rgerhards - Dec 05, 2008 - 08:44 PM
Post subject: Re: RE: EOF in Pascal
Daniel wrote:

btw. pascal ist sehr gut für die lehre aber nur dann wenn auch der lehrer stimmt.


lol - ist das nicht *immer* so? Wink
Daniel - Dec 05, 2008 - 08:47 PM
Post subject: RE: Re: RE: EOF in Pascal
klar der lehrer ist der wichtigste faktor.
ich denke aber die prinzipien kann man besser an pascal als an c lernen, da die sprache ansich viel sprechender ist.
rgerhards - Dec 05, 2008 - 08:52 PM
Post subject: RE: Re: RE: EOF in Pascal
Ja, eindeutig. Ich bin leidenschaftlicher C-Programmierer, aber C ist keine wirkliche Hochsprache, sodnern ein Hochsprachen-Assembler. Zum Erlernen von sauberen Programmierkonzepten gänzlich ungeeignet. Wer mit C arbeitet, sollte *sehr genau* wissen, was er tut.

Ich in überzeugter Pascal-Befürworter (in der Lehre), halte in gleichem Masse aber Pascal auch als für die Praxis irrelevant. Da ist Java angesagt (auch wenn ich das sehr selten Programmiere). Und C/C++ halt für Sachen, die das wirklcih brauchen.
All times are GMT + 1 Hour
Powered by PNphpBB2 © 2003-2007 The PNphpBB Group
Credits