TU Chemnitz, Fakultät für Mathematik, 09107 Chemnitz
Copyright © 2024 by TU Chemnitz. Alle Rechte vorbehalten.
https://www-user.tu-chemnitz.de/~pester/Lehre/LV/fortran/uebung.php?nr=7 - 18. Mai 2024 12:39
Übung zur Zeichenkettenverarbeitung
( als PDF-Datei )
- Es ist ein Fortran-Programm zu schreiben, in dem ein Character-Feld
Namen mit nMax Elementen und je
nZ Zeichen zu vereinbaren ist.
Die Konstanten nMax, nZ sind durch eine PARAMETER-Anweisung festzulegen. - Das Programm soll den Benutzer auffordern, eine Liste von Zeichenketten
(Namen, Begriffe, ...) einzugeben.
Zum Einlesen einer Zeichenkette:read(*,'(A)') CharVariable
Die Eingabe soll beendet werden, - wenn der Benutzer eine ,,leere'' Zeichenkette eingibt (nur Enter-Taste oder Leerzeichen, erkennbar daran, dass Len_Trim(str) Null ist), oder
- wenn eine spezielle (vorher vereinbarte) Zeichenkette eingegeben wurde (z. B. #) oder
- sobald die maximal vorgesehene Feldgröße (nMax) überschritten wird, oder
- wenn das physische Ende der Eingabedatei erreicht wurde (z.B. bei File-Umlenkung).
Nach Ende der Eingabe soll das Programm ausgeben, welches dieser Kriterien zu diesem Ende geführt hat und wieviele Wörter gelesen wurden.
Hinweis: Um das Programm mehrfach mit gleichen Eingabedaten testen zu können, empfiehlt es sich, mit dem Editor eine Eingabedatei vorzubereiten (z. B. unter dem Namen liste.txt), die durch File-Umlenkung als Standardeingabedatei (anstelle der Tastatur-Eingabe) verwendet wird:
./myprog < liste.txt
Erkennung des physischen Endes einer Datei:
READ(*,'(A)',END=999) CharVariable ... ! Verarbeitung der gelesenen Zeichenkette 999 CONTINUE ! Reaktion auf Dateiende ab hier
Das Ordnen der Indizes kann sofort nach dem Einlesen eines jeden Wortes erfolgen, d.h. an welche Position ist das aktuelle Wort in die bisherige (bereits geordnete) Liste einzufügen?
write(*,*) k, Namen(k), ind(k), Namen(ind(k)) C Einlesereihenfolge Sortierreihenfolge
Vorschlag: Eine Character-Variable ZEILE vereinbaren und als ,,Ausgabepuffer'' verwenden (Ausgabe, falls Restlänge weniger als nächstes Wort - oder Ende der Wörterliste erreicht).
von eingelesenen Zeilen (z.B. eines Fortran-Programms) werden wie beim grep-Kommando von Unix nach bestimmten Kriterien ausgewählte Zeilen wieder ausgegeben, z.B. alle Zeilen, die eines der Worte integer oder real enthalten.
(Dabei ist es nicht notwendig, alle eingelesenen Zeilen als Character-Feld zu speichern.)
oder
alle Buchstaben in Großbuchstaben umwandeln, also ein "Übersetzungsprogramm" (in Unix als tr-Kommando bekannt).
File translated from TEX by TTH, version 3.05.