Wikibooks
dewikibooks
https://de.wikibooks.org/wiki/Hauptseite
MediaWiki 1.47.0-wmf.3
first-letter
Medium
Spezial
Diskussion
Benutzer
Benutzer Diskussion
Wikibooks
Wikibooks Diskussion
Datei
Datei Diskussion
MediaWiki
MediaWiki Diskussion
Vorlage
Vorlage Diskussion
Hilfe
Hilfe Diskussion
Kategorie
Kategorie Diskussion
Regal
Regal Diskussion
TimedText
TimedText talk
Modul
Modul Diskussion
Veranstaltung
Veranstaltung Diskussion
Websiteentwicklung: PHP: Mails
0
7729
1086420
956078
2026-05-20T14:23:24Z
C-we
24107
Domain in Beispieldomain (https://de.wikipedia.org/wiki/Beispieldomain) geändert
1086420
wikitext
text/x-wiki
{{Navigation Reihe Buch|Websiteentwicklung: Inhaltsübersicht|Websiteentwicklung|Websiteentwicklung: PHP|PHP|Websiteentwicklung: PHP: Mails|Mails}}
PHP allein kann keine E-Mails verschicken, benötigt wird ein auf dem Webserver laufender Mailserver, der den Versand übernimmt.
== Mails versenden mit der mail-Funktion ==
Die Mail-Funktion kann genutzt werden, um automatisch E-Mails zu verschicken.
<syntaxhighlight lang="php"><?php
mail('mustermann@example.com', 'Betreff', 'Nachricht');
?></syntaxhighlight>
Hiermit wird eine E-Mail an mustermann@example.com mit dem Betreff "Betreff" und der Nachricht "Nachricht" versandt.
<syntaxhighlight lang="php"><?php
mail(
'mustermann@example.com',
'Betreff',
'Nachricht',
'From: ich@example.com\r\nReply-To: ich@example.com'
);
?></syntaxhighlight>
Dies versendet die gleiche E-Mail wie im ersten Beispiel, allerdings werden auch die Befehle "From:" und "Reply-To" benutzt. Mit diesen Befehlen machst du es der angeschriebenen Person möglich, dir zu antworten. Außerdem erkennen manche Provider E-Mails ohne "From:" und "Reply-To" als Spam und sie werden automatisch gelöscht.
== Mails versenden mit einem Mail-Framework ==
In der Praxis kann die Benutzung von mail() sehr mühsam und fehleranfällig sein. Ohne vorherige Authentifizierung werden Mails zudem oft abgelehnt (dank unzähliger Spammer). Daher empfiehlt es sich, auf ein vorhandenes Mail-Framework zurückzugreifen.
=== Verwendung von PHPMailer ===
PHPMailer kann [https://github.com/PHPMailer/PHPMailer auf Github] heruntergeladen werden. Auf dieser Seite ist auch eine kurze Erklärung zur Verwendung von PHPMailer.
Um PHPMailer verwenden zu können, müssen Sie die Dateien "class.phpmailer.php", "class.pop3.php" und "class.smtp.php" in einen Ordner Ihrer Wahl auf den Server legen.
Hier ist nun ein kleines Beipiel wie PHPMailer verwendet werden kann:
<syntaxhighlight lang="php">
<?php
require 'pfadzurphpmailerklasse/class.phpmailer.php'; // Einfügen der PHPMailer-Klasse
$mail = new PHPMailer; // PHPMailer Objekt erstellen
$mail->IsSMTP(); // Set mailer to use SMTP
$mail->Host = 'smtp1.example.com;smtp2.example.com'; // Specify main and backup server
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->Username = 'jswan'; // SMTP Username
$mail->Password = 'secret'; // SMTP Passwort
$mail->SMTPSecure = 'tls'; // Enable encryption, 'ssl' also accepted
$mail->From = 'from@example.com'; // Absendeadresse
$mail->FromName = 'Mailer'; // Absendename
$mail->AddAddress('josh@example.net', 'Josh Adams'); // Add a recipient
$mail->AddAddress('ellen@example.com'); // Name is optional
$mail->AddReplyTo('info@example.com', 'Information');
$mail->AddCC('cc@example.com');
$mail->AddBCC('bcc@example.com');
$mail->WordWrap = 50; // Setzt Zeilenumbruch auf 50 Zeichen
$mail->AddAttachment('/var/tmp/file.tar.gz'); // Fügt Anhang hinzu
$mail->AddAttachment('/tmp/image.jpg', 'new.jpg'); // Fügt Anhang mit optionalem Namen hinzu
$mail->IsHTML(true); // Email wird im HTML-Format versendet
$mail->Subject = 'Here is the subject';
$mail->Body = 'This is the HTML message body <b>in bold!</b>';
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
if(!$mail->Send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
exit;
}
echo 'Nachricht wurde versendet!';
</syntaxhighlight>
=== Verwendung von Zend Mail ===
=== Verwendung von Swiftmailer ===
=== Verwendung von PEAR Mail ===
{{Navigation_zurückhochvor_buch|
zurücktext=Dateisystem|
zurücklink=Websiteentwicklung: PHP: Dateisystem|
hochtext=PHP|
hochlink=Websiteentwicklung: PHP|
vortext=Cookies|
vorlink=Websiteentwicklung: PHP: Cookies}}
p0llrh38hnhgmcny54bdd1zakukayz4
Linux-Praxisbuch/ Konfigurationsdateien unter Linux/ resolv.conf
0
10545
1086423
882804
2026-05-20T14:27:23Z
C-we
24107
Domain in Beispieldomain (https://de.wikipedia.org/wiki/Beispieldomain) geändert / IP in Doku-IP geändert (https://de.wikipedia.org/wiki/IP-Adresse#Besondere_IP-Adressen)
1086423
wikitext
text/x-wiki
Zurück zu [[Linux-Praxisbuch: Konfigurationsdateien unter Linux]]
Die Datei resolv.conf sorgt für die Namensauflösung/ einer url in eine IP-Adresse (to resolve = engl. für auflösen).
heise.de hat z.B. die IP 193.99.144.80.
Der Inhalt kann manuell geändert werden. In den Fällen jedoch, in denen ein dhcp[[http://de.wikipedia.org/wiki/DHCP]]-server im Netzwerk die IP zuweist kann auch der Eintrag in die resolv.conf erfolgen.
==Beispiel==
domain example.com
nameserver 198.51.100.1
nameserver 198.51.100.2
b635uqfejyunqw33e7zhdh33yvyrlq1
Sei doch vernünftig: Metaphysik
0
19871
1086440
509324
2026-05-21T04:29:25Z
CommonsDelinker
4364
Nidarosdomen_dommedag_bw.jpg entfernt, auf Commons von [[c:User:Krd|Krd]] gelöscht, Grund: [[:c:Commons:Deletion requests/File:Nidarosdomen dommedag bw.jpg|]]
1086440
wikitext
text/x-wiki
<noinclude>
{{Navigation_zurückhoch_buch|
zurücktext=Rationales Problemlösungsverhalten|
zurücklink=Sei doch vernünftig: Rationales Problemelösen|
hochtext=Inhaltsverzeichnis|
hochlink=Sei_doch_vernünftig!_–_Ein_Crash-Kurs}}
</noinclude>
<big>'''Die metaphysische Wirklichkeit'''</big>
'''Traditionelle und alltägliche Metaphysik'''
----
Auch in dem scheinbar obskuren Bereich [[wikipedia:de:Metaphysik|METAPHYSIK]] können wir so wie eben beschrieben vorgehen: Welches Problem soll denn gelöst werden? Wurde es gelöst? Wurde es besser gelöst als von jeder anderen durchdachten Alternative?
Aber zunächst fragen wir mal: Was ist denn Metaphysik?
<blockquote width=80%; style="background:#f4f4ff; border: 2px solid #999; border-
right-width: 2px">
:Metaphysik ist jedes Wissen, jede Vorstellung und jede Erklärung, deren Richtigkeit wir weder durch Beobachtung noch mit Experimenten nachprüfen können.
</blockquote>
Metaphysik handelt also von Dingen, die wir nicht wissenschaftlich nachprüfen können; oder, wie wir auch sagen können, die wir nicht [[wikipedia:de:Empirie|empirisch]] prüfen können.
Man kann auch sagen: Sie sind heute noch nicht nachprüfbar! Die [[wikipedia:de:Atomtheorie|Atomtheorie]] war über 2000 Jahre lang Metaphysik; dann wurde sie zu Beginn unseres Jahrhunderts nachprüfbar. Damit wurde sie eine wissenschaftliche Theorie und hörte auf, eine metaphysische Theorie zu sein.
<blockquote width=80%; style="background:#f4f4ff; border: 2px solid #999; border-
right-width: 2px">
:Alles, was empirisch nachprüfbar ist, zählen wir zur Wissenschaft.
</blockquote>
Es gibt sehr unterschiedliche Metaphysik
{{clear}}
::'''(A) die traditionelle Metaphysik'''; z.B.:
[[Image:Genova_-_Cimitero_di_Staglieno_-_Statua_di_un_angelo-2.jpg|100px|left]]
::[[wikipedia:de:Engel|Engel]], gibt's die?
{{clear}}
...ein [[wikipedia:de:Unsterblichkeit|Leben nach dem Tod]]? [[Image:Bartholom%C3%A4us_Bruyn_d._%C3%84._008.jpg|100px]]
{{clear}}
....und vielleicht sogar die [[wikipedia:de:Auferstehung|Auferstehung?]] [[Image:Juan_de_Flandes_001.jpg|100px]]
{{clear}}
...und [[wikipedia:de:Jüngstes Gericht|Jüngstes Gericht]]?
{{clear}}
Oder '''(B) Metaphysik im Alltagsleben''', Aussagen, die einfach empirisch unprüfbar sind:
[[Image:Traffic_lights_dark_green.svg|50px|left]]
Vielleicht sehen andere Leute das Grün der Ampel
so wie ich rot sehe und sehen mein Rot als Grün?
Wenn sie zu dem, was sie als rot empfinden, "grün" sagen
und zu jeder Grünempfindung "rot",
dann mag das sein, aber wir können das nie nachprüfen. (Oder nur noch nicht?)
{{clear}}
[[Bild:kr15f.jpg|right]]
<div align="right">
Ist das, was ich in der Zeitung lese, die Wirklichkeit?
:Oder ist vielleicht alles nur ein böser Traum?
</div>
{{clear}}
[[Bild:kr15g.jpg|left]]
Läuft nicht alles Weltgeschehen ähnlich wie ein Räderwerk ab
und ist vielleicht alles vorherbestimmt?
{{clear}}
<noinclude>
{{Navigation_hochvor_buch|
hochtext=Inhaltsverzeichnis|
hochlink=Sei_doch_vernünftig!_–_Ein_Crash-Kurs|
vortext=Das Leben ein Traum?|
vorlink=Sei doch vernünftig: Leben ein Traum}}
</noinclude>
kgrw4uh29ufh8245g2s8wfh8m1p3jao
Benutzer Diskussion:Kai Burghardt
3
31073
1086429
959323
2026-05-20T17:16:52Z
MediaWiki message delivery
52146
Neuer Abschnitt /* Möglicherweise bist du bei der U4C-Wahl wahlberechtigt! */
1086429
wikitext
text/x-wiki
__NOINDEX__
''für ein Archiv → siehe Versionsgeschichte''
== Fachbegriffe Latein ==
Hallo Kai, bei [https://de.wikibooks.org/w/index.php?title=Latein/_Wichtigste_Fachbegriffe_zum_schnellen_Nachschauen&curid=52341&diff=902289&oldid=869384 deiner Bearbeitung] in der vergangenen Nacht ist dir ein Fehler unterlaufen: Der letzte Satz im einleitenden Absatz ist entweder überflüssig oder unvollständig. Alle anderen Änderungen waren sinnvoll; deshalb wäre es entschieden falsch, deine Änderung rückgängig zu machen. Aber den ersten Absatz solltest du noch nachbessern. -- Danke vielmals! [[Benutzer Diskussion:Juetho|Jürgen]] 11:57, 6. Jan. 2020 (CET)
== Stenografisches Wörterbuch ==
Hab Deinen alten Diskussionsbeitrag am "Schwarzen Brett" gelesen. Schon gesehen [[Benutzer Diskussion:Thirunavukkarasye-Raveendran/Stenografisch Wörterbuch]]? Gruß --[[Benutzer:Thirunavukkarasye-Raveendran|Thirunavukkarasye-Raveendran]] 21:48, 30. Jul. 2020 (CEST)
: Nein. -- [[User:Kai_Burghardt|Kays]] ([[User_talk:Kai_Burghardt|T]] | [[Special:Contributions/Kai_Burghardt|C]]) 22:31, 30. Jul. 2020 (CEST)
== Unterseiten Nutzerseite ==
Hallo Kai,
Deine Nutzerseite wurde wunschgemäß gelöscht. Deine beiden Unterseiten findest Du dort:
* [[Benutzer:Kai Burghardt/Sammlungen/GPG]]
* [[Benutzer:Kai Burghardt/Sammlungen/MfNF]]
Mit den Sammlungen hat sich irgendwas verändert, kann also gut sein, dass das nicht mehr wie gedacht funktioniert.
Gruß --[[Benutzer:HirnSpuk|HirnSpuk]] 16:34, 1. Mai 2021 (CEST)
== Möglicherweise bist du bei der U4C-Wahl wahlberechtigt! ==
<section begin="announcement-content" />
Ich wende mich an dich, da Du bereits an früheren Wahlen zum Koordinierungsausschuss für den [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee|Universellen Verhaltenskodex (U4C)]] teilgenommen hast. Möglicherweise bist du bei der aktuellen U4C-Wahl wahlberechtigt, die derzeit läuft und am 2. Juni 2026 endet. Weitere Informationen zu den Kandidaten und zur Wahl findest du auf der [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Election/2026|Wahlseite auf Meta]]; von dort aus gelangst du auch zur Abstimmung. Deine Teilnahme an diesen Wahlen ist für die Funktion der Wikimedia-Communities von großer Bedeutung, und wir wissen es sehr zu schätzen, dass du dir die Zeit nimmst, dich über die Kandidaten zu informieren und deine Stimme abzugeben.
-- In Zusammenarbeit mit dem U4C, [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|talk]])<section end="announcement-content" />
[[m:Keegan (WMF)|Keegan (WMF)]] ([[m:User_talk:Keegan (WMF)|talk]]) 19:16, 20. Mai 2026 (CEST)
nfdz9gafk2abiu6tbdc3mt0b64q7xfz
Gitarre: einfache add9-Akkorde
0
41769
1086435
1086414
2026-05-20T21:30:33Z
Mjchael
2222
/* Add9 ist Add2 ? */ Lilypond
1086435
wikitext
text/x-wiki
{{:Gitarre/ Navi|Balladendiplom|
{{:Gitarre: Balladendiplom/ Navi}}|
{{:Gitarre:_Balladendiplom/ Navi_Erweiterte_Akkorde}}|
img=Balladendiplom.gif|bg=#F0e68c|border=#ba55d3|color=#800080|px=100}}
=Add9 und Sus2=
== Wie bildet man Add9-Akkorde? ==
Du zählst vom Grundton acht Töne weiter und du landest auf dem neunten Ton.
:Cadd9 = C-Dur + D
1 2 3 4 5 6 7 8 9
C D E F G A H C D
Leichter ist es, gleich von der Oktave (8=1) einen Ton weiterzuzählen.
:[[Image:Crd Bund 0-4.svg]]
Anders ausgedrückt: Wenn du die Grundtöne der einzelnen Akkorde kennst, braucht man nur einen Ganztonschritt bzw. zwei Bünde weiter zu gehen.
:[[Image:Crd Cadd9 032030.svg]] [[Image:Crd Eadd9 022102.svg]] [[Image:Crd Fadd9 x03213.svg]]
Beim Aadd9 ist der Ton H nach der gerade gelernten Methode auf der G-Saite im 4. Bund. Vom Stimmen der Gitarre mit Bünden weißt du, dass es der selbe Ton, wie die leere H-Saite ist.
:[[Datei:Tuning H4 H0.svg]]
Leider gibt es eine Tücke. Die Dur-Terz C#, die unter dem Zeigefinger war, ist jetzt verschwunden und wurde durch die Sekunde (2) bzw. die None (9) H ersetzt. Daher haben wir jetzt keinen Aadd9, sondern ein Asus9 bzw. Asus2. Das mit sus und add verhält sich bei den 2er- bzw. 9er-Akkorden genau so wie bei den 4er- bzw. 11er-Akkorden. Auch hier nimmt man es in der Praxis mit Sus2, Sus9 und Add9 nicht immer sehr genau.
:[[Image:Crd Asus9 002200.svg]]
== Wie klingen einfache 9er-Akkorde ==
Dur-Add9 Akkorde können auch mal alleine stehen bleiben. Sie geben keine Richtung vor, daher haben sie nicht so sehr das Bestreben aufgelöst zu werden.
Sus4-Akkorde haben ein stärkeres Bestreben aufgelöst zu werden, als Sus2-Akkorde. So kann ein Sus4-Akkord eher den Eindruck erwecken, dass die Melodie noch ein wenig weiterrollt, bevor sie dann zum Stillstand kommt, während ein Sus2-Akkord die Melodie etwas ausbremsen kann. Doch dieses sind ganz subjektive Hörempfindungen.
;Beispiel
Akkordfolge Dsus4 - D - Dsus2 - D
Ein recht bekannte Beispiel ist das Intro von '''Summer of '69 von Bryan Adams'''. Leider kommt noch der Barré Bm vor, so dass das komplette Lied nur etwas für die Schüler ist, die das Rockdiplom (zumindest bis zum Bm) vorher gemacht haben. In jedem Fall lohnt es sich das Intro mit der Akkordfolge '''D2 D D4 D D2 D - A2 A A4 A A2 A''' schon einmal üben.
<score sound="1" raw="1">
\version "2.20.0"
\header {
title="Summer of '69"
subtitle="Interlude / Zwischenspiel"
subsubtitle="3-3-3-3-2-2-Picking"
encoder="mjchael"
}
myKey = {
\tempo 4 = 160
\set Score.tempoHideNote = ##t
\time 4/4
\key d \major
\set Staff.midiInstrument = #"acoustic guitar (nylon)"
}
myDiskant ={
\myKey
\repeat volta 2 {
a8 d' e' a d' fis'
a d' | g' a d' fis'
a e' a fis' | % D2343
e a b e a cis'
e a | d' e a cis'
e b e cis' | % A2343
}
\bar "|."
}
myBass = {
\myKey
\repeat volta 2 {
a4. 4. 4. 4. 4 4 | % D
\break
e4. 4. 4. 4. 4 4 | % A
}
\bar "|."
}
%% Layout
\score {
<<
\new ChordNames {
\chordmode {
d4.:sus2 d d:sus4 d d4:sus2 d
a4.:sus2 a a:sus4 a a4:sus2 a
}
}
{
%Noten
\new Staff <<
\myKey
\clef "G_8"
\mergeDifferentlyHeadedOn
\mergeDifferentlyDottedOn
\repeat volta 4 <<
\myDiskant
\\
\myBass
>>
>>
}
% Tabulatur
\new TabStaff {
\tabFullNotation \repeat volta 4
<<
\mergeDifferentlyHeadedOn
\mergeDifferentlyDottedOn
% Tabulatur im Diskant
\myDiskant
\\
% Tabulatur im Bass
\myBass
>>
}
>>
\layout {}
}
% Midiausgabe mit Wiederholungen, ohne Akkorde
\score {
<<
\unfoldRepeats \repeat volta 4 {
\new Staff <<
\myKey
\clef "G_8"
\myDiskant
\\
\myBass
>>
}
>>
\midi {}
}
% unterdrückt im raw="!"-Modus das DinA4-Format.
\paper {
indent=0\mm
% DinA4 0 210mm - 10mm Rand - 20mm Lochrand = 100mm
line-width=100\mm
oddFooterMarkup=##f
oddHeaderMarkup=##f
% bookTitleMarkup=##f
scoreTitleMarkup=##f
}
</score>
Oft setzt man den Add9er als eine simple Verzierung ein oder als Unterstützung der gerade gesungenen Melodie.
;Beispiel
:{{crd|Cadd9}} Yester-{{crd|C}} day... (Beatles)
://: {{crd|D}} Bru- {{crd|Dsus2}} der {{crd|D}} Jakob :// - //: {{crd|D}} Schläfst {{crd|Dsus4}} du {{crd|D}} noch? ://
== Add9 ist Add2 ? ==
Wie schon bei den Add2- bzw. add11-Akkorden gibt es unterschiedliche Bezeichnungen. Der Grund: die Sekunde (2) und die None (9) haben den selben Notennamen. Wenn der zusätzliche Ton etwas tiefer ist, und noch mehr Akkordtöne nach oben folgen, dann nennt man diesen Akkord eher add2 als add9. Wenn der hinzukommende Ton weiter als eine Oktave vom Grundton entfernt ist, dann nennt man diesen eher Add9. In beiden Fällen rechnet man damit, dass die Terz (3) noch erhalten bleibt.
C6 wird gelegentlich Csus6 genannt, weil die Quinte (5) kurzfristig suspendiert wird. Beim Gadd13 bleibt die Quinte (D) jedoch erhalten.
Doch wie schon bei den sus4- bzw. add11-Akkorden sind die Gitarrenspieler bzw. die Liedbuchautoren dabei etwas inkonsequent. Im folgenden Beispiel werden die Akkorde korrekt bezeichnet. Ein Klavierspieler würde hier jedoch einen vereinfachten Fingersatz mit vereinfachten Akkordbezeichnungen verwenden.
:[[Image:Crd Gadd2 3x0203.svg|verweis=Special:FilePath/Crd_Gsus2_3x0203.svg]]
<score sound="1" raw="1">
\version "2.20.0"
\header {
title="You never can tell"
subtitle="(Chuck Berry)"
subsubtitle="C⁵⁶⁵ • G⁵⁶⁵ • C⁵⁶⁵ • G ⁹ G ⁹"
encoder="mjchael"
}
myGaddXIII = \repeat volta 4 {
< g,-3 d g b g'-4 >8 % G
< g,-3 d a-2 b g'-4 > % Gadd13
}
myCsusVI = \repeat volta 4 {
< c-3 g c'-1 e' >8 % C
< c-3 a-2 c'-1 e' >8 % C6
}
myGaddIX = \repeat volta 4 {
< g,-3 d g b g'-4 >8 % G
< g,-3 e-2 g b g'-4 > % G6
}
myDiskant = {
\repeat volta 3 { \myCsusVI }
\repeat volta 4 { \myGaddIX }
\repeat volta 1 { \myCsusVI }
\repeat volta 3 { \myCsusVI }
\repeat volta 4 { \myGaddXIII }
\repeat volta 1 { \myCsusVI }
}
\score {
<<
\new ChordNames {
\set chordChanges = ##t
\chordmode {
c c:6 g
\once \override ChordName.text = "Gadd9" g:9
c c:6 g
\once \override ChordName.text = "Gadd13" g:6
}
}
\new FretBoards {
\override FretBoards.FretBoard.size = #'1.5
\override FretBoard.fret-diagram-details.finger-code = #'in-dot
\override FretBoard.fret-diagram-details.dot-color = #'white
\override FretBoard.fret-diagram-details.orientation =
#'landscape
< c-3 g c'-1 e' > % C
< c-3 a-2 c'-1 e' > % C6
< g,-3 d g b g'-4 > % G
< g,-3 d a-2 b g'-4 > % G2
< c-3 g c'-1 e' > % C
< c-3 a-2 c'-1 e' > % C6
< g,-3 d g b g'-4 > % G
< g,-3 e-2 g b g'-4 > % G6
}
>>
}
\score {
\new Voice \with {
\consists "Pitch_squash_engraver"
}{
\set Staff.midiInstrument = "acoustic guitar (nylon)"
\improvisationOn
\override NoteHead.X-offset = 0
c 8 \downbow % 1
8 \downbow % +
8 \downbow % 2
8 \downbow % +
8 \downbow % 3
8 \downbow % +
8 \downbow % 4
8 \downbow % +
c 8 \downbow % 1
8 \downbow % +
8 \downbow % 2
8 \downbow % +
8 \downbow % 3
8 \downbow % +
8 \downbow % 4
8 \downbow % +
}\addlyrics { "1" "+" "2" "+" "3" "+" "4" "+" "1" "+" "2" "+" "3" "+" "4" "+" }
\layout{}
}
\score { << % midi
\tempo 4 = 80
\time 4/4
\key c \major
\set Staff.midiInstrument = #"acoustic guitar (nylon)"
{ \unfoldRepeats \repeat volta 4 {
\myDiskant
}
< c-3 g c'-1 g'-4 >1 % C
}
>> \midi{} }
\paper {
indent=0\mm
line-width=80\mm
oddFooterMarkup=##f
oddHeaderMarkup=##f
% bookTitleMarkup=##f
scoreTitleMarkup=##f
}
</score>
Wie man schon beim Asus2 gesehen hat, gibt es von den 2er- (bzw. 9er)-Akkorden eine Add2- und eine Sus-Variante. Allerdings darf man bei diesen Sus-Akkorden nie die Ziffer 2 bzw. 9 vergessen. Sus alleine wird immer als Sus4 interpretiert. Wie bei den Sus4-Akkorden fehlt die Terz, die Auskunft gibt, ob der Akkord ein Dur- oder Moll-Akkord ist.
:[[Image:Crd Dsus2 x00230.svg]] [[Image:Crd Csus2 x3001x.svg]]
== 2er bzw. 9er sind meist unproblematisch bei Dur-Akkorden ==
Leitet sich der Sus2 oder Add2- bzw. Add9 von einem Durakkord ab, muss man nicht so genau aufpassen, welche Funktion der Akkord hat. Die große Sekunde (2) und die große None (9) gehören zur Durpentatonik. Bei einer Pentatonik verwendet man nur die Töne, die in allen Tonarten vorkommen, wo auch der entsprechende Dur-Akkord vorkommt.<ref>Die Zwischendominante, und das harmonische Moll lassen wir der Einfachheit halber vorläufig außer Acht.</ref>
;Beispiel
Der Ton "A", welcher als Optionston in dem Akkord G-add9 vorkommt, kommt ebenfalls in der Tonart C-Dur vor (G ist dort die Dominante).
1 2 3 4 5 6 7 8 9
C D E F (G) A (H) C (D) E F G (A)
Ebenso kommt ein "A" in der Tonart G-Dur selbst vor (G ist dort die Tonika).
1 2 3 4 5 6 7 8 9
(G) A (H) C (D) E F# G (A)
Und weiterhin kommt ein "A" auch in der Tonart D-Dur vor (G ist dort die Subdominante).
1 2 3 4 5 6 7 8 9
D E F# (G) A (H) C# (D) E F# G (A)
In allen drei Dur-Tonarten kommt sowohl der G-Dur-Akkord, als auch der Ton "A" vor. Daher muss man bei 2er bzw. add9er-Akkorden in Dur Akkorden nicht so aufpassen wie beim Sus4-Akkord. Daher ist seine Farbe hier wie die Ampelfarbe grün.
== 2er bzw. 9er sind problematisch bei Moll-Akkorden ==
Aufpassen muss man nur bei den Moll-Akkorden. Als Beispiel möchte ich den Em/add9 wählen. Also ein Em-Akkord, bei dem noch zusätzlich der Ton F# als Optionston mit erklinget. (Wo man den F# greifen muss, kann man beim Griffbild sehen.)
Der Akkord Em kommt in der Tonart C-Dur, G-Dur und D-Dur vor, aber der Ton F# kommt nur in der Tonart G-Dur und D-Dur vor. Zu der Tonart C-Dur gehört aber ein F und kein F#. Also kann man (von ein paar Außnamen mal abgesehen) üblicherweise keinen Em/add9 in der Tonart C-Dur spielen.
== 2er bzw. 9er passen nicht immer bei der Dominante in Moll ==
Bei Molltonarten erscheint die Dominante oft als Dur-Akkord. In der Tonart Am wo man üblicherweise die Akkorde Am Dm Em erwartet, kann die Dominante auch als E bzw. E7, also als Dur-Akkord erscheinen.
Nun hat aber die Tonart A-Moll drei Ausprägungen. Wenn man das melodische Moll verwendet, dann spielt man über dem E bzw. E7 in der Melodie sowowohl den Ton G# von der Durterz als auch den Ton F#, der aus melodiösen Gründen ebenfalls erhöht wird. In dem Fall kann man den Eadd9 als Verzierung verwenden.
Beim harmonischen Moll wird der Ton F nicht erhöht. Der Ton F bleibt erhalten. F ist vom Grundton E nur eine kleine Sekunde (2b) bzw. eine kleine None (9b) entfernt. Wundere dich also nicht, solltest du mal einen E9b irgendwo entdecken. Aber dies soll heute nicht das Thema sein.<ref>'''Besonderheiten bei Molltonarten''':<br />Wenn der E7 seine Moll-Wurzeln noch nicht ganz vergessen hat, auch wenn er als Dominante der Moll-Tonart erscheint, so kann der Ton F aus der Am-Tonleiter erscheinen. Zusammen mit dem E-Dur ergibt sich ein Eadd9b oder typischer ein ein E7/9b (kurz E9b). Dieses Akkorde wollen wir ein wenig außen vor lassen, bis wir beim Rockballadendiplom auf Jazzakkorde eingehen wollen.</ref>
== Zusammenfassung ==
Bei Dur-Akkorden ist die 2 bzw. 9 meist problemlos als Optionston einsetzbar. Nur bei Moll-Akkorden und Molltonarten muss man ein wenig aufpassen, ob man die Sekunde (2) oder die None (9) einfügen kann.
<noinclude>
{{:Gitarre:_Liedervorschlag|
{{todo|Es werden noch passende Liedbeispiele gesucht.|Mjchael|Balladendiplom}}
{{:Gitarre: Liedervorschläge/ add9-Akkorde}}
|img=Balladendiplom.gif|bg=#F0e68c|border=#ba55d3|color=#800080|px=100}}
{{Fußnoten}}
{{Navigation hoch}}
</noinclude>
1qhhrs2y7ffqm87q5wdrm2buxrnslm9
1086436
1086435
2026-05-20T21:48:51Z
Mjchael
2222
/* Add9 ist Add2 ? */
1086436
wikitext
text/x-wiki
{{:Gitarre/ Navi|Balladendiplom|
{{:Gitarre: Balladendiplom/ Navi}}|
{{:Gitarre:_Balladendiplom/ Navi_Erweiterte_Akkorde}}|
img=Balladendiplom.gif|bg=#F0e68c|border=#ba55d3|color=#800080|px=100}}
=Add9 und Sus2=
== Wie bildet man Add9-Akkorde? ==
Du zählst vom Grundton acht Töne weiter und du landest auf dem neunten Ton.
:Cadd9 = C-Dur + D
1 2 3 4 5 6 7 8 9
C D E F G A H C D
Leichter ist es, gleich von der Oktave (8=1) einen Ton weiterzuzählen.
:[[Image:Crd Bund 0-4.svg]]
Anders ausgedrückt: Wenn du die Grundtöne der einzelnen Akkorde kennst, braucht man nur einen Ganztonschritt bzw. zwei Bünde weiter zu gehen.
:[[Image:Crd Cadd9 032030.svg]] [[Image:Crd Eadd9 022102.svg]] [[Image:Crd Fadd9 x03213.svg]]
Beim Aadd9 ist der Ton H nach der gerade gelernten Methode auf der G-Saite im 4. Bund. Vom Stimmen der Gitarre mit Bünden weißt du, dass es der selbe Ton, wie die leere H-Saite ist.
:[[Datei:Tuning H4 H0.svg]]
Leider gibt es eine Tücke. Die Dur-Terz C#, die unter dem Zeigefinger war, ist jetzt verschwunden und wurde durch die Sekunde (2) bzw. die None (9) H ersetzt. Daher haben wir jetzt keinen Aadd9, sondern ein Asus9 bzw. Asus2. Das mit sus und add verhält sich bei den 2er- bzw. 9er-Akkorden genau so wie bei den 4er- bzw. 11er-Akkorden. Auch hier nimmt man es in der Praxis mit Sus2, Sus9 und Add9 nicht immer sehr genau.
:[[Image:Crd Asus9 002200.svg]]
== Wie klingen einfache 9er-Akkorde ==
Dur-Add9 Akkorde können auch mal alleine stehen bleiben. Sie geben keine Richtung vor, daher haben sie nicht so sehr das Bestreben aufgelöst zu werden.
Sus4-Akkorde haben ein stärkeres Bestreben aufgelöst zu werden, als Sus2-Akkorde. So kann ein Sus4-Akkord eher den Eindruck erwecken, dass die Melodie noch ein wenig weiterrollt, bevor sie dann zum Stillstand kommt, während ein Sus2-Akkord die Melodie etwas ausbremsen kann. Doch dieses sind ganz subjektive Hörempfindungen.
;Beispiel
Akkordfolge Dsus4 - D - Dsus2 - D
Ein recht bekannte Beispiel ist das Intro von '''Summer of '69 von Bryan Adams'''. Leider kommt noch der Barré Bm vor, so dass das komplette Lied nur etwas für die Schüler ist, die das Rockdiplom (zumindest bis zum Bm) vorher gemacht haben. In jedem Fall lohnt es sich das Intro mit der Akkordfolge '''D2 D D4 D D2 D - A2 A A4 A A2 A''' schon einmal üben.
<score sound="1" raw="1">
\version "2.20.0"
\header {
title="Summer of '69"
subtitle="Interlude / Zwischenspiel"
subsubtitle="3-3-3-3-2-2-Picking"
encoder="mjchael"
}
myKey = {
\tempo 4 = 160
\set Score.tempoHideNote = ##t
\time 4/4
\key d \major
\set Staff.midiInstrument = #"acoustic guitar (nylon)"
}
myDiskant ={
\myKey
\repeat volta 2 {
a8 d' e' a d' fis'
a d' | g' a d' fis'
a e' a fis' | % D2343
e a b e a cis'
e a | d' e a cis'
e b e cis' | % A2343
}
\bar "|."
}
myBass = {
\myKey
\repeat volta 2 {
a4. 4. 4. 4. 4 4 | % D
\break
e4. 4. 4. 4. 4 4 | % A
}
\bar "|."
}
%% Layout
\score {
<<
\new ChordNames {
\chordmode {
d4.:sus2 d d:sus4 d d4:sus2 d
a4.:sus2 a a:sus4 a a4:sus2 a
}
}
{
%Noten
\new Staff <<
\myKey
\clef "G_8"
\mergeDifferentlyHeadedOn
\mergeDifferentlyDottedOn
\repeat volta 4 <<
\myDiskant
\\
\myBass
>>
>>
}
% Tabulatur
\new TabStaff {
\tabFullNotation \repeat volta 4
<<
\mergeDifferentlyHeadedOn
\mergeDifferentlyDottedOn
% Tabulatur im Diskant
\myDiskant
\\
% Tabulatur im Bass
\myBass
>>
}
>>
\layout {}
}
% Midiausgabe mit Wiederholungen, ohne Akkorde
\score {
<<
\unfoldRepeats \repeat volta 4 {
\new Staff <<
\myKey
\clef "G_8"
\myDiskant
\\
\myBass
>>
}
>>
\midi {}
}
% unterdrückt im raw="!"-Modus das DinA4-Format.
\paper {
indent=0\mm
% DinA4 0 210mm - 10mm Rand - 20mm Lochrand = 100mm
line-width=100\mm
oddFooterMarkup=##f
oddHeaderMarkup=##f
% bookTitleMarkup=##f
scoreTitleMarkup=##f
}
</score>
Oft setzt man den Add9er als eine simple Verzierung ein oder als Unterstützung der gerade gesungenen Melodie.
;Beispiel
:{{crd|Cadd9}} Yester-{{crd|C}} day... (Beatles)
://: {{crd|D}} Bru- {{crd|Dsus2}} der {{crd|D}} Jakob :// - //: {{crd|D}} Schläfst {{crd|Dsus4}} du {{crd|D}} noch? ://
== Add9 ist Add2 ? ==
Wie schon bei den Add2- bzw. add11-Akkorden gibt es unterschiedliche Bezeichnungen. Der Grund: die Sekunde (2) und die None (9) haben den selben Notennamen. Wenn der zusätzliche Ton etwas tiefer ist, und noch mehr Akkordtöne nach oben folgen, dann nennt man diesen Akkord eher add2 als add9. Wenn der hinzukommende Ton weiter als eine Oktave vom Grundton entfernt ist, dann nennt man diesen eher Add9. In beiden Fällen rechnet man damit, dass die Terz (3) noch erhalten bleibt.
Doch wie schon bei den sus4- bzw. add11-Akkorden sind die Gitarrenspieler bzw. die Liedbuchautoren dabei etwas inkonsequent.
:[[Image:Crd Gadd2 3x0203.svg|verweis=Special:FilePath/Crd_Gsus2_3x0203.svg]]
<score sound="1" raw="1">
\version "2.20.0"
\header {
title="You never can tell"
subtitle="(Chuck Berry)"
subsubtitle="C⁵⁶⁵ • G⁵⁶⁵ • C⁵⁶⁵ • G ⁹ G ⁹"
encoder="mjchael"
}
myGaddXIII = \repeat volta 4 {
< g,-3 d g b g'-4 >8 % G
< g,-3 d a-2 b g'-4 > % Gadd13
}
myCsusVI = \repeat volta 4 {
< c-3 g c'-1 e' >8 % C
< c-3 a-2 c'-1 e' >8 % C6
}
myGaddIX = \repeat volta 4 {
< g,-3 d g b g'-4 >8 % G
< g,-3 e-2 g b g'-4 > % G6
}
myDiskant = {
\repeat volta 3 { \myCsusVI }
\repeat volta 4 { \myGaddIX }
\repeat volta 1 { \myCsusVI }
\repeat volta 3 { \myCsusVI }
\repeat volta 4 { \myGaddXIII }
\repeat volta 1 { \myCsusVI }
}
\score {
<<
\new ChordNames {
\set chordChanges = ##t
\chordmode {
c c:6 g
\once \override ChordName.text = "Gadd9" g:9
c c:6 g
\once \override ChordName.text = "Gadd13" g:6
}
}
\new FretBoards {
\override FretBoards.FretBoard.size = #'1.5
\override FretBoard.fret-diagram-details.finger-code = #'in-dot
\override FretBoard.fret-diagram-details.dot-color = #'white
\override FretBoard.fret-diagram-details.orientation =
#'landscape
< c-3 g c'-1 e' > % C
< c-3 a-2 c'-1 e' > % C6
< g,-3 d g b g'-4 > % G
< g,-3 d a-2 b g'-4 > % G2
< c-3 g c'-1 e' > % C
< c-3 a-2 c'-1 e' > % C6
< g,-3 d g b g'-4 > % G
< g,-3 e-2 g b g'-4 > % G6
}
>>
}
\score {
\new Voice \with {
\consists "Pitch_squash_engraver"
}{
\set Staff.midiInstrument = "acoustic guitar (nylon)"
\improvisationOn
\override NoteHead.X-offset = 0
c 8 \downbow % 1
8 \downbow % +
8 \downbow % 2
8 \downbow % +
8 \downbow % 3
8 \downbow % +
8 \downbow % 4
8 \downbow % +
c 8 \downbow % 1
8 \downbow % +
8 \downbow % 2
8 \downbow % +
8 \downbow % 3
8 \downbow % +
8 \downbow % 4
8 \downbow % +
}\addlyrics { "1" "+" "2" "+" "3" "+" "4" "+" "1" "+" "2" "+" "3" "+" "4" "+" }
\layout{}
}
\score { << % midi
\tempo 4 = 80
\time 4/4
\key c \major
\set Staff.midiInstrument = #"acoustic guitar (nylon)"
{ \unfoldRepeats \repeat volta 4 {
\myDiskant
}
< c-3 g c'-1 g'-4 >1 % C
}
>> \midi{} }
\paper {
indent=0\mm
line-width=80\mm
oddFooterMarkup=##f
oddHeaderMarkup=##f
% bookTitleMarkup=##f
scoreTitleMarkup=##f
}
</score>
C6 wird gelegentlich Csus6 genannt, weil die Quinte (5) kurzfristig suspendiert wird. Beim Gadd13 bleibt die Quinte (D) jedoch erhalten. Im Beispiel wurden die Akkorde korrekt bezeichnet. Ein Klavierspieler würde hier jedoch einen vereinfachten Fingersatz mit vereinfachten Akkordbezeichnungen verwenden. Also G6 statt Gadd13. 13 ist schlicht die Oktave von 6.
;Tipp: Leite dir den Ton, der als Sexte (6) oder Tredezime (13) hinzukommt, von der Mollparallele ab
* C • Am • C-Dur + A = C6 • Cadd13
* G • Em • G-Dur + E = G6 • Gadd13
* Bei G6 und C6 verschwindet kurzfristig die Quinte (5).
* {{Youtube-Suche|You+Never+Can+Tell+Chuck+Berry|You Never Can Tell (Chuck Berry)}}
Wie man schon beim Asus2 gesehen hat, gibt es von den 2er- (bzw. 9er)-Akkorden eine Add2- und eine Sus-Variante. Allerdings darf man bei diesen Sus-Akkorden nie die Ziffer 2 bzw. 9 vergessen. Sus alleine wird immer als Sus4 interpretiert. Wie bei den Sus4-Akkorden fehlt die Terz, die Auskunft gibt, ob der Akkord ein Dur- oder Moll-Akkord ist.
:[[Image:Crd Dsus2 x00230.svg]] [[Image:Crd Csus2 x3001x.svg]]
== 2er bzw. 9er sind meist unproblematisch bei Dur-Akkorden ==
Leitet sich der Sus2 oder Add2- bzw. Add9 von einem Durakkord ab, muss man nicht so genau aufpassen, welche Funktion der Akkord hat. Die große Sekunde (2) und die große None (9) gehören zur Durpentatonik. Bei einer Pentatonik verwendet man nur die Töne, die in allen Tonarten vorkommen, wo auch der entsprechende Dur-Akkord vorkommt.<ref>Die Zwischendominante, und das harmonische Moll lassen wir der Einfachheit halber vorläufig außer Acht.</ref>
;Beispiel
Der Ton "A", welcher als Optionston in dem Akkord G-add9 vorkommt, kommt ebenfalls in der Tonart C-Dur vor (G ist dort die Dominante).
1 2 3 4 5 6 7 8 9
C D E F (G) A (H) C (D) E F G (A)
Ebenso kommt ein "A" in der Tonart G-Dur selbst vor (G ist dort die Tonika).
1 2 3 4 5 6 7 8 9
(G) A (H) C (D) E F# G (A)
Und weiterhin kommt ein "A" auch in der Tonart D-Dur vor (G ist dort die Subdominante).
1 2 3 4 5 6 7 8 9
D E F# (G) A (H) C# (D) E F# G (A)
In allen drei Dur-Tonarten kommt sowohl der G-Dur-Akkord, als auch der Ton "A" vor. Daher muss man bei 2er bzw. add9er-Akkorden in Dur Akkorden nicht so aufpassen wie beim Sus4-Akkord. Daher ist seine Farbe hier wie die Ampelfarbe grün.
== 2er bzw. 9er sind problematisch bei Moll-Akkorden ==
Aufpassen muss man nur bei den Moll-Akkorden. Als Beispiel möchte ich den Em/add9 wählen. Also ein Em-Akkord, bei dem noch zusätzlich der Ton F# als Optionston mit erklinget. (Wo man den F# greifen muss, kann man beim Griffbild sehen.)
Der Akkord Em kommt in der Tonart C-Dur, G-Dur und D-Dur vor, aber der Ton F# kommt nur in der Tonart G-Dur und D-Dur vor. Zu der Tonart C-Dur gehört aber ein F und kein F#. Also kann man (von ein paar Außnamen mal abgesehen) üblicherweise keinen Em/add9 in der Tonart C-Dur spielen.
== 2er bzw. 9er passen nicht immer bei der Dominante in Moll ==
Bei Molltonarten erscheint die Dominante oft als Dur-Akkord. In der Tonart Am wo man üblicherweise die Akkorde Am Dm Em erwartet, kann die Dominante auch als E bzw. E7, also als Dur-Akkord erscheinen.
Nun hat aber die Tonart A-Moll drei Ausprägungen. Wenn man das melodische Moll verwendet, dann spielt man über dem E bzw. E7 in der Melodie sowowohl den Ton G# von der Durterz als auch den Ton F#, der aus melodiösen Gründen ebenfalls erhöht wird. In dem Fall kann man den Eadd9 als Verzierung verwenden.
Beim harmonischen Moll wird der Ton F nicht erhöht. Der Ton F bleibt erhalten. F ist vom Grundton E nur eine kleine Sekunde (2b) bzw. eine kleine None (9b) entfernt. Wundere dich also nicht, solltest du mal einen E9b irgendwo entdecken. Aber dies soll heute nicht das Thema sein.<ref>'''Besonderheiten bei Molltonarten''':<br />Wenn der E7 seine Moll-Wurzeln noch nicht ganz vergessen hat, auch wenn er als Dominante der Moll-Tonart erscheint, so kann der Ton F aus der Am-Tonleiter erscheinen. Zusammen mit dem E-Dur ergibt sich ein Eadd9b oder typischer ein ein E7/9b (kurz E9b). Dieses Akkorde wollen wir ein wenig außen vor lassen, bis wir beim Rockballadendiplom auf Jazzakkorde eingehen wollen.</ref>
== Zusammenfassung ==
Bei Dur-Akkorden ist die 2 bzw. 9 meist problemlos als Optionston einsetzbar. Nur bei Moll-Akkorden und Molltonarten muss man ein wenig aufpassen, ob man die Sekunde (2) oder die None (9) einfügen kann.
<noinclude>
{{:Gitarre:_Liedervorschlag|
{{todo|Es werden noch passende Liedbeispiele gesucht.|Mjchael|Balladendiplom}}
{{:Gitarre: Liedervorschläge/ add9-Akkorde}}
|img=Balladendiplom.gif|bg=#F0e68c|border=#ba55d3|color=#800080|px=100}}
{{Fußnoten}}
{{Navigation hoch}}
</noinclude>
acm6xqf650mdakjeju1ld8alu0kyyue
Mathematik: Diskrete Mathematik: Graphentheorie
0
42091
1086442
1044892
2026-05-21T10:29:00Z
GregorBungensheim
48563
/* Definitionen */ gerichteter Graph ausformuliert
1086442
wikitext
text/x-wiki
{{Navigation_hoch_buch|
hochtext=Diskrete Mathematik Inhaltsverzeichnis|
hochlink=Mathematik: Diskrete Mathematik}}
==Vorwort==
Die Graphen, mit denen sich die Graphentheorie beschäftigt, sind eine interessante mathematische Struktur. Sie spielen einerseits eine Rolle bei den Markov-Ketten aus dem Bereich der Wahrscheinlichkeitstheorie, sind ein wichtiges Instrument in fast jeder Disziplin der Informatik – angefangen von Endlichen Automaten aus der Theoretischen Informatik bis hin zur Routenberechnung für Navigationssysteme in der Geoinformatik – und spiegeln dabei Denkstrukturen wieder, die auch im Alltag oft vorkommen. So stehen hinter schematischen Darstellungen von U-Bahnnetzwerken genauso Graphen, wie sie auch hinter einem Organigramm stehen, das die Hierarchie einer Organisation beschreibt. Und so mancher Rätselfreund musste – möglicherweise nach langem Tüfteln – feststellen, dass es nicht möglich ist, drei Versorgungswerke mit drei Häusern überkreuzungsfrei zu verbinden. Dies liegt – graphentheoretisch – daran, dass der <math>K_{3,3}</math> nicht ''planar'' ist. Was das bedeutet und warum das so ist, werden wir im Folgenden sehen.
==Geschichte==
[[Datei:Konigsberg bridges.png|thumb|Königsberger Brückenproblem im Stadtplan...]]
[[Datei:Königsberg graph.svg|thumb|...und abstrakt als Graph (Orte durch Knoten, Brücken durch Kanten repräsentiert)]]
Im Jahre 1736 publizierte Leonhard Euler eine Lösung des Königsberger Brückenproblems. Im nebenstehenden Bild sieht man die sieben Brücken der Stadt Königsberg. Euler untersuchte die Frage ob es möglich ist, einen Rundgang durch Königsberg zu bestreiten, der jede der sieben Brücken über den Fluss Pregel genau einmal benutzt. Aus seinem Beweis, dass eben dies nicht möglich ist, entstand im Folgenden ein ganzer Zweig der Mathematik.
==Motivierende Fragestellungen==
Neben den bereits erwähnten Beispiel, bei dem nach einer Rundreise gefragt wurde, die jede Brücke genau einmal benutzt gibt es eine ganze Reihe weiterer Fragestellungen, die tatsächlich in der Praxis auftauchen und mit graphentheoretischen Mitteln gelöst werden. Wir wollen eine (unvollständige) Übersicht über typische Probleme geben. Für einige dieser Probleme wird auch eine Lösung präsentiert, aber dazu später.
===Kürzeste Wege===
===Problem des Handlungsreisenden===
===Heiratsprobleme===
===Zeitplanung===
===Frequenzen von Sendemasten===
==Definitionen==
===Graph (ungerichtet)===
Ein '''Graph''' G ist eine mathematische Struktur, die aus einer '''Knotenmenge''' V und einer '''Kantenmenge''' E besteht. Dabei gilt, dass die Knotenmenge <math>V</math> eine nicht-leere, endliche Menge ist und <math>E\subseteq\tbinom{V}{2}</math> (Menge von zwei-elementigen Teilmengen). Eine Kante verbindet zwei Knoten miteinander.
Schreibweise: ''G = (V,E)''
Ein Beispiel:
[[Bild:6n-graf.svg|framed|left|Graph G]]''G = (V, E)''
''V = {1,2,3,4,5,6}''
''E = {{1,2},{1,5},{2,3},{2,5},{3,4},{4,5},{4,6}}''
{{clear}}
===Graph (gerichtet)===
Ein '''gerichteter Graph''' oder '''Digraph''' <math>G</math> ist eine mathematische Struktur, die aus einer '''Knotenmenge''' <math>V</math> und einer '''Kantenmenge''' <math>E</math> besteht. Dabei gilt, dass die Knotenmenge <math>V</math> eine nicht-leere, endliche Menge ist und <math>E\subseteq V\times V</math> eine Menge von geordneten Knotenpaaren. Die Kanten eines gerichteten Graphen werden als '''gerichtete Kante''' bezeichnet. Die Knoten eine Kante werden als Start- und Endknoten bezeichnet.
===Nachbarschaft und Grad===
Zwei Knoten <math>x,y\in{V}</math> heißen ''benachbart'' (auch adjazent), wenn <math>\{x,y\}\in E</math>. Im obigen Beispiel sind z.B. 1 und 2 benachbart, 1 und 3 aber nicht.
Die Menge <math>N_G(x)</math> wird als Nachbarschaft des Knotens x im Graphen G bezeichnet. Es gilt <math>N_G(x)=\{y\in V:\{x,y\}\in E\}</math>. Im obigen Beispiel ist z.B. <math>N_G(2)=\{1,3,5\}</math>.
Als Grad von x bezeichnet man <math>deg(x)=|N_G(x)|</math>. Im obigen Beispiel ist somit <math>deg(2)=3</math>.
Ein Knoten x heißt ''isoliert'', falls <math>deg(x)=0</math> gilt.
===Isomorphe Graphen===
Zwei Graphen <math>G_1=(V_1,E_1)</math> und <math>G_2=(V_2,E_2)</math> heißen '''isomorph''', wenn es eine Bijektion <math>f: V_1 \rightarrow V_2</math> gibt, so dass <math>\forall x,y \in V_1 : \Bigl\{\{x,y\} \in E_1 \Rightarrow \{f(x), f(y)\} \in E_2 \Bigr\}</math>.
===Subgraph===
Ein Graph ''H=(W,F)'' heißt '''Subgraph''' von ''G=(V,E)'', wenn <math>W \subseteq V</math> und <math>F \subseteq E</math>.
Schreibweise <math>H \subseteq G</math>.
===Induzierter Subgraph===
===Pfad===
===Kreis===
===Klique und Stabile Menge===
===gerichtete Graphen===
In vielen Anwendungen ist es notwendig, den Kanten eine Richtung zu geben. In der Darstellung stellt man diese Richtung durch einen kleinen Pfeil dar.
Hier ein Beispiel für die Darstellung eines gerichteten Graphen: (Graphik stammt aus Wiki-Commons)
[[Bild:Directed graph.svg|Beispiel für eine Darstellung eines gerichteten Graphen]]
==Planare Graphen==
Graphen können wie bereits ersichtlich graphisch als Diagramm gezeichnet werden. In manchen Diagrammen kommt es dabei zu Überschneidungen von Kanten. Möglich ist es aber, dass sich Kanten in einem Knoten treffen. Man könnte jedoch auch eine andere Anordnung der Knoten wählen bzw. die vorhandenen Kanten anders zeichnen und vielleicht gäbe es dann keine Überschneidungen. Um dies zu klassifizieren bezeichnet man Graphen, die ohne Überschneidungen von Kanten, wenn sie in einer Ebene gezeichnet werden, als planar.
[[Datei:Forbys planar graphs example.png|mini|Hier sieht man wie ein Graph sowohl ein Diagramm mit und ohne Überschneidung von Kanten haben kann.]]
Doch wie kann man entscheiden ob ein Graph planar ist ohne jedes mögliche Diagramm zu zeichen.
=====[[w:Eulerscher_Polyedersatz|Die Eulersche Polyederformel]]=====
[[Datei:Icosahedron.svg|mini|Der Ikosaeder für den auch die Formel gilt]]
Diese Formel des bereits bekannten Leonhard Euler beschreibt die Zusammenhänge zwischen der Anzahl der Flächen, Kanten und Knoten eines Graphen. Jeder Graph besitzt mindestens eine Fläche nämlich die Fläche außerhalb des Graphen. Weitere Flächen entstehen dann wenn Kanten einen Kreis bilden, man also von einem Punkt in dieser Fläche nicht jeden weiteren Punkt außerhalb erreichen kann ohne eine Kante oder einen Knoten zu kreuzen. Der Name Polyeder kommt daher, dass man den Satz auch für Polyeder(griech. Vielflächer, also Körper wie z.B. Würfel) verwenden kann. Diese können dann auch als planarer Graph über ihr Körpernetz dargestellt werden.
Sei nun n die Anzahl der Knoten , k die Anzahl der Kante und f die Anzahl der Flächen. Dann gilt für planare Graphen:
<math>n+f =k+2</math>.
'''''Ein Beweis mittels Induktion über die Anzahl der Kanten:'''''
''Induktionsanfang'':
Ein Graph mit null Kanten besteht nur aus einem Punkt. Daher hat er nur eine Fläche und es gilt:
<math>1+1=0+2</math>
''Induktionsschritt:''
Wenn wir einen Graphen haben für den Eulers Formel bereits gilt (d.h.<math>n+f =k+2</math>) und eine weitere Kante hinzufügen, muss man 2 Fälle betrachten.
Entweder fügt man Kante hinzu die 2 Knoten miteinander verbindet und damit eine neue Fläche erschafft. Also gilt für diesen Graphen <math>n+(f+1) = (k+1)+2 \Leftrightarrow n+f = k+2</math>
Der andere Fall wäre, dass man eine Kante mit einem neuen Knoten hinzufügt. Dann gilt also<math>(n+1)+f = (m+1)+2 \Leftrightarrow n +f = m +2</math>
<gallery>
Eulerbeweis1.png|Der einfache Fall
Eulerbeweis2.png|Hinzufügen einer Kante mit neuem Knoten
Eulerbeweis3.png|Hinzufügen einer Kante, die 2 Knoten miteinander verbindet
</gallery>Weitere Beweise lassen sind über ein Weblink verfügbar.
===== Der Satz von Kuratowski =====
Zum Verständnis dieses Satzes ist es wichtig den Begriff des Subgraphen zu kennen(falls nicht siehe oben)
Ein weiterer wichtiger Begriff ist der Begriff des Unterteilungsgraphen eines Graphen. Dies bedeutet, dass wenn man eine Kante zwischen 2 Knoten u und v hat, diese durch einen neuen Knoten w und 2 Kanten, die zwischen u und w sowie w und v verlaufen, ersetzen kann.
[[Datei:Kuratowski.gif|mini|Ein Beispiel des Satzes von Kuratowski anhand des [[w:Petersen-Graph|Petersen-Graphs]]]]
Der Satz wurde vom polnischen Mathematiker [[w:Kazimierz_Kuratowski|Kazimierz Kuratowsk]]<nowiki/>[[w:Kazimierz_Kuratowski|i]] 1930 bewiesen. Ein ähnlicher Satz, der aber etwas komplizierteres Wissen erfordert, ist der Satz von Wagner des deutschen Mathematikers Klaus Wagner.
Die Aussage des Satzes ist dann, dass ein Graph genau dann planar ist, wenn er nicht einen Unterteilungsgraph des <math>K_{3,3}</math>oder den <math>K_5</math>als Untergraph besitzt.
Der Beweis für diesen Satz ist recht kompliziert und wird deswegen hier nicht angeführt.<!-- Falls jemand einen Link zu einem guten Beweis hat, bitte einen Weblink einfügen. -->
Dennoch lässt es sich einfach zeigen, warum wir wissen, dass der <math>K_{3,3}</math>und der <math>K_5</math>nicht planar sind:
Dafür betrachten wir, dass Flächen von Kreisen einer gewissen Länge umgeben sind. Gleichzeitig grenzt jede Kante an 2 Flächen, wird also wenn wir die Kanten, die jede Fläche begrenzen, 2 mal gezählt. Also haben wir eine Ungleichung <math>2m \geq k f</math> , wobei k die Länge des kürzesten Kreises ist.
''Der Fall des <math>K_5</math>''
Die Annahme wäre, dass der <math>K_5</math>planar ist. Dann gilt nach der Eulerschen Polyederformel <math>f = 10 +2-5 = 7</math>
Der kürzeste Kreis ist hier der Länge 3. Dann gilt nach obiger Ungleichung <math>2\times 10 \geq 3f \Rightarrow f \leq6</math>, was ein Widerspruch ist, sodass der <math>K_5</math>nicht planar sein kann.
''Der Fall des <math>K_{3,3}</math>'':
Die Annahme wäre, dass der ''<math>K_{3,3}</math>''planar ist. Dann gilt nach der Eulerschen Polyederformel <math>f= 9 +2 -6 = 5</math>
In einem bipartiten Graphen hat jeder Kreis gerade Länge, daher muss jede Fläche von mindestens 4 Kanten umgeben sein. Dann gilt nach obiger Ungleichung: <math>2\times9 \geq 4f \Rightarrow f\leq4</math>, was jedoch ein Widerspruch ist, sodass der ''<math>K_{3,3}</math>''nicht planar sein kann.
'''Beispiel'''
Es gibt 3 Häuser in denen jeweils ein Bauer wohnt. Die 3 Bauern besitzen zusammen 3 Brunnen, die sie für ihre Arbeit benutzen. Jeder Bauer benutzt jeden Brunnen. Die Bauern mögen sich jedoch nicht und möchten sich nicht auf ihrem Weg treffen. Daher möchte jeder Bauer einen eigenen Weg zu jedem Brunnen ohne dass sich diese kreuzen. Ist das möglich ?
''Lösung:'' Dieses Problem kann als Graph simuliert werden, sodass es sich auf die Frage stellt ob dieser planar ist. In diesem Fall ist es jedoch der <math>K_{3,3}</math>und dieser ist wie oben gezeigt nicht planar, sodass sich die Bauern wohl damit abfinden müssen, dass sie sich begegnen oder jeweils nur einen Brunnen benutzen.
==Algorithmen==
== Weblinks ==
https://www.ics.uci.edu/~eppstein/junkyard/euler/ Weitere Beweise für die Eulersche Polyedersatz(auf Englisch)
09mh9329d8m8xr1dn3ati5v3zf8dweb
Suchmaschinenoptimierung: Technik
0
46840
1086421
955918
2026-05-20T14:24:29Z
C-we
24107
Domain in Beispieldomain (https://de.wikipedia.org/wiki/Beispieldomain) geändert
1086421
wikitext
text/x-wiki
Bei [[Suchmaschinenoptimierung]] geht es auch darum die Kommunikation zweier Maschinen, der Suchmaschiene und unserem Webserver, so zu gestalten das diese möglichst aussagekräftig ist.
== Server ==
Ein [[w:Server (Software)|Server ist eine Software]] welches auf die Kontaktaufnahme eines Client-Programmes wartet und nach Kontaktaufnahme mit diesem Nachrichten austauscht. Dieser ist so ein elementarer Bestandteil der Internetkommunikation, vom sogenannten [[w:Webserver|Webserver]] werden die Daten an den User auf dessen Anforderung verschickt. Dieses verschicken folgt, wie jede Kommunikation, bestimmen Regeln, einem sogenannten Protokoll, dem [[w:Hypertext Transfer Protocol|Hypertext Transfer Protocol]]. Die Einhaltung oder dieses Protokoll beeinflusst die Kommunikation mit dem User. So soll z.B. wenn eine Seite gelöscht wurde, nicht einfach nichts gesendet werden, sondern ein bestimmter Code, der eindeutig sagt "ja die Seite ist weg" im http wäre das der [[w:HTTP-Statuscodes|Statuscode]] 404. Sonst könnte der User, oder besser dessen Browser, nicht unterschieden ob es sich eventuell um eine fehlerhafte Verbindung handelt.
=== Hypertext Transfer Protocol ===
Dieses Kommunikation ist nun für gewisse Bereiche in der Suchmaschinenoptimierung wichtig, da die Suchmaschinen evtl. korrekte Serverantworten besser bewerten und sich Missverständnisse ausschliessen lassen
* Oft wird unabsichtlich [[Suchmaschinenoptimierung: maschinenorientierter Content#Double Content|Double Content]] erzeugt, wenn die Inhalte über mehrere Arten erreichbar sind. Wenn man über ''www.site.tv'' und über '''site.tv'' oder Domainweiterleitungen das selbe Ergebnis erhält kann das die Suchmaschine als doppelten Inhalt werten, und das deutet für dich Suchmaschine auf Spamming hin. So soll man sich entscheiden auf welchem der Zugänge die Inhalte nun wirklich liegen sollen und alle anderen dorthin weiterleiten (303). Ob man besser ''www.site'' oder nur ''site'' als echten Ort verwendet ist noch nicht geklärt?
Die [[w:.htaccess|.htaccess]] ist eine Konfigurationsdatei, mit der der Zugriff bestimte Webserver (z. B. Apache) kontrolliert und beschränkt werden kann. Dazu gibts [http://www.bahlco.com/index.php/weblog/comments/htaccess_haeufige_anweisungen/ HTACCESS - häufige Anweisungen]
Um seine eigene Site zu überprüfen oder eine Analyse zu machen kann man sich die Statusmeldungen und HTTP-Headers des Servers [http://gsitecrawler.com/tools/Server-Status-DE.aspx online anzeigen] oder mit dem Firefox-Addon [https://addons.mozilla.org/de/firefox/addon/3829 Live HTTP Headers] im Browser anzeigen lassen.
=== Uniform Resource Locator ===
Der [[w:Uniform Resource Locator|Uniform Resource Locator]] ist die genaue Adressangabe eines Dokuments im Internet, so auch im WWW. Es werden aber so nicht nur reale Dokumente adressiert, sondern auch dynamisch erzeugte Dokumente (z.B. per [[w:PHP|PHP]]), wie die meisten Seiten im WWW.
Streng genommen verweist ein Webserver der eine dynamische Website ausliefert immer auf ein und das selbe Dokument (meist die <code>index.html</code>). Aber er übergibt unterschiedliche Parameter, die dann entscheiden welcher Inhalt (Startseite, Impressum, Angebot etc) wirklich ausgeliefert wird. Solche Seiten erkennt man manchmal an ''verkrypteten URLs'' wie <code>example.com/index.html?cont=456&lang=de&plattform=screen</code>, diese können aber auch versteckt sein und wie normale Dokument ausehen
==== sprechende URLs ====
Eine URL mit echten Wörtern die den Inhalt beschreiben (<code>example.com/apfel.html</code>) sagt mehr über diesen aus als ''verkrypteten URLs'' wie (<code>example.com/index.html?cont=456&lang=de&plattform=screen</code>) die nur die Anweisungen an das CMS übergeben.
Diese ''echten'' [[w:Clean URL|clean URLs]] werden als '''sprechende URLs''' oder '''search engine friendly URL''' (sefURL) bezeichnet.
Allgemein wird zwar angenommen das die meisten Suchmaschinen Wörter in URLs hoch bewerten.
Aber es gibt eine Untersuchung die ''nicht bestätigt (...), dass Seiten mit sprechenden URLs generell weiter vorne zu finden sind''<ref>[http://www.sistrix.de/ranking-faktoren/#pfad Google-Ranking-Faktoren Pfad]</ref>. Dennoch schaden solche sprechenden URLs in der Suchmaschine nicht und dienen der Usability.
Eine genau Erklärung und zahlreiche Möglichkeiten wie man den Webserver sefURL-tauglich konfiguriert findet sich auf [http://www.sefurl.de sefurl.de].
Viele Content-Management-System bieten oft schon die Funktionen oder Erweiterungen an in welchen man sefURL automatisch lassen erzeugen und konfigurieren kann.
==== Cool URIs don't change ====
Cool URIs don't change<ref>[http://www.w3.org/Provider/Style/URI Cool URIs don't change]</ref> sagt Tim Berners-Lee, der Entwickler des WWW. Das bedeutet URLs, eine Unterart von [[w:Uniform Resource Identifiern|URIs]], sollten über die gesamte Lebenszeit nicht verändert werden. Bookmarks und eingehende [[Suchmaschinenoptimierung: Links|Links]] von anderen Webseiten und auch der Suchmaschine würden so ins Leere führen und so den vom User gewünschten Inhalt nicht darstellen.
Von der Suchmaschine werden diese zwar mit der Zeit (immerhin 1 - 20 Wochen) aktualisiert, aber man verliert an Linkpopularität.
Muss man trotzdem URLs ändern sollte man diese mit einem Statuscode 301 (Moved Permanently) auf den neuen Inhalt weiterleiten.
=== Ladegeschwindigkeit ===
Die Geschwindigkeit mit der Seiten, Bilder und andere Elemnete geladen werden, hat Einfluss auf die Rankingposition<ref>[http://www.mattcutts.com/blog/site-speed/ Matt Cutts: Gadgets, Google, and SEO]</ref>.
Google und andere Suchmaschinen messen der schnellen Ladezeit ein bessere Usability bei und bewerten daher wie schnell eine Seiten komplett geladen wird.
Die Geschwindigkeit von Seiten kann mit [[w:Firebug|Firebug]] gemessen werden, das Addon [https://addons.mozilla.org/de/firefox/addon/yslow/ YSlow] zeigt eventuelle Fehler auf.
Neben einem schlanken und sauberen [[Suchmaschinenoptimierung: Hypertext Markup Language|html]] und Webserveroptimierung, vor allem durch [[wikipedia:Web cache|Caching]], schaffen unterschiedliche Maßnahmen Abhilfe:
* Bilder sollen immer serverseitig resized werden und nicht mit der html Anweisung <code>width</code>.
* Icons sollten nicht als einzelne Bilder mit je einer Serveranfrage geladen werden, sondern als [[w:CSS-Sprites|CSS-Sprites]] zusammengefasst oder als [[w:Data-URL|Data-URL]] im css.
* CSS und JavaScript ebenfalls nicht einzeln laden, sondern in einer Datei zusammenfassen und wenn möglich [[wikipedia:Minification (programming)|minimieren]]
* Ein [[w:Content Delivery Network|Content Delivery Network]] beschleunigt die Auslieferung der gesamten Seite oder kann auch nur Bilder und Elemente (CSS, JS) beschleunigen. Die Umstellung der gesamten Seite oder auch nur die der Zusatzelemente (Bilder, CS) ist technisch aufwändig. Für die meist genutzten Standard JS und CSS Bibliotheken gibt es Drittanbieter wie [http://cdnjs.com cdnjs.com], welche diese kostenfrei als CDN anbieten.
== Engines ==
Ob der [[Suchmaschinenoptimierung: Hypertext Markup Language|html-Text]] händisch geschrieben oder dynamisch erstellt wird ist prinzipiell nicht ausschlaggebend. Rein theoretisch kann man an dem was der Webserver ausliefert dies nicht mal erkennen.
So haben [[w:Content-Management-System|Content-Management-Systeme]] erhebliche Vorteile bei der Erstellung und vor allem bei der Aktualisierung von Webinhalten. Es ist aber darauf zu achten, das diese trotzdem regelkonforme Webseiten ausliefern.
== Quellen ==
<references/>
{{:Suchmaschinenoptimierung: Navigationsleiste}}
cm21ouxze1vscbghxylfkkjy23xp6ab
Suchmaschinenoptimierung: Links
0
55421
1086422
1081758
2026-05-20T14:25:10Z
C-we
24107
Domain in Beispieldomain (https://de.wikipedia.org/wiki/Beispieldomain) geändert
1086422
wikitext
text/x-wiki
Ein [[w:Hyperlink|Hyperlink]] ist ein Verweis auf ein anderes Dokument innerhalb eines [[Suchmaschinenoptimierung: Hypertext Markup Language|html]]-Dokuments. Sie sind derzeit einer der wichtigsten Bewertungskriterien mit der das [[w:Suchmaschinenranking|Suchmaschinenranking]] festlegt werden. ''Links sind die "Währung" bei der Suchmaschinenoptimierung.''<ref>[http://www.ranking-check.de/tools/handbuch-seo.html Die 10 goldenen Regeln der Suchmaschinenoptimierung - Regel 6: Links, Links, Links und nochmal Links!]</ref>
Hyperlinks sind das wichtigste Instrument für die [[Suchmaschinenoptimierung: Onsite und Offsite#Offsite|Offsiteoptimierung]]
== Bewertungssystem ==
[[Datei:PageRanks-Example.svg|thumb|Der [[w:PageRank|PageRank]]]]
[[w:Rückverweis|Rückverweise]] von anderen Webseiten wertet die Suchmaschine als eine höherer Popularität. Sie sind in den gängigen Suchrankings prinzipiell positiv, außer von [[#Nachbarschaft|schlechter Nachbarschaft]].
Nicht jeder Link wiegt aber gleich, es fließen unterschiedlichste Kritiken mit ein:
* Je besser die verweisende Seite, je besser die Zielseite. Diesen Prinzip hat zum ersten mal Google mit dem [[w:PageRank|PageRank]] eingesetzt.
* Der [[w:Linktext|Linktext]] und abgeschwächt der Text um den Link fließt in die Bewertung auf Keywordebene ein. So bringt für das Keyword ''Fahrrad'' der Links auf example.com mehr wenn der Linktext auch ''Fahrrad'' oder ähnliches ist. <code><a href=example.com>Fahrrad</a></code>
* Links die mit [[w:Nofollow|Nofollow]] getagged sind, oder Links die gar nicht im Index sind werden nicht gewertet.
== interne Links ==
Um innerhalb einer Website an alle Inhalte zu gelangen setzt man ebenfalls Links. Grundsätzlich behandelt die Suchmaschine diese genauso wie links von anderen Webseiten.
Der Vorteil von ''eigenen'' Links ist, das man diese möglichst optimal setzen kann.
Bei den meisten klassischen Webseiten erreicht man einen Großteil aller Inhalte aus dem '''Menü''', dabei können diese auch hierarchisch mit Untermenüs untergliedert sein. Suchmaschinen unterscheiden aber nicht, ob ein Link im Menü oder Text platziert ist. Von jeder einzelnen Seite werden immer alle angezeigten Links von der Suchmaschine berücksichtigt. Links die in einem ständigen Hauptmenü zu finden sind, werden daher immer berücksichtigt, links in Untermenüs nur dann wenn dieses auch 'geöffnet' ist.
Links innerhalb des Textes können und sollen auch Links gesetzt werden. Beschreibt man z.B. sein ''Produkt'' und erwähnt das man auch ''Service'' bietet, so sollte man das Wort Service auch verlinken, auch wenn dieser Bereich über das Menü zu erreichen wäre.
Bei modernen Formen von Websites wie [[w:wiki|Wikis]] oder [[w:Blog|Blogs]], die oft wesentlich mehr Inhalt haben, ist es so nicht mehr möglich alles in einem hierarchischen Menü darzustellen, oder wäre zu unübersichtlich. Hier wird vor allem mit Kategorieübersichten (auch Tags genannt) gearbeitet. Wikis basieren wesentlich auf Links im Text.
Prinzipiell gilt auch hier eine möglichst nutzerfreundliche Verlinkung anzustreben, den das hält den Nutzer auf der Seite. Es sollte darauf geachtet werden, dass alle, vor allem neue, Inhalte mit wenigen Klicks, für Nutzer und Suchmaschine, erreichbar sind. Bei Suchmaschinen wird davon ausgegangen, dass diese maximal 6 Links innerhalb einer Website folgen.
== ausgehende Links ==
Ausgehende links helfen primär dem User und werden aber auch durch die Suchmaschine mit positiver "Authority" belohnt.
Ausgehende Links können in erster Linie erst einmal für den Benutzer hilfreich sein, da er mehr und tiefere Informationen präsentiert bekommt, weiter wirken ausgehende Links vertrauenswürdig und kompetent<ref>http://www.tagseoblog.de/ausgehende-links-seo-authority</ref>.
Natürlich nur, und das gilt wie immer, wen die links gut sind und auch wirklich weitere und sinnvolle Information bieten. Einfach eine Handvoll links für die Suchmaschine verstreuen macht die Seite hässlich.
Und auch die Anzahl sollte sich nach dem gesunden Menschenverstand richten. Die SEO Literatur spricht zwar von maximal 10-15<ref>http://www.seo-united.de/onpage-optimierung/ausgehende-links.html</ref> oder maximal 100 links, aber das ist auch vom Inhalt abhängig. Den meist werden wesentlich weniger sinnvoll sein.
Neben dem primären positiven Mehrwert für den Nutzer und dem daraus erzeugten Vertrauen animiert man andere Backlinks zu setzen.
Auch wenn man den Effekt [http://pr.efactory.de/d-ausgehende-links.shtml mathematisch] erklären kann, ist es nicht "bewiesen" das ausgehende links helfen, die Erfahrungen sprechen aber dafür.
== externer Linkaufbau ==
Rein theoretisch setzt man Inhalt ins Netz, wenn dieser interessant ist, dann werden andere durch Links auf diesen hinweisen. Leider funktioniert diese Theorie nicht, das nicht jeder der einen link interessant findet diesen auch verlinkt und vor allem weil es vor allem bei kommerziellen Angeboten Wettrennen um die meisten und besten Links gibt. [https://semseo-solutions.com/seo/ki-linkbuilding/ KI im Linkbuilding] kann hier zwar helfen, geeignete Linkquellen zu finden und Outreach-Prozesse zu optimieren, doch sie ersetzt nicht den Aufbau einer authentischen Linkstruktur.
Die '''natürliche Linkstruktur''' ergibt sich je nach Inhalt durch Seiten mit realen sozialen Kontakten. Eine Firmenhomepage kann und sollte von deren Branchenverband, Geschäftspartnern und regionalen Wirtschaftsverzeichnissen, zufriedenen und auch unzufriedenen Kunden aufgenommen werden.
Diesen Anspruch an Natürlichkeit sollte man immer wahren.
Denn jede nicht User-orientiert manipulative Art des Linkbuilding ist streng genommen [[w:Suchmaschinen-Spamming|Suchmaschinen-Spamming]] und [[Suchmaschinenoptimierung: Black und Whitehat|Blackhat]], auch wenn es funktionieren ''kann''.
=== Legitim ===
Maßnahmen die in gesundem Maße noch kein Spamming sind:
; Kataloge und Verzeichnissen
: die Aufnahme in [[w:Webverzeichnis|Webverzeichnissen]] ist sinnvoll, auch wenn diese meist lang dauert und es nicht allzu viele davon wirklich relevante (DMOZ, Yahoo) gibt, was die Menge an möglichen links minimiert. Ein Eintrag ist ''nicht für den Erfolg einer Website auschlaggebend ist, aber Schaden wird die eingetragene Internetseite dadurch nicht nehmen.''
; Soziale Netzwerke Microblogging
: Links in sozialen Netzwerken wie facebook oder xing oder auch Microbloggingdiensten wie Twitter sind sehr kurzlebig, aber können richtig eingestezt die richtigen Besucher auf eine Seite bringen.
; Social Bookmarks
: [[w:Social Bookmarks|Social Bookmarks]] sind meist [[w:nofollow|nofollow]] damit vermutlich wertlos für das reine Ranking, aber dennoch bringen dies von sich aus Besucher auf die Seite.
; Bitte
: Fragen sie zufriedene Kunden ob diese sie auf ihrer Webseite, mit link natürlich, nennen wollen. Beispielsweise kann eine Getränkefirma ihre belieferten Gaststätten fragen ob man als Lieferant gelistet werden kann. Auch hier gilt, um so besser Inhalte und Form desto eher wird man auch verlinkt. Liefert man innovative Inhalte (z.B. Mineraltabelle des gelieferten Tafelwassers) macht man es dem verlinkenden auch wesentlich leichter. Ob man sich für den link dienst anderwertig erkenntlich zeigt (z.B. als Rabatt) kann man selbst entscheiden.
; Linktausch
: [[w:Textlinktausch|Linktausch]] ist eine einfache, alte Möglichkeit, wenn auch nicht mehr zeitgemäß und sollte nicht übermäßig betreiben werden. Vor allem direkte Backlinks, also A ⇒ B und A ⇐ B werden, da verdächtig unnatürlich, negativ bewertet
=== Spamming ===
Maßnahmen die auf jeden Fall ''illegal'' sind und meist eher zu Strafen durch die Suchmaschine führen.
Wer diese [[Suchmaschinenoptimierung: Black und Whitehat#Anwenden?|anwenden]] will sollte wissen das es unseriös und gefährlich ist.
; Linkfarmen
: [[w:Linkfarm|Linkfarmen]] sind sehr gefährlich, da sie durch ''bad neighbourhood'' auch schaden können. Linkfarmen können noch funktionieren, sollten aber vom Anfänger auf keinen Fall eingesetzt werden. Ausserdem ist das meist sehr teuer.
; Linkkauf
: wird ebenfalls von Suchmaschinen abgestraft<ref>http://www.sistrix.de/news/842-google-jagt-linkkaeufer.html</ref>. Wie weit und wie weit sich die Verkäufer vor Enttarnung schützen, ist leider ein Geheimnis. [http://www.linkbaron.com linkbaron.com] und [http://www.linkvendor.com linkvendor.com] bieten solche Links an. Linkkäufe sind für alle nicht Blackhat-SEOs eher abzuraten, denn man kann damit, aufgrund der ''Strafbarkeit'' mehr Schaden anrichten als Nutzen.
; Linkbait
: Linkbait <ref>Als Linkbait werden in der SEO Welt Strategien bezeichnet die dazu dienen Links auf eine WebSeite zu bekommen. [https://www.dreamcodes.net/suchmaschinen-optimierung/ratgeber/was-ist-linkbait/ Was ist Linkbait?]</ref> durch Teilnahme an Diskussionen in Foren oder Weblogs. Auch hier gilt das man nicht den Zweck heiligen, sondern nur wenn man etwas Sinnvolles beitragen kann auch posten soll. Soziale Communitys merken schnell, wenn Teilnehmer nur auf Werbung aus sind. Und strafen das ab.
== Nachbarschaft ==
Links haben aber nicht nur einen rein quantitativen oder qualitativen Einfluss auf das Ranking, nein auch der umgebende Text und sogar das Thema der Seite haben Einfluss auf das Ranking.
So können [[w:Linkfarm|Linkfarmen]], wenn sie von der Suchmaschine erst mal als solcher erkannt sind, sich negativ auswirken.
== Messen ==
Ob Verlinkungsmaßnahmen funktionieren oder nicht sieht man nicht sofort, sondern erst mit der Zeit. In der [[Suchmaschinenoptimierung: Messen|Analyse]] findet man schnell raus welche Links funktionieren und welche nicht. Um die vorhandenen eingehenden Links im Suchmaschinenindex auszulesen kann man mit dem Parameter <code>link:</code> vor der URL (<code>link:example.com</code>) in einer ganz normalen Suchanfrage sich die die eingehenden Links anzeigen lassen.
Obwohl die Indizes der großen Suchmaschinen ähnlich sind werden in [http://siteexplorer.search.yahoo.com/de/siteexplorer/search?p=http%3A%2F%2Fexample.com&bwm=i&bwmf=u&bwms=p&fr2=seo-rd-se Yahoo] wesentlich mehr angezeigt als in [http://www.google.de/search?hl=de&q=link%3Aexample.com Google].
Schon wesentlich detaillierter ist der [http://www.opensiteexplorer.org opensiteexplorer].
Wesentlich umfangreicher ist [http://www.linkdiagnosis.com linkdiagnosis.com] auch wenn die Datenaufbereitung eine Zeit dauert (1 - 10 Minuten), mit einem zusätzlichen Firefox-Plugin erhält man auch Daten, wie z.B. Pagerank, der verlinkenden Seite. Auch hier gibt es viele [https://ixbit.de Alternativen]. Mit welchem Tool man am liebsten arbeitet, muss man selbst entscheiden und hängt von Anforderung und Anspruch ab.
Die [https://www.google.com/webmasters/tools/dashboard?hl=de Webmastertools von Google] geben einen guten Überblick über Status der ''Situation bei Google''. Ist die robots.txt und sitemap.xml angenommen, wie oft wurde indiziert, wo gab es dabei Fehler. Sogar welche Suchbegriffe auf die Seite führten wird gezeigt, sogar die auf welcher Position diese gelistet war (bekommt man sonst mit fast keinem Tool)
== Weiterleitungen ==
Vor allem bei externen links gilt [[Suchmaschinenoptimierung:_Technik#Cool URIs don't change|Cool URIs don't change]], da einerseits die Suchmaschine "verwirrt" wird wenn sich eine Adresse ständig ändert, zum anderen ist es fast unmöglich externe links ändern zu lassen. Dennoch muss man in bestimmten Fällen URLs weiterleiten lassen
* geparkte oder alte Domeins (man verwendet example.de aber hat noch example.com, auf die jemand "leider" verlinkt hat)
* technisch oder inhaltliche fehlerhafte Verlinkungen
In diesem Falle ist eine [[Suchmaschinenoptimierung: Technik#Hypertext Transfer Protocol|http]]-Weiterleitung 301<ref>http://www.google.com/support/webmasters/bin/answer.py?hl=de&answer=40132</ref> empfohlen.
== Quellen ==
<references/>
{{:Suchmaschinenoptimierung: Navigationsleiste}}
8i0gkhjnvjpvez0dufs7od2a2acmyjq
Traktorenlexikon: IHC 1055
0
83580
1086430
1019587
2026-05-20T18:33:45Z
~2026-28264-97
116166
1086430
wikitext
text/x-wiki
{{:Traktorenlexikon: Navigation |HERSTELLER-LINK=Traktorenlexikon:_IHC |HERSTELLER= IHC}}
{{:Traktorenlexikon: Modell-Infobox
| HERSTELLER = International Harvester
| MODELLREIHE = C-Familie
| MODELL = 1055
| BILD = International Harvester 1055 - Flickr - Joost J. Bakker IJmuiden.jpg
| BILDBESCHREIBUNG = IHC 1055
| BAUWEISE = Blockbauweise
| PRODUKTIONSBEGINN = 5/1977
| PRODUKTIONSENDE = 6/1982
| STÜCKZAHL = 3518
| EIGENGEWICHT = 4290 (A: 4780)
| LÄNGE = 4194 (A: 4229)
| BREITE = 2049 (A: 2208)
| HÖHE = 2649
| RADSTAND = 2626 (A: 2587)
| BODENFREIHEIT = 516 (A: 382)
| SPURWEITE =
| SPURWEITE VORNE = 1530-1910 (A: 1624-1920)
| SPURWEITE HINTEN = 1704-2204
| WENDERADIUS MIT LENKBREMSE = 4400 (A: 4670)
| WENDERADIUS OHNE LENKBREMSE = 5050 (A: 5320)
| BEREIFUNG VORNE = 7.50- 18 (A: 11.2/10-28)
| BEREIFUNG HINTEN = 18.4/15-34
| LEISTUNG KW = 74
| LEISTUNG PS = 100
| NENNDREHZAHL = 2200
| ZYLINDER = 6
| HUBRAUM = 5867
| DREHMOMENTANSTIEG =
| KRAFTSTOFF = Diesel
| KÜHLSYSTEM = Wasserkühlung
| ANTRIEBSTYP = Hinterrad-oder Allrad
| GETRIEBE = 16V/8R
| HÖCHSTGESCHWINDIGKEIT = 30 bzw. 25
| KATEGORIESORTIERUNG = Ihc 1055
}}
Als Nachfolger des IHC 1046 kam im Mai 1977 der IHC 1055 ins Programm. Die Verkaufszahlen in dieser Leistungsklasse stiegen stetig an, was die Produktion eines hauseigenen Getriebes rentabel machte. Wie sein kleiner Bruder war auch der IHC 1055 als Kabinenschlepper konzipiert. Die Plattformausführung war den Exportschleppern vorbehalten.
==Motor==
* IH, Typ: D-358, stehender wassergekühlter Viertakt-Sechszylinder-Reihen-Saugmotor mit Direkteinspritzverfahren, Pierburg-Kraftstoffpumpe, siebenfach-gelagerte Kurbelwelle, zahnradgetriebene Nockenwelle, Verteiler-Einspritzpumpe mit integriertem Regler, Mehrloch-Einspritzdüse, Druckumlaufschmierung mittels Zahnradpumpe, Trockenluftfilter mit Vorabscheider, hängende Ventile mit Rotocap-System, nasse-auswechselbare Zylinderlaufbuchsen, Dreiring-Leichtmetall-Kolben, Kreiselpumpe, Thermostat und Kurzschlusskreislauf.
* Bohrung = 98,4 mm, Hub = 128,5 mm
* Verdichtung = 16:1
* Kompressionsdruck = 22 bis 24 bar
* Geregelter Drehzahlbereich = 700 bis 2430 U/min.
* Drehmoment bei Höchstleistung = 325 Nm
* Max. Drehmoment = 381 Nm bei 1301 U/min.
* Mittlere Kolbengeschwindigkeit = 9,45 m/s
* Öldruck = 3,5 bis 3,8 bar
* Mittlerer Effektivdruck = 6,90 bar
* Einspritzmenge = 53,5 mm³/Hub bei Nenndrehzahl
* Max. Einspritzdruck = 225+8 bar
* Bosch-Verteiler-Einspritzpumpe, Typ: EP VA 6 100 H 1100 CR 87/1
* Oder Typ: EP VA 6 100 H 1100 CR 401/R
* Bosch-Einspritzdüse, Typ: DLLA 150 S 690
* Mann & Hummel-Trockenluftfilter, Typ: Piclon 1-45 165 91 059
* Kühler-Lüfter mit sechs Flügel und 500 mm Durchmesser
* Einführung elektrischer Wartungsschalter für Trockenluftfilter, ab 8/1977
* Box-Kraftstoff-Filter von CAV ersetzt Bosch-Kraftstofffilter, ab 8/1978
==Kupplung==
* Trockene Zweifach-Kupplung von Fichtel & Sachs, Typ: DUT 310-310/310
* Pedal betätigte Fahrkupplung und Handhebel betätigte Zapfwellen-Kupplung
==Getriebe==
* IH-Synchron-Reduziergetriebe in der 30 km/h.- Ausführung ( Optional als 25 km/h.- Ausführung )
* Synchronisiertes Wechselgetriebe mit vier Gängen
* Synchronisiertes, klauengeschaltetes Gruppengetriebe mit zwei Vorwärts-und einer Rückwärtsgruppe
* Reduziergetriebe mit zwei Stufen für alle Gänge
* 16 Vorwärts-und 8 Rückwärtsgänge
* Wahlweise als Kriech-oder Superkriechganggetriebe
* 16 Vorwärts-und 8 Rückwärtsgänge
* Einführung synchronisiertes Reduziergetriebe, ab 6/1979
==Geschwindigkeiten vor- und rückwärts==
Ackergruppe-Stufe I
* 1.Gang = 1,8 km/h.
* 2.Gang = 2,4 km/h.
* 3.Gang = 3,8 km/h.
* 4.Gang = 5,7 km/h.
Ackergruppe-Stufe II
* 1.Gang = 2,2 km/h.
* 2.Gang = 3,0 km/h.
* 3.Gang = 4,6 km/h.
* 4.Gang = 7,0 km/h.
Straßengruppe-Stufe I
* 1.Gang = 6,9 km/h.
* 2.Gang = 9,4 km/h.
* 3.Gang = 14,6 km/h.
* 4.Gang = 22,1 km/h.
Straßengruppe-Stufe II
* 1.Gang = 8,4 km/h.
* 2.Gang = 11,5 km/h.
* 3.Gang = 17,9 km/h.
* 4.Gang = 27,1 km/h.
Rückwärtsgruppe-Stufe I
* 1.Gang = 2,6 km/h.
* 2.Gang = 3,6 km/h.
* 3.Gang = 5,6 km/h.
* 4.Gang = 8,5 km/h.
Rückwärtsgruppe-Stufe II
* 1.Gang = 3,2 km/h.
* 2.Gang = 4,4 km/h.
* 3.Gang = 6,8 km/h.
* 4.Gang = 10,3 km/h.
==Zapfwelle==
* Unabhängige Motorzapfwelle mit Zapfwellen-Schutzschild
* Zwei separate Stummel für 540 und 1000 U/min
* Stummel = 1 3/8"- 6 Keile, für 1000 er Zapfwelle auf Wunsch mit 1 3/8"- 21 teilig
* 540 U/min. bei 1920 U/min.- Motordrehzahl
* Oder: 619 U/min. bei Nenndrehzahl
* 1000 U/min. bei 2000 U/min.- Motordrehzahl ( Leistung = 66,3 kW )
* Oder: 1100 U/min. bei Nenndrehzahl ( Leistung = 70,4 kW )
* Wahlweise in der Ackergruppe als Wegzapfwelle zu verwenden
* Fahrweg je Zapfwellen-Umdrehung der 540 er-Zapfwelle = 0,158 m
* Fahrweg je Zapfwellen-Umdrehung der 1000 er-Zapfwelle = 0,090 m
* Optional aufsteckbare Riemenscheibe auf 1000 er-Zapfwelle, bei Stummel 1 3/8"- 21 teilig
* 280 mm Durchmesser und 220 mm Breite
* Drehzahl = 1423 U/min. bei Nenndrehzahl
* Riemengeschwindigkeit = 20,9 m/s
==Bremsen==
* Hydraulisch betätigte Doppel-Scheibenbremse mit WABCO-Bremskraftverstärker
* Zwei Bremsscheiben, links und rechts auf den Differential-Seitenwellen wirkend
* Bremsscheiben-Durchmesser = 256 mm
* Einzelrad-Bremse durch geteilte Bremspedale zu verwenden
* Unabhängige Hand-Feststellbremse als nasse Bandbremse ausgebildet, auf die Bremstrommel rechts am Differentialgehäuse wirkend
* Max. mittlere Verzögerung bei 25 km/h. = 3,2 m/s² mit 265 N-Pedalkraft
* Bremsweg = 10,4 m
* Optional mit Zweikreis-Druckluft-Bremsanlage
* Einführung automatischer Bremskolbenrücksteller für 9"-Bremse, ab 8/1978
==Achsen==
* Hinterradantrieb mit pendelnd aufgehängter Vorderachse
* Optional mit verstellbarer Spurweite ( 1530 bis 1910 mm )
* Allrad mit pendelnd aufgehängter, lastschaltbaren ZF-Lenktriebachse, Typ: APL-3052 bzw. APL-1552 mit seitlicher Gelenkwelle
* Kegelradgetriebe und Planetengetriebe-Endübersetzungen
* Optional, Kegelraddifferential mit selbsttätiger Sperre (Lok-O-Matic)
* Verstellbare Spurweite durch Radumschlag und Radscheiben
* Spurweiten = 1719/1819 und 1919 mm
* Hinterachse mit Kegelradgetriebe, Ritzel, Tellerrad und Planetengetriebe-Endübersetzungen
* Verstellbare Spurweite durch Radumschlag und Radscheiben, in Stufen von 100 mm
* Spurweiten = 1700 bis 2200 mm
* Pedal betätigte Kegelraddifferential mit selbstausrückender Sperre
Zul. Achslast der Allrad-Variante
* Vorne = 2860 kg
* Hinten = 5430 kg
* Änderung der Allrad-Achse von APL-3052 in APL-1552, ab 11/1979
==Lenkung==
* Achsschenkel-Hilfskraft-Lenkung mit hydraulisch-mechanischer Kraftübertragung
* Typ: ZF-Servostat oder Danfoss OSPB 125
* Hengstler-Differentialzylinder mit 60 mm Bohrung und 225 mm Hub
* Gemeinsamer Ölhaushalt mit Hydraulik
* Förderleistung der ZF-Lenkung = 18 l/min. bei 120 bar
* Förderleistung der Danfoss-Lenkung = 14 l/min. bei 110 bar
==Hydrauliksystem und Kraftheber==
* IH-Exact-Regel-Hydraulik in Blockbauweise, Typ: K-120 mit Unterlenkersteuerung
* Dreipunktaufhängung der Kategorie II mit Teleskop-Seitenführung und Schnellkuppler
* Oberlenker mit Schnellkuppler
* Kurze Geräteschiene (Ackerschiene), Einstellkurbel, vertikale und horizontale Starrstellmöglichkeit
* Einfachwirkender Arbeitszylinder mit 120 mm Bohrung und 168 mm Hub
* Überdruckventil des Hauptzylinder auf 210+10 bar eingestellt
* Optional mit Zusatz-Hubzylinder
* Bosch-Regel-Steuergerät zum Heben, Senken, Schwimmstellung, Zugwiderstands-und Lageregelung
* Hydraulische Transportsicherung durch Senkdrossel
* Bosch-Tandem-Zahnradpumpe, Typ: HY/ZFFS 11/11+8 L 158
* Förderleistung = 39,9 l/min. bei 147 bar oder max. 42,1 l/min. bei 158 bar
* Hydraulikleistung = 9,8 kW
* Max. Hubkraft an den Kupplungspunkten = 4325 kp
* Max. Hubkraft an den Kupplungspunkten mit Zusatz-Hubzylinder = 5225 kp
==Steuergeräte==
* Serienmäßig mit einem Bosch-Steuergerät
* Optional bis zu vier Zusatz-Steuergeräte
* Wahlweise einfach-oder doppelt wirkende Zusatz-Steuergeräte
* Betriebsdruck = 170 bar
==Elektrische Ausrüstung==
* Komplette elektrische Anlage 12 V, gem. StVZO inkl. Startsicherheitsschalter
* Batterie 12 V-110 Ah
* Bosch-Drehstromlichtmaschine, 14 V-33 A 27
* Bosch-Anlasser, JD 12 V-4 PS
Traktormeter
Betriebsstundenzähler, Motordrehzahl-, Zapfwellendrehzahl-, Geschwindigkeitsmesser
De-Luxe-Kombi-Instrument
Motoröldruckwarnlampe, Ladekontrollampe, Kraftstoffvorratsanzeiger,
Blink-Fernlichtkontrollampen, Kühlmitteltemperaturanzeiger,
Luftfilterverschmutzungsanzeiger
==Maße und Abmessungen==
Hinterrad Allrad
* Länge .............................. 4194 mm ......... 4229 mm
* Breite: ............................ 1749-2049 mm .....2208 mm
* Höhe(Kab./Bügel): .................. 2720 mm ..........2720 mm
* Spurweite(vorn): ................... 1530-1910 mm .....1624-1920 mm
* Spurweite(hinten):.................. 1704-2204 mm .....1704-2204 mm
* Radstand: .......................... 2626 mm ..........2587 mm
* Bodenfreiheit: ..................... 562 mm .......... 382 mm
* Wenderadius mit Lenkbremse .......... 4400 mm.........4670 mm
* Wenderadius ohne Lenkbremse ......... 5050 mm.........5320 mm
==Bereifung==
Standard-Bereifung
* Vorne = 7.50-18 AS Front, 6 PR
* Allrad-vorne = 11.2/10-28 AS, 6 PR
* Beide-hinten = 18.4/15-34 AS, 6 PR
Optional
* Vorne = 7.50-20 AS Front
* Allrad-vorne = 14.9-24, 12.4-28 und 13.6-28 AS
* Beide-Hinten = 18.4-38 und 16.9-38 AS
==Füllmengen==
* Kraftstoff: 140 l
* Kühlwasser: 24,4 l
* Motoröl: 12 l
* Getriebe: 42 l; mit Allrad: 46 l
* Hinterachsen: (je Seite) 7 l
* Bremsflüssigkeit: 0,6 l
* Hydraulikanlage: 26,5 l; mit Zusatztank: 34 l
* Allrad-Achse = 7 l
* Endantrieb-Vorderachse je 1 l
==Verbrauch==
* Optimaler Kraftstoffverbrauch = 223 g/kWh bei 31,0 kW und 990 U/min.
==Kabine==
IHC Cockpit
==Standardausrüstung==
IH-Sechszylinder-Viertakt-Dieselmotor D-358 mit Direkteinspritzung und 74 kW (105 PS) Dauerleistung;
Motorzapfwelle 540 + 1000 U/min mit Zapfwellenschutzschild;
Luftfilter mit Sicherheitselement und Wartungsanzeiger;
IH-Synchron 16+8-Getriebe und Zweifachkupplung, 30 km/h-Version, hydraulische Betriebsbremse mit Einzelradbremsung, unabhängige Handbremse;
Hydraulischer Kraftheber;
Exact-Regelhydraulik mit Oberlenkersteuerung und Dreipunktaufhängung Kat.2, DIN 9674, kurze Geräteschiene, Teleskopseitenführung, Einstellkurbel und Starrstellmöglichkeit für untere Lenker, äußerer Hydraulikbedienungshebel (hinten), Zusatzölbehälter;
Differentialsperre mit Fußbedienung;
Komplette elektrische Anlage 12V, gem. StVZO inkl. Startsicherheitsschalter, Batterie 110 Ah, Drehstromlichtmaschine 33 A, Traktormeter und Kombi-Instrument;
Frontgewicht, außen, mit eingegossenem Zugmaul, 180kg;
seitenschwenkbare und höhenverstellbare hintere Anhängerkupplung;
Luxus-Komfortsitz;
Fahrerkabine auf ISOMOUNT gelagert;
Beifahrersitz;
Vertikalauspuff;
Frostschutz;
Trittstufe;
Werkzeugkasten;
Vorderrad- und Hinterradkotflügel;
Planetenlenkgetriebeachse;
Allrad, während der Fahrt zu- und abschaltbar;
hydrostatische Lenkung;
kompinierter Scheibenwasch- und -wischanlage;
Heizungs- und Lüftungsgebläse;
ausstellbare Dachluke;
Außenspiegel;
Türen rechts und links verschließbar;
ausstellbare Seitenscheiben;
ausstellbare Heckscheibe;
Dreipunkt-Aufhängung und Anhängekupplung durch separates Aussellfenster bequem erreichbar;
==Sonderausrüstung==
Allradachse mit Selbstsperrdifferential
Zugmaulkoffergewicht 65 kg
Einzelkoffergewicht 47 kg bis zu 8 Stück
Hinterradgewichte jeweils 130 kg
Zugpendel mit Zugrahmen
Zugmaul zum Zugpendel
Geräteschienestarrstellung
einfach- /doppeltwirkende Zusatzsteuergeräte
Abreisskupplungen
Arbeitsscheinwerfer
Kompinierte Einleitungs/Zweileitungs-Druckluftbremsanlage
Höhenverstellbare Anhängerkupplung automatisch
Verstellfelgen vorne und hinten
Zusatzhubzylinder
==Sonstiges==
* Serien-Nummern = DO3 0811 D 001000 bis DO3 0811 D 005604
==Literatur==
* Prospekt IHC 1055 GER71-F
* Datenbuch der Schlepper aus Neuss (Buschmann/Dittmer/Hood) Seite 146
* OLDTIMER TRAKTOR Ausgabe 9/2014, Seite 10 ff.
==Quellen==
http://www.ihace.de/01_schlepper/1055/1055.htm ;
Prospekt IHC 1055 GER71-F;
==Weblinks==
{{commonscat|IHC 1055}}
http://www.ihace.de/
{{:Traktorenlexikon: Navigation |HERSTELLER-LINK=Traktorenlexikon:_IHC |HERSTELLER= IHC}}
51036ecqg6txdqpwkcqwat4jpu9c319
Strukturierte Programmierung
0
84057
1086419
1086412
2026-05-20T13:31:51Z
Bautsch
35687
/* Arrays */ 8 Bytes pro Gleitkommazahl
1086419
wikitext
text/x-wiki
{{Regal | ort=Programmierung}}
[[Datei:Programmierung.Java.Julia-Menge.png|mini|rechts|hochkant=2|Bildschirmaufnahme des mit Tastatursteuerung interaktiven Java-Programms [[Das Apfelmännchen/ FraktaleMengeAusgabe|FraktaleMengeAusgabe]] zur Berechnung und Darstellung von Julia-Mengen oder der Mandelbrot-Menge. Siehe auch '''Wikibook [[Das Apfelmännchen]]'''.]]
[[Datei:Programmierung.Java.Maze.png|mini|rechts|hochkant=2|Bildschirmaufnahme des Java-Programms [[Rekursive Labyrinthe/ MazeGraphs|Maze]] zur rekursiven Erstellung und Darstellung von Labyrinthen. Siehe auch '''Wikibook [[Rekursive Labyrinthe]]'''.]]
[[Datei:Programmierung.Java.SimForestFrame.png|mini|rechts|hochkant=2|Bildschirmaufnahme des Java-Programms [[Waldbrandsimulation/ SimForestFrame|SimForestFrame]] zur Simulation und Darstellung von sich ausbreitenden Waldbränden. Siehe auch '''Wikibook [[Waldbrandsimulation]]'''.]]
[[Datei:Programmierung.Java.Campingplatzraetsel.png|mini|rechts|hochkant=2|Bildschirmaufnahme des mit Maussteuerung interaktiven Java-Programms [[Campingplatzrätsel/ CampingplatzGraphs|CampingplatzGraphs]] zur Erstellung und Darstellung von Campingplatzrätseln. Siehe auch '''Wikibook [[Campingplatzrätsel]]'''.]]
[[Datei:Programmierung.Java.GameOfLife.png|mini|rechts|hochkant=2|Bildschirmaufnahme des Java-Programms "GameOfLife" zur Anzeige von Conways Spiel des Lebens. Siehe auch '''Wikibook [[Game of Life]]'''.]]
==Einleitung==
Das Buch '''Strukturierte Programmierung''' ist kein Lehrbuch zum Erlernen einer Programmiersprache, sondern soll als kleiner Leitfaden dazu dienen, besser strukturierte Programme erstellen zu können, selbst wenn die eingesetzten Programmiersprachen die strukturierte Programmierung weniger stark unterstützen.
<big>Warum lohnt es sich überhaupt, strukturiert zu programmieren ?</big>
Es gibt eine ganze Reihe von naheliegenden Gründen, aber auch einige Vorteile, die nicht auf der Hand liegen oder jedermann sofort ersichtlich sind. Anfänger und Fortgeschrittene profitieren gleichermaßen von gut strukturierter Programmierung. Die Vorteile sind so erheblich, dass es unbedingt sinnvoll ist, gut strukturiert zu programmieren. Im Folgenden werden einige wichtige Vorteile aufgeführt und erläutert:
*'''Strukturierte Programme sind leichter nachvollziehbar.''' Dies erleichtert die Arbeit im Team und vereinfacht die Wartung, wenn der Quellcode ergänzt, geändert oder korrigiert werden muss.
*'''Strukturierte Programme haben weniger Programmierfehler.''' Dies reduziert die Entwicklungszeiten und erhöht die Akzeptanz bei den Auftraggebern und Nutzern der Software.
*'''Strukturierte Programme können ohne Laufzeit-Debugger erstellt werden.''' Dies spart enorm viel Zeit und Nerven bei der Entwicklung von Software.
Die geringen Laufzeiteinbußen, die bei hoch strukturierter Programmierung von Anwendungssoftware gegenüber laufzeitoptimiertem Code entstehen können, spielen – sofern sie überhaupt existieren sollten – bei den heutzutage zur Verfügung stehenden modernen und schnellen Rechenmaschinen praktisch keine Rolle mehr. Programmcode wegzulassen, der der inhärenten Betriebssicherheit von Software oder der inhärenten Datenintegrität dient, macht nur in sehr wenigen, extrem zeitkritischen Anwendungen Sinn, keineswegs jedoch bei herkömmlichen oder gar sicherheitskritischen Anwendungsprogrammen.
Die Ratschläge aus diesem Buch beruhen auf jahrzehntelanger Erfahrung mit der Softwareentwicklung komplexer Systeme und dem Hochschulunterricht im Fach Programmierung mit verschiedenen Programmiersprachen.
Die folgende Check-Liste enthalt eine Reihe von wichtigen Kriterien, die bei strukturierter Programmierung berücksichtigt werden sollten:
* <big><big>'''[[Strukturierte Programmierung/ Checkliste|Checkliste]]'''</big></big>
Übrigens: ''In der Kürze der Quelltextdatei liegt nicht die wahre Würze des Programmierens !''
Und noch wichtiger:
:''So ists mit aller Bildung auch beschaffen:''
:''Vergebens werden ungebundne Geister''
:''Nach der Vollendung reiner Höhe streben.''
:''Wer Großes will, muß sich zusammenraffen;''
:''In der Beschränkung zeigt sich erst der Meister,''
:''Und das Gesetz nur kann uns Freiheit geben.''
::Johann Wolfgang von Goethe, Ende von ''Das Sonett''
Viel Erfolg beim strukturierten Programmieren wünscht [[Benutzer:Bautsch]] !
<div style="clear:both"></div>
==Quelltextgestaltung==
In diesem Abschnitt stehen einige Vorschläge zur allgemeinen Gestaltung der Quelltexte, die keine unmittelbare Auswirkung auf die Lauffähigkeit und die Funktion der Programme haben, aber dazu führen, dass der Quelltext besser verständlich und nachvollziehbar ist.
===Anweisungen===
Der Quelltext wird bei imperativen Programmiersprachen durch Anweisungen gestaltet, die ganz unterschiedlich geartet sein können. Zu den typischen und wichtigen Anweisungen gehören:
* Deklaration (declaration)
* Blockanweisung (block, begin / end)
* Zuweisung (assignment)
* Aufruf (call)
* Rücksprung (return)
* Verzweigung (branch)
* Schleife (loop)
* Sicherstellung (assertion)
Bei Kommentaren und Leerräumen (Leerzeichen, Tabulatoren, Zeilenumbrüche, ...) in Quelltexten handelt es sich nicht um Anweisungen, da sie vom Übersetzer (compiler) beziehungsweise Interpreter des Programmcodes ignoriert werden.
===Kommentare===
Jeder Quelltext sollte zu Beginn der Datei in einem von Compiler zu ignorierenden '''Kommentar''' einige Mindestangaben zum Inhalt und Ursprung machen. Dazu gehören der Dateiname, der Modulname (respektive Klassenname), die Autoren, Urheber oder Rechteinhaber, deren beabsichtigte Nutzungsarten/-rechte und Nutzungsbedingungen und weitere Angaben zur Lizenzierung, das Datum, eine Versionsangabe und die Angabe der verwendeten Programmiersprache (gegebenenfalls ebenfalls mit einer Versionsangabe).
Der Kommentartext wird bei vielen Programmiersprachen im Quelltext mit dem Symbolpaar "/*" und "*/" oder dem Symbolpaar "(*" und "*)" eingeschlossen.
Beispiel:
/*
Source file: editor.java
Program: editor
Author: Bautsch
License: public domain
Date: 7th January 2011
Version: 1.0
Programming language: Java
*/
Alle Methoden und Variablen werden ausreichend kommentiert, sofern sie nicht durch die Wahl „sprechender” Bezeichner selbsterklärend sind.
Bei Methoden werden insbesondere die Bedeutung aller Parameter und Rückgabewerte dokumentiert:
/* The method "add" computes and returns the sum of "summand1" and "summand2" */
double add (double summand1, double summand2)
{
double sum ← summand1 + summand2
return sum
}
Viele Entwicklungssysteme bieten Funktionen, die die Dokumentation der Quelltexte mit Kommentaren unterstützen.
Bei einigen Programmiersprachen ist Aufmerksamkeit geboten, wenn in der Sprachdefinition geschachtelte Kommentare nicht vorgesehen sind. Wird zum Beispiel während der Programmentwicklung Quelltext auskommentiert, um das Verhalten des modifizierten Programms zu überprüfen, und enthält dieser Quelltext einen Kommentar, ist dann nicht sofort erkennbar, welcher Abschnitt des Quelltextes tatsächlich auskommentiert werden soll. Dabei kann es auch vorkommen, dass einige Compiler die geschachtelten Kommentare erkennen und im eigentlichen Sinne des Programmierers berücksichtigen; andere Compiler, die sich streng an die standardisierten Sprachdefinitionen halten, jedoch nicht, so dass es bei der Portierung von Quellcode unweigerlich zu Übersetzungsfehlern kommt.
Das folgende Beispiel zeigt einen Programmabschnitt, bei dem hinter der letzten Anweisung zwischen den Zeichenfolgen "/*" und "*/" ein Textkommentar hinzugefügt wurde, der vom Compiler ignoriert werden soll.
int i ← 1
i ← i * i /* die Variable i wird quadriert. */
Wird zusätzlich mit den gleichen Zeichenfolgen "/*" und "*/" die gesamte Programmzeile auskommentiert, gibt es einen Übersetzungsfehler, wenn der Compiler die allerletzte Zeichenfolge "*/" als Kommentarende ohne Kommentaranfang interpretiert, sofern der zweite und nunmehr auskommentierte Kommentaranfang "/*" in der Zeile mit dem Textkommentar ignoriert wurde und die erste auftretende Zeichenfolge "*/" bereits als Kommentarende interpretiert wurde:
int i ← 1
/*
i ← i * i /* die Variable i wird quadriert. */
*/
===Leerräume===
'''Leerräume''', also zum Beispiel Leerzeichen, Zeilen- und Seitenumbrüche oder Tabulatoren, werden - genauso wie Kommentare - von vielen Compilern überlesen und dienen in diesen Fällen ausschließlich zur Verbesserung der Lesbarkeit für die Programmierer. Daher sollten diese Leerräume sorgfältig eingesetzt werden, um die Nachvollziehbarkeit des Quellcodes für Programmierer zu erleichtern. Bei einigen Programmiersprachen werden allerdings bestimmte Formatierungen in der Sprachdefinition gefordert und müssen dann natürlich den Vorgaben entsprechend eingehalten werden.
Viele Entwicklungssysteme bieten sehr nützliche, unterstützende Funktionen zur einheitlichen Formatierung der Quelltexte, die sehr einfach anzuwenden sind und daher auch unbedingt benutzt werden sollten. So ist es zum Beispiel allgemein üblich, Programmblöcke so zu formatieren, dass die Inhalte gegenüber dem Kopf und dem Fuß etwas (meist um einen Tabulator) eingerückt und durch Zeilenumbrüche voneinander getrennt werden:
Blockkopf
eingerückter Inhalt 1
eingerückter Inhalt 2
Blockfuß
Siehe hierzu auch [[Strukturierte Programmierung#Blockanweisungen|Blockanweisungen]].
===Bezeichner===
In den meisten Programmiersprachen gibt es '''Bezeichner''' (oder '''Identifikatoren''', englisch: '''identifier''') für ganz unterschiedliche Dinge, wie für symbolische '''Konstanten''', für '''Variablen''', für '''Parameter''' oder '''Attribute''', für '''Methoden '''(respektive für '''Prozeduren''' oder für '''Funktionen'''), für '''Module''' (respektive für '''Klassen''') oder für '''Bibliotheken'''. Zur Strukturierung von Daten werden auch '''Pakete''' (englisch: '''packages''') eingesetzt.
In der Regel stehen alle Buchstaben ohne Diakritika zur Verfügung. Oft sind auch noch Ziffern und der Unterstrich "_" erlaubt. Das erste Zeichen muss üblicherweise immer ein Buchstabe sein. Leerzeichen sind innerhalb von Bezeichnern im Allgemeinen nicht zulässig.
Beim Lesen und Analysieren von Quelltexten ist es sehr hilfreich, wenn einem Bezeichner nicht nur beim ersten Auftauchen bei der Deklaration, sondern an jeder Stelle im Programm sofort angesehen werden kann, wofür er steht. Meist bildet sich für eine Gruppe von Programmiersprachen ein bestimmter Usus aus, wie die entsprechenden Bezeichner gestaltet werden sollen. Der Compiler stellt in der Regel keine Ansprüche an die Schreibweise von Bezeichnern, solange der definierte Zeichenvorrat verwendet wird. Eine Ausnahme stellen die vorgegebenen Schlüsselwörter dar, die häufig und je nach Programmiersprache nur aus Großbuchstaben oder nur aus Kleinbuchstaben bestehen, wie zum Beispiel:
* '''IMPORT''', '''CONST''', '''TYPE''', '''VAR''', '''PROCEDURE''', '''NIL''', '''LONG''', '''REAL''', '''BEGIN''', '''END''', '''WHILE'''
versus
* '''import''', '''final''', '''void''', '''static''', '''null''', '''long''', '''double''', '''while'''
In vielen Programmiersprachen haben sich für die frei definierbaren Bezeichner bestimmte Praktiken herausgebildet, damit die Bedeutung der Bezeichner im Quelltext von den beteiligten Programmierern leichter erkannt werden kann. Dieses Vorgehen ist allerdings nicht immer einheitlich gestaltet, wie anhand der folgenden, beispielhaften Liste gesehen werden kann:
* Die Bezeichner von übergeordnet verfügbaren Konstanten, Variablen, Datentypen, Klassen oder Modulen beginnen mit '''einem Großbuchstaben'''.
* Die Bezeichner von Konstanten werden '''vollständig mit Großbuchstaben''' geschrieben.
* Die Bezeichner von lokal verfügbaren Variablen, Attributen oder Parametern werden '''vollständig mit Kleinbuchstaben''' geschrieben.
* Die Bezeichner von Methoden werden '''vollständig mit Kleinbuchstaben''' geschrieben.
====Variablen und Methoden====
So ist es zum Beispiel üblich, Variablen und Methoden mit Kleinbuchstaben zu benennen. Dabei ist der Unterschied zwischen Variable und Methode immer und einfach anhand der obligatorischen Parameterliste von Methoden zu erkennen, die beim Fehlen von Parametern leer ist und in vielen Programmiersprachen durch runde Klammern begrenzt ist und direkt hinter dem Methodennamen steht:
/* "diameter" is variable of the data type integer */
int diameter
/* "radius" is variable (parameter of the function "calcDiameter") of the data type integer */
/* "calcDiameter" is a function */
/* the result of the function call has the data type integer */
int calcDiameter (int radius)
"calcDiameter" ist hierbei mit dem Binnenmajuskel "D" versehen (umgangssprachlich auch "Kamelhöcker-Notation" genannt, englisch "camel case"), um den Anfang eines neuen Wortes ohne die Verwendung eines Leerzeichens erkennbar zu machen.
Es ist im Sinne der guten Lesbarkeit des Quelltextes allgemein hilfreich, in Bezeichnern immer passende grammatische Formen zu verwenden, wie zum Beispiel:
* für booleschen Variablen und Funktionen: Partizipien oder Adjektive
* für andere Variablen und Funktionen: Substantive
* für Methoden und Kommandos: Verben im Imperativ
In manchen Programmiersprachen ist es üblich, lokale Variablen mit einem Kleinbuchstaben zu beginnen und globale Variablen - also in mehreren Programmodulen, Klassen oder Methoden sichtbare Variablen - mit einem Großbuchstaben zu beginnen, um deren Sichtbarkeiten unmittelbar erkennbar zu machen.
====Konstanten====
Die Werte von Konstanten können zur Laufzeit nicht mehr verändert werden. Dieser Umstand wird dem Compiler bei der Deklaration der Konstanten durch entsprechende Deklarationen (wie zum Beispiel "CONST") oder Modifikatoren (wie zum Beispiel "final") mitgeteilt.
Damit an jeder Stelle des Quelltextes, also auch nach der Deklaration, erkannt werden kann, dass es sich um eine Konstante handelt, ist es hilfreich Konstanten mit einem '''Großbuchstaben''' beginnen zu lassen; manchmal werden für Konstanten sogar ausschließlich Großbuchstaben verwendet.
Es ist empfehlenswert, die Initialisierung einer Konstanten immer unmittelbar im Kontext der Deklaration vorzunehmen, damit es keine Mehrdeutigkeiten und somit auch keine Verwechslungen durch undefinierte Werte geben kann. Wenn dies nicht sinnvoll erscheint, sollte vorzugsweise keine Konstante verwendet werden. In vielen modernen Programmiersprachen ist es möglich, Klassenvariablen beziehungsweise globale Variablen zu schützen, indem diese nur innerhalb einer Klasse beziehungsweise innerhalb eines Moduls verändert werden dürfen. In diesem Fall gibt es von Außerhalb nur einen Lesezugriff auf den Wert der Variablen ("read-only"), oder der aktuelle Wert der Variablen kann durch den Aufruf eines Unterprogramms zurückgegeben werden ("get"-Methoden).
<syntaxhighlight lang="Pascal">
(* Programmiersprache Component Pascal*)
MODULE Zahlen;
(* Auf die globale ganzzahlige Konstante "Konstante" kann nur lesend zugegriffen werden. *)
(* Die globale Konstante "Konstante" ist durch Deklaration und Initialisierung vollständig definiert. *)
CONST
Konstante = 7;
(* Auf die globale ganzzahlige Variable "zahl" kann von außerhalb des Moduls "Zahlen" nur lesend zugegriffen werden. *)
(* Die globale Variable "zahl" wird mit dem Zusatz "-" als "read-only" deklariert. *)
VAR
zahl-: LONGINT;
BEGIN
(* Die globale Variable "zahl" wird mit einem Wert initialisiert. *)
zahl := 8;
END Zahlen.
</syntaxhighlight>
<syntaxhighlight lang="Java">
/* Programmiersprache Java*/
public class Zahlen;
{
// Auf die öffentliche ganzzahlige Klassenkonstante "Konstante" kann nur lesend zugegriffen werden.
// Die Klassenkonstante "Konstante" ist durch Deklaration und Initialisierung vollständig definiert.
// Die Klassenkonstante "Konstante" wird mit dem Zusatz "final" deklariert.
public static final long Konstante = 7;
// Auf die nicht-öffentliche ganzzahlige Klassenvariable "zahl" kann von außerhalb der Klasse
// nur über die öffentliche Methode "getZahl ()" lesend zugegriffen werden.
// Die Klassenvariable "zahl" wird mit dem Zusatz "private" deklariert.
private static long zahl = 8;
public static long getZahl ()
{
return zahl;
}
}
</syntaxhighlight>
Im folgenden Java-Beispiel wird eine als konstant deklarierte lokale Variable erst innerhalb einer Fallunterscheidung (if-Anweisung) und zudem mit zwei verschiedenen optionalen Werten initialisiert. Wenn die Deklaration und die optionalen Initialisierungen im Quelltext weiter auseinanderliegen, ist es schwierig, den definierten Zustand der vermeintlich eindeutig definierten Variablen vollständig zu erfassen.
<syntaxhighlight lang="Java">
private static boolean boolescherAusdruck ()
{
java.util.Random zufall = new java.util.Random ();
boolean zufaelligerBoolescherWert = zufall.nextBoolean ();
return zufaelligerBoolescherWert;
}
public static void main (java.lang.String [] arguments)
{
// Deklaration der lokalen Konstante "Zahl",
// die wegen fehlender Initialisierung nicht definiert ist.
final long Zahl;
if (boolescherAusdruck ())
{
Zahl = 7;
}
else
{
Zahl = 8;
}
java.lang.System.out.println ("Konstante Zahl = " + Zahl);
}
</syntaxhighlight>
====Klassen und Module====
Auch dauerhaft speicherbare Unterprogrammeinheiten wie '''Module''' oder '''Klassen''' werden meist mit einem Bezeichner benannt, der mit einem Großbuchstaben beginnt. Im Kontext des Quellcodes ist es immer möglich, diese Bezeichner von anderen zu unterscheiden, die ebenfalls mit einem Großbuchstaben beginnen, weil sie zum Beispiel immer von einer Blockanweisung (zum Beispiel geschweifte Klammern) oder auch von einem Separator (beispielsweise ".") gefolgt werden.
<syntaxhighlight lang="Pascal">
(* Das Unterprogramm "Programm" in der Programmiersprache Pascal *)
program Programm;
begin
end.
</syntaxhighlight>
<syntaxhighlight lang="modula2">
(* Das Unterprogramm "Programm" in den Programmiersprachen Modula-2, Oberon oder Component Pascal *)
MODULE Programm;
BEGIN
END Programm.
</syntaxhighlight>
<syntaxhighlight lang="Java">
// Das Unterprogramm "Programm" in der Programmiersprache Java
public class Programm;
{
}
</syntaxhighlight>
====„Sprechende” Bezeichner====
Die Wahl '''„sprechender“ Bezeichner''' hilft beim Lesen, Verstehen und Nachvollziehen von Quelltext ungemein. Häufig erübrigt sich sogar ein erläuternder Kommentar, wenn mit hinreichend „sprechenden“ Variablen- beziehungsweise Methodennamen gearbeitet wird.
Also nicht eine solche Anweisung:
h ← (t – b)
Sondern besser:
height ← (top - bottom)
Die verpasste Chance, einen Bezeichner sprechend zu benennen, kann in vielen Entwicklungssystemen durch sogenanntes ''Refactoring'' zentral für den gesamten Quelltext durch Umbenennung geheilt werden.
====Parameter====
Bei Methodenaufrufen werden '''alle Parameter''' mit Variablen oder mit Konstanten übergeben, also nicht mit '''komplexen Ausdrücken''' (beispielsweise arithmetische Berechnungen und Aufrufe von Unterprogrammen) oder mit '''Literalen''' (also direkt eingegebene Werte, wie 100 oder "Text").
Hier ein schlechtes Beispiel mit dem Aufruf des Java-Unterprogramms "zeichneRechteck" mit fünf kryptischen Parameterausdrücken in den runden Klammern. Jedes der fünf Literalen 50 hat eine eigene unabhängige Bedeutung, die bei dieser Schreibweise nicht unterschieden oder nachvollzogen werden können, was deswegen schnell zu Verwechslungen führen kann:
<syntaxhighlight lang="Java">
zeichneRechteck (50, 50, 50, berechneHoehe (50), 50);
</syntaxhighlight>
Ein strukturiertes Programm weist die Werte für alle fünf Parameter vor dem Aufruf des Unterprogramms an eigene Variablen mit sprechenden Bezeichnern zu:
<syntaxhighlight lang="Java">
int x = 50;
int y = 50;
int breite = 50;
int hoehe = berechneHoehe (breite);
int helligkeitProzent = 50;
zeichneRechteck (x, y, breite, hoehe, helligkeitProzent);
</syntaxhighlight>
Diese Anweisungsfolge ist im Gegensatz zu der Anweisung darüber auch ohne die explizite Kenntnisnahme der '''Deklaration des Unterprogramms''' verständlich:
<syntaxhighlight lang="Java">
/**
* Zeichnet ein Rechteck in das Bildschirmfenster
* @param x: x-Koordinate vom linken Bildschirmfensterrand nach rechts
* @param y: y-Koordinate vom oberen Bildschirmfensterrand nach unten
* @param breite: Breite des Rechtecks von x nach rechts
* @param hoehe: Hoehe des Rechtecks von y nach unten
* @param helligkeitProzent: Helligkeit des Rechtecks in Prozent (0 = schwarz, 100 = weiss)
*/
public static void zeichneRechteck (int x, int y, int breite, int hoehe, int helligkeitProzent)
</syntaxhighlight>
====Qualifizierte Bezeichner====
Damit der sich hinter einem Bezeichner verborgene Inhalt eindeutig einem Programmteil zugeordnet werden kann, muss dieser '''qualifiziert bezeichnet''' werden.
In manchen Programmiersprachen geschieht dies für bestimmte Bezeichner inhärent, obwohl es eine explizite import-Anweisung für die entsprechenden Bezeichner gibt, so dass die Programmierer in diesen Sonderfällen also wissen müssen, worauf sich der unqualifizierte Bezeichner bezieht. In der Programmiersprache Java dürfen häufig verwendete Bezeichner wie beispielsweise die zur Textausgabe verwendete Methode "print" aus der Klasse "System" oder die für Zeichenketten verwendete Klasse "String" ohne eine vollständige und qualifizierte Bezeichnung in den Programmtext geschrieben werden:
<syntaxhighlight lang="Java">
String text = "Hallo Welt!";
System.out.print (text);
</syntaxhighlight>
In der Variablen "text" der Klasse "String" wird die Zeichenkette "Hallo Welt!" gespeichert und mit der klassengebundenen Methode "print" der Klassenvariablen "out" aus der Klasse "System" ausgegeben. Hier ist allerdings nicht ohne weiteres ersichtlich, wo sich die Deklarationen oder die Implementierungen beiden Klassen "String" und "System" befinden.
Die '''qualifizierte Bezeichnung''' dieser beiden Anweisungen hat folgendes Aussehen:
<syntaxhighlight lang="Java">
java.lang.String text = "Hallo Welt!";
java.lang.System.out.print (text);
</syntaxhighlight>
Durch die qualifizierte Bezeichnung wird klar, dass sich beide Klassen im Programmpaket "java.lang" des Programmmoduls "java.base" befinden. Jedes Modul (englisch "module") und jedes Paket (englisch "package") kann in der Systembibliothek der Programmiersprache beziehungsweise in der Programmbibliothek der Laufzeitumgebung eindeutig zugeordnet werden.
Alternativ wird die Qualifikation von bestimmten Bezeichnern durch eine Import-Anweisung zu Beginn des Programms vorgenommen:
<syntaxhighlight lang="Java">
import java.lang.String;
import java.lang.System;
//...
String text = "Hallo Welt!";
System.out.print (text);
</syntaxhighlight>
Dieses Vorgehen erlaubt innerhalb einer Programmdatei zwar grundsätzlich eine korrekte und eindeutige Zuordnung der weiter unten im Programmtext verwendeten '''unqualifizierten''' Bezeichner, bei der Analyse des Programmtextes sind sämtliche Import-Anweisungen jedoch stets und vollständig zu berücksichtigen, was die Sache für die Programmierer insbesondere bei langen oder komplexen Quelltexten sehr erschweren kann. Dies kann durch die ausschließliche und obligatorische Verwendung von qualifizierten Bezeichnern ausgeschlossen werden, und deswegen wird von streng strukturierten Programmiersprachen überall und immer eine qualifizierte Bezeichnung gefordert.
Auch bei Datenstrukturen müssen qualifizierte Bezeichner verwendet werden, damit eindeutig auf bestimmte Datenfelder zugegriffen werden kann. Im folgenden Beispiel in der Syntax der '''Pascal'''-Programmiersprachenfamilie wird dies anhand des komplexen Datentyps "Postadresse" mit den sechs Attributen "vorname", "nachname", "strasse", "hausnummer", "postleitzahl" und "ort" dargestellt:
<syntaxhighlight lang="Pascal">
(* Datentyp "Postadresse" *)
TYPE Postadresse =
RECORD
vorname: ARRAY OF CHAR;
nachname: ARRAY OF CHAR;
strasse: ARRAY OF CHAR;
hausnummer: ARRAY OF CHAR;
postleitzahl: LONGINT;
ort: ARRAY OF CHAR;
END;
</syntaxhighlight>
In den Deklarationen der Attribute steht "ARRAY OF CHAR" für den Datentyp Zeichenkette, der zur Speicherung von Zeichenfolgen verwendet wird. Der Datentyp "LONGINT" dient zur Speicherung ganzer Zahlen.
Eine Instanz "adresse" dieses Datentyps "Postadresse" kann wie folgt mit der NEW-Prozedur erzeugt werden, wobei der dafür erforderliche Speicherplatz festgelegt und für andere Verwendungen gesperrt wird. Auf die sechs einzelnen Datenfelder der in "adresse" gespeicherten sechs Attribute des Datentyps "Postadresse" kann danach im Programm mit den entsprechenden qualifizierten Bezeichnern beispielsweise zugegriffen werden, indem die jeweiligen initialen Werte mithilfe des Zuweisungsoperators := zugewiesen werden. Auf die Prozeduren "String" und "Int" aus dem Modul "Out" wird über "Out.String" und "Out.Int" ebenfalls qualifiziert zugegriffen:
<syntaxhighlight lang="Pascal">
IMPORT
Out; (* Import des Moduls "Out" mit den Textausgabe-Prozeduren "String" für Zeichenketten und "Int" für ganze Zahlen *)
VAR
adresse: Postadresse; (* globale Variable "adresse" *)
BEGIN
NEW (adresse); (* Speicherreservierung für den Bezeichner "adresse" *)
adresse.vorname := "Irgend";
adresse.nachname := "Jemand";
adresse.strasse := "Allee";
adresse.hausnummer := "100";
adresse.postleitzahl := 10000;
adresse.ort := "Irgendwo";
Out.String (adresse.vorname);
Out.String (adresse.nachname);
Out.String (adresse.strasse);
Out.String (adresse.hausnummer);
Out.Int (adresse.postleitzahl);
Out.String (adresse.ort);
END;
</syntaxhighlight>
In einem weiteren Beispiel mit der Syntax der Programmiersprache '''Java''' wird die Datenstruktur dieses komplexen Datentyps als Klasse "Postadresse" mit den sechs Instanzvariablen "vorname", "nachname", "strasse", "hausnummer", "postleitzahl" und "ort" für diese sechs Attribute gebildet. Eine Instanz dieses Datentyps kann hier mit dem new-Operator erzeugt werden. Der öffentliche Konstruktor "Postadresse ()" ist eine Methode mit derselben Bezeichnung wie die Klasse selbst, die aufgerufen werden muss, um die sechs Datenfelder der jeweiligen Instanz "this" zu initialisieren. Auf die einzelnen Datenfelder der in der nicht-öffentlichen Klassenvariable "adresse" gespeicherten sechs Attribute des Datentyps "Postadresse" kann danach über die entsprechenden sechs qualifizierten Bezeichner zugegriffen werden. In der Methode "main" werden die Attribute zwischen den runden Klammern über die qualifizierten Bezeichner als Parameter bei den Aufrufen der allgemeinen Textausgabe-Methode "println" verwendet, die zur Klassenvariable "out" der Klasse "System" im Programmpaket "java.lang" gehört:
<syntaxhighlight lang="Java">
public class Postadresse // Klasse "Postadresse"
{
// Instanzvariablen
java.lang.String vorname;
java.lang.String nachname;
java.lang.String strasse;
java.lang.String hausnummer;
long postleitzahl;
java.lang.String ort;
private static Postadresse adresse = new Postadresse (); // Klassenvariable "adresse"
public Postadresse () // Konstruktor der Klasse "Postadresse"
{
this.vorname = "Irgend";
this.nachname = "Jemand";
this.strasse = "Allee";
this.hausnummer = "100";
this.postleitzahl = 10000;
this.ort = "Irgendwo";
}
public static void main (java.lang.String [] argumente) // main-Methode der Klasse "Postadresse"
{
java.lang.System.out.println (adresse.vorname);
java.lang.System.out.println (adresse.nachname);
java.lang.System.out.println (adresse.strasse);
java.lang.System.out.println (adresse.hausnummer);
java.lang.System.out.println (adresse.postleitzahl);
java.lang.System.out.println (adresse.ort);
}
}
</syntaxhighlight>
====Komplexe Anweisungen====
In der Programmiersprache Java kann die Gestaltung eines softwaretechnischen Containers "host" beispielsweise mit der Variablen "layout" realisiert werden. Hierzu werden Instanzen von Objekten der Klassen "Container" und "GroupLayout" erzeugt:
<syntaxhighlight lang="Java">
java.awt.Container host = new java.awt.Container ();
javax.swing.GroupLayout layout = new javax.swing.GroupLayout (host);
</syntaxhighlight>
Eine multiple qualifizierte Bezeichnung zur Referenzierung von Datenfeldern mit diversen Aufrufen typengebundener Methoden (Unterprogramme) kann dann mit einer einzigen hyperkomplexen Anweisung in einer Zeile zusammengefasst werden:
<syntaxhighlight lang="Java">
layout.setVerticalGroup (layout.createParallelGroup (javax.swing.GroupLayout.Alignment.LEADING).addGroup (layout.createSequentialGroup ().addContainerGap ().addGroup(layout.createParallelGroup (javax.swing.GroupLayout.Alignment.LEADING).addGroup (layout.createSequentialGroup().addGroup (layout.createParallelGroup (javax.swing.GroupLayout.Alignment.BASELINE))))));
</syntaxhighlight>
Mit Zeilenumbrüchen wird der inhaltlich identische Quelltext schon besser nachvollziehbar:
<syntaxhighlight lang="Java">
layout.setVerticalGroup
(
layout.createParallelGroup (javax.swing.GroupLayout.Alignment.LEADING)
.addGroup (layout.createSequentialGroup ()
.addContainerGap ()
.addGroup (layout.createParallelGroup (javax.swing.GroupLayout.Alignment.LEADING)
.addGroup (layout.createSequentialGroup()
.addGroup (layout.createParallelGroup (javax.swing.GroupLayout.Alignment.BASELINE)))))
);
</syntaxhighlight>
Durch Verwendung von Hilfsvariablen mit sprechenden Bezeichnern wird der Quelltext zwar etwas länger, aber noch verständlicher. Die Komplexität ist deutlich reduziert, und die Anweisungsfolge kann viel einfacher nachvollzogen, überprüft oder angepasst werden:
<syntaxhighlight lang="Java">
javax.swing.GroupLayout.SequentialGroup sequentialGroup2 = layout.createSequentialGroup ();
javax.swing.GroupLayout.ParallelGroup parallelBaselineGroup = layout.createParallelGroup (javax.swing.GroupLayout.Alignment.BASELINE);
sequentialGroup2 = sequentialGroup2.addGroup (parallelBaselineGroup);
javax.swing.GroupLayout.ParallelGroup parallelLeadingGroup2 = layout.createParallelGroup (javax.swing.GroupLayout.Alignment.LEADING);
parallelLeadingGroup2 = parallelLeadingGroup2.addGroup (sequentialGroup2);
javax.swing.GroupLayout.SequentialGroup sequentialGroup1 = layout.createSequentialGroup ();
sequentialGroup1 = sequentialGroup1.addContainerGap ();
sequentialGroup1 = sequentialGroup1.addGroup (parallelLeadingGroup2);
javax.swing.GroupLayout.ParallelGroup parallelLeadingGroup1 = layout.createParallelGroup (javax.swing.GroupLayout.Alignment.LEADING);
parallelLeadingGroup1 = parallelLeadingGroup1.addGroup (sequentialGroup1);
layout.setVerticalGroup (parallelLeadingGroup1);
</syntaxhighlight>
==Programmgestaltung==
Idealerweise kann die kontextfreie Grammatik der verwendeten Programmiersprache mit einer strukturierten Metasprache, wie zum Beispiel der '''Erweiterten Backus-Naur-Form''' ('''EBNF''') nach der Norm ISO/IEC 14977 dargestellt werden. Jedes strukturierte Programm und jede Datenstruktur kann damit eindeutig definiert werden. Leider trifft dies für viele Programmiersprachen nicht zu. Die Darstellung beliebiger ganzer Zahlen (sowohl negative, als auch positive und die Null) mit Zeichen kann in der Erweiterten Backus-Naur-Form zum Beispiel schrittweise so definiert werden:
<syntaxhighlight lang="ebnf">
NatuerlicheZiffer = "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9";
Ziffer = "0" | NatuerlicheZiffer;
NatuerlicheZahl = NatuerlicheZiffer{Ziffer};
GanzeZahl = "0" | ["-"]NatuerlicheZahl;
</syntaxhighlight>
[[Datei:Nassi-Shneiderman diagram - InsertionSort.svg|mini|rechts|hochkant=2|Beispiel für einen Algorithmus mit zwei geschachtelten, kopfgesteuerten Schleifen in der Darstellung als Nassi-Shneidermann-Diagramm.]]
Programme können als '''Struktogramm''' (auch '''Nassi-Shneidermann-Diagramm genannt''') nach Norm DIN 66261 notiert werden. Alle Teilprogramme sind dabei so geartet, dass sie ausgehend von einem einfachen Hauptblock, der für das gesamte Programm und somit für mindestens einen Unterprogrammaufruf steht, durch schrittweise Verfeinerung hierarchisch zusammengesetzt werden können. Am Ende der Hierarchie stehen dann elementare Teilprogramme, die nicht weiter zerlegt werden können.
Die zyklomatische Komplexität der Software kann zum Beispiel mit der '''McCabe-Metrik''' untersucht und analysiert werden. Hierbei sollte darauf geachtet werden, dass die Komplexität beschränkt bleibt, damit der Quelltext überschaubar bleibt und gut nachvollzogen werden kann. Durch geeignete Strukturierung ist dies in modernen Programmiersprachen immer möglich, und mit einer McCabe-Metrik bis maximal 10 ist die Komplexität meist hinreichend niedrig.
Dies gilt nicht nur für den prozeduralen Programmablauf, sondern gleichermaßen für Datenstrukturen, bei denen komplexe Datentypen aus elementaren Datentypen übersichtlich und hierarchisch zusammengesetzt werden können.
Wichtig ist, dass die Anzahl der Programmzeilen ('''lines of code''') zwar gut als Maß für das zeitliche Wachstum einer bestimmten Software herangezogen werden kann, dies jedoch nicht geeignet ist, um eine Aussage über die Qualität oder Strukturiertheit des Programmcodes zu treffen. Weder eine besonders kleine noch eine besonders große Anzahl von Programmzeilen sind ein Garant für guten oder strukturierten Code.
Das Optimum ist nicht erreicht, wenn nichts mehr hinzugefügt werden kann, weil schon alles implementiert ist, sondern wenn nichts mehr entfernt werden kann, ohne dass die Implementierung hiervon beeinträchtigt wird (frei nach Antoine de Saint-Exupéry in ''Wind, Sand und Sterne - Terre des Hommes'' (1939)).
Programmieren ist nicht nur ein einfaches Handwerk, sondern eine anspruchsvolle Kunstfertigkeit (vergleiche auch Donald E. Knuth: ''The Art of Computer Programming'').
<div style="clear:both"></div>
===Sichtbarkeiten===
Grundsätzlich gilt immer das '''Prinzip der Lokalität'''. Dies bedeutet, dass auf Programmkonstrukte nur dort zugegriffen werden kann und darf, wo es unbedingt erforderlich ist. Zum Datenaustausch zwischen verschiedenen Programmteilen dienen unter diesen Voraussetzungen Schnittstellen, die in der strukturierten Programmierung exakt definiert sein müssen.
Alle Klassenvariablen, Instanzvariablen und Parametervariablen sowie Rückgabewerte werden in Bezug auf ihre Teilprogramme zum Beispiel als '''lokale Variablen''' behandelt, so dass sie nur innerhalb dieser Teilprogramme aufgerufen und verändert werden können. Auf diese Weise können unbeabsichtigte und unerwünschte Seiteneffekte nachhaltig vermieden werden.
Je weniger lokal eine Variable definiert ist, desto größer ist die Gefahr, dass diese unbeabsichtigt oder sogar zuwider den Absichten des Programmierers verändert werden kann, was dann zu entsprechend dramatischen und schwer identifizierbaren Programmfehlern führen kann, die zudem erst zur Laufzeit auftreten und oft nur zufällig und somit umso schwerer zu entdecken sind. Variablen sollen also immer so '''lokal''' wie möglich definiert werden. Am besten sind Variablen lokalisiert, wenn sie innerhalb der Teilstruktur definiert werden, wo die Variablen üblicherweise „sichtbar” (und demzufolge verwendbar) sind. Außerhalb der Blöcke sind diese Variablen dann „unsichtbar” und somit auch nicht benutzbar.
Für Programmiersprachen die keine explizite Blockanweisung für Teilprogramme haben, ist die am stärksten lokalisierte Definition in der Regel innerhalb einer Methode respektive einer Prozedur oder einer Funktion. Die nächsthöhere Strukturebene ist dann - sofern möglich - das Modul beziehungsweise die Klasse (dies ist zwar häufig eine vom Compiler zu übersetzende Einheit, ist jedoch nicht unbedingt identisch mit einer Quelltextdatei). Innerhalb von Programmstrukturen sollten Variablen möglichst mit dem Sichtbarkeitsmodifikator für die ausschließlich interne Verwendbarkeit (zum Beispiel mit dem Modifikator ''private'' oder ''limited'') deklariert werden. Solche internen Variablen können dann gegebenenfalls mit entsprechend zu implementierenden Konstruktoren initialisiert, mit sogenannten Getter-Methoden abgefragt und mit Setter-Methoden verändert werden. Falls diese exportiert werden (beispielsweise mit dem Modifikator ''public'' oder ''export''), ist auch außerhalb der Deklarationsstruktur ein definierter indirekter Zugriff auf die internen Variablen möglich.
Manche Programmiersprachen erlauben eine Deklaration, die außerhalb des Deklarationsbereiches nur gesehen respektive gelesen werden können (zum Beispiel mit dem Modifikator ''read-only'' für Variablen oder ''implement-only'' für Methoden). In diesem Fall können die entsprechenden Variablen oder Methoden außerhalb der Deklarationsstruktur also nicht verändert, aber zumindest abgefragt oder aufgerufen werden.
'''Globale Variablen''', die überall innerhalb von großen Programmeinheiten verändert werden können, sind immer vermeidbar, erhöhen die Gefahr von Programmfehlern und erleichtern unter Umständen Cyber-Attacken.
Besondere Probleme ergeben sich, wenn innerhalb eines Sichtbarkeitsbereiches für verschiedene Dinge gleichlautende '''Bezeichner''' verwendet werden dürfen. Dies kann wegen der Wahlfreiheit bei der Benennung sehr leicht vermieden werden, indem einfach keine gleichlautenden Bezeichner benutzt werden. Im folgenden Beispiel wird verdeutlicht, wie in einem Java-Programm zwischen den Bezeichnern von lokalen und globalen Variablen sowie von Methoden formal dennoch eindeutig unterschieden werden kann:
<syntaxhighlight lang="Java">
public class Klasse
{
// globale Variable "bezeichner" (Klassenvariable)
private static long bezeichner = 1;
// Methode "bezeichner" (Unterprogramm)
private static long bezeichner ()
{
// lokale Variable "bezeichner" in der Methode "bezeichner"
long bezeichner = 3;
return bezeichner;
}
// Hauptprogramm (Methode "main")
public static void main (java.lang.String [] argumente)
{
// Ausgabe der globalen Variable aus der Klasse "Klasse"
java.lang.System.out.println ("Wert der globalen Variable = " + Klasse.bezeichner);
// lokale Variable "bezeichner" in der Methode "main"
long bezeichner = 2;
// Ausgabe der lokalen Variable aus der Methode "main"
java.lang.System.out.println ("Wert der lokalen Variable = " + bezeichner);
// Ausgabe des Ergebnisses des Aufrufs der Methode "bezeichner"
java.lang.System.out.println ("Wert des Unterprogramms = " + bezeichner ());
}
}
</syntaxhighlight>
In dieser Java-Klasse "Klasse" gibt es vier gleichlautende Bezeichner "bezeichner":
* Der Name einer '''globalen Klassenvariable'''.
* Der Name einer '''Methode'''.
* Der Name einer '''lokalen Variable''' in der Methode "bezeichner".
* Der Name einer '''lokalen Variable''' in der Methode "main".
Nach den Regeln der Programmiersprache Java haben lokale Bezeichner bei der Referenzierung innerhalb einer Blockanweisung Vorrang, so dass bei der Verwendung dieser Bezeichner immer auf die lokale Variable zugegriffen wird. Im obigen Beispiel haben die beiden lokalen Variablen "'''bezeichner'''" nichts miteinander zu tun und können nur in ihrer entsprechenden Methode referenziert werden. Soll in einem lokalen Sichtbarkeitsbereich auf die globale Klassenvariable referenziert werden, so kann dies durch einen expliziten und '''qualifizierten Bezeichner''' erwirkt und sichergestellt werden, im obigen Beispiel mit "'''Klasse.bezeichner'''". Der Bezeichner einer Methode kann durch das stets folgende runde Klammerpaar identifiziert werden, im obigen Beispiel "'''bezeichner ()'''".
===Modularisierung===
Teilprogramme können Methoden oder ganze Sammlungen von Datenstrukturen und Methoden sein. Diese werden oft '''Klassen''' oder '''Module''' genannt und können in '''Paketen''' gruppiert werden. Alle Teilprogramme sollen eindeutige und sprechende Bezeichner und streng definierte Signaturen und Schnittstellen für die Namen und die Datentypen aller Parameter beziehungsweise Klassen- und Instanzvariablen haben. Bei diesen Teilprogrammen handelt es sich in der Regel um die kleinsten dauerhaft speicherbaren Programmeinheiten, die zum Beispiel in einer Datenbank oder einem Dateisystem zu größeren Einheiten wie Verzeichnissen, Paketen oder Bibliotheken zusammengefasst werden.
Solche Programmeinheiten werden durch ihre '''Signatur''' eindeutig gekennzeichnet. Die Signatur besteht zunächst aus dem '''Namen''' der Programmeinheit. Ferner kann mit einem Modifikator explizit definiert werden, dass diese Programmeinheit allgemein, also von allen und beliebigen anderen Programmeinheiten, verfügbar sein soll (Modifikator ''public'' / ''öffentlich''). Für eine Beschränkung nur auf die nächst höhere Programmeinheit, wie beispielsweise einem Paket (englisch "package"), kann der Modifikator ''private'' verwendet werden.
Eine typische Programmbibliothek hat in der Programmiersprache Java am Beispiel des Moduls "java.base" und der beiden Pakete "java.io" und "java.lang" folgende ausschnittsweise Struktur und Hierarchie:
<syntaxhighlight lang="Java">
module java.base;
package java.io;
class Reader;
{
// Implementation der Klasse Reader
}
class Writer;
{
// Implementation der Klasse Writer
}
package java.lang;
class String;
{
// Implementation der Klasse String
}
class System;
{
// Implementation der Klasse System
}
</syntaxhighlight>
===Methoden===
'''Methoden''' beziehungsweise '''Prozeduren''' werden ebenfalls durch ihre '''Signatur''' eindeutig deklariert, und alle Methodenaufrufe müssen sich streng an diese Deklaration halten. Die Signatur besteht zunächst aus dem '''Namen''' der Methode.
Methoden haben optional einen '''Rückgabewert''', für die der Datentyp ebenfalls festgelegt werden muss und der in streng strukturierten Programmiersprachen ebenfalls zur Signatur der Methode gehört und verwendet werden muss. Solche Methoden werden auch '''Funktionen''' genannt. Leider ist es in manchen Programmiersprachen erlaubt, Rückgabewerte von Funktionen einfach zu ignorieren und diese nicht in einer Variablen zu speichern oder im Rahmen eines Ausdrucks auszuwerten, da dies zu leicht zu übersehenden Programmierfehlern führen kann.
Ferner gibt es innerhalb der Signatur optionale '''Modifikatoren''', die die Regeln für die Sichtbarkeit (zum Beispiel ''öffentlich'' / ''privat'' / ''eingeschränkt'', englisch: ''public'' / ''private'' / ''limited'') festlegen.
Die Überschreibbarkeit einer Methode wird mit einem weiteren Modifikator festgelegt (wie zum Beispiel mit ''statisch'' / ''erweiterbar'' / ''abstrakt'' / ''abgeschlossen'', englisch: ''static'' / ''extensible'' / ''abstract'' / ''final'').
Methoden haben keinen, einen oder mehrere '''Parameter'''. Methoden ohne Parameter werden auch parameterlose Methoden genannt. Parameter sind innerhalb der Methode lokale Variablen, die beim Aufruf der Methode angegeben werden müssen und gegebenenfalls zusammen mit dem Rückgabewert die Schnittstelle für den Datenaustausch zum aufrufenden Programm darstellen. Die Anzahl, die Namen, die Datentypen und die Reihenfolge der '''Parameter''' gehören ebenfalls zur Signatur einer Methode. Beim Aufruf einer Methode müssen alle Parameter in der richtigen Reihenfolge und zuweisungskompatibel angegeben werden. Parameter können unterschieden werden in:
* '''Eingangsparameter''' ('''in'''), die als Wert (englisch ''value'') übergeben und nur innerhalb der Methode verwendet werden. Nach Beendigung des Methodenaufrufs sind sie ungültig und dürfen nicht weiterhin referenziert werden.
* '''Ausgangsparameter''' ('''out'''), die als Referenzen (Zeiger auf einen Speicherbereich, englisch ''pointer'') übergeben und deren Werte erst innerhalb der Methode ermittelt und zugewiesen werden. Nach Beendigung des Methodenaufrufs sind ihre Werte über die Referenzen abrufbar. Die referenzierten Speicherbereiche müssen vor dem Methodenaufruf allokiert worden sein, aber die Speicherinhalte müssen nicht festgelegt werden, da sie innerhalb der Methode nicht verwendet, sondern bestimmt und zugewiesen werden. Beim Programmieren ist große Sorgfalt darauf zu legen, dass die entsprechenden Zuweisungen innerhalb der Methode in jedem Fall erfolgen, falls die verwendete Programmiersprache dies nicht sowieso vorschreibt und erzwingt.
* '''Durchgangsparameter''' ('''var'''iable), die als Referenzen mit definierten Speicherinhalten übergeben, innerhalb der Methode verwendet und nach einer möglichen Veränderung (respektive '''Var'''iation) während des Methodenaufrufs weiterverwendet werden können. Nach Beendigung des Methodenaufrufs sind ihre aktuellen Werte in den aufrufenden Programmteilen über die Referenzen abrufbar.
===Grundlegende Anweisungen===
Grundsätzlich kommt die strukturierte Programmierung in imperativen Programmiersprachen mit folgenden grundlegenden Anweisungen aus:
* '''Deklaration''', zum Beispiel bei Klassen, Methoden, Variablen oder Konstanten mit einer eindeutigen Signatur:
** '''Modifikatoren''' für die Sichtbarkeit, Verwendbarkeit oder Veränderbarkeit
** '''Bezeichner'''
** Optional (bei Methoden, Funktionen, Prozeduren): '''Parameter''' mit Deklaration der Bezeichner, der Veränderbarkeiten und der Datentypen
** Optional (bei Funktionen): Datentyp des '''Rückgabewertes'''
* '''Blockanweisung''', zum Beispiel BEGIN ... END oder { ... }
* '''Zuweisung''', zum Beispiel a := b - c; (das Gleichheitseichen ist nicht zu verwechseln mit einem Vergleichsoperator)
* '''Aufruf von Unterprogrammen''':
** '''Kommandos''' (ohne Parameter und ohne Rückgabewert)
** '''Prozeduren''' oder Methoden (ohne Rückgabewert)
** '''Funktionen''' (mit Rückgabewert)
* '''Rückgabe''' bei Funktionen, zum Beispiel return x;
Anweisungen werden häufig durch ein reserviertes Zeichen abgeschlossen, wie zum Beispiel mit einem Semikolon.
Das folgende Beispiel zeigt eine Java-Klasse mit 15 grundlegenden Anweisungen:
<syntaxhighlight lang="Java">
// Deklaration der oeffentlichen Klasse "Anweisungen"
public class Anweisungen
// Implementation der Klasse mit einer Blockanweisung "{}"
{
// Deklaration der privaten, globalen Klassenvariable "flaeche" vom Datentyp "double"
private static double flaeche;
// Deklaration der privaten statischen Methode "kreisflaeche" (Unterprogramm) zur Berechnung der Flaeche eines Kreises mit dem Radius "radius"
// mit dem Parameter "radius" vom Datentyp "double"
// und mit einer Gleitkommazahl vom Datentyp "double" als Rueckgabewert
private static double kreisflaeche (double radius)
// Implementation der Methode "kreisflaeche" mit einer Blockanweisung "{}"
{
// Deklaration der lokalen Variable "ergebnis" vom Datentyp "double"
double ergebnis;
// Zuweisung eines Ausdrucks an die Variable "ergebnis" mit dem Zuweisungsoperator "="
// Syntax: "Variablenname Zuweisungsoperator Ausdruck Semikolon"
// Der arithmetische Ausdruck verwendet zwei Multiplikationsoperatoren "*"
// Die Kreiszahl pi aus der Klasse "java.lang.Math" wird qualifiziert bezeichnet: "java.lang.Math.PI"
ergebnis = java.lang.Math.PI * radius * radius;
// Ruecksprunganweisung "return" mit der Rueckgabe der Gleitkommazahl "ergebnis"
return ergebnis;
}
// Deklaration der oeffentlichen statischen Methode main (Hauptprogramm)
public static void main (java.lang.String [] arguments)
// Implementation der Methode "main" mit einer Blockanweisung "{}"
{
// Deklaration der lokalen Variable "raddurchmesser" vom Datentyp double
double raddurchmesser;
// Initialisierung der lokalen Variable "raddurchmesser" durch Zuweisung des konstanten arithmetischen Zahlenausdrucks "1.5"
raddurchmesser = 1.5;
// Aufruf der Methode "kreisflaeche" mit dem arithmetischen Ausdruck "raddurchmesser / 2" als Parameter
// Der Rueckgabewert des Methodenaufrufs ist ein Ausdruck und wird der globalen Klassenvariablen "flaeche" zugewiesen
flaeche = kreisflaeche (raddurchmesser / 2);
// Aufruf der Methode "println" mit dem Parameter "flaeche" zur Ausgabe der berechneten Kreisflaeche
// Die Methode aus der Klasse "java.lang.System" wird qualifiziert bezeichnet: "java.lang.System.out.println"
java.lang.System.out.println (flaeche);
}
}
</syntaxhighlight>
Diese Anweisungen sind in der Reihenfolge des Auftretens:
# '''Deklaration''' der Klasse "Anweisungen"
# '''Blockanweisung''' zur Implementation der Klasse "Anweisungen"
# '''Deklaration''' der Klassenvariable "flaeche"
# '''Deklaration''' der Methode "kreisflaeche" (Unterprogramm)
# '''Blockanweisung''' zur Implementation der Methode "kreisflaeche"
# '''Deklaration''' einer lokalen Variable "ergebnis" in der Methode "kreisflaeche"
# '''Zuweisung''' an die lokale Variable "ergebnis" in der Methode "kreisflaeche"
# '''Rücksprung''' vom Unterprogramm "kreisflaeche" zum Hauptprogramm "main"
# '''Deklaration''' der Methode "main" (Hauptprogramm)
# '''Blockanweisung''' zur Implementation der Methode "main"
# '''Deklaration''' der lokalen Variable "raddurchmesser"
# '''Zuweisung''' an die lokale Variable "raddurchmesser"
# '''Aufruf''' des Unterprogramms "kreisflaeche"
# '''Zuweisung''' an die globale Klassenvariable "flaeche"
# '''Aufruf''' des Unterprogramms "println"
===Anweisungsstrukturen===
Anweisungesstrukturen setzen sich aus mehreren Anweisungen zusammen. Eine Methode besteht zum Beispiel aus einer Deklaration mit der Definition der Schnittstelle, der unmittelbar eine Blockanweisung mit der Implementierung folgt.
Zu den weiteren elementaren Anweisungsstrukturen für Teilprogramme gehören:
* '''Anweisungsfolgen'''
* '''Kontrollstrukturen'''
** '''Fallunterscheidungen'''
*** bedingte Anweisungen (if - then)
*** einfache Verzweigungen (if - then - else)
*** mehrfache Verzweigungen (switch - case - else)
** '''Wiederholungen (Schleifen)'''
*** kopfgesteuerte Schleifen (while-Schleifen, for-Anweisungen)
*** fußgesteuerte Schleifen (repeat - until, do - while)
Bei jedem elementaren Teilprogramm (respektive jeder Methode, Prozedur oder Funktion, aber auch bei jeder Definition von Datenstrukturen) sollte der Quelltext bequem und vollständig auf einer Bildschirmseite gelesen werden können, ohne dass der Text im Betrachtungsfenster verschoben werden muss. Dabei empfiehlt es sich, Methodenaufrufe und übersichtliche Blockanweisungen zu verwenden, mit denen der Quellcode in Unterabschnitte gegliedert werden kann (Verfeinerung).
Im folgenden Beispiel werden drei geschachtelte Blockanweisungen durch jeweils ein Paar geschweifter Klammern begrenzt. Die äußersten Klammern dienen zur Begrenzung der Implementation der Methode "printMonth", die inneren Blockanweisungen sind ebenso wie alle anderen Anweisungen nach rechts eingerückt:
printMonth ()
{
const int NumberOfWeekdays ← 7
const int LastDay ← 31
int column
int day ← 1
while (day <= LastDay)
{
printInt (day)
column ← day modulo NumberOfWeekdays
if (column = 0)
{
printLine ()
}
day ← day + 1
}
}
Wächst die Länge einer Methode zu sehr an, können und sollen einzelne Blockanweisungen unter Berücksichtigung der entsprechenden Übergabeparameter in eigene, aufzurufende Methoden ausgelagert werden, wodurch der Code geringfügig länger, aber wesentlich besser verständlich wird:
optionalNewLine (int day)
{
const int NumberOfWeekdays ← 7
int column ← day modulo NumberOfWeekdays
if (column = 0)
{
printLine ()
}
}
void printMonth ()
{
const int LastDay ← 31
int day ← 1
while (day <= LastDay)
{
printInt (day)
optionalNewLine (day)
day ← day + 1
}
}
Hierbei ist es hilfreich, wenn die aufzurufenden Programmteile vor ihrer ersten Verwendung implementiert werden, im Quelltext also zuerst definiert (also deklariert und implementiert) und erst weiter unten benutzt (respektive aufgerufen oder referenziert) werden.
Häufig wird behauptet, dass die Performanz der ausgeführten Programme durch die Aufteilung in solche Unterprogramme leiden würde, da die zahlreichen Aufrufe und Rücksprünge Rechenzeit und Speicherressourcen kosten. In den allermeisten Fällen ist dies auf modernen Rechenmaschinen jedoch zu vernachlässigen. Bei den meisten Anwendungen wird am Speicherbedarf und an der Rechenzeit nicht bemerkt werden können, ob ein strukturiertes oder ein unstrukturiertes Programm vorliegt. Bestenfalls bei extrem rechenintensiven Aufgaben (wie zum Beispiel beim sogenannten "number crunching" ("Zahlenfressen"), bei Monte-Carlo-Simulationen oder Big-Data-Analysen) kann dies bei den extrem häufig aufgerufenen Unterprogrammen einen nennenswerten Effekt haben. Hierbei kann eine wohlstrukturierte Parallelisierung von Programmen oder die Ausgliederung von Rechenaufgaben in spezialisierte Hardware (Graphikprozessoren, digitale Signalprozessoren (DSP), Field Programmable Gate Arrays (FPGA) oder Quantencomputer) wesentlich zu einer Beschleunigung der Programmabläufe beitragen.
Eine Software, die von den Anwendern als zu langsam empfunden wird, ist meist nur schlecht programmiert. Ferner kann gar nicht häufig genug betont werden, dass die Entwicklung und Wartung unstrukturierter Programme erheblich länger dauert und wesentlich fehleranfälliger ist.
=== Schrittweise Verfeinerung ===
Die Implementierung von Software geschieht in der Regel vom Großen ins Kleine. Grob entworfene Anweisungsfolgen und Datenstrukturen werden dabei im Rahmen einer '''schrittweisen Verfeinerung''' immer genauer den Anforderungen angepasst.
Die folgenden Aspekte sind bei der schrittweisen Verfeinerung nach wie vor typisch:<ref>Niklaus Wirth: [http://sunnyday.mit.edu/16.355/wirth-refinement.html Program Development by Stepwise Refinement], Communications of the Association for Computing Machinery, Band 14, Nummer 4, April 1971, Seiten 221 bis 227</ref>
* In jedem Schritt wird eine Aufgabe (ein Programmteil / ein Datensatz) in Unteraufgaben (in Unterprogramme / in Unterdatensätze) aufgeteilt.
* Der Grad der Abkapselung von Unteraufgaben bestimmt, wie leicht oder schwer Programme und Datenstrukturen angepasst oder übertragen werden können.
* Die Notation für Programme und Daten sollte stets so weit wie möglich sowohl der natürlichen Sprache und der Natur der Sache als auch der Hardware und den Software-Werkzeugen angepasst sein.
* Die Berücksichtigung der Kriterien Laufzeiteffizienz und Speichereffizienz sowie Klarheit und Regelmäßigkeit der Strukturen ist in allen Entwicklungsschritten bis zur Fertigstellung relevant.
* Es muss immer erwogen werden, dass ein korrekt funktionierendes Programm durch eine bessere Version ersetzt werden kann und dass frühere Entscheidungen aus allen Entwicklungsschritten revidiert werden können.
* Die Entwicklung und Wartung guter Programme ist alles andere als trivial, wird aber durch den Einsatz streng strukturierter Programmiersprachen deutlich erleichtert.
== Datenstrukturen ==
Nicht nur der Programmcode, sondern auch die zu verarbeitenden Daten müssen gut strukturiert werden, um die Entwicklungszeiten zu reduzieren, die Qualität der Programme zu erhöhen und die Wartung der Quelltexte zu erleichtern. Gehören zum Beispiel ganz verschiedene Attribute zu einer Sache, sollen diese Attribute zu einer Datenstruktur zusammengefasst werden. Datenstrukturen können auch geschachtelt eingesetzt werden, so dass sehr umfangreiche und komplexe Datenstrukturen abgebildet werden können.
===Aufzählungen===
Eine '''Aufzählung''' (englisch "enumeration") wird verwendet, wenn bestimmte Eigenschaften von Datenstrukturen abzählbar und endlich sind. Mit diesen thematisch zusammengehörigen Aufzählungen können im Programmtext an allen entsprechenden Stellen statt abstrakt zugeordneter Zahlen konkret zugeordnete symbolische Konstanten mit sprechenden und selbsterklärenden Bezeichnern verwendet werden. Manche Programmiersprachen bieten dafür sogar die Möglichkeit an, dafür eigene Datentypen zu erstellen, in vielen Programmiersprachen wird das jedoch auf sehr simple Weise mit ganzzahligen Basisdaten nachgebildet.
Im folgenden Beispiel wird erläutert, wie verschiedene Kalendersysteme als Aufzählung behandelt werden können. Hierbei werden die folgenden vier Kalendersysteme zu Auswahl:
* Jüdisches Kalendersystem, Kennzahl = 1
* Julianisches Kalendersystem, Kennzahl = 2
* Gregorianisches Kalendersystem, Kennzahl = 3
* Islamisches Kalendersystem, Kennzahl = 4
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
public class Kalendersystem
{
public final static long JUEDISCH = 1; // Lunisolarkalender
public final static long JULIANISCH = 2; // Solarkalender bis 4. Oktober 1582 (Donnerstag)
public final static long GREGORIANISCH = 3; // Solarkalender seit 15. Oktober 1582 (Freitag)
public final static long ISLAMISCH = 4; // Lunarkalender
}
</syntaxhighlight>
<syntaxhighlight lang="oberon2">
(* Programmiersprache Oberon *)
MODULE Kalendersystem;
CONST
JUEDISCH = 1; (* Lunisolarkalender *)
JULIANISCH = 2; (* Solarkalender bis 4. Oktober 1582 (Donnerstag) *)
GREGORIANISCH = 3; (* Solarkalender seit 15. Oktober 1582 (Freitag) *)
ISLAMISCH = 4; (* Lunarkalender *)
</syntaxhighlight>
In manchen, meist älteren Programmiersprachen gibt es explizite Aufzählungstypen, bei denen der Compiler automatisch die dazugehörigen ganzen Kennzahlen festlegt, ohne dass diese im Quelltext auftauchen, weil ausschließlich die symbolischen Konstanten aus der Deklaration des Aufzählungstyps verwendet werden. Variablen des Datentyps "Kalendersystem" im folgenden Beispiel dürfen nur die vier zwischen den runden Klammern explizit angegebenen respektive aufgezählten symbolischen Konstanten und keine beliebigen ganzen Zahlen verwenden:
<syntaxhighlight lang="modula2">
(* Programmiersprache Modula-2 *)
TYPE Kalendersystem = (JUEDISCH, JULIANISCH, GREGORIANISCH, ISLAMISCH);
</syntaxhighlight>
<syntaxhighlight lang="cpp">
/* Programmiersprache C++ */
enum Kalendersystem = {JUEDISCH, JULIANISCH, GREGORIANISCH, ISLAMISCH};
</syntaxhighlight>
===Verbunde===
Gehören mehrere verschiede Attribute zu einer Datenstruktur, spricht man auch von einem '''Verbund'''. Diese Datenstrukturen werden je nach Programmiersprache häufig "struct" oder "record" genannt. Alle Attribute können und müssen über einen zentralen Zugang adressiert werden. Dies soll im Folgenden anhand der Datenstruktur "Kalenderdatum" beispielhaft erläutert werden.
Ein Kalenderdatum möge aus einem '''Tag''', einem '''Monat''', einem '''Jahr''' und einem '''Kalendersystem''' bestehen:
Alle vier Attribute werden in vier unabhängigen Datenfeldern gespeichert. Im vorliegenden Beispiel sind zwar alle vier Datenfelder vom Basisdatentyp "ganze Zahl" ("long" oder "INTEGER"), die Bedeutung und die gültige Zahlenbereiche unterscheiden sich jedoch:
* Tag: ganze Zahl im Intervall [1..31]
* Monat: ganze Zahl im Intervall [1..12]
* Jahr: ganze Zahl
* Kalendersystem. ganze Zahl des Aufzählungstyps "Kalendersystem" mit den vier Optionen (JUEDISCH, JULIANISCH, GREGORIANISCH, ISLAMISCH)
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
public class Kalenderdatum
{
// Instanzvariablen
private long tag;
private long monat;
private long jahr;
private long kalendersystem;
public Kalenderdatum (long tag, long monat, long jahr, long kalendersystem) // Konstruktor zur Initialisierung von Instanzvariablen der Klasse Kalenderdatum
{
this.tag = tag;
this.monat = monat;
this.jahr = jahr;
this.kalendersystem = kalendersystem;
}
public static void main (java.lang.String [] argumente) // main-Methode der Klasse "Kalenderdatum"
{
Kalenderdatum kalenderdatum = new Kalenderdatum (10, 4, 2023, Kalendersystem.GREGORIANISCH); // Eine neue Instanz wird erzeugt und durch den Aufruf des Konstruktors initialisiert
java.lang.System.out.print (kalenderdatum.tag);
java.lang.System.out.print (".");
java.lang.System.out.print (kalendekalenderdatum.monat);
java.lang.System.out.print (".");
java.lang.System.out.print (kalenderdatum.jahr);
java.lang.System.out.println (); // Zeilenumbruch
}
}
</syntaxhighlight>
<syntaxhighlight lang="oberon2">
(* Programmiersprache Oberon *)
IMPORT Out; (* Import des Moduls "Out" für die Textausgabe *)
TYPE Kalenderdatum =
RECORD
tag: INTEGER;
monat: INTEGER;
jahr: INTEGER;
kalendersystem: INTEGER;
END;
VAR kalenderdatum; (* Variable *)
BEGIN
kalenderdatum.tag = 10;
kalenderdatum.monat = 4;
kalenderdatum.jahr = 2023;
kalenderdatum.kalendersystem = Kalendersystem.GREGORIANISCH;
Out.Int (kalenderdatum.tag);
Out.String (".");
Out.Int (kalenderdatum.monat);
Out.String (".");
Out.Int (kalenderdatum.jahr);
Out.Ln; (* Zeilenumbruch *)
END;
</syntaxhighlight>
Die Textausgabe lautet jeweils:
<syntaxhighlight lang="text">
23.4.2023
</syntaxhighlight>
===Arrays===
In Arrays werden endlich viele und abzählbare Elemente eines bestimmten Datentyps in einer geordneten Reihe gespeichert. Die einzelnen Elemente können über einen ganzzahligen Index angesprochen werden. Der niedrigste Index ist meistens der Index Null, und dieser zeigt auf die erste Speicheradresse des Arrays. Da alle Elemente vom gleichen Datentyp sind, wird für jedes Element immer der gleiche Speicherplatz benötigt. Elemente mit komplexen Datentypen, werden nicht direkt im Array gespeichert, sondern dieses enthält als Verweise Zeiger mit den Speicheradressen der Inhalte der Elemente. Wenn der Speicherbedarf für ein Element (oder dessen Zeiger) <math>S_E</math> Bytes beträgt und das Array insgesamt <math>N</math> Elemente hat, dann berechnet sich der Speicherbedarf <math>S</math> für das ganze Array aus dem Produkt:
<math>S = S_E \cdot N</math>
Die Speicheradresse <math>A_i</math> des i-ten Elements des Arrays berechnet sich dann mit einfacher und effizient ausführbarer Arithmetik aus der Speicheradresse des Arrays <math>A</math>, dem Speicherbedarf für ein Element (oder dessen Zeiger) <math>S_E</math> und dem Index <math>i</math> :
<math>A_i = A + S_E \cdot i</math> mit <math>0 \le i < N</math>
Die Speicheradresse des ersten Elements mit dem Index Null <math>A_0</math> ist also stets identisch mit der Speicheradresse des Arrays <math>A</math>.
Im folgenden Beispiel wird ein Array mit acht zufällig verteilten Gleitkommazahlen dargestellt, bei denen jeder Gleitkommazahl einen Speicherplatz von '''8 Bytes''' (Datentyp '''double''' mit 64 Bits) belegt:
{| class="wikitable"
|'''Länge des Arrays <math>N</math>'''
|'''Speicheradresse des Arrays (dezimal) <math>A</math>'''
|'''Speicheradresse des Arrays (hexadezimal) <math>A</math>'''
|'''Speicherbedarf für eine Gleitkommazahl in Bytes <math>S_E</math>'''
|-
|8
|10000000
|98 96 80
|8
|-
|'''Index <math>i</math>'''
|'''Speicheradresse des Elements im Array (dezimal) <math>A_i = A + S_E \cdot i</math>'''
|'''Speicheradresse des Elements im Array (hexadezimal) <math>A_i = A + S_E \cdot i</math>'''
|'''Gespeicherter Inhalt des Elements (Gleitkommazahl)'''
|-
|0
|10000000
|98 96 80
|678,1495238
|-
|1
|10000008
|98 96 88
|317,4610959
|-
|2
|10000016
|98 96 90
|574,3131347
|-
|3
|10000024
|98 96 98
|673,9323679
|-
|4
|10000032
|98 96 A0
|854,6637912
|-
|5
|10000040
|98 96 A8
|764,4845853
|-
|6
|10000048
|98 96 B0
|335,5146962
|-
|7
|10000056
|98 96 B8
|545,0787382
|}
Das folgende Java-Programm implementiert ein solches Array mit acht Gleitkommazahlen:
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
public class Array
{
// Klassenvariable zufallszahlen als Array mit acht Gleitkommazahlen
private static double zufallszahlen [] = new double [8];
public static void setzeZufallszahlen (long startwert) // Methode zur Bestimmung aller Gleitkommazahlen
{
// Variable zufallszahl
java.util.Random zufallszahl = new java.util.Random (startwert); // Startwert für erste Zufallszahl
long anzahl = zufallszahlen.length;
int zaehler = 0; // der Index von Arrays darf nicht vom Datentyp long sein
while (zaehler < anzahl)
{
zufallszahlen [zaehler] = zufallszahl.nextDouble ();
zaehler++;
}
}
public static void ausgabeZufallszahlen () // Methode zur Ausgabe aller Gleitkommazahlen
{
long anzahl = zufallszahlen.length;
int zaehler = 0; // der Index von Arrays darf nicht vom Datentyp long sein
while (zaehler < anzahl)
{
java.lang.System.out.println (zufallszahlen [zaehler]);
zaehler++;
}
}
public static void main (java.lang.String [] argumente) // Hauptprogramm "main" zum Aufruf der beiden Unterprogramme
{
setzeZufallszahlen (1000); // Aufruf des Unterprogramms setzeZufallszahlen mit dem Parameter 1000 als Startwert
ausgabeZufallszahlen (); // Aufruf des Unterprogramms ausgabeMonatsname ohne Parameter
}
}</syntaxhighlight>
Mit dem Aufruf des Hauptprogramms ''main'' erfolgt die Ausgabe von acht Pseudozufallszahlen:
<syntaxhighlight>
0.7101849056320707
0.574836350385667
0.9464192094792073
0.039405954311386604
0.4864098780914311
0.4457367367074283
0.6008140654988429
0.550376169584217
</syntaxhighlight>
Im nächsten Beispiel mit einem Array für die zwölf Monatsnamen ist der Datentyp eines Arrayelements jeweils eine Zeichenkette, die je nach ihrer Länge verschieden große Speicherbereiche belegen:
{| class="wikitable"
|'''Länge des Arrays'''
|'''Speicheradresse des Arrays'''
|'''Speicherbedarf für eine Speicheradresse'''
|'''Speicherbedarf für ein Zeichen'''
|
|
|-
|13
|10000000
|4
|2
|
|
|-
|Index
|'''Speicheradresse des Elements im Array'''
|'''Gespeicherter Inhalt des Elements (Speicheradresse)'''
|'''Länge der Zeichenkette'''
|'''Speicherbedarf der Zeichenkette'''
|'''Gespeicherter Inhalt des Elements (Zeichenkette)'''
|-
|0
|10000000
|20000000
|8
|16
|"deutsch"
|-
|1
|10000004
|20000016
|7
|14
|"Januar"
|-
|2
|10000008
|20000030
|8
|16
|"Februar"
|-
|3
|10000012
|20000046
|5
|10
|"März"
|-
|4
|10000016
|20000056
|6
|12
|"April"
|-
|5
|10000020
|20000068
|4
|8
|"Mai"
|-
|6
|10000024
|20000076
|5
|10
|"Juni"
|-
|7
|10000028
|20000086
|5
|10
|"Juli"
|-
|8
|10000032
|20000096
|7
|14
|"August"
|-
|9
|10000036
|20000110
|10
|20
|"September"
|-
|10
|10000040
|20000130
|8
|16
|"Oktober"
|-
|11
|10000044
|20000146
|9
|18
|"November"
|-
|12
|10000048
|20000164
|9
|18
|"Dezember"
|}
In den folgenden Beispielen in der Programmiersprache werden die zwölf Monatsnamen in Arrays mit Zeichenketten gespeichert. Hierzu wird die Sprache der Monatsnamen im ersten Arrayfeld mit dem Index 0 und die zwölf Monatsnamen in den folgenden Arrayfeldern mit den Indizes 1 bis 12 gespeichert:
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
public class Monatsnamen
{
// Klassenvariable
private static java.lang.String monatsnamen [] = {"deutsch",
"Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"};
public static void ausgabeMonatsname (int monat) // Methode zur Textausgabe von Monatsnamen
{
java.lang.System.out.println (monatsnamen [monat]);
}
public static void main (java.lang.String [] argumente) // Hauptprogramm "main" zum Aufruf der Methode ausgabeMonatsname
{
ausgabeMonatsname (1); // Aufruf des Unterprogramms ausgabeMonatsname mit dem Parameter 1
}
}
</syntaxhighlight>
Mit dem Aufruf des Hauptprogramms ''main'' erfolgt die Ausgabe mit dem ersten Monatsnamen:
<syntaxhighlight>
Januar
</syntaxhighlight>
In einigen Programmiersprachen muss die Größe der Array vor der Initialisierung festgelegt werden, und die Zuordnung zwischen den Indizes und den Arrayfeldern ist dann auch bei der Initialisierung explizit erkennbar:
<syntaxhighlight lang="oberon2">
(* Programmiersprache Component Pascal *)
MODULE Monatsnamen;
IMPORT Out; (* Import des Moduls "Out" für die Textausgabe *)
TYPE Monatsnamen = POINTER TO ARRAY OF ARRAY OF CHAR;
VAR monatsnamen: Monatsnamen;
PROCEDURE InittialisiereMonatsnamen (); (* Prozedur zur Initialisierung von Monatsnamen *)
BEGIN
NEW (monatsnamen, 13, 10); (* Reservierung von 13 Zeichenketten mit je 10 Zeichen) *)
monatsnamen [0] := "deutsch";
monatsnamen [1] := "Januar";
monatsnamen [2] := "Februar";
monatsnamen [3] := "März";
monatsnamen [4] := "April";
monatsnamen [5] := "Mai";
monatsnamen [6] := "Juni";
monatsnamen [7] := "Juli";
monatsnamen [8] := "August";
monatsnamen [9] := "September";
monatsnamen [10] := "Oktober";
monatsnamen [11] := "November";
monatsnamen [12] := "Dezember";
END InittialisiereMonatsnamen;
PROCEDURE AusgabeMonatsname (monat: INTEGER); (* Prozedur zur Textausgabe von Monatsnamen *)
BEGIN
Out.String (monatsnamen [monat]);
END AusgabeMonatsname;
PROCEDURE Hauptprogramm*;
BEGIN
InittialisiereMonatsnamen (); (* Initialisierung beim Laden des Moduls "Monatsnamen" *)
AusgabeMonatsname (1); (* Aufruf des Unterprogramms AusgabeMonatsname mit dem Parameter 1 *)
END Hauptprogramm;
END Monatsnamen.
</syntaxhighlight>
Durch den Aufruf von ''Monatsnamen.Hauptprogramm'' erfolgt die Ausgabe mit dem ersten Monatsnamen:
<syntaxhighlight>
Januar
</syntaxhighlight>
Arrays können mehrdimensional gestaltet werden. Um zum Beispiel zwei Sprachen mit Monatsnamen zu speichern, kann eine weitere Dimension mit einem Index für die gewünschte Sprache implementiert werden:
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
public class Monatsnamen
{
// Konstanten für Sprachaufzählung
public final static int DEUTSCH = 0;
public final static int ENGLISCH = 1;
// Klassenvariablen
private static java.lang.String monatsnamen [] [] =
{
{"deutsch", "Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"},
{"english", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"}
};
public static void ausgabeMonatsname (int monat) // Methode zur Textausgabe von Monatsnamen
{
java.lang.System.out.println ("Deutschsprachiger Monatsname = " + monatsnamen [DEUTSCH] [monat]);
java.lang.System.out.println ("Englischsprachiger Monatsname = " + monatsnamen [ENGLISCH] [monat]);
}
public static void main (java.lang.String [] argumente) // Hauptprogramm "main" zum Aufruf der Methode ausgabeMonatsname
{
ausgabeMonatsname (2);
}
}
</syntaxhighlight>
Mit dem Aufruf des Hauptprogramms ''main'' erfolgt die Ausgabe mit den beiden zweiten Monatsnamen:
<syntaxhighlight>
Deutschsprachiger Monatsname = Februar
Englischsprachiger Monatsname = February
</syntaxhighlight>
Bei anderen Programmiersprachen ist durch die obligatorische Verwendung von symbolischen Konstanten (im Beispiel unten "DEUTSCH" und "ENGLISCH") bei jeder erforderlichen, also auch bei allen initialen Zuweisungen zu Array-Elementen übersichtlich und klar erkennbar, welches Feld angesprochen wird:
<syntaxhighlight lang="oberon2">
(* Programmiersprache Component Pascal *)
MODULE Monatsnamen;
IMPORT Out; (* Import des Moduls "Out" für die Textausgabe *)
CONST
DEUTSCH = 0;
ENGLISCH = 1;
TYPE Monatsnamen = POINTER TO ARRAY OF ARRAY OF ARRAY OF CHAR;
VAR monatsnamen: Monatsnamen;
PROCEDURE InittialisiereMonatsnamen (); (* Prozedur zur Initialisierung von Monatsnamen *)
BEGIN
NEW (monatsnamen, 2, 13, 10); (* Reservierung von 2 mal 13 Zeichenketten mit je 10 Zeichen) *)
monatsnamen [DEUTSCH, 0] := "deutsch";
monatsnamen [DEUTSCH, 1] := "Januar";
monatsnamen [DEUTSCH, 2] := "Februar";
monatsnamen [DEUTSCH, 3] := "März";
monatsnamen [DEUTSCH, 4] := "April";
monatsnamen [DEUTSCH, 5] := "Mai";
monatsnamen [DEUTSCH, 6] := "Juni";
monatsnamen [DEUTSCH, 7] := "Juli";
monatsnamen [DEUTSCH, 8] := "August";
monatsnamen [DEUTSCH, 9] := "September";
monatsnamen [DEUTSCH, 10] := "Oktober";
monatsnamen [DEUTSCH, 11] := "November";
monatsnamen [DEUTSCH, 12] := "Dezember";
monatsnamen [ENGLISCH, 0] := "english";
monatsnamen [ENGLISCH, 1] := "January";
monatsnamen [ENGLISCH, 2] := "February";
monatsnamen [ENGLISCH, 3] := "March";
monatsnamen [ENGLISCH, 4] := "April";
monatsnamen [ENGLISCH, 5] := "May";
monatsnamen [ENGLISCH, 6] := "June";
monatsnamen [ENGLISCH, 7] := "July";
monatsnamen [ENGLISCH, 8] := "August";
monatsnamen [ENGLISCH, 9] := "September";
monatsnamen [ENGLISCH, 10] := "October";
monatsnamen [ENGLISCH, 11] := "November";
monatsnamen [ENGLISCH, 12] := "December";
END InittialisiereMonatsnamen;
PROCEDURE AusgabeMonatsname (monat: INTEGER); (* Prozedur zur Textausgabe von Monatsnamen *)
BEGIN
Out.String ("Sprache = " + monatsnamen [DEUTSCH, 0] + ": " + monatsnamen [DEUTSCH, monat]);
Out.Ln;
Out.String ("Sprache = " + monatsnamen [ENGLISCH, 0] + ": " + monatsnamen [ENGLISCH, monat]);
Out.Ln;
END AusgabeMonatsname;
PROCEDURE Hauptprogramm*;
BEGIN
InittialisiereMonatsnamen (); (* Initialisierung beim Laden des Moduls "Monatsnamen" *)
AusgabeMonatsname (2);
END Hauptprogramm;
END Monatsnamen.
</syntaxhighlight>
Durch den Aufruf von ''Monatsnamen.Hauptprogramm'' erfolgt die Ausgabe mit den beiden zweiten Monatsnamen:
<syntaxhighlight>
Sprache = deutsch: Februar
Sprache = english: February
</syntaxhighlight>
Die Verwendung von Indizes außerhalb der deklarierten oder angeforderten Array-Größen verursachen in streng strukturierten Programmiersprachen zur Laufzeit einen Programmabbruch. Bei sorgfältiger Programmierung ist deswegen darauf zu achten, dass nur gültige Indizes zur Anwendung kommen können. In schlecht strukturierten Programmiersprachen wie C oder C++ werden die Indizes von Arrays in der Regel nicht automatisch geprüft, so dass unbemerkt auf ungültige Speicheradressen zugegriffen werden kann und bei entsprechenden Angriffen Daten verfälscht und schadhafter Binärcode in die Programme eingeschleust sowie zur Ausführung gebracht werden kann.
==Kontrollstrukturen==
Kontrollstrukturen dienen dazu, den Programmablauf in wohlstrukturierter Weise im Sinne eines Algorithmus zu beeinflussen. Hierfür können '''Unterprogramme''' aufgerufen, '''Fallunterscheidungen''' vorgenommen oder Programmteile mehrfach durchlaufen werden ('''Schleifen''').
===Sprunganweisungen===
Sprünge an andere Programmstellen ergeben sich inhärent beim Aufruf von Unterprogrammen. Geschieht ein solcher Sprung durch eine explizite Sprunganweisung im Programmcode, wie zum Beispiel mit Goto-, Break- oder Continue-Anweisungen, ist dies unstrukturiert und im Übrigen auch völlig überflüssig, denn Programme mit Sprunganweisungen können immer und ohne großen Aufwand durch Kontrollstrukturen, also mit Hilfe von '''Unterprogrammen''', '''Schleifen''' oder '''Fallunterscheidungen''', gestaltet werden.
Explizite Sprunganweisungen stellen eine "Programmiertechnik mit dem Holzhammer" und wegen der daraus resultierenden verschlungenen Pfade während des Programmablaufs einen sogenannten '''Spaghetti-Code''' dar. Im Quellcode ist der Programmablauf nicht mehr ohne weiteres nachvollziehbar, beispielsweise bei der Untersuchung, von welchen Stellen des Programms an welche anderen Stellen gesprungen werden soll oder worden sein kann.
Im Falle der Switch-Case-Anweisung handelt es sich bei der in manchen Programmiersprachen verwendeten Break-Anweisung eigentlich nicht um eine Sprunganweisung, sondern um einen obligatorischen Begrenzer (englisch: ''delimiter''), der zur Herstellung der Programmstruktur erforderlich ist. In einigen Programmiersprachen darf dieser Begrenzer (''break'') jedoch weggelassen werden, um den Code in bestimmten aber vereinzelten Fällen etwas kürzer gestalten zu können, was aber gleichzeitig und unabdingbar zu unstrukturierter Programmierung führt, die Programmabläufe unübersichtlich macht und dazu führen kann, dass die Programme gegebenenfalls nur noch schwierig nachzuvollziehen und zu warten sind.
====Unterprogramme====
[[Datei:Unterprogrammaufruf.png|mini|rechts|hochkant=1|Von der Hauptroutine "Procedure main" eines gestarteten Programms wird nach Ausführung der Anweisungen "Instructions 1" ein Unterprogramm "Procedure sub" aufgerufen ("Call sub"), und der Programmablauf wird mit den dortigen Anweisungen "Instructions" fortgeführt. Wenn die letzte Anweisung "Return" des Unterprogramms erreicht worden ist, wird in das Hauptprogramm zurückgesprungen und der Programmablauf an der Stelle direkt hinter dem Aufruf des Unterprogramms mit den Anweisungen "Instructions 2" fortgesetzt.]]
Eine besonders häufig angewendete Programmiertechnik ist der Aufruf von Unterprogrammen. Unterprogramme stellen im Sinne des Quelltextes eines Programmes üblicherweise Prozeduren, Methoden oder Funktionen dar. Mit der Programmanweisung des Aufrufs kann der Programmablauf zum entsprechenden Unterprogramm verzweigt werden. Hierbei können in der Regel auch Parameter übergeben werden, um zwischen dem aufrufenden Programmteil und dem Unterprogramm Daten austauschen zu können. Ist das Unterprogramm vollständig abgearbeitet worden, wird der Programmablauf hinter der Stelle des Unterprogrammaufrufs fortgesetzt.
Unterprogramme können mehrfach und von allen Stellen des Programcodes aufgerufen werden, in dem das Unterprogramm sichtbar ist. Die Unterscheidung zwischen Prozeduren und Methoden ist nicht einheitlich. Etliche Programmiersprachen verwenden kategorisch nur einen der beiden Begriffe. Hierbei kann zwischen traditionellen (statischen) Prozeduren und objektorientierten (typengebunden oder dynamischen) Prozeduren unterschieden werden. Letztere werden als Methoden einer Klasse oder aber auch als typengebundene Prozeduren eines Programmoduls bezeichnet.
====Rücksprunganweisungen====
Nach Ablauf des Unterprogramms kann ein Rückgabewert an das aufrufende Programm zurückgegeben werden, der im aufrufenden Programmteil dann zur Verfügung steht und als Ausdruck zum Beispiel an eine Variable zugewiesen werden kann. In diesem Fall wird ein Unterprogramm auch '''Funktion''' genannt, da als Ergebnis des Unterprogrammaufrufs ein Funktionswert berechnet wurde und dann zurückgegeben wird.
Jedes Unterprogramm hat daher exakt eine Rücksprunganweisung (oft mit dem Schlüsselwort '''return''' gekennzeichnet), die logischerweise die letzte Anweisung sein muss, damit alle Anweisungen vorher durchgeführt werden können. Der Rücksprung erfolgt immer zur Stelle des Unterprogrammaufrufs, wo die Programmausführung anschließend fortgeführt wird.
Hat das Unterprogramm keinen Rückgabewert, der an den aufrufenden Programmteil zurückgegeben werden muss, wird in vielen Programmiersprachen auf eine explizite Rücksprunganweisung verzichtet; in diesem Fall wird sie also implizit ausgeführt. Ist das Hauptprogramm vollständig durchlaufen, wird das Programm nach dessen Rücksprunganweisung beendet, und die Kontrolle an das Laufzeitsystem oder das Betriebssystem zurückgegeben, von wo aus das Hauptprogramm aufgerufen worden war.
Mehrfache und insbesondere vorzeitige Rücksprunganweisungen in einem Unterprogramm sind unstrukturiert und daher zu unterlassen, auch wenn die Programmiersprache dies nicht zwingend fordert. Vorzeitige Unterprogrammabbrüche ('''Break'''-Anweisungen) verhindern, dass nachfolgende Programmsequenzen ausgeführt werden können, obwohl sie bei einer Ausführung das Ergebnis für den Rückgabewert beeinflussen würden. Dies kann zur Verwirrung führen, weil das Unterprogramm bei einer Überprüfung oder einer Analyse immer vollständig auf potentielle vorzeitige Unterprogrammabbrüche durchsucht werden muss.
Der folgende unstrukturierte Java-Code, der den in der Variablen '''ergebnis''' gespeicherten Wert vor dessen Rückgabe als Text ausgeben soll, verdeutlicht dies:
<syntaxhighlight lang="java">
private static double unterprogramm (double parameter)
{
double ergebnis = parameter;
boolean ganzzahlig = (parameter % 1 == 0);
if (ganzzahlig) return ergebnis;
ergebnis = ergebnis + 1;
java.lang.System.out.println ("Ergebnis = " + ergebnis);
return ergebnis;
}
</syntaxhighlight>
Die Erhöhung des Wertes der Variablen '''ergebnis''' sowie die Textausgabe mit dem Aufruf der Methode '''println''' unmittelbar vor der Rücksprunganweisung erfolgen wegen der beiden vorhandenen Rücksprunganweisungen nur, wenn der Wert des Parameters '''parameter''' nicht ganzzahlig ist. Demzufolge erzeugen die folgenden beiden Unterprogrammaufrufe
<syntaxhighlight lang="java">
unterprogramm (0);
unterprogramm (0.5);
</syntaxhighlight>
die Textausgabe:
<syntaxhighlight lang="text">
Ergebnis = 1.5
</syntaxhighlight>
Dieses formal korrekte, aber unerwünschte Verhalten wird nur nachvollziehbar, wenn der gesamte Code des Unterprogramms analysiert wird, was bei komplexeren Unterprogrammen und beim Vorhandensein mehrerer Rücksprunganweisungen sehr aufwendig werden kann..
Das folgende Unterprogramm implementiert den eigentlich gewünschten Algorithmus in strukturierter Form mit einer einzigen Rücksprunganweisung am Ende des Unterprogramms:
<syntaxhighlight lang="java">
private static double unterprogramm (double parameter)
{
double ergebnis = parameter;
boolean ganzzahlig = (parameter % 1 == 0);
if (! ganzzahlig)
{
ergebnis = ergebnis + 1;
}
java.lang.System.out.println ("Ergebnis = " + ergebnis);
return ergebnis;
}
</syntaxhighlight>
Die Textausgabe bei den oben angegebenen Aufrufen des Unterprogramms erfolgt nun wie gewünscht:
<syntaxhighlight lang="text">
Ergebnis = 0.0
Ergebnis = 1.5
</syntaxhighlight>
Es empfiehlt sich grundsätzlich ebenfalls immer, innerhalb von Rücksprunganweisungen keine komplexen Ausdrücke, Kontrollstrukturen oder Unterprogrammaufrufe zu verwenden, um einfache und eindeutige Rückgabewerte zu erhalten sowie diese gegebenenfalls mit einer Textausgabe oder einem Debugger kontrollieren zu können. Im Idealfall wird in der Rücksprunganweisung nur der Wert einer zuvor berechneten lokalen Variable mit einem sprechenden Bezeichner zurückgegeben:
<syntaxhighlight lang="text">
ergebnis ← f (a, b, c);
return ergebnis;
</syntaxhighlight>
In der Regel ergeben sich durch die zusätzliche explizite Zuweisung an die lokale Variable '''ergebnis''' keine Laufzeiteinbußen, da im übersetzten Maschinencode implizit für den Rückgabewert sowieso eine Zuweisung ausgeführt werden muss. Moderne Übersetzer berücksichtigen diesen Kontext automatisch, so dass in beiden Fällen derselbe Maschinencode erzeugt wird.
<div style="clear:both"></div>
===Fallunterscheidungen===
Die einfachste Fallunterscheidung ist die bedingte Anweisung. Verzweigungen enthalten mindestens zwei alternative Programmpfade.
====Bedingte Anweisung====
[[Datei:einfAusw.png|mini|rechts|hochkant=2|Struktogramm einer bedingten Anweisung.]]
Im folgenden Beispiel mit einer bedingten Anweisung (zum Beispiel if - then - end) wird die Dekrement-Anweisung a-- (der Wert der numerischen Variablen a soll um eins erniedrigt werden) nur dann ausgeführt, falls der boolesche Ausdruck a > b wahr ist, die entsprechende Bedingung also erfüllt ist:
falls a > b dann a-- ende
Hier wird der Wert der Variablen a also nur dann dekrementiert, wenn der Wert der Variablen a größer ist als der Wert der Variable b. Ansonsten wird der Programmablauf sofort hinter der ende-Marke fortgeführt.
====Einfache Verzweigung====
[[Datei:zweifAusw.png|mini|rechts|hochkant=2|Struktogramm einer einfachen Verzweigung.]]
Die einfachste Verzweigung (zum Beispiel if - then - else - end) enthält genau zwei alternative Pfade, von denen in Abhängigkeit eines booleschen Ausdrucks nur einer ausgeführt wird, wie in diesem Beispiel:
falls a > b dann a-- ansonsten b-- ende
Je nachdem die entsprechende Bedingung erfüllt ist oder nicht, wird die eine oder die andere Anweisung ausgeführt. Im obigen Beispiel wird der Wert der Variablen a nur dann dekrementiert, falls der Wert der Variablen a größer ist als der Wert der Variable b, ansonsten wird hier im Vergleich zur bedingten Anweisung allerdings der Wert der Variablen b um eins erniedrigt. In beiden Fällen wird das Programm anschließend hinter der ende-Marke fortgeführt.
====Mehrfache Verzweigung====
[[Datei:Mehrseitige Auswahl.png|mini|rechts|hochkant=2|Struktogramm einer mehrfachen Verzweigung.]]
Eine mehrfache Verzweigung (zum Beispiel switch - case - else - end) enthält mehr als zwei alternative Programmpfade, die meist, wie auch im folgenden Beispiel, von ganzzahligen Ausdrücken gesteuert werden:
verzweige mit dem Wert von a
falls 1 : unterprogramm_A ()
falls 2 : unterprogramm_B ()
falls 3 : unterprogramm_C ()
ansonsten unterprogramm_D ()
ende
In Abhängigkeit des in der ganzzahligen Variablen a gespeicherten Zahlenwertes wird genau eines der vier angegebenen Unterprogramme aufgerufen; beim Wert 1 unterprogramm_A, beim Wert 2 unterprogramm_B, beim Wert 3 unterprogramm_C und ansonsten unterprogramm_D. Danach wird der Programmablauf hinter den ende-Marke fortgeführt.
In manchen weniger stakt strukturierten Programmiersprachen wie C sind Vorsicht und Aufmerksamkeit geboten, weil beispielsweise dort die verschiedenen Fälle der entsprechenden switch-Anweisung nur optional mit einer break-Anweisung und nicht immer und obligatorisch abgeschlossen werden. Dies nutzen einige Programmierer, um in bestimmten Situationen mehrere Fälle hintereinander abarbeiten zu lassen. Dieses Vorgehen ist jedoch hochgradig unstrukturiert und führt sehr schnell und unübersichtlichem Programmcode und somit sehr leicht zu Programmierfehlern. Dies kann vermieden werden, wenn in diesen Programmiersprachen hinter jedem unterschiedenem Fall kategorisch die break-Anweisung implementiert wird, auch wenn die Programmiersprache oder der Übersetzer dies nicht fordern.
[[Datei:MehrfAusw.png|mini|rechts|hochkant=2|Struktogramm mit verschachtelten einfachen Verzweigungen, um eine mehrfache Verzweigung zu implementieren.]]
Mehrfache Verzweigungen mit aufeinanderfolgenden numerischen oder aufzählbaren Werten, wie im obigen Beispiel 1, 2 und 3, können rechnerintern unter Umständen effizient genutzt werden, weil die Sprungadressen arithmetisch berechnet werden können. Dies ist bei modernen Laufzeitsystemen in der Regel aber nicht mehr so relevant, und diese mehrfachen Verzweigungen können auch immer durch mehrfache Fallunterscheidungen programmiert werden. Durch eine eigene Anweisung für die mehrfache Verzweigung kann die Übersichtlichkeit des Quelltextes allerdings oft gesteigert werden. Auf der anderen Seite können die Übersichtlichkeit und die Nachvollziehbarkeit in der Regel auch hier mit entsprechenden Unterprogrammaufrufen gesteigert werden.
===Schleifen===
Bei Schleifen wird eine Anweisungsfolge nur dann ausgeführt, wenn die entsprechende boolesche, im Sinne der Schleife lokale Laufvariable den Wert "wahr" hat. Alle Schleifen können auf eine grundlegende Form zurückgeführt werden, bei der ein wesentliches Merkmal ist, ob die Laufvariable '''zu Beginn''' der Schleifenanweisungen den initialen Wert "wahr" erhält (fußgesteuert) oder in der Anfangsbedingung durch einen variablen booleschen Ausdruck bestimmt ist (kopfgesteuert). Es ist sinnvoll, dass diese Laufvariable nur zum Zwischenspeichern der Abbruchbedingung dient und ausschließlich im Zusammenhang mit der Schleife verwendet wird.
Bei wohlstrukturierter Programmierung mit zählenden Schleifen können numerische Laufvariablen verwendet werden, die innerhalb der Schleife vorzugsweise erst in der letzten Anweisung der Schleife aktualisiert werden, damit es innerhalb des Schleifendurchlaufs nicht zu Inkonsistenzen, Verwechslungen oder Mehrdeutigkeiten kommen kann.
Ferner gibt es in der strukturierten Programmierung keine expliziten Sprunganweisungen, die irgendwo innerhalb einer Schleife zum Beispiel mit dem Kommando '''continue''' den Rest der Schleife überspringen und sofort die nächstfolgende Abbruchbedingung der Schleife prüfen lassen. Innerhalb von Schleifen ist es ohne Weiteres möglich, alle Zwischenschritte mit Verzweigungen zu steuern beziehungsweise alle Zwischenergebnisse in lokalen Variablen zu speichern, ohne dass es in modernen Computersystemen zu längeren Ausführungszeiten kommt.
Im Folgenden soll dies mit der Programmiersprache Java an sehr einfachen Schleifen, die alle Zahlen außer der Fünf von Eins bis Zehn ausgeben sollen, erläutert werden.
Unstrukturiertes Beispiel:
<syntaxhighlight lang="Java">
long i = 1;
do
{
if (i == 5)
{
i++; // Die Schleifenendanweisung zum Hochzaehlen der Laufvariable muss hier dupliziert werden, damit es nicht zu einer Fehlfunktion kommt.
continue; // Die Schleife wird durch diese explizite Sprunganweisung unstrukturiert abgebrochen.
}
java.lang.System.out.println (i);
i++;
} while (i <= 10);
</syntaxhighlight>
Strukturiertes Beispiel:
<syntaxhighlight lang="Java">
long i = 1;
do
{
if (i != 5)
{
java.lang.System.out.println (i);
}
i++;
} while (i <= 10);
</syntaxhighlight>
====Kopfgesteuerte Schleifen====
[[Datei:KopfgesteuerteSchleife.png|mini|rechts|hochkant=2|Struktogramm einer kopfgesteuerten Schleife.]]
Kopfgesteuerte Schleifen werden auch als '''While'''-Anweisungen bezeichnet.
{| class="wikitable" style="text-align:center"
| rowspan="4" | Kopfgesteuerte Schleife
| colspan="2" | Setze Laufvariable auf boolesche Anfangsbedingung
|-
| rowspan="3" | Solange wie die Laufvariable den Wert "wahr" hat führe aus
|-
|Anweisungsfolge
|-
| Setze Laufvariable auf boolesche Endbedingung
|}
Wenn die boolesche Anfangsbedingung zu Beginn den Wert "falsch" hat, wird die Schleife '''nicht durchlaufen'''.
====Fußgesteuerte Schleifen====
[[Datei:FussgesteuerteSchleife.png|mini|rechts|hochkant=2|Struktogramm einer fußgesteuerten Schleife.]]
Die fußgesteuerte Schleife, die auch '''Repeat'''-Anweisung genannt wird, ist ein Sonderfall der kopfgesteuerten Schleife, bei der die boolesche Anfangsbedingung immer auf "wahr" gesetzt wird. Daher wird eine fußgesteuerte Schleife '''immer mindestens einmal durchlaufen'''.
{| class="wikitable" style="text-align:center"
| rowspan="4" | Fußgesteuerte Schleife
| colspan="2" | Setze Laufvariable auf "wahr"
|-
| rowspan="3" | Solange wie die Laufvariable den Wert "wahr" hat führe aus
|-
|Anweisungsfolge
|-
| Setze Laufvariable auf boolesche Endbedingung
|}
Da der Ausdruck der booleschen Anfangs- und Endbedingung oft identisch formuliert ist, bietet es sich an, dafür einen Funktionsaufruf zu verwenden, um eine Codewiederholung zu vermeiden.
Aus Gründen der Laufzeiteffizienz wird das Setzen der Laufvariablen zu Beginn und die erstmalige Überprüfung der Laufvariablen oft weggelassen, was für die allermeisten Anwendungen heute jedoch unwesentlich ist. Da die Laufvariable in diesem Fall zu Beginn jedoch nicht definiert werden muss und daher gegebenenfalls auch gar nicht definiert wird, birgt dieses Vorgehen die Gefahr in sich, dass die Laufvariable ihren undefinierten Zustand behält. Insbesondere tritt dies ein, wenn das Setzen der Laufvariable auf eine boolesche Endbedingung nicht erfolgt, weil dies in der verwendeten Programmiersprache nicht obligatorisch ist beziehungsweise vom Programmierer vergessen wurde, oder weil dies wegen eines zwangsläufig unstrukturierten Abbruchs innerhalb der Schleife (zum Beispiel mit einer Break-Anweisung) gar nicht erfolgen kann.
====Endlosschleifen====
'''Endlosschleifen''' sind unstrukturiert, da das Programm nicht regelgerecht beendet werden kann. Daher sind diese sogenannten Loop-Anweisungen, wie zum Beispiel
for (;;)
{
...
}
while (true)
{
...
}
repeat
{
...
}
until (false)
beziehungsweise
do
{
...
}
while (true)
oder
loop
{
...
}
zu unterlassen. Insbesondere das Verlassen von Endlosschleifen mit einer '''Sprunganweisung''' oder gar mehreren potentiellen Sprunganweisungen, wie zum Beispiel ''break'' oder ''exit'', ist hochgradig unstrukturierte Programmierung, da der Ausstiegszeitpunkt oder die Stelle des Ausstiegs aus der Schleife (wenn überhaupt) nur schwierig nachzuvollziehen oder zu bestimmen ist.
====For-Schleifen====
Die For-Schleifen-Anweisung
int i
for (i ← 0; i < max; i++)
{
...
}
ist identisch mit der kopfgesteuerten while-Anweisung:
int i
i ← 0
while (i < max)
{
...
i = i + 1
}
Es ist im Sinne eines einfachen Sprachumfangs und eines einheitlichen Sprachstils unter Umständen nützlich, für kopfgesteuerte Schleifen keine For-Schleifen, sondern ausschließlich While-Schleifen zu benutzen.
Wenn die Programmiersprache es erlaubt, Zählvariablen ausschließlich für eine Schleife zu definieren, dann hat dies den Vorteil, dass das Prinzip der Lokalität für diese Zählvariablen sehr gut erfüllt ist, da die Zählvariable dann außerhalb der Schleife nicht sichtbar ist und somit auch nicht verwendet werden kann:
for (int i ← 0; i < max; i++)
{
...
}
Die äquivalente Schreibweise mit einer while-Schleife sieht wie folgt aus, wobei die äußere Blockanweisung dafür sorgt, dass die Zählvariable "i" innerhalb der Blockanweisung deklariert ist und nur in Verbindung mit der Schleife sichtbar respektive verwendbar ist:
{
int i
i ← 0
while (i < max)
{
...
i++
}
}
Bei Algorithmen, die aus mehreren Kontrollstrukturen bestehen, ist es im Sinne der besseren Strukturierung vorzuziehen, alle Schleifen in eigene Methoden auszulagern, die aufgerufen werden und deren Schnittstellen über ihre Parameter eindeutig festgelegt sind. Hierbei können die Schleifen verschachtelt sein (innere und äußere Schleife) oder hintereinander ausgeführt werden. In jedem Fall sind alle Parameter und Variablen (also auch die jeweiligen Zählvariablen) innerhalb der entsprechenden Methoden lokal verfügbar.
==Codewiederholungen==
Codewiederholungen gehören insbesondere bei Anfängern sehr häufig zu den kapitalen Fehlern beim Softwareentwurf. Es ist nur scheinbar bequem, bereits vorhandenen Quelltext zu kopieren und für eine ähnliche Aufgabe geringfügig anzupassen. Es ist Größenordnungen besser, den bereits vorhandenen Quelltext so anzupassen, dass er für alle ähnlichen oder zumindest mehrere ähnliche Aufgabenstellungen eingesetzt werden kann. Erfahrene Programmierer wittern schon von Anfang an, dass eine bestimmte Methode auch in einem ähnlichen Kontext eingesetzt werden könnte und entwerfen den Code von vornherein so allgemein wie möglich.
===Symbolische Konstanten===
Konstante Ausdrücke werden in der Regel als '''symbolische Konstanten''' definiert, wie zum Beispiel mit der symbolischen Konstante "Pi" für die Kreiszahl oder die symbolische Konstante "Title" für den Text "Programmierung":
const double Pi ← 3.141592654
const String Title ← "Programmierung"
Statt konstante Ausdrücke zu wiederholen – und sei es nur eine ganze Zahl – ist es erheblich besser, stattdessen eine symbolische Konstante mit einem „sprechenden“ Bezeichner zu verwenden.
Also nicht mit der ganzen Zahl 3:
int inputNumber ← 3
...
if (inputNumber = 3) ...
Sondern besser mit der symbolischen Konstante "Exit" mit dem unveränderlichen, ganzzahligen Wert 3:
const int Exit ← 3
int inputNumber ← Exit
...
if (inputNumber = Exit) ...
Oder nicht zweimal mit derselben ganzen Zahl 3:
if (a > 3) and (b > 3) ...
Sondern besser mit zwei verschiedenen symbolischen Konstanten "Limit_a" und "Limit_b":
const int Limit_a ← 3
const int Limit_b ← 3
if (a > Limit_a) and (b > Limit_b) ...
Auf diese Weise kann auch leicht vermieden werden, dass gleichlautende Ausdrücke mit unterschiedlicher Bedeutung verwechselt werden können, insbesondere wenn sie später einmal geändert werden müssen:
if (numberOfConstellation > 12)
{
Ausgabe ("Diese Sternbildnummer ist ungültig.")
}
if (numberOfHalftones > 12)
{
Ausgabe ("Das Intervall ist größer als eine Oktave.")
}
Die beiden konstanten Zahlensymbole "12" haben nichts außer ihrem Zahlenwert gemeinsam, und daher ist der folgende Code erheblich besser nachvollziehbar:
const int Number_Of_Constellations ← 12
const int Number_Of_Halftones_Per_Octave ← 12
...
if (numberOfConstellation > Number_Of_Constellations)
{
Ausgabe ("Diese Sternbildnummer ist ungültig.")
}
if (numberOfHalftones > Number_Of_Halftones_Per_Octave)
{
Ausgabe ("Das Intervall ist größer als eine Oktave.")
}
===Aufruf von Unterprogrammen===
[[Datei:Aufruf.png|mini|rechts|hochkant=2|Struktogramm eines Unterprogrammaufrufs.]]
Unterprogramme, die in vielen Programmiersprachen auch Methoden, Prozeduren oder Funktionen genannt werden, beinhalten sequenzielle Rechenvorschriften (Algorithmen) zum Bearbeiten von Daten, die zu einer Einheit zusammengefasst sind.
So kann zum Beispiel die Rechenvorschrift für die Berechnung des Kreisumfangs aus dem Kreisradius als Folge von Programmanweisungen formuliert werden, aber auch in eine Methode ausgelagert werden. Dieses Unterprogramm kann dann irgendwo im Programmcode aufgerufen werden. Dies gewinnt besonders dann Bedeutung, wenn das Unterprogramm an verschiedenen Stellen aufgerufen werden soll, so dass dann diese Programmanweisungen nicht mehrfach programmiert oder kopiert werden müssen.
Insbesondere wenn die ursprünglichen, an mehreren Stellen auftauchenden Programmanweisungen einen Fehler enthalten, muss dieser nach dem Entdecken des Fehlers - also möglicherweise zu einem viel späteren Zeitpunkt - zur Fehlerbehebung zwangsweise an mehreren Stellen im Programmcode korrigiert werden. Das ist nicht nur mühsam, sondern einzelne relevante Stellen können leicht übersehen werden, so dass der entdeckte Fehler gar nicht vollständig ausgemerzt wird.
Die mehrfach eingegebenen Programmanweisungen zur Berechnung des Kreisumfangs werden beim Auftreten von '''Codewiederholung''' an drei Stellen des Quelltextes programmiert:
const double Pi ← 3.141592654
double perimeter1 ← radius1 * 2 * Pi
double perimeter2 ← radius2 * 2 * Pi
double perimeter3 ← radius3 * 2 * Pi
Mithilfe des im Unterprogramm "perimeter" nur einmal implementierten Algorithmus' zur Ermittlung des Kreisumfangs und dessen dreimaligem Aufruf kann die Wiederholung der Implementierung der Rechenvorschrift leicht vermieden werden:
/* "perimeter" computes and returns the perimeter of a circle with radius "radius" */
double perimeter (radius)
{
const double Pi ← 3.141592654
double perimeter ← radius * 2 * Pi
return perimeter
}
double perimeter1 ← perimeter (radius1)
double perimeter2 ← perimeter (radius2)
double perimeter3 ← perimeter (radius3)
==Zuweisungskompatibilität==
'''Zuweisungskompatibilität''' liegt vor, wenn Ausdrücke und Variablen aufgrund hinreichend kompatibler Datentypen einander zugewiesen, miteinander verglichen oder eindeutig miteinander verknüpft werden können.
Es kann bereits im Quelltext überprüft werden, ob eine hinreichende Zuweisungskompatibilität vorliegt. Liegt diese nicht vor, handelt es sich um eine Typverletzung, und es muss eine explizite Typumwandlung programmiert werden. In diesem Fall kann es sehr leicht zu Programmfehlern kommen.
Programmiersprachen, die für die maschinennahe Programmierung konzipiert wurden, wie zum Beispiel Assemblersprachen oder die Programmiersprache C, haben oft gar keine oder nur eine sehr schwache Typprüfung, was sehr leicht zu Programmfehlern führen kann.
In manchen Programmiersprachen, wie zum Beispiel C, ist es sogar erlaubt, beliebige Zeiger einer Zeigervariablen zuzuweisen, ohne dass geprüft wird oder überhaupt geprüft werden kann, ob die Datentypen der referenzierten Daten kompatibel sind.
===Zeichenketten===
Ein weiteres schwerwiegendes Problem kann sich bei der Verwendung von Zeichenketten (englisch: string) ergeben, die in der Regel zum Speichern von Texten Verwendung finden und die aus einer Sequenz von einzelnen Zeichen respektive Buchstaben (englisch: character) bestehen.
Eine strukturierte Programmiersprache, die Zeichenkettenverarbeitung und einen entsprechenden Datentyp zur Verfügung stellt, sollte fordern, dass jede Zeichenkette mit einem Zeichen abgeschlossen wird, das das Ende der Zeichenkette markiert (englisch: string terminator). Hierfür wird allgemein das Zeichen mit dem numerischen Wert null verwendet, das keinen Buchstaben repräsentiert und in Quelltexten häufig mit den Symbolen NUL, 0X oder \0 kodiert wird.
Manche unstrukturierte Programmiersprachen fordern nicht, dass eine solche Kennzeichnung des Endes der Zeichenkette verwendet werden muss. Bei der Implementation von Zeichenkettenfunktionen in Programmbibliotheken, insbesondere wenn die dazugehörige Programmiersprache gar keinen Datentyp für Zeichenketten zur Verfügung stellt, ist auch bei strukturierten Programmiersprachen nicht unbedingt gewährleistet, dass eine entsprechende Kennzeichnung des Zeichenkettenendes obligatorisch ist. Bei der Implementierung von Vergleichsfunktionen oder Zeichenkettenmanipulationen in unstrukturierten Programmiersprachen oder Programmbibliotheken muss die Tatsache, ob das Nullzeichen vorhanden ist oder nicht, regelmäßig untersucht und berücksichtigt werden. Einfacher und sicherer ist es, mit einer strukturierten Programmiersprache oder einer entsprechenden Programmbibliothek zu arbeiten, bei der immer gewährleistet ist und vorausgesetzt werden kann, dass alle Zeichenketten mit einem Endezeichen abgeschlossen sind.
===Strenge Zuweisungskompatibilität===
Zuweisungen sind uneingeschränkt zulässig, wenn eine strenge Zuweisungskompatibilität gegeben ist. Dazu müssen die Datentypen eines zuzuweisenden Ausdrucks und einer Variable exakt übereinstimmen, wie in folgendem Beispiel mit dem Datentyp "Mann" und den beiden Instanzen "otto" und "emil":
TYPE Mann = Verbund von alter und groesse
VARIABLE otto, emil: Mann
otto.alter ← 50
otto.groesse ← 1.80
emil ← otto
Alle Attribute von „otto“, nämlich „alter“ und „groesse“, können „emil“ eindeutig zugewiesen werden.
Zwei Instanzen sind streng zuweisungskompatibel, wenn sie derselben Klasse angehören, wie in diesem Beispiel die beiden Objekte "fenster1" und "fenster2" aus der Klasse "Rechteck":
TYPE Rechteck = Klasse mit breite, hoehe und mit Methode flaechenberechnung ()
VARIABLE fenster1, fenster2: Rechteck
fenster1.breite ← 200
fenster1.hoehe ← 100
fenster1.flaechenberechnung () (Flächenberechnung für „fenster1“ ausführen)
fenster2 ← fenster1
fenster2.flaechenberechnung () (Flächenberechnung für „fenster2“ ausführen)
Die Zuweisung in der vorletzten Programmzeile ist möglich, da beide Instanzvariablen "fenster1" und "fenster2" derselben Klasse "Rechteck" angehören, und daher liefert auch der Methodenaufruf in der letzten Programmzeile ein korrektes Ergebnis.
====Logische Kompatibilität====
Zwei übereinstimmende Definitionen von zwei Datentypen sind nicht zuweisungskompatibel. Die Daten können zwar eindeutig überführt werden (technische Kompatibilität), es liegen zwei formal zwar identische, aber dennoch verschiedene Definitionen vor, so dass diese keine logische Kompatibilität aufweisen. Folgendes Beispiel wäre demzufolge formal korrekt, aber nicht logisch:
TYPE Mann = Verbund von alter und groesse
TYPE Frau = Verbund von alter und groesse
VARIABLE otto: Mann
VARIABLE anna: Frau
otto.alter ← 50
otto.groesse ← 1.80
anna ← otto
Die Zuweisung in der letzten Programmzeile ist technisch zwar ohne Probleme möglich, aber logisch nicht korrekt, und sie birgt daher die Gefahr der Entstehung von Programmierfehlern. Um solche Fehler zu vermeiden, sind Zuweisungen mit impliziter Typumwandlung in einigen Programmiersprachen mit starker Typisierung nicht zulässig, und der Compiler verweigert die Übersetzung dieser Zuweisung.
In der objektorientierten Programmierung kann durch die Vererbung der gemeinsamen Eigenschaften von Datentypen leicht eine logische Kompatibilität hergestellt werden:
TYPE Mensch = Verbund von alter und groesse
TYPE Mann = Mensch
TYPE Frau = Mensch
VARIABLE otto: Mann
VARIABLE anna: Frau
otto.alter ← 50
otto.groesse ← 1.80
anna ← otto
Die Objekteigenschaften "alter" und "groesse" sind hierbei Eigenschaften von Objekten des Datentyps "Mensch" und daher sowohl zuweisungskompatibel, als auch logisch korrekt; bei der Zuweisung können und werden nur die Attribute "alter" und "groesse" der gemeinsamen Basisklasse "Mensch" übertragen.
====Wahrheitswerte====
In einigen älteren Programmiersprachen, wie zum Beispiel C, gibt es keinen eigenen Datentyp für zweiwertige boolesche Variablen. Zur Behandlung und Verarbeitung entsprechender Information wird dann häufig der ganzzahlige Datentyp mit dem kleinsten Speicherbedarf verwendet, wobei der Zahlenwert null für den Wahrheitswert „Falsch“ und alle anderen Zahlenwerte für den Wahrheitswert „Wahr“ Verwendung finden. Auch hier ergeben sich logische Inkompatibilitäten und somit ein gefährliches Potential für Komplikationen, da mit binären Werten keine Arithmetik und mit Zahlen keine logischen Verknüpfungen oder logischen Operationen durchgeführt werden können. Im folgenden Beispiel wird dieser Missbrauch verdeutlicht:
VARIABLE schlechteWahrheit1, schlechteWahrheit2, ergebnisWahrheit: INTEGER
schlechteWahrheit1 ← 0
schlechteWahrheit2 ← 1
ergebnisWahrheit ← (schlechteWahrheit1 + schlechteWahrheit2)
ergebnisWahrheit ← (schlechteWahrheit2 + schlechteWahrheit2)
Das Ergebnis der ersten arithmetischen Addition ist 1, was fälschlich als der Wahrheitswert „Wahr“ missinterpretiert werden könnte, der nicht dem Ergebnis der logischen Und-Verknüpfung entspricht. Noch offensichtlicher ist das Problem in der zweiten arithmetischen Addition, wo das Ergebnis 2 erzielt wird. Somit existieren ohne Not mehr als zwei Zustände für die binären (also zweiwertigen) Variablen, was schnell zu Missverständnissen und Programmierfehlern führen kann.
Eine eindeutige und korrekte Implementierung wird erreicht, wenn die Programmiersprache oder eine dazugehörige Programmbibliothek einen zweiwertigen Datentyp, wie zum Beispiel „BOOLEAN“ oder „bool“, zwei entsprechende Ausprägungen, wie zum Beispiel "false" und "true", und die dazugehörigen eindeutigen booleschen Operatoren und Funktionen (beispielsweise "and", "or" oder "not") anbietet.
VARIABLE richtigeWahrheit1, richtigeWahrheit2, ergebnisWahrheit: BOOLEAN
richtigeWahrheit1 ← falsch
richtigeWahrheit2 ← wahr
ergebnisWahrheit ← (richtigeWahrheit1 und richtigeWahrheit2)
ergebnisWahrheit ← (richtigeWahrheit2 und richtigeWahrheit2)
Sinngemäß gilt das Gleiche für die Verknüpfungen von Mengen. Wenn hier bei den Datentypen und zulässigen Operatoren nicht zwischen Bitmengen (englisch: (bit) sets) und Zahlen unterschieden wird, kommt es wie zum Beispiel bei der Bestimmung von Vereinigungs- oder Differenzmengen zu Interpretationsproblemen. Eine eindeutige und korrekte Implementierung verwendet Datentypen, die für Mengen und Mengenoperationen definiert sind. In einigen Programmiersprachen werden solche Datentypen im Sprachumfang implizit angeboten, in anderen gibt es dafür standardisierte Programmbibliotheken, auf die über Unterprogrammaufrufe zugegriffen werden kann.
===Zuweisungskompatibilität ohne Informationsverlust===
In einigen Fällen kann die Information, die mit einem Datentyp dargestellt werden kann, eindeutig und ohne Informationsverlust in einen anderen Datentyp überführt werden. Typische Beispiele sind ganze Zahlen mit unterschiedlicher Speichergröße. So kann ein Integer mit 16 Bit Speichergröße eindeutig in einer vorzeichenbehafteten Integer-Variablen mit 32 Bit Speichergröße abgelegt werden, ohne dass die ursprünglich nur mit 16 Bit gespeicherte Zahl verändert wird. Umgekehrt ist dies jedoch nicht allgemein möglich, insbesondere unter der Beachtung von Vorzeichen und großen Zahlen. Der folgende Programmierabschnitt zeigt ein Beispiel ohne Zuweisungskompatibilität, da der Datentyp „BYTE“ nur 8 Bit Speichertiefe hat und nur Werte zwischen -128 bis +127 und somit nicht die Zahl 555 repräsentieren kann, wohingegen der Datentyp „SHORTINT“ eine Speichertiefe von 16 Bit hat und ganze Zahlen von -32768 bis +32767 repräsentieren kann:
zahl1: BYTE
zahl2: SHORTINT
zahl2 ← 555
zahl1 ← zahl2
Die letzte Programmzeile stellt einen ungültigen Versuch der Zuweisung der ganzen Zahl 555 aus der Variablen „zahl2“ an die Variable „zahl1“ dar.
Bei einer solchen Programmanweisung kann bei typsicheren Programmiersprachen bereits der Compiler verhindern, dass ausführbarer Maschinencode erzeugt wird. Bei fehlender Überprüfung durch den Compiler kann unbemerkt Information verloren gehen, so dass bei nachfolgenden Berechnungen unter Umständen grobe Berechnungsfehler auftreten, die relativ schwierig zu analysieren sind.
===Zuweisungskompatibilität mit geringem Informationsverlust===
Ein Sonderfall ist die Zuweisung von ganzen Zahlen an Variablen, die Gleitkommazahlen repräsentieren. In der Regel kann ohne die Gefahr von Programmfehlern toleriert werden, große ganze Zahlen implizit in Gleitkommazahlen umzuwandeln, da der Rechenfehler (wenn überhaupt vorhanden) hierbei sehr klein ist. Auch dies kann an einem Beispiel verdeutlicht werden: ein „LONGINT“ mit 64 Bit Speichergröße kann die Zahl 9223372036854775807 mit 19 Dezimalstellen speichern. Der folgende Programmierabschnitt zeigt ein Beispiel mit Zuweisungskompatibilität mit einem in der Regel zu vernachlässigenden Informationsverlust, da der Datentyp „REAL“ nach IEEE 754 mit 64 Bit nur Zahlen mit einer Mantisse mit maximal 14 Nachkommastellen speichern kann:
zahl1: LONGINT
zahl2: REAL
zahl1 ← 9223372036854775807
zahl2 ← zahl1
Die letzte Anweisung stellt in fast allen Programmiersprachen einen gültigen Versuch der Zuweisung der ganzen Zahl <math>{2}^{63} - 1</math> aus der Variablen „zahl1“ an die Variable „zahl2“ dar, da diese gerundeten Zahlenwert <math>9{,}22337203685478 \cdot {10}^{18}</math> enthält, und der Fehler durch das Abschneiden der letzten Nachkommastellen hier nur in einer Größenordnung von <math>{10}^{-14}</math> liegt und daher für praktisch alle Anwendungen vernachlässigt werden kann.
Bei einer erneuten Datentypkonvertierung zurück zu einem geeigneten ganzzahligen Datentyp kommt es dann aber zu einer Abweichung zu der ursprünglichen ganzen Zahl. In solchen Fällen ist es daher besser, vorsichtshalber und mit Inkaufnahme etwas längerer Programmlaufzeiten ausschließlich mit Gleitkommazahlen zu operieren.
===Zuweisungskompatibilität mit definiertem Informationsverlust===
Zwei Instanzen sind mit definiertem Informationsverlust zuweisungskompatibel, wenn die zuzuweisende Klasse einer Klasse angehört, die von der zugewiesenen Klasse abgeleitet wurde. Alle Daten die in der zugewiesenen Klasse deklariert und somit erforderlich sind, können dann zugewiesen werden, jedoch werden die in der zuzuweisenden abgeleiteten Klasse möglicherweise hinzugefügten Attribute ignoriert, wie das folgende Beispiel verdeutlichen soll, in welchem der Datentyp „Mensch“ alle Eigenschaften vom Datentyp „Lebewesen“ erbt und zusätzlich das Attribut „intelligenzquotient“ bekommt:
TYPE Lebewesen = Verbund von alter und gewicht
TYPE Mensch = Lebewesen mit intelligenzquotient
VARIABLE otto: Mensch
VARIABLE eukaryot: Lebewesen
otto.alter ← 50
otto.gewicht ← 75
otto.intelligenzquotient ← 100
eukaryot ← otto
Die Zuweisung in der letzten Zeile ist korrekt, das Attribut „intelligenzquotient“ der Variable „otto“ vom Datentyp „Mensch“ wird jedoch nicht an die Variable „eukaryot“ zugewiesen, da es beim Datentyp „Lebewesen“ der Basisklasse nicht deklariert ist.
==Komplexe Ausdrücke==
Zusammengesetzte Ausdrücke mit verschiedenartigen Operatoren können sehr unübersichtlich und somit fehleranfällig sein. Manche Programmiersprachen haben sehr viele Hierarchieebenen für Operatoren, die auch durch erfahrene Programmierer kaum durchschaut werden können, oder sogar dafür sorgen, dass bestimmte Teile des Quellcodes zur Laufzeit gar nicht erreicht werden können. Daher ist es dringend empfehlenswert, Anweisungen in kleine, überschaubare Einheiten zu untergliedern. In einigen Programmiersprachen ist es sogar möglich, die Zuweisung in andere Anweisungen zu integrieren, da sie selber als ein Ergebniswert interpretiert werden darf. Ferner ist nicht immer offensichtlich welchen Datentyp ein Ergebnis hat, was insbesondere in Ermangelung eines zweiwertigen Datentyps ''Boolean'' zu Missverständnissen führen kann.
Also zum Beispiel nicht:
if (a ← b – c = 0) ...
In dieser bedingten Anweisung (if) ist nicht klar, in welcher Reihenfolge der Zuweisungsoperator (←), der Differenzoperator (-) und der Vergleichsoperator (=) ausgeführt werden (sollen).
Es ist erheblich besser, die Anweisungen klar zu trennen:
a ← (b – c)
if (a = 0) ...
Die folgenden beiden Beispiele mit dem Zuweisungsoperator "=" und dem Vergleichsoperator "==" zeigen Programmsequenzen in der Programmiersprache C, die zu sehr leicht zu übersehenden Programmierfehlern führen können:
<syntaxhighlight lang="C">
/* Programmiersprache C */
int i = 0;
if (i = 1)
{
/*
Dieser Block wird immer ausgeführt,
weil die Zuweisung i = 1 immer das numerische Ergebnis 1 hat,
was als der boolesche Wert "wahr" interpretiert wird.
*/
}
int i = 0;
if (i == 1)
{
/*
Dieser Block wird nie ausgeführt,
weil die Vergleichsoperation i == 1 immer das numerische Ergebnis 0 hat,
was als der boolesche Wert "falsch" interpretiert wird.
*/
}
</syntaxhighlight>
Die folgende Rückgabe-Anweisung ("return") in der Programmiersprache Java ist nicht nur verwirrend, sondern sinnfrei:
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
long x = 2;
long y = 1;
return y + x--;
</syntaxhighlight>
Der Dekrement-Operator "- -" wird in vielen Programmiersprachen gar nicht ausgeführt, weil er hierarchisch erst nach einer Zuweisung ausgeführt wird oder nach einer die Code-Sequenz beendende Return-Anweisung noch ausgeführt werden müsste, aber de facto gar nicht mehr ausgeführt wird. Deswegen ist die folgende Anweisungsfolge nicht nur weniger komplex, gut strukturiert und korrekt, sondern auch sinnvoll und leicht sowie eindeutig nachvollziehbar:
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
long x = 2;
long y = 1;
x--;
long summe = y + x;
return summe;
</syntaxhighlight>
Beeindruckend sinnlos, verwirrend und komplex sind Monster-Ausdrücke (nach Niklaus Wirth: ''notational monsters''), die in einigen Programmiersprachen wie zum Beispiel C erlaubt sind, wie zum Beispiel bei der Kombination einer Rücksprunganweisung ("return") mit einer Zuweisung ("="), zwei verschiedenen Inkrement-Operatoren ("++") und einem Additionsoperator ("+"). Es ist sehr schwierig durchschaubar, in welcher Reihenfolge diese fünf Anweisungen ausgeführt werden und ob diese überhaupt ausgeführt werden. Selbst wenn die Zuweisung oder die nachrangige Inkrementierung ausgeführt würden, wären sie völlig sinnlos, da auf die lokale Variable i nach der Return-Anweisung gar nicht mehr zugegriffen werden kann:
<syntaxhighlight lang="C">
/* Programmiersprache C */
int i = 0;
return i = ++i+i++;
</syntaxhighlight>
Auch im folgenden Java-Beispiel ist die Sachlage nicht wesentlich besser. Das Ergebnis dieser Anweisungsfolge für die Variable y ergibt den Wert 2 + 2 = 4 , weil der letzte Inkrementoperator die Variable x vor der Ausführung aller anderen Operatoren auf den Wert 2 erhöht, und der erste Inkrementoperator die Variable x erst nach der Addition und der Zuweisung auf den Wert 3 erhöht:
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
long x = 1;
long y = x++ + ++x;
</syntaxhighlight>
Es ist ebenfalls nicht leicht zu durchschauen, dass das Ergebnis dieser Anweisungsfolge in Java für die Variable y den Wert 2 + 3 = 5 ergibt, weil die Variable x vor der Auswertung des arithmetischen Summe zweimal inkrementiert wird:
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
long x = 1;
long y = ++x + ++x;
</syntaxhighlight>
Ferner ist das Ergebnis der nächsten Anweisungsfolge in Java für die Variable y der Wert 2 + 2 = 4, weil die Variable x vor der Auswertung der arithmetischen Summe nur beim ersten Inkrementoperator für die Summenbildung wirksam verändert wird:
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
long x = 1;
long y = ++x + x++;
</syntaxhighlight>
Auf der anderen Seite ist das Ergebnis der nächsten Anweisungsfolge in Java für die Variable y der Wert 1 + 2 = 3, weil die Variable x während der Auswertung des arithmetischen Ausdrucks nur beim ersten Inkrementoperator für die Summenbildung wirksam verändert wird:
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
long x = 1;
long y = x++ + x++;
</syntaxhighlight>
Noch gefährlicher wird es, wenn die Reihenfolge der Auswertung von arithmetischen Ausdrücken mit gleichwertigen Operanden für den Compiler oder Interpreter nicht definiert ist:
<syntaxhighlight lang="C">
/* Programmiersprache C */
int x = 1;
long y = ++x * --x;
</syntaxhighlight>
Wird die Multiplikation von links nach rechts ausgewertet, ergibt sich für die Variable y der Wert 2, wird die Multiplikation von rechts nach links ausgewertet, ergibt sich für die Variable y der Wert 0. Derselbe Quelltext kann auf zwei verschiedenen Systemen also völlig andere Rechenergebnisse hervorrufen.
In anderen Programmiersprachen werden die Inkremente und Dekremente von ganzzahligen Variablen daher mit Prozeduraufrufen bewerkstelligt (beispielsweise INC() und DEC()), die fester Bestandteil der Programmiersprache sind, wie zum Beispiel in Pascal, wo der Zuweisungsoperator aus zwei verschiedenen Zeichen besteht (":="), damit es keine Verwechslungen mit einem Identitätsoperator oder Vergleichsoperator geben kann:
<syntaxhighlight lang="pascal">
(* Programmiersprache Pascal *)
VAR
x, y, produkt: integer;
BEGIN
x := 1;
INC (x);
y := x;
DEC (x);
produkt := y * x;
END;
</syntaxhighlight>
Die Aufrufe der Inkrement- beziehungsweise Dekrementprozeduren dürfen und können – genauso wie Zuweisungen – in der Programmiersprache Pascal also gar nicht Bestandteil eines arithmetischen Ausdrucks sein, so dass der Zeitpunkt der Ausführung immer eindeutig aus der Reihenfolge der Anweisungen hervorgeht.
===Ternäre Operatoren===
Ein '''ternärer Operator''' hat als Ergebnis einen beliebigen Wert und verknüpft hierzu drei Ausdrücke:
* Der erste Ausdruck ein '''binärer Ausdruck''', der wahr oder falsch ist.
* Der zweite Ausdruck beschreibt den Ergebniswert, wenn der erste Ausdruck '''wahr''' ist.
* Der dritte Ausdruck beschreibt den Ergebniswert, wenn der erste Ausdruck '''falsch''' ist.
In vielen Programmiersprachen werden die drei Ausdrücke mit den Begrenzungszeichen ? und : voneinander getrennt, und der binäre Ausdruck wird eingebettet in runde Klammern vorangestellt:
(binärer Ausdruck) ? zweiter Ausdruck : dritter Ausdruck
Jeder dieser drei Ausdrücke kann sich wiederum aus mehreren anderen Ausdrücken zusammensetzen, so dass der Überblick schnell verloren gehen kann.
Die Ergebniswerte von Ausdrücken mit ternären Operatoren sollten besser nicht in andere Ausdrücke eingesetzt werden, sondern in einer lokalen Variable zwischengespeichert und erst danach weiterverwendet werden:
variable ergebnis;
ergebnis ← (binärer Ausdruck) ? zweiter Ausdruck : dritter Ausdruck
Grundsätzlich ist es wegen der größeren Übersichtlichkeit, Transparenz und einfacheren Modifikation vorzuziehen, für das Ergebnis gar '''keine ternären Operatoren''' zu verwenden, sondern eine '''bedingte Anweisung mit Blockanweisungen''' zu verwenden:
variable ergebnis;
falls (binärer Ausdruck)
dann
Block für ergebnis ← zweiter Ausdruck
ansonsten
Block für ergebnis ← dritter Ausdruck
ende
===Blockanweisungen===
'''Blockanweisungen''' sind ein elegantes Mittel, um Programmcode zu strukturieren sowie die Sichtbarkeit von lokalen Variablen zu begrenzen. In vielen Programmiersprachen werden eindeutige Symbole für die Kennzeichnung von Programmblöcken verwendet, wie zum Beispiel geschweifte Klammern:
{
...
}
Die drei Punkte stehen hierbei für beliebige Anweisungsfolgen.
In anderen Programmiersprachen werden Schlüsselwörter für die Begrenzung von Blockanweisungen verwendet, wie zum Beispiel "BEGIN" und "END":
BEGIN
...
END
Der Blockinhalt mit Anweisungen - in beiden obenstehenden Beispielen durch die drei aufeinanderfolgenden Punkte symbolisiert -, wird in der Regel eingerückt, um die Lesbarkeit des Quelltextes für die Programmierer zu erleichtern.
Blockanweisungen können geschachtelt, dürfen - sofern in der Syntax einer Programmiersprache überhaupt möglich - jedoch nicht verschränkt werden. Dies bedeutet, dass bei geschachtelten Blöcken ein begonnener Block immer erst vollständig abgearbeitet werden muss, bevor der nächstäußere weitergeführt und abgeschlossen werden kann:
{
... /* Äußerer Block */
{
... /* Mittlerer Block */
{
... /* Innerer Block */
}
... /* Mittlerer Block */
}
... /* Äußerer Block */
}
Verschränkte Blockanweisungen sind unsinnig, unstrukturiert sowie überflüssig und daher in den meisten Programmiersprachen nicht zulässig:
BEGIN1
...
BEGIN2
...
...
END1
... ...
END2
Die Implementationen von allen Modulen, Klassen und Unterprogrammen sowie auch von allen Kontrollstrukturen (also Fallunterscheidungen und Schleifen) sollten '''kategorisch mit Blockanweisungen''' strukturiert werden.
=== Blockanweisungen bei Kontrollstrukturen ===
[[Datei:lineareAnw.png|mini|rechts|hochkant=2|Struktogramm einer Anweisungsfolge.]]
Auch wenn die Programmiersprache die Verwendung von Blockanweisungen für Anweisungsfolgen in einer Kontrollstruktur nicht vorschreibt, ist es sehr ratsam, die Blockanweisung kategorisch einzusetzen, um Programmierfehler zu vermeiden. Wenn zum Beispiel eine if-Anweisung so wie in den Programmiersprachen C und Java so strukturiert ist, dass genau eine Folgeanweisung ausgeführt wird, wenn die Bedingung wahr ist, kann es ohne Blockanweisungen bei der Programmentwicklung oder -wartung leicht zu übersehenden Programmierfehlern kommen. Im folgenden korrekt formulierten Java-Programmbeispiel wird die Variable v1 auf den Wert null zurückgesetzt, falls sie den gleichen Zahlenwert wie max hat:
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
if (v1 == max)
v1 = 0;
</syntaxhighlight>
Soll zudem auch noch eine Textausgabe erfolgen, kann diese zusätzlich programmiert werden:
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
if (v1 == max)
v1 = 0;
java.lang.System.out.println ("Der Maximalwert wurde erreicht.");
</syntaxhighlight>
Die unterste Programmierzeile ist zwar eingerückt, was suggeriert, dass sie nur ausgeführt wird, wenn die darüberstehende Bedingung erfüllt ist. Ein Java-Interpreter führt jedoch nur eine einzige unmittelbar nach der Bedingung aufgeführte Anweisung aus, wenn die Bedingung wahr ist. Mit anderen Worten: die Textausgabe erfolgt im obigen Programmbeispiel immer, also insbesondere auch wenn die Variablen v1 und max nicht den gleichen Zahlenwert haben. Im Quelltext sollte das daher besser folgendermaßen formuliert werden:
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
if (v1 == max)
v1 = 0;
java.lang.System.out.println ("Der Maximalwert wurde erreicht.");
</syntaxhighlight>
Ähnlich tückisch ist die Tatsache, dass in manchen weniger streng strukturierten Programmiersprachen, auf die Bedingung der if-Anweisung eine beliebige Anweisung folgen darf, die nicht notwendigerweise eine Blockanweisung sein muss, sondern auch eine einzelne Anweisung sein darf, die zum Beispiel mit einem Semikolon abgeschlossen wird und auch eine '''leere Anweisung''' sein kann. Dies führt zu leicht zu übersehenden Programmierfehlern, wie im folgenden Beispiel:
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
if (v1 == max);
{
v1 = 0;
java.lang.System.out.println ("Der Maximalwert wurde erreicht.");
}
</syntaxhighlight>
Die Blockanweisung wird immer ausgeführt, obwohl ihre Darstellung mit korrekter Einrückung suggeriert, dass sie nur dann ausgeführt wird, wenn die boolesche Bedingung (v1 == max) erfüllt ist. Dies ist allerdings nicht der Fall, da direkt hinter den runden Klammern der if-Anweisung ein Semikolon steht, welches eine '''leere Anweisung''' implementiert, die bei der Erfüllung der Bedingung ausgeführt wird.
All diese Missverständnisse können leicht vermieden werden, indem bei der Programmierung von Kontrollstrukturen '''kategorisch Blockanweisungen''' verwendet werden, selbst wenn die Programmiersprache dies nicht fordert:
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
if (v1 == max)
{
v1 = 0;
}
</syntaxhighlight>
Beziehungsweise:
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
if (v1 == max)
{
v1 = 0;
java.lang.System.out.println ("Der Maximalwert wurde erreicht.");
}
else
{
java.lang.System.out.println ("Der Maximalwert wurde nicht erreicht.");
}
</syntaxhighlight>
==== Verschachtelung ====
In noch stärkerem Maße leidet die Verständlichkeit von Quellcode, wenn mehrere Kontrollstrukturen ohne die Verwendung von Blockstrukturen verschachtelt werden:
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
long v1, v2, v3;
v1 = 3;
v2 = 3;
v3 = 7;
if ((v1 > 0) && (v2 > 0))
if (v1 > v2)
v3 = v1 - v2;
else
v3 = v2 - v1;
java.lang.System.out.println ("v3 = " + v3);
</syntaxhighlight>
Beim Lesen des Quellcodes mit einer solchen "baumelnden" ''else''-Anweisung (englisch: ''dangling else'') kann schnell der Eindruck entstehen, dass sie zur ersten ''if''-Anweisung gehört und das Ergebnis für die Variable ''v3'' 7 bleibt, da ''v1'' und ''v2'' positive Zahlen sind. Tatsächlich wird der Quellcode jedoch so ausgeführt, so dass die Variable ''v3'' den Wert 0 erhält.
Um solche Missverständnisse zu vermeiden, ist es - wie oben bereits erwähnt - dringend geboten, Blockanweisungen kategorisch einzusetzen, auch wenn sie durch die Definition der Programmiersprache nicht sowieso vorgeschrieben sind:
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
long v1, v2, v3;
v1 = 3;
v2 = 3;
v3 = 7;
if ((v1 > 0) && (v2 > 0))
{
if (v1 > v2)
{
v3 = v1 - v2;
}
else
{
v3 = v2 - v1;
}
}
java.lang.System.out.println ("v3 = " + v3);
</syntaxhighlight>
==Wertebereiche==
===Division durch null===
Im Zusammenhang mit dem '''Divisionsoperator''' gibt es in allen Programmiersprachen das Problem, dass der Divisor nicht null werden darf.
Die Division durch null kann und sollte kategorisch durch eine geeignete Kontrollstruktur mit dem Vergleichsoperator "<>" verhindert werden, der nur bei Ungleichheit der beiden Operanden den Ergebniswert "wahr" erzeugt:
if (divisor <> 0)
{
quotient ← dividend / divisor
}
else
{
/* Ausnahmebehandlung / Fehlermeldung */
}
===Wertebereichsprüfung===
Bei Parametern mit eingeschränktem zulässigen Wertebereich kann eine allgemeine und an allen entsprechenden Stellen verwendbare Funktion programmiert werden, die den gültigen Wertebereich überprüft und einen entsprechenden (häufig zweiwertigen respektive booleschen) Funktionswert zurückgibt, wie zum Beispiel die folgende Funktion "waterIsLiquid ", die überprüft, ob die Wassertemperatur zwischen 0° und 100° Celsius liegt, bevor das spezifische Gewicht des Wassers berechnet werden darf:
boolean waterIsLiquid (double temperature) /* temperature in degrees Celsius */
{
final long freezingPoint ← 0;
final long boilingPoint ← 100;
boolean waterIsLiquid ← (temperature > freezingPoint) and (temperature < boilingPoint);
return waterIsLiquid;
}
...
double temperature, density;
...
if waterIsLiquid (temperature)
{
/* function computes an approximation of the density of air-free liquid water in kilograms per cubic metre */
density ←
( 999.83952
+ (16.945176 * temperature)
- (0.0079870401 * temperature * temperature)
- (0.000046170461 * temperature * temperature * temperature)
+ (0.00000010556302 * temperature * temperature * temperature * temperature)
- (0.00000000028054253 * temperature * temperature * temperature * temperature * temperature)
) / ((0.01689785 * temperature) + 1);
}
else
{
/* exception handling, because water is not liquid */
}
===Parameterkombinationen===
Es ist wichtig, dass immer alle auftretenden Parameterkombinationen berücksichtigt und vom Programmcode verarbeitet werden, wenn aus diesen Parametern valide berechnete Werte abgeleitet werden sollen.
Um zum Beispiel das Argument (also den Phasenwinkel zwischen -180° und +180°) einer komplexwertigen Zahl mit den reellwertigen Komponenten x und y über den Arcustangens ("arctan") zu berechnen, muss geprüft werden, ob der Parameter x gleich null ist, und welche Vorzeichen die Parameter x und y haben:
double x
double y
...
double argument
if (x = 0)
{
if (y > 0)
{
argument ← 90
}
elseif (y < 0)
{
argument ← -90
}
else /* y is equal to 0, too */
{
stop /* argument is not defined */
}
}
else /* x is not equal to 0 */
{
argument ← arctan (y / x)
if (x < 0)
{
if (y >= 0)
{
argument ← argument + 180
}
else /* both, x and y are less than 0 */
{
argument ← argument - 180
}
}
}
==Schnittstellen==
Schnittstellen definieren die Sichtbarkeits- und Zugriffsregeln zwischen verschiedenen Bestandteilen eines Programms und ermöglichen so die Interaktion zwischen diesen. Dabei ist es keineswegs sinnvoll, alle Bezeichner überall sichtbar zu machen, da dadurch die Übersichtlichkeit und Nachvollziehbarkeit insgesamt drastisch eingeschränkt wird. Dies führt letztlich zu Programmfehlern, da der Programmierer wegen der großen zu berücksichtigenden Datenmenge nicht mehr in der Lage ist, alle Implikationen seiner Arbeit zu überschauen.
Alle Eigenschaften (Attribute) und Methoden (Werkzeuge), die zusammengehören (aber auch nur diese), sollen in jeweils einer Einheit zusammengefasst werden, wie zum Beispiel einer Klasse oder einem Modul. Oft wird eine solche Einheit in einer Quelltextdatei zusammengefasst, was sinnvoll ist und die Nachvollziehbarkeit erleichtert.
Nur diejenigen Eigenschaften und Methoden, die außerhalb dieser Einheiten benutzt werden sollen oder müssen, dürfen mit einem Modifikator versehen werden, der dies ermöglicht (zum Beispiel "public"). Alle anderen Eigenschaften und Methoden sollten explizit als intern (zum Beispiel "private") deklariert sein. ''packages'' sind wegen der unübersichtlichen Sichtbarkeitsregeln (zum Beispiel durch den Modifikator "protected") als Zwischenebene entbehrlich und eher zu vermeiden. Alternativ können ohne weiteres längere, zusammengesetzte Klassennamen verwendet werden, um die Zugehörigkeit zu einem bestimmten Themenbereich zu kennzeichnen, wie zum Beispiel mit einfachen Bezeichnern:
StatisticsMyEvaluation
StatisticsMyAssessment
Diese Bezeichner sind in der Regel unmittelbar mit den Programmdateien im Dateisystem korreliert. Hierbei sind also keine '''qualifizierten Bezeichner''' auf verschiedene Konstrukte erforderlich, die hier im Beispiel aus mehreren Bezeichnern mit zwischengestellten Punkten zusammengesetzt sind. Links vom Punkt steht der Bezeichner der Programmbibliothek (Modulsammlung, Paket), und rechts vom Punkt steht der Bezeichner für ein Programmbaustein (Modul, Klasse):
package statistics
statistics.MyEvaluation
statistics.MyAssessment
===Importe===
====Import-Anweisungen====
'''Import-Anweisungen''' werden häufig nicht dazu benutzt anzumelden und anzuzeigen, welche externen Module (respektive Klassen) in einer Quelldatei verwendet werden, sondern werden als Möglichkeit missbraucht, den Quelltext möglichst kurz zu fassen.
Nicht:
import MyModule
...
drawLine ()
...
Sondern eindeutig mit qualifiziertem Bezeichner:
...
MyModule.drawLine ()
...
Mit diesen qualifizierten Bezeichnern ist es dann auch einfach und eindeutig möglich, gleichnamige Bezeichner, wie zum Beispiel für die Methode ''drawLine'', aus verschiedenen Klassen zu benutzen:
...
MyModule.drawLine ()
YourModule.drawLine ()
...
Die Erkennbarkeit der Herkunft eines importierten Bezeichners an jeder Stelle des Auftretens in einem Quelltext ist in der Regel von großer Nützlichkeit, insbesondere wenn andere Programmierer den Quelltext nachvollziehen können sollen oder wenn der Quellcode nach längerer Zeit gewartet werden soll.
Insbesondere Import-Anweisungen mit Wildcards sind schlecht nachvollziehbar (auch wenn viele Entwicklungssysteme Funktionen für eine gewisse Transparenz bieten), so wie zum Beispiel:
import myPackage.*
import yourPackage.*
drawLine () /* To which package does the method "drawLine" belong? */
Class var ← new Class () /* To which package does the class "Class" belong? */
====Zyklische Importe====
[[Datei:Zyklischer.Import.png|mini|rechts|hochkant=2|Zyklische Importe durch Aufruf ("call") des Unterprogramms ("procedure") '''sum''' aus der Klasse '''B''' in das Unterprogramm '''add''' der Klasse A sowie Aufruf des Unterprogramms '''add''' aus der Klasse '''A''' in das Unterprogramm '''sum''' der Klasse '''B'''.]]
'''Zyklische Importe''' beziehungsweise Zirkelbezüge sind nicht nur unübersichtlich, sondern auch unstrukturiert und können zu Speicherüberläufen führen, da sich Programmteile immer wieder gegenseitig aufrufen, ohne beendet zu werden. Ferner kann die Funktion des übersetzten Programms bei einer Optimierung des Codes von der Reihenfolge der Übersetzung der Quelltexte abhängen. Die Schnittstellen der Klassen und Module können im Allgemeinen weder unabhängig voneinander noch eindeutig überprüft werden.
'''Beispiel''': Die beiden Funktionen Funktionen ''add'' aus der Klasse ''A'' und ''sum'' aus der Klasse ''B'' rufen sich endlos gegenseitig auf, um die Summe zweier Zahlenwerte zu berechnen, bis der Speicher überlaufen würde und das Laufzeitsystem die Ausführung deswegen abbricht oder der Speicher überläuft, das Programm unkontrolliert und ohne (nachvollziehbare) Fehlermeldung abstürzt.
<div style="clear:both"></div>
public class A
{
public int procedure add (int a, int b)
{
int result ← B.sum (a, b);
return result;
}
}
public class B
{
public int procedure sum (int x, int y)
{
int result ← A.add (x, y);
return result;
}
}
[[Datei:Circular Reference.svg|mini|rechts|hochkant=1|Variante von Abhängigkeiten zwischen Modulen oder Klassen, in denen die zyklischen Bezüge weniger offensichtlich sind, wenn nur der nächste Nachbar betrachtet wird. Der dunkelrote Pfeil oben rechts zeigt nach unten auf ein bereits vorher definiertes Element, das sich rechts in der Mitte befindet. Die Definition dieses Elements darf bei einem strukturierten Aufbau der Programmteile allerdings nicht von dem Element ober rechts abhängig sein.]]
Solche zyklischen Abhängigkeiten können durch Verzweigungen und indirekte Aufrufe wesentlich weniger offensichtlich sein, und sind dann nur sehr schwierig zu erkennen und zu beheben. Sichere Programmiersprachen überprüfen solche zyklischen Zusammenhänge daher und lassen sie nicht zu.
In der Regel ist es bei der Anwendung von rekursiven Programmiertechniken mit wohldefinierten Abbruchbedingungen möglich, ohne zyklische Modulabhängigkeiten auszukommen. Ein Übersetzer kann in den Metadaten von Programm-Modulen Zeitstempel verwenden, um bei der Interpretation eines Programmteils herausfinden zu können, ob alle anderen importierten Programmteile bereits vorher gültig übersetzt wurden.
<div style="clear:both"></div>
==Nebeneffekte==
'''Nebeneffekte''' treten auf, wenn der Programmierer von naheliegenden, jedoch falschen Annahmen ausgeht, die die Programmiersprache betreffen. Solche Nebeneffekte sind unerwünscht und können durch ein strukturiertes Vorgehen oft leicht vermieden werden.
===Durch arithmetischen Überlauf===
Als Indiz für solche Nebeneffekte möge folgendes Beispiel in Java dienen, bei dem die Dezimalzahl 127 (die hexadezimale Repräsentation dieses Zahlenwerts ist durch die acht Ziffern 7F gegeben) um eins erhöht wird:
<syntaxhighlight lang="Java">
byte zahl = 127;
java.lang.System.out.println ("zahl = " + zahl);
zahl++;
java.lang.System.out.println ("zahl = " + zahl);
</syntaxhighlight>
Diese Anweisungsfolge erzeugt die Ausgabe:
:zahl = 127
:zahl = -128
Wenn die größte mit dem Datentyp "byte" darstellbare Zahl 127 mit dem Inkrement-Operator ++ um eins erhöht wird, ergibt sich durch arithmetischen Überlauf als Ergebnis die kleinste darstellbare ganze Zahl 128.
Dass solche Nebeneffekte auch in Standard-Bibliotheken versteckt sein können, möge das folgende Beispiel in Java zeigen, bei dem die Dezimalzahl -1 (die hexadezimale Repräsentation dieses Zahlenwerts ist durch die acht Ziffern FFFFFFFF gegeben) mit zwei verschiedenen Unterprogrammen ausgegeben werden soll (Stand 2026):
<syntaxhighlight lang="Java">
long zahl = 0xFFFFFFFF;
java.lang.System.out.println ("dezimal: " + zahl);
java.lang.System.out.print ("hexadezimal: ");
java.lang.System.out.printf ("%h\n", zahl);
</syntaxhighlight>
Diese Anweisungsfolge erzeugt die Ausgabe:
:dezimal: -1
:hexadezimal: 0
Die Methode "printf" für die Ausgabe im hexadezimalen Format (Steuersequenz h%), ruft die statische Methode "formatUnsignedLong0" aus der Klasse "Long" aus dem package "java.lang" im Modul "java.base" der Java-Standardbibliothek auf und gibt den Wert 0 aus, obwohl der korrekte hexadezimale Wert FFFFFFFF lautet. Der Fehler entsteht bei der internen Berechnung, bei der es einen arithmetischen Überlauf gibt, der nicht explizit abgefangen wird.
===Durch Rundung===
Manchmal ist es schwierig zu erkennen, dass das Ergebnis einer Operation nicht dem exakten Ergebnis entspricht, das mathematisch zu erwarten wäre, weil es Rundungsfehler gibt. Gleitkommazahlen können nicht mit beliebig hoher Präzision gespeichert werden, und daher können sich dadurch solche Rundungsfehler auch mit einer völlig unerwarteten Wirkung ergeben. Hier ein Beispiel in der Programmiersprache Java für ein System mit einer Speichertiefe von 64 Bit:
<syntaxhighlight lang="Java">
double a = 4.4;
double b = 3.3;
java.lang.System.out.println (a - b);
</syntaxhighlight>
Die Ausgabe lautet nicht "1.1" wie zu erwarten wäre, sondern:
:1.1000000000000005
Noch schwieriger ist es, wenn das Kommutativ-, das Distributiv- oder das Assoziativgesetz nicht zu gelten scheinen, wie in diesem Beispiel, bei dem die Variable "b" einmal zur Variable "a" und einmal zur Variable "c" assoziiert ist:
<syntaxhighlight lang="Java">
double a = 4.4;
double b = 3.3;
double c = 1.1;
java.lang.System.out.println ((a - b) - c);
java.lang.System.out.println (a - (b + c));
</syntaxhighlight>
Mathematisch kommt in beiden Fällen exakt der Wert null heraus, die Ausgabe lautet jedoch:
:4.440892098500626E-16
:0.0
Die Wirkung von derartigen Nebeneffekten sind nur sehr schwierig zu beherrschen, und daher sollte beim Vergleichen von Gleitkommawerten die Präzision respektive die Maschinengenauigkeit der gespeicherten Werte berücksichtigt werden. Manche Programmiersprachen stellen hierfür einen Wert für die kleineste relative Genauigkeit von Gleitkommazahlen <math>\epsilon</math> (epsilon) zur Verfügung. Das folgende Beispiel für den Datentyp double mit 64 Bit Speichertiefe nach dem Standard IEEE 754 in der Programmiersprache Java mit einem Wert für <math>\epsilon = 10^{-15}</math> nach der Formel:
:<math>\Bigg| {\frac {differenzBerechnet - differenzErwartet} {differenzErwartet}} \Bigg| < \epsilon</math>
<syntaxhighlight lang="Java">
double a = 4.4;
double b = 3.3;
double differenzBerechnet = a - b;
double differenzErwartet = 1.1;
boolean gleichheit1 = (differenzBerechnet == differenzErwartet);
java.lang.System.out.println (gleichheit1);
double epsilon = 1.0E-15;
boolean gleichheit2 = java.lang.Math.abs ((differenzBerechnet - differenzErwartet) / differenzErwartet) < epsilon;
java.lang.System.out.println (gleichheit2);
</syntaxhighlight>
Die Ausgabe lautet hier:
:false
:true
===Durch Reihenfolge===
In einigen Programmiersprachen ist die Reihenfolge der Abarbeitung von kombinierten Ausdrücken nicht explizit definiert und führt daher zu einem solchen Nebeneffekt.
Die Anweisungen
h ← f (x) + g (x)
oder
h ← g (x) + f (x)
können je nach Compiler zu unterschiedlichen Ergebnissen für die Summe h führen. Die Methodenaufrufe f oder g können nämlich unter Umständen die als Parameter verwendete (lokale) Variable x verändern und somit gegebenenfalls verschiedene Werte für h erzeugen, je nachdem, ob zuerst f (x) oder g (x) ausgewertet wird. In solchen Programmiersprachen sind sogenannte Durchgangsparameter in kombinierten Ausdrücken zu vermeiden.
Ferner ist es denkbar, dass durch den ersten Funktionsaufruf globale Variablen oder Instanzen verändert und beim zweiten Funktionsaufruf verwendet werden.
Die erwünschte Reihenfolge von Funktionsaufrufen kann leicht durch entsprechende Code-Sequenzen mit sequentiellen Anweisungen erzwungen werden:
result_f ← f (x)
result_g ← g (x)
h ← result_f + result_g
Dieses Vorgehen erzeugt darüberhinaus den günstigen Umstand, dass die Zwischenergebnisse in lokalen Variablen gespeichert und somit abgefragt werden können. Diese sind nach einem Programmabbruch dann auch mit einem Post-Mortem-Debugger analysierbar.
===Durch Kombination von Operatoren===
Manche Programmiersprachen - insbesondere in der C-Sprachfamilie - erlauben die Kombination von Zuweisungsoperatoren und arithmetischen Operatoren.
Zuweisungsoperator: =
Arithmetische Operatoren: + - * /
Kombinierte Operatoren: += -= *= /=
Die kombinierten Operatoren sollen für die scheinbar äquivalenten Formulierungen mit getrenntem Zuweisungsoperator und arithmetischem Operator stehen:
a += 1; steht für a = a + 1;
a -= 1; steht für a = a - 1;
a *= 1; steht für a = a * 1;
a /= 1; steht für a = a / 1;
Diese Schreibweisen sollen wohl vor allem ein wenig Schreibarbeit bei der Programmierung ersparen, können aber zu schwer zu identifizierenden Programmierfehlern führen, wie das folgende Java-Beispiel verdeutlichen soll:
<syntaxhighlight lang="Java">
long a = 1;
double b = 1.5;
a *= b;
java.lang.System.out.println (a);
a += b;
java.lang.System.out.println (a);
a -= b;
java.lang.System.out.println (a);
</syntaxhighlight>
Dieser Code erzeugt die Ausgabe:
1
2
0
Die nur scheinbar äquivalenten Formulierungen für die kombinierten Operatoren
<syntaxhighlight lang="Java">
a = a * b;
a = a + b;
a = a - b;
</syntaxhighlight>
werden in Java wegen der mangelnden Zuweisungskompatibilität der arithmetischen Ausdrücke hinter dem Zuweisungsoperator vom Datentyp "double" zum Datentyp "long" der Variable "a" gar nicht übersetzt.
Die tatsächlichen äquivalenten Formulierungen für die kombinierten Operatoren lauten nämlich wie folgt:
<syntaxhighlight lang="Java">
a = (long) (a * b);
a = (long) (a + b);
a = (long) (a - b);
</syntaxhighlight>
Durch die impliziten Datentypumwandlungen erklären sich auch die falschen numerischen und gegebenenfalls nicht erwarteten ganzzahligen Ergebnisse. Wenn bei der Programmierung diese Tatsachen nicht bewusst sind oder übersehen werden, ergeben sich numerische Fehler in den arithmetischen Berechnungen. Dies kann einfach vermieden werden, indem kombinierte Operatoren zugunsten der expliziten sowie transparenten Formulierungen mit separaten Operatoren nicht verwendet werden.
=== Durch Sprachdefinition ===
Als Beispiel dient hier die scheinbar falsche Ausgabe eines Java-Programms, weil die Definition der Programmiersprache der Intuition widerspricht:
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
long i = 01234567;
java.lang.System.out.println (i);
</syntaxhighlight>
Dieser Code erzeugt die Ausgabe:
342391
Das Literal "01234567" wird trotz der ausschließlichen Verwendung von gültigen dezimalen Ziffern nicht als die Dezimalzahl 1234567<sub>10</sub> interpretiert und ausgegeben, sondern entsprechend der Definition der Programmiersprache Java wegen der einleitenden Null als Oktalzahl zur Basis Acht, also als 1234567<sub>8</sub> = 342391<sub>10</sub>.
=== Durch Überladen ===
Eine Überladung liegt vor, wenn eine Operator oder ein Bezeichner mehrfach in verschiedenen Bedeutungen auftritt, die leicht zu Verwechslungen führen können. Streng strukturierte Programmiersprachen erlauben das polymorphe Überladen nicht, wenn es dadurch zu Programmierfehlern kommen kann.
Das '''Überladen''' muss in der objektorientierten Programmierung vom '''Überschreiben''' unterschieden werden, wobei auch überschriebene Methoden in weniger strukturierten Programmiersprachen überladen werden dürfen, was ebenfalls zu unübersichtlichem Programmcode und schnell zu übersehenden Programmierfehlern führen kann. Siehe hierzu unten unter [[Strukturierte Programmierung#Überladung|Überladung]].
==== Überladung von Divisionsoperatoren ====
Die Divisionsoperatoren sind in vielen Programmiersprachen leider überladen, wenn nämlich formal keine Unterscheidung zwischen Division mit ganzen Zahlen (Datentyp zum Beispiel "long" oder "int") und Gleitkommazahlen (Datentyp zum Beispiel "real" oder "double") gemacht wird. In diesen Fällen muss der Divisionsoperator sehr aufmerksam verwendet werden:
int i ← 2;
int j ← 1;
real k ← j / i; /* Ueberladener Divisionsoperator mit zwei ganzzahligen Operanden */
Verwendet die Programmiersprache im arithmetischen Ausdruck die ganzzahlige Division, hat dies zur Folge, dass die Variable k den Wert '''0''' erhält. Verwendet die Programmiersprache stattdessen die reelwertige Division, bekommt die Variable k den Wert 0,5 zugewiesen.
Einige Programmiersprachen unterscheiden daher sinnvollerweise explizit zwischen einem Operator für die ganzzahlige Division ("div" oder "DIV") und einem Operator für die Gleitkommadivision ("/").
<syntaxhighlight lang="pascal">
(* Programmiersprache Pascal *)
i, j : integer;
k : real;
i := 2;
j := 1;
k := j / i; (* Gleitkommazahliger Divisionsoperator mit zwei ganzzahligen Operanden *)
</syntaxhighlight>
In der letzten Anweisung wird der Variablen "k" der Zahlenwert der reellwertigen Division '''0,5''' zugewiesen.
<syntaxhighlight lang="pascal">
(* Programmiersprache Pascal *)
i, j, k : integer;
i := 2;
j := 1;
k := j div i; (* Ganzzahliger Divisionsoperator mit zwei ganzzahligen Operanden *)
</syntaxhighlight>
In der letzten Anweisung wird der Variablen "k" der Zahlenwert der ganzzahligen Division '''0''' zugewiesen.
Bei Programmiersprachen, die die Unterscheidung der Divisionsoperatoren nicht unterstützen, ist die Verwendung der expliziten und zuweisungskompatiblen Datentypumwandlung (englisch: ''type cast'') nicht nur sinnvoll, sondern sogar zwingend erforderlich:
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
long i = 2;
long j = 1;
double k = ((double) j) / ((double) i) /* Ueberladener Divisionsoperator mit zwei gleitkommazahligen Operanden */
</syntaxhighlight>
In der Regel ist es für eine Gleitkommadivision hierbei ausreichend, wenn nur einer der beiden Operanden, also nur der Nenner (Dividend) oder der nur Zähler (Divisor) der Division, eine Gleitkommazahl darstellt.
Entsprechende Überlegungen gelten auch für alle '''Modulo-Operatoren''' (wie zum Beispiel "%", "mod" oder "MOD").
==== Überladung von Variablen ====
Oft ist es in einer Programmiersprache erlaubt, dieselben Bezeichner für Variablen mit verschiedenen Sichtbarkeitsbereichen zu verwenden. Dies kann sehr einfach zur Verwechslung dieser Variablen führen, wie im folgenden Java-Beispiel verdeutlicht wird, wo es sowohl eine globale Klassenvariable (Sichtbarkeit in der Klasse "OverloadedVariables") als auch eine lokale Variable (Sichtbarkeit in der Methode "main") mit dem Namen "bezeichner" gibt:<syntaxhighlight lang="java">
public class OverloadedVariables
{
// globale Klassenvariable "bezeichner"
private static long bezeichner = 1;
// Hauptprogramm (Methode "main")
public static void main (java.lang.String [] argumente)
{
// lokale Variable "bezeichner"
long bezeichner = 2;
// Ausgabe der globalen Klassenvariable "bezeichner"
java.lang.System.out.println ("Wert der globalen Variable = " + OverloadedVariables.bezeichner);
// Ausgabe der lokalen Variable aus der Methode "main"
java.lang.System.out.println ("Wert der lokalen Variable = " + bezeichner);
}
}
</syntaxhighlight>Falls die Klassenvariable referenziert werden soll, muss sie in Java qualifiziert bezeichnet werden, indem der Name der Klasse vorangestellt wird.
==== Überladung von Methoden ====
Viele Programmiersprachen erlauben die Deklaration von mehreren Methoden mit gleichem Bezeichner, die sich in der Anzahl oder den Datentypen ihrer Parameter unterscheiden. Das folgende Java-Beispiel mit zwei Methoden demselben Namens, von denen die mit der passenden Datentyp des Parameters "zahl" aufgerufen wird, verdeutlicht dies:<syntaxhighlight lang="java">
private static long kehrwert (long zahl)
{
long kehrwert = 1 / zahl;
return kehrwert;
}
private static double kehrwert (double zahl)
{
double kehrwert = 1 / zahl;
return kehrwert;
}
public static void main (java.lang.String [] argumente)
{
double kehrwert1 = kehrwert (2);
double kehrwert2 = kehrwert (2.0);
java.lang.System.out.println ("Kehrwert 1 = " + kehrwert1);
java.lang.System.out.println ("Kehrwert 2 = " + kehrwert2);
}
</syntaxhighlight>Die Ausgabe ergibt zwei verschiedene Ergebnisse für den Kehrwert der Zahl Zwei:<syntaxhighlight>
Kehrwert 1 = 0.0
Kehrwert 2 = 0.5
</syntaxhighlight>Durch die kategorische Verwendung verschiedener Bezeichner für verschiedene Methoden kann die Verwechslungsgefahr leicht und ohne Probleme verhindert werden, und die Erzeugung der beiden verschiedenen Ergebnisse wird transparent:<syntaxhighlight lang="java">private static long kehrwertLong (long zahl)
{
long kehrwert = 1 / zahl;
return kehrwert;
}
private static double kehrwertDouble (double zahl)
{
double kehrwert = 1 / zahl;
return kehrwert;
}
public static void main (java.lang.String [] argumente)
{
double kehrwert1 = kehrwertLong (2);
double kehrwert2 = kehrwertDouble (2.0);
java.lang.System.out.println ("Kehrwert 1 = " + kehrwert1);
java.lang.System.out.println ("Kehrwert 2 = " + kehrwert2);
}</syntaxhighlight>
===Durch falsche Spezifikation===
In Programmiersprachen, die dynamische Variablen ausschließlich als Zeiger behandeln (wie zum Beispiel C oder C++), kann trotz exakter Übereinstimmung der referenzierten Datentypen bei einer Zuweisung des Ergebnisses einer Funktion ein Zeiger auf den lokalen Stapelspeicher der Funktion zurückgegeben werden, der nur während der Ausführung der Funktion, aber nicht mehr nach dem Rücksprung aus der Funktion gültig ist. Während der weiteren Programmausführung kann der Speicherbereich jederzeit überschrieben werden, ohne dass der Programmierer dies wünscht oder absehen kann.
Im folgenden Beispiel in der Programmiersprache C wird innerhalb der Funktion ''function'' der Wert 5 dem Datenfeld ''a'' der Variablen ''data'' zwar korrekt zugewiesen, kann aber nach dem Rücksprung aus der Funktion im Stapelspeicher jederzeit unbeabsichtigt verändert werden, wie zum Beispiel beim erneuten Aufruf einer Funktion oder anderen Operationen, die den Stapelspeicher verwenden:
<syntaxhighlight lang="C">
/* Programmiersprache C */
struct DataType { int a }; // Definition des Datentyps ''DataType'' mit einem ganzzahligen Datenfeld ''a''
// Deklaration der Funktion ''function'' mit einem Zeiger auf eine Variable vom Datentyp ''DataType'' als Speicheradresse für den Rückgabewert
DataType* function ()
{
DataType data; // Deklaration der lokalen Variable ''data'' vom Datentyp ''DataType''
data.a = 5; // Zuweisung des Wertes ''5'' zum Datenfeld ''a'' der Variablen ''data''
return &data; // Rückgabe der lokalen, temporären Speicheradresse von ''data'', die nach der Beendigung des Funktionsaufrufs gar nicht mehr gültig ist.
}
</syntaxhighlight>
Der Programmierer muss zur Abwendung dieses Übels darauf achten, dass Rückgabewerte durch Allokation einer entsprechenden Variablen in einem dauerhaft verfügbaren dynamischen Speicherbereich (also zum Beispiel im Heap-Speicher) auch nach dem Aufruf der Funktion noch gültig und korrekt aufrufbar sind.
Bei der Verwendung von vollständig typsicheren Programmiersprachen ist die Rückgabe von lokal definierten Adressen nicht zulässig, und die Übersetzung des entsprechenden Codes wird vom Complier von vornherein verweigert, so dass es gar nicht zu einem solchen Nebeneffekt kommen kann.
Alternativ kann der Datentyp ''DataType'' nicht direkt als Verbund, sondern als Zeiger auf einen entsprechenden Verbund deklariert werden. In diesem Fall muss in der Funktion zunächst eine Instanz erzeugt werden (beispielsweise mit dem Kommando ''new'' oder ''allocate''). Diese Instanz ist dann nicht mehr im lokalen Stapelspeicher (Stack) der Funktion gespeichert, sondern es kann im dynamischen Speicherbereich (Heap) global - also auch außerhalb der Funktion und nach Beendigung des Funktionsaufrufs - darauf zugegriffen werden.
===Durch Verwechslung von Speicherinhalt und Speicheradresse===
Die Werte von Variablen werden unter einer bestimmten Speicheradresse eines Computers gespeichert, wo vom Laufzeitsystem die für den entsprechenden Datentyp erforderliche Datenmenge der entsprechende Speicherplatz reserviert und bereitgehalten wird. Diese Speicheradresse wird in modernen Systemen in der Regel automatisch verwaltet, so dass sie im Allgemeinen gar nicht bekannt ist und auch gar nicht bekannt sein muss.
Daraus ergeben sich unter Umständen jedoch wichtige Implikationen. In manchen Programmiersprachen, wie zum Beispiel Java, ist nämlich nicht unmittelbar erkennbar, ob bei bestimmten Operationen der Speicherinhalt oder die Speicheradresse einer Variablen verwendet wird. So werden bei bei logischen Vergleichen mit Operanden, die aus Variablen mit einfachen Datentypen bestehen (etwa boolean, long oder double), die unter der Speicheradresse gespeicherten '''Werte''' verglichen, also die Inhalte. Bei Variablen mit komplexen Datentypen (beispielsweise eine abzählbare Liste von Daten eines Datentyps (array), ein Verbund (record / struct), der sich aus verschiedenen Datentypen zusammensetzen kann, oder allgemein in der objektorientierten Programmierung die Instanz eines Objekts) werden jedoch gar nicht unbedingt die gespeicherten Inhalte, sondern lediglich die Speicheradressen der beiden Operanden verglichen. Hier wird also beim Gleichheitsoperator nur geprüft, ob es sich um dasselbe Speicherobjekt (dieselbe Instanz) handelt, und nicht, ob zwei verschiedene Speicherobjekte den gleichen Inhalt haben. Bei strenger Strukturierung wird (hoffentlich schon vor der Ausführung bereits im Quelltext) zusätzlich geprüft, ob die zu vergleichenden komplexen Datentypen überhaupt zuweisungskompatibel und somit sinnvoll vergleichbar sind.
Unter welchen Umständen welche Speicheradressen für gleiche Speicherinhalte verwendet werden, ist insbesondere für unerfahrene Programmierer keineswegs immer naheliegend oder leicht nachzuvollziehen. Dies wird im Folgenden anhand des logischen Vergleichs auf Gleichheit von Zeichenketten (Java-Klasse java.lang.String) in der Programmiersprache Java verdeutlicht. Die Wirkungsweise des Gleichheitsoperators == wird der Wirkungsweise des Funktionsaufrufs der Methode '''java.lang.String.equals''' gegenübergestellt, die einen booleschen Rückgabewert hat.
<syntaxhighlight lang="Java">
boolean vergleich;
// Die symbolische Konstante für die Zeichenkette "abc" wird in einer Variablen mit dem Bezeichner text verwaltet
// Die Zeichenkette "abc" wird von Java unter der Speicheradresse #MEM1 abgelegt
// Die Variable text und die symbolische konstante Zeichenkette "abc" haben dieselbe Speicheradresse #MEM1
java.lang.String text = "abc";
// Vergleich der Speicheradresse #MEM1 mit der Speicheradresse #MEM1
vergleich = ("abc" == "abc");
java.lang.System.out.println ("1. Vergleich \"abc\" == \"abc\": " + vergleich);
// Vergleich der Speicheradresse #MEM1 mit der Speicheradresse #MEM1 !!!
vergleich = (text == "abc");
java.lang.System.out.println ("2. Vergleich text == \"abc\": " + vergleich);
// Vergleich des Inhalts bei der Speicheradresse #MEM1 mit dem Inhalt bei der Speicheradresse #MEM1
vergleich = text.equals ("abc");
java.lang.System.out.println ("3. Vergleich text.equals (\"abc\"): " + vergleich);
// Neue Instanz fuer die bereits oben deklarierte Zeichenkette text
// Die neue Instanz wird mit dem new-Operator unter der Speicheradresse #MEM2 erzeugt
// Der Speicherinhalt wird mit dem Konstruktor java.lang.String und dem Wert "abc" initialisiert
// Die Variable text bekommt durch die Zuweisung die Speicheradresse #MEM2
text = new java.lang.String ("abc");
// Vergleich der Speicheradresse #MEM2 mit der Speicheradresse #MEM1 !!!
vergleich = (text == "abc");
java.lang.System.out.println ("4. Vergleich text == \"abc\": " + vergleich);
// Vergleich des Inhalts bei der Speicheradresse #MEM2 mit dem Inhalt bei der Speicheradresse #MEM1
vergleich = text.equals ("abc");
java.lang.System.out.println ("5. Vergleich text.equals (\"abc\"): " + vergleich);
</syntaxhighlight>
Die Textausgabe dieses Programms sieht wie folgt aus:
<syntaxhighlight lang="text">
1. Vergleich "abc" == "abc": true
2. Vergleich text == "abc": true
3. Vergleich text.equals ("abc"): true
4. Vergleich text == "abc": false
5. Vergleich text.equals ("abc"): true
</syntaxhighlight>
Symbolisch konstante Zeichenketten, wie zum Beispiel der Ausdruck "abc", werden unter einer verdeckten Speicheradresse abgelegt und von Java für gleichlautende Ausdrücke automatisch wiederverwendet. Wird jedoch mit dem new-Operator eine Instanz eines Objekts erzeugt, so bekommt diese unabhängig davon, welcher Inhalt dort gespeichert wird, stets eine andere neue Speicheradresse zugeordnet. Für den Vergleich des Inhalts von Zeichenketten auf Gleichheit ist in Java also immer die generische typengebundene Methode "equals'' zu verwenden. Diese typengebundene Methode "equals" gibt es auch in vielen anderen Java-Klassen, um den Inhalt der entsprechenden Objektinstanzen auf Gleichheit vergleichen zu können.
==Strukturierte objektorientierte Programmierung==
===Vermeidung von Codewiederholung durch Vererbung===
Die Vermeidung von Codewiederholung durch Vererbung kann beispielsweise an den beiden graphischen Objekten '''Kreis''' und '''Dreieck''' deutlich gemacht werden. Diese beiden Objekte können unabhängig voneinander als Datentyp modelliert werden, wobei ihre gemeinsamen Eigenschaften '''Farbe''' und '''Strichstärke''', sowie die jeweilige Methode zum '''Zeichnen''' beide Male unabhängig behandelt werden (dies kann eindeutig durch '''Hat'''-Beziehungen ausgedrückt werden: ein Kreis oder ein Dreieck '''hat''' eine Farbe, eine Strickstärke sowie eine Methode zum Zeichnen), was eine Codewiederholung darstellt. Der '''Kreis''' hat zusätzlich das Attribut '''Radius''', und das '''Dreieck''' hat zusätzlich die drei Attribute '''SeiteA''', '''SeiteB''' und '''SeiteC''':
Kreis hat: Farbe, Strichstärke, Methode zum Zeichnen, Radius
Dreieck hat: Farbe, Strichstärke, Methode zum Zeichnen, SeiteA, SeiteB, SeiteC
Mithilfe von Vererbung kann die Codewiederholung vermieden werden, indem die Attribute '''Farbe''' und '''Strichstärke''', sowie die Methode zum '''Zeichnen''' nur einmal mithilfe des abstrakten Objekts '''GraphischesObjekt''' deklariert werden. Die konkreten Objekte '''Kreis''' und '''Dreieck''' erben alle gemeinsamen Eigenschaften und Methoden (respektive typengebundenen Prozeduren) von '''GraphischesObjekt''' (dies kann eindeutig durch '''Ist'''-Beziehungen ausgedrückt werden: ein Kreis '''ist''' ein GraphischesObjekt, und ein Dreieck '''ist''' ein GraphischesObjekt) und werden nur durch die jeweils fehlenden Attribute ergänzt:
GraphischesObjekt hat: Farbe, Strichstärke, Methode zum Zeichnen
Kreis ist GraphischesObjekt, hat zusätzlich: Radius
Dreieck ist GraphischesObjekt, hat zusätzlich: SeiteA, SeiteB, SeiteC
===Überladung===
Das '''Überladen''' von Methoden, Konstruktoren oder Variablen ist auch bei objektorientierter Programmierung überflüssig, erschwert die Nachvollziehbarkeit vom Quellcode und birgt die Gefahr von Programmierfehlern, die unter Umständen erst lange nach der Entwicklung der Software bei deren Wartung entstehen. Das folgende Beispiel verdeutlicht einen leicht zu übersehenden Programmierfehler durch die Veränderung bei den überladenen Funktionen während der Programmentwicklung oder Programmwartung:
double quotient (double a, double b)
{
return a / b; /* Gleitkommazahlige Division */
}
long i ← 1;
long j ← 2;
double q ← quotient (i, j); /* q ist 0,5 da die gleitkommazahlige Definition der Funktion 'quotient' verwendet wird */
Wird die Funktion 'quotient' später mit einer ganzzahligen Variante überladen, ergibt sich beim bestehenden Aufruf der Funktion unbeabsichtigt ein anderes Ergebnis für die Variable 'q':
double quotient (long a, long b)
{
return a DIV b; /* Ganzzahlige Division */
}
double quotient (double a, double b)
{
return a / b; /* Gleitkommazahlige Division */
}
long i ← 1;
long j ← 2;
double q ← quotient (i, j); /* q ist 0 da die ganzzahlige Definition der Funktion 'quotient' verwendet wird */
Noch unübersichtlicher wird die Lage, wenn zusätzlich auch noch Überladungen mit gemischten Datentypen für die Funktionsparameter definiert werden:
double quotient (long a, long b)
double quotient (double a, long b)
double quotient (long a, double b)
double quotient (double a, double b)
Deswegen werden Methoden oder Attribute besser nicht überladen, auch nicht, wenn die Programmiersprache dies zulässt. Auch jede Klasse bekommt daher maximal einen einzigen '''Konstruktor''', der alle erforderlichen Parameter zur Initialisierung der Instanzvariablen enthält. Als günstige Nebeneffekte stellen sich kürzere Übersetzungszeiten ein.
Wenn die ursprünglichen Deklarationen in der Basisklasse oder einer der von ihr erbenden Klassen überladen werden, indem zum Beispiel weitere gleichnamige Methoden mit abweichenden Parametern definiert werden, dann kann es zu verändertem Verhalten von Software kommen. Ohne dass die Anwendung selbst geändert wurde, kann es allein durch die Aktualisierung einer verwendeten Klasse zu völlig anderen Rechenergebnissen kommen, weil automatisch eine andere, neu überladene Methode aufgerufen wird, ohne dass dies im Quelltext des Anwendungsprogramms sichtbar wird. Die Folge können schwerwiegende Programmierfehler sein, die schwierig zu analysieren sind.
Als ein Beispiel diene hier die Methode java.lang.Math.ulp zur Bestimmung der "'''u'''nits in the '''l'''ast '''p'''lace" ("Einheiten in der letzten Stelle"), die in der Klasse java.lang.Math aus historischen Gründen mit zwei Parametern deklariert und somit überladen ist:
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
public class Math;
{
public static double ulp (double d)
public static float ulp (float f)
}
</syntaxhighlight>
Der folgende Java-Code
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
double zahl;
zahl = java.lang.Math.ulp (1L); // Datentyp long
java.lang.System.out.println (zahl);
zahl = java.lang.Math.ulp (1F); // Datentyp float
java.lang.System.out.println (zahl);
zahl = java.lang.Math.ulp (1D); // Datentyp double
java.lang.System.out.println (zahl);
</syntaxhighlight>
erzeugt folgende Ausgabe, da die ganze Zahl Eins mit dem Datentyp long (64 Bit) in der Programmiersprache Java implizit offensichtlich nicht in den Datentyp double (64 Bit), sondern in den Datentyp float (32 Bit) umgewandelt wird, und somit die mit dem Parameter des Datentyps float deklarierte Methode aufgerufen wird:
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
1.1920928955078125E-7
1.1920928955078125E-7
2.220446049250313E-16
</syntaxhighlight>
Falls bei einer neueren Version der Klasse java.lang.Math die Methode ulp mit einem Parameter des Datentyps long überladen würde, wäre das Ergebnis mit dem ganzzahligen Parameter des Werts "1L" (long) nicht mehr vorhersagbar, obwohl der oben angegebene Methodenaufruf sich formal gar nicht geändert hätte.
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
public class Math;
{
public static double ulp (double d)
public static float ulp (float f)
public static double ulp (long l)
}
</syntaxhighlight>
Das Ergebnis des Aufrufs
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
double zahl = java.lang.Math.ulp (1L);
java.lang.System.out.println (zahl);
</syntaxhighlight>
würde dann allein von der tatsächlichen Implementierung der neuen überladenen Methode mit dem Parameter des Datentyps long abhängen, die mit den alten beiden ulp-Methoden nichts mehr zu tun hat, außer, dass sie den gleichen Namen hat.
===Überschreibung===
Das '''Überschreiben''' von geerbten Methoden oder Konstruktoren ist etwas völlig anderes als das Überladen und kann sehr sinnvoll sein.
Beim Überschreiben muss die Signatur der Methode (oder des Konstruktors) unter strikter Beachtung der Zuweisungskompatibilität, der Anzahl und der Reihenfolge aller Parameter sowie der Rückgabewerte berücksichtigt werden. Wenn die Programmiersprache dies nicht automatisch unterstützt, sind wenigstens entsprechend aufwendige Maßnahmen im Quelltext sicherzustellen, wie zum Beispiel explizite Typenprüfungen oder hinreichend ausführliche Hinweise in Kommentaren.
Wenn Methoden oder Konstruktoren einer Basisklasse von der überschreibenden Klasse aufgerufen werden (englisch ''super call'') kann es zum ''Fragile Base Class Problem'' (zu Deutsch ''Problem der anfälligen Basisklasse'') kommen, da bei der Implementierung der Basisklasse die möglichen Auswirkungen in den später implementierten, überschreibenden Klassen nicht berücksichtigt werden konnten. Zur Abwendung dieser Gefahr sind ein besonders sorgfältiger und strukturierter Programmierstil sowie eine lückenlose Dokumentation des Quelltextes sehr hilfreich.
Das fehlerfreie und robuste Überschreiben von Klassen beziehungsweise die Vererbung von implementierten Klassen erfordern eine hohe Fähigkeit zum abstrakten Denken und eine umfangreiche Programmiererfahrung.
===Mehrfachvererbung===
Durch [[w:Mehrfachvererbung|Mehrfachvererbung]], also das Erben von Methoden und Instanzvariablen aus mehreren Basisklassen, führt zu komplexen, und schwierig zu durchschauenden Abhängigkeiten, die im Rahmen des [[w:Diamond-Problem|Diamond-Problems]] sogar zu unerwünschten Mehrdeutigkeiten führen kann. Die Vererbung aus zwei Basisklassen kann bei Bedarf ohne weiteres durch die Verwendung von [[w:Zwillingsklasse|Zwillingsklassen]] vermieden werden, was den Programmieraufwand ein wenig erhöht, aber dafür solche Mehrdeutigkeiten verhindert und außerdem die Übersetzungszeiten der Quelltexte reduziert.
In der Programmiersprache Java ist es zum Beispiel möglich, mehrere Basisklassen zu erben. Dabei ist zwar nur eine konkrete Vererbung aus einer Basisklasse (in Java: class) zulässig, aber zusätzlich dürfen noch beliebig viele weitere Basisklassen (in Java: interface) abstrakt geerbt werden. Dabei werden alle Attribute und Methoden aller Basisklassen auf die erbende Klasse übertragen. Auch die konkret vererbte Basisklasse kann wiederum selber mehrere abstrakte Basisklassen implementieren. Falls es in mehreren Basisklassen gleichlautende öffentliche Bezeichner gibt, kommt es unweigerlich zu Konflikten.
Es ist in der Implementierung insbesondere bei fehlenden entsprechenden Kommentaren nicht ohne Weiteres erkennbar, zu welchen Basisklassen die zu überschreibenden Instanzvariablen oder Methoden gehören.
<syntaxhighlight lang="Java">
/**
* Die Klasse Mehrfachvererbung erbt Attribute und Methoden aus drei Basisklassen:
* Sie ist eine Instanz der Klasse (class = konkrete Klasse) javax.swing.JFrame.
* Sie implementiert die Schnittstelle (interface = abstrakte Klasse) java.awt.event.KeyListener.
* Sie implementiert die Schnittstelle (interface = abstrakte Klasse) java.awt.event.ActionListener.
*/
public class Mehrfachvererbung
extends javax.swing.JFrame
implements java.awt.event.KeyListener, java.awt.event.ActionListener
{
/**
* Konstante serialVersionUID aus der Basisklasse java.io.Serialization fuer die Serialisation,
* die in der Klasse javax.swing.JFrame implementiert ist
*/
private final static long serialVersionUID = 1L;
/**
* Instanzvariable fuer den zuletzt von einer Instanz der Klasse javax.swing.JFrame gesendeten Tastaturcode
*/
private int keyCode;
/**
* Zu ueberschreibende Methode aus der geerbten Klasse java.awt.event.KeyListener
* Speichert den Tastaturcode der zuletzt betaetigten Taste fuer eine Instanz
* @param event: aufgetretenes Tastaturereignis aus der Klasse java.awt.event.KeyEvent
*/
@Override
public void keyPressed (java.awt.event.KeyEvent event)
{
this.keyCode = event.getKeyCode ();
}
/**
* Zu ueberschreibende Methode aus der geerbten Klasse java.awt.event.KeyListener
* Ungenutzt
* @param event: aufgetretenes Tastaturereignis aus der Klasse java.awt.event.KeyEvent
*/
@Override
public void keyReleased(java.awt.event.KeyEvent event)
{
}
/**
* Zu ueberschreibende Methode aus der geerbten Klasse java.awt.event.KeyListener
* Ungenutzt
* @param event: aufgetretenes Tastaturereignis aus der Klasse java.awt.event.KeyEvent
*/
@Override
public void keyTyped (java.awt.event.KeyEvent event)
{
}
/**
* Zu ueberschreibende Methode aus der vererbten Klasse java.awt.event.ActionListener
* Der Inhalt einer Instanz der Klasse javax.swing.JFrame wird erneut dargestellt,
* wenn die Eingabetaste (Enter) betaetigt wurde.
* @param event: aufgetretenes Aktionsereignis aus der Klasse java.awt.event.ActionEvent
*/
@Override
public void actionPerformed (java.awt.event.ActionEvent event)
{
if (this.keyCode == java.awt.event.KeyEvent.VK_ENTER)
{
this.repaint ();
}
}
}
</syntaxhighlight>
==Nachwort==
Ein sehr häufig auftretender „Programmierfehler“ - wiederum insbesondere bei Anfängern - ist das Unterlassen der Herstellung von Sicherungskopien der Quelltexte. Noch besser ist eventuell sogar eine Versionierung der Quelldateien, damit gegebenenfalls auf beliebige ältere Versionen zurückgegriffen werden kann. Die Auswirkungen dieses Fehlers sind hinreichend naheliegend, so dass hier nicht weiter darauf eingegangen werden muss.
Sollte der Leser nach der Lektüre dieser Beiträge zu dem verständlichen und naheliegenden Schluss gekommen sein, dass die Programmiersprachen C oder C++ ziemlich schlecht strukturiert sind, möge er sich auch einmal andere Programmiersprachen näher ansehen, wie zum Beispiel C#, Component Pascal oder auch Java.
Mit der Beherzigung der Vorschläge aus diesem Buch möge es dem Leser in seinem Programmier-Team in jeder Programmiersprache gelingen, in kürzerer Entwicklungszeit besser strukturierte und funktionierende Programme zu schreiben.
===Vergleich===
In der folgenden Tabelle werde einige imperative, objektorientierte Programmiersprachen hinsichtlich ihrer Strukturiertheit verglichen:
{| class="wikitable"
|- class="hintergrundfarbe6"
!Veröffentlichungsdatum!!1985!!1994!!1995!!2001
|-
!Programmiersprache!!C++!!Component<br/>Pascal!!Java!!C#
|-
| style="text-align:left"| Vollständig strukturierte Syntax || style="text-align:center" | nein || style="text-align:center" | ja || style="text-align:center" | nein || style="text-align:center" | nein
|-
| style="text-align:left"| Datentypsicherheit bei Basistypen || style="text-align:center" | nein || style="text-align:center" | ja || style="text-align:center" | ja || style="text-align:center" | ja
|-
| style="text-align:left"| Datentypsicherheit bei komplexen Datentypen || style="text-align:center" | nein || style="text-align:center" | ja || style="text-align:center" | nein || style="text-align:center" | ja
|-
| style="text-align:left"| Modulsicherheit || style="text-align:center" | nein || style="text-align:center" | ja || style="text-align:center" | nein || style="text-align:center" | ja
|-
| style="text-align:left"| Keine zyklischen Importe || style="text-align:center" | nein || style="text-align:center" | ja || style="text-align:center" | nein || style="text-align:center" | nein
|-
| style="text-align:left"| Keine mehrfache Schnittstellenvererbung || style="text-align:center" | nein || style="text-align:center" | ja || style="text-align:center" | nein || style="text-align:center" | nein
|-
| style="text-align:left"| Keine mehrfache Implementationsvererbung || style="text-align:center" | nein || style="text-align:center" | ja || style="text-align:center" | nein || style="text-align:center" | ja
|}
==Literatur==
* Niklaus Wirth:
** ''Programming in Modula 2'', Springer, 3. Auflage, 1985, ISBN 3-540-15078-1
** Mit Martin Reiser: ''Programming in Oberon – Steps beyond Pascal and Modula'', Addison-Wesley,1992, ISBN 0-201-56543-9
** ''Algorithmen und Datenstrukturen mit Modula - 2'', Teubner Leitfäden der Informatik, 5. Auflage, Teubner, Stuttgart, 1996, ISBN 9783519122609
* Herbert Schildt: ''Professionelles Modula-2'', McGraw-Hill, Hamburg, 1988, ISBN 3-89028-113-3
* Lászlo Böszörmény, Jürg Gutknecht, Gustav Pomberger: ''The School of Niklaus Wirth – The Art of Simplicity'', dpunkt, Heidelberg, 2000, ISBN 3-932588-85-1
* Hanspeter Mössenböck:
** ''Objektorientierte Programmierung in Oberon-2'', Springer, 1998, ISBN 9783540646495
** ''Sprechen Sie Java?: Eine Einführung in das systematische Programmieren'', dpunkt, Heidelberg, 2005, ISBN 9783898643627
** ''Kompaktkurs C# 4.0'', dpunkt, Heidelberg, 2009, ISBN 9783898646451
==Weblinks==
*{{w|Niklaus Wirth}}:
**Interessantes Interview: [http://www.simple-talk.com/opinion/geek-of-the-week/niklaus-wirth-geek-of-the-week/ Geek of the Week] vom 2. Juli 2009
**Ein noch interessanteres Interview (2009): [http://www.youtube.com/watch?v=wrGytM2YTQY An Interview with Niklaus Emil Wirth, Part 3]
*{{w|Frederick P. Brooks}}: [[w:en:The_Mythical_Man-Month|The Mythical Man-Month]]
*{{w|Benutzer:Bautsch|Markus Bautsch}}: [[:en:User:Bautsch/Capsula|Draft of the graphical programming language '''Capsula''']] (Wikibooks)
== Einzelnachweise ==
<references></references>
==Zusammenfassung des Projekts==
{{Vorlage:StatusBuch|10}}
* '''Zielgruppe:''' Programmierer, Software-Entwickler, Informatik-Lehrende
* '''Lernziele:''' Vermeidung von Fehlern, die leicht und unbemerkt zur unstrukturierten Programmierung führen können. Schnelle und sichere Erstellung leicht zu wartender Software.
* '''Buchpatenschaft/Ansprechperson:''' [[Benutzer:Bautsch]]
* '''Sind Co-Autoren gegenwärtig erwünscht?''' Ja, sehr gerne. Korrekturen von offensichtlichen Fehlern direkt im Text; Inhaltliches bitte per Diskussion.
* '''Richtlinien für Co-Autoren:''' Wikimedia-like.
[[Kategorie:Buch]]
[[Kategorie:Studium]]
mmxq9aayuydknwztwoihntsl6ik0pa0
1086439
1086419
2026-05-21T00:17:47Z
Bautsch
35687
/* Arrays */ -r
1086439
wikitext
text/x-wiki
{{Regal | ort=Programmierung}}
[[Datei:Programmierung.Java.Julia-Menge.png|mini|rechts|hochkant=2|Bildschirmaufnahme des mit Tastatursteuerung interaktiven Java-Programms [[Das Apfelmännchen/ FraktaleMengeAusgabe|FraktaleMengeAusgabe]] zur Berechnung und Darstellung von Julia-Mengen oder der Mandelbrot-Menge. Siehe auch '''Wikibook [[Das Apfelmännchen]]'''.]]
[[Datei:Programmierung.Java.Maze.png|mini|rechts|hochkant=2|Bildschirmaufnahme des Java-Programms [[Rekursive Labyrinthe/ MazeGraphs|Maze]] zur rekursiven Erstellung und Darstellung von Labyrinthen. Siehe auch '''Wikibook [[Rekursive Labyrinthe]]'''.]]
[[Datei:Programmierung.Java.SimForestFrame.png|mini|rechts|hochkant=2|Bildschirmaufnahme des Java-Programms [[Waldbrandsimulation/ SimForestFrame|SimForestFrame]] zur Simulation und Darstellung von sich ausbreitenden Waldbränden. Siehe auch '''Wikibook [[Waldbrandsimulation]]'''.]]
[[Datei:Programmierung.Java.Campingplatzraetsel.png|mini|rechts|hochkant=2|Bildschirmaufnahme des mit Maussteuerung interaktiven Java-Programms [[Campingplatzrätsel/ CampingplatzGraphs|CampingplatzGraphs]] zur Erstellung und Darstellung von Campingplatzrätseln. Siehe auch '''Wikibook [[Campingplatzrätsel]]'''.]]
[[Datei:Programmierung.Java.GameOfLife.png|mini|rechts|hochkant=2|Bildschirmaufnahme des Java-Programms "GameOfLife" zur Anzeige von Conways Spiel des Lebens. Siehe auch '''Wikibook [[Game of Life]]'''.]]
==Einleitung==
Das Buch '''Strukturierte Programmierung''' ist kein Lehrbuch zum Erlernen einer Programmiersprache, sondern soll als kleiner Leitfaden dazu dienen, besser strukturierte Programme erstellen zu können, selbst wenn die eingesetzten Programmiersprachen die strukturierte Programmierung weniger stark unterstützen.
<big>Warum lohnt es sich überhaupt, strukturiert zu programmieren ?</big>
Es gibt eine ganze Reihe von naheliegenden Gründen, aber auch einige Vorteile, die nicht auf der Hand liegen oder jedermann sofort ersichtlich sind. Anfänger und Fortgeschrittene profitieren gleichermaßen von gut strukturierter Programmierung. Die Vorteile sind so erheblich, dass es unbedingt sinnvoll ist, gut strukturiert zu programmieren. Im Folgenden werden einige wichtige Vorteile aufgeführt und erläutert:
*'''Strukturierte Programme sind leichter nachvollziehbar.''' Dies erleichtert die Arbeit im Team und vereinfacht die Wartung, wenn der Quellcode ergänzt, geändert oder korrigiert werden muss.
*'''Strukturierte Programme haben weniger Programmierfehler.''' Dies reduziert die Entwicklungszeiten und erhöht die Akzeptanz bei den Auftraggebern und Nutzern der Software.
*'''Strukturierte Programme können ohne Laufzeit-Debugger erstellt werden.''' Dies spart enorm viel Zeit und Nerven bei der Entwicklung von Software.
Die geringen Laufzeiteinbußen, die bei hoch strukturierter Programmierung von Anwendungssoftware gegenüber laufzeitoptimiertem Code entstehen können, spielen – sofern sie überhaupt existieren sollten – bei den heutzutage zur Verfügung stehenden modernen und schnellen Rechenmaschinen praktisch keine Rolle mehr. Programmcode wegzulassen, der der inhärenten Betriebssicherheit von Software oder der inhärenten Datenintegrität dient, macht nur in sehr wenigen, extrem zeitkritischen Anwendungen Sinn, keineswegs jedoch bei herkömmlichen oder gar sicherheitskritischen Anwendungsprogrammen.
Die Ratschläge aus diesem Buch beruhen auf jahrzehntelanger Erfahrung mit der Softwareentwicklung komplexer Systeme und dem Hochschulunterricht im Fach Programmierung mit verschiedenen Programmiersprachen.
Die folgende Check-Liste enthalt eine Reihe von wichtigen Kriterien, die bei strukturierter Programmierung berücksichtigt werden sollten:
* <big><big>'''[[Strukturierte Programmierung/ Checkliste|Checkliste]]'''</big></big>
Übrigens: ''In der Kürze der Quelltextdatei liegt nicht die wahre Würze des Programmierens !''
Und noch wichtiger:
:''So ists mit aller Bildung auch beschaffen:''
:''Vergebens werden ungebundne Geister''
:''Nach der Vollendung reiner Höhe streben.''
:''Wer Großes will, muß sich zusammenraffen;''
:''In der Beschränkung zeigt sich erst der Meister,''
:''Und das Gesetz nur kann uns Freiheit geben.''
::Johann Wolfgang von Goethe, Ende von ''Das Sonett''
Viel Erfolg beim strukturierten Programmieren wünscht [[Benutzer:Bautsch]] !
<div style="clear:both"></div>
==Quelltextgestaltung==
In diesem Abschnitt stehen einige Vorschläge zur allgemeinen Gestaltung der Quelltexte, die keine unmittelbare Auswirkung auf die Lauffähigkeit und die Funktion der Programme haben, aber dazu führen, dass der Quelltext besser verständlich und nachvollziehbar ist.
===Anweisungen===
Der Quelltext wird bei imperativen Programmiersprachen durch Anweisungen gestaltet, die ganz unterschiedlich geartet sein können. Zu den typischen und wichtigen Anweisungen gehören:
* Deklaration (declaration)
* Blockanweisung (block, begin / end)
* Zuweisung (assignment)
* Aufruf (call)
* Rücksprung (return)
* Verzweigung (branch)
* Schleife (loop)
* Sicherstellung (assertion)
Bei Kommentaren und Leerräumen (Leerzeichen, Tabulatoren, Zeilenumbrüche, ...) in Quelltexten handelt es sich nicht um Anweisungen, da sie vom Übersetzer (compiler) beziehungsweise Interpreter des Programmcodes ignoriert werden.
===Kommentare===
Jeder Quelltext sollte zu Beginn der Datei in einem von Compiler zu ignorierenden '''Kommentar''' einige Mindestangaben zum Inhalt und Ursprung machen. Dazu gehören der Dateiname, der Modulname (respektive Klassenname), die Autoren, Urheber oder Rechteinhaber, deren beabsichtigte Nutzungsarten/-rechte und Nutzungsbedingungen und weitere Angaben zur Lizenzierung, das Datum, eine Versionsangabe und die Angabe der verwendeten Programmiersprache (gegebenenfalls ebenfalls mit einer Versionsangabe).
Der Kommentartext wird bei vielen Programmiersprachen im Quelltext mit dem Symbolpaar "/*" und "*/" oder dem Symbolpaar "(*" und "*)" eingeschlossen.
Beispiel:
/*
Source file: editor.java
Program: editor
Author: Bautsch
License: public domain
Date: 7th January 2011
Version: 1.0
Programming language: Java
*/
Alle Methoden und Variablen werden ausreichend kommentiert, sofern sie nicht durch die Wahl „sprechender” Bezeichner selbsterklärend sind.
Bei Methoden werden insbesondere die Bedeutung aller Parameter und Rückgabewerte dokumentiert:
/* The method "add" computes and returns the sum of "summand1" and "summand2" */
double add (double summand1, double summand2)
{
double sum ← summand1 + summand2
return sum
}
Viele Entwicklungssysteme bieten Funktionen, die die Dokumentation der Quelltexte mit Kommentaren unterstützen.
Bei einigen Programmiersprachen ist Aufmerksamkeit geboten, wenn in der Sprachdefinition geschachtelte Kommentare nicht vorgesehen sind. Wird zum Beispiel während der Programmentwicklung Quelltext auskommentiert, um das Verhalten des modifizierten Programms zu überprüfen, und enthält dieser Quelltext einen Kommentar, ist dann nicht sofort erkennbar, welcher Abschnitt des Quelltextes tatsächlich auskommentiert werden soll. Dabei kann es auch vorkommen, dass einige Compiler die geschachtelten Kommentare erkennen und im eigentlichen Sinne des Programmierers berücksichtigen; andere Compiler, die sich streng an die standardisierten Sprachdefinitionen halten, jedoch nicht, so dass es bei der Portierung von Quellcode unweigerlich zu Übersetzungsfehlern kommt.
Das folgende Beispiel zeigt einen Programmabschnitt, bei dem hinter der letzten Anweisung zwischen den Zeichenfolgen "/*" und "*/" ein Textkommentar hinzugefügt wurde, der vom Compiler ignoriert werden soll.
int i ← 1
i ← i * i /* die Variable i wird quadriert. */
Wird zusätzlich mit den gleichen Zeichenfolgen "/*" und "*/" die gesamte Programmzeile auskommentiert, gibt es einen Übersetzungsfehler, wenn der Compiler die allerletzte Zeichenfolge "*/" als Kommentarende ohne Kommentaranfang interpretiert, sofern der zweite und nunmehr auskommentierte Kommentaranfang "/*" in der Zeile mit dem Textkommentar ignoriert wurde und die erste auftretende Zeichenfolge "*/" bereits als Kommentarende interpretiert wurde:
int i ← 1
/*
i ← i * i /* die Variable i wird quadriert. */
*/
===Leerräume===
'''Leerräume''', also zum Beispiel Leerzeichen, Zeilen- und Seitenumbrüche oder Tabulatoren, werden - genauso wie Kommentare - von vielen Compilern überlesen und dienen in diesen Fällen ausschließlich zur Verbesserung der Lesbarkeit für die Programmierer. Daher sollten diese Leerräume sorgfältig eingesetzt werden, um die Nachvollziehbarkeit des Quellcodes für Programmierer zu erleichtern. Bei einigen Programmiersprachen werden allerdings bestimmte Formatierungen in der Sprachdefinition gefordert und müssen dann natürlich den Vorgaben entsprechend eingehalten werden.
Viele Entwicklungssysteme bieten sehr nützliche, unterstützende Funktionen zur einheitlichen Formatierung der Quelltexte, die sehr einfach anzuwenden sind und daher auch unbedingt benutzt werden sollten. So ist es zum Beispiel allgemein üblich, Programmblöcke so zu formatieren, dass die Inhalte gegenüber dem Kopf und dem Fuß etwas (meist um einen Tabulator) eingerückt und durch Zeilenumbrüche voneinander getrennt werden:
Blockkopf
eingerückter Inhalt 1
eingerückter Inhalt 2
Blockfuß
Siehe hierzu auch [[Strukturierte Programmierung#Blockanweisungen|Blockanweisungen]].
===Bezeichner===
In den meisten Programmiersprachen gibt es '''Bezeichner''' (oder '''Identifikatoren''', englisch: '''identifier''') für ganz unterschiedliche Dinge, wie für symbolische '''Konstanten''', für '''Variablen''', für '''Parameter''' oder '''Attribute''', für '''Methoden '''(respektive für '''Prozeduren''' oder für '''Funktionen'''), für '''Module''' (respektive für '''Klassen''') oder für '''Bibliotheken'''. Zur Strukturierung von Daten werden auch '''Pakete''' (englisch: '''packages''') eingesetzt.
In der Regel stehen alle Buchstaben ohne Diakritika zur Verfügung. Oft sind auch noch Ziffern und der Unterstrich "_" erlaubt. Das erste Zeichen muss üblicherweise immer ein Buchstabe sein. Leerzeichen sind innerhalb von Bezeichnern im Allgemeinen nicht zulässig.
Beim Lesen und Analysieren von Quelltexten ist es sehr hilfreich, wenn einem Bezeichner nicht nur beim ersten Auftauchen bei der Deklaration, sondern an jeder Stelle im Programm sofort angesehen werden kann, wofür er steht. Meist bildet sich für eine Gruppe von Programmiersprachen ein bestimmter Usus aus, wie die entsprechenden Bezeichner gestaltet werden sollen. Der Compiler stellt in der Regel keine Ansprüche an die Schreibweise von Bezeichnern, solange der definierte Zeichenvorrat verwendet wird. Eine Ausnahme stellen die vorgegebenen Schlüsselwörter dar, die häufig und je nach Programmiersprache nur aus Großbuchstaben oder nur aus Kleinbuchstaben bestehen, wie zum Beispiel:
* '''IMPORT''', '''CONST''', '''TYPE''', '''VAR''', '''PROCEDURE''', '''NIL''', '''LONG''', '''REAL''', '''BEGIN''', '''END''', '''WHILE'''
versus
* '''import''', '''final''', '''void''', '''static''', '''null''', '''long''', '''double''', '''while'''
In vielen Programmiersprachen haben sich für die frei definierbaren Bezeichner bestimmte Praktiken herausgebildet, damit die Bedeutung der Bezeichner im Quelltext von den beteiligten Programmierern leichter erkannt werden kann. Dieses Vorgehen ist allerdings nicht immer einheitlich gestaltet, wie anhand der folgenden, beispielhaften Liste gesehen werden kann:
* Die Bezeichner von übergeordnet verfügbaren Konstanten, Variablen, Datentypen, Klassen oder Modulen beginnen mit '''einem Großbuchstaben'''.
* Die Bezeichner von Konstanten werden '''vollständig mit Großbuchstaben''' geschrieben.
* Die Bezeichner von lokal verfügbaren Variablen, Attributen oder Parametern werden '''vollständig mit Kleinbuchstaben''' geschrieben.
* Die Bezeichner von Methoden werden '''vollständig mit Kleinbuchstaben''' geschrieben.
====Variablen und Methoden====
So ist es zum Beispiel üblich, Variablen und Methoden mit Kleinbuchstaben zu benennen. Dabei ist der Unterschied zwischen Variable und Methode immer und einfach anhand der obligatorischen Parameterliste von Methoden zu erkennen, die beim Fehlen von Parametern leer ist und in vielen Programmiersprachen durch runde Klammern begrenzt ist und direkt hinter dem Methodennamen steht:
/* "diameter" is variable of the data type integer */
int diameter
/* "radius" is variable (parameter of the function "calcDiameter") of the data type integer */
/* "calcDiameter" is a function */
/* the result of the function call has the data type integer */
int calcDiameter (int radius)
"calcDiameter" ist hierbei mit dem Binnenmajuskel "D" versehen (umgangssprachlich auch "Kamelhöcker-Notation" genannt, englisch "camel case"), um den Anfang eines neuen Wortes ohne die Verwendung eines Leerzeichens erkennbar zu machen.
Es ist im Sinne der guten Lesbarkeit des Quelltextes allgemein hilfreich, in Bezeichnern immer passende grammatische Formen zu verwenden, wie zum Beispiel:
* für booleschen Variablen und Funktionen: Partizipien oder Adjektive
* für andere Variablen und Funktionen: Substantive
* für Methoden und Kommandos: Verben im Imperativ
In manchen Programmiersprachen ist es üblich, lokale Variablen mit einem Kleinbuchstaben zu beginnen und globale Variablen - also in mehreren Programmodulen, Klassen oder Methoden sichtbare Variablen - mit einem Großbuchstaben zu beginnen, um deren Sichtbarkeiten unmittelbar erkennbar zu machen.
====Konstanten====
Die Werte von Konstanten können zur Laufzeit nicht mehr verändert werden. Dieser Umstand wird dem Compiler bei der Deklaration der Konstanten durch entsprechende Deklarationen (wie zum Beispiel "CONST") oder Modifikatoren (wie zum Beispiel "final") mitgeteilt.
Damit an jeder Stelle des Quelltextes, also auch nach der Deklaration, erkannt werden kann, dass es sich um eine Konstante handelt, ist es hilfreich Konstanten mit einem '''Großbuchstaben''' beginnen zu lassen; manchmal werden für Konstanten sogar ausschließlich Großbuchstaben verwendet.
Es ist empfehlenswert, die Initialisierung einer Konstanten immer unmittelbar im Kontext der Deklaration vorzunehmen, damit es keine Mehrdeutigkeiten und somit auch keine Verwechslungen durch undefinierte Werte geben kann. Wenn dies nicht sinnvoll erscheint, sollte vorzugsweise keine Konstante verwendet werden. In vielen modernen Programmiersprachen ist es möglich, Klassenvariablen beziehungsweise globale Variablen zu schützen, indem diese nur innerhalb einer Klasse beziehungsweise innerhalb eines Moduls verändert werden dürfen. In diesem Fall gibt es von Außerhalb nur einen Lesezugriff auf den Wert der Variablen ("read-only"), oder der aktuelle Wert der Variablen kann durch den Aufruf eines Unterprogramms zurückgegeben werden ("get"-Methoden).
<syntaxhighlight lang="Pascal">
(* Programmiersprache Component Pascal*)
MODULE Zahlen;
(* Auf die globale ganzzahlige Konstante "Konstante" kann nur lesend zugegriffen werden. *)
(* Die globale Konstante "Konstante" ist durch Deklaration und Initialisierung vollständig definiert. *)
CONST
Konstante = 7;
(* Auf die globale ganzzahlige Variable "zahl" kann von außerhalb des Moduls "Zahlen" nur lesend zugegriffen werden. *)
(* Die globale Variable "zahl" wird mit dem Zusatz "-" als "read-only" deklariert. *)
VAR
zahl-: LONGINT;
BEGIN
(* Die globale Variable "zahl" wird mit einem Wert initialisiert. *)
zahl := 8;
END Zahlen.
</syntaxhighlight>
<syntaxhighlight lang="Java">
/* Programmiersprache Java*/
public class Zahlen;
{
// Auf die öffentliche ganzzahlige Klassenkonstante "Konstante" kann nur lesend zugegriffen werden.
// Die Klassenkonstante "Konstante" ist durch Deklaration und Initialisierung vollständig definiert.
// Die Klassenkonstante "Konstante" wird mit dem Zusatz "final" deklariert.
public static final long Konstante = 7;
// Auf die nicht-öffentliche ganzzahlige Klassenvariable "zahl" kann von außerhalb der Klasse
// nur über die öffentliche Methode "getZahl ()" lesend zugegriffen werden.
// Die Klassenvariable "zahl" wird mit dem Zusatz "private" deklariert.
private static long zahl = 8;
public static long getZahl ()
{
return zahl;
}
}
</syntaxhighlight>
Im folgenden Java-Beispiel wird eine als konstant deklarierte lokale Variable erst innerhalb einer Fallunterscheidung (if-Anweisung) und zudem mit zwei verschiedenen optionalen Werten initialisiert. Wenn die Deklaration und die optionalen Initialisierungen im Quelltext weiter auseinanderliegen, ist es schwierig, den definierten Zustand der vermeintlich eindeutig definierten Variablen vollständig zu erfassen.
<syntaxhighlight lang="Java">
private static boolean boolescherAusdruck ()
{
java.util.Random zufall = new java.util.Random ();
boolean zufaelligerBoolescherWert = zufall.nextBoolean ();
return zufaelligerBoolescherWert;
}
public static void main (java.lang.String [] arguments)
{
// Deklaration der lokalen Konstante "Zahl",
// die wegen fehlender Initialisierung nicht definiert ist.
final long Zahl;
if (boolescherAusdruck ())
{
Zahl = 7;
}
else
{
Zahl = 8;
}
java.lang.System.out.println ("Konstante Zahl = " + Zahl);
}
</syntaxhighlight>
====Klassen und Module====
Auch dauerhaft speicherbare Unterprogrammeinheiten wie '''Module''' oder '''Klassen''' werden meist mit einem Bezeichner benannt, der mit einem Großbuchstaben beginnt. Im Kontext des Quellcodes ist es immer möglich, diese Bezeichner von anderen zu unterscheiden, die ebenfalls mit einem Großbuchstaben beginnen, weil sie zum Beispiel immer von einer Blockanweisung (zum Beispiel geschweifte Klammern) oder auch von einem Separator (beispielsweise ".") gefolgt werden.
<syntaxhighlight lang="Pascal">
(* Das Unterprogramm "Programm" in der Programmiersprache Pascal *)
program Programm;
begin
end.
</syntaxhighlight>
<syntaxhighlight lang="modula2">
(* Das Unterprogramm "Programm" in den Programmiersprachen Modula-2, Oberon oder Component Pascal *)
MODULE Programm;
BEGIN
END Programm.
</syntaxhighlight>
<syntaxhighlight lang="Java">
// Das Unterprogramm "Programm" in der Programmiersprache Java
public class Programm;
{
}
</syntaxhighlight>
====„Sprechende” Bezeichner====
Die Wahl '''„sprechender“ Bezeichner''' hilft beim Lesen, Verstehen und Nachvollziehen von Quelltext ungemein. Häufig erübrigt sich sogar ein erläuternder Kommentar, wenn mit hinreichend „sprechenden“ Variablen- beziehungsweise Methodennamen gearbeitet wird.
Also nicht eine solche Anweisung:
h ← (t – b)
Sondern besser:
height ← (top - bottom)
Die verpasste Chance, einen Bezeichner sprechend zu benennen, kann in vielen Entwicklungssystemen durch sogenanntes ''Refactoring'' zentral für den gesamten Quelltext durch Umbenennung geheilt werden.
====Parameter====
Bei Methodenaufrufen werden '''alle Parameter''' mit Variablen oder mit Konstanten übergeben, also nicht mit '''komplexen Ausdrücken''' (beispielsweise arithmetische Berechnungen und Aufrufe von Unterprogrammen) oder mit '''Literalen''' (also direkt eingegebene Werte, wie 100 oder "Text").
Hier ein schlechtes Beispiel mit dem Aufruf des Java-Unterprogramms "zeichneRechteck" mit fünf kryptischen Parameterausdrücken in den runden Klammern. Jedes der fünf Literalen 50 hat eine eigene unabhängige Bedeutung, die bei dieser Schreibweise nicht unterschieden oder nachvollzogen werden können, was deswegen schnell zu Verwechslungen führen kann:
<syntaxhighlight lang="Java">
zeichneRechteck (50, 50, 50, berechneHoehe (50), 50);
</syntaxhighlight>
Ein strukturiertes Programm weist die Werte für alle fünf Parameter vor dem Aufruf des Unterprogramms an eigene Variablen mit sprechenden Bezeichnern zu:
<syntaxhighlight lang="Java">
int x = 50;
int y = 50;
int breite = 50;
int hoehe = berechneHoehe (breite);
int helligkeitProzent = 50;
zeichneRechteck (x, y, breite, hoehe, helligkeitProzent);
</syntaxhighlight>
Diese Anweisungsfolge ist im Gegensatz zu der Anweisung darüber auch ohne die explizite Kenntnisnahme der '''Deklaration des Unterprogramms''' verständlich:
<syntaxhighlight lang="Java">
/**
* Zeichnet ein Rechteck in das Bildschirmfenster
* @param x: x-Koordinate vom linken Bildschirmfensterrand nach rechts
* @param y: y-Koordinate vom oberen Bildschirmfensterrand nach unten
* @param breite: Breite des Rechtecks von x nach rechts
* @param hoehe: Hoehe des Rechtecks von y nach unten
* @param helligkeitProzent: Helligkeit des Rechtecks in Prozent (0 = schwarz, 100 = weiss)
*/
public static void zeichneRechteck (int x, int y, int breite, int hoehe, int helligkeitProzent)
</syntaxhighlight>
====Qualifizierte Bezeichner====
Damit der sich hinter einem Bezeichner verborgene Inhalt eindeutig einem Programmteil zugeordnet werden kann, muss dieser '''qualifiziert bezeichnet''' werden.
In manchen Programmiersprachen geschieht dies für bestimmte Bezeichner inhärent, obwohl es eine explizite import-Anweisung für die entsprechenden Bezeichner gibt, so dass die Programmierer in diesen Sonderfällen also wissen müssen, worauf sich der unqualifizierte Bezeichner bezieht. In der Programmiersprache Java dürfen häufig verwendete Bezeichner wie beispielsweise die zur Textausgabe verwendete Methode "print" aus der Klasse "System" oder die für Zeichenketten verwendete Klasse "String" ohne eine vollständige und qualifizierte Bezeichnung in den Programmtext geschrieben werden:
<syntaxhighlight lang="Java">
String text = "Hallo Welt!";
System.out.print (text);
</syntaxhighlight>
In der Variablen "text" der Klasse "String" wird die Zeichenkette "Hallo Welt!" gespeichert und mit der klassengebundenen Methode "print" der Klassenvariablen "out" aus der Klasse "System" ausgegeben. Hier ist allerdings nicht ohne weiteres ersichtlich, wo sich die Deklarationen oder die Implementierungen beiden Klassen "String" und "System" befinden.
Die '''qualifizierte Bezeichnung''' dieser beiden Anweisungen hat folgendes Aussehen:
<syntaxhighlight lang="Java">
java.lang.String text = "Hallo Welt!";
java.lang.System.out.print (text);
</syntaxhighlight>
Durch die qualifizierte Bezeichnung wird klar, dass sich beide Klassen im Programmpaket "java.lang" des Programmmoduls "java.base" befinden. Jedes Modul (englisch "module") und jedes Paket (englisch "package") kann in der Systembibliothek der Programmiersprache beziehungsweise in der Programmbibliothek der Laufzeitumgebung eindeutig zugeordnet werden.
Alternativ wird die Qualifikation von bestimmten Bezeichnern durch eine Import-Anweisung zu Beginn des Programms vorgenommen:
<syntaxhighlight lang="Java">
import java.lang.String;
import java.lang.System;
//...
String text = "Hallo Welt!";
System.out.print (text);
</syntaxhighlight>
Dieses Vorgehen erlaubt innerhalb einer Programmdatei zwar grundsätzlich eine korrekte und eindeutige Zuordnung der weiter unten im Programmtext verwendeten '''unqualifizierten''' Bezeichner, bei der Analyse des Programmtextes sind sämtliche Import-Anweisungen jedoch stets und vollständig zu berücksichtigen, was die Sache für die Programmierer insbesondere bei langen oder komplexen Quelltexten sehr erschweren kann. Dies kann durch die ausschließliche und obligatorische Verwendung von qualifizierten Bezeichnern ausgeschlossen werden, und deswegen wird von streng strukturierten Programmiersprachen überall und immer eine qualifizierte Bezeichnung gefordert.
Auch bei Datenstrukturen müssen qualifizierte Bezeichner verwendet werden, damit eindeutig auf bestimmte Datenfelder zugegriffen werden kann. Im folgenden Beispiel in der Syntax der '''Pascal'''-Programmiersprachenfamilie wird dies anhand des komplexen Datentyps "Postadresse" mit den sechs Attributen "vorname", "nachname", "strasse", "hausnummer", "postleitzahl" und "ort" dargestellt:
<syntaxhighlight lang="Pascal">
(* Datentyp "Postadresse" *)
TYPE Postadresse =
RECORD
vorname: ARRAY OF CHAR;
nachname: ARRAY OF CHAR;
strasse: ARRAY OF CHAR;
hausnummer: ARRAY OF CHAR;
postleitzahl: LONGINT;
ort: ARRAY OF CHAR;
END;
</syntaxhighlight>
In den Deklarationen der Attribute steht "ARRAY OF CHAR" für den Datentyp Zeichenkette, der zur Speicherung von Zeichenfolgen verwendet wird. Der Datentyp "LONGINT" dient zur Speicherung ganzer Zahlen.
Eine Instanz "adresse" dieses Datentyps "Postadresse" kann wie folgt mit der NEW-Prozedur erzeugt werden, wobei der dafür erforderliche Speicherplatz festgelegt und für andere Verwendungen gesperrt wird. Auf die sechs einzelnen Datenfelder der in "adresse" gespeicherten sechs Attribute des Datentyps "Postadresse" kann danach im Programm mit den entsprechenden qualifizierten Bezeichnern beispielsweise zugegriffen werden, indem die jeweiligen initialen Werte mithilfe des Zuweisungsoperators := zugewiesen werden. Auf die Prozeduren "String" und "Int" aus dem Modul "Out" wird über "Out.String" und "Out.Int" ebenfalls qualifiziert zugegriffen:
<syntaxhighlight lang="Pascal">
IMPORT
Out; (* Import des Moduls "Out" mit den Textausgabe-Prozeduren "String" für Zeichenketten und "Int" für ganze Zahlen *)
VAR
adresse: Postadresse; (* globale Variable "adresse" *)
BEGIN
NEW (adresse); (* Speicherreservierung für den Bezeichner "adresse" *)
adresse.vorname := "Irgend";
adresse.nachname := "Jemand";
adresse.strasse := "Allee";
adresse.hausnummer := "100";
adresse.postleitzahl := 10000;
adresse.ort := "Irgendwo";
Out.String (adresse.vorname);
Out.String (adresse.nachname);
Out.String (adresse.strasse);
Out.String (adresse.hausnummer);
Out.Int (adresse.postleitzahl);
Out.String (adresse.ort);
END;
</syntaxhighlight>
In einem weiteren Beispiel mit der Syntax der Programmiersprache '''Java''' wird die Datenstruktur dieses komplexen Datentyps als Klasse "Postadresse" mit den sechs Instanzvariablen "vorname", "nachname", "strasse", "hausnummer", "postleitzahl" und "ort" für diese sechs Attribute gebildet. Eine Instanz dieses Datentyps kann hier mit dem new-Operator erzeugt werden. Der öffentliche Konstruktor "Postadresse ()" ist eine Methode mit derselben Bezeichnung wie die Klasse selbst, die aufgerufen werden muss, um die sechs Datenfelder der jeweiligen Instanz "this" zu initialisieren. Auf die einzelnen Datenfelder der in der nicht-öffentlichen Klassenvariable "adresse" gespeicherten sechs Attribute des Datentyps "Postadresse" kann danach über die entsprechenden sechs qualifizierten Bezeichner zugegriffen werden. In der Methode "main" werden die Attribute zwischen den runden Klammern über die qualifizierten Bezeichner als Parameter bei den Aufrufen der allgemeinen Textausgabe-Methode "println" verwendet, die zur Klassenvariable "out" der Klasse "System" im Programmpaket "java.lang" gehört:
<syntaxhighlight lang="Java">
public class Postadresse // Klasse "Postadresse"
{
// Instanzvariablen
java.lang.String vorname;
java.lang.String nachname;
java.lang.String strasse;
java.lang.String hausnummer;
long postleitzahl;
java.lang.String ort;
private static Postadresse adresse = new Postadresse (); // Klassenvariable "adresse"
public Postadresse () // Konstruktor der Klasse "Postadresse"
{
this.vorname = "Irgend";
this.nachname = "Jemand";
this.strasse = "Allee";
this.hausnummer = "100";
this.postleitzahl = 10000;
this.ort = "Irgendwo";
}
public static void main (java.lang.String [] argumente) // main-Methode der Klasse "Postadresse"
{
java.lang.System.out.println (adresse.vorname);
java.lang.System.out.println (adresse.nachname);
java.lang.System.out.println (adresse.strasse);
java.lang.System.out.println (adresse.hausnummer);
java.lang.System.out.println (adresse.postleitzahl);
java.lang.System.out.println (adresse.ort);
}
}
</syntaxhighlight>
====Komplexe Anweisungen====
In der Programmiersprache Java kann die Gestaltung eines softwaretechnischen Containers "host" beispielsweise mit der Variablen "layout" realisiert werden. Hierzu werden Instanzen von Objekten der Klassen "Container" und "GroupLayout" erzeugt:
<syntaxhighlight lang="Java">
java.awt.Container host = new java.awt.Container ();
javax.swing.GroupLayout layout = new javax.swing.GroupLayout (host);
</syntaxhighlight>
Eine multiple qualifizierte Bezeichnung zur Referenzierung von Datenfeldern mit diversen Aufrufen typengebundener Methoden (Unterprogramme) kann dann mit einer einzigen hyperkomplexen Anweisung in einer Zeile zusammengefasst werden:
<syntaxhighlight lang="Java">
layout.setVerticalGroup (layout.createParallelGroup (javax.swing.GroupLayout.Alignment.LEADING).addGroup (layout.createSequentialGroup ().addContainerGap ().addGroup(layout.createParallelGroup (javax.swing.GroupLayout.Alignment.LEADING).addGroup (layout.createSequentialGroup().addGroup (layout.createParallelGroup (javax.swing.GroupLayout.Alignment.BASELINE))))));
</syntaxhighlight>
Mit Zeilenumbrüchen wird der inhaltlich identische Quelltext schon besser nachvollziehbar:
<syntaxhighlight lang="Java">
layout.setVerticalGroup
(
layout.createParallelGroup (javax.swing.GroupLayout.Alignment.LEADING)
.addGroup (layout.createSequentialGroup ()
.addContainerGap ()
.addGroup (layout.createParallelGroup (javax.swing.GroupLayout.Alignment.LEADING)
.addGroup (layout.createSequentialGroup()
.addGroup (layout.createParallelGroup (javax.swing.GroupLayout.Alignment.BASELINE)))))
);
</syntaxhighlight>
Durch Verwendung von Hilfsvariablen mit sprechenden Bezeichnern wird der Quelltext zwar etwas länger, aber noch verständlicher. Die Komplexität ist deutlich reduziert, und die Anweisungsfolge kann viel einfacher nachvollzogen, überprüft oder angepasst werden:
<syntaxhighlight lang="Java">
javax.swing.GroupLayout.SequentialGroup sequentialGroup2 = layout.createSequentialGroup ();
javax.swing.GroupLayout.ParallelGroup parallelBaselineGroup = layout.createParallelGroup (javax.swing.GroupLayout.Alignment.BASELINE);
sequentialGroup2 = sequentialGroup2.addGroup (parallelBaselineGroup);
javax.swing.GroupLayout.ParallelGroup parallelLeadingGroup2 = layout.createParallelGroup (javax.swing.GroupLayout.Alignment.LEADING);
parallelLeadingGroup2 = parallelLeadingGroup2.addGroup (sequentialGroup2);
javax.swing.GroupLayout.SequentialGroup sequentialGroup1 = layout.createSequentialGroup ();
sequentialGroup1 = sequentialGroup1.addContainerGap ();
sequentialGroup1 = sequentialGroup1.addGroup (parallelLeadingGroup2);
javax.swing.GroupLayout.ParallelGroup parallelLeadingGroup1 = layout.createParallelGroup (javax.swing.GroupLayout.Alignment.LEADING);
parallelLeadingGroup1 = parallelLeadingGroup1.addGroup (sequentialGroup1);
layout.setVerticalGroup (parallelLeadingGroup1);
</syntaxhighlight>
==Programmgestaltung==
Idealerweise kann die kontextfreie Grammatik der verwendeten Programmiersprache mit einer strukturierten Metasprache, wie zum Beispiel der '''Erweiterten Backus-Naur-Form''' ('''EBNF''') nach der Norm ISO/IEC 14977 dargestellt werden. Jedes strukturierte Programm und jede Datenstruktur kann damit eindeutig definiert werden. Leider trifft dies für viele Programmiersprachen nicht zu. Die Darstellung beliebiger ganzer Zahlen (sowohl negative, als auch positive und die Null) mit Zeichen kann in der Erweiterten Backus-Naur-Form zum Beispiel schrittweise so definiert werden:
<syntaxhighlight lang="ebnf">
NatuerlicheZiffer = "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9";
Ziffer = "0" | NatuerlicheZiffer;
NatuerlicheZahl = NatuerlicheZiffer{Ziffer};
GanzeZahl = "0" | ["-"]NatuerlicheZahl;
</syntaxhighlight>
[[Datei:Nassi-Shneiderman diagram - InsertionSort.svg|mini|rechts|hochkant=2|Beispiel für einen Algorithmus mit zwei geschachtelten, kopfgesteuerten Schleifen in der Darstellung als Nassi-Shneidermann-Diagramm.]]
Programme können als '''Struktogramm''' (auch '''Nassi-Shneidermann-Diagramm genannt''') nach Norm DIN 66261 notiert werden. Alle Teilprogramme sind dabei so geartet, dass sie ausgehend von einem einfachen Hauptblock, der für das gesamte Programm und somit für mindestens einen Unterprogrammaufruf steht, durch schrittweise Verfeinerung hierarchisch zusammengesetzt werden können. Am Ende der Hierarchie stehen dann elementare Teilprogramme, die nicht weiter zerlegt werden können.
Die zyklomatische Komplexität der Software kann zum Beispiel mit der '''McCabe-Metrik''' untersucht und analysiert werden. Hierbei sollte darauf geachtet werden, dass die Komplexität beschränkt bleibt, damit der Quelltext überschaubar bleibt und gut nachvollzogen werden kann. Durch geeignete Strukturierung ist dies in modernen Programmiersprachen immer möglich, und mit einer McCabe-Metrik bis maximal 10 ist die Komplexität meist hinreichend niedrig.
Dies gilt nicht nur für den prozeduralen Programmablauf, sondern gleichermaßen für Datenstrukturen, bei denen komplexe Datentypen aus elementaren Datentypen übersichtlich und hierarchisch zusammengesetzt werden können.
Wichtig ist, dass die Anzahl der Programmzeilen ('''lines of code''') zwar gut als Maß für das zeitliche Wachstum einer bestimmten Software herangezogen werden kann, dies jedoch nicht geeignet ist, um eine Aussage über die Qualität oder Strukturiertheit des Programmcodes zu treffen. Weder eine besonders kleine noch eine besonders große Anzahl von Programmzeilen sind ein Garant für guten oder strukturierten Code.
Das Optimum ist nicht erreicht, wenn nichts mehr hinzugefügt werden kann, weil schon alles implementiert ist, sondern wenn nichts mehr entfernt werden kann, ohne dass die Implementierung hiervon beeinträchtigt wird (frei nach Antoine de Saint-Exupéry in ''Wind, Sand und Sterne - Terre des Hommes'' (1939)).
Programmieren ist nicht nur ein einfaches Handwerk, sondern eine anspruchsvolle Kunstfertigkeit (vergleiche auch Donald E. Knuth: ''The Art of Computer Programming'').
<div style="clear:both"></div>
===Sichtbarkeiten===
Grundsätzlich gilt immer das '''Prinzip der Lokalität'''. Dies bedeutet, dass auf Programmkonstrukte nur dort zugegriffen werden kann und darf, wo es unbedingt erforderlich ist. Zum Datenaustausch zwischen verschiedenen Programmteilen dienen unter diesen Voraussetzungen Schnittstellen, die in der strukturierten Programmierung exakt definiert sein müssen.
Alle Klassenvariablen, Instanzvariablen und Parametervariablen sowie Rückgabewerte werden in Bezug auf ihre Teilprogramme zum Beispiel als '''lokale Variablen''' behandelt, so dass sie nur innerhalb dieser Teilprogramme aufgerufen und verändert werden können. Auf diese Weise können unbeabsichtigte und unerwünschte Seiteneffekte nachhaltig vermieden werden.
Je weniger lokal eine Variable definiert ist, desto größer ist die Gefahr, dass diese unbeabsichtigt oder sogar zuwider den Absichten des Programmierers verändert werden kann, was dann zu entsprechend dramatischen und schwer identifizierbaren Programmfehlern führen kann, die zudem erst zur Laufzeit auftreten und oft nur zufällig und somit umso schwerer zu entdecken sind. Variablen sollen also immer so '''lokal''' wie möglich definiert werden. Am besten sind Variablen lokalisiert, wenn sie innerhalb der Teilstruktur definiert werden, wo die Variablen üblicherweise „sichtbar” (und demzufolge verwendbar) sind. Außerhalb der Blöcke sind diese Variablen dann „unsichtbar” und somit auch nicht benutzbar.
Für Programmiersprachen die keine explizite Blockanweisung für Teilprogramme haben, ist die am stärksten lokalisierte Definition in der Regel innerhalb einer Methode respektive einer Prozedur oder einer Funktion. Die nächsthöhere Strukturebene ist dann - sofern möglich - das Modul beziehungsweise die Klasse (dies ist zwar häufig eine vom Compiler zu übersetzende Einheit, ist jedoch nicht unbedingt identisch mit einer Quelltextdatei). Innerhalb von Programmstrukturen sollten Variablen möglichst mit dem Sichtbarkeitsmodifikator für die ausschließlich interne Verwendbarkeit (zum Beispiel mit dem Modifikator ''private'' oder ''limited'') deklariert werden. Solche internen Variablen können dann gegebenenfalls mit entsprechend zu implementierenden Konstruktoren initialisiert, mit sogenannten Getter-Methoden abgefragt und mit Setter-Methoden verändert werden. Falls diese exportiert werden (beispielsweise mit dem Modifikator ''public'' oder ''export''), ist auch außerhalb der Deklarationsstruktur ein definierter indirekter Zugriff auf die internen Variablen möglich.
Manche Programmiersprachen erlauben eine Deklaration, die außerhalb des Deklarationsbereiches nur gesehen respektive gelesen werden können (zum Beispiel mit dem Modifikator ''read-only'' für Variablen oder ''implement-only'' für Methoden). In diesem Fall können die entsprechenden Variablen oder Methoden außerhalb der Deklarationsstruktur also nicht verändert, aber zumindest abgefragt oder aufgerufen werden.
'''Globale Variablen''', die überall innerhalb von großen Programmeinheiten verändert werden können, sind immer vermeidbar, erhöhen die Gefahr von Programmfehlern und erleichtern unter Umständen Cyber-Attacken.
Besondere Probleme ergeben sich, wenn innerhalb eines Sichtbarkeitsbereiches für verschiedene Dinge gleichlautende '''Bezeichner''' verwendet werden dürfen. Dies kann wegen der Wahlfreiheit bei der Benennung sehr leicht vermieden werden, indem einfach keine gleichlautenden Bezeichner benutzt werden. Im folgenden Beispiel wird verdeutlicht, wie in einem Java-Programm zwischen den Bezeichnern von lokalen und globalen Variablen sowie von Methoden formal dennoch eindeutig unterschieden werden kann:
<syntaxhighlight lang="Java">
public class Klasse
{
// globale Variable "bezeichner" (Klassenvariable)
private static long bezeichner = 1;
// Methode "bezeichner" (Unterprogramm)
private static long bezeichner ()
{
// lokale Variable "bezeichner" in der Methode "bezeichner"
long bezeichner = 3;
return bezeichner;
}
// Hauptprogramm (Methode "main")
public static void main (java.lang.String [] argumente)
{
// Ausgabe der globalen Variable aus der Klasse "Klasse"
java.lang.System.out.println ("Wert der globalen Variable = " + Klasse.bezeichner);
// lokale Variable "bezeichner" in der Methode "main"
long bezeichner = 2;
// Ausgabe der lokalen Variable aus der Methode "main"
java.lang.System.out.println ("Wert der lokalen Variable = " + bezeichner);
// Ausgabe des Ergebnisses des Aufrufs der Methode "bezeichner"
java.lang.System.out.println ("Wert des Unterprogramms = " + bezeichner ());
}
}
</syntaxhighlight>
In dieser Java-Klasse "Klasse" gibt es vier gleichlautende Bezeichner "bezeichner":
* Der Name einer '''globalen Klassenvariable'''.
* Der Name einer '''Methode'''.
* Der Name einer '''lokalen Variable''' in der Methode "bezeichner".
* Der Name einer '''lokalen Variable''' in der Methode "main".
Nach den Regeln der Programmiersprache Java haben lokale Bezeichner bei der Referenzierung innerhalb einer Blockanweisung Vorrang, so dass bei der Verwendung dieser Bezeichner immer auf die lokale Variable zugegriffen wird. Im obigen Beispiel haben die beiden lokalen Variablen "'''bezeichner'''" nichts miteinander zu tun und können nur in ihrer entsprechenden Methode referenziert werden. Soll in einem lokalen Sichtbarkeitsbereich auf die globale Klassenvariable referenziert werden, so kann dies durch einen expliziten und '''qualifizierten Bezeichner''' erwirkt und sichergestellt werden, im obigen Beispiel mit "'''Klasse.bezeichner'''". Der Bezeichner einer Methode kann durch das stets folgende runde Klammerpaar identifiziert werden, im obigen Beispiel "'''bezeichner ()'''".
===Modularisierung===
Teilprogramme können Methoden oder ganze Sammlungen von Datenstrukturen und Methoden sein. Diese werden oft '''Klassen''' oder '''Module''' genannt und können in '''Paketen''' gruppiert werden. Alle Teilprogramme sollen eindeutige und sprechende Bezeichner und streng definierte Signaturen und Schnittstellen für die Namen und die Datentypen aller Parameter beziehungsweise Klassen- und Instanzvariablen haben. Bei diesen Teilprogrammen handelt es sich in der Regel um die kleinsten dauerhaft speicherbaren Programmeinheiten, die zum Beispiel in einer Datenbank oder einem Dateisystem zu größeren Einheiten wie Verzeichnissen, Paketen oder Bibliotheken zusammengefasst werden.
Solche Programmeinheiten werden durch ihre '''Signatur''' eindeutig gekennzeichnet. Die Signatur besteht zunächst aus dem '''Namen''' der Programmeinheit. Ferner kann mit einem Modifikator explizit definiert werden, dass diese Programmeinheit allgemein, also von allen und beliebigen anderen Programmeinheiten, verfügbar sein soll (Modifikator ''public'' / ''öffentlich''). Für eine Beschränkung nur auf die nächst höhere Programmeinheit, wie beispielsweise einem Paket (englisch "package"), kann der Modifikator ''private'' verwendet werden.
Eine typische Programmbibliothek hat in der Programmiersprache Java am Beispiel des Moduls "java.base" und der beiden Pakete "java.io" und "java.lang" folgende ausschnittsweise Struktur und Hierarchie:
<syntaxhighlight lang="Java">
module java.base;
package java.io;
class Reader;
{
// Implementation der Klasse Reader
}
class Writer;
{
// Implementation der Klasse Writer
}
package java.lang;
class String;
{
// Implementation der Klasse String
}
class System;
{
// Implementation der Klasse System
}
</syntaxhighlight>
===Methoden===
'''Methoden''' beziehungsweise '''Prozeduren''' werden ebenfalls durch ihre '''Signatur''' eindeutig deklariert, und alle Methodenaufrufe müssen sich streng an diese Deklaration halten. Die Signatur besteht zunächst aus dem '''Namen''' der Methode.
Methoden haben optional einen '''Rückgabewert''', für die der Datentyp ebenfalls festgelegt werden muss und der in streng strukturierten Programmiersprachen ebenfalls zur Signatur der Methode gehört und verwendet werden muss. Solche Methoden werden auch '''Funktionen''' genannt. Leider ist es in manchen Programmiersprachen erlaubt, Rückgabewerte von Funktionen einfach zu ignorieren und diese nicht in einer Variablen zu speichern oder im Rahmen eines Ausdrucks auszuwerten, da dies zu leicht zu übersehenden Programmierfehlern führen kann.
Ferner gibt es innerhalb der Signatur optionale '''Modifikatoren''', die die Regeln für die Sichtbarkeit (zum Beispiel ''öffentlich'' / ''privat'' / ''eingeschränkt'', englisch: ''public'' / ''private'' / ''limited'') festlegen.
Die Überschreibbarkeit einer Methode wird mit einem weiteren Modifikator festgelegt (wie zum Beispiel mit ''statisch'' / ''erweiterbar'' / ''abstrakt'' / ''abgeschlossen'', englisch: ''static'' / ''extensible'' / ''abstract'' / ''final'').
Methoden haben keinen, einen oder mehrere '''Parameter'''. Methoden ohne Parameter werden auch parameterlose Methoden genannt. Parameter sind innerhalb der Methode lokale Variablen, die beim Aufruf der Methode angegeben werden müssen und gegebenenfalls zusammen mit dem Rückgabewert die Schnittstelle für den Datenaustausch zum aufrufenden Programm darstellen. Die Anzahl, die Namen, die Datentypen und die Reihenfolge der '''Parameter''' gehören ebenfalls zur Signatur einer Methode. Beim Aufruf einer Methode müssen alle Parameter in der richtigen Reihenfolge und zuweisungskompatibel angegeben werden. Parameter können unterschieden werden in:
* '''Eingangsparameter''' ('''in'''), die als Wert (englisch ''value'') übergeben und nur innerhalb der Methode verwendet werden. Nach Beendigung des Methodenaufrufs sind sie ungültig und dürfen nicht weiterhin referenziert werden.
* '''Ausgangsparameter''' ('''out'''), die als Referenzen (Zeiger auf einen Speicherbereich, englisch ''pointer'') übergeben und deren Werte erst innerhalb der Methode ermittelt und zugewiesen werden. Nach Beendigung des Methodenaufrufs sind ihre Werte über die Referenzen abrufbar. Die referenzierten Speicherbereiche müssen vor dem Methodenaufruf allokiert worden sein, aber die Speicherinhalte müssen nicht festgelegt werden, da sie innerhalb der Methode nicht verwendet, sondern bestimmt und zugewiesen werden. Beim Programmieren ist große Sorgfalt darauf zu legen, dass die entsprechenden Zuweisungen innerhalb der Methode in jedem Fall erfolgen, falls die verwendete Programmiersprache dies nicht sowieso vorschreibt und erzwingt.
* '''Durchgangsparameter''' ('''var'''iable), die als Referenzen mit definierten Speicherinhalten übergeben, innerhalb der Methode verwendet und nach einer möglichen Veränderung (respektive '''Var'''iation) während des Methodenaufrufs weiterverwendet werden können. Nach Beendigung des Methodenaufrufs sind ihre aktuellen Werte in den aufrufenden Programmteilen über die Referenzen abrufbar.
===Grundlegende Anweisungen===
Grundsätzlich kommt die strukturierte Programmierung in imperativen Programmiersprachen mit folgenden grundlegenden Anweisungen aus:
* '''Deklaration''', zum Beispiel bei Klassen, Methoden, Variablen oder Konstanten mit einer eindeutigen Signatur:
** '''Modifikatoren''' für die Sichtbarkeit, Verwendbarkeit oder Veränderbarkeit
** '''Bezeichner'''
** Optional (bei Methoden, Funktionen, Prozeduren): '''Parameter''' mit Deklaration der Bezeichner, der Veränderbarkeiten und der Datentypen
** Optional (bei Funktionen): Datentyp des '''Rückgabewertes'''
* '''Blockanweisung''', zum Beispiel BEGIN ... END oder { ... }
* '''Zuweisung''', zum Beispiel a := b - c; (das Gleichheitseichen ist nicht zu verwechseln mit einem Vergleichsoperator)
* '''Aufruf von Unterprogrammen''':
** '''Kommandos''' (ohne Parameter und ohne Rückgabewert)
** '''Prozeduren''' oder Methoden (ohne Rückgabewert)
** '''Funktionen''' (mit Rückgabewert)
* '''Rückgabe''' bei Funktionen, zum Beispiel return x;
Anweisungen werden häufig durch ein reserviertes Zeichen abgeschlossen, wie zum Beispiel mit einem Semikolon.
Das folgende Beispiel zeigt eine Java-Klasse mit 15 grundlegenden Anweisungen:
<syntaxhighlight lang="Java">
// Deklaration der oeffentlichen Klasse "Anweisungen"
public class Anweisungen
// Implementation der Klasse mit einer Blockanweisung "{}"
{
// Deklaration der privaten, globalen Klassenvariable "flaeche" vom Datentyp "double"
private static double flaeche;
// Deklaration der privaten statischen Methode "kreisflaeche" (Unterprogramm) zur Berechnung der Flaeche eines Kreises mit dem Radius "radius"
// mit dem Parameter "radius" vom Datentyp "double"
// und mit einer Gleitkommazahl vom Datentyp "double" als Rueckgabewert
private static double kreisflaeche (double radius)
// Implementation der Methode "kreisflaeche" mit einer Blockanweisung "{}"
{
// Deklaration der lokalen Variable "ergebnis" vom Datentyp "double"
double ergebnis;
// Zuweisung eines Ausdrucks an die Variable "ergebnis" mit dem Zuweisungsoperator "="
// Syntax: "Variablenname Zuweisungsoperator Ausdruck Semikolon"
// Der arithmetische Ausdruck verwendet zwei Multiplikationsoperatoren "*"
// Die Kreiszahl pi aus der Klasse "java.lang.Math" wird qualifiziert bezeichnet: "java.lang.Math.PI"
ergebnis = java.lang.Math.PI * radius * radius;
// Ruecksprunganweisung "return" mit der Rueckgabe der Gleitkommazahl "ergebnis"
return ergebnis;
}
// Deklaration der oeffentlichen statischen Methode main (Hauptprogramm)
public static void main (java.lang.String [] arguments)
// Implementation der Methode "main" mit einer Blockanweisung "{}"
{
// Deklaration der lokalen Variable "raddurchmesser" vom Datentyp double
double raddurchmesser;
// Initialisierung der lokalen Variable "raddurchmesser" durch Zuweisung des konstanten arithmetischen Zahlenausdrucks "1.5"
raddurchmesser = 1.5;
// Aufruf der Methode "kreisflaeche" mit dem arithmetischen Ausdruck "raddurchmesser / 2" als Parameter
// Der Rueckgabewert des Methodenaufrufs ist ein Ausdruck und wird der globalen Klassenvariablen "flaeche" zugewiesen
flaeche = kreisflaeche (raddurchmesser / 2);
// Aufruf der Methode "println" mit dem Parameter "flaeche" zur Ausgabe der berechneten Kreisflaeche
// Die Methode aus der Klasse "java.lang.System" wird qualifiziert bezeichnet: "java.lang.System.out.println"
java.lang.System.out.println (flaeche);
}
}
</syntaxhighlight>
Diese Anweisungen sind in der Reihenfolge des Auftretens:
# '''Deklaration''' der Klasse "Anweisungen"
# '''Blockanweisung''' zur Implementation der Klasse "Anweisungen"
# '''Deklaration''' der Klassenvariable "flaeche"
# '''Deklaration''' der Methode "kreisflaeche" (Unterprogramm)
# '''Blockanweisung''' zur Implementation der Methode "kreisflaeche"
# '''Deklaration''' einer lokalen Variable "ergebnis" in der Methode "kreisflaeche"
# '''Zuweisung''' an die lokale Variable "ergebnis" in der Methode "kreisflaeche"
# '''Rücksprung''' vom Unterprogramm "kreisflaeche" zum Hauptprogramm "main"
# '''Deklaration''' der Methode "main" (Hauptprogramm)
# '''Blockanweisung''' zur Implementation der Methode "main"
# '''Deklaration''' der lokalen Variable "raddurchmesser"
# '''Zuweisung''' an die lokale Variable "raddurchmesser"
# '''Aufruf''' des Unterprogramms "kreisflaeche"
# '''Zuweisung''' an die globale Klassenvariable "flaeche"
# '''Aufruf''' des Unterprogramms "println"
===Anweisungsstrukturen===
Anweisungesstrukturen setzen sich aus mehreren Anweisungen zusammen. Eine Methode besteht zum Beispiel aus einer Deklaration mit der Definition der Schnittstelle, der unmittelbar eine Blockanweisung mit der Implementierung folgt.
Zu den weiteren elementaren Anweisungsstrukturen für Teilprogramme gehören:
* '''Anweisungsfolgen'''
* '''Kontrollstrukturen'''
** '''Fallunterscheidungen'''
*** bedingte Anweisungen (if - then)
*** einfache Verzweigungen (if - then - else)
*** mehrfache Verzweigungen (switch - case - else)
** '''Wiederholungen (Schleifen)'''
*** kopfgesteuerte Schleifen (while-Schleifen, for-Anweisungen)
*** fußgesteuerte Schleifen (repeat - until, do - while)
Bei jedem elementaren Teilprogramm (respektive jeder Methode, Prozedur oder Funktion, aber auch bei jeder Definition von Datenstrukturen) sollte der Quelltext bequem und vollständig auf einer Bildschirmseite gelesen werden können, ohne dass der Text im Betrachtungsfenster verschoben werden muss. Dabei empfiehlt es sich, Methodenaufrufe und übersichtliche Blockanweisungen zu verwenden, mit denen der Quellcode in Unterabschnitte gegliedert werden kann (Verfeinerung).
Im folgenden Beispiel werden drei geschachtelte Blockanweisungen durch jeweils ein Paar geschweifter Klammern begrenzt. Die äußersten Klammern dienen zur Begrenzung der Implementation der Methode "printMonth", die inneren Blockanweisungen sind ebenso wie alle anderen Anweisungen nach rechts eingerückt:
printMonth ()
{
const int NumberOfWeekdays ← 7
const int LastDay ← 31
int column
int day ← 1
while (day <= LastDay)
{
printInt (day)
column ← day modulo NumberOfWeekdays
if (column = 0)
{
printLine ()
}
day ← day + 1
}
}
Wächst die Länge einer Methode zu sehr an, können und sollen einzelne Blockanweisungen unter Berücksichtigung der entsprechenden Übergabeparameter in eigene, aufzurufende Methoden ausgelagert werden, wodurch der Code geringfügig länger, aber wesentlich besser verständlich wird:
optionalNewLine (int day)
{
const int NumberOfWeekdays ← 7
int column ← day modulo NumberOfWeekdays
if (column = 0)
{
printLine ()
}
}
void printMonth ()
{
const int LastDay ← 31
int day ← 1
while (day <= LastDay)
{
printInt (day)
optionalNewLine (day)
day ← day + 1
}
}
Hierbei ist es hilfreich, wenn die aufzurufenden Programmteile vor ihrer ersten Verwendung implementiert werden, im Quelltext also zuerst definiert (also deklariert und implementiert) und erst weiter unten benutzt (respektive aufgerufen oder referenziert) werden.
Häufig wird behauptet, dass die Performanz der ausgeführten Programme durch die Aufteilung in solche Unterprogramme leiden würde, da die zahlreichen Aufrufe und Rücksprünge Rechenzeit und Speicherressourcen kosten. In den allermeisten Fällen ist dies auf modernen Rechenmaschinen jedoch zu vernachlässigen. Bei den meisten Anwendungen wird am Speicherbedarf und an der Rechenzeit nicht bemerkt werden können, ob ein strukturiertes oder ein unstrukturiertes Programm vorliegt. Bestenfalls bei extrem rechenintensiven Aufgaben (wie zum Beispiel beim sogenannten "number crunching" ("Zahlenfressen"), bei Monte-Carlo-Simulationen oder Big-Data-Analysen) kann dies bei den extrem häufig aufgerufenen Unterprogrammen einen nennenswerten Effekt haben. Hierbei kann eine wohlstrukturierte Parallelisierung von Programmen oder die Ausgliederung von Rechenaufgaben in spezialisierte Hardware (Graphikprozessoren, digitale Signalprozessoren (DSP), Field Programmable Gate Arrays (FPGA) oder Quantencomputer) wesentlich zu einer Beschleunigung der Programmabläufe beitragen.
Eine Software, die von den Anwendern als zu langsam empfunden wird, ist meist nur schlecht programmiert. Ferner kann gar nicht häufig genug betont werden, dass die Entwicklung und Wartung unstrukturierter Programme erheblich länger dauert und wesentlich fehleranfälliger ist.
=== Schrittweise Verfeinerung ===
Die Implementierung von Software geschieht in der Regel vom Großen ins Kleine. Grob entworfene Anweisungsfolgen und Datenstrukturen werden dabei im Rahmen einer '''schrittweisen Verfeinerung''' immer genauer den Anforderungen angepasst.
Die folgenden Aspekte sind bei der schrittweisen Verfeinerung nach wie vor typisch:<ref>Niklaus Wirth: [http://sunnyday.mit.edu/16.355/wirth-refinement.html Program Development by Stepwise Refinement], Communications of the Association for Computing Machinery, Band 14, Nummer 4, April 1971, Seiten 221 bis 227</ref>
* In jedem Schritt wird eine Aufgabe (ein Programmteil / ein Datensatz) in Unteraufgaben (in Unterprogramme / in Unterdatensätze) aufgeteilt.
* Der Grad der Abkapselung von Unteraufgaben bestimmt, wie leicht oder schwer Programme und Datenstrukturen angepasst oder übertragen werden können.
* Die Notation für Programme und Daten sollte stets so weit wie möglich sowohl der natürlichen Sprache und der Natur der Sache als auch der Hardware und den Software-Werkzeugen angepasst sein.
* Die Berücksichtigung der Kriterien Laufzeiteffizienz und Speichereffizienz sowie Klarheit und Regelmäßigkeit der Strukturen ist in allen Entwicklungsschritten bis zur Fertigstellung relevant.
* Es muss immer erwogen werden, dass ein korrekt funktionierendes Programm durch eine bessere Version ersetzt werden kann und dass frühere Entscheidungen aus allen Entwicklungsschritten revidiert werden können.
* Die Entwicklung und Wartung guter Programme ist alles andere als trivial, wird aber durch den Einsatz streng strukturierter Programmiersprachen deutlich erleichtert.
== Datenstrukturen ==
Nicht nur der Programmcode, sondern auch die zu verarbeitenden Daten müssen gut strukturiert werden, um die Entwicklungszeiten zu reduzieren, die Qualität der Programme zu erhöhen und die Wartung der Quelltexte zu erleichtern. Gehören zum Beispiel ganz verschiedene Attribute zu einer Sache, sollen diese Attribute zu einer Datenstruktur zusammengefasst werden. Datenstrukturen können auch geschachtelt eingesetzt werden, so dass sehr umfangreiche und komplexe Datenstrukturen abgebildet werden können.
===Aufzählungen===
Eine '''Aufzählung''' (englisch "enumeration") wird verwendet, wenn bestimmte Eigenschaften von Datenstrukturen abzählbar und endlich sind. Mit diesen thematisch zusammengehörigen Aufzählungen können im Programmtext an allen entsprechenden Stellen statt abstrakt zugeordneter Zahlen konkret zugeordnete symbolische Konstanten mit sprechenden und selbsterklärenden Bezeichnern verwendet werden. Manche Programmiersprachen bieten dafür sogar die Möglichkeit an, dafür eigene Datentypen zu erstellen, in vielen Programmiersprachen wird das jedoch auf sehr simple Weise mit ganzzahligen Basisdaten nachgebildet.
Im folgenden Beispiel wird erläutert, wie verschiedene Kalendersysteme als Aufzählung behandelt werden können. Hierbei werden die folgenden vier Kalendersysteme zu Auswahl:
* Jüdisches Kalendersystem, Kennzahl = 1
* Julianisches Kalendersystem, Kennzahl = 2
* Gregorianisches Kalendersystem, Kennzahl = 3
* Islamisches Kalendersystem, Kennzahl = 4
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
public class Kalendersystem
{
public final static long JUEDISCH = 1; // Lunisolarkalender
public final static long JULIANISCH = 2; // Solarkalender bis 4. Oktober 1582 (Donnerstag)
public final static long GREGORIANISCH = 3; // Solarkalender seit 15. Oktober 1582 (Freitag)
public final static long ISLAMISCH = 4; // Lunarkalender
}
</syntaxhighlight>
<syntaxhighlight lang="oberon2">
(* Programmiersprache Oberon *)
MODULE Kalendersystem;
CONST
JUEDISCH = 1; (* Lunisolarkalender *)
JULIANISCH = 2; (* Solarkalender bis 4. Oktober 1582 (Donnerstag) *)
GREGORIANISCH = 3; (* Solarkalender seit 15. Oktober 1582 (Freitag) *)
ISLAMISCH = 4; (* Lunarkalender *)
</syntaxhighlight>
In manchen, meist älteren Programmiersprachen gibt es explizite Aufzählungstypen, bei denen der Compiler automatisch die dazugehörigen ganzen Kennzahlen festlegt, ohne dass diese im Quelltext auftauchen, weil ausschließlich die symbolischen Konstanten aus der Deklaration des Aufzählungstyps verwendet werden. Variablen des Datentyps "Kalendersystem" im folgenden Beispiel dürfen nur die vier zwischen den runden Klammern explizit angegebenen respektive aufgezählten symbolischen Konstanten und keine beliebigen ganzen Zahlen verwenden:
<syntaxhighlight lang="modula2">
(* Programmiersprache Modula-2 *)
TYPE Kalendersystem = (JUEDISCH, JULIANISCH, GREGORIANISCH, ISLAMISCH);
</syntaxhighlight>
<syntaxhighlight lang="cpp">
/* Programmiersprache C++ */
enum Kalendersystem = {JUEDISCH, JULIANISCH, GREGORIANISCH, ISLAMISCH};
</syntaxhighlight>
===Verbunde===
Gehören mehrere verschiede Attribute zu einer Datenstruktur, spricht man auch von einem '''Verbund'''. Diese Datenstrukturen werden je nach Programmiersprache häufig "struct" oder "record" genannt. Alle Attribute können und müssen über einen zentralen Zugang adressiert werden. Dies soll im Folgenden anhand der Datenstruktur "Kalenderdatum" beispielhaft erläutert werden.
Ein Kalenderdatum möge aus einem '''Tag''', einem '''Monat''', einem '''Jahr''' und einem '''Kalendersystem''' bestehen:
Alle vier Attribute werden in vier unabhängigen Datenfeldern gespeichert. Im vorliegenden Beispiel sind zwar alle vier Datenfelder vom Basisdatentyp "ganze Zahl" ("long" oder "INTEGER"), die Bedeutung und die gültige Zahlenbereiche unterscheiden sich jedoch:
* Tag: ganze Zahl im Intervall [1..31]
* Monat: ganze Zahl im Intervall [1..12]
* Jahr: ganze Zahl
* Kalendersystem. ganze Zahl des Aufzählungstyps "Kalendersystem" mit den vier Optionen (JUEDISCH, JULIANISCH, GREGORIANISCH, ISLAMISCH)
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
public class Kalenderdatum
{
// Instanzvariablen
private long tag;
private long monat;
private long jahr;
private long kalendersystem;
public Kalenderdatum (long tag, long monat, long jahr, long kalendersystem) // Konstruktor zur Initialisierung von Instanzvariablen der Klasse Kalenderdatum
{
this.tag = tag;
this.monat = monat;
this.jahr = jahr;
this.kalendersystem = kalendersystem;
}
public static void main (java.lang.String [] argumente) // main-Methode der Klasse "Kalenderdatum"
{
Kalenderdatum kalenderdatum = new Kalenderdatum (10, 4, 2023, Kalendersystem.GREGORIANISCH); // Eine neue Instanz wird erzeugt und durch den Aufruf des Konstruktors initialisiert
java.lang.System.out.print (kalenderdatum.tag);
java.lang.System.out.print (".");
java.lang.System.out.print (kalendekalenderdatum.monat);
java.lang.System.out.print (".");
java.lang.System.out.print (kalenderdatum.jahr);
java.lang.System.out.println (); // Zeilenumbruch
}
}
</syntaxhighlight>
<syntaxhighlight lang="oberon2">
(* Programmiersprache Oberon *)
IMPORT Out; (* Import des Moduls "Out" für die Textausgabe *)
TYPE Kalenderdatum =
RECORD
tag: INTEGER;
monat: INTEGER;
jahr: INTEGER;
kalendersystem: INTEGER;
END;
VAR kalenderdatum; (* Variable *)
BEGIN
kalenderdatum.tag = 10;
kalenderdatum.monat = 4;
kalenderdatum.jahr = 2023;
kalenderdatum.kalendersystem = Kalendersystem.GREGORIANISCH;
Out.Int (kalenderdatum.tag);
Out.String (".");
Out.Int (kalenderdatum.monat);
Out.String (".");
Out.Int (kalenderdatum.jahr);
Out.Ln; (* Zeilenumbruch *)
END;
</syntaxhighlight>
Die Textausgabe lautet jeweils:
<syntaxhighlight lang="text">
23.4.2023
</syntaxhighlight>
===Arrays===
In Arrays werden endlich viele und abzählbare Elemente eines bestimmten Datentyps in einer geordneten Reihe gespeichert. Die einzelnen Elemente können über einen ganzzahligen Index angesprochen werden. Der niedrigste Index ist meistens der Index Null, und dieser zeigt auf die erste Speicheradresse des Arrays. Da alle Elemente vom gleichen Datentyp sind, wird für jedes Element immer der gleiche Speicherplatz benötigt. Elemente mit komplexen Datentypen, werden nicht direkt im Array gespeichert, sondern dieses enthält als Verweise Zeiger mit den Speicheradressen der Inhalte der Elemente. Wenn der Speicherbedarf für ein Element (oder dessen Zeiger) <math>S_E</math> Bytes beträgt und das Array insgesamt <math>N</math> Elemente hat, dann berechnet sich der Speicherbedarf <math>S</math> für das ganze Array aus dem Produkt:
<math>S = S_E \cdot N</math>
Die Speicheradresse <math>A_i</math> des i-ten Elements des Arrays berechnet sich dann mit einfacher und effizient ausführbarer Arithmetik aus der Speicheradresse des Arrays <math>A</math>, dem Speicherbedarf für ein Element (oder dessen Zeiger) <math>S_E</math> und dem Index <math>i</math> :
<math>A_i = A + S_E \cdot i</math> mit <math>0 \le i < N</math>
Die Speicheradresse des ersten Elements mit dem Index Null <math>A_0</math> ist also stets identisch mit der Speicheradresse des Arrays <math>A</math>.
Im folgenden Beispiel wird ein Array mit acht zufällig verteilten Gleitkommazahlen dargestellt, bei denen jede Gleitkommazahl einen Speicherplatz von '''8 Bytes''' (Datentyp '''double''' mit 64 Bits) belegt:
{| class="wikitable"
|'''Länge des Arrays <math>N</math>'''
|'''Speicheradresse des Arrays (dezimal) <math>A</math>'''
|'''Speicheradresse des Arrays (hexadezimal) <math>A</math>'''
|'''Speicherbedarf für eine Gleitkommazahl in Bytes <math>S_E</math>'''
|-
|8
|10000000
|98 96 80
|8
|-
|'''Index <math>i</math>'''
|'''Speicheradresse des Elements im Array (dezimal) <math>A_i = A + S_E \cdot i</math>'''
|'''Speicheradresse des Elements im Array (hexadezimal) <math>A_i = A + S_E \cdot i</math>'''
|'''Gespeicherter Inhalt des Elements (Gleitkommazahl)'''
|-
|0
|10000000
|98 96 80
|678,1495238
|-
|1
|10000008
|98 96 88
|317,4610959
|-
|2
|10000016
|98 96 90
|574,3131347
|-
|3
|10000024
|98 96 98
|673,9323679
|-
|4
|10000032
|98 96 A0
|854,6637912
|-
|5
|10000040
|98 96 A8
|764,4845853
|-
|6
|10000048
|98 96 B0
|335,5146962
|-
|7
|10000056
|98 96 B8
|545,0787382
|}
Das folgende Java-Programm implementiert ein solches Array mit acht Gleitkommazahlen:
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
public class Array
{
// Klassenvariable zufallszahlen als Array mit acht Gleitkommazahlen
private static double zufallszahlen [] = new double [8];
public static void setzeZufallszahlen (long startwert) // Methode zur Bestimmung aller Gleitkommazahlen
{
// Variable zufallszahl
java.util.Random zufallszahl = new java.util.Random (startwert); // Startwert für erste Zufallszahl
long anzahl = zufallszahlen.length;
int zaehler = 0; // der Index von Arrays darf nicht vom Datentyp long sein
while (zaehler < anzahl)
{
zufallszahlen [zaehler] = zufallszahl.nextDouble ();
zaehler++;
}
}
public static void ausgabeZufallszahlen () // Methode zur Ausgabe aller Gleitkommazahlen
{
long anzahl = zufallszahlen.length;
int zaehler = 0; // der Index von Arrays darf nicht vom Datentyp long sein
while (zaehler < anzahl)
{
java.lang.System.out.println (zufallszahlen [zaehler]);
zaehler++;
}
}
public static void main (java.lang.String [] argumente) // Hauptprogramm "main" zum Aufruf der beiden Unterprogramme
{
setzeZufallszahlen (1000); // Aufruf des Unterprogramms setzeZufallszahlen mit dem Parameter 1000 als Startwert
ausgabeZufallszahlen (); // Aufruf des Unterprogramms ausgabeMonatsname ohne Parameter
}
}</syntaxhighlight>
Mit dem Aufruf des Hauptprogramms ''main'' erfolgt die Ausgabe von acht Pseudozufallszahlen:
<syntaxhighlight>
0.7101849056320707
0.574836350385667
0.9464192094792073
0.039405954311386604
0.4864098780914311
0.4457367367074283
0.6008140654988429
0.550376169584217
</syntaxhighlight>
Im nächsten Beispiel mit einem Array für die zwölf Monatsnamen ist der Datentyp eines Arrayelements jeweils eine Zeichenkette, die je nach ihrer Länge verschieden große Speicherbereiche belegen:
{| class="wikitable"
|'''Länge des Arrays'''
|'''Speicheradresse des Arrays'''
|'''Speicherbedarf für eine Speicheradresse'''
|'''Speicherbedarf für ein Zeichen'''
|
|
|-
|13
|10000000
|4
|2
|
|
|-
|Index
|'''Speicheradresse des Elements im Array'''
|'''Gespeicherter Inhalt des Elements (Speicheradresse)'''
|'''Länge der Zeichenkette'''
|'''Speicherbedarf der Zeichenkette'''
|'''Gespeicherter Inhalt des Elements (Zeichenkette)'''
|-
|0
|10000000
|20000000
|8
|16
|"deutsch"
|-
|1
|10000004
|20000016
|7
|14
|"Januar"
|-
|2
|10000008
|20000030
|8
|16
|"Februar"
|-
|3
|10000012
|20000046
|5
|10
|"März"
|-
|4
|10000016
|20000056
|6
|12
|"April"
|-
|5
|10000020
|20000068
|4
|8
|"Mai"
|-
|6
|10000024
|20000076
|5
|10
|"Juni"
|-
|7
|10000028
|20000086
|5
|10
|"Juli"
|-
|8
|10000032
|20000096
|7
|14
|"August"
|-
|9
|10000036
|20000110
|10
|20
|"September"
|-
|10
|10000040
|20000130
|8
|16
|"Oktober"
|-
|11
|10000044
|20000146
|9
|18
|"November"
|-
|12
|10000048
|20000164
|9
|18
|"Dezember"
|}
In den folgenden Beispielen in der Programmiersprache werden die zwölf Monatsnamen in Arrays mit Zeichenketten gespeichert. Hierzu wird die Sprache der Monatsnamen im ersten Arrayfeld mit dem Index 0 und die zwölf Monatsnamen in den folgenden Arrayfeldern mit den Indizes 1 bis 12 gespeichert:
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
public class Monatsnamen
{
// Klassenvariable
private static java.lang.String monatsnamen [] = {"deutsch",
"Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"};
public static void ausgabeMonatsname (int monat) // Methode zur Textausgabe von Monatsnamen
{
java.lang.System.out.println (monatsnamen [monat]);
}
public static void main (java.lang.String [] argumente) // Hauptprogramm "main" zum Aufruf der Methode ausgabeMonatsname
{
ausgabeMonatsname (1); // Aufruf des Unterprogramms ausgabeMonatsname mit dem Parameter 1
}
}
</syntaxhighlight>
Mit dem Aufruf des Hauptprogramms ''main'' erfolgt die Ausgabe mit dem ersten Monatsnamen:
<syntaxhighlight>
Januar
</syntaxhighlight>
In einigen Programmiersprachen muss die Größe der Array vor der Initialisierung festgelegt werden, und die Zuordnung zwischen den Indizes und den Arrayfeldern ist dann auch bei der Initialisierung explizit erkennbar:
<syntaxhighlight lang="oberon2">
(* Programmiersprache Component Pascal *)
MODULE Monatsnamen;
IMPORT Out; (* Import des Moduls "Out" für die Textausgabe *)
TYPE Monatsnamen = POINTER TO ARRAY OF ARRAY OF CHAR;
VAR monatsnamen: Monatsnamen;
PROCEDURE InittialisiereMonatsnamen (); (* Prozedur zur Initialisierung von Monatsnamen *)
BEGIN
NEW (monatsnamen, 13, 10); (* Reservierung von 13 Zeichenketten mit je 10 Zeichen) *)
monatsnamen [0] := "deutsch";
monatsnamen [1] := "Januar";
monatsnamen [2] := "Februar";
monatsnamen [3] := "März";
monatsnamen [4] := "April";
monatsnamen [5] := "Mai";
monatsnamen [6] := "Juni";
monatsnamen [7] := "Juli";
monatsnamen [8] := "August";
monatsnamen [9] := "September";
monatsnamen [10] := "Oktober";
monatsnamen [11] := "November";
monatsnamen [12] := "Dezember";
END InittialisiereMonatsnamen;
PROCEDURE AusgabeMonatsname (monat: INTEGER); (* Prozedur zur Textausgabe von Monatsnamen *)
BEGIN
Out.String (monatsnamen [monat]);
END AusgabeMonatsname;
PROCEDURE Hauptprogramm*;
BEGIN
InittialisiereMonatsnamen (); (* Initialisierung beim Laden des Moduls "Monatsnamen" *)
AusgabeMonatsname (1); (* Aufruf des Unterprogramms AusgabeMonatsname mit dem Parameter 1 *)
END Hauptprogramm;
END Monatsnamen.
</syntaxhighlight>
Durch den Aufruf von ''Monatsnamen.Hauptprogramm'' erfolgt die Ausgabe mit dem ersten Monatsnamen:
<syntaxhighlight>
Januar
</syntaxhighlight>
Arrays können mehrdimensional gestaltet werden. Um zum Beispiel zwei Sprachen mit Monatsnamen zu speichern, kann eine weitere Dimension mit einem Index für die gewünschte Sprache implementiert werden:
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
public class Monatsnamen
{
// Konstanten für Sprachaufzählung
public final static int DEUTSCH = 0;
public final static int ENGLISCH = 1;
// Klassenvariablen
private static java.lang.String monatsnamen [] [] =
{
{"deutsch", "Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"},
{"english", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"}
};
public static void ausgabeMonatsname (int monat) // Methode zur Textausgabe von Monatsnamen
{
java.lang.System.out.println ("Deutschsprachiger Monatsname = " + monatsnamen [DEUTSCH] [monat]);
java.lang.System.out.println ("Englischsprachiger Monatsname = " + monatsnamen [ENGLISCH] [monat]);
}
public static void main (java.lang.String [] argumente) // Hauptprogramm "main" zum Aufruf der Methode ausgabeMonatsname
{
ausgabeMonatsname (2);
}
}
</syntaxhighlight>
Mit dem Aufruf des Hauptprogramms ''main'' erfolgt die Ausgabe mit den beiden zweiten Monatsnamen:
<syntaxhighlight>
Deutschsprachiger Monatsname = Februar
Englischsprachiger Monatsname = February
</syntaxhighlight>
Bei anderen Programmiersprachen ist durch die obligatorische Verwendung von symbolischen Konstanten (im Beispiel unten "DEUTSCH" und "ENGLISCH") bei jeder erforderlichen, also auch bei allen initialen Zuweisungen zu Array-Elementen übersichtlich und klar erkennbar, welches Feld angesprochen wird:
<syntaxhighlight lang="oberon2">
(* Programmiersprache Component Pascal *)
MODULE Monatsnamen;
IMPORT Out; (* Import des Moduls "Out" für die Textausgabe *)
CONST
DEUTSCH = 0;
ENGLISCH = 1;
TYPE Monatsnamen = POINTER TO ARRAY OF ARRAY OF ARRAY OF CHAR;
VAR monatsnamen: Monatsnamen;
PROCEDURE InittialisiereMonatsnamen (); (* Prozedur zur Initialisierung von Monatsnamen *)
BEGIN
NEW (monatsnamen, 2, 13, 10); (* Reservierung von 2 mal 13 Zeichenketten mit je 10 Zeichen) *)
monatsnamen [DEUTSCH, 0] := "deutsch";
monatsnamen [DEUTSCH, 1] := "Januar";
monatsnamen [DEUTSCH, 2] := "Februar";
monatsnamen [DEUTSCH, 3] := "März";
monatsnamen [DEUTSCH, 4] := "April";
monatsnamen [DEUTSCH, 5] := "Mai";
monatsnamen [DEUTSCH, 6] := "Juni";
monatsnamen [DEUTSCH, 7] := "Juli";
monatsnamen [DEUTSCH, 8] := "August";
monatsnamen [DEUTSCH, 9] := "September";
monatsnamen [DEUTSCH, 10] := "Oktober";
monatsnamen [DEUTSCH, 11] := "November";
monatsnamen [DEUTSCH, 12] := "Dezember";
monatsnamen [ENGLISCH, 0] := "english";
monatsnamen [ENGLISCH, 1] := "January";
monatsnamen [ENGLISCH, 2] := "February";
monatsnamen [ENGLISCH, 3] := "March";
monatsnamen [ENGLISCH, 4] := "April";
monatsnamen [ENGLISCH, 5] := "May";
monatsnamen [ENGLISCH, 6] := "June";
monatsnamen [ENGLISCH, 7] := "July";
monatsnamen [ENGLISCH, 8] := "August";
monatsnamen [ENGLISCH, 9] := "September";
monatsnamen [ENGLISCH, 10] := "October";
monatsnamen [ENGLISCH, 11] := "November";
monatsnamen [ENGLISCH, 12] := "December";
END InittialisiereMonatsnamen;
PROCEDURE AusgabeMonatsname (monat: INTEGER); (* Prozedur zur Textausgabe von Monatsnamen *)
BEGIN
Out.String ("Sprache = " + monatsnamen [DEUTSCH, 0] + ": " + monatsnamen [DEUTSCH, monat]);
Out.Ln;
Out.String ("Sprache = " + monatsnamen [ENGLISCH, 0] + ": " + monatsnamen [ENGLISCH, monat]);
Out.Ln;
END AusgabeMonatsname;
PROCEDURE Hauptprogramm*;
BEGIN
InittialisiereMonatsnamen (); (* Initialisierung beim Laden des Moduls "Monatsnamen" *)
AusgabeMonatsname (2);
END Hauptprogramm;
END Monatsnamen.
</syntaxhighlight>
Durch den Aufruf von ''Monatsnamen.Hauptprogramm'' erfolgt die Ausgabe mit den beiden zweiten Monatsnamen:
<syntaxhighlight>
Sprache = deutsch: Februar
Sprache = english: February
</syntaxhighlight>
Die Verwendung von Indizes außerhalb der deklarierten oder angeforderten Array-Größen verursachen in streng strukturierten Programmiersprachen zur Laufzeit einen Programmabbruch. Bei sorgfältiger Programmierung ist deswegen darauf zu achten, dass nur gültige Indizes zur Anwendung kommen können. In schlecht strukturierten Programmiersprachen wie C oder C++ werden die Indizes von Arrays in der Regel nicht automatisch geprüft, so dass unbemerkt auf ungültige Speicheradressen zugegriffen werden kann und bei entsprechenden Angriffen Daten verfälscht und schadhafter Binärcode in die Programme eingeschleust sowie zur Ausführung gebracht werden kann.
==Kontrollstrukturen==
Kontrollstrukturen dienen dazu, den Programmablauf in wohlstrukturierter Weise im Sinne eines Algorithmus zu beeinflussen. Hierfür können '''Unterprogramme''' aufgerufen, '''Fallunterscheidungen''' vorgenommen oder Programmteile mehrfach durchlaufen werden ('''Schleifen''').
===Sprunganweisungen===
Sprünge an andere Programmstellen ergeben sich inhärent beim Aufruf von Unterprogrammen. Geschieht ein solcher Sprung durch eine explizite Sprunganweisung im Programmcode, wie zum Beispiel mit Goto-, Break- oder Continue-Anweisungen, ist dies unstrukturiert und im Übrigen auch völlig überflüssig, denn Programme mit Sprunganweisungen können immer und ohne großen Aufwand durch Kontrollstrukturen, also mit Hilfe von '''Unterprogrammen''', '''Schleifen''' oder '''Fallunterscheidungen''', gestaltet werden.
Explizite Sprunganweisungen stellen eine "Programmiertechnik mit dem Holzhammer" und wegen der daraus resultierenden verschlungenen Pfade während des Programmablaufs einen sogenannten '''Spaghetti-Code''' dar. Im Quellcode ist der Programmablauf nicht mehr ohne weiteres nachvollziehbar, beispielsweise bei der Untersuchung, von welchen Stellen des Programms an welche anderen Stellen gesprungen werden soll oder worden sein kann.
Im Falle der Switch-Case-Anweisung handelt es sich bei der in manchen Programmiersprachen verwendeten Break-Anweisung eigentlich nicht um eine Sprunganweisung, sondern um einen obligatorischen Begrenzer (englisch: ''delimiter''), der zur Herstellung der Programmstruktur erforderlich ist. In einigen Programmiersprachen darf dieser Begrenzer (''break'') jedoch weggelassen werden, um den Code in bestimmten aber vereinzelten Fällen etwas kürzer gestalten zu können, was aber gleichzeitig und unabdingbar zu unstrukturierter Programmierung führt, die Programmabläufe unübersichtlich macht und dazu führen kann, dass die Programme gegebenenfalls nur noch schwierig nachzuvollziehen und zu warten sind.
====Unterprogramme====
[[Datei:Unterprogrammaufruf.png|mini|rechts|hochkant=1|Von der Hauptroutine "Procedure main" eines gestarteten Programms wird nach Ausführung der Anweisungen "Instructions 1" ein Unterprogramm "Procedure sub" aufgerufen ("Call sub"), und der Programmablauf wird mit den dortigen Anweisungen "Instructions" fortgeführt. Wenn die letzte Anweisung "Return" des Unterprogramms erreicht worden ist, wird in das Hauptprogramm zurückgesprungen und der Programmablauf an der Stelle direkt hinter dem Aufruf des Unterprogramms mit den Anweisungen "Instructions 2" fortgesetzt.]]
Eine besonders häufig angewendete Programmiertechnik ist der Aufruf von Unterprogrammen. Unterprogramme stellen im Sinne des Quelltextes eines Programmes üblicherweise Prozeduren, Methoden oder Funktionen dar. Mit der Programmanweisung des Aufrufs kann der Programmablauf zum entsprechenden Unterprogramm verzweigt werden. Hierbei können in der Regel auch Parameter übergeben werden, um zwischen dem aufrufenden Programmteil und dem Unterprogramm Daten austauschen zu können. Ist das Unterprogramm vollständig abgearbeitet worden, wird der Programmablauf hinter der Stelle des Unterprogrammaufrufs fortgesetzt.
Unterprogramme können mehrfach und von allen Stellen des Programcodes aufgerufen werden, in dem das Unterprogramm sichtbar ist. Die Unterscheidung zwischen Prozeduren und Methoden ist nicht einheitlich. Etliche Programmiersprachen verwenden kategorisch nur einen der beiden Begriffe. Hierbei kann zwischen traditionellen (statischen) Prozeduren und objektorientierten (typengebunden oder dynamischen) Prozeduren unterschieden werden. Letztere werden als Methoden einer Klasse oder aber auch als typengebundene Prozeduren eines Programmoduls bezeichnet.
====Rücksprunganweisungen====
Nach Ablauf des Unterprogramms kann ein Rückgabewert an das aufrufende Programm zurückgegeben werden, der im aufrufenden Programmteil dann zur Verfügung steht und als Ausdruck zum Beispiel an eine Variable zugewiesen werden kann. In diesem Fall wird ein Unterprogramm auch '''Funktion''' genannt, da als Ergebnis des Unterprogrammaufrufs ein Funktionswert berechnet wurde und dann zurückgegeben wird.
Jedes Unterprogramm hat daher exakt eine Rücksprunganweisung (oft mit dem Schlüsselwort '''return''' gekennzeichnet), die logischerweise die letzte Anweisung sein muss, damit alle Anweisungen vorher durchgeführt werden können. Der Rücksprung erfolgt immer zur Stelle des Unterprogrammaufrufs, wo die Programmausführung anschließend fortgeführt wird.
Hat das Unterprogramm keinen Rückgabewert, der an den aufrufenden Programmteil zurückgegeben werden muss, wird in vielen Programmiersprachen auf eine explizite Rücksprunganweisung verzichtet; in diesem Fall wird sie also implizit ausgeführt. Ist das Hauptprogramm vollständig durchlaufen, wird das Programm nach dessen Rücksprunganweisung beendet, und die Kontrolle an das Laufzeitsystem oder das Betriebssystem zurückgegeben, von wo aus das Hauptprogramm aufgerufen worden war.
Mehrfache und insbesondere vorzeitige Rücksprunganweisungen in einem Unterprogramm sind unstrukturiert und daher zu unterlassen, auch wenn die Programmiersprache dies nicht zwingend fordert. Vorzeitige Unterprogrammabbrüche ('''Break'''-Anweisungen) verhindern, dass nachfolgende Programmsequenzen ausgeführt werden können, obwohl sie bei einer Ausführung das Ergebnis für den Rückgabewert beeinflussen würden. Dies kann zur Verwirrung führen, weil das Unterprogramm bei einer Überprüfung oder einer Analyse immer vollständig auf potentielle vorzeitige Unterprogrammabbrüche durchsucht werden muss.
Der folgende unstrukturierte Java-Code, der den in der Variablen '''ergebnis''' gespeicherten Wert vor dessen Rückgabe als Text ausgeben soll, verdeutlicht dies:
<syntaxhighlight lang="java">
private static double unterprogramm (double parameter)
{
double ergebnis = parameter;
boolean ganzzahlig = (parameter % 1 == 0);
if (ganzzahlig) return ergebnis;
ergebnis = ergebnis + 1;
java.lang.System.out.println ("Ergebnis = " + ergebnis);
return ergebnis;
}
</syntaxhighlight>
Die Erhöhung des Wertes der Variablen '''ergebnis''' sowie die Textausgabe mit dem Aufruf der Methode '''println''' unmittelbar vor der Rücksprunganweisung erfolgen wegen der beiden vorhandenen Rücksprunganweisungen nur, wenn der Wert des Parameters '''parameter''' nicht ganzzahlig ist. Demzufolge erzeugen die folgenden beiden Unterprogrammaufrufe
<syntaxhighlight lang="java">
unterprogramm (0);
unterprogramm (0.5);
</syntaxhighlight>
die Textausgabe:
<syntaxhighlight lang="text">
Ergebnis = 1.5
</syntaxhighlight>
Dieses formal korrekte, aber unerwünschte Verhalten wird nur nachvollziehbar, wenn der gesamte Code des Unterprogramms analysiert wird, was bei komplexeren Unterprogrammen und beim Vorhandensein mehrerer Rücksprunganweisungen sehr aufwendig werden kann..
Das folgende Unterprogramm implementiert den eigentlich gewünschten Algorithmus in strukturierter Form mit einer einzigen Rücksprunganweisung am Ende des Unterprogramms:
<syntaxhighlight lang="java">
private static double unterprogramm (double parameter)
{
double ergebnis = parameter;
boolean ganzzahlig = (parameter % 1 == 0);
if (! ganzzahlig)
{
ergebnis = ergebnis + 1;
}
java.lang.System.out.println ("Ergebnis = " + ergebnis);
return ergebnis;
}
</syntaxhighlight>
Die Textausgabe bei den oben angegebenen Aufrufen des Unterprogramms erfolgt nun wie gewünscht:
<syntaxhighlight lang="text">
Ergebnis = 0.0
Ergebnis = 1.5
</syntaxhighlight>
Es empfiehlt sich grundsätzlich ebenfalls immer, innerhalb von Rücksprunganweisungen keine komplexen Ausdrücke, Kontrollstrukturen oder Unterprogrammaufrufe zu verwenden, um einfache und eindeutige Rückgabewerte zu erhalten sowie diese gegebenenfalls mit einer Textausgabe oder einem Debugger kontrollieren zu können. Im Idealfall wird in der Rücksprunganweisung nur der Wert einer zuvor berechneten lokalen Variable mit einem sprechenden Bezeichner zurückgegeben:
<syntaxhighlight lang="text">
ergebnis ← f (a, b, c);
return ergebnis;
</syntaxhighlight>
In der Regel ergeben sich durch die zusätzliche explizite Zuweisung an die lokale Variable '''ergebnis''' keine Laufzeiteinbußen, da im übersetzten Maschinencode implizit für den Rückgabewert sowieso eine Zuweisung ausgeführt werden muss. Moderne Übersetzer berücksichtigen diesen Kontext automatisch, so dass in beiden Fällen derselbe Maschinencode erzeugt wird.
<div style="clear:both"></div>
===Fallunterscheidungen===
Die einfachste Fallunterscheidung ist die bedingte Anweisung. Verzweigungen enthalten mindestens zwei alternative Programmpfade.
====Bedingte Anweisung====
[[Datei:einfAusw.png|mini|rechts|hochkant=2|Struktogramm einer bedingten Anweisung.]]
Im folgenden Beispiel mit einer bedingten Anweisung (zum Beispiel if - then - end) wird die Dekrement-Anweisung a-- (der Wert der numerischen Variablen a soll um eins erniedrigt werden) nur dann ausgeführt, falls der boolesche Ausdruck a > b wahr ist, die entsprechende Bedingung also erfüllt ist:
falls a > b dann a-- ende
Hier wird der Wert der Variablen a also nur dann dekrementiert, wenn der Wert der Variablen a größer ist als der Wert der Variable b. Ansonsten wird der Programmablauf sofort hinter der ende-Marke fortgeführt.
====Einfache Verzweigung====
[[Datei:zweifAusw.png|mini|rechts|hochkant=2|Struktogramm einer einfachen Verzweigung.]]
Die einfachste Verzweigung (zum Beispiel if - then - else - end) enthält genau zwei alternative Pfade, von denen in Abhängigkeit eines booleschen Ausdrucks nur einer ausgeführt wird, wie in diesem Beispiel:
falls a > b dann a-- ansonsten b-- ende
Je nachdem die entsprechende Bedingung erfüllt ist oder nicht, wird die eine oder die andere Anweisung ausgeführt. Im obigen Beispiel wird der Wert der Variablen a nur dann dekrementiert, falls der Wert der Variablen a größer ist als der Wert der Variable b, ansonsten wird hier im Vergleich zur bedingten Anweisung allerdings der Wert der Variablen b um eins erniedrigt. In beiden Fällen wird das Programm anschließend hinter der ende-Marke fortgeführt.
====Mehrfache Verzweigung====
[[Datei:Mehrseitige Auswahl.png|mini|rechts|hochkant=2|Struktogramm einer mehrfachen Verzweigung.]]
Eine mehrfache Verzweigung (zum Beispiel switch - case - else - end) enthält mehr als zwei alternative Programmpfade, die meist, wie auch im folgenden Beispiel, von ganzzahligen Ausdrücken gesteuert werden:
verzweige mit dem Wert von a
falls 1 : unterprogramm_A ()
falls 2 : unterprogramm_B ()
falls 3 : unterprogramm_C ()
ansonsten unterprogramm_D ()
ende
In Abhängigkeit des in der ganzzahligen Variablen a gespeicherten Zahlenwertes wird genau eines der vier angegebenen Unterprogramme aufgerufen; beim Wert 1 unterprogramm_A, beim Wert 2 unterprogramm_B, beim Wert 3 unterprogramm_C und ansonsten unterprogramm_D. Danach wird der Programmablauf hinter den ende-Marke fortgeführt.
In manchen weniger stakt strukturierten Programmiersprachen wie C sind Vorsicht und Aufmerksamkeit geboten, weil beispielsweise dort die verschiedenen Fälle der entsprechenden switch-Anweisung nur optional mit einer break-Anweisung und nicht immer und obligatorisch abgeschlossen werden. Dies nutzen einige Programmierer, um in bestimmten Situationen mehrere Fälle hintereinander abarbeiten zu lassen. Dieses Vorgehen ist jedoch hochgradig unstrukturiert und führt sehr schnell und unübersichtlichem Programmcode und somit sehr leicht zu Programmierfehlern. Dies kann vermieden werden, wenn in diesen Programmiersprachen hinter jedem unterschiedenem Fall kategorisch die break-Anweisung implementiert wird, auch wenn die Programmiersprache oder der Übersetzer dies nicht fordern.
[[Datei:MehrfAusw.png|mini|rechts|hochkant=2|Struktogramm mit verschachtelten einfachen Verzweigungen, um eine mehrfache Verzweigung zu implementieren.]]
Mehrfache Verzweigungen mit aufeinanderfolgenden numerischen oder aufzählbaren Werten, wie im obigen Beispiel 1, 2 und 3, können rechnerintern unter Umständen effizient genutzt werden, weil die Sprungadressen arithmetisch berechnet werden können. Dies ist bei modernen Laufzeitsystemen in der Regel aber nicht mehr so relevant, und diese mehrfachen Verzweigungen können auch immer durch mehrfache Fallunterscheidungen programmiert werden. Durch eine eigene Anweisung für die mehrfache Verzweigung kann die Übersichtlichkeit des Quelltextes allerdings oft gesteigert werden. Auf der anderen Seite können die Übersichtlichkeit und die Nachvollziehbarkeit in der Regel auch hier mit entsprechenden Unterprogrammaufrufen gesteigert werden.
===Schleifen===
Bei Schleifen wird eine Anweisungsfolge nur dann ausgeführt, wenn die entsprechende boolesche, im Sinne der Schleife lokale Laufvariable den Wert "wahr" hat. Alle Schleifen können auf eine grundlegende Form zurückgeführt werden, bei der ein wesentliches Merkmal ist, ob die Laufvariable '''zu Beginn''' der Schleifenanweisungen den initialen Wert "wahr" erhält (fußgesteuert) oder in der Anfangsbedingung durch einen variablen booleschen Ausdruck bestimmt ist (kopfgesteuert). Es ist sinnvoll, dass diese Laufvariable nur zum Zwischenspeichern der Abbruchbedingung dient und ausschließlich im Zusammenhang mit der Schleife verwendet wird.
Bei wohlstrukturierter Programmierung mit zählenden Schleifen können numerische Laufvariablen verwendet werden, die innerhalb der Schleife vorzugsweise erst in der letzten Anweisung der Schleife aktualisiert werden, damit es innerhalb des Schleifendurchlaufs nicht zu Inkonsistenzen, Verwechslungen oder Mehrdeutigkeiten kommen kann.
Ferner gibt es in der strukturierten Programmierung keine expliziten Sprunganweisungen, die irgendwo innerhalb einer Schleife zum Beispiel mit dem Kommando '''continue''' den Rest der Schleife überspringen und sofort die nächstfolgende Abbruchbedingung der Schleife prüfen lassen. Innerhalb von Schleifen ist es ohne Weiteres möglich, alle Zwischenschritte mit Verzweigungen zu steuern beziehungsweise alle Zwischenergebnisse in lokalen Variablen zu speichern, ohne dass es in modernen Computersystemen zu längeren Ausführungszeiten kommt.
Im Folgenden soll dies mit der Programmiersprache Java an sehr einfachen Schleifen, die alle Zahlen außer der Fünf von Eins bis Zehn ausgeben sollen, erläutert werden.
Unstrukturiertes Beispiel:
<syntaxhighlight lang="Java">
long i = 1;
do
{
if (i == 5)
{
i++; // Die Schleifenendanweisung zum Hochzaehlen der Laufvariable muss hier dupliziert werden, damit es nicht zu einer Fehlfunktion kommt.
continue; // Die Schleife wird durch diese explizite Sprunganweisung unstrukturiert abgebrochen.
}
java.lang.System.out.println (i);
i++;
} while (i <= 10);
</syntaxhighlight>
Strukturiertes Beispiel:
<syntaxhighlight lang="Java">
long i = 1;
do
{
if (i != 5)
{
java.lang.System.out.println (i);
}
i++;
} while (i <= 10);
</syntaxhighlight>
====Kopfgesteuerte Schleifen====
[[Datei:KopfgesteuerteSchleife.png|mini|rechts|hochkant=2|Struktogramm einer kopfgesteuerten Schleife.]]
Kopfgesteuerte Schleifen werden auch als '''While'''-Anweisungen bezeichnet.
{| class="wikitable" style="text-align:center"
| rowspan="4" | Kopfgesteuerte Schleife
| colspan="2" | Setze Laufvariable auf boolesche Anfangsbedingung
|-
| rowspan="3" | Solange wie die Laufvariable den Wert "wahr" hat führe aus
|-
|Anweisungsfolge
|-
| Setze Laufvariable auf boolesche Endbedingung
|}
Wenn die boolesche Anfangsbedingung zu Beginn den Wert "falsch" hat, wird die Schleife '''nicht durchlaufen'''.
====Fußgesteuerte Schleifen====
[[Datei:FussgesteuerteSchleife.png|mini|rechts|hochkant=2|Struktogramm einer fußgesteuerten Schleife.]]
Die fußgesteuerte Schleife, die auch '''Repeat'''-Anweisung genannt wird, ist ein Sonderfall der kopfgesteuerten Schleife, bei der die boolesche Anfangsbedingung immer auf "wahr" gesetzt wird. Daher wird eine fußgesteuerte Schleife '''immer mindestens einmal durchlaufen'''.
{| class="wikitable" style="text-align:center"
| rowspan="4" | Fußgesteuerte Schleife
| colspan="2" | Setze Laufvariable auf "wahr"
|-
| rowspan="3" | Solange wie die Laufvariable den Wert "wahr" hat führe aus
|-
|Anweisungsfolge
|-
| Setze Laufvariable auf boolesche Endbedingung
|}
Da der Ausdruck der booleschen Anfangs- und Endbedingung oft identisch formuliert ist, bietet es sich an, dafür einen Funktionsaufruf zu verwenden, um eine Codewiederholung zu vermeiden.
Aus Gründen der Laufzeiteffizienz wird das Setzen der Laufvariablen zu Beginn und die erstmalige Überprüfung der Laufvariablen oft weggelassen, was für die allermeisten Anwendungen heute jedoch unwesentlich ist. Da die Laufvariable in diesem Fall zu Beginn jedoch nicht definiert werden muss und daher gegebenenfalls auch gar nicht definiert wird, birgt dieses Vorgehen die Gefahr in sich, dass die Laufvariable ihren undefinierten Zustand behält. Insbesondere tritt dies ein, wenn das Setzen der Laufvariable auf eine boolesche Endbedingung nicht erfolgt, weil dies in der verwendeten Programmiersprache nicht obligatorisch ist beziehungsweise vom Programmierer vergessen wurde, oder weil dies wegen eines zwangsläufig unstrukturierten Abbruchs innerhalb der Schleife (zum Beispiel mit einer Break-Anweisung) gar nicht erfolgen kann.
====Endlosschleifen====
'''Endlosschleifen''' sind unstrukturiert, da das Programm nicht regelgerecht beendet werden kann. Daher sind diese sogenannten Loop-Anweisungen, wie zum Beispiel
for (;;)
{
...
}
while (true)
{
...
}
repeat
{
...
}
until (false)
beziehungsweise
do
{
...
}
while (true)
oder
loop
{
...
}
zu unterlassen. Insbesondere das Verlassen von Endlosschleifen mit einer '''Sprunganweisung''' oder gar mehreren potentiellen Sprunganweisungen, wie zum Beispiel ''break'' oder ''exit'', ist hochgradig unstrukturierte Programmierung, da der Ausstiegszeitpunkt oder die Stelle des Ausstiegs aus der Schleife (wenn überhaupt) nur schwierig nachzuvollziehen oder zu bestimmen ist.
====For-Schleifen====
Die For-Schleifen-Anweisung
int i
for (i ← 0; i < max; i++)
{
...
}
ist identisch mit der kopfgesteuerten while-Anweisung:
int i
i ← 0
while (i < max)
{
...
i = i + 1
}
Es ist im Sinne eines einfachen Sprachumfangs und eines einheitlichen Sprachstils unter Umständen nützlich, für kopfgesteuerte Schleifen keine For-Schleifen, sondern ausschließlich While-Schleifen zu benutzen.
Wenn die Programmiersprache es erlaubt, Zählvariablen ausschließlich für eine Schleife zu definieren, dann hat dies den Vorteil, dass das Prinzip der Lokalität für diese Zählvariablen sehr gut erfüllt ist, da die Zählvariable dann außerhalb der Schleife nicht sichtbar ist und somit auch nicht verwendet werden kann:
for (int i ← 0; i < max; i++)
{
...
}
Die äquivalente Schreibweise mit einer while-Schleife sieht wie folgt aus, wobei die äußere Blockanweisung dafür sorgt, dass die Zählvariable "i" innerhalb der Blockanweisung deklariert ist und nur in Verbindung mit der Schleife sichtbar respektive verwendbar ist:
{
int i
i ← 0
while (i < max)
{
...
i++
}
}
Bei Algorithmen, die aus mehreren Kontrollstrukturen bestehen, ist es im Sinne der besseren Strukturierung vorzuziehen, alle Schleifen in eigene Methoden auszulagern, die aufgerufen werden und deren Schnittstellen über ihre Parameter eindeutig festgelegt sind. Hierbei können die Schleifen verschachtelt sein (innere und äußere Schleife) oder hintereinander ausgeführt werden. In jedem Fall sind alle Parameter und Variablen (also auch die jeweiligen Zählvariablen) innerhalb der entsprechenden Methoden lokal verfügbar.
==Codewiederholungen==
Codewiederholungen gehören insbesondere bei Anfängern sehr häufig zu den kapitalen Fehlern beim Softwareentwurf. Es ist nur scheinbar bequem, bereits vorhandenen Quelltext zu kopieren und für eine ähnliche Aufgabe geringfügig anzupassen. Es ist Größenordnungen besser, den bereits vorhandenen Quelltext so anzupassen, dass er für alle ähnlichen oder zumindest mehrere ähnliche Aufgabenstellungen eingesetzt werden kann. Erfahrene Programmierer wittern schon von Anfang an, dass eine bestimmte Methode auch in einem ähnlichen Kontext eingesetzt werden könnte und entwerfen den Code von vornherein so allgemein wie möglich.
===Symbolische Konstanten===
Konstante Ausdrücke werden in der Regel als '''symbolische Konstanten''' definiert, wie zum Beispiel mit der symbolischen Konstante "Pi" für die Kreiszahl oder die symbolische Konstante "Title" für den Text "Programmierung":
const double Pi ← 3.141592654
const String Title ← "Programmierung"
Statt konstante Ausdrücke zu wiederholen – und sei es nur eine ganze Zahl – ist es erheblich besser, stattdessen eine symbolische Konstante mit einem „sprechenden“ Bezeichner zu verwenden.
Also nicht mit der ganzen Zahl 3:
int inputNumber ← 3
...
if (inputNumber = 3) ...
Sondern besser mit der symbolischen Konstante "Exit" mit dem unveränderlichen, ganzzahligen Wert 3:
const int Exit ← 3
int inputNumber ← Exit
...
if (inputNumber = Exit) ...
Oder nicht zweimal mit derselben ganzen Zahl 3:
if (a > 3) and (b > 3) ...
Sondern besser mit zwei verschiedenen symbolischen Konstanten "Limit_a" und "Limit_b":
const int Limit_a ← 3
const int Limit_b ← 3
if (a > Limit_a) and (b > Limit_b) ...
Auf diese Weise kann auch leicht vermieden werden, dass gleichlautende Ausdrücke mit unterschiedlicher Bedeutung verwechselt werden können, insbesondere wenn sie später einmal geändert werden müssen:
if (numberOfConstellation > 12)
{
Ausgabe ("Diese Sternbildnummer ist ungültig.")
}
if (numberOfHalftones > 12)
{
Ausgabe ("Das Intervall ist größer als eine Oktave.")
}
Die beiden konstanten Zahlensymbole "12" haben nichts außer ihrem Zahlenwert gemeinsam, und daher ist der folgende Code erheblich besser nachvollziehbar:
const int Number_Of_Constellations ← 12
const int Number_Of_Halftones_Per_Octave ← 12
...
if (numberOfConstellation > Number_Of_Constellations)
{
Ausgabe ("Diese Sternbildnummer ist ungültig.")
}
if (numberOfHalftones > Number_Of_Halftones_Per_Octave)
{
Ausgabe ("Das Intervall ist größer als eine Oktave.")
}
===Aufruf von Unterprogrammen===
[[Datei:Aufruf.png|mini|rechts|hochkant=2|Struktogramm eines Unterprogrammaufrufs.]]
Unterprogramme, die in vielen Programmiersprachen auch Methoden, Prozeduren oder Funktionen genannt werden, beinhalten sequenzielle Rechenvorschriften (Algorithmen) zum Bearbeiten von Daten, die zu einer Einheit zusammengefasst sind.
So kann zum Beispiel die Rechenvorschrift für die Berechnung des Kreisumfangs aus dem Kreisradius als Folge von Programmanweisungen formuliert werden, aber auch in eine Methode ausgelagert werden. Dieses Unterprogramm kann dann irgendwo im Programmcode aufgerufen werden. Dies gewinnt besonders dann Bedeutung, wenn das Unterprogramm an verschiedenen Stellen aufgerufen werden soll, so dass dann diese Programmanweisungen nicht mehrfach programmiert oder kopiert werden müssen.
Insbesondere wenn die ursprünglichen, an mehreren Stellen auftauchenden Programmanweisungen einen Fehler enthalten, muss dieser nach dem Entdecken des Fehlers - also möglicherweise zu einem viel späteren Zeitpunkt - zur Fehlerbehebung zwangsweise an mehreren Stellen im Programmcode korrigiert werden. Das ist nicht nur mühsam, sondern einzelne relevante Stellen können leicht übersehen werden, so dass der entdeckte Fehler gar nicht vollständig ausgemerzt wird.
Die mehrfach eingegebenen Programmanweisungen zur Berechnung des Kreisumfangs werden beim Auftreten von '''Codewiederholung''' an drei Stellen des Quelltextes programmiert:
const double Pi ← 3.141592654
double perimeter1 ← radius1 * 2 * Pi
double perimeter2 ← radius2 * 2 * Pi
double perimeter3 ← radius3 * 2 * Pi
Mithilfe des im Unterprogramm "perimeter" nur einmal implementierten Algorithmus' zur Ermittlung des Kreisumfangs und dessen dreimaligem Aufruf kann die Wiederholung der Implementierung der Rechenvorschrift leicht vermieden werden:
/* "perimeter" computes and returns the perimeter of a circle with radius "radius" */
double perimeter (radius)
{
const double Pi ← 3.141592654
double perimeter ← radius * 2 * Pi
return perimeter
}
double perimeter1 ← perimeter (radius1)
double perimeter2 ← perimeter (radius2)
double perimeter3 ← perimeter (radius3)
==Zuweisungskompatibilität==
'''Zuweisungskompatibilität''' liegt vor, wenn Ausdrücke und Variablen aufgrund hinreichend kompatibler Datentypen einander zugewiesen, miteinander verglichen oder eindeutig miteinander verknüpft werden können.
Es kann bereits im Quelltext überprüft werden, ob eine hinreichende Zuweisungskompatibilität vorliegt. Liegt diese nicht vor, handelt es sich um eine Typverletzung, und es muss eine explizite Typumwandlung programmiert werden. In diesem Fall kann es sehr leicht zu Programmfehlern kommen.
Programmiersprachen, die für die maschinennahe Programmierung konzipiert wurden, wie zum Beispiel Assemblersprachen oder die Programmiersprache C, haben oft gar keine oder nur eine sehr schwache Typprüfung, was sehr leicht zu Programmfehlern führen kann.
In manchen Programmiersprachen, wie zum Beispiel C, ist es sogar erlaubt, beliebige Zeiger einer Zeigervariablen zuzuweisen, ohne dass geprüft wird oder überhaupt geprüft werden kann, ob die Datentypen der referenzierten Daten kompatibel sind.
===Zeichenketten===
Ein weiteres schwerwiegendes Problem kann sich bei der Verwendung von Zeichenketten (englisch: string) ergeben, die in der Regel zum Speichern von Texten Verwendung finden und die aus einer Sequenz von einzelnen Zeichen respektive Buchstaben (englisch: character) bestehen.
Eine strukturierte Programmiersprache, die Zeichenkettenverarbeitung und einen entsprechenden Datentyp zur Verfügung stellt, sollte fordern, dass jede Zeichenkette mit einem Zeichen abgeschlossen wird, das das Ende der Zeichenkette markiert (englisch: string terminator). Hierfür wird allgemein das Zeichen mit dem numerischen Wert null verwendet, das keinen Buchstaben repräsentiert und in Quelltexten häufig mit den Symbolen NUL, 0X oder \0 kodiert wird.
Manche unstrukturierte Programmiersprachen fordern nicht, dass eine solche Kennzeichnung des Endes der Zeichenkette verwendet werden muss. Bei der Implementation von Zeichenkettenfunktionen in Programmbibliotheken, insbesondere wenn die dazugehörige Programmiersprache gar keinen Datentyp für Zeichenketten zur Verfügung stellt, ist auch bei strukturierten Programmiersprachen nicht unbedingt gewährleistet, dass eine entsprechende Kennzeichnung des Zeichenkettenendes obligatorisch ist. Bei der Implementierung von Vergleichsfunktionen oder Zeichenkettenmanipulationen in unstrukturierten Programmiersprachen oder Programmbibliotheken muss die Tatsache, ob das Nullzeichen vorhanden ist oder nicht, regelmäßig untersucht und berücksichtigt werden. Einfacher und sicherer ist es, mit einer strukturierten Programmiersprache oder einer entsprechenden Programmbibliothek zu arbeiten, bei der immer gewährleistet ist und vorausgesetzt werden kann, dass alle Zeichenketten mit einem Endezeichen abgeschlossen sind.
===Strenge Zuweisungskompatibilität===
Zuweisungen sind uneingeschränkt zulässig, wenn eine strenge Zuweisungskompatibilität gegeben ist. Dazu müssen die Datentypen eines zuzuweisenden Ausdrucks und einer Variable exakt übereinstimmen, wie in folgendem Beispiel mit dem Datentyp "Mann" und den beiden Instanzen "otto" und "emil":
TYPE Mann = Verbund von alter und groesse
VARIABLE otto, emil: Mann
otto.alter ← 50
otto.groesse ← 1.80
emil ← otto
Alle Attribute von „otto“, nämlich „alter“ und „groesse“, können „emil“ eindeutig zugewiesen werden.
Zwei Instanzen sind streng zuweisungskompatibel, wenn sie derselben Klasse angehören, wie in diesem Beispiel die beiden Objekte "fenster1" und "fenster2" aus der Klasse "Rechteck":
TYPE Rechteck = Klasse mit breite, hoehe und mit Methode flaechenberechnung ()
VARIABLE fenster1, fenster2: Rechteck
fenster1.breite ← 200
fenster1.hoehe ← 100
fenster1.flaechenberechnung () (Flächenberechnung für „fenster1“ ausführen)
fenster2 ← fenster1
fenster2.flaechenberechnung () (Flächenberechnung für „fenster2“ ausführen)
Die Zuweisung in der vorletzten Programmzeile ist möglich, da beide Instanzvariablen "fenster1" und "fenster2" derselben Klasse "Rechteck" angehören, und daher liefert auch der Methodenaufruf in der letzten Programmzeile ein korrektes Ergebnis.
====Logische Kompatibilität====
Zwei übereinstimmende Definitionen von zwei Datentypen sind nicht zuweisungskompatibel. Die Daten können zwar eindeutig überführt werden (technische Kompatibilität), es liegen zwei formal zwar identische, aber dennoch verschiedene Definitionen vor, so dass diese keine logische Kompatibilität aufweisen. Folgendes Beispiel wäre demzufolge formal korrekt, aber nicht logisch:
TYPE Mann = Verbund von alter und groesse
TYPE Frau = Verbund von alter und groesse
VARIABLE otto: Mann
VARIABLE anna: Frau
otto.alter ← 50
otto.groesse ← 1.80
anna ← otto
Die Zuweisung in der letzten Programmzeile ist technisch zwar ohne Probleme möglich, aber logisch nicht korrekt, und sie birgt daher die Gefahr der Entstehung von Programmierfehlern. Um solche Fehler zu vermeiden, sind Zuweisungen mit impliziter Typumwandlung in einigen Programmiersprachen mit starker Typisierung nicht zulässig, und der Compiler verweigert die Übersetzung dieser Zuweisung.
In der objektorientierten Programmierung kann durch die Vererbung der gemeinsamen Eigenschaften von Datentypen leicht eine logische Kompatibilität hergestellt werden:
TYPE Mensch = Verbund von alter und groesse
TYPE Mann = Mensch
TYPE Frau = Mensch
VARIABLE otto: Mann
VARIABLE anna: Frau
otto.alter ← 50
otto.groesse ← 1.80
anna ← otto
Die Objekteigenschaften "alter" und "groesse" sind hierbei Eigenschaften von Objekten des Datentyps "Mensch" und daher sowohl zuweisungskompatibel, als auch logisch korrekt; bei der Zuweisung können und werden nur die Attribute "alter" und "groesse" der gemeinsamen Basisklasse "Mensch" übertragen.
====Wahrheitswerte====
In einigen älteren Programmiersprachen, wie zum Beispiel C, gibt es keinen eigenen Datentyp für zweiwertige boolesche Variablen. Zur Behandlung und Verarbeitung entsprechender Information wird dann häufig der ganzzahlige Datentyp mit dem kleinsten Speicherbedarf verwendet, wobei der Zahlenwert null für den Wahrheitswert „Falsch“ und alle anderen Zahlenwerte für den Wahrheitswert „Wahr“ Verwendung finden. Auch hier ergeben sich logische Inkompatibilitäten und somit ein gefährliches Potential für Komplikationen, da mit binären Werten keine Arithmetik und mit Zahlen keine logischen Verknüpfungen oder logischen Operationen durchgeführt werden können. Im folgenden Beispiel wird dieser Missbrauch verdeutlicht:
VARIABLE schlechteWahrheit1, schlechteWahrheit2, ergebnisWahrheit: INTEGER
schlechteWahrheit1 ← 0
schlechteWahrheit2 ← 1
ergebnisWahrheit ← (schlechteWahrheit1 + schlechteWahrheit2)
ergebnisWahrheit ← (schlechteWahrheit2 + schlechteWahrheit2)
Das Ergebnis der ersten arithmetischen Addition ist 1, was fälschlich als der Wahrheitswert „Wahr“ missinterpretiert werden könnte, der nicht dem Ergebnis der logischen Und-Verknüpfung entspricht. Noch offensichtlicher ist das Problem in der zweiten arithmetischen Addition, wo das Ergebnis 2 erzielt wird. Somit existieren ohne Not mehr als zwei Zustände für die binären (also zweiwertigen) Variablen, was schnell zu Missverständnissen und Programmierfehlern führen kann.
Eine eindeutige und korrekte Implementierung wird erreicht, wenn die Programmiersprache oder eine dazugehörige Programmbibliothek einen zweiwertigen Datentyp, wie zum Beispiel „BOOLEAN“ oder „bool“, zwei entsprechende Ausprägungen, wie zum Beispiel "false" und "true", und die dazugehörigen eindeutigen booleschen Operatoren und Funktionen (beispielsweise "and", "or" oder "not") anbietet.
VARIABLE richtigeWahrheit1, richtigeWahrheit2, ergebnisWahrheit: BOOLEAN
richtigeWahrheit1 ← falsch
richtigeWahrheit2 ← wahr
ergebnisWahrheit ← (richtigeWahrheit1 und richtigeWahrheit2)
ergebnisWahrheit ← (richtigeWahrheit2 und richtigeWahrheit2)
Sinngemäß gilt das Gleiche für die Verknüpfungen von Mengen. Wenn hier bei den Datentypen und zulässigen Operatoren nicht zwischen Bitmengen (englisch: (bit) sets) und Zahlen unterschieden wird, kommt es wie zum Beispiel bei der Bestimmung von Vereinigungs- oder Differenzmengen zu Interpretationsproblemen. Eine eindeutige und korrekte Implementierung verwendet Datentypen, die für Mengen und Mengenoperationen definiert sind. In einigen Programmiersprachen werden solche Datentypen im Sprachumfang implizit angeboten, in anderen gibt es dafür standardisierte Programmbibliotheken, auf die über Unterprogrammaufrufe zugegriffen werden kann.
===Zuweisungskompatibilität ohne Informationsverlust===
In einigen Fällen kann die Information, die mit einem Datentyp dargestellt werden kann, eindeutig und ohne Informationsverlust in einen anderen Datentyp überführt werden. Typische Beispiele sind ganze Zahlen mit unterschiedlicher Speichergröße. So kann ein Integer mit 16 Bit Speichergröße eindeutig in einer vorzeichenbehafteten Integer-Variablen mit 32 Bit Speichergröße abgelegt werden, ohne dass die ursprünglich nur mit 16 Bit gespeicherte Zahl verändert wird. Umgekehrt ist dies jedoch nicht allgemein möglich, insbesondere unter der Beachtung von Vorzeichen und großen Zahlen. Der folgende Programmierabschnitt zeigt ein Beispiel ohne Zuweisungskompatibilität, da der Datentyp „BYTE“ nur 8 Bit Speichertiefe hat und nur Werte zwischen -128 bis +127 und somit nicht die Zahl 555 repräsentieren kann, wohingegen der Datentyp „SHORTINT“ eine Speichertiefe von 16 Bit hat und ganze Zahlen von -32768 bis +32767 repräsentieren kann:
zahl1: BYTE
zahl2: SHORTINT
zahl2 ← 555
zahl1 ← zahl2
Die letzte Programmzeile stellt einen ungültigen Versuch der Zuweisung der ganzen Zahl 555 aus der Variablen „zahl2“ an die Variable „zahl1“ dar.
Bei einer solchen Programmanweisung kann bei typsicheren Programmiersprachen bereits der Compiler verhindern, dass ausführbarer Maschinencode erzeugt wird. Bei fehlender Überprüfung durch den Compiler kann unbemerkt Information verloren gehen, so dass bei nachfolgenden Berechnungen unter Umständen grobe Berechnungsfehler auftreten, die relativ schwierig zu analysieren sind.
===Zuweisungskompatibilität mit geringem Informationsverlust===
Ein Sonderfall ist die Zuweisung von ganzen Zahlen an Variablen, die Gleitkommazahlen repräsentieren. In der Regel kann ohne die Gefahr von Programmfehlern toleriert werden, große ganze Zahlen implizit in Gleitkommazahlen umzuwandeln, da der Rechenfehler (wenn überhaupt vorhanden) hierbei sehr klein ist. Auch dies kann an einem Beispiel verdeutlicht werden: ein „LONGINT“ mit 64 Bit Speichergröße kann die Zahl 9223372036854775807 mit 19 Dezimalstellen speichern. Der folgende Programmierabschnitt zeigt ein Beispiel mit Zuweisungskompatibilität mit einem in der Regel zu vernachlässigenden Informationsverlust, da der Datentyp „REAL“ nach IEEE 754 mit 64 Bit nur Zahlen mit einer Mantisse mit maximal 14 Nachkommastellen speichern kann:
zahl1: LONGINT
zahl2: REAL
zahl1 ← 9223372036854775807
zahl2 ← zahl1
Die letzte Anweisung stellt in fast allen Programmiersprachen einen gültigen Versuch der Zuweisung der ganzen Zahl <math>{2}^{63} - 1</math> aus der Variablen „zahl1“ an die Variable „zahl2“ dar, da diese gerundeten Zahlenwert <math>9{,}22337203685478 \cdot {10}^{18}</math> enthält, und der Fehler durch das Abschneiden der letzten Nachkommastellen hier nur in einer Größenordnung von <math>{10}^{-14}</math> liegt und daher für praktisch alle Anwendungen vernachlässigt werden kann.
Bei einer erneuten Datentypkonvertierung zurück zu einem geeigneten ganzzahligen Datentyp kommt es dann aber zu einer Abweichung zu der ursprünglichen ganzen Zahl. In solchen Fällen ist es daher besser, vorsichtshalber und mit Inkaufnahme etwas längerer Programmlaufzeiten ausschließlich mit Gleitkommazahlen zu operieren.
===Zuweisungskompatibilität mit definiertem Informationsverlust===
Zwei Instanzen sind mit definiertem Informationsverlust zuweisungskompatibel, wenn die zuzuweisende Klasse einer Klasse angehört, die von der zugewiesenen Klasse abgeleitet wurde. Alle Daten die in der zugewiesenen Klasse deklariert und somit erforderlich sind, können dann zugewiesen werden, jedoch werden die in der zuzuweisenden abgeleiteten Klasse möglicherweise hinzugefügten Attribute ignoriert, wie das folgende Beispiel verdeutlichen soll, in welchem der Datentyp „Mensch“ alle Eigenschaften vom Datentyp „Lebewesen“ erbt und zusätzlich das Attribut „intelligenzquotient“ bekommt:
TYPE Lebewesen = Verbund von alter und gewicht
TYPE Mensch = Lebewesen mit intelligenzquotient
VARIABLE otto: Mensch
VARIABLE eukaryot: Lebewesen
otto.alter ← 50
otto.gewicht ← 75
otto.intelligenzquotient ← 100
eukaryot ← otto
Die Zuweisung in der letzten Zeile ist korrekt, das Attribut „intelligenzquotient“ der Variable „otto“ vom Datentyp „Mensch“ wird jedoch nicht an die Variable „eukaryot“ zugewiesen, da es beim Datentyp „Lebewesen“ der Basisklasse nicht deklariert ist.
==Komplexe Ausdrücke==
Zusammengesetzte Ausdrücke mit verschiedenartigen Operatoren können sehr unübersichtlich und somit fehleranfällig sein. Manche Programmiersprachen haben sehr viele Hierarchieebenen für Operatoren, die auch durch erfahrene Programmierer kaum durchschaut werden können, oder sogar dafür sorgen, dass bestimmte Teile des Quellcodes zur Laufzeit gar nicht erreicht werden können. Daher ist es dringend empfehlenswert, Anweisungen in kleine, überschaubare Einheiten zu untergliedern. In einigen Programmiersprachen ist es sogar möglich, die Zuweisung in andere Anweisungen zu integrieren, da sie selber als ein Ergebniswert interpretiert werden darf. Ferner ist nicht immer offensichtlich welchen Datentyp ein Ergebnis hat, was insbesondere in Ermangelung eines zweiwertigen Datentyps ''Boolean'' zu Missverständnissen führen kann.
Also zum Beispiel nicht:
if (a ← b – c = 0) ...
In dieser bedingten Anweisung (if) ist nicht klar, in welcher Reihenfolge der Zuweisungsoperator (←), der Differenzoperator (-) und der Vergleichsoperator (=) ausgeführt werden (sollen).
Es ist erheblich besser, die Anweisungen klar zu trennen:
a ← (b – c)
if (a = 0) ...
Die folgenden beiden Beispiele mit dem Zuweisungsoperator "=" und dem Vergleichsoperator "==" zeigen Programmsequenzen in der Programmiersprache C, die zu sehr leicht zu übersehenden Programmierfehlern führen können:
<syntaxhighlight lang="C">
/* Programmiersprache C */
int i = 0;
if (i = 1)
{
/*
Dieser Block wird immer ausgeführt,
weil die Zuweisung i = 1 immer das numerische Ergebnis 1 hat,
was als der boolesche Wert "wahr" interpretiert wird.
*/
}
int i = 0;
if (i == 1)
{
/*
Dieser Block wird nie ausgeführt,
weil die Vergleichsoperation i == 1 immer das numerische Ergebnis 0 hat,
was als der boolesche Wert "falsch" interpretiert wird.
*/
}
</syntaxhighlight>
Die folgende Rückgabe-Anweisung ("return") in der Programmiersprache Java ist nicht nur verwirrend, sondern sinnfrei:
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
long x = 2;
long y = 1;
return y + x--;
</syntaxhighlight>
Der Dekrement-Operator "- -" wird in vielen Programmiersprachen gar nicht ausgeführt, weil er hierarchisch erst nach einer Zuweisung ausgeführt wird oder nach einer die Code-Sequenz beendende Return-Anweisung noch ausgeführt werden müsste, aber de facto gar nicht mehr ausgeführt wird. Deswegen ist die folgende Anweisungsfolge nicht nur weniger komplex, gut strukturiert und korrekt, sondern auch sinnvoll und leicht sowie eindeutig nachvollziehbar:
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
long x = 2;
long y = 1;
x--;
long summe = y + x;
return summe;
</syntaxhighlight>
Beeindruckend sinnlos, verwirrend und komplex sind Monster-Ausdrücke (nach Niklaus Wirth: ''notational monsters''), die in einigen Programmiersprachen wie zum Beispiel C erlaubt sind, wie zum Beispiel bei der Kombination einer Rücksprunganweisung ("return") mit einer Zuweisung ("="), zwei verschiedenen Inkrement-Operatoren ("++") und einem Additionsoperator ("+"). Es ist sehr schwierig durchschaubar, in welcher Reihenfolge diese fünf Anweisungen ausgeführt werden und ob diese überhaupt ausgeführt werden. Selbst wenn die Zuweisung oder die nachrangige Inkrementierung ausgeführt würden, wären sie völlig sinnlos, da auf die lokale Variable i nach der Return-Anweisung gar nicht mehr zugegriffen werden kann:
<syntaxhighlight lang="C">
/* Programmiersprache C */
int i = 0;
return i = ++i+i++;
</syntaxhighlight>
Auch im folgenden Java-Beispiel ist die Sachlage nicht wesentlich besser. Das Ergebnis dieser Anweisungsfolge für die Variable y ergibt den Wert 2 + 2 = 4 , weil der letzte Inkrementoperator die Variable x vor der Ausführung aller anderen Operatoren auf den Wert 2 erhöht, und der erste Inkrementoperator die Variable x erst nach der Addition und der Zuweisung auf den Wert 3 erhöht:
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
long x = 1;
long y = x++ + ++x;
</syntaxhighlight>
Es ist ebenfalls nicht leicht zu durchschauen, dass das Ergebnis dieser Anweisungsfolge in Java für die Variable y den Wert 2 + 3 = 5 ergibt, weil die Variable x vor der Auswertung des arithmetischen Summe zweimal inkrementiert wird:
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
long x = 1;
long y = ++x + ++x;
</syntaxhighlight>
Ferner ist das Ergebnis der nächsten Anweisungsfolge in Java für die Variable y der Wert 2 + 2 = 4, weil die Variable x vor der Auswertung der arithmetischen Summe nur beim ersten Inkrementoperator für die Summenbildung wirksam verändert wird:
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
long x = 1;
long y = ++x + x++;
</syntaxhighlight>
Auf der anderen Seite ist das Ergebnis der nächsten Anweisungsfolge in Java für die Variable y der Wert 1 + 2 = 3, weil die Variable x während der Auswertung des arithmetischen Ausdrucks nur beim ersten Inkrementoperator für die Summenbildung wirksam verändert wird:
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
long x = 1;
long y = x++ + x++;
</syntaxhighlight>
Noch gefährlicher wird es, wenn die Reihenfolge der Auswertung von arithmetischen Ausdrücken mit gleichwertigen Operanden für den Compiler oder Interpreter nicht definiert ist:
<syntaxhighlight lang="C">
/* Programmiersprache C */
int x = 1;
long y = ++x * --x;
</syntaxhighlight>
Wird die Multiplikation von links nach rechts ausgewertet, ergibt sich für die Variable y der Wert 2, wird die Multiplikation von rechts nach links ausgewertet, ergibt sich für die Variable y der Wert 0. Derselbe Quelltext kann auf zwei verschiedenen Systemen also völlig andere Rechenergebnisse hervorrufen.
In anderen Programmiersprachen werden die Inkremente und Dekremente von ganzzahligen Variablen daher mit Prozeduraufrufen bewerkstelligt (beispielsweise INC() und DEC()), die fester Bestandteil der Programmiersprache sind, wie zum Beispiel in Pascal, wo der Zuweisungsoperator aus zwei verschiedenen Zeichen besteht (":="), damit es keine Verwechslungen mit einem Identitätsoperator oder Vergleichsoperator geben kann:
<syntaxhighlight lang="pascal">
(* Programmiersprache Pascal *)
VAR
x, y, produkt: integer;
BEGIN
x := 1;
INC (x);
y := x;
DEC (x);
produkt := y * x;
END;
</syntaxhighlight>
Die Aufrufe der Inkrement- beziehungsweise Dekrementprozeduren dürfen und können – genauso wie Zuweisungen – in der Programmiersprache Pascal also gar nicht Bestandteil eines arithmetischen Ausdrucks sein, so dass der Zeitpunkt der Ausführung immer eindeutig aus der Reihenfolge der Anweisungen hervorgeht.
===Ternäre Operatoren===
Ein '''ternärer Operator''' hat als Ergebnis einen beliebigen Wert und verknüpft hierzu drei Ausdrücke:
* Der erste Ausdruck ein '''binärer Ausdruck''', der wahr oder falsch ist.
* Der zweite Ausdruck beschreibt den Ergebniswert, wenn der erste Ausdruck '''wahr''' ist.
* Der dritte Ausdruck beschreibt den Ergebniswert, wenn der erste Ausdruck '''falsch''' ist.
In vielen Programmiersprachen werden die drei Ausdrücke mit den Begrenzungszeichen ? und : voneinander getrennt, und der binäre Ausdruck wird eingebettet in runde Klammern vorangestellt:
(binärer Ausdruck) ? zweiter Ausdruck : dritter Ausdruck
Jeder dieser drei Ausdrücke kann sich wiederum aus mehreren anderen Ausdrücken zusammensetzen, so dass der Überblick schnell verloren gehen kann.
Die Ergebniswerte von Ausdrücken mit ternären Operatoren sollten besser nicht in andere Ausdrücke eingesetzt werden, sondern in einer lokalen Variable zwischengespeichert und erst danach weiterverwendet werden:
variable ergebnis;
ergebnis ← (binärer Ausdruck) ? zweiter Ausdruck : dritter Ausdruck
Grundsätzlich ist es wegen der größeren Übersichtlichkeit, Transparenz und einfacheren Modifikation vorzuziehen, für das Ergebnis gar '''keine ternären Operatoren''' zu verwenden, sondern eine '''bedingte Anweisung mit Blockanweisungen''' zu verwenden:
variable ergebnis;
falls (binärer Ausdruck)
dann
Block für ergebnis ← zweiter Ausdruck
ansonsten
Block für ergebnis ← dritter Ausdruck
ende
===Blockanweisungen===
'''Blockanweisungen''' sind ein elegantes Mittel, um Programmcode zu strukturieren sowie die Sichtbarkeit von lokalen Variablen zu begrenzen. In vielen Programmiersprachen werden eindeutige Symbole für die Kennzeichnung von Programmblöcken verwendet, wie zum Beispiel geschweifte Klammern:
{
...
}
Die drei Punkte stehen hierbei für beliebige Anweisungsfolgen.
In anderen Programmiersprachen werden Schlüsselwörter für die Begrenzung von Blockanweisungen verwendet, wie zum Beispiel "BEGIN" und "END":
BEGIN
...
END
Der Blockinhalt mit Anweisungen - in beiden obenstehenden Beispielen durch die drei aufeinanderfolgenden Punkte symbolisiert -, wird in der Regel eingerückt, um die Lesbarkeit des Quelltextes für die Programmierer zu erleichtern.
Blockanweisungen können geschachtelt, dürfen - sofern in der Syntax einer Programmiersprache überhaupt möglich - jedoch nicht verschränkt werden. Dies bedeutet, dass bei geschachtelten Blöcken ein begonnener Block immer erst vollständig abgearbeitet werden muss, bevor der nächstäußere weitergeführt und abgeschlossen werden kann:
{
... /* Äußerer Block */
{
... /* Mittlerer Block */
{
... /* Innerer Block */
}
... /* Mittlerer Block */
}
... /* Äußerer Block */
}
Verschränkte Blockanweisungen sind unsinnig, unstrukturiert sowie überflüssig und daher in den meisten Programmiersprachen nicht zulässig:
BEGIN1
...
BEGIN2
...
...
END1
... ...
END2
Die Implementationen von allen Modulen, Klassen und Unterprogrammen sowie auch von allen Kontrollstrukturen (also Fallunterscheidungen und Schleifen) sollten '''kategorisch mit Blockanweisungen''' strukturiert werden.
=== Blockanweisungen bei Kontrollstrukturen ===
[[Datei:lineareAnw.png|mini|rechts|hochkant=2|Struktogramm einer Anweisungsfolge.]]
Auch wenn die Programmiersprache die Verwendung von Blockanweisungen für Anweisungsfolgen in einer Kontrollstruktur nicht vorschreibt, ist es sehr ratsam, die Blockanweisung kategorisch einzusetzen, um Programmierfehler zu vermeiden. Wenn zum Beispiel eine if-Anweisung so wie in den Programmiersprachen C und Java so strukturiert ist, dass genau eine Folgeanweisung ausgeführt wird, wenn die Bedingung wahr ist, kann es ohne Blockanweisungen bei der Programmentwicklung oder -wartung leicht zu übersehenden Programmierfehlern kommen. Im folgenden korrekt formulierten Java-Programmbeispiel wird die Variable v1 auf den Wert null zurückgesetzt, falls sie den gleichen Zahlenwert wie max hat:
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
if (v1 == max)
v1 = 0;
</syntaxhighlight>
Soll zudem auch noch eine Textausgabe erfolgen, kann diese zusätzlich programmiert werden:
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
if (v1 == max)
v1 = 0;
java.lang.System.out.println ("Der Maximalwert wurde erreicht.");
</syntaxhighlight>
Die unterste Programmierzeile ist zwar eingerückt, was suggeriert, dass sie nur ausgeführt wird, wenn die darüberstehende Bedingung erfüllt ist. Ein Java-Interpreter führt jedoch nur eine einzige unmittelbar nach der Bedingung aufgeführte Anweisung aus, wenn die Bedingung wahr ist. Mit anderen Worten: die Textausgabe erfolgt im obigen Programmbeispiel immer, also insbesondere auch wenn die Variablen v1 und max nicht den gleichen Zahlenwert haben. Im Quelltext sollte das daher besser folgendermaßen formuliert werden:
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
if (v1 == max)
v1 = 0;
java.lang.System.out.println ("Der Maximalwert wurde erreicht.");
</syntaxhighlight>
Ähnlich tückisch ist die Tatsache, dass in manchen weniger streng strukturierten Programmiersprachen, auf die Bedingung der if-Anweisung eine beliebige Anweisung folgen darf, die nicht notwendigerweise eine Blockanweisung sein muss, sondern auch eine einzelne Anweisung sein darf, die zum Beispiel mit einem Semikolon abgeschlossen wird und auch eine '''leere Anweisung''' sein kann. Dies führt zu leicht zu übersehenden Programmierfehlern, wie im folgenden Beispiel:
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
if (v1 == max);
{
v1 = 0;
java.lang.System.out.println ("Der Maximalwert wurde erreicht.");
}
</syntaxhighlight>
Die Blockanweisung wird immer ausgeführt, obwohl ihre Darstellung mit korrekter Einrückung suggeriert, dass sie nur dann ausgeführt wird, wenn die boolesche Bedingung (v1 == max) erfüllt ist. Dies ist allerdings nicht der Fall, da direkt hinter den runden Klammern der if-Anweisung ein Semikolon steht, welches eine '''leere Anweisung''' implementiert, die bei der Erfüllung der Bedingung ausgeführt wird.
All diese Missverständnisse können leicht vermieden werden, indem bei der Programmierung von Kontrollstrukturen '''kategorisch Blockanweisungen''' verwendet werden, selbst wenn die Programmiersprache dies nicht fordert:
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
if (v1 == max)
{
v1 = 0;
}
</syntaxhighlight>
Beziehungsweise:
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
if (v1 == max)
{
v1 = 0;
java.lang.System.out.println ("Der Maximalwert wurde erreicht.");
}
else
{
java.lang.System.out.println ("Der Maximalwert wurde nicht erreicht.");
}
</syntaxhighlight>
==== Verschachtelung ====
In noch stärkerem Maße leidet die Verständlichkeit von Quellcode, wenn mehrere Kontrollstrukturen ohne die Verwendung von Blockstrukturen verschachtelt werden:
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
long v1, v2, v3;
v1 = 3;
v2 = 3;
v3 = 7;
if ((v1 > 0) && (v2 > 0))
if (v1 > v2)
v3 = v1 - v2;
else
v3 = v2 - v1;
java.lang.System.out.println ("v3 = " + v3);
</syntaxhighlight>
Beim Lesen des Quellcodes mit einer solchen "baumelnden" ''else''-Anweisung (englisch: ''dangling else'') kann schnell der Eindruck entstehen, dass sie zur ersten ''if''-Anweisung gehört und das Ergebnis für die Variable ''v3'' 7 bleibt, da ''v1'' und ''v2'' positive Zahlen sind. Tatsächlich wird der Quellcode jedoch so ausgeführt, so dass die Variable ''v3'' den Wert 0 erhält.
Um solche Missverständnisse zu vermeiden, ist es - wie oben bereits erwähnt - dringend geboten, Blockanweisungen kategorisch einzusetzen, auch wenn sie durch die Definition der Programmiersprache nicht sowieso vorgeschrieben sind:
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
long v1, v2, v3;
v1 = 3;
v2 = 3;
v3 = 7;
if ((v1 > 0) && (v2 > 0))
{
if (v1 > v2)
{
v3 = v1 - v2;
}
else
{
v3 = v2 - v1;
}
}
java.lang.System.out.println ("v3 = " + v3);
</syntaxhighlight>
==Wertebereiche==
===Division durch null===
Im Zusammenhang mit dem '''Divisionsoperator''' gibt es in allen Programmiersprachen das Problem, dass der Divisor nicht null werden darf.
Die Division durch null kann und sollte kategorisch durch eine geeignete Kontrollstruktur mit dem Vergleichsoperator "<>" verhindert werden, der nur bei Ungleichheit der beiden Operanden den Ergebniswert "wahr" erzeugt:
if (divisor <> 0)
{
quotient ← dividend / divisor
}
else
{
/* Ausnahmebehandlung / Fehlermeldung */
}
===Wertebereichsprüfung===
Bei Parametern mit eingeschränktem zulässigen Wertebereich kann eine allgemeine und an allen entsprechenden Stellen verwendbare Funktion programmiert werden, die den gültigen Wertebereich überprüft und einen entsprechenden (häufig zweiwertigen respektive booleschen) Funktionswert zurückgibt, wie zum Beispiel die folgende Funktion "waterIsLiquid ", die überprüft, ob die Wassertemperatur zwischen 0° und 100° Celsius liegt, bevor das spezifische Gewicht des Wassers berechnet werden darf:
boolean waterIsLiquid (double temperature) /* temperature in degrees Celsius */
{
final long freezingPoint ← 0;
final long boilingPoint ← 100;
boolean waterIsLiquid ← (temperature > freezingPoint) and (temperature < boilingPoint);
return waterIsLiquid;
}
...
double temperature, density;
...
if waterIsLiquid (temperature)
{
/* function computes an approximation of the density of air-free liquid water in kilograms per cubic metre */
density ←
( 999.83952
+ (16.945176 * temperature)
- (0.0079870401 * temperature * temperature)
- (0.000046170461 * temperature * temperature * temperature)
+ (0.00000010556302 * temperature * temperature * temperature * temperature)
- (0.00000000028054253 * temperature * temperature * temperature * temperature * temperature)
) / ((0.01689785 * temperature) + 1);
}
else
{
/* exception handling, because water is not liquid */
}
===Parameterkombinationen===
Es ist wichtig, dass immer alle auftretenden Parameterkombinationen berücksichtigt und vom Programmcode verarbeitet werden, wenn aus diesen Parametern valide berechnete Werte abgeleitet werden sollen.
Um zum Beispiel das Argument (also den Phasenwinkel zwischen -180° und +180°) einer komplexwertigen Zahl mit den reellwertigen Komponenten x und y über den Arcustangens ("arctan") zu berechnen, muss geprüft werden, ob der Parameter x gleich null ist, und welche Vorzeichen die Parameter x und y haben:
double x
double y
...
double argument
if (x = 0)
{
if (y > 0)
{
argument ← 90
}
elseif (y < 0)
{
argument ← -90
}
else /* y is equal to 0, too */
{
stop /* argument is not defined */
}
}
else /* x is not equal to 0 */
{
argument ← arctan (y / x)
if (x < 0)
{
if (y >= 0)
{
argument ← argument + 180
}
else /* both, x and y are less than 0 */
{
argument ← argument - 180
}
}
}
==Schnittstellen==
Schnittstellen definieren die Sichtbarkeits- und Zugriffsregeln zwischen verschiedenen Bestandteilen eines Programms und ermöglichen so die Interaktion zwischen diesen. Dabei ist es keineswegs sinnvoll, alle Bezeichner überall sichtbar zu machen, da dadurch die Übersichtlichkeit und Nachvollziehbarkeit insgesamt drastisch eingeschränkt wird. Dies führt letztlich zu Programmfehlern, da der Programmierer wegen der großen zu berücksichtigenden Datenmenge nicht mehr in der Lage ist, alle Implikationen seiner Arbeit zu überschauen.
Alle Eigenschaften (Attribute) und Methoden (Werkzeuge), die zusammengehören (aber auch nur diese), sollen in jeweils einer Einheit zusammengefasst werden, wie zum Beispiel einer Klasse oder einem Modul. Oft wird eine solche Einheit in einer Quelltextdatei zusammengefasst, was sinnvoll ist und die Nachvollziehbarkeit erleichtert.
Nur diejenigen Eigenschaften und Methoden, die außerhalb dieser Einheiten benutzt werden sollen oder müssen, dürfen mit einem Modifikator versehen werden, der dies ermöglicht (zum Beispiel "public"). Alle anderen Eigenschaften und Methoden sollten explizit als intern (zum Beispiel "private") deklariert sein. ''packages'' sind wegen der unübersichtlichen Sichtbarkeitsregeln (zum Beispiel durch den Modifikator "protected") als Zwischenebene entbehrlich und eher zu vermeiden. Alternativ können ohne weiteres längere, zusammengesetzte Klassennamen verwendet werden, um die Zugehörigkeit zu einem bestimmten Themenbereich zu kennzeichnen, wie zum Beispiel mit einfachen Bezeichnern:
StatisticsMyEvaluation
StatisticsMyAssessment
Diese Bezeichner sind in der Regel unmittelbar mit den Programmdateien im Dateisystem korreliert. Hierbei sind also keine '''qualifizierten Bezeichner''' auf verschiedene Konstrukte erforderlich, die hier im Beispiel aus mehreren Bezeichnern mit zwischengestellten Punkten zusammengesetzt sind. Links vom Punkt steht der Bezeichner der Programmbibliothek (Modulsammlung, Paket), und rechts vom Punkt steht der Bezeichner für ein Programmbaustein (Modul, Klasse):
package statistics
statistics.MyEvaluation
statistics.MyAssessment
===Importe===
====Import-Anweisungen====
'''Import-Anweisungen''' werden häufig nicht dazu benutzt anzumelden und anzuzeigen, welche externen Module (respektive Klassen) in einer Quelldatei verwendet werden, sondern werden als Möglichkeit missbraucht, den Quelltext möglichst kurz zu fassen.
Nicht:
import MyModule
...
drawLine ()
...
Sondern eindeutig mit qualifiziertem Bezeichner:
...
MyModule.drawLine ()
...
Mit diesen qualifizierten Bezeichnern ist es dann auch einfach und eindeutig möglich, gleichnamige Bezeichner, wie zum Beispiel für die Methode ''drawLine'', aus verschiedenen Klassen zu benutzen:
...
MyModule.drawLine ()
YourModule.drawLine ()
...
Die Erkennbarkeit der Herkunft eines importierten Bezeichners an jeder Stelle des Auftretens in einem Quelltext ist in der Regel von großer Nützlichkeit, insbesondere wenn andere Programmierer den Quelltext nachvollziehen können sollen oder wenn der Quellcode nach längerer Zeit gewartet werden soll.
Insbesondere Import-Anweisungen mit Wildcards sind schlecht nachvollziehbar (auch wenn viele Entwicklungssysteme Funktionen für eine gewisse Transparenz bieten), so wie zum Beispiel:
import myPackage.*
import yourPackage.*
drawLine () /* To which package does the method "drawLine" belong? */
Class var ← new Class () /* To which package does the class "Class" belong? */
====Zyklische Importe====
[[Datei:Zyklischer.Import.png|mini|rechts|hochkant=2|Zyklische Importe durch Aufruf ("call") des Unterprogramms ("procedure") '''sum''' aus der Klasse '''B''' in das Unterprogramm '''add''' der Klasse A sowie Aufruf des Unterprogramms '''add''' aus der Klasse '''A''' in das Unterprogramm '''sum''' der Klasse '''B'''.]]
'''Zyklische Importe''' beziehungsweise Zirkelbezüge sind nicht nur unübersichtlich, sondern auch unstrukturiert und können zu Speicherüberläufen führen, da sich Programmteile immer wieder gegenseitig aufrufen, ohne beendet zu werden. Ferner kann die Funktion des übersetzten Programms bei einer Optimierung des Codes von der Reihenfolge der Übersetzung der Quelltexte abhängen. Die Schnittstellen der Klassen und Module können im Allgemeinen weder unabhängig voneinander noch eindeutig überprüft werden.
'''Beispiel''': Die beiden Funktionen Funktionen ''add'' aus der Klasse ''A'' und ''sum'' aus der Klasse ''B'' rufen sich endlos gegenseitig auf, um die Summe zweier Zahlenwerte zu berechnen, bis der Speicher überlaufen würde und das Laufzeitsystem die Ausführung deswegen abbricht oder der Speicher überläuft, das Programm unkontrolliert und ohne (nachvollziehbare) Fehlermeldung abstürzt.
<div style="clear:both"></div>
public class A
{
public int procedure add (int a, int b)
{
int result ← B.sum (a, b);
return result;
}
}
public class B
{
public int procedure sum (int x, int y)
{
int result ← A.add (x, y);
return result;
}
}
[[Datei:Circular Reference.svg|mini|rechts|hochkant=1|Variante von Abhängigkeiten zwischen Modulen oder Klassen, in denen die zyklischen Bezüge weniger offensichtlich sind, wenn nur der nächste Nachbar betrachtet wird. Der dunkelrote Pfeil oben rechts zeigt nach unten auf ein bereits vorher definiertes Element, das sich rechts in der Mitte befindet. Die Definition dieses Elements darf bei einem strukturierten Aufbau der Programmteile allerdings nicht von dem Element ober rechts abhängig sein.]]
Solche zyklischen Abhängigkeiten können durch Verzweigungen und indirekte Aufrufe wesentlich weniger offensichtlich sein, und sind dann nur sehr schwierig zu erkennen und zu beheben. Sichere Programmiersprachen überprüfen solche zyklischen Zusammenhänge daher und lassen sie nicht zu.
In der Regel ist es bei der Anwendung von rekursiven Programmiertechniken mit wohldefinierten Abbruchbedingungen möglich, ohne zyklische Modulabhängigkeiten auszukommen. Ein Übersetzer kann in den Metadaten von Programm-Modulen Zeitstempel verwenden, um bei der Interpretation eines Programmteils herausfinden zu können, ob alle anderen importierten Programmteile bereits vorher gültig übersetzt wurden.
<div style="clear:both"></div>
==Nebeneffekte==
'''Nebeneffekte''' treten auf, wenn der Programmierer von naheliegenden, jedoch falschen Annahmen ausgeht, die die Programmiersprache betreffen. Solche Nebeneffekte sind unerwünscht und können durch ein strukturiertes Vorgehen oft leicht vermieden werden.
===Durch arithmetischen Überlauf===
Als Indiz für solche Nebeneffekte möge folgendes Beispiel in Java dienen, bei dem die Dezimalzahl 127 (die hexadezimale Repräsentation dieses Zahlenwerts ist durch die acht Ziffern 7F gegeben) um eins erhöht wird:
<syntaxhighlight lang="Java">
byte zahl = 127;
java.lang.System.out.println ("zahl = " + zahl);
zahl++;
java.lang.System.out.println ("zahl = " + zahl);
</syntaxhighlight>
Diese Anweisungsfolge erzeugt die Ausgabe:
:zahl = 127
:zahl = -128
Wenn die größte mit dem Datentyp "byte" darstellbare Zahl 127 mit dem Inkrement-Operator ++ um eins erhöht wird, ergibt sich durch arithmetischen Überlauf als Ergebnis die kleinste darstellbare ganze Zahl 128.
Dass solche Nebeneffekte auch in Standard-Bibliotheken versteckt sein können, möge das folgende Beispiel in Java zeigen, bei dem die Dezimalzahl -1 (die hexadezimale Repräsentation dieses Zahlenwerts ist durch die acht Ziffern FFFFFFFF gegeben) mit zwei verschiedenen Unterprogrammen ausgegeben werden soll (Stand 2026):
<syntaxhighlight lang="Java">
long zahl = 0xFFFFFFFF;
java.lang.System.out.println ("dezimal: " + zahl);
java.lang.System.out.print ("hexadezimal: ");
java.lang.System.out.printf ("%h\n", zahl);
</syntaxhighlight>
Diese Anweisungsfolge erzeugt die Ausgabe:
:dezimal: -1
:hexadezimal: 0
Die Methode "printf" für die Ausgabe im hexadezimalen Format (Steuersequenz h%), ruft die statische Methode "formatUnsignedLong0" aus der Klasse "Long" aus dem package "java.lang" im Modul "java.base" der Java-Standardbibliothek auf und gibt den Wert 0 aus, obwohl der korrekte hexadezimale Wert FFFFFFFF lautet. Der Fehler entsteht bei der internen Berechnung, bei der es einen arithmetischen Überlauf gibt, der nicht explizit abgefangen wird.
===Durch Rundung===
Manchmal ist es schwierig zu erkennen, dass das Ergebnis einer Operation nicht dem exakten Ergebnis entspricht, das mathematisch zu erwarten wäre, weil es Rundungsfehler gibt. Gleitkommazahlen können nicht mit beliebig hoher Präzision gespeichert werden, und daher können sich dadurch solche Rundungsfehler auch mit einer völlig unerwarteten Wirkung ergeben. Hier ein Beispiel in der Programmiersprache Java für ein System mit einer Speichertiefe von 64 Bit:
<syntaxhighlight lang="Java">
double a = 4.4;
double b = 3.3;
java.lang.System.out.println (a - b);
</syntaxhighlight>
Die Ausgabe lautet nicht "1.1" wie zu erwarten wäre, sondern:
:1.1000000000000005
Noch schwieriger ist es, wenn das Kommutativ-, das Distributiv- oder das Assoziativgesetz nicht zu gelten scheinen, wie in diesem Beispiel, bei dem die Variable "b" einmal zur Variable "a" und einmal zur Variable "c" assoziiert ist:
<syntaxhighlight lang="Java">
double a = 4.4;
double b = 3.3;
double c = 1.1;
java.lang.System.out.println ((a - b) - c);
java.lang.System.out.println (a - (b + c));
</syntaxhighlight>
Mathematisch kommt in beiden Fällen exakt der Wert null heraus, die Ausgabe lautet jedoch:
:4.440892098500626E-16
:0.0
Die Wirkung von derartigen Nebeneffekten sind nur sehr schwierig zu beherrschen, und daher sollte beim Vergleichen von Gleitkommawerten die Präzision respektive die Maschinengenauigkeit der gespeicherten Werte berücksichtigt werden. Manche Programmiersprachen stellen hierfür einen Wert für die kleineste relative Genauigkeit von Gleitkommazahlen <math>\epsilon</math> (epsilon) zur Verfügung. Das folgende Beispiel für den Datentyp double mit 64 Bit Speichertiefe nach dem Standard IEEE 754 in der Programmiersprache Java mit einem Wert für <math>\epsilon = 10^{-15}</math> nach der Formel:
:<math>\Bigg| {\frac {differenzBerechnet - differenzErwartet} {differenzErwartet}} \Bigg| < \epsilon</math>
<syntaxhighlight lang="Java">
double a = 4.4;
double b = 3.3;
double differenzBerechnet = a - b;
double differenzErwartet = 1.1;
boolean gleichheit1 = (differenzBerechnet == differenzErwartet);
java.lang.System.out.println (gleichheit1);
double epsilon = 1.0E-15;
boolean gleichheit2 = java.lang.Math.abs ((differenzBerechnet - differenzErwartet) / differenzErwartet) < epsilon;
java.lang.System.out.println (gleichheit2);
</syntaxhighlight>
Die Ausgabe lautet hier:
:false
:true
===Durch Reihenfolge===
In einigen Programmiersprachen ist die Reihenfolge der Abarbeitung von kombinierten Ausdrücken nicht explizit definiert und führt daher zu einem solchen Nebeneffekt.
Die Anweisungen
h ← f (x) + g (x)
oder
h ← g (x) + f (x)
können je nach Compiler zu unterschiedlichen Ergebnissen für die Summe h führen. Die Methodenaufrufe f oder g können nämlich unter Umständen die als Parameter verwendete (lokale) Variable x verändern und somit gegebenenfalls verschiedene Werte für h erzeugen, je nachdem, ob zuerst f (x) oder g (x) ausgewertet wird. In solchen Programmiersprachen sind sogenannte Durchgangsparameter in kombinierten Ausdrücken zu vermeiden.
Ferner ist es denkbar, dass durch den ersten Funktionsaufruf globale Variablen oder Instanzen verändert und beim zweiten Funktionsaufruf verwendet werden.
Die erwünschte Reihenfolge von Funktionsaufrufen kann leicht durch entsprechende Code-Sequenzen mit sequentiellen Anweisungen erzwungen werden:
result_f ← f (x)
result_g ← g (x)
h ← result_f + result_g
Dieses Vorgehen erzeugt darüberhinaus den günstigen Umstand, dass die Zwischenergebnisse in lokalen Variablen gespeichert und somit abgefragt werden können. Diese sind nach einem Programmabbruch dann auch mit einem Post-Mortem-Debugger analysierbar.
===Durch Kombination von Operatoren===
Manche Programmiersprachen - insbesondere in der C-Sprachfamilie - erlauben die Kombination von Zuweisungsoperatoren und arithmetischen Operatoren.
Zuweisungsoperator: =
Arithmetische Operatoren: + - * /
Kombinierte Operatoren: += -= *= /=
Die kombinierten Operatoren sollen für die scheinbar äquivalenten Formulierungen mit getrenntem Zuweisungsoperator und arithmetischem Operator stehen:
a += 1; steht für a = a + 1;
a -= 1; steht für a = a - 1;
a *= 1; steht für a = a * 1;
a /= 1; steht für a = a / 1;
Diese Schreibweisen sollen wohl vor allem ein wenig Schreibarbeit bei der Programmierung ersparen, können aber zu schwer zu identifizierenden Programmierfehlern führen, wie das folgende Java-Beispiel verdeutlichen soll:
<syntaxhighlight lang="Java">
long a = 1;
double b = 1.5;
a *= b;
java.lang.System.out.println (a);
a += b;
java.lang.System.out.println (a);
a -= b;
java.lang.System.out.println (a);
</syntaxhighlight>
Dieser Code erzeugt die Ausgabe:
1
2
0
Die nur scheinbar äquivalenten Formulierungen für die kombinierten Operatoren
<syntaxhighlight lang="Java">
a = a * b;
a = a + b;
a = a - b;
</syntaxhighlight>
werden in Java wegen der mangelnden Zuweisungskompatibilität der arithmetischen Ausdrücke hinter dem Zuweisungsoperator vom Datentyp "double" zum Datentyp "long" der Variable "a" gar nicht übersetzt.
Die tatsächlichen äquivalenten Formulierungen für die kombinierten Operatoren lauten nämlich wie folgt:
<syntaxhighlight lang="Java">
a = (long) (a * b);
a = (long) (a + b);
a = (long) (a - b);
</syntaxhighlight>
Durch die impliziten Datentypumwandlungen erklären sich auch die falschen numerischen und gegebenenfalls nicht erwarteten ganzzahligen Ergebnisse. Wenn bei der Programmierung diese Tatsachen nicht bewusst sind oder übersehen werden, ergeben sich numerische Fehler in den arithmetischen Berechnungen. Dies kann einfach vermieden werden, indem kombinierte Operatoren zugunsten der expliziten sowie transparenten Formulierungen mit separaten Operatoren nicht verwendet werden.
=== Durch Sprachdefinition ===
Als Beispiel dient hier die scheinbar falsche Ausgabe eines Java-Programms, weil die Definition der Programmiersprache der Intuition widerspricht:
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
long i = 01234567;
java.lang.System.out.println (i);
</syntaxhighlight>
Dieser Code erzeugt die Ausgabe:
342391
Das Literal "01234567" wird trotz der ausschließlichen Verwendung von gültigen dezimalen Ziffern nicht als die Dezimalzahl 1234567<sub>10</sub> interpretiert und ausgegeben, sondern entsprechend der Definition der Programmiersprache Java wegen der einleitenden Null als Oktalzahl zur Basis Acht, also als 1234567<sub>8</sub> = 342391<sub>10</sub>.
=== Durch Überladen ===
Eine Überladung liegt vor, wenn eine Operator oder ein Bezeichner mehrfach in verschiedenen Bedeutungen auftritt, die leicht zu Verwechslungen führen können. Streng strukturierte Programmiersprachen erlauben das polymorphe Überladen nicht, wenn es dadurch zu Programmierfehlern kommen kann.
Das '''Überladen''' muss in der objektorientierten Programmierung vom '''Überschreiben''' unterschieden werden, wobei auch überschriebene Methoden in weniger strukturierten Programmiersprachen überladen werden dürfen, was ebenfalls zu unübersichtlichem Programmcode und schnell zu übersehenden Programmierfehlern führen kann. Siehe hierzu unten unter [[Strukturierte Programmierung#Überladung|Überladung]].
==== Überladung von Divisionsoperatoren ====
Die Divisionsoperatoren sind in vielen Programmiersprachen leider überladen, wenn nämlich formal keine Unterscheidung zwischen Division mit ganzen Zahlen (Datentyp zum Beispiel "long" oder "int") und Gleitkommazahlen (Datentyp zum Beispiel "real" oder "double") gemacht wird. In diesen Fällen muss der Divisionsoperator sehr aufmerksam verwendet werden:
int i ← 2;
int j ← 1;
real k ← j / i; /* Ueberladener Divisionsoperator mit zwei ganzzahligen Operanden */
Verwendet die Programmiersprache im arithmetischen Ausdruck die ganzzahlige Division, hat dies zur Folge, dass die Variable k den Wert '''0''' erhält. Verwendet die Programmiersprache stattdessen die reelwertige Division, bekommt die Variable k den Wert 0,5 zugewiesen.
Einige Programmiersprachen unterscheiden daher sinnvollerweise explizit zwischen einem Operator für die ganzzahlige Division ("div" oder "DIV") und einem Operator für die Gleitkommadivision ("/").
<syntaxhighlight lang="pascal">
(* Programmiersprache Pascal *)
i, j : integer;
k : real;
i := 2;
j := 1;
k := j / i; (* Gleitkommazahliger Divisionsoperator mit zwei ganzzahligen Operanden *)
</syntaxhighlight>
In der letzten Anweisung wird der Variablen "k" der Zahlenwert der reellwertigen Division '''0,5''' zugewiesen.
<syntaxhighlight lang="pascal">
(* Programmiersprache Pascal *)
i, j, k : integer;
i := 2;
j := 1;
k := j div i; (* Ganzzahliger Divisionsoperator mit zwei ganzzahligen Operanden *)
</syntaxhighlight>
In der letzten Anweisung wird der Variablen "k" der Zahlenwert der ganzzahligen Division '''0''' zugewiesen.
Bei Programmiersprachen, die die Unterscheidung der Divisionsoperatoren nicht unterstützen, ist die Verwendung der expliziten und zuweisungskompatiblen Datentypumwandlung (englisch: ''type cast'') nicht nur sinnvoll, sondern sogar zwingend erforderlich:
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
long i = 2;
long j = 1;
double k = ((double) j) / ((double) i) /* Ueberladener Divisionsoperator mit zwei gleitkommazahligen Operanden */
</syntaxhighlight>
In der Regel ist es für eine Gleitkommadivision hierbei ausreichend, wenn nur einer der beiden Operanden, also nur der Nenner (Dividend) oder der nur Zähler (Divisor) der Division, eine Gleitkommazahl darstellt.
Entsprechende Überlegungen gelten auch für alle '''Modulo-Operatoren''' (wie zum Beispiel "%", "mod" oder "MOD").
==== Überladung von Variablen ====
Oft ist es in einer Programmiersprache erlaubt, dieselben Bezeichner für Variablen mit verschiedenen Sichtbarkeitsbereichen zu verwenden. Dies kann sehr einfach zur Verwechslung dieser Variablen führen, wie im folgenden Java-Beispiel verdeutlicht wird, wo es sowohl eine globale Klassenvariable (Sichtbarkeit in der Klasse "OverloadedVariables") als auch eine lokale Variable (Sichtbarkeit in der Methode "main") mit dem Namen "bezeichner" gibt:<syntaxhighlight lang="java">
public class OverloadedVariables
{
// globale Klassenvariable "bezeichner"
private static long bezeichner = 1;
// Hauptprogramm (Methode "main")
public static void main (java.lang.String [] argumente)
{
// lokale Variable "bezeichner"
long bezeichner = 2;
// Ausgabe der globalen Klassenvariable "bezeichner"
java.lang.System.out.println ("Wert der globalen Variable = " + OverloadedVariables.bezeichner);
// Ausgabe der lokalen Variable aus der Methode "main"
java.lang.System.out.println ("Wert der lokalen Variable = " + bezeichner);
}
}
</syntaxhighlight>Falls die Klassenvariable referenziert werden soll, muss sie in Java qualifiziert bezeichnet werden, indem der Name der Klasse vorangestellt wird.
==== Überladung von Methoden ====
Viele Programmiersprachen erlauben die Deklaration von mehreren Methoden mit gleichem Bezeichner, die sich in der Anzahl oder den Datentypen ihrer Parameter unterscheiden. Das folgende Java-Beispiel mit zwei Methoden demselben Namens, von denen die mit der passenden Datentyp des Parameters "zahl" aufgerufen wird, verdeutlicht dies:<syntaxhighlight lang="java">
private static long kehrwert (long zahl)
{
long kehrwert = 1 / zahl;
return kehrwert;
}
private static double kehrwert (double zahl)
{
double kehrwert = 1 / zahl;
return kehrwert;
}
public static void main (java.lang.String [] argumente)
{
double kehrwert1 = kehrwert (2);
double kehrwert2 = kehrwert (2.0);
java.lang.System.out.println ("Kehrwert 1 = " + kehrwert1);
java.lang.System.out.println ("Kehrwert 2 = " + kehrwert2);
}
</syntaxhighlight>Die Ausgabe ergibt zwei verschiedene Ergebnisse für den Kehrwert der Zahl Zwei:<syntaxhighlight>
Kehrwert 1 = 0.0
Kehrwert 2 = 0.5
</syntaxhighlight>Durch die kategorische Verwendung verschiedener Bezeichner für verschiedene Methoden kann die Verwechslungsgefahr leicht und ohne Probleme verhindert werden, und die Erzeugung der beiden verschiedenen Ergebnisse wird transparent:<syntaxhighlight lang="java">private static long kehrwertLong (long zahl)
{
long kehrwert = 1 / zahl;
return kehrwert;
}
private static double kehrwertDouble (double zahl)
{
double kehrwert = 1 / zahl;
return kehrwert;
}
public static void main (java.lang.String [] argumente)
{
double kehrwert1 = kehrwertLong (2);
double kehrwert2 = kehrwertDouble (2.0);
java.lang.System.out.println ("Kehrwert 1 = " + kehrwert1);
java.lang.System.out.println ("Kehrwert 2 = " + kehrwert2);
}</syntaxhighlight>
===Durch falsche Spezifikation===
In Programmiersprachen, die dynamische Variablen ausschließlich als Zeiger behandeln (wie zum Beispiel C oder C++), kann trotz exakter Übereinstimmung der referenzierten Datentypen bei einer Zuweisung des Ergebnisses einer Funktion ein Zeiger auf den lokalen Stapelspeicher der Funktion zurückgegeben werden, der nur während der Ausführung der Funktion, aber nicht mehr nach dem Rücksprung aus der Funktion gültig ist. Während der weiteren Programmausführung kann der Speicherbereich jederzeit überschrieben werden, ohne dass der Programmierer dies wünscht oder absehen kann.
Im folgenden Beispiel in der Programmiersprache C wird innerhalb der Funktion ''function'' der Wert 5 dem Datenfeld ''a'' der Variablen ''data'' zwar korrekt zugewiesen, kann aber nach dem Rücksprung aus der Funktion im Stapelspeicher jederzeit unbeabsichtigt verändert werden, wie zum Beispiel beim erneuten Aufruf einer Funktion oder anderen Operationen, die den Stapelspeicher verwenden:
<syntaxhighlight lang="C">
/* Programmiersprache C */
struct DataType { int a }; // Definition des Datentyps ''DataType'' mit einem ganzzahligen Datenfeld ''a''
// Deklaration der Funktion ''function'' mit einem Zeiger auf eine Variable vom Datentyp ''DataType'' als Speicheradresse für den Rückgabewert
DataType* function ()
{
DataType data; // Deklaration der lokalen Variable ''data'' vom Datentyp ''DataType''
data.a = 5; // Zuweisung des Wertes ''5'' zum Datenfeld ''a'' der Variablen ''data''
return &data; // Rückgabe der lokalen, temporären Speicheradresse von ''data'', die nach der Beendigung des Funktionsaufrufs gar nicht mehr gültig ist.
}
</syntaxhighlight>
Der Programmierer muss zur Abwendung dieses Übels darauf achten, dass Rückgabewerte durch Allokation einer entsprechenden Variablen in einem dauerhaft verfügbaren dynamischen Speicherbereich (also zum Beispiel im Heap-Speicher) auch nach dem Aufruf der Funktion noch gültig und korrekt aufrufbar sind.
Bei der Verwendung von vollständig typsicheren Programmiersprachen ist die Rückgabe von lokal definierten Adressen nicht zulässig, und die Übersetzung des entsprechenden Codes wird vom Complier von vornherein verweigert, so dass es gar nicht zu einem solchen Nebeneffekt kommen kann.
Alternativ kann der Datentyp ''DataType'' nicht direkt als Verbund, sondern als Zeiger auf einen entsprechenden Verbund deklariert werden. In diesem Fall muss in der Funktion zunächst eine Instanz erzeugt werden (beispielsweise mit dem Kommando ''new'' oder ''allocate''). Diese Instanz ist dann nicht mehr im lokalen Stapelspeicher (Stack) der Funktion gespeichert, sondern es kann im dynamischen Speicherbereich (Heap) global - also auch außerhalb der Funktion und nach Beendigung des Funktionsaufrufs - darauf zugegriffen werden.
===Durch Verwechslung von Speicherinhalt und Speicheradresse===
Die Werte von Variablen werden unter einer bestimmten Speicheradresse eines Computers gespeichert, wo vom Laufzeitsystem die für den entsprechenden Datentyp erforderliche Datenmenge der entsprechende Speicherplatz reserviert und bereitgehalten wird. Diese Speicheradresse wird in modernen Systemen in der Regel automatisch verwaltet, so dass sie im Allgemeinen gar nicht bekannt ist und auch gar nicht bekannt sein muss.
Daraus ergeben sich unter Umständen jedoch wichtige Implikationen. In manchen Programmiersprachen, wie zum Beispiel Java, ist nämlich nicht unmittelbar erkennbar, ob bei bestimmten Operationen der Speicherinhalt oder die Speicheradresse einer Variablen verwendet wird. So werden bei bei logischen Vergleichen mit Operanden, die aus Variablen mit einfachen Datentypen bestehen (etwa boolean, long oder double), die unter der Speicheradresse gespeicherten '''Werte''' verglichen, also die Inhalte. Bei Variablen mit komplexen Datentypen (beispielsweise eine abzählbare Liste von Daten eines Datentyps (array), ein Verbund (record / struct), der sich aus verschiedenen Datentypen zusammensetzen kann, oder allgemein in der objektorientierten Programmierung die Instanz eines Objekts) werden jedoch gar nicht unbedingt die gespeicherten Inhalte, sondern lediglich die Speicheradressen der beiden Operanden verglichen. Hier wird also beim Gleichheitsoperator nur geprüft, ob es sich um dasselbe Speicherobjekt (dieselbe Instanz) handelt, und nicht, ob zwei verschiedene Speicherobjekte den gleichen Inhalt haben. Bei strenger Strukturierung wird (hoffentlich schon vor der Ausführung bereits im Quelltext) zusätzlich geprüft, ob die zu vergleichenden komplexen Datentypen überhaupt zuweisungskompatibel und somit sinnvoll vergleichbar sind.
Unter welchen Umständen welche Speicheradressen für gleiche Speicherinhalte verwendet werden, ist insbesondere für unerfahrene Programmierer keineswegs immer naheliegend oder leicht nachzuvollziehen. Dies wird im Folgenden anhand des logischen Vergleichs auf Gleichheit von Zeichenketten (Java-Klasse java.lang.String) in der Programmiersprache Java verdeutlicht. Die Wirkungsweise des Gleichheitsoperators == wird der Wirkungsweise des Funktionsaufrufs der Methode '''java.lang.String.equals''' gegenübergestellt, die einen booleschen Rückgabewert hat.
<syntaxhighlight lang="Java">
boolean vergleich;
// Die symbolische Konstante für die Zeichenkette "abc" wird in einer Variablen mit dem Bezeichner text verwaltet
// Die Zeichenkette "abc" wird von Java unter der Speicheradresse #MEM1 abgelegt
// Die Variable text und die symbolische konstante Zeichenkette "abc" haben dieselbe Speicheradresse #MEM1
java.lang.String text = "abc";
// Vergleich der Speicheradresse #MEM1 mit der Speicheradresse #MEM1
vergleich = ("abc" == "abc");
java.lang.System.out.println ("1. Vergleich \"abc\" == \"abc\": " + vergleich);
// Vergleich der Speicheradresse #MEM1 mit der Speicheradresse #MEM1 !!!
vergleich = (text == "abc");
java.lang.System.out.println ("2. Vergleich text == \"abc\": " + vergleich);
// Vergleich des Inhalts bei der Speicheradresse #MEM1 mit dem Inhalt bei der Speicheradresse #MEM1
vergleich = text.equals ("abc");
java.lang.System.out.println ("3. Vergleich text.equals (\"abc\"): " + vergleich);
// Neue Instanz fuer die bereits oben deklarierte Zeichenkette text
// Die neue Instanz wird mit dem new-Operator unter der Speicheradresse #MEM2 erzeugt
// Der Speicherinhalt wird mit dem Konstruktor java.lang.String und dem Wert "abc" initialisiert
// Die Variable text bekommt durch die Zuweisung die Speicheradresse #MEM2
text = new java.lang.String ("abc");
// Vergleich der Speicheradresse #MEM2 mit der Speicheradresse #MEM1 !!!
vergleich = (text == "abc");
java.lang.System.out.println ("4. Vergleich text == \"abc\": " + vergleich);
// Vergleich des Inhalts bei der Speicheradresse #MEM2 mit dem Inhalt bei der Speicheradresse #MEM1
vergleich = text.equals ("abc");
java.lang.System.out.println ("5. Vergleich text.equals (\"abc\"): " + vergleich);
</syntaxhighlight>
Die Textausgabe dieses Programms sieht wie folgt aus:
<syntaxhighlight lang="text">
1. Vergleich "abc" == "abc": true
2. Vergleich text == "abc": true
3. Vergleich text.equals ("abc"): true
4. Vergleich text == "abc": false
5. Vergleich text.equals ("abc"): true
</syntaxhighlight>
Symbolisch konstante Zeichenketten, wie zum Beispiel der Ausdruck "abc", werden unter einer verdeckten Speicheradresse abgelegt und von Java für gleichlautende Ausdrücke automatisch wiederverwendet. Wird jedoch mit dem new-Operator eine Instanz eines Objekts erzeugt, so bekommt diese unabhängig davon, welcher Inhalt dort gespeichert wird, stets eine andere neue Speicheradresse zugeordnet. Für den Vergleich des Inhalts von Zeichenketten auf Gleichheit ist in Java also immer die generische typengebundene Methode "equals'' zu verwenden. Diese typengebundene Methode "equals" gibt es auch in vielen anderen Java-Klassen, um den Inhalt der entsprechenden Objektinstanzen auf Gleichheit vergleichen zu können.
==Strukturierte objektorientierte Programmierung==
===Vermeidung von Codewiederholung durch Vererbung===
Die Vermeidung von Codewiederholung durch Vererbung kann beispielsweise an den beiden graphischen Objekten '''Kreis''' und '''Dreieck''' deutlich gemacht werden. Diese beiden Objekte können unabhängig voneinander als Datentyp modelliert werden, wobei ihre gemeinsamen Eigenschaften '''Farbe''' und '''Strichstärke''', sowie die jeweilige Methode zum '''Zeichnen''' beide Male unabhängig behandelt werden (dies kann eindeutig durch '''Hat'''-Beziehungen ausgedrückt werden: ein Kreis oder ein Dreieck '''hat''' eine Farbe, eine Strickstärke sowie eine Methode zum Zeichnen), was eine Codewiederholung darstellt. Der '''Kreis''' hat zusätzlich das Attribut '''Radius''', und das '''Dreieck''' hat zusätzlich die drei Attribute '''SeiteA''', '''SeiteB''' und '''SeiteC''':
Kreis hat: Farbe, Strichstärke, Methode zum Zeichnen, Radius
Dreieck hat: Farbe, Strichstärke, Methode zum Zeichnen, SeiteA, SeiteB, SeiteC
Mithilfe von Vererbung kann die Codewiederholung vermieden werden, indem die Attribute '''Farbe''' und '''Strichstärke''', sowie die Methode zum '''Zeichnen''' nur einmal mithilfe des abstrakten Objekts '''GraphischesObjekt''' deklariert werden. Die konkreten Objekte '''Kreis''' und '''Dreieck''' erben alle gemeinsamen Eigenschaften und Methoden (respektive typengebundenen Prozeduren) von '''GraphischesObjekt''' (dies kann eindeutig durch '''Ist'''-Beziehungen ausgedrückt werden: ein Kreis '''ist''' ein GraphischesObjekt, und ein Dreieck '''ist''' ein GraphischesObjekt) und werden nur durch die jeweils fehlenden Attribute ergänzt:
GraphischesObjekt hat: Farbe, Strichstärke, Methode zum Zeichnen
Kreis ist GraphischesObjekt, hat zusätzlich: Radius
Dreieck ist GraphischesObjekt, hat zusätzlich: SeiteA, SeiteB, SeiteC
===Überladung===
Das '''Überladen''' von Methoden, Konstruktoren oder Variablen ist auch bei objektorientierter Programmierung überflüssig, erschwert die Nachvollziehbarkeit vom Quellcode und birgt die Gefahr von Programmierfehlern, die unter Umständen erst lange nach der Entwicklung der Software bei deren Wartung entstehen. Das folgende Beispiel verdeutlicht einen leicht zu übersehenden Programmierfehler durch die Veränderung bei den überladenen Funktionen während der Programmentwicklung oder Programmwartung:
double quotient (double a, double b)
{
return a / b; /* Gleitkommazahlige Division */
}
long i ← 1;
long j ← 2;
double q ← quotient (i, j); /* q ist 0,5 da die gleitkommazahlige Definition der Funktion 'quotient' verwendet wird */
Wird die Funktion 'quotient' später mit einer ganzzahligen Variante überladen, ergibt sich beim bestehenden Aufruf der Funktion unbeabsichtigt ein anderes Ergebnis für die Variable 'q':
double quotient (long a, long b)
{
return a DIV b; /* Ganzzahlige Division */
}
double quotient (double a, double b)
{
return a / b; /* Gleitkommazahlige Division */
}
long i ← 1;
long j ← 2;
double q ← quotient (i, j); /* q ist 0 da die ganzzahlige Definition der Funktion 'quotient' verwendet wird */
Noch unübersichtlicher wird die Lage, wenn zusätzlich auch noch Überladungen mit gemischten Datentypen für die Funktionsparameter definiert werden:
double quotient (long a, long b)
double quotient (double a, long b)
double quotient (long a, double b)
double quotient (double a, double b)
Deswegen werden Methoden oder Attribute besser nicht überladen, auch nicht, wenn die Programmiersprache dies zulässt. Auch jede Klasse bekommt daher maximal einen einzigen '''Konstruktor''', der alle erforderlichen Parameter zur Initialisierung der Instanzvariablen enthält. Als günstige Nebeneffekte stellen sich kürzere Übersetzungszeiten ein.
Wenn die ursprünglichen Deklarationen in der Basisklasse oder einer der von ihr erbenden Klassen überladen werden, indem zum Beispiel weitere gleichnamige Methoden mit abweichenden Parametern definiert werden, dann kann es zu verändertem Verhalten von Software kommen. Ohne dass die Anwendung selbst geändert wurde, kann es allein durch die Aktualisierung einer verwendeten Klasse zu völlig anderen Rechenergebnissen kommen, weil automatisch eine andere, neu überladene Methode aufgerufen wird, ohne dass dies im Quelltext des Anwendungsprogramms sichtbar wird. Die Folge können schwerwiegende Programmierfehler sein, die schwierig zu analysieren sind.
Als ein Beispiel diene hier die Methode java.lang.Math.ulp zur Bestimmung der "'''u'''nits in the '''l'''ast '''p'''lace" ("Einheiten in der letzten Stelle"), die in der Klasse java.lang.Math aus historischen Gründen mit zwei Parametern deklariert und somit überladen ist:
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
public class Math;
{
public static double ulp (double d)
public static float ulp (float f)
}
</syntaxhighlight>
Der folgende Java-Code
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
double zahl;
zahl = java.lang.Math.ulp (1L); // Datentyp long
java.lang.System.out.println (zahl);
zahl = java.lang.Math.ulp (1F); // Datentyp float
java.lang.System.out.println (zahl);
zahl = java.lang.Math.ulp (1D); // Datentyp double
java.lang.System.out.println (zahl);
</syntaxhighlight>
erzeugt folgende Ausgabe, da die ganze Zahl Eins mit dem Datentyp long (64 Bit) in der Programmiersprache Java implizit offensichtlich nicht in den Datentyp double (64 Bit), sondern in den Datentyp float (32 Bit) umgewandelt wird, und somit die mit dem Parameter des Datentyps float deklarierte Methode aufgerufen wird:
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
1.1920928955078125E-7
1.1920928955078125E-7
2.220446049250313E-16
</syntaxhighlight>
Falls bei einer neueren Version der Klasse java.lang.Math die Methode ulp mit einem Parameter des Datentyps long überladen würde, wäre das Ergebnis mit dem ganzzahligen Parameter des Werts "1L" (long) nicht mehr vorhersagbar, obwohl der oben angegebene Methodenaufruf sich formal gar nicht geändert hätte.
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
public class Math;
{
public static double ulp (double d)
public static float ulp (float f)
public static double ulp (long l)
}
</syntaxhighlight>
Das Ergebnis des Aufrufs
<syntaxhighlight lang="Java">
/* Programmiersprache Java */
double zahl = java.lang.Math.ulp (1L);
java.lang.System.out.println (zahl);
</syntaxhighlight>
würde dann allein von der tatsächlichen Implementierung der neuen überladenen Methode mit dem Parameter des Datentyps long abhängen, die mit den alten beiden ulp-Methoden nichts mehr zu tun hat, außer, dass sie den gleichen Namen hat.
===Überschreibung===
Das '''Überschreiben''' von geerbten Methoden oder Konstruktoren ist etwas völlig anderes als das Überladen und kann sehr sinnvoll sein.
Beim Überschreiben muss die Signatur der Methode (oder des Konstruktors) unter strikter Beachtung der Zuweisungskompatibilität, der Anzahl und der Reihenfolge aller Parameter sowie der Rückgabewerte berücksichtigt werden. Wenn die Programmiersprache dies nicht automatisch unterstützt, sind wenigstens entsprechend aufwendige Maßnahmen im Quelltext sicherzustellen, wie zum Beispiel explizite Typenprüfungen oder hinreichend ausführliche Hinweise in Kommentaren.
Wenn Methoden oder Konstruktoren einer Basisklasse von der überschreibenden Klasse aufgerufen werden (englisch ''super call'') kann es zum ''Fragile Base Class Problem'' (zu Deutsch ''Problem der anfälligen Basisklasse'') kommen, da bei der Implementierung der Basisklasse die möglichen Auswirkungen in den später implementierten, überschreibenden Klassen nicht berücksichtigt werden konnten. Zur Abwendung dieser Gefahr sind ein besonders sorgfältiger und strukturierter Programmierstil sowie eine lückenlose Dokumentation des Quelltextes sehr hilfreich.
Das fehlerfreie und robuste Überschreiben von Klassen beziehungsweise die Vererbung von implementierten Klassen erfordern eine hohe Fähigkeit zum abstrakten Denken und eine umfangreiche Programmiererfahrung.
===Mehrfachvererbung===
Durch [[w:Mehrfachvererbung|Mehrfachvererbung]], also das Erben von Methoden und Instanzvariablen aus mehreren Basisklassen, führt zu komplexen, und schwierig zu durchschauenden Abhängigkeiten, die im Rahmen des [[w:Diamond-Problem|Diamond-Problems]] sogar zu unerwünschten Mehrdeutigkeiten führen kann. Die Vererbung aus zwei Basisklassen kann bei Bedarf ohne weiteres durch die Verwendung von [[w:Zwillingsklasse|Zwillingsklassen]] vermieden werden, was den Programmieraufwand ein wenig erhöht, aber dafür solche Mehrdeutigkeiten verhindert und außerdem die Übersetzungszeiten der Quelltexte reduziert.
In der Programmiersprache Java ist es zum Beispiel möglich, mehrere Basisklassen zu erben. Dabei ist zwar nur eine konkrete Vererbung aus einer Basisklasse (in Java: class) zulässig, aber zusätzlich dürfen noch beliebig viele weitere Basisklassen (in Java: interface) abstrakt geerbt werden. Dabei werden alle Attribute und Methoden aller Basisklassen auf die erbende Klasse übertragen. Auch die konkret vererbte Basisklasse kann wiederum selber mehrere abstrakte Basisklassen implementieren. Falls es in mehreren Basisklassen gleichlautende öffentliche Bezeichner gibt, kommt es unweigerlich zu Konflikten.
Es ist in der Implementierung insbesondere bei fehlenden entsprechenden Kommentaren nicht ohne Weiteres erkennbar, zu welchen Basisklassen die zu überschreibenden Instanzvariablen oder Methoden gehören.
<syntaxhighlight lang="Java">
/**
* Die Klasse Mehrfachvererbung erbt Attribute und Methoden aus drei Basisklassen:
* Sie ist eine Instanz der Klasse (class = konkrete Klasse) javax.swing.JFrame.
* Sie implementiert die Schnittstelle (interface = abstrakte Klasse) java.awt.event.KeyListener.
* Sie implementiert die Schnittstelle (interface = abstrakte Klasse) java.awt.event.ActionListener.
*/
public class Mehrfachvererbung
extends javax.swing.JFrame
implements java.awt.event.KeyListener, java.awt.event.ActionListener
{
/**
* Konstante serialVersionUID aus der Basisklasse java.io.Serialization fuer die Serialisation,
* die in der Klasse javax.swing.JFrame implementiert ist
*/
private final static long serialVersionUID = 1L;
/**
* Instanzvariable fuer den zuletzt von einer Instanz der Klasse javax.swing.JFrame gesendeten Tastaturcode
*/
private int keyCode;
/**
* Zu ueberschreibende Methode aus der geerbten Klasse java.awt.event.KeyListener
* Speichert den Tastaturcode der zuletzt betaetigten Taste fuer eine Instanz
* @param event: aufgetretenes Tastaturereignis aus der Klasse java.awt.event.KeyEvent
*/
@Override
public void keyPressed (java.awt.event.KeyEvent event)
{
this.keyCode = event.getKeyCode ();
}
/**
* Zu ueberschreibende Methode aus der geerbten Klasse java.awt.event.KeyListener
* Ungenutzt
* @param event: aufgetretenes Tastaturereignis aus der Klasse java.awt.event.KeyEvent
*/
@Override
public void keyReleased(java.awt.event.KeyEvent event)
{
}
/**
* Zu ueberschreibende Methode aus der geerbten Klasse java.awt.event.KeyListener
* Ungenutzt
* @param event: aufgetretenes Tastaturereignis aus der Klasse java.awt.event.KeyEvent
*/
@Override
public void keyTyped (java.awt.event.KeyEvent event)
{
}
/**
* Zu ueberschreibende Methode aus der vererbten Klasse java.awt.event.ActionListener
* Der Inhalt einer Instanz der Klasse javax.swing.JFrame wird erneut dargestellt,
* wenn die Eingabetaste (Enter) betaetigt wurde.
* @param event: aufgetretenes Aktionsereignis aus der Klasse java.awt.event.ActionEvent
*/
@Override
public void actionPerformed (java.awt.event.ActionEvent event)
{
if (this.keyCode == java.awt.event.KeyEvent.VK_ENTER)
{
this.repaint ();
}
}
}
</syntaxhighlight>
==Nachwort==
Ein sehr häufig auftretender „Programmierfehler“ - wiederum insbesondere bei Anfängern - ist das Unterlassen der Herstellung von Sicherungskopien der Quelltexte. Noch besser ist eventuell sogar eine Versionierung der Quelldateien, damit gegebenenfalls auf beliebige ältere Versionen zurückgegriffen werden kann. Die Auswirkungen dieses Fehlers sind hinreichend naheliegend, so dass hier nicht weiter darauf eingegangen werden muss.
Sollte der Leser nach der Lektüre dieser Beiträge zu dem verständlichen und naheliegenden Schluss gekommen sein, dass die Programmiersprachen C oder C++ ziemlich schlecht strukturiert sind, möge er sich auch einmal andere Programmiersprachen näher ansehen, wie zum Beispiel C#, Component Pascal oder auch Java.
Mit der Beherzigung der Vorschläge aus diesem Buch möge es dem Leser in seinem Programmier-Team in jeder Programmiersprache gelingen, in kürzerer Entwicklungszeit besser strukturierte und funktionierende Programme zu schreiben.
===Vergleich===
In der folgenden Tabelle werde einige imperative, objektorientierte Programmiersprachen hinsichtlich ihrer Strukturiertheit verglichen:
{| class="wikitable"
|- class="hintergrundfarbe6"
!Veröffentlichungsdatum!!1985!!1994!!1995!!2001
|-
!Programmiersprache!!C++!!Component<br/>Pascal!!Java!!C#
|-
| style="text-align:left"| Vollständig strukturierte Syntax || style="text-align:center" | nein || style="text-align:center" | ja || style="text-align:center" | nein || style="text-align:center" | nein
|-
| style="text-align:left"| Datentypsicherheit bei Basistypen || style="text-align:center" | nein || style="text-align:center" | ja || style="text-align:center" | ja || style="text-align:center" | ja
|-
| style="text-align:left"| Datentypsicherheit bei komplexen Datentypen || style="text-align:center" | nein || style="text-align:center" | ja || style="text-align:center" | nein || style="text-align:center" | ja
|-
| style="text-align:left"| Modulsicherheit || style="text-align:center" | nein || style="text-align:center" | ja || style="text-align:center" | nein || style="text-align:center" | ja
|-
| style="text-align:left"| Keine zyklischen Importe || style="text-align:center" | nein || style="text-align:center" | ja || style="text-align:center" | nein || style="text-align:center" | nein
|-
| style="text-align:left"| Keine mehrfache Schnittstellenvererbung || style="text-align:center" | nein || style="text-align:center" | ja || style="text-align:center" | nein || style="text-align:center" | nein
|-
| style="text-align:left"| Keine mehrfache Implementationsvererbung || style="text-align:center" | nein || style="text-align:center" | ja || style="text-align:center" | nein || style="text-align:center" | ja
|}
==Literatur==
* Niklaus Wirth:
** ''Programming in Modula 2'', Springer, 3. Auflage, 1985, ISBN 3-540-15078-1
** Mit Martin Reiser: ''Programming in Oberon – Steps beyond Pascal and Modula'', Addison-Wesley,1992, ISBN 0-201-56543-9
** ''Algorithmen und Datenstrukturen mit Modula - 2'', Teubner Leitfäden der Informatik, 5. Auflage, Teubner, Stuttgart, 1996, ISBN 9783519122609
* Herbert Schildt: ''Professionelles Modula-2'', McGraw-Hill, Hamburg, 1988, ISBN 3-89028-113-3
* Lászlo Böszörmény, Jürg Gutknecht, Gustav Pomberger: ''The School of Niklaus Wirth – The Art of Simplicity'', dpunkt, Heidelberg, 2000, ISBN 3-932588-85-1
* Hanspeter Mössenböck:
** ''Objektorientierte Programmierung in Oberon-2'', Springer, 1998, ISBN 9783540646495
** ''Sprechen Sie Java?: Eine Einführung in das systematische Programmieren'', dpunkt, Heidelberg, 2005, ISBN 9783898643627
** ''Kompaktkurs C# 4.0'', dpunkt, Heidelberg, 2009, ISBN 9783898646451
==Weblinks==
*{{w|Niklaus Wirth}}:
**Interessantes Interview: [http://www.simple-talk.com/opinion/geek-of-the-week/niklaus-wirth-geek-of-the-week/ Geek of the Week] vom 2. Juli 2009
**Ein noch interessanteres Interview (2009): [http://www.youtube.com/watch?v=wrGytM2YTQY An Interview with Niklaus Emil Wirth, Part 3]
*{{w|Frederick P. Brooks}}: [[w:en:The_Mythical_Man-Month|The Mythical Man-Month]]
*{{w|Benutzer:Bautsch|Markus Bautsch}}: [[:en:User:Bautsch/Capsula|Draft of the graphical programming language '''Capsula''']] (Wikibooks)
== Einzelnachweise ==
<references></references>
==Zusammenfassung des Projekts==
{{Vorlage:StatusBuch|10}}
* '''Zielgruppe:''' Programmierer, Software-Entwickler, Informatik-Lehrende
* '''Lernziele:''' Vermeidung von Fehlern, die leicht und unbemerkt zur unstrukturierten Programmierung führen können. Schnelle und sichere Erstellung leicht zu wartender Software.
* '''Buchpatenschaft/Ansprechperson:''' [[Benutzer:Bautsch]]
* '''Sind Co-Autoren gegenwärtig erwünscht?''' Ja, sehr gerne. Korrekturen von offensichtlichen Fehlern direkt im Text; Inhaltliches bitte per Diskussion.
* '''Richtlinien für Co-Autoren:''' Wikimedia-like.
[[Kategorie:Buch]]
[[Kategorie:Studium]]
cqwa98iol7vgkxysuj8lwh4i8huzcfn
Technisches Zeichnen/ Zeichenblätter
0
90965
1086441
999258
2026-05-21T08:05:05Z
~2026-30462-59
116246
/* Gestaltung */
1086441
wikitext
text/x-wiki
== Papierformate ==
{| class="wikitable"
|-
! Bezeichnung !! Abmessung (mm)
|-
| A0 || 841 x 1189
|-
| A1 || 594 x 841
|-
| A2 || 420 x 594
|-
| A3 || 297 x 420
|-
| A4 || 210 x 297
|}
=== Hälftungsgesetz ===
Das nächst größere Format erhält man indem das Blatt parallel zur kurzen Seite mittig teilt. Die Flächen zweier aufeinander folgenden Formate verhalten sich wie 2:1.
[[File:Hälftungsgesetz.png|ohne|thumb|Hälftungsgesetz]]
=== Ähnlichkeitsgesetz ===
Alle Formate einer Reihe sind einander geometrisch ähnlich.
[[File:Ähnlichkeitsgesetz.png|ohne|thumb|Ähnlichkeitsgesetz]]
=== Prinzip der Proportionalität ===
Das Verhältnis zwischen den Seiten x und y ist gleich dem Verhältnis zwischen der Seite eines Quadrates und dessen Diagonale.
<math>y:x= \sqrt 2:1=1.414</math>
[[File:Proportionalität.png|ohne|thumb|Prinzip der Proportionalität]]
== Gestaltung ==
{| class="wikitable"
!!!colspan="2"| Beschnitten (T) !! colspan="2"| Zeichenfläche !! colspan="2"| unbeschnitten (u)
|-
! Bezeichnung !! a1 !! b1 !! a2 !! b2 !! a3 !! b3
|-
| A0 || 841 || 1189 || 821 || 1159 || 880 || 1230
|-
| A1 || 594 || 841 || 574 || 811 || 625 || 880
|-
| A2 || 420 || 594 || 400 || 564 || 450 || 625
|-
| A3 || 297 || 420 || 277 || 390 || 330 || 450
|-
| A4 || 210 || 297 || 180 || 277 || 240 || 330
|}
=== Rahmen der Zeichenfläche ===
Der Rahmen ist vom linken Rand (Heftrand) 20 mm und von allen anderen 10 mm entfernt. Er wird als 0,7 mm Volllinie ausgeführt werden. Am Rahmen sollte zur besseren Orientierung eine Feldeinteilung vorgenommen werden. In die senkrechten Felder sind von oben nach unten Buchstaben (I und O werden nicht verwendet) und in den waagerechten Feldern von links nach rechts Zahlen eingetragen. Diese Felder sind beginnend von der Symmetrieachse 50 mm lang und werden mit einer 0,35 mm Volllinie ausgeführt. Die Schriftgröße der Zahlen und Buchstaben in den Feldern ist 3,5 mm. Beim A4 Blatt genügt es die Feldeinteilung am oberen Rand vorzunehmen.
Die nachfolgende Tabelle zeigt die Anzahl der Felder der jeweiligen Zeichenblattformate:
{| class="wikitable"
|-
! !! A0 !! A1 !! A2 !! A3 !! A4
|-
| lange Seite || 24 || 16 || 12 || 8 || 6
|-
| kurze Seite || 16 || 12 || 8 || 6 || 4
|}
[[File:Begrenzungen.png|ohne|thumb|Begrenzungen bei Zeichnungsvordrucken]]
== Maßstäbe ==
Der Maßstab ist in das Schriftfeld einzutragen. Falls bei Einzelheiten mehrere Maßstäbe in einer Zeichnung vorhanden sind wird dieser in der Nähe der Positionsnummer oder des Kennbuchstaben eingetragen.
{| class="wikitable"
|-
! !! colspan="3" | Empfohlene Maßstäbe
|-
| Vergrößerungsmaßstäbe || 50:1 <br /> 5:1 || 20:1 <br /> 2:1 || 10:1
|-
| Natürlicher Maßstab || || || 1:1
|-
| Verkleinerungsmaßstab || 1:2 <br /> 1:20 <br /> 1:200 <br /> 1:2000 || 1:5 <br /> 1:50 <br /> 1:500 <br /> 1:5000 || 1:10 <br /> 1:100 <br /> 1:1000 <br /> 1:10000
|}
== Faltung ==
Die Faltung dient der Unterbringung in einem A4 Hefter. Es wird unterschieden zwischen Form A (mit angefaltetem Heftrand), Form B (mit zusätzlich angebrachtem Heftrand) und Form C (ohne Heftrand). Das Schriftfeld muss auf der Deckseite in der unteren rechten Ecken lesbar sein.
2ap16fkth00lmmfnvy5d4f9j5m7rf48
Vokabeltexte Chinesisch/ Vokabellektionen/ Lektion 666
0
102459
1086425
1013939
2026-05-20T15:16:21Z
Christian-bauer
6469
kleinere Ergänzungen und Korrekturen
1086425
wikitext
text/x-wiki
<noinclude>
{{Navigation zurückhochvor|
zurücktext=Lektion 665|
zurücklink=Vokabeltexte_Chinesisch/_Vokabellektionen/ Lektion 665|
hochtext=Buch Vokabellektionen|
hochlink=Vokabeltexte_Chinesisch/_Vokabellektionen|
vortext=Lektion 667|
vorlink=Vokabeltexte_Chinesisch/_Vokabellektionen/ Lektion 667}}
</noinclude>
== Zeichen ==
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung !! Lernhilfen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |薛}} || xue1 || Wermut || {{:Vokabeltexte_Chinesisch/ Vorlage:Texte_Zeichen_Externe_Links|Zeichen=薛}}
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |孽}} || nie4 || Sünde, Todsünde, Verbrechen, böse, gespenstisch, Gespenst || {{:Vokabeltexte_Chinesisch/ Vorlage:Texte_Zeichen_Externe_Links|Zeichen=孽}}
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |耆}} || qi2 || alt, 60-jähriger Mann, tyrannisch, verabscheuen || {{:Vokabeltexte_Chinesisch/ Vorlage:Texte_Zeichen_Externe_Links|Zeichen=耆}}
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |蓍}} || shi1 || Bergschafgarbe (Achillea alpina) || {{:Vokabeltexte_Chinesisch/ Vorlage:Texte_Zeichen_Externe_Links|Zeichen=蓍}}
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |皋}} || gao1 || Bank, Böschung || {{:Vokabeltexte_Chinesisch/ Vorlage:Texte_Zeichen_Externe_Links|Zeichen=皋}}
|}
== Zusammengesetzte Wörter ==
=== 薛 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |薛亦}} || xue1 yi4 || Xueyi
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |薛城}} || Xue1 cheng2 || Xuecheng district of Zaozhuang city 棗莊市|枣庄市[Zao3 zhuang1 shi4], Shandong
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |薛稷}} || Xue1 Ji4 || Xue Ji (649-713), one of Four Great Calligraphers of early Tang 唐初四大家[Tang2 chu1 Si4 Da4 jia1]
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |薛城区}} || xue1 cheng2 qu1 || Xuecheng (Gegend in Shandong)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |薛城區}} || xue1 cheng2 qu1 || (traditionelle Schreibweise von 薛城区), Xuecheng (Gegend in Shandong)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |薛维尔}} || xue1 wei2 er3 || Steve Sidwell
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |薛維爾}} || xue1 wei2 er3 || (traditionelle Schreibweise von 薛维尔), Steve Sidwell
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |薛福成}} || Xue1 Fu2 cheng2 || Xue Fucheng (1838-1894), Qing official and progressive political theorist
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |薛居正}} || Xue1 Ju1 zheng4 || Xue Juzheng (912-981), Song historian and compiler of History of the Five Dynasties between Tang and Song 舊五代史|旧五代史
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |薛宝钗}} || Xue1 Bao3 chai1 || Xue Baochai, female character in Dream of Red Mansions, married to Jia Baoyu 賈寶玉|贾宝玉
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |薛仁贵}} || Xue1 Ren2 gui4 || Xue Rengui (614-683) great Tang dynasty general
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |薛仁貴}} || Xue1 Ren2 gui4 || (traditionelle Schreibweise von 薛仁贵), Xue Rengui (614-683) great Tang dynasty general
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |亚达薛西}} || Ya4 da2 xue1 xi1 || Artaxerxes
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |薛万提斯学院}} || xue1 wan4 ti2 si1 xue2 yuan4 || Instituto Cervantes
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |薛萬提斯學院}} || xue1 wan4 ti2 si1 xue2 yuan4 || (traditionelle Schreibweise von 薛万提斯学院), Instituto Cervantes
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |阿尔塔薛西斯三世}} || a1 er3 ta3 xue1 xi1 si1 san1 shi4 || Artaxerxes III, Artaxerxes III.
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |阿爾塔薛西斯三世}} || a1 er3 ta3 xue1 xi1 si1 san1 shi4 || (traditionelle Schreibweise von 阿尔塔薛西斯三世), Artaxerxes III, Artaxerxes III.
|}
=== 孽 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |余孽}} || yun2 e4 || böses Nachspiel, verbleibende Übeltäter
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |餘孽}} || yun2 e4 || (traditionelle Schreibweise von 余孽), böses Nachspiel, verbleibende Übeltäter
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |孽障}} || nie4 zhang4 || Buddhawerdung gefährdende Sünden, Frevel
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |作孽}} || zuo4 nie4 || sündigen, eine Sünde begehen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |罪孽}} || zui4 nie4 || Verbrechen, Sünde
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |妖孽}} || yao1 nie4 || verhexte Sache, rätselhaftes Verhängnis
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |造孽}} || zao4 nie4 || einen Frevel begehen, sündigen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |孽子}} || nie4 zi3 || Bastard
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |孽海花}} || Nie4 hai3 hua1 || Flower in the sea of evil, late Qing novel by Jin Tianhe 金天翮[Jin1 Tian1 he2]
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |自作孽}} || zi4 zuo4 nie4 || disaster one brings on oneself, to be reponsible for something bad that happens to oneself, to have only oneself to blame
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |天灾地孽}} || tian1 zai1 di4 nie4 || catastrophes and unnatural phenomena, Heaven-sent warnings
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |罪孽深重}} || zui4 nie4 shen1 zhong4 || sündhaft
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |宽恕罪孽}} || kuan1 shu4 zui4 nie4 || Schuldenerlass
|}
=== 耆 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |耆宿}} || qi2 su4 || alter respektierter Gelehrter, Nestor seines Faches, Veteran seines Faches
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |焉耆}} || yan1 qi2 || Karashahr
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |黄耆}} || huang2 qi2 || milk vetch, plant genus Astragalus, huangqi 黃芪|黄芪, Astragalus membranaceus (used in TCM)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |黃耆}} || huang2 qi2 || (traditionelle Schreibweise von 黄耆), milk vetch, plant genus Astragalus, huangqi 黃芪|黄芪, Astragalus membranaceus (used in TCM)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |焉耆县}} || yan1 qi2 xian4 || Kreis Yanqi (Provinz Xinjiang, China)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |焉耆縣}} || yan1 qi2 xian4 || (traditionelle Schreibweise von 焉耆县), Kreis Yanqi (Provinz Xinjiang, China)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |伯耆国}} || bo2 qi2 guo2 || Provinz Hoki
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |伯耆國}} || bo2 qi2 guo2 || (traditionelle Schreibweise von 伯耆国), Provinz Hoki
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |耆那教}} || qi2 na4 jiao4 || Jainismus
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |士流耆宿}} || shi4 liu2 qi2 su4 || Intellektelle und Größen (Nestoren) ihrer Fächer
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |焉耆盆地}} || Yan1 qi2 pen2 di4 || Yanqi basin in northeast of Tarim basin
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |爱新觉罗耆英}} || ai4 xin1 jue2 luo2 qi2 ying1 || Aisin-Gioro Ch'i-ying
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |愛新覺羅耆英}} || ai4 xin1 jue2 luo2 qi2 ying1 || (traditionelle Schreibweise von 爱新觉罗耆英), Aisin-Gioro Ch'i-ying
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |焉耆回族自治县}} || yan1 qi2 hui2 zu2 zi4 zhi4 xian4 || Autonomer Kreis Yanqi der Hui (Provinz Xinjiang, China)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |焉耆回族自治縣}} || yan1 qi2 hui2 zu2 zi4 zhi4 xian4 || (traditionelle Schreibweise von 焉耆回族自治县), Autonomer Kreis Yanqi der Hui (Provinz Xinjiang, China)
|}
=== 皋 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |如皋}} || ru2 gao1 || Rugao (Stadt in Jiangsu)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |皋兰}} || gao1 lan2 || Gaolan (Ort in Gansu)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |如皋市}} || ru2 gao1 shi4 || Rugao
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |皋兰县}} || gao1 lan2 xian4 || Kreis Gaolan (Provinz Gansu, China)
|}
== Sätze ==
=== 薛 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |薛偏要在床上看电视}} || xue1 pian1 yao4 zai4 chuang2 shang4 kan4 dian4 shi4 || Xue insists on watching TV in bed. (Mandarin, [https://tatoeba.org/eng/sentences/show/3682953 Tatoeba] [https://tatoeba.org/eng/user/profile/carlosboyero carlosboyero] [https://tatoeba.org/eng/user/profile/pan176 pan176])
|}
=== 孽 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung
|}
=== 耆 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung
|}
=== 蓍 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung
|}
=== 皋 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung
|}
== Lückentexte ==
=== Haenisch: Lehrgang der klassischen chinesischen Schriftsprache ===
第七十七課
第七十七课
dì qī shí qī kè
Siebenundsiebzigste Lektion
Eine Variante des Textes findet man auch im [[s:zh:%E9%9A%8B%E6%9B%B8/%E5%8D%B765| Buch der Sui-Dynastie]].
-----------------------------------
尚武
尚武
Shàng wǔ
Die Kriegskunst schätzen
-----------------------------------
薛世雄幼時與_ Gleichaltriger 游_
薛世雄幼时与群 Gleichaltriger 游戏
xuē shì xióng yòu shí yǔ qún bèi yóu xì
Xue Shiyong spielte in seiner Kindheit mit einer Gruppe Gleichaltriger
-----------------------------------
Variante
世雄為兒童時,與群 Gleichaltriger __
世雄为儿童时,与群 Gleichaltriger 游戏
Shì xióng wèi ér tóng shí, yǔ qún bèi yóu xì
Zur Zeit als Shiyong ein Kind war, spielte er mit einer Gruppe Gleichaltriger
-----------------------------------
畫地為城郭
画地为城郭
huà dì wèi chéng guō
Er zeichnete auf die Erde (eine Stadt mit) innerer und äußerer Stadtmauer.
-----------------------------------
令諸兒為攻守之_
令诸儿为攻守之势
lìng zhū er wéi gōng shǒu zhī shì
Er ließ alle anderen Kinder Angriffs- oder Verteidigungspositionen einnehmen.
-----------------------------------
無不用命
无不用命
Wú bù yòng mìng
Es gab keinen, der nicht seinen Befehlen gehorchte.
-----------------------------------
有不從令者
有不从令者
Yǒu bù cóng lìng zhě
Gab es einen, der nicht seinem Befehl folgte,
-----------------------------------
世雄 sofort 挞之
Shì xióng zhé tà zhī
so schlug Shiyong ihn sofort.
-----------------------------------
諸兒畏_
诸儿畏惮
zhū er wèi dàn
Alle Kinder zitterten vor ihm und fürchteten ihn
-----------------------------------
皆甚齊整
皆甚齐整
jiē shén qí zhěng
Alles war sehr ordentlich angeordnet.
-----------------------------------
其父見之
其父见之
qí fù jiàn zhī
Sein Vater sah dies.
-----------------------------------
大喜
大喜
dà xǐ
Er freute sich sehr.
-----------------------------------
知其後必為名將
知其后必为名将
zhī qí hòu bì wèi míng jiàng
Er erkannte, dass dieser (Shixiong) später gewiss ein berühmter General werden würde.
-----------------------------------
Variante
其父見而奇之
其父见而奇之
Qí fù jiàn ér qí zhī
Sein Vater sah dies und war überrascht.
-----------------------------------
謂人曰
谓人曰
Wèi rén yuē
Er sagte zu den Menschen:
-----------------------------------
此兒當興吾家矣
此儿当兴吾家矣
Cǐ er dāng xìng wú jiā yǐ
Dieser Junge wird meine Familie erblühen lassen
-----------------------------------
後世雄果立_功
后世雄果立战功
hòu shì xióng guǒ lì zhàn gōng
Später vollbrachte Shixiong Kriegserfolge
-----------------------------------
=== Frühling und Herbst des Lü Buwei ===
==== Wiederholungen ====
{| class="wikitable"
|-
! [https://ctext.org/lv-shi-chun-qiu/meng-xia-ji/zhs Erster Sommermonat, 1. Kapitel] !! [http://www.zeno.org/nid/20009211411 Übersetzung Richard Wilhelm]
|-
|是月也,聚 und aufbewahren 百药。 || In diesem Monat sammelt man die verschiedenen Arzneikräuter und bewahrt sie auf.
|-
|Hirschg-草死。 || Das Hirschgras stirbt ab.
|-
|麦秋至。 || Die Weizenernte findet statt.
|-
|断薄刑,决小皋,|| Vergehen, auf denen leichtere Strafen stehen, werden verhandelt und Entscheidungen gefällt über kleinere Übertretungen.
|-
|出轻系。 || Die in leichter Haft befindlichen Personen werden entlassen
|-
|蚕事既毕,Frauen des kaiserlichen Hauses 献 Cocons。 || Nachdem die Seidenzucht zu Ende geführt ist, bringen die Frauen des kaiserlichen Hauses ihre Cocons dar.
|-
|乃收 Cocons 税,以桑为均, || Auch wird die Abgabe von Cocons eingezogen, wobei die Anzahl der Maulbeerbäume zugrunde gelegt wird.
|-
|贵贱少长如一,以给郊庙之祭服。 || Vornehm und Gering, Jung und Alt müssen in der gleichen Weise beisteuern, damit Vorrat vorhanden ist für die Opfergewänder, die beim Angeropfer im Ahnentempel nötig sind.
|-
|是月也,天子饮 starken Wein,用礼乐。 || In diesem Monat hält der Himmelssohn Weingelage ab mit Zeremonien und Musik.
|}
== Texte ==
=== [https://ctext.org/liji/ens Das Buch der Riten] ===
==== [https://ctext.org/liji/tan-gong-i/ens Tan Gong (Teil 1)] ====
{{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |
子蒲卒,哭者呼灭。子皋曰:“若是野哉。”哭者改之。
}}
Übersetzung James Legge
When Zi-pu died, the wailers called out his name Mie. Zi-gao said, 'So rude and uncultivated are they!' On this they changed their style.
{{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |
高子皋之执亲之丧也,泣血三年,未尝见齿,君子以为难。
}}
Übersetzung James Legge
When Gao Zi-gao was engaged with the mourning for his parents, his tears flowed (silently) like blood for three years, and he never (laughed) so as to show his teeth. Superior men considered that he did a difficult thing.
==== [https://ctext.org/liji/tan-gong-ii/ens Tan Gong (Teil 2)] ====
{{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |
季子皋葬其妻,犯人之禾,申祥以告曰:“请庚之。”子皋曰:“孟氏不以是罪予,朋友不以是弃予,以吾为邑长于斯也。买道而葬,后难继也。”
}}
Übersetzung James Legge
When Ji Zi-gao buried his wife, some injury was done to the standing corn, which Shen-xiang told him of, begging him to make the damage good. Zi-gao said, 'The Meng has not blamed me for this, and my friends have not cast me off. I am here the commandant of the city. To buy (in this manner a right of) way in order to bury (my dead) would be a precedent difficult to follow.'
==== [https://ctext.org/liji/jiao-te-sheng/ens Jiao Te Sheng] ====
{{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |
飨禘有乐,而食尝无乐,阴阳之义也。凡饮,养阳气也;凡食,养阴气也。故春禘而秋尝;春飨孤子,秋食耆老,其义一也。而食尝无乐。饮,养阳气也,故有乐;食,养阴气也,故无声。凡声,阳也。
}}
Übersetzung James Legge
In feasting (the orphaned young in spring) and at the vernal sacrifice in the ancestral temple they had music; but in feeding (the aged) and at the autumnal sacrifice they had no music:-these were based in the developing and receding influences (prevalent in nature). All drinking serves to nourish the developing influence; all eating to nourish the receding influence. Hence came the different character of the vernal and autumnal sacrifices; the feasting the orphaned young in spring, and the feeding the aged in autumn:-the idea was the same. But in the feeding and at the autumnal sacrifice there was no music. Drinking serves to nourish the developing influence and therefore is accompanied with music. Eating serves to nourish the receding influence, and therefore is not accompanied with music. All modulation of sound partakes of the character of development.
===[http://www.vuong.ch/wenblog/chinesischesgedichtheimwehamtagdermenschen 薛道衡: 人日思归] ===
Xue Daoheng (540-609): Am Tag der Menschen denke ich an die Rückkehr
{{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |
入春才七日,
离家已二年。
人归落雁后,
思发在花前。
}}
Der Frühlingseintritt ist schon sieben Tage her
Entfernt von der Familie habe ich mich schon seit zwei Jahren
Der Mensch kann erst zurück nach dem Abflug der Gänse
Die Gedanken daran kommen aber schon vor den ersten Blumen
== {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |礼记}} ==
=== Text ===
{{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |至诚之道,可以前知。国家将兴,必有祯祥;国家将亡,必有妖孽。见乎蓍龟,动乎四体。祸福将至:善,必先知之;不善,必先知之。故至诚如神。}}
=== Richard Wilhelm ===
Der Weg der höchsten Wahrheit führt dazu, daß man die Zukunft voraus erkennen kann.
Wenn ein Reich im Begriff ist aufzublühen, so gibt es stets günstige Vorzeichen;
wenn ein Reich im Begriff ist unterzugehen, so gibt es stets unheilvolle Vorzeichen.
Das offenbart sich in Schafgarbe und Schildkröte (beim Orakel) und regt sich in allen Gliedern.
Ob Heil oder Unheil heraufzieht, so gibt es Gutes, das (der Heilige) sicher zum voraus erkennt, und Böses, das er zum voraus erkennt.
Darum ist der, der die höchste Wahrheit hat, göttlich.[38]
=== James Legge ===
It is characteristic of the most entire sincerity to be able to foreknow.
When a nation or family is about to flourish, there are sure to be happy omens;
and when it is about to perish, there are sure to be unlucky omens.
Such events are seen in the milfoil and tortoise, and affect the movements of the four limbs.
When calamity or happiness is about to come, the good shall certainly be foreknown by him, and the evil also.
Therefore the individual possessed of the most complete sincerity is like a spirit.
== {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |中国历史}} ==
{{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |夏后氏自孔甲开始日趋衰落。孔甲逝,其子皋继位。皋逝,其子发继位。这段期间,方国部落与夏室的关系恶化,氏族内部的纠纷也激烈化。发逝后,其子履癸桀继位。桀在位期间,夏室与方国部落的关系已经破裂。桀只顾享乐不顾民间疾苦。
}}
=== Übersetzungshilfe ===
Es ist noch keine Übersetzungshilfe vorhanden
<noinclude>
{{Navigation zurückhochvor|
zurücktext=Lektion 665|
zurücklink=Vokabeltexte_Chinesisch/_Vokabellektionen/ Lektion 665|
hochtext=Buch Vokabellektionen|
hochlink=Vokabeltexte_Chinesisch/_Vokabellektionen|
vortext=Lektion 667|
vorlink=Vokabeltexte_Chinesisch/_Vokabellektionen/ Lektion 667}}
</noinclude>
sbawerkxbcq1n5xr5mikk5pjau11lfm
Vokabeltexte Chinesisch/ Vokabellektionen/ Lektion 667
0
102460
1086424
1013946
2026-05-20T15:13:42Z
Christian-bauer
6469
kleinere Ergänzungen und Korrekturen
1086424
wikitext
text/x-wiki
<noinclude>
{{Navigation zurückhochvor|
zurücktext=Lektion 666|
zurücklink=Vokabeltexte_Chinesisch/_Vokabellektionen/ Lektion 666|
hochtext=Buch Vokabellektionen|
hochlink=Vokabeltexte_Chinesisch/_Vokabellektionen|
vortext=Lektion 668|
vorlink=Vokabeltexte_Chinesisch/_Vokabellektionen/ Lektion 668}}
</noinclude>
== Zeichen ==
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung !! Lernhilfen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |纯}} || chun2 || unverfälscht, unvermischt, rein, pur, keusch, unverdorben, einfach, geübt, bloß, netto || {{:Vokabeltexte_Chinesisch/ Vorlage:Texte_Zeichen_Externe_Links|Zeichen=纯}} (HSK 3.0 Band 4)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |鳖}} || bie1 || Weichschildkröte || {{:Vokabeltexte_Chinesisch/ Vorlage:Texte_Zeichen_Externe_Links|Zeichen=鳖}}
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |抵}} || di3 || stützen, dagegen sein, widerstehen, abstreiten, erreichen, ausgleichen, verpfänden, entschädigen, ersetzen, ankommen || {{:Vokabeltexte_Chinesisch/ Vorlage:Texte_Zeichen_Externe_Links|Zeichen=抵}}
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |娀}} || song1 || Song (Name) || {{:Vokabeltexte_Chinesisch/ Vorlage:Texte_Zeichen_Externe_Links|Zeichen=娀}}
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |鸣}} || ming2 || das Singen der Vögel, läuten, weinen, rufen, schreien, aussprechen, zwitschern, krähen, zirpen, trillern || {{:Vokabeltexte_Chinesisch/ Vorlage:Texte_Zeichen_Externe_Links|Zeichen=鸣}}
|}
== Zusammengesetzte Wörter ==
=== 纯 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung !! Lernhilfen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |纯朴}} || chun2 pu3 ||einfach || (HSK 3.0 Band 7-9)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |纯属}} || chun2 shu3 || rein, bloß
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |不纯}} || bu4 chun2 || Unreinheit
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |单纯}} || dan1 chun2 || einfach, klar || (HSK 3.0 Band 4)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |纯种}} || chun2 zhong3 || reinrassig, rasserein, Vollblut, Vollblüter, vollblütig
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |纯品}} || chun2 pin3 || Sterling
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |纯重}} || chun2 zhong4 || Eigengewicht
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |纯利}} || chun2 li4 || Rein-, Nettogewinn, Reinerlös
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |纯洁}} || chun2 jie2 || keusch, rein, unschuldig || (HSK 3.0 Band 7-9)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |纯爱}} || chun2 ai4 || geliebt
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |纯态}} || chun2 tai4 || Reiner Zustand
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |纯灰}} || chun2 hui1 || echtgrau
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |纯熟}} || chun2 shu2 || geübt
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |纯度}} || chun2 du4 || Reinheit, Lauterkeit, Reinheitsgrad
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |纯碱}} || chun2 jian3 || kalzinierte Soda
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |曹纯}} || cao2 chun2 || Cao Chun
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |提纯}} || ti2 chun2 || Entschlackung, Klärung, Säuberungsaktion, Sublimation, Sublimierung, Veredelung, Verfeinerung, aufbereiten, klären, läutern, raffinieren, raffiniert
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |纯正}} || chun2 zheng4 || echt, rein, lauter
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |超纯量}} || chao1 chun2 liang4 || Superskalarität
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |纯种马}} || chun2 zhong3 ma3 || Vollblutpferd, Rassepferd
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |张纯如}} || zhang1 chun2 ru2 || Iris Chang
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |纯种犬}} || chun2 zhong3 quan3 || rasserein
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |纯净水}} || chun2 jing4 shui3 || aufbereitetes Wasser || (HSK 3.0 Band 4)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |纯蛋卷}} || chun2 dan4 juan3 || Omelett
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |纯利润}} || chun2 li4 run4 || Nettogewinn
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |纯五度}} || chun2 wu3 du4 || Quinte
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |纯数学}} || chun2 shu4 xue2 || reine Mathematik
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |纯位数}} || chun2 wei4 shu4 || Schnapszahl (z.B. 33, 66)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |纯电子}} || chun2 dian4 zi3 || vollelektronisch
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |纯利息}} || chun2 li4 xi1 || Nettoverzinsung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |纯收益}} || chun2 shou1 yi4 || Nettogewinn, reiner Ertrag, Reingewinn
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |不纯洁}} || bu4 chun2 jie2 || Unreinheit
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |纯收入}} || chun2 shou1 ru4 || Nettoeinkommen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |炉火纯情}} || lu2 huo3 chun2 qing1 || von höchster Vollendung, den höchsten Grad der Perfektion erreichen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |爐火纯情}} || lu2 huo3 chun2 qing1 || (traditionelle Schreibweise von 炉火纯情), von höchster Vollendung, den höchsten Grad der Perfektion erreichen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |单纯形法}} || dan1 chun2 xing2 fa3 || Simplex-Verfahren
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |纯平屏幕}} || chun2 ping2 ping2 mu4 || Flachbildschirm
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |纯全无疵}} || chun2 quan2 wu2 ci1 || Untadelig
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |一休宗纯}} || yi1 xiu1 zong1 chun2 || Ikkyu Sojun
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |纯化论者}} || chun2 hua4 lun4 zhe3 || Purist
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |高纯气体}} || gao1 chun2 qi4 ti3 || hochreines Gas
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |纯电动车}} || chun2 dian4 dong4 che1 || Auto nur mit Elektroantrieb, reines Elektrofahrzeug
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |小泉纯一郎}} || xiao3 quan2 chun2 yi1 lang2 || Koizumi Junichirô
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |纯平显示器}} || chun2 ping2 xian3 shi4 qi4 || Flachbildschirm
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |纯文本类型}} || chun2 wen2 ben3 lei4 xing2 || Textsorte
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |纯素食主义}} || chun2 su4 shi2 zhu3 yi4 || Veganismus
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |纯电子交易}} || chun2 dian4 zi3 jiao1 yi4 || Exchange Electronic Trading, Xetra
|}
=== 鳖 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |土鳖}} || tu3 bie1 || chinesischer Bodenkäfer, Bauernlümmel, Tölpel,
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |地鳖}} || di4 bie1 || Chinese ground beetle (Eupolyphaga sinensis), used in TCM
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |鳖甲}} || bie1 jia3 || turtle shell
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |鳖裙}} || bie1 qun2 || calipash
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |马鳖}} || ma3 bie1 || leech
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |山瑞鳖}} || shan1 rui4 bie1 || wattle-necked soft-shelled turtle (Palea steindachneri)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |番木鳖碱}} || fan1 mu4 bie1 jian3 || Strychnin
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |龟笑鳖无尾}} || gui1 xiao4 bie1 wu2 wei3 || lit. a tortoise laughing at a soft-shelled turtle for having no tail, fig. the pot calling the kettle black
|}
=== 抵 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung !! Lernhilfen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |抵挡}} || di3 dang3 || standhalten || (HSK 3.0 Band 7-9)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |抵罪}} || di3 zui4 || Schuld büßen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |抵赖}} || di3 lai4 || leugnen, abstreiten
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |抵达}} || di3 da2 || eintreffen in ... || (HSK 3.0 Band 6)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |抵御}} || di3 yu4 || abwehren, widerstehen, erwehren, Verteidigung || (HSK 3.0 Band 7-9)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |抵针}} || di3 zhen1 || Fingerhut
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |抵扣}} || di3 kou4 || ausgleichen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |抵触}} || di3 chu4 || in Wiederspruch zu etwas stehen || (HSK 3.0 Band 7-9)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |抵死}} || di3 si3 || auf jeden Fall!, unbedingt
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |安抵}} || an4 di3 || wohlbehalten eingetroffen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |案抵}} || an4 di3 || (traditionelle Schreibweise von 安抵), wohlbehalten eingetroffen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |冲抵}} || chong1 di3 || Aufrechnung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |抵抗}} || di3 kang4 || jemanden Widerstand Leisten || (HSK 3.0 Band 6)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |抵港}} || di3 gang3 || im Hafen einlaufen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |抵消}} || di3 xiao1 || Storno, stornieren || (HSK 3.0 Band 7-9)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |抵制}} || di3 zhi4 || boykottieren || (HSK 3.0 Band 7-9)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |抵押}} || di3 ya1 || Hypothek || (HSK 3.0 Band 7-9)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |抵押权}} || di3 ya1 quan2 || Hypothek
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |无抵抗}} || wu2 di3 kang4 || Passivität
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |無抵抗}} || wu2 di3 kang4 || (traditionelle Schreibweise von 无抵抗), Passivität
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |不抵抗}} || bu4 di3 kang4 || nicht widerstandsfähig
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |抵押品}} || di3 ya1 pin3 || Pfand
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |抵抗力}} || di3 kang4 li4 || Abwehrkräfte
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |抵押款}} || di3 ya2 kuan3 || Pfand, Pfande
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |可抵抗}} || ke3 di3 kang4 || widerstehlich
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |抵押契据}} || di3 ya2 qi4 ju4 || Pfandbrief
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |市场抵触}} || shi4 chang3 di3 chu4 || Marktwiderstand
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |收支相抵}} || shou1 zhi1 xiang1 di3 || Kosten decken
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |抵押证券}} || di3 ya1 zheng4 quan4 || Kaufbrief
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |不能抵抗}} || bu4 neng2 di3 kang4 || unaufhaltsam, unwiderstehlich, Unwiderstehlichkeit
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |抵押放款}} || di3 ya1 fang4 kuan3 || Lombardkredit
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |抵押银行}} || di3 ya1 yin2 hang2 || Hypothekenbank
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |抵押銀行}} || di3 ya1 yin2 hang2 || (traditionelle Schreibweise von 抵押银行), Hypothekenbank
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |无抵抗力}} || wu2 di3 kang4 li4 || Wehrlosigkeit, anfällig, labil
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |無抵抗力}} || wu2 di3 kang4 li4 || (traditionelle Schreibweise von 无抵抗力), Wehrlosigkeit, anfällig, labil
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |感应抵抗}} || gan3 ying4 di3 kang4 || Blindwiderstand, Reaktanz
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |感應抵抗}} || gan3 ying4 di3 kang4 || (traditionelle Schreibweise von 感应抵抗), Blindwiderstand, Reaktanz
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |抵御风暴}} || di3 yu4 feng1 bao4 || sturmfest
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |联合抵制}} || lian2 he2 di3 zhi4 || Boykott
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |抵达时间}} || di3 da2 shi2 jian1 || Ankunftszeit
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |抵抗运动}} || di3 kang4 yun4 dong4 || Untergrundorganisation
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |抵抗運動}} || di3 kang4 yun4 dong4 || (traditionelle Schreibweise von 抵抗运动), Untergrundorganisation
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |担保抵押权}} || dan1 bao3 di3 ya1 quan2 || Sicherungshypothek
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |胰岛素抵抗}} || yi2 dao3 su4 di3 kang4 || Insulinresistenz
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |家书抵万金}} || jia1 shu1 di3 wan4 jin1 || Ein Brief von zu Hause ist tausend Gold wert.
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |家書抵萬金}} || jia1 shu1 di3 wan4 jin1 || (traditionelle Schreibweise von 家书抵万金), Ein Brief von zu Hause ist tausend Gold wert.
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |抵押贷款能力}} || di3 ya2 dai4 kuan3 neng2 li4 || Lombardfähigkeit
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |抵消加班时间}} || di3 xiao1 jia1 ban1 shi2 jian1 || abbummeln
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |抵消加班時間}} || di3 xiao1 jia1 ban1 shi2 jian1 || (traditionelle Schreibweise von 抵消加班时间), abbummeln
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |地产抵押危机}} || di4 chan3 di3 ya1 wei1 ji1 || Hypothekenkrise
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |地產抵押危機}} || di4 chan3 di3 ya1 wei1 ji1 || (traditionelle Schreibweise von 地产抵押危机), Hypothekenkrise
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |证券抵押贷款}} || zheng4 quan4 di3 ya2 dai4 kuan3 || Lombardkredit
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |地产抵押马克}} || di4 chan3 di3 ya1 ma3 ke4 || Rentenmark
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |地產抵押馬克}} || di4 chan3 di3 ya1 ma3 ke4 || (traditionelle Schreibweise von 地产抵押马克), Rentenmark
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |不抵抗主义者}} || bu4 di3 kang4 zhu3 yi4 zhe3 || Pazifist
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |不抵抗主義者}} || bu4 di3 kang4 zhu3 yi4 zhe3 || (traditionelle Schreibweise von 不抵抗主义者), Pazifist
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |抵押贷款利率}} || di3 ya2 dai4 kuan3 li4 lü4 || Lombardsatz
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |政府全国抵押协会}} || zheng4 fu3 quan2 guo2 di3 ya1 xie2 hui4 || Ginnie Mae, Government National Mortgage Association
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |政府国家抵押协会}} || zheng4 fu3 guo2 jia1 di3 ya1 xie2 hui4 || Ginnie Mae
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |德国房地产抵押银行}} || de2 guo2 fang2 di4 chan3 di3 ya1 yin2 hang2 || Hypo Real Estate
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |德國房地產抵押銀行}} || de2 guo2 fang2 di4 chan3 di3 ya1 yin2 hang2 || (traditionelle Schreibweise von 德国房地产抵押银行), Hypo Real Estate
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |保证金担保金抵押金}} || bao3 zheng4 jin1 dan1 bao3 jin1 di3 ya1 jin1 || Garantiefonds
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |对危机有抵抗能力的}} || dui4 wei1 ji1 you3 di3 kang4 neng2 li4 de5 || krisenfest
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |對危機有抵抗能力的}} || dui4 wei1 ji1 you3 di3 kang4 neng2 li4 de5 || (traditionelle Schreibweise von 对危机有抵抗能力的), krisenfest
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |对危机无抵抗能力的}} || dui4 wei1 ji1 wu2 di3 kang4 neng2 li4 de5 || krisenanfällig
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |對危機無抵抗能力的}} || dui4 wei1 ji1 wu2 di3 kang4 neng2 li4 de5 || (traditionelle Schreibweise von 对危机无抵抗能力的), krisenanfällig
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |违反宪法与宪法相抵触}} || wei2 fan3 xian4 fa3 yu3 xian4 fa3 xiang1 di3 chu4 || Verfassungsbruch
|}
=== 鸣 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung !! Lernhilfen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |蛙鸣}} || wa1 ming2 || Quaken, Froschquaken, quaken
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |哀鸣}} || ai1 ming2 || klagen, jammern
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |耳鸣}} || er3 ming2 || Tinnitus
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |鸣叫}} || ming2 jiao4 || heulen, johlen, schreien
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |武鸣}} || wu3 ming2 || Wuming (Ort in Guangxi)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |共鸣}} || gong4 ming2 || Resonanz, Resonanz, Sympathie, ertönen || (HSK 3.0 Band 7-9)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |鸣枪}} || ming2 qiang1 || Schüsse abfeuern
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |争鸣}} || zheng1 ming2 || wetteifern
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |鸣谢}} || ming2 xie4 || formaler Dank
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |鸟鸣}} || niao3 ming2 || Piep
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |齐鸣}} || qi2 ming2 || Salve
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |鸣声}} || ming2 sheng1 || Heulton
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |雷鸣}} || lei2 ming2 || donnern, Donner
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |鸣号}} || ming2 hao4 || hupen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |爆鸣气}} || bao4 ming2 qi4 || Knallgas
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |自鸣钟}} || zi4 ming2 zhong1 || Uhr mit Glockenspiel
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |共鸣管}} || gong4 ming2 guan3 || Resonator
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |鸣不平}} || ming2 bu4 ping2 || sich über ungerechte Behandlung beklagen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |共鸣体}} || gong4 ming2 ti3 || Resonator
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |奏鸣曲}} || zou4 ming2 qu3 || Sonate
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |鸡鸣狗盗}} || ji1 ming2 gou3 dao4 || armseliger Trick, kümmerliche Fähigkeiten
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |孤掌难鸣}} || gu1 zhang3 nan2 ming2 || ein einzelner kann schwer etwas zustande bringen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |奏鸣曲式}} || zou4 ming2 qu3 shi4 || Sonatenhauptsatzform
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |自鸣得意}} || zi4 ming2 de2 yi4 || selbstgefällig, mit sich selbstsehr zufrieden sein, blasiert
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |百家争鸣}} || bai3 jia1 zheng1 ming2 || 100 Lehrmeinungen wetteifern miteinander
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |一鸣惊人}} || yi1 ming2 jing1 ren2 || mit einem Schlag berühmt werden
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |鸣响的东西}} || ming2 xiang3 de5 dong1 xi5 || Klopfer
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |大鸣大放运动}} || Da4 ming2 da4 fang4 Yun4 dong4 || see 百花運動|百花运动[Bai3 hua1 Yun4 dong4]
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |雷鸣般的隆隆声}} || lei2 ming2 ban1 de5 long2 long2 sheng1 || Donnergrollen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |极光奏鸣曲乐团}} || ji2 guang1 zou4 ming2 qu3 le4 tuan2 || Sonata Arctica
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |使东西鸣响的人}} || shi3 dong1 xi5 ming2 xiang3 de5 ren2 || Klopfer
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |百花齐放百家争鸣}} || bai3 hua1 qi2 fang4 bai3 jia1 zheng1 ming2 || Lasst hundert Blumen blühen und hundert Schulen miteinander streiten
|}
== Sätze ==
=== 纯 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我从没见过胖的纯素食者。}} || wo3 cong2 mei2/mo4 jian4/xian4 guo4 pang4 de5 chun3 su4 shi2 zhe3 。|| Ich habe noch nie eine dicke vegane Person gesehen. (Mandarin, [https://tatoeba.org/eng/sentences/show/10342310 Tatoeba] [https://tatoeba.org/eng/user/profile/iiujik iiujik] [https://tatoeba.org/eng/user/profile/pullnosemans pullnosemans])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |他们是纯素食者。}} || ta1 men5 shi4 chun3 su4 shi2 zhe3 。|| They're vegan. They're vegans. (Mandarin, [https://tatoeba.org/eng/sentences/show/10342285 Tatoeba] [https://tatoeba.org/eng/user/profile/iiujik iiujik] [https://tatoeba.org/eng/user/profile/shekitten shekitten])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |你是素食主义者还是纯素食者吗?}} || ni3 shi4 su4 shi2 zhu3 yi4 zhe3 hai2/huan2 shi4 chun3 su4 shi2 zhe3 ma5 ?|| Bist du Vegetarier oder Veganer? (Mandarin, [https://tatoeba.org/eng/sentences/show/10314305 Tatoeba] [https://tatoeba.org/eng/user/profile/iiujik iiujik] [https://tatoeba.org/eng/user/profile/Esperantostern Esperantostern])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我们不是纯素食的。}} || wo3 men5 bu4 shi4 chun3 su4 shi2 de5 。|| Wir sind keine Veganer. (Mandarin, [https://tatoeba.org/eng/sentences/show/10342303 Tatoeba] [https://tatoeba.org/eng/user/profile/iiujik iiujik] [https://tatoeba.org/eng/user/profile/Pfirsichbaeumchen Pfirsichbaeumchen])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |他喝了一杯纯威士忌酒。}} || ta1 he1 le5 yi1 bei1 chun3 wei1 shi4 ji4 jiu3 。|| Er trank ein Glas puren Whisky. (Mandarin, [https://tatoeba.org/eng/sentences/show/778011 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/Yorwba Yorwba])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我们是纯素食者。}} || wo3 men5 shi4 chun3 su4 shi2 zhe3 。|| We're vegans. (Mandarin, [https://tatoeba.org/eng/sentences/show/10342286 Tatoeba] [https://tatoeba.org/eng/user/profile/iiujik iiujik] [https://tatoeba.org/eng/user/profile/CK CK])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |她有一颗纯洁的心。}} || ta1 you3 yi1 ke1 chun3 jie2 de5 xin1 。|| Sie hat ein reines Herz. (Mandarin, [https://tatoeba.org/eng/sentences/show/866757 Tatoeba] [https://tatoeba.org/eng/user/profile/kooler kooler] [https://tatoeba.org/eng/user/profile/jakov jakov])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |动物们不能选择成为纯素食的。}} || dong4 wu4 men5 bu4 neng2 xuan3 ze2 cheng2 wei2/wei4 chun3 su4 shi2 de5 。|| Animals can't choose to be vegan. (Mandarin, [https://tatoeba.org/eng/sentences/show/10342307 Tatoeba] [https://tatoeba.org/eng/user/profile/iiujik iiujik] [https://tatoeba.org/eng/user/profile/islandisto islandisto])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |他是纯素食者。}} || ta1 shi4 chun3 su4 shi2 zhe3 。|| He's vegan. He's a vegan. (Mandarin, [https://tatoeba.org/eng/sentences/show/10342284 Tatoeba] [https://tatoeba.org/eng/user/profile/iiujik iiujik] [https://tatoeba.org/eng/user/profile/CH CH])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |样本不够纯净。}} || yang4 ben3 bu4 gou4 chun3 jing4 。|| The sample is not pure enough. The sample isn't pure enough. (Mandarin, [https://tatoeba.org/eng/sentences/show/1787958 Tatoeba] [https://tatoeba.org/eng/user/profile/sadhen sadhen] [https://tatoeba.org/eng/user/profile/Scott Scott] [https://tatoeba.org/eng/user/profile/CK CK])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |那个发现纯属偶然。}} || na4/nei4 ge4 fa1 xian4 chun3 shu3 偶 ran2 。|| Diese Entdeckung war völlig zufällig. (Mandarin, [https://tatoeba.org/eng/sentences/show/332427 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/Tamy Tamy])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |汤姆是纯素食者。}} || tang1 mu3 shi4 chun3 su4 shi2 zhe3 。|| Tom ist Veganer. (Mandarin, [https://tatoeba.org/eng/sentences/show/10314298 Tatoeba] [https://tatoeba.org/eng/user/profile/iiujik iiujik] [https://tatoeba.org/eng/user/profile/Luiaard Luiaard])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |那是纯金吗?}} || na4/nei4 shi4 chun3 jin1 ma5 ?|| Ist das reines Gold? (Mandarin, [https://tatoeba.org/eng/sentences/show/826064 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/MUIRIEL MUIRIEL])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |这个苹果汁是纯的。}} || zhe4/zhei4 ge4 ping2 guo3 zhi1 shi4 chun3 de5 。|| This apple juice is pure. (Mandarin, [https://tatoeba.org/eng/sentences/show/5548528 Tatoeba] [https://tatoeba.org/eng/user/profile/egg0073 egg0073] [https://tatoeba.org/eng/user/profile/jshholland jshholland])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |纯素食者们不吃任何动物产品。}} || chun3 su4 shi2 zhe3 men5 bu4 chi1 ren4 he2 dong4 wu4 chan3 pin3 。|| Veganer essen nichts, was von Tieren stammt. (Mandarin, [https://tatoeba.org/eng/sentences/show/10342308 Tatoeba] [https://tatoeba.org/eng/user/profile/iiujik iiujik] [https://tatoeba.org/eng/user/profile/Pfirsichbaeumchen Pfirsichbaeumchen])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |萨米是纯素食者。}} || sa4 mi3 shi4 chun3 su4 shi2 zhe3 。|| Sami is vegan. (Mandarin, [https://tatoeba.org/eng/sentences/show/10342283 Tatoeba] [https://tatoeba.org/eng/user/profile/iiujik iiujik] [https://tatoeba.org/eng/user/profile/OsoHombre OsoHombre])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我是纯素食者,但我的猫不是。}} || wo3 shi4 chun3 su4 shi2 zhe3 , dan4 wo3 de5 mao1 bu4 shi4 。|| Ich bin Veganer, aber meine Katze nicht. (Mandarin, [https://tatoeba.org/eng/sentences/show/10314309 Tatoeba] [https://tatoeba.org/eng/user/profile/iiujik iiujik] [https://tatoeba.org/eng/user/profile/Yorwba Yorwba])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |汤姆吃了纯素食千层面。}} || tang1 mu3 chi1 le5 chun3 su4 shi2 qian1 ceng2 mian4 。|| Tom ate vegan lasagna. (Mandarin, [https://tatoeba.org/eng/sentences/show/10342296 Tatoeba] [https://tatoeba.org/eng/user/profile/iiujik iiujik] [https://tatoeba.org/eng/user/profile/Hybrid Hybrid])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |汤姆成为了纯素食者。}} || tang1 mu3 cheng2 wei2/wei4 le5 chun3 su4 shi2 zhe3 。|| Tom became a vegan. (Mandarin, [https://tatoeba.org/eng/sentences/show/10342298 Tatoeba] [https://tatoeba.org/eng/user/profile/iiujik iiujik] [https://tatoeba.org/eng/user/profile/Eccles17 Eccles17])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |纯子是一个美女。}} || chun3 zi5 shi4 yi1 ge4 mei3 nü3/ru3 。|| Junko ist ein schönes Mädchen. (Mandarin, [https://tatoeba.org/eng/sentences/show/2158917 Tatoeba] [https://tatoeba.org/eng/user/profile/faraway9911 faraway9911] [https://tatoeba.org/eng/user/profile/MUIRIEL MUIRIEL])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |纯真是一件美好的事。}} || chun3 zhen1 shi4 yi1 jian4 mei3 hao3 de5 shi4 。|| Unschuld ist eine schöne Sache. (Mandarin, [https://tatoeba.org/eng/sentences/show/501346 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/MUIRIEL MUIRIEL])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |饼干都是纯素的。}} || 饼 gan1/qian2 dou1/du1 shi4 chun3 su4 de5 。|| Die Kekse sind vegan. (Mandarin, [https://tatoeba.org/eng/sentences/show/10342301 Tatoeba] [https://tatoeba.org/eng/user/profile/iiujik iiujik] [https://tatoeba.org/eng/user/profile/Yorwba Yorwba])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我还记得我第一次去中国,我在山东,意识到那个单纯的省比英格兰大两万六千平方公里。}} || wo3 hai2/huan2 ji4 de2/de5/dei3 wo3 di4 yi1 ci4 qu4 zhong1/zhong4 guo2 , wo3 zai4 shan1/shan5 dong1 , yi4 zhi4 dao4 na4/nei4 ge4 dan1/shan2 chun3 de5 sheng3/xing3 bi4 ying1 ge2 lan2 da4 liang3 wan4 liu4 qian1 ping2 fang1 gong1 li3 。|| I still remember the first time I was in China; I was in Shandong, and I realised that that province alone is twenty six thousand square kilometres bigger than England. (Mandarin, [https://tatoeba.org/eng/sentences/show/905833 Tatoeba] [https://tatoeba.org/eng/user/profile/eastasiastudent eastasiastudent])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我是纯素食者。}} || wo3 shi4 chun3 su4 shi2 zhe3 。|| Ich bin Veganer. (Mandarin, [https://tatoeba.org/eng/sentences/show/1335244 Tatoeba] [https://tatoeba.org/eng/user/profile/Saney Saney] [https://tatoeba.org/eng/user/profile/MUIRIEL MUIRIEL])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |汤姆决定了成为纯素食者。}} || tang1 mu3 jue2 ding4 le5 cheng2 wei2/wei4 chun3 su4 shi2 zhe3 。|| Tom has decided to become a vegan. (Mandarin, [https://tatoeba.org/eng/sentences/show/10342305 Tatoeba] [https://tatoeba.org/eng/user/profile/iiujik iiujik] [https://tatoeba.org/eng/user/profile/shekitten shekitten])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |萨米要求了纯素食食物。}} || sa4 mi3 yao4 qiu2 le5 chun3 su4 shi2 shi2 wu4 。|| Sami requested vegan food. (Mandarin, [https://tatoeba.org/eng/sentences/show/10342299 Tatoeba] [https://tatoeba.org/eng/user/profile/iiujik iiujik] [https://tatoeba.org/eng/user/profile/OsoHombre OsoHombre])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |这家餐厅提供纯素食菜吗?}} || zhe4/zhei4 jia1 餐 ting1 ti2 gong4 chun3 su4 shi2 cai4 ma5 ?|| Serviert dieses Restaurant vegane Gerichte? (Mandarin, [https://tatoeba.org/eng/sentences/show/10342309 Tatoeba] [https://tatoeba.org/eng/user/profile/iiujik iiujik] [https://tatoeba.org/eng/user/profile/carlosalberto carlosalberto])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |手段的不纯洁,必然导致目的的不纯洁。}} || shou3 duan4 de5 bu4 chun3 jie2 , bi4 ran2 dao3 zhi4 mu4 de5 de5 bu4 chun3 jie2 。|| Unlautere Mittel führen zwingend zu unlauteren Zielen. (Mandarin, [https://tatoeba.org/eng/sentences/show/3130853 Tatoeba] [https://tatoeba.org/eng/user/profile/sadhen sadhen] [https://tatoeba.org/eng/user/profile/Yorwba Yorwba])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |爱你自己,成为纯素食者!}} || ai4 ni3 zi4 ji3 , cheng2 wei2/wei4 chun3 su4 shi2 zhe3 !|| Sei gut zu dir. Werd vegan! (Mandarin, [https://tatoeba.org/eng/sentences/show/10342293 Tatoeba] [https://tatoeba.org/eng/user/profile/iiujik iiujik] [https://tatoeba.org/eng/user/profile/pullnosemans pullnosemans])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |留西雅是一个很单纯的姑娘。}} || liu2 xi1 ya3 shi4 yi1 ge4 hen3 dan1/shan2 chun3 de5 gu1 niang2 。|| Lucia is a simple kind of girl. (Mandarin, [https://tatoeba.org/eng/sentences/show/6037679 Tatoeba] [https://tatoeba.org/eng/user/profile/xjjAstrus xjjAstrus] [https://tatoeba.org/eng/user/profile/austininchina austininchina])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |汤姆不是纯素食者。}} || tang1 mu3 bu4 shi4 chun3 su4 shi2 zhe3 。|| Tom ist kein Veganer. (Mandarin, [https://tatoeba.org/eng/sentences/show/10342300 Tatoeba] [https://tatoeba.org/eng/user/profile/iiujik iiujik] [https://tatoeba.org/eng/user/profile/Pfirsichbaeumchen Pfirsichbaeumchen])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |纯素食者们闻起来更好。}} || chun3 su4 shi2 zhe3 men5 wen2 qi3 lai2 geng4 hao3 。|| Veganer riechen besser. (Mandarin, [https://tatoeba.org/eng/sentences/show/10342282 Tatoeba] [https://tatoeba.org/eng/user/profile/iiujik iiujik] [https://tatoeba.org/eng/user/profile/Esperantostern Esperantostern])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |欧洲人每年平均饮用十二点五公升的纯酒精。}} || ou1 zhou1 ren2 mei3 nian2 ping2 jun1 yin3 yong4 shi2 er4 dian3 wu3 gong1 sheng1 de5 chun3 jiu3 jing1 。|| Europeans drink, on average, 12.5 liters of pure alcohol per year. (Mandarin, [https://tatoeba.org/eng/sentences/show/3364399 Tatoeba] [https://tatoeba.org/eng/user/profile/kaenif kaenif] [https://tatoeba.org/eng/user/profile/_undertoad _undertoad])
|}
=== 鳖 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung
|}
=== 抵 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |他明天将抵达巴黎。}} || ta1 ming2 tian1 jiang1/jiang4 抵 da2 ba1 li2 。|| Er wird morgen in Paris ankommen. (Mandarin, [https://tatoeba.org/eng/sentences/show/848528 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/MUIRIEL MUIRIEL])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我们走了十分钟就抵达了博物馆。}} || wo3 men5 zou3 le5 shi2 fen1 zhong1 jiu4 抵 da2 le5 bo2 wu4 guan3 。|| Wir erreichten das Museum nach zehn Minuten Fußweg. (Mandarin, [https://tatoeba.org/eng/sentences/show/9419141 Tatoeba] [https://tatoeba.org/eng/user/profile/BobbyLee BobbyLee] [https://tatoeba.org/eng/user/profile/Tamy Tamy])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |他们将於下个星期的今天抵达。}} || ta1 men5 jiang1/jiang4 yu2 xia4 ge4 xing1 ji1/qi1 de5 jin1 tian1 抵 da2 。|| They will arrive a week from today. (Mandarin, [https://tatoeba.org/eng/sentences/show/895024 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/CK CK])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |他们就快从香港抵达了。}} || ta1 men5 jiu4 kuai4 cong2 xiang1 gang3 抵 da2 le5 。|| Sie werden bald aus Hongkong eintreffen. (Mandarin, [https://tatoeba.org/eng/sentences/show/333313 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/xtofu80 xtofu80])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |他们抵达了酒店。}} || ta1 men5 抵 da2 le5 jiu3 dian4 。|| They arrived at the hotel. (Mandarin, [https://tatoeba.org/eng/sentences/show/7858035 Tatoeba] [https://tatoeba.org/eng/user/profile/basilhan basilhan] [https://tatoeba.org/eng/user/profile/CK CK])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |他明天抵达京都。}} || ta1 ming2 tian1 抵 da2 jing1 dou1/du1 。|| Morgen kommt er in Kioto an. (Mandarin, [https://tatoeba.org/eng/sentences/show/739497 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/Zaghawa Zaghawa])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |他们昨天平安抵达这裡。}} || ta1 men5 zuo2 tian1 ping2 an1 抵 da2 zhe4/zhei4 li3 。|| Sie sind gestern sicher hier angekommen. (Mandarin, [https://tatoeba.org/eng/sentences/show/779064 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/qweruiop qweruiop])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |停止抵抗!}} || ting2 zhi3 抵 kang4 !|| Hör auf, dich zu wehren! (Mandarin, [https://tatoeba.org/eng/sentences/show/5102240 Tatoeba] [https://tatoeba.org/eng/user/profile/mirrorvan mirrorvan] [https://tatoeba.org/eng/user/profile/Pfirsichbaeumchen Pfirsichbaeumchen])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |他们在四时抵达了酒店。}} || ta1 men5 zai4 si4 shi2 抵 da2 le5 jiu3 dian4 。|| Um Punkt vier erreichten sie das Hotel. (Mandarin, [https://tatoeba.org/eng/sentences/show/762546 Tatoeba] [https://tatoeba.org/eng/user/profile/nickyeow nickyeow] [https://tatoeba.org/eng/user/profile/Sudajaengi Sudajaengi])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |为什么要准时抵达,毕竟大家都迟到。}} || wei2/wei4 shi2 me5 yao4 zhun3 shi2 抵 da2 , bi4 jing4 da4 jia1 dou1/du1 chi2/zhi4 dao4 。|| Warum pünktlich sein, wenn doch alle zu spät kommen? (Mandarin, [https://tatoeba.org/eng/sentences/show/9419167 Tatoeba] [https://tatoeba.org/eng/user/profile/BobbyLee BobbyLee] [https://tatoeba.org/eng/user/profile/Yorwba Yorwba])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我们ACME有限公司,特此宣布,我们将尽我们的力量抵制这种恶意收购。}} || wo3 men5 ACME you3 xian4 gong1 si1 , te2/te4 ci3 xuan1 bu4 , wo3 men5 jiang1/jiang4 jin4 wo3 men5 de5 li4 liang2/liang4 抵 zhi4 zhe4/zhei4 chong2/zhong3/zhong4 e4/wu4 yi4 shou1 gou4 。|| Wir, ACME GmbH, verkünden hiermit, dass wir uns mit aller Macht gegen diese feindliche Übernahme stemmen werden. (Mandarin, [https://tatoeba.org/eng/sentences/show/881840 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/Yorwba Yorwba])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |中午,我抵达东京。}} || zhong1/zhong4 wu3 , wo3 抵 da2 dong1 jing1 。|| Ich bin am Mittag in Tōkyō angekommen. (Mandarin, [https://tatoeba.org/eng/sentences/show/1785971 Tatoeba] [https://tatoeba.org/eng/user/profile/sadhen sadhen] [https://tatoeba.org/eng/user/profile/Pfirsichbaeumchen Pfirsichbaeumchen])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |他们何时抵达?}} || ta1 men5 he2 shi2 抵 da2 ?|| Wann werden sie ankommen? (Mandarin, [https://tatoeba.org/eng/sentences/show/780372 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/Hans_Adler Hans_Adler])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |他昨天抵达东京。}} || ta1 zuo2 tian1 抵 da2 dong1 jing1 。|| Er kam gestern in Tokyo an. (Mandarin, [https://tatoeba.org/eng/sentences/show/834377 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/Esperantostern Esperantostern])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我今天早上抵达了成田机场。}} || wo3 jin1 tian1 zao3 shang4 抵 da2 le5 cheng2 tian2 ji1 chang3 。|| I arrived at Narita Airport this morning. (Mandarin, [https://tatoeba.org/eng/sentences/show/887820 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/CN CN])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |抵抗是徒劳的。}} || 抵 kang4 shi4 tu2 lao2 de5 。|| Widerstand ist zwecklos. (Mandarin, [https://tatoeba.org/eng/sentences/show/1531619 Tatoeba] [https://tatoeba.org/eng/user/profile/cc_neko cc_neko] [https://tatoeba.org/eng/user/profile/cost cost])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |汤姆现在应该抵达了。}} || tang1 mu3 xian4 zai4 ying1/ying4 gai1 抵 da2 le5 。|| Tom sollte inzwischen angekommen sein. (Mandarin, [https://tatoeba.org/eng/sentences/show/7841376 Tatoeba] [https://tatoeba.org/eng/user/profile/basilhan basilhan] [https://tatoeba.org/eng/user/profile/Pfirsichbaeumchen Pfirsichbaeumchen])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |狂风暴雨造成她无法准时抵达。}} || kuang2 feng1 bao4 yu3 zao4 cheng2 ta1 wu2 fa3 zhun3 shi2 抵 da2 。|| The storm prevented her from arriving on time. (Mandarin, [https://tatoeba.org/eng/sentences/show/602898 Tatoeba] [https://tatoeba.org/eng/user/profile/xiuqin xiuqin] [https://tatoeba.org/eng/user/profile/CK CK])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我刚刚抵达了机场。}} || wo3 gang1 gang1 抵 da2 le5 ji1 chang3 。|| Ich bin gerade am Flughafen angekommen. (Mandarin, [https://tatoeba.org/eng/sentences/show/861076 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/Esperantostern Esperantostern])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |肯已经抵达京都。}} || ken3 yi3 jing4 抵 da2 jing1 dou1/du1 。|| Ken ist in Kyoto angekommen. (Mandarin, [https://tatoeba.org/eng/sentences/show/769688 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/MUIRIEL MUIRIEL])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |难以抵抗给句子押韵的愿望。}} || nan2/nan4 yi3 抵 kang4 gei3 ju4 zi5 ya1 yun4 de5 yuan4 wang4 。|| Es fiel schwer, dem Drang zu widerstehen, den Satz mit Reimen zu versehen. (Mandarin, [https://tatoeba.org/eng/sentences/show/10045058 Tatoeba] [https://tatoeba.org/eng/user/profile/GlossaMatik GlossaMatik] [https://tatoeba.org/eng/user/profile/al_ex_an_der al_ex_an_der])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |汤姆三点左右抵达。}} || tang1 mu3 san1 dian3 zuo3 you4 抵 da2 。|| Tom arrived at about three. (Mandarin, [https://tatoeba.org/eng/sentences/show/9419116 Tatoeba] [https://tatoeba.org/eng/user/profile/BobbyLee BobbyLee] [https://tatoeba.org/eng/user/profile/CK CK])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |难以抵抗给句子押韵的冲动。}} || nan2/nan4 yi3 抵 kang4 gei3 ju4 zi5 ya1 yun4 de5 chong4 dong4 。|| Es fiel schwer, dem Drang zu widerstehen, den Satz mit Reimen zu versehen. (Mandarin, [https://tatoeba.org/eng/sentences/show/10007025 Tatoeba] [https://tatoeba.org/eng/user/profile/GlossaMatik GlossaMatik] [https://tatoeba.org/eng/user/profile/al_ex_an_der al_ex_an_der])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |花代价所换来的一点才智,抵过别人传授的数倍不止。}} || hua1 dai4 jia4/jie4 suo3 huan4 lai2 de5 yi1 dian3 cai2 zhi4 ,抵 guo4 bie2 ren2 chuan2/zhuan4 shou4 de5 shu3/shuo4 bei4 bu4 zhi3 。|| An ounce of wit that is bought is worse a pound that is taught. (Mandarin, [https://tatoeba.org/eng/sentences/show/2165985 Tatoeba] [https://tatoeba.org/eng/user/profile/sadhen sadhen] [https://tatoeba.org/eng/user/profile/FeuDRenais2 FeuDRenais2])
|}
=== 娀 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung
|}
=== 鸣 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |听不到悲鸣了吗?}} || ting1 bu4 dao4 bei1 ming2 le5 ma5 ?|| Hast du nicht den Schrei gehört? (Mandarin, [https://tatoeba.org/eng/sentences/show/810133 Tatoeba] [https://tatoeba.org/eng/user/profile/yutaka yutaka] [https://tatoeba.org/eng/user/profile/xtofu80 xtofu80])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |你耳鸣吗?}} || ni3 er3 ming2 ma5 ?|| Do you have tinnitus? (Mandarin, [https://tatoeba.org/eng/sentences/show/1317019 Tatoeba] [https://tatoeba.org/eng/user/profile/vicch vicch] [https://tatoeba.org/eng/user/profile/hamsolo474 hamsolo474])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |哀只漂亮个鸟一日过一日勿停个一直垃海鸣唱哉。}} || ai1 zhi3 piao1/piao3 liang4 ge4 niao3 yi1 ri4 guo4 yi1 ri4 wu4 ting2 ge4 yi1 zhi2 la1 hai3 ming2 chang4 zai1 。|| That pretty bird did nothing but sing day after day. (Shanghai, [https://tatoeba.org/eng/sentences/show/856565 Tatoeba] [https://tatoeba.org/eng/user/profile/U2FS U2FS] [https://tatoeba.org/eng/user/profile/CM CM])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |麵包比鸟的鸣唱好。}} || mian4 bao1 bi4 niao3 de5 ming2 chang4 hao3 。|| A loaf of bread is better than the songs of birds. (Mandarin, [https://tatoeba.org/eng/sentences/show/806749 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/Mrew2Vier Mrew2Vier])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我要为你演奏一首奏鸣曲。}} || wo3 yao4 wei2/wei4 ni3 yan3 zou4 yi1 shou3 zou4 ming2 qu1/qu3 。|| Ich werde eine Sonate für dich spielen. (Mandarin, [https://tatoeba.org/eng/sentences/show/512208 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/MUIRIEL MUIRIEL])
|}
=== einzusortieren ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |鸣金收军}} || ming2 jin1 shou1 jun1 || to bang war gongs as a signal to retreat ([[wikt:en:鸣金收军 |Wiktionary en]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |百家争鸣}} || bai3 jia1 zheng1 ming2 || contention of the Hundred Schools of Thought; to let a hundred schools of thought contend([[wikt:en:百家争鸣 |Wiktionary en]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |一鸣惊人 }} || yi1 ming2 jing1 ren2 ||to amaze the world with a single brilliant feat; to become famous overnight; to set the world on fire; No one was expecting much and then with one act, everybody was amazed; a bolt from the blue([[wikt:en:一鸣惊人 |Wiktionary en]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |金鼓齐鸣}} || jin1 gu3 qi2 ming2 || the gongs and drums of war sound out in unison([[wikt:en:金鼓齐鸣 |Wiktionary en]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |帐下头目刺杀张纯 }} || zhang4 xia4 tou2 mu4 刺 sha1 zhang1 chun3 ||Zhang Chun's chief underling stabbed him to death ([[s:en:Special:PermanentLink/5495657 | Wikisource: Romance of the Three Kingdoms]] [[s:zh:三國演義/第002回 | 三國演義/第002回]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |渔阳张举、张纯反}} || yu2 yang2 zhang1 ju3 、 zhang1 chun3 fan3 || in Yuyang, Zhang Ju and Zhang Chun rose up in rebellion ([[s:en:Special:PermanentLink/5495657 | Wikisource: Romance of the Three Kingdoms]] [[s:zh:三國演義/第002回 | 三國演義/第002回]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |纯称大将军 }} || chun3 cheng1 da4 jiang1/jiang4 jun1 ||Chun declared himself supreme general ([[s:en:Special:PermanentLink/5495657 | Wikisource: Romance of the Three Kingdoms]] [[s:zh:三國演義/第002回 | 三國演義/第002回]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |领兵往渔阳征张举、张纯 }} || ling3 bing1 wang3/wang4 yu2 yang2 zheng1 zhang1 ju3 、 zhang1 chun3 ||he led his army toward Yuyang in order to go after Zhang Ju and Zhang Chun ([[s:en:Special:PermanentLink/5495657 | Wikisource: Romance of the Three Kingdoms]] [[s:zh:三國演義/第002回 | 三國演義/第002回]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |张纯专一凶暴}} || zhang1 chun3 zhuan1 yi1 xiong1 bao4 || Zhang Chun was especially cruel ([[s:en:Special:PermanentLink/5495657 | Wikisource: Romance of the Three Kingdoms]] [[s:zh:三國演義/第002回 | 三國演義/第002回]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |引兵直抵贼巢}} || yin3 bing1 zhi2 抵 zei2 chao2 || lead a force of men to make a direct assault on the bandits' lair ([[s:en:Special:PermanentLink/5495657 | Wikisource: Romance of the Three Kingdoms]] [[s:zh:三國演義/第002回 | 三國演義/第002回]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |玄德军中一齐鸣金}} || xuan2 de2 jun1 zhong1/zhong4 yi1 qi2 ming2 jin1 || the gongs from Xuande's armies all sounded in unison ([[s:en:Special:PermanentLink/5776532 |Wikisource: Romance of the Three Kingdoms]] [[s:zh:三國演義/第001回 | 三國演義/第001回]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |臣敢鸣钟鼓入洛阳,请除让等 }} || chen2 gan3 ming2 zhong1 gu3 ru4 luo4 yang2 , qing3 chu2 rang4 deng3 ||We boldly sound the drums and gongs of war on our way into Luoyang, so that we can clear out the likes of Rang and his cohorts. ([[s:en:Special:PermanentLink/5495659 | Wikisource: Romance of the Three Kingdoms]] [[s:zh:三國演義/第003回 | 三國演義/第003回]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |鸣金为号 }} || ming2 jin1 wei2/wei4 hao4 ||The signal would be the sounding of the gongs ([[s:en:Special:PermanentLink/5776532 |Wikisource: Romance of the Three Kingdoms]] [[s:zh:三國演義/第001回 | 三國演義/第001回]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |家书抵万金}} || jia1 shu1 抵 wan4 jin1 ||([[wikt:en:家书抵万金|Wiktionary en]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |不鸣则已,一鸣惊人}} || bu4 ming2 ze2 yi3 , yi1 ming2 jing1 ren2 ||([[wikt:en:不鸣则已,一鸣惊人|Wiktionary en]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |水泉深则鱼鳖归之}} || shui3 quan2 shen1 ze2 yu2 bie1 gui1 zhi1 ||Ist das Wasser tief, so wenden Fische und Schildkröten sich ihm zu. ([http://ctext.org/lv-shi-chun-qiu/zhs Lü Bu We] [http://www.zeno.org/pnd/119012251 Richard Wilhelm])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |如山林,入川泽,取鱼鳖,求鸟兽}} || ru2 shan1/shan5 lin2 , ru4 chuan1 ze2 , qu3 yu2 bie1 , qiu2 niao3 shou4 ||man gehe in die Wälder und Gewässer und fange Fische und Schildkröten, hole Vögel und Tiere. ([http://ctext.org/lv-shi-chun-qiu/zhs Lü Bu We] [http://www.zeno.org/pnd/119012251 Richard Wilhelm])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |水烦则鱼鳖不大}} || shui3 fan2 ze2 yu2 bie1 bu4 da4 ||ist das Wasser trübe, so werden Fische und Schildkröten nicht groß ([http://ctext.org/lv-shi-chun-qiu/zhs Lü Bu We] [http://www.zeno.org/pnd/119012251 Richard Wilhelm])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |大水深渊成而鱼鳖安矣}} || da4 shui3 shen1 yuan1 cheng2 er2 yu2 bie1 an1 yi3 ||Wenn die große Tiefe des Weltmeers vollendet ist, so finden die Fische und Schildkröten ihre Ruhe. ([http://ctext.org/lv-shi-chun-qiu/zhs Lü Bu We] [http://www.zeno.org/pnd/119012251 Richard Wilhelm])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |纯真是一件美好的事。}} || chun3 zhen1 shi4 yi1 jian4 mei3 hao3 de5 shi4 。||Unschuld ist eine schöne Sache. [https://tatoeba.org/eng/sentences/show/501346 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/MUIRIEL MUIRIEL]
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |那个发现纯属偶然。}} || na4/nei4 ge4 fa1 xian4 chun3 shu3 偶 ran2 。||Diese Entdeckung war reiner Zufall. [https://tatoeba.org/eng/sentences/show/332427 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/Tamy Tamy]
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我还记得我第一次去中国,我在山东,意识到那个单纯的省比英格兰大两万六千平方公里。}} || wo3 hai2/huan2 ji4 de2/de5/dei3 wo3 di4 yi1 ci4 qu4 zhong1/zhong4 guo2 , wo3 zai4 shan1/shan5 dong1 , yi4 zhi4 dao4 na4/nei4 ge4 dan1/shan2 chun3 de5 sheng3/xing3 bi4 ying1 ge2 lan2 da4 liang3 wan4 liu4 qian1 ping2 fang1 gong1 li3 。||I still remember the first time I was in China; I was in Shandong, and I realised that that province alone is twenty six thousand square kilometres bigger than England. [https://tatoeba.org/eng/sentences/show/905833 Tatoeba] [https://tatoeba.org/eng/user/profile/eastasiastudent eastasiastudent]
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |她有一颗纯洁的心。}} || ta1 you3 yi1 ke1 chun3 jie2 de5 xin1 。||Sie hat ein reines Herz. [https://tatoeba.org/eng/sentences/show/866757 Tatoeba] [https://tatoeba.org/eng/user/profile/kooler kooler] [https://tatoeba.org/eng/user/profile/jakov jakov]
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我是纯素食者。}} || wo3 shi4 chun3 su4 shi2 zhe3 。||Ich bin Veganerin. [https://tatoeba.org/eng/sentences/show/1335244 Tatoeba] [https://tatoeba.org/eng/user/profile/Saney Saney] [https://tatoeba.org/eng/user/profile/kthxy kthxy]
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |狂风暴雨造成她无法准时抵达。}} || kuang2 feng1 bao4 yu3 zao4 cheng2 ta1 wu2 fa3 zhun3 shi2 抵 da2 。||The storm prevented her from arriving on time. [https://tatoeba.org/eng/sentences/show/602898 Tatoeba] [https://tatoeba.org/eng/user/profile/xiuqin xiuqin] [https://tatoeba.org/eng/user/profile/CK CK]
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |花代价所换来的一点才智,抵过别人传授的数倍不止。}} || hua1 dai4 jia4/jie4 suo3 huan4 lai2 de5 yi1 dian3 cai2 zhi4 ,抵 guo4 bie2 ren2 chuan2/zhuan4 shou4 de5 shu3/shuo4 bei4 bu4 zhi3 。||An ounce of wit that is bought is worse a pound that is taught. [https://tatoeba.org/eng/sentences/show/2165985 Tatoeba] [https://tatoeba.org/eng/user/profile/sadhen sadhen] [https://tatoeba.org/eng/user/profile/FeuDRenais FeuDRenais]
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |中午,我抵达东京。}} || zhong1/zhong4 wu3 , wo3 抵 da2 dong1 jing1 。||Ich bin um zwölf Uhr mittags in Tokyo angekommen. [https://tatoeba.org/eng/sentences/show/1785971 Tatoeba] [https://tatoeba.org/eng/user/profile/sadhen sadhen] [https://tatoeba.org/eng/user/profile/MUIRIEL MUIRIEL]
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |停止抵抗!}} || ting2 zhi3 抵 kang4 !||Hör auf dich zu wehren! [https://tatoeba.org/eng/sentences/show/5102240 Tatoeba] [https://tatoeba.org/eng/user/profile/mirrorvan mirrorvan] [https://tatoeba.org/eng/user/profile/Nero Nero]
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |他们就快从香港抵达了。}} || ta1 men5 jiu4 kuai4 cong2 xiang1 gang3 抵 da2 le5 。||Sie werden bald aus Hongkong eintreffen. [https://tatoeba.org/eng/sentences/show/333313 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/xtofu80 xtofu80]
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |百家争鸣}} || bai3 jia1 zheng1 ming2 ||([[wikt:en:百家争鸣|Wiktionary en]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |一鸣惊人}} || yi1 ming2 jing1 ren2 ||([[wikt:en:一鸣惊人|Wiktionary en]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |登自鸣条,乃入巢门,遂有夏}} || deng1 zi4 ming2 tiao2 , nai3 ru4 chao2 men2 , sui4 you3 xia4 ||Er stieg von Ming Tiau empor zu den Toren von Tschau und bemächtigte sich der Herrschaft von Hia. ([http://ctext.org/lv-shi-chun-qiu/zhs Lü Bu We] [http://www.zeno.org/pnd/119012251 Richard Wilhelm])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |听不到悲鸣了吗?}} || ting1 bu4 dao4 bei1 ming2 le5 ma5 ?||Hast du nicht den Schrei gehört? [https://tatoeba.org/eng/sentences/show/810133 Tatoeba] [https://tatoeba.org/eng/user/profile/yutaka yutaka] [https://tatoeba.org/eng/user/profile/xtofu80 xtofu80]
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |鸣金收军}} || ming2 jin1 shou1 jun1 ||([[wikt:en:鸣金收军|Wiktionary en]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |金鼓齐鸣}} || jin1 gu3 qi2 ming2 ||([[wikt:en:金鼓齐鸣|Wiktionary en]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我要为你演奏一首奏鸣曲。}} || wo3 yao4 wei2/wei4 ni3 yan3 zou4 yi1 shou3 zou4 ming2 qu1/qu3 。||Ich werde eine Sonate für dich spielen. [https://tatoeba.org/eng/sentences/show/512208 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/MUIRIEL MUIRIEL]
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |不鸣则已,一鸣惊人}} || bu4 ming2 ze2 yi3 , yi1 ming2 jing1 ren2 ||([[wikt:en:不鸣则已,一鸣惊人|Wiktionary en]])
|}
== Lückentexte ==
=== [http://magazine.marcopoloproject.org/can-boycotting-christmas-save-chinese-culture-%E6%8A%B5%E5%88%B6%E5%9C%A3%E8%AF%9E%E8%8A%82%E8%83%BD%E4%BF%9D%E6%8A%A4%E4%BC%A0%E7%BB%9F%E6%96%87%E5%8C%96%EF%BC%9F/ the marco polo project: 抵制“圣诞节”能保护传统文化?] ===
前几天,是西方传统节日“圣诞节” ,有 Medien 报道,西北某高校“圣诞节”组织学生观看中华传统文化宣传片,“平安夜各班辅导员都在场,楼下有许多老师把守,逃走将按三次旷课处理” 。该校微博回应,这么做“只是希望大家不要盲目崇洋媚外,重视起中国传统文化” 。另有报道称,温州多所中小学接到教育部门通知,要求“不在校园里举行任何与圣诞主题有关的活动” ;更有湖南某高校学生身着汉服,在一处圣诞活动现场,举起“抵制圣诞节”的标语。
近年来,“洋节”能不能过、中国传统节日怎么过的话题时有讨论,每逢西方“圣诞节”“情人节”之际,争论的声音时有耳闻,也有专家学者 vorgeschlagen 设立“中华母亲节”“中华父亲节” ,以取代年轻人爱过的西方“母亲节”“父亲节” 。这是出于人们保护 den Reichtum 中国传统文化的自觉。认识到乱过“洋节”容易对传统文化造成不良影响,教育部门、学校采取措施,青少年自身也有所行动,和几年前“有节就过”“盲目过节”相比,这种态度转变无疑值得赞许。
然而,保护 den Reichtum 中国传统文化,是否需要强制“抵制圣诞节” ,人们“抵制”的又是什么,却值得深究一番。这所西北高校在回应中表示,一些学生认为“洋节”时尚,中国传统节日“老土” ,“这是一个令人痛心的现象” 。实际上,无论中国还是西方,节日承载了本民族的文化历史记忆和民族情感,而本民族的节日在他者看来,则首先是一种文化奇观。在西方国家的中国居民聚居区,也常有当地居民出于喜爱和好奇,与中国人一同过春节的情况,故而笔者以为,节日本无“时尚”与“老土”之分,只有“新奇”“ungewohnt”与“习以为常”之分。
只不过,由于西方商品经济发达,“洋节”传入中国时,经过商业模式的运作,仅为国人带来了一套精美的物质形式,它以“圣诞节”“情人节”的面目示人,内里实为一种大众消费体验。年轻人在“圣诞节”互送苹果,在“情人节” schenken sie Rosen、巧克力,其实不是本土意义上的“过节” ,而是在商业模式的 Leitung,体验一种新奇 ungewohnte 的“过法” ,对于不熟悉西方文化的过节者来说,无异于一场有趣的游戏。故而,“抵制圣诞节”其实是在抵制对“圣诞节”的过度消费,并担心这种过度消费带来的“圣诞节”热闹景观,会影响传统节日在人们心中的地位。其实这种“体验”始终停留在消费层面,“圣诞节”等西方节日所承载的文化本身,并未也不太可能仅仅因此而深入人心。
由此可见,以抵制“洋节”的过度消费来保护 den Reichtum 传统文化,其实是一种观念上的错位。我们真正需要 vorsehen 的是,商业模式、消费主义带来的节日的同质化现象。几年前就曾有学者 in einem Artikel 表示,消费主义正在 ausradieren 我们的节日记忆;国人“节”“假”不分,往往把“节日”过成“假日” 。如今,旅游、购物、gut zu essen 已成为许多节日的主要内容,人们的这种“过法” ,把春节、清明节、中秋节等都简化成了“休闲 und Unterhaltung 节” 。笔者以为,真正应该担心的是,国人在休闲 und Unterhaltung 的过节方式下,把中国传统节日过得像那些作为“有趣的游戏”来体验的“洋节”一样,一旦如此,中国传统节日对于国人的意义也只能止于消费,其所承载的历史文化记忆和民族情感将无法深入人心。
[http://magazine.marcopoloproject.org/authors/Chu%20Qing%20-%20%E6%A5%9A%E5%8D%BF/ Chu Qing]
[http://magazine.marcopoloproject.org/can-boycotting-christmas-save-chinese-culture-%e6%8a%b5%e5%88%b6%e5%9c%a3%e8%af%9e%e8%8a%82%e8%83%bd%e4%bf%9d%e6%8a%a4%e4%bc%a0%e7%bb%9f%e6%96%87%e5%8c%96%ef%bc%9f-english/ Übersetzung]
Can boycotting Christmas save Chinese culture?
The traditional Western festival of Christmas took place a few days ago, and some media reports said that in a North-Western university, a group of students organised the viewing of traditional Chinese videos for ‘Christmas’, while ‘on Christmas Eve, all the class leaders were present, many teachers guarded the exits, and absence would be punished three times as much as usual”. The school’s weibo account responded that this was so that ‘not everyone would blindly fawn to foreign cultures, and look back at the Chinese traditions’. Another report indicated that many primary and secondary schools in Wenzhou received a notice to ‘not carry on any Christmas related activities’ ; and at a College in Hunan, a student dressed in traditional Chinese clothes, and carried a ‘Boycott Christmas’ sign at a Christmas event.
In the last years, it’s been a regular topic of discussion whether we should celebrate Western festivals, and how to celebrate Chinese festivals. For each Western ‘Christmas’ or ‘Valentine’s Day’, an argument is heard; and some experts and scholars have taken initiatives to set up a Chinese ‘Mother’s Day’ or ‘Father’s Day’ to replace the Western Mother’s Day or Father’s day that young people love. This is to increase the awareness of a need to protect traditional Chinese culture among people. There is a sense that chaotically celebrating Western festivals poses a threat to traditional culture, and so education departments and schools have taken measures – teenagers themselves have taken initiatives. In copmparison to the prevalent attitude a few years ago, when ‘every festival should be celebrated’ and ‘let’s blindly celebrate’ was the rule, this is definitely praiseworthy.
However, does the protection of traditional Chinese culture require a mandatory ‘Christmas boycott’ – and it is worth questioning deeper what it is exactly that people are ‘boycotting’. This is what North-Western University said in response – some of the students find that Western festivals are ‘fashionable’, while Chinese festivals are ‘old fashioned’: ‘This is a sad phenomenon’. In fact, whether in China or in the West, Festivals carry the historical memory and national feeling of that nation, but in the eyes of others, those festivals are mainly cultural spectacles. In Western cities, there is often interest and curiosity for the residents of Chinatowns and their customs, and they like celebrating Spring Festivals with the Chinese community. Therefore, I belive that festivals are no intrinsically ‘fashionable’ or ‘old-fashioned’, but only ‘new’, ‘foreign’ or ‘usual’.
The only thing is, because of the development of Western consumer economy, when the ‘Western Festival’ get into China, they’re already been commodified. They only offer a certain physical form to Chinese people, externally, they look like ‘Christmas’ or ‘Valentine’s day’, but in fact, they’re nothing more than consumer experiences. At Christmas, young people give each other an apple; for Valentine’s day, they give each other roses or chocolates. In reality, this is not properly ‘celebrating a festival’, but under the impulsion of a commercial framework, experience some novel and strange form of ‘going beyong the law’. For the people celebrating the festival who are not familiar with Western culture, it’s nothing more than a fun game. Therefore, ‘boycotting Christmas’ is actually boycotting the excessive consumption that goes with Christmas, and worrying that the excessive consumption associated with Christmas may tarnish the status of traditional festivals in people’s minds. In fact, this kind of ‘experience’ never goes beyond consumption, the cultural content of ‘Christmas’ and other western festivals is unlikely to enter deep into people’s hearts through the current form of celebration.
From this point of view, controlling the consumerist experience of foreign festivals as a way to protect traditional Chinese festivals is a case of conceptual mistake. What we really need to guard against is the commericalisation, the consumerisation, and the homogenization of our festivals. A few years ago, a scholar wrote that consumerism is erasing our memories of festivals; we no longer distinguish between a festival and a day off, and more and more, we simply think of festivals as a day off work. Today, tourism, shopping and good dining have become the core of many festivals, and from a ‘special time’, Spring Festival, Qingming Festival, mid autumn festival have become nothing more than a ‘day of recreation’. I believe, what we should really worry about is that, under the influence of entertainment culture, Chinese people are now celebrating our national festivals in the same way that we do these foreign festivals, as pure ‘fun and novelty experiences’. And if that is the case, our traditional festivals will have no further meaning for us than a consumer experience, and none of the historical significance and national sentiment they carry will penetrate deep into our hearts.
[http://magazine.marcopoloproject.org/author/julienleyre/ Julien Leyre] [http://julienleyre.wordpress.com website]
=== Bibel ===
==== [https://newchristianbiblestudy.org/de/bible/compare/chinese-union-s/german-elberfelder-1905/matthew/4/ Matthäusevangelium Kapitel 4] ====
{| class="wikitable"
! Chinese Union Version !! Übersetzung Rudolf Brockhaus (1856-1932)
|-
| 4.1 当时,Jesus 被圣灵引到旷野,受魔鬼的 Versuchungen。 || 4.1 Dann wurde Jesus von dem Geiste in die Wüste hinaufgeführt, um von dem Teufel versucht zu werden;
|-
| 4.2 他禁食四十昼夜,後来就饿了。 || 4.2 und als er vierzig Tage und vierzig Nächte gefastet hatte, hungerte ihn danach.
|-
| 4.3 那 Versucher 进前来,对他说:你若是神的儿子,可以 befehlen 这些石头变成食物。 || 4.3 Und der Versucher trat zu ihm hin und sprach: Wenn du Gottes Sohn bist, so sprich, daß diese Steine Brot werden. Er aber antwortete und sprach:
|-
| 4.4 Jesus 却回答说:经上记着说:人活着,不是单靠食物,乃是靠神口里所出的一切话。 || 4.4 Es steht geschrieben: "Nicht von Brot allein soll der Mensch leben, sondern von jedem Worte, das durch den Mund Gottes ausgeht."
|-
| 4.5 魔鬼就带他进了圣城,叫他站在殿顶上, || 4.5 Dann nimmt der Teufel ihn mit in die heilige Stadt und stellt ihn auf die Zinne des Tempels
|-
| 4.6 对他说:你若是神的儿子,可以跳下去,因为经上记着说:主要为你 befehlen 他的使者用手托着你,免得你的脚碰在石头上。 || 4.6 und spricht zu ihm: Wenn du Gottes Sohn bist, so wirf dich hinab; denn es steht geschrieben: "Er wird seinen Engeln über dir befehlen, und sie werden dich auf den Händen tragen, damit du nicht etwa deinen Fuß an einen Stein stoßest."
|-
| 4.7 Jesus 对他说:经上又记着说:不可 versuchen 主─你的神。 || 4.7 Jesus sprach zu ihm: Wiederum steht geschrieben: "Du sollst den Herrn, deinen Gott, nicht versuchen."
|-
| 4.8 魔鬼又带他上了一座最高的山,将世上的万国与万国的荣华都指给他看,对他说: || 4.8 Wiederum nimmt der Teufel ihn mit auf einen sehr hohen Berg und zeigt ihm alle Reiche der Welt und ihre Herrlichkeit und spricht zu ihm:
|-
| 4.9 你若 niederfallen 拜我,我就把这一切都 gebe 你。 || 4.9 Alles dieses will ich dir geben, wenn du niederfallen und mich anbeten willst.
|-
| 4.10 Jesus 说:撒但(撒但就是抵挡的意思,乃魔鬼的别名),退去罢!因为经上记着说:当拜主你的神,单要事奉他。 || 4.10 Da spricht Jesus zu ihm: Geh hinweg, Satan! Denn es steht geschrieben: "Du sollst den Herrn, deinen Gott, anbeten und ihm allein dienen."
|-
| 4.11 於是,魔鬼离了 Jesus,有天使来 und dienten 他。 || 4.11 Dann verläßt ihn der Teufel, und siehe, Engel kamen herzu und dienten ihm.
|-
| 4.12 Jesus 听见约翰下了监,就退到加利利去; || 4.12 Als er aber gehört hatte, daß Johannes überliefert worden war, entwich er nach Galiläa;
|-
| 4.13 後又离开拿撒勒,往迦百农去,就住在那里。那地方靠海,在西布伦和拿弗他利的边界上。 || 4.13 und er verließ Nazareth und kam und wohnte in Kapernaum, das am See liegt, in dem Gebiet von Zabulon und Nephtalim;
|-
| 4.14 这是要应验先知以赛亚的话, || 4.14 auf daß erfüllt würde, was durch den Propheten Jesajas geredet ist, welcher spricht:
|-
| 4.15 说:西布伦地,拿弗他利地,就是沿海的路,约但河外,外邦人的加利利地。 || 4.15 "Land Zabulon und Land Nephtalim, gegen den See hin, jenseit des Jordan, Galiläa der Nationen:
|-
| 4.16 那坐在黑暗里的百姓看见了大光;坐在死 Schatten 之地的人有光发现照着他们。 || 4.16 das Volk, das in Finsternis saß, hat ein großes Licht gesehen, und denen, die im Lande und Schatten des Todes saßen, Licht ist ihnen aufgegangen."
|-
| 4.17 从那时候,Jesus 就传起道来,说:天国近了,你们应当悔改! || 4.17 Von da an begann Jesus zu predigen und zu sagen: Tut Buße, denn das Reich der Himmel ist nahe gekommen.
|-
| 4.18 Jesus 在加利利海边行走,看见弟兄二人,就是那称呼彼得的西门和他兄弟安得烈,在海里撒网;他们本是打鱼的。 || 4.18 Als er aber am See von Galiläa wandelte, sah er zwei Brüder: Simon, genannt Petrus, und Andreas, seinen Bruder, die ein Netz in den See warfen, denn sie waren Fischer.
|-
| 4.19 Jesus 对他们说:来跟从我,我要叫你们得人如得鱼一样。 || 4.19 Und er spricht zu ihnen: Kommet mir nach, und ich werde euch zu Menschenfischern machen.
|-
| 4.20 他们就立刻舍了网,跟从了他。 || 4.20 Sie aber verließen alsbald die Netze und folgten ihm nach.
|-
| 4.21 从那里往前走,又看见弟兄二人,就是西庇太的儿子雅各和他兄弟约翰,同他们的父亲西庇太在船上补网, Jesus 就招呼他们, || 4.21 Und als er von dannen weiterging, sah er zwei andere Brüder: Jakobus, den Sohn des Zebedäus, und Johannes, seinen Bruder, im Schiffe mit ihrem Vater Zebedäus, wie sie ihre Netze ausbesserten; und er rief sie.
|-
| 4.22 他们立刻舍了船,别了父亲,跟从了 Jesus。 || 4.22 Sie aber verließen alsbald das Schiff und ihren Vater und folgten ihm nach.
|-
| 4.23 Jesus 走遍加利利,在各会堂里教训人,传天国的福音,医治百姓各样的 Krankheit und Gebrechen。 || 4.23 Und Jesus zog in ganz Galiläa umher, lehrte in ihren Synagogen und predigte das Evangelium des Reiches und heilte jede Krankheit und jedes Gebrechen unter dem Volke.
|-
| 4.24 他的名声就传遍了叙利亚。那里的人把一切害病的,就是害各样疾病、各样疼痛的和被鬼附的、 Mondsüchtige 的、 Gelähmte 的,都带了来,Jesus 就治好了他们。 || 4.24 Und sein Ruf ging aus in das ganze Syrien; und sie brachten zu ihm alle Leidenden, die mit mancherlei Krankheiten und Qualen behaftet waren, und Besessene und Mondsüchtige und Gelähmte; und er heilte sie.
|-
| 4.25 当下,有许多人从加利利、低加波利、耶路撒冷、犹太、约但河外来跟着他。 || 4.25 Und es folgten ihm große Volksmengen von Galiläa und Dekapolis und Jerusalem und Judäa und von jenseit des Jordan.
|}
=== Haenisch: Lehrgang der klassischen chinesischen Schriftsprache ===
==== 第十四課 ====
第十四课
dì shí sì kè
Vierzehnte Lektion
---------------------------
雄_既鳴
雄鸡既鸣
xióng jī jì míng
Der Hahn hat bereits gekräht
---------------------------
Der folgende Satz findet sich im Internet in verschiedenen Schreibweisen.
_既鳴已,朝既盈已
鸡既鸣已,朝既盈已
jī jì míng yǐ, cháo jì yíng yǐ
Der Hahn hat bereits gekräht, der Morgen ist bereits in vollem Gang
鸡既鸣已,朝既盈矣
jī jì míng yǐ, cháo jì yíng yǐ
鸡既鸣已矣,朝既盈矣
jī jì míng yǐ yǐ, cháo jì yíng yǐ
鸡既鸣矣,朝既盈矣
jī jì míng yǐ, cháo jì yíng yǐ
---------------------------
你聽雄_在報 Tagesanbruch
你听雄鸡在报 Tagesanbruch
nǐ tīng xióng jī zài bào xiǎo
Hast Du gehört, wie der Hahn den Tagesanbruch angekündigt hat?
---------------------------
東方_白
东方渐白
dōng fāng jiàn bái
Der Osten wird allmählich hell
---------------------------
山深 Nebel 重
shān shēn lán zhòng
Die Berge sind tief mit schwerem Nebel erfüllt
---------------------------
日未出之時
日未出之时
rì wèi chū zhī shí wèi
Zur dieser Zeit in der die Sonne noch nicht aufgegangen ist,
---------------------------
_夜未退
残夜未退
cán yè wèi tuì
und die Reste der Nacht sich noch nicht zurückgezogen haben
---------------------------
晨星未沒
晨星未没
chén xīng wèi mò
ist der Morgenstern noch nicht untergegangen
---------------------------
紅日已出[大半]
红日已出[大半]
hóng rì yǐ chū [dà bàn]
Die rote Sonne ist bereits [mehr als halb] herausgekommen
---------------------------
看紅日已出地平_!
看红日已出地平线!
kàn hóng rì yǐ chū dì píng xiàn!
Sieht die rote Sonne am Horizont aufgehen!
---------------------------
百官散朝
百官散朝
bǎi guān sàn cháo
Die Beamten beginnen geschäftig den Morgen
---------------------------
Ein [[w:zh:%E6%96%B0%E5%8C%97%E5%B8%82%E7%AB%8B%E5%AE%89%E6%BA%AA%E5%9C%8B%E6%B0%91%E4%B8%AD%E5%AD%B8 | 校歌 Schullied]] zu diesem Thema ist:
(Die Übersetzung darf gerne noch verbessert werden)
東方_白,...
东方渐白,...
dōng fāng jiàn bái, shān wù mí méng
Der Osten wird allmählich hell, ...
---------------------------
一泉 gurgelt,出谷遠征
一泉 gurgelt,出谷远征
yī quán gǔ gǔ, chū gǔ yuǎn zhēng
eine Quelle gurgelt, eine Expedition verlässt das Tal
---------------------------
清 und rein 是我的面貌
qīng chè shì wǒ de miàn mào
klar und rein ist mein Gesicht
---------------------------
歌唱是我的天性
歌唱是我的天性
gē chàng shì wǒ de tiān xìng
zu singen ist meine Natur
---------------------------
我用 schlängeln 的路_,邀請大地做見_
我用 schlängeln 的路径,邀请大地做见证
wǒ yòng wān yán de lù jìng, yāo qǐng dà dì zuò jiàn zhèng
Ich nutze den sich dahinschlängelnden Pfad und lade die Erde ein, mein Zeuge zu sein
---------------------------
我以 großzügig 的 Einstellung,接受伙伴来加盟
wǒ yǐ kāng kǎi de zī tài, jiē shòu huǒ bàn lái jiā méng
Ich habe eine großzügige Einstellung und empfange viele, die zu einer großen Gruppe werden
---------------------------
奔呀,奔向海洋
奔呀,奔向海洋
bēn ya, bēn xiàng hǎi yáng
Beeile dich, eile zum Ozean
---------------------------
忘呀,忘不了走過的地方
忘呀,忘不了走过的地方
wàng ya, wàng bù liǎo zǒu guò dì dì fāng
Vergessen; ich kann die besuchten Orte nicht vergessen
---------------------------
Schätzt 我,亲爱的人们
téng xī wǒ, qīn ài de rén men
Schätzt mich, meine Lieben
---------------------------
相信我,亲爱的人们
xiāng xìn wǒ, qīn ài de rén men
Glaubt mir, meine Lieben
---------------------------
我愿人间平安
wǒ yuàn rén jiān píng ān
Ich wünsche der Menschheit Frieden
---------------------------
我_溪水永清
我愿溪水永清
wǒ yuàn xī shuǐ yǒng qīng
Ich wünsche immer klares Wasser in den Flüssen
---------------------------
==== 第十七課 ====
第十七课
dì shí qī kè
Siebzehnte Lektion
gleichzeitig 第三十四課/第三十四课/dì sān shí sì kè, die 34. Lektion im
[https://books.google.de/books?id=GcVyDwAAQBAJ&pg=PT65&lpg=PT65&dq=%22%E7%89%A7%E7%AB%A5%E5%9D%90%E7%89%9B%E8%83%8C%22&source=bl&ots=qfml4blQMi&sig=ACfU3U1BpJF6LkRhs1iEDMGdLx8SIScBdw&hl=de&sa=X&ved=2ahUKEwii7Mr4jOLsAhUUDmMBHR00DM8Q6AEwEHoECAsQAg#v=onepage&q=%22%E7%89%A7%E7%AB%A5%E5%9D%90%E7%89%9B%E8%83%8C%22&f=false 国文二百课/guó wén èr bǎi kè/Die Landessprache in zweihundert Lektionen]
---------------------------
牧童
mù tóng
Der Hirtenjunge
---------------------------
日之夕矣
日之夕矣
rì zhī xī yǐ
Es ist Sonnenuntergang
---------------------------
Aus dem [[w:en:Zuiweng_Tingji|Zuiweng Ting Ji]] (Siehe auch [https://ctext.org/wiki.pl?if=en&chapter=512751 ctext.org]
树林 schattig
shù lín yīn yì
Im Wald wird es schattig
---------------------------
_林昏暗下來
树林昏暗下来
shù lín hūn àn xià lái
Im Wald kommt Dunkelheit herab
---------------------------
鳴聲上下
鸣声上下
míng shēng shàng xià
Vogelgesang oben und unten
---------------------------
群鳥在_上鳴叫
群鸟在树上鸣叫
qún niǎo zài shù shàng míng jiào
Vogelgruppen zwitschern in den Bäumen
---------------------------
夕陽在山
夕阳在山
xī yáng zài shān
Die Abendsonne steht am Bergrücken
---------------------------
羊牛下來
羊牛下来
yáng niú xià lái
Schafe und Rinder kommen herunter
---------------------------
牧童坐牛背
牧童坐牛背
mù tóng zuò niú bèi
Der Hirtenjunge sitzt auf dem Rinderrücken
---------------------------
口吹短 Flöte
kǒu chuī duǎn dí
Mit dem Mund bläst der die kurze Flöte
---------------------------
aus dem [https://ctext.org/wiki.pl?if=en&chapter=530918&remap=gb 动物类/dòng wù lèi/Tierarten]
夏日
xià rì
Im Sommer
---------------------------
有牧童坐牛背
yǒu mù tóng zuò niú bèi
gibt es einen Hirtenjungen, der auf dem Rücken des Rindes sitzt
---------------------------
而大雨忽至,
ér dàyǔ hū zhì
als plötzlich ein starker Regen auftrat
---------------------------
乃急引牛入 Tempel
nǎi jí yǐn niú rù miào
also zog er sich eilig mit seinem Rind in einen Tempel zurück
---------------------------
temporär 避之
zàn bì zhī
für einen temporären Unterschlupf
---------------------------
==== 第一百課 ====
第一百课
dì yī bǎi kè
Hundertste Lektion
Diese Lektion findet sich im [https://ctext.org/liji/wen-wang-shi-zi/zh Buch der Riten] und als Variante im [[s:zh:%E7%90%B4%E5%A0%82%E8%AB%AD%E4%BF%97%E7%B7%A8_(%E5%9B%9B%E5%BA%AB%E5%85%A8%E6%9B%B8%E6%9C%AC)/%E5%8D%B7%E4%B8%8A| Qín táng yù sú biān]].
-----------------------------------
周文王
周文王
zhōu wén wáng
König Wen von Zhou
-----------------------------------
文王之為世子,
文王之为世子,
wén wáng zhī wèi shì zi,
Als König Wen noch Kronprinz war
-----------------------------------
朝於王季,日三。
朝于王季,日三。
cháo yú wáng jì, rì sān.
besuchte er dreimal täglich König Ji.
-----------------------------------
雞初鳴而衣服,
鸡初鸣而衣服,
jī chū míng ér yī fú,
Mit dem ersten Schrei eines Hahnes kleidete er sich an
-----------------------------------
至於 Schlafgemach 門外,
至于 Schlafgemach 门外,
zhì yú qǐn mén wài,
Er ging zum Außenbereich der Tür zum Schlafgemach (des Königs)
-----------------------------------
問內 Dienst 之御者曰:
问内 Dienst 之御者曰:
wèn nèi shù zhī yù zhě yuē:
Er fragte den Innendienst versehenden Beamten:
-----------------------------------
Variante
問左右曰
问左右曰
wèn zuǒ yòu yuē
Er fragte die Bediensteten:
-----------------------------------
今日安否何如
今日安否何如
jīn rì ān fǒu hé rú
Ist der heutige Tag ruhig oder nicht?
-----------------------------------
左右曰:安。
左右曰:安。
zuǒ yòu yuē: ān.
Sagten die Bediensteten: "Ruhig"
-----------------------------------
文王乃喜。
文王乃喜。
wén wáng nǎi xǐ.
so freute sich König Wen
-----------------------------------
及日中,又至,亦如之。
及日中,又至,亦如之。
jí rì zhōng, yòu zhì, yì rú zhī.
Als sich der Mittag näherte, ging er wieder hin und machte es genauso.
-----------------------------------
及 Abenddämmerung,又至,亦如之。
jí mù, yòu zhì, yì rú zhī.
Als die Abenddämmerung nahte, ging er wieder hin und machte es genauso.
-----------------------------------
其有不安節,
其有不安节,
qí yǒu bù ān jié,
Hatte dieser (König Jin) eine unruhige Phase
-----------------------------------
則左右以告文王,
则左右以告文王,
zé zuǒ yòu yǐ gào wén wáng,
Dann teilte der Bedienstete es König Wen mit.
-----------------------------------
文王色憂,
文王色忧,
wén wáng sè yōu,
König Wens Miene verkümmerte sich.
-----------------------------------
行不能正履。
行不能正履。
xíng bù néng zhèng lǚ.
Er konnte beim Gehen keine geraden Schritte machen.
-----------------------------------
王季复 Essen zu sich nehmen,
wáng jì fù shàn,
Nahm König Ji wieder Essen zu sich,
-----------------------------------
然後亦復初。
然后亦复初。
rán hòu yì fù chū.
machte war es anschließend wieder wie zu Beginn.
-----------------------------------
== Texte ==
=== [[n:zh:阿巴斯计划就巴勒斯坦建国提案公投|Wikinews 阿巴斯计划就巴勒斯坦建国提案公投]] ===
{{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |
【2006年6月6日讯】
巴勒斯坦民族权力自治机构主席阿巴斯计划就巴勒斯坦建国提案发动公投。预计他将在周二正式宣布公投的日期。<br/><br/>由哈马斯推举出来的巴勒斯坦总理哈尼亚表示,巴勒斯坦法律不允许进行这样的公投。不过,由于公投没有法律约束力,因此阿巴斯的助手认为,举行公投并不违法。在此之前,哈马斯激进组织和其它巴勒斯坦派别没能在阿巴斯设定的截止期限前就法塔赫组织提出的建国提案达成一致。<br/><br/>这份被称为巴勒斯坦团结政治纲领的建国计划包含18个要点。根据这份方案,巴勒斯坦将在约旦河西岸和加沙地带1967年以来被以色列占领的土地上宣布成立一个巴勒斯坦国。确认所有在以色列境内巴勒斯坦难民返回家乡的权利。这个提案将默认以色列的生存权,方案呼吁巴勒斯坦人民在1967年后被以色列占领的土地上继续抵抗斗争,这意味着在巴勒斯坦在国际公认的以色列境内将停止攻击,也就是承认以色列存在的权利。控制巴勒斯坦政府的哈马斯反对这项建议,并拒绝承认以色列的生存权,称任何与此相关的公投都是违法的。
}}
Noch keine Übersetzung
=== [[n:zh:日本一委员会批准援助中国贷款|Wikinews 日本一委员会批准援助中国贷款]] ===
{{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |
【2006年6月6日讯】<br/><br/>在拖延两个多月之后,日本政府的一个委员会批准了向中国发放援助贷款。日本官房长官安倍晋三说,这个决定反映了中日关系的重要性。中日关系今年早些时候因为战争历史和自然资源引发的争议而陷入紧张。<br/><br/>由首相小泉纯一郎领导的这个日本委员会同意向中国提供大约六亿美元的低息贷款。东京方面原来计划今年3月2005-2006财政年度结束时批准这笔援助贷款。批准发放这笔拖延的贷款必须得到日本全体内阁成员的批准。<br/><br/>今年3月以来,日本和中国为了改善两国关系已经举行了几次高层会谈。两国外长上月在卡塔尔多哈参加一个亚洲经济会议期间进行了会晤。这是两国外长一年来的首次会晤。
}}
Noch keine Übersetzung
=== [https://ctext.org/liji/ens Das Buch der Riten] ===
==== [https://ctext.org/liji/qu-li-i/ens Qu Li (Teil 1)] ====
{{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |
为人子者:父母存,冠衣不纯素。孤子当室,冠衣不纯采。
}}
Übersetzung James Legge
A son, while his parents are alive, will not wear a cap or (other) article of dress, with a white border. An orphan son, taking his father's place, will not wear a cap or (other article of) dress with a variegated border.
==== [https://ctext.org/liji/li-qi/ens Li Qi] ====
{{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |
礼也者,合于天时,设于地财,顺于鬼神,合于人心,理万物者也。是故天时有生也,地理有宜也,人官有能也,物曲有利也。故天不生,地不养,君子不以为礼,鬼神弗飨也。居山以鱼鳖为礼,居泽以鹿豕为礼,君子谓之不知礼。故必举其定国之数,以为礼之大经,礼之大伦。以地广狭,礼之薄厚,与年之上下。是故年虽大杀,众不匡惧。则上之制礼也节矣。
}}
Übersetzung James Legge
(The things used in performing) the rites should be suitable to the season, taken from the resources supplied by the ground, in accordance with (the requirements of) the spirits, and agreeable to the minds of men;-according to the characteristics of all things. Thus each season has its productions, each soil its appropriate produce, each sense its peculiar power, and each thing its advantageousness. Therefore what any season does not produce, what any soil does not nourish, will not be used by a superior man in performing his rites, nor be enjoyed by the spirits. If mountaineers were to (seek to) use fish and turtles in their rites, or the dwellers near lakes, deer and pigs, the superior man would say of them that they did not know (the nature of) those usages. Therefore it is necessary to take the established revenues of a state as the great rule for its ceremonial (expenditure). Important for the determination of this is the size of its territory. The amount of the offerings (also) should have regard to the character of the year as good or bad. In this way, though the harvest of a year may be very defective, the masses will not be afraid, and the ceremonies as appointed by the superiors will be economically regulated.
==== [https://ctext.org/liji/yue-ji/ens Yue Ji] ====
{{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |
文侯曰:“敢问溺音何从出也?”子夏对曰:“郑音好滥淫志,宋音燕女溺志,卫音趋数烦志,齐音敖辟乔志;此四者皆淫于色而害于德,是以祭祀弗用也。《诗》云:‘肃雍和鸣,先祖是听。’夫肃肃,敬也;雍雍,和也。夫敬以和,何事不行?
}}
Übersetzung James Legge
The marquis said, "Let me ask where the vile airs come from?' Zi-xia replied, 'The airs of Zheng go to a wild excess, and debauch the mind; those of Song tell of slothful indulgence and women, and drown the mind; those of Wei are vehement and rapid, and perplex the mind; and those of Qi are violent and depraved, and make the mind arrogant. The airs of those four states all stimulate libidinous desire, and are injurious to virtue;--they should therefore not be used at sacrifices. It is said in the Book of Poetry (IV, i [Part ii], ode 5), "In solemn unison (the instruments) give forth their notes; Our ancestors will hearken to them." That solemn unison denotes the grave reverence and harmony of their notes - with reverence, blended with harmony, what is there that cannot be done?
=== [https://ctext.org/analects/ens Analekte des Konfuzius] ===
{{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch | 季氏富于周公,而求也为之聚敛而附益之。子曰:“非吾徒也。小子鸣鼓而攻之,可也。” }}
Übersetzung James Legge
The head of the Ji family was richer than the duke of Zhou had been, and yet Qiu collected his imposts for him, and increased his wealth. The Master said, "He is no disciple of mine. My little children, beat the drum and assail him."
===[http://www.vuong.ch/wenblog/aufdersuchenachabkuehlungineinersommernacht 杨万里: 夏夜追凉] ===
Yang Wanli (1127-1206): In der Sommernacht sucht man Kühle
{{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |
夜热依然午热同,
开门小立月明中。
竹深树密虫鸣处,
时有微凉不是风。
}}
Die Nachthitze ist gleich der Mittagshitze
Ich öffne die Türe und stehe kurz im Mondschein
Im Dickicht des tiefen Bambuswaldes singen die Insekten
Manchmal gibt es ein wenig Kühlung, aber es ist nicht der Wind
== {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |礼记}} ==
=== Text ===
{{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |诚者自成也,而道自道也。
诚者物之终始,不诚无物。
是故君子诚之为贵。
诚者非自成己而已也,所以成物也。
成己,仁也;成物,知也。
性之德也,合外内之道也,故时措之宜也。}}
=== Richard Wilhelm ===
Die Wahrheit vollendet durch sich selbst, und der Weg leitet durch sich selbst. Die Wahrheit ist Ende und Anfang aller Dinge. Ohne Wahrheit gibt es kein Ding. Darum hält der Edle die Wahrheit wert. Der Wahre macht nicht nur sich selbst vollkommen, sondern eben dadurch macht er auch die Außendinge vollkommen. Sich selbst vollkommen machen ist Menschlichkeit, die Außendinge vollkommen machen ist Weisheit. Das sind die Geisteskräfte des Wesens und der Weg zur Vereinigung des Äußern und des Innern. Ihn allezeit anzuwenden geziemt sich.
=== James Legge ===
Sincerity is that whereby self-completion is effected, and its way is that by which man must direct himself.
Sincerity is the end and beginning of things; without sincerity there would be nothing.
On this account, the superior man regards the attainment of sincerity as the most excellent thing.
The possessor of sincerity does not merely accomplish the self-completion of himself.
With this quality he completes other men and things also. The completing himself shows his perfect virtue.
The completing other men and things shows his knowledge.
But these are virtues belonging to the nature, and this is the way by which a union is effected of the external and internal.
Therefore, whenever he-the entirely sincere man-employs them,-that is, these virtues, their action will be right.
== {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |中国历史}} ==
{{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |大约在前17世纪末前16世纪初,商部族首领汤,利用夏民恨桀的心理,联盟方国部落讨伐桀。灭了亲夏部族韦、顾、昆吾后与桀开战。汤的势力大,桀抵挡不过,且战且逃,最终战败于有娀氏旧址。桀逃至鸣条,汤追之,展开了大战。桀再次被击败,被汤放逐于历山,夏室于约前17世纪末、前16世纪初灭亡。
}}
=== Übersetzungshilfe ===
Es ist noch keine Übersetzungshilfe vorhanden
<noinclude>
{{Navigation zurückhochvor|
zurücktext=Lektion 666|
zurücklink=Vokabeltexte_Chinesisch/_Vokabellektionen/ Lektion 666|
hochtext=Buch Vokabellektionen|
hochlink=Vokabeltexte_Chinesisch/_Vokabellektionen|
vortext=Lektion 668|
vorlink=Vokabeltexte_Chinesisch/_Vokabellektionen/ Lektion 668}}
</noinclude>
emmp1jg0tpiyvej2it1s1si2grf2k1y
Benutzer Diskussion:Tommy Kronkvist
3
106178
1086433
872613
2026-05-20T20:15:21Z
Tommy Kronkvist
82308
1086433
wikitext
text/x-wiki
I'm much more active at Wikispecies ([[:species:User:Tommy Kronkvist|user page]]) but you are of course welcome to contact me here as well.<br>–[[Benutzer:Tommy Kronkvist|Tommy Kronkvist]], 22:15, 20. Mai 2026 (CEST).
i8po0vb9055ilbab24gy0w7k4haj6en
Bad Kissinger Marienkapelle und ihr Friedhof als Spiegelbild der Ortsgeschichte
0
117173
1086426
1085631
2026-05-20T15:42:02Z
Darev
9411
& Kurorchester
1086426
wikitext
text/x-wiki
[[Datei:Bad Kissingen, Kapellenstraße, Marienkapelle-004.jpg|mini|250px|Marienkapelle]]
== Vorwort ==
Im Jahr 2005 ergab eine EMNID-Umfrage Bad Kissingen als den bekanntesten Kurort Deutschlands. Die Gründe dafür mögen vielfältig sein. Einerseits konnte sich unter anderem durch die lokale Salzgewinnung und die hier vorhandenen sieben Heilquellen ein Kurwesen spezialisieren, zum anderen findet der Kurgast bei Spaziergängen im idyllischen Bad Kissinger Saaletal Erholung. Nicht zuletzt wurde der Ort auch von historischen Persönlichkeiten wie der österreichischen Kaiserin Elisabeth von Österreich-Ungarn ("Sisi") und dem Reichskanzler Otto von Bismarck als Quell der Gesundheit geschätzt. Letzterer verkündete am 17. August 1890 stolz: "„Nächst Gott verdanke ich mein gutes Befinden und meine Gesundheit meinem [Leibarzt] Schweninger und Kissingen". Beide wussten auch die Kissinger Natur für Spaziergänge zu schätzen. Während es die Kaiserin auf den Altenberg zog, wo heute ein Denkmal an sie erinnert, unternahm der Reichskanzler gerne Spaziergänge ins idyllische Kaskadental, eine Spazierstrecke nahe des Wildparks Klaushof. Fürstbischof Adam Friedrich von Seinsheim hatte hier künstliche Kaskaden errichten sowie inzwischen verschollene Skulpturen aufstellen lassen.
Genauso wie diese beiden historischen Beispiele kommen auch heutige Bad Kissinger Kurgäste auf ihre Kosten, egal, ob sie nun einfach in der Natur spazieren gehen wollen, sich für die Historie des Ortes interessieren oder gar an Orten wie dem bereits erwähnten Altenberg, der über der Stadt thronenden Burgruine Botenlauben oder dem Kapellenfriedhof, dem Thema dieses Wikibooks, beides kombinieren wollen.
Der Kapellenfriedhof in Bad Kissingen und die dazugehörige Marienkapelle gehören zu den Orten in Bad Kissingen, an denen sich die Stadtgeschichte konzentriert. Zum einen wurden hier über die Jahrhunderte Persönlichkeiten beerdigt, die Bad Kissingen auf unterschiedliche Weise geprägt haben, ob nun im Kurwesen, in der Kunst, oder auf anderen Gebieten. Zum anderen sind mit der Kapelle und dem Friedhof auch überregionale Namen und Ereignisse verbunden, wie zum Beispiel der Name des bekannten Architekten Balthasar Neumann, der die Marienkapelle im 19. Jahrhundert neu gestaltete. Andererseits fanden im Rahmen der "Schlacht bei Kissingen" während des "Deutschen Krieges" von 1866 auch einige Gefechte auf dem Gelände des Kapellenfriedhofs statt, wovon einige Kriegsgräber auf dem Gelände zeugen.
Es ist hoffentlich nicht zuweit hergeholt zu sagen, dass der Kapellenfriedhof in seiner Kombination aus Anlage und Geschichte an den Friedhof Père Lachaise in Paris oder den Wiener Zentralfriedhof erinnert, auch wenn er vielleicht nicht so groß dimensioniert sein mag wie die beiden genannten Beispiele.
Es ist Ziel des vorliegenden Wikibooks, die beschriebene Konzentration von Geschichte an einem einzelnen Ort in Bad Kissingen herauszuarbeiten. Das Wikibook bemüht sich, sich an ein möglichst breites interessiertes Publikum zu wenden, ohne spezielle Vorkenntnisse vorauszusetzen. Möglicherweise werden trotz des umfassenden Anspruchs einige Aspekte der Bad Kissinger Ortsgeschichte unberücksichtigt bleiben müssen. Im Idealfall sind diese Lücken jedoch ein Ansporn für den interessierten Leser dieses Wikibooks, über die Grenzen des Wikiboooks hinaus auf Entdeckungsreise zu gehen.
Es stieß in Bad Kissingen auf große Freude, als die Kurstadt im Juli 2021 gemeinsam mit zehn anderen Städten zum UNESCO-Welterbe „Great Spa Towns of Europe“ ernannt wurde. Möge dieses Wikibook dazu beitragen, dieses Geschichtsbewusstsein zu vertiefen!
== Ein Überblick über die Bad Kissinger Geschichte ==
=== Anfänge ===
==== Ersterwähnung ====
Die erste bekannte Erwähnung Kissingens findet sich in einer Schenkungsurkunde vom 21. Juni 801, in der ein Adeliger namens Hunger seinen gesamten Besitz "im Gau Saalegau im Dorf Kissingen [...] bis auf 22 Morgen an Wiesen und Ackerland, sechs Ochsen, zwei Kühen und ebensovielen Kälbern" an das vom hl. Bonifatius gegründete Kloster Fulda verschenkte. Hrabanus Magnus, 822 bis 842 Abt im Kloster Fulda, ließ durch den Schulmeister und Bibliothekar Rudolf von ca. 20 bis 830 diese Urkunden sammeln. In diesem Zusammenhang entstand ein nach Gauen geordnetes Kapitular in acht Bänden. Da der Inhalt der Urkunde durch Abschrift gesichert war, wurde das Original wahrscheinlich weggeworfen.
Von diesen sieben Bänden hat sich nur ein einziges erhalten und zwar das Kartular über den Worms-, Nahe- und Rheingau und über das Elsass. Spuren der übrigen Bände weisen nach Süddeutschland. Anfang des 17. Jahrhunderts wurde der Band des Kartulars mit den überlieferten Urkunden des Grabfeld- und Saalegaus und damit auch die Schenkungsurkunde des Adeligen Hunger durch den Humanisten Johannes Pistorius d. J. wiederentdeckt. Bevor die Handschrift danach wieder verloren ging, hat Pistorius d. J. das Kartular im Jahr 1607 im Druck veröffentlicht.
Die sechs übrigen Bände sind allerdings noch durch den "Codex Eberhardi" überliefert, eine Fuldaer Urkundenüberlieferung, die von ca. 1150 bis 1165 entstanden ist. Zusammengestellt wurde sie vom Mönch Eberhard, allerdings mit inhaltlichen Ungenauigkeiten. Während Hrabanus Maurus die Originaldokumente sichern wollte, ging es Eberhard um die Außenwirkung zur Ehre und zum Nutzen seines Klosters.
Die Beschreibung des Besitzes, die Hunger laut seiner Schenkungsurkunde von 801 zurückbehält, lässt darauf schließen, dass es sich bei Hunger um einen Adeligen handelte. Weitere Urkunden, die Hunger als Zeugen für Schenkungen ausweisen, deuten auf ein gewisses Ansehen hin, das Hunger im Kissinger Raum genoss. Erwähnungen des Namens Hunger bis zum Jahr 890 deuten auf Nachfahren hin.
Für das Jahr 823 sind zwei Urkunden in Zusammenhang mit Kissingen bekannt: Zum einen übergab Erkanbert zwei Salinen in Kissingen, zum anderen Gotahelm seinen Anteil an einer Salzquelle an das Kloster Fulda. Da die Salzgewinnung noch eine wesentliche Rolle in der Kissinger Geschichte spielen sollte, wird uns dieses Thema noch ausführlicher begegnen.
Ein weiterer wichtiger dokumentarischer Nachweis für den Ort Kissingen stammt aus dem Jahr 840: Kaiser Ludwig der Fromme stellte hier am 12. Mai 840 eine Urkunde in einem Rechtsstreit aus. Auf die Klage von Helis, die Königsleute des Fiskus Gerafelt hätten sein Königsgut in Besitz genommen und dem Königsgutbezirk einverleibt, erstattet Ludwig der Fromme dem Helis seinen Besitz in der Mark Vachdorf und zu Belrieth an der Werra, nachdem Graf Poppo die Angaben des Helis bestätigt hatte. Soweit bekannt hat Kissingen weder vorher noch nachher einem mittelalterlichen Herrscher, wie in diesem Beispiel Ludwig dem Frommen, als Aufenthaltsort gedient.
==== Ortsname ====
Der Name "Kissingen" gehört zu den großen Rätseln der bayerischen Ortsnamenskunde. Obwohl der Name in der Überlieferung des Klosters Fulda bis zu 15 mal genannt wird, fällt die Bestimmung einer "Grundform" schwer. Hinzu kommt, dass der "Codex Eberhardi", wie schon angeführt, die Überlieferung verfälscht. Die Edition des Johannes Pistorius nennt die Namensvariante Chizziche. Daneben sind für das 9. Jahrhundert kopial auch die Varianten Chizzinge, Kizzingen, Chizzicha, Chiz(z)zichi, Chizeche, Kizzeche, Kiz(z)icha, Kizecha, Kizzih, Chizzihheim undKizzech bekannt. Daraus geht hervor, dass die Ortsbezeichnung auf keine -ing-form zurückgeht, hinter der in der früheren Forschung fälschlicherweise eine alemannische Siedlung vermutet wurde. Hingegen erscheint die -ing-Form erst als Analogiebildung zu Ortsnamen wie Kitzingen oder des Nachbarortes Nüdlingen. Mit dieser ing-Form wurden Ansiedlugen benannt, die in Abhängigkeit zu einem Namensträger standen, womit Kitzingen "Siedlung bei den Leuten eines Kitzo" und Nüdlingen "Siedlung bei den Leuten eines Hnutilo" bedeutet. Im Falle von Kissingen ist ein Namensträger namens Chizzo unbekannt und wäre, falls es ihn gegeben hat, erst noch nachzuweisen.
=== Die Markgrafen von Schweinfurt, die Henneberger und die Burg Botenlauben ===
[[Datei:Burg Botenlauben-Juni2007.JPG|mini|Burgruine Botenlaube]]
[[Datei:Codex Manesse Otto von Botenlauben.jpg|mini|left|Graf Otto von Botenlauben vertraut einem Boten sein Lied an ([[Codex Manesse]], 14. Jhd.)]]
Für die nächsten drei Jahrhunderte gibt es keine dokumentarischen Nachweise in Bezug auf Kissingen. In dieser Zeit verlagerten sich die Besitzverhältnisse. Das Kloster Fulda verlor an Einfluss, zunächst zugunsten an das 1057 im Mannesstamm ausgestorbene Grafengeschlecht der Markgrafen von Schweinfurt und danach an die für das Jahr 1096 erstmals genannten Grafen von Henneberg. Der Aribone Graf Boto von Kärnten stellte eine wichtige Verbindung zwischen beiden Grafengeschlechtern dar, als er Judith, die Tochter des letzten Schweinfurter Markgrafen Otto heiratete. Er war wohl auch Namensgeber für die im heutigen Stadtteil Reiterswiesen über Kissingen thronende, für 1206 erstmals urkundlch bezeugte Burg Botenlaube. Es ist nun der Henneberger Otto I. von Botenlauben (geb. um 1175, gest. 1244), der sich nach der Burg benannte. Otto war Sohn des Grafen Poppo VI. von Henneberg, und fuhr mit dem von Kaiser Heinrich VI. initiierten Kreuzzug ins Heilige Land, wo er Beatrix Courtenay kennenlernte und heiratete. Mit ihr bezog er im Jahr 1220 die Burg Botenlaube. Otto war auch als Minnesänger tätig; Lieder von ihm finden sich u. a. in der Liederhandschrift "Codex Manesse" oder in den "Carmina Burana". Bekannt ist die Schleiersage, wonach Otto und Beatrix auf der Burg spazierengingen und der Wind Beatrix' Schleier fortwehte, woraufhin das Ehepaar gelobte, am Fundort des Schleiers ein Kloster errichten zu lassen, was schließlich zum Bau des Klosters Frauenroth im Jahr 1231 (Frauenroth ist heute Stadtteil des Nachbarortes Burkardroth). Da Sohn Otto II. und dessen Gattin Adelheid sich 1230/31 dem Deutschen Orden anschlossen, und sie, wie Otto und Beatrix sagten, sie auf Erden keine Erben mehr hätten, verkauften sie im Jahr 1234 die Burg Botenlauben an das Hochstift Würzburg unter Bischof Hermann I. von Lobdeburg.
Im Jahr 1240 setzte Graf Poppo VII. von Hennneberg, ein Bruder von Otto I. in einem Vertrag mit Bischof Hermann I. von Lobdeburg Kissingen als Friedenspfand ein. Für das Jahr 1279 ist Kissingen als ''oppidum'' bezeugt. Diese Stadterhebung dürfte eine Rolle im Machtkampf zwischen den Hennebergern und dem Hochstift Würzburg gespielt haben. In diesem Zusammenhang dürfte auch die Entwicklung des Marktrechts und der zivilen Gerichtsbarkeit in Kissingen stehen. In politischer Hinsicht entwickelten sich ab 1291 nach dem hennebergischen Stadtherren Poppo des Jüngeren von Henneberg-Coburg Erbauseinandersetzungen und Verpfändungen zwischen den Hennebergern, den Markgrafen von Brandenburg und den Würzburger Bischöfen. Seit im Jahr 1394 das Hochstift Würzburg Kissingen vom Herzog von Stettin namens Swantibor käuflich erwarb, wurde das politische Schicksal Kissingens maßgeblich von Würzburg aus bestimmt.
[[Datei:ThungenBishopdetail.jpg|mini|Detail Epitaph von Fürstbisch Konrad von Thüngen im Würzburger Dom.]]
In der Folgezeit machte sich die vom Mönch Martin Luther angestoßene Bewegung der Reformation auch in Kissingen bemerkbar. Ausgehend vom Ablasshandel, den Papst Julius II. zur Finanzierung des Baus des Petersdomes in Rom einführte, veröffentlichte Luther 95 Thesen, in denen er auf Missstände in der katholischen Kirche aufmerksam machte. In diesem Zusammenhang brach 1525 ein Aufstand der Bauern, der ''Bauernkrieg'' aus, der auch das Hochstift Würzburg erschütterte. Fürstbischof Konrad von Thüngen musste vor den Aufständischen nach Heidelberg fliehen. Von den Plünderungen war unter anderem das in der Kissinger Nachbarschaft gelegene Kloster Aura betroffen. Nach verheerenden Niederlagen der Bauern gegen die Truppen des Schwäbischen Bundes Anfang Juni brach die Revolte der Bauern in sich zusammen. Konrad von Thüngen führte im Hochstift Würzburg ein grausames Strafgericht durch, in dessen Zusammenhang er seine Untergebenen wieder auf sich vereidigen sowie 200 Personen, unter anderem den Kissinger Stadtpfarrer Johannes Wüst, hinrichten ließ.
Neben dem Kloster Aura fiel auch die Botenlaube dem Bauernaufstand zum Opfer, indem sie von Bauern vom Kloster Aura verwüstet wurde. Der Sage nach wurden sie vom verräterischen Burgkoch eingelassen, der allerdings nicht mit dem versprochenen Gold belohnt, sondern geblendet und umgebracht wurde. Seitdem soll sein unruhiger Geist – so behauptet zumindest die Sage – in stürmischen Nächten auf der Burg umherirren und auf seinem Küchenbrett hacken.
[[Datei:Julius Echter 1586.jpg|mini|Julius Echter von Mespelbrunn (Ölgemälde, 1586), unbekannter Maler, Martin von Wagner Museum<ref>Stefan Kummer: ''Architektur und bildende Kunst von den Anfängen der Renaissance bis zum Ausgang des Barock.'' In: Ulrich Wagner (Hrsg.): ''Geschichte der Stadt Würzburg.'' 4 Bände; Band 2: ''Vom Bauernkrieg 1525 bis zum Übergang an das Königreich Bayern 1814.'' Theiss, Stuttgart 2004, ISBN 3-8062-1477-8, S. 576–678 und 942–952, hier: S. 588 und 605 f.</ref>]]
Endgültig von den Unruhen erholt hat sich das Hochstift Würzburg unter Fürstbischof Julius Echter von Mespelbrunn. Unter anderem ist hier die Gegenreformation zu nennen, die sich in der Stärkung des karitativen Wirkens unter anderem durch die Gründung des Würzburger Juliusspitals im Jahr 1576 und in dem Ausbau des Bildungswesens unter anderem durch die Gründung der Würzburger Universität im Jahr 1582 bemerkbar machte. In religiöser Hinsicht übte er Druck auf jene aus, die dem neuen Glauben nicht abschworen. Den Unnachgiebigen unter ihnen blieb nur die Auswanderung. Die im Jahr 1588 erfolgte Verkleinerung des Kissinger Pfarrsprengels steht im Zusammenhang mit der Verstärkung der seelsorgerischen Maßnahmen. So verblieben nur noch Kleinbrach, Winkels, Garitz, Reiterswiesen und Botenlaube in der Pfarrei Kissingen; weiter entfernte Orte wie Waldfenster und Poppenroth gingen an Burkardroth und Oberthulba. Bereits 1578 wurde Elfershausen eigene Pfarrei.
In kirchlich-architektonischer Hinsicht hat der Julius-Echter-Turm mit einem achteckigen Turmhelm auf einem achteckigen Grundriss seine Spuren hinterlassen, der zum Beispiel auf dem Kirchturm der Kissinger St.-Jakobus-Kirche zu sehen ist.
In politischer Hinsicht regelte Fürstbischof Julius Echter von Mespelbrunn in zahlreichen Dorf- und Stadtordnungen das Leben der Gemeinden, so wie am 30. März 1576 auch in Kissingen.<ref>StAW, HV Ms.f.175 II S. 156ff.</ref> So sollten zum Beispiel die Produkte von Bäckern und Metzgern regelmäßig kontrolliert, alle drei Monate die Feuerstätten besichtigt und die Bauholzverteilung gerechter als vorher gehandhabt werden. Ferner gab der fürstbischöfliche Amtmann und Pfandherr Valentin Echter zu Mespelbrunn im Jahr 1584 die Anweisung, dass der Rat der Stadt nun jeden Donnerstag zusammenzukommen und seine Verhandlungen und Beschlüsse in ein Buch einzutragen habe. Am 13. September 1584 begann eine fast lückenlos im Stadtarchiv erhaltene Reihe von Ratsprotokollen.<ref>StadtAKG, RP</ref>
=== Die Salzgewinnung und die Kur gewinnen an Bedeutung ===
[[Datei:Kampf Salzquellen Kissingen.JPG|mini|Detail aus dem Fresko „Kampf der Hermunduren und Katten um die Salzquellen bei Kissingen 58 nach Christo“ von Johann Georg Hiltensperger.]]
[[Datei:Wuerzburg 110friedrichwirsberg.jpg|mini|Darstellung des Fürstbischofs Friedrich vn Wirsberg auf seinem Epitaph im Würzburger Dom.]]
Im Rahmen der Ersterwähnung des Ortes wurden in diesem Wikibook bereits Überlieferungen über zwei Salinenschenkungen im 9. Jahrhundert erwähnt. Jedoch bezieht sich bereits eine Überlieferung beim römischen Geschichtsschreiber Tacitus möglicherweise auf die Region von Hausen (heute Stadtteil von Bad Kissingen), das für die Kissinger Salzgewinnung noch eine wichtige Rolle spielen sollte. So berichtet Tacitus, dass im Jahr 58 n. Chr. zwei germanische Stämme um einen für die Produktion von Salz bedeutsamen Grenzfluss kämpften; allerdings ist nicht eindeutig erwiesen, ob sich dieser Bericht auf die Region von Hausen bezieht.
[[Datei:Untere Saline in Hausen (Bad Kissingen, Germany) – E724.jpg|mini|left|Die ''Untere Saline'' (Ostansicht)]]
Es war zur Mitte des 16. Jahrhunderts, dass die Würzburger Bischöfe begannen, sich für das Kur- und Salinenwesen in Kissingen zu interessieren und diese an Bedeutung für den Ort gewannen. Die noch geringe wirtschaftliche Bedeutung der Salzquellen begann sich zu ändern, als im Jahr 1562 Friedrich von Wirsberg mit den Handelsleuten Kaspar Seiler aus Augsburg und Berthold Holzschuher aus Nürnberg einen Vertrag abschloss, der beiden die Nutzung sämtlicher Salz- und Sauerbrunnen sowohl Kissingen als auch im gesamten Hochstift überließ. Der Bischof überließ den beiden umfangreiche Subventionsleistungen. Sowohl der Platz als auch das Bauholz für die Gradierwerke und Sudhäuser wurden kostenlos zur Verfügung gestellt. Die beschäftigten Salzarbeiter bekamen Steuerfreiheit für ihr Bier und ihren Wein. Wurde Salz über den Bedarf des Hochstifts produziert, durften die beiden Handelsleute den Überschuss exportieren. Dafür wurde Fürstbischof Friedrich von Wirsberg das Vorkaufsrecht von einem Gulden rheinisch für eine Scheibe Salz sowie ein Zehntel der Einnahmen gewährt. Seiler und Holzschuher errichteten im heutigen Stadtteil Hausen eine Salzgewinnungsanlage, die ''Untere Saline''. Die von Seiler eingesetzten Gradierhäuser, in denen die Sole über Reisig geleitet und fein verteilt wurde, wodurch das Wasser verdunstete und sich die Salzkonzentration vor dem eigentlichen Eindampfen der Sole erhöhte, waren die ersten ihrer Art in Deutschland. Dennoch rentierte sich das Vorhaben für Seiler und Holzschuher nicht, so dass beide im Jahr 1570 aufgaben.
Als nächstes versuchte der Münnerstädter Jodokus Deichmann, ein früherer Mitarbeiter Seilers, sein Glück. Im Jahr 1575 schloss er mit dem Hochstift Würzburg unter Fürstbischof Julius Echter von Mespelbrunn einen Vertrag und verpflichtete sich, vier lange neue Kästen zur Gradierung und eine große neue Salzpfanne auf eigene Kosten zu errichten. Der Beitrag des Hochstifts bestand in Bauholz zum Vorzugspreis. Der Vertrieb lag zu einer Pacht von jährlich 50 Gulden bei Deichmann, während der Fürstbischof das Vorkaufsrecht über das gesamte Salz hatte.
Ein Bericht des sächsischen Arztes Dr. Kolreuter, der im Jahr 1578 die Kurmöglichkeiten in Kissingen erforschte, an Kurfürst August von Sachsen über die Technik und die vorhandenen Salinenanlagen ergab, dass je Sudvorgang in der einzigen Pfanne nach 16 Stunden 8 halbe Nürnberger Metzen gewonnen wurden. Der geringe Salzgehalt der Sole einerseits und andererseits die Tatsache, dass das Hochstift Würzburg kein Kapital zur Errichtung einer größeren Anlage gewährte, lassen den Schluss zu, dass Deichmann in Kissingen nicht viel verdiente.
Im 17. Jahrhundert wurde es relativ still um die Kissinger Salinen. Zur Mitte des 18. Jahrhunderts jedoch setzten nicht nur Maßnahmen zur Förderung des Kurbetriebes, sondern auch des Salinenwesens ein. In einem Bericht von 1730 an den Würzburger Fürstbischof wurden sieben Ursachen für den schlechten Zustand der Salinenanlagen genannt, so zum Beispiel die Überschwemmung der Salzbrunnen durch die Saale, der Mangel an Brennholz und die Konkurrenz der hessischen und sächsischen Salzkärrner. Gegen sie wurde jedoch nichts unternommen, weil sie den Verkaufserlös im Land ließen und durch den Einkauf heimischer Produkte für Zolleinnahmen sorgten. Laut einem Gutachten an die Hofkammer im Jahr 1738 war der Zustand des Kissinger Salzes der schlechteste in ganz Europa. Das Gutachten schlug vor, das Geld nicht in neue Salinenanlagen zu stecken, sondern neue Solequellen zu erschließen. Das Gutachten sah keine Gefahr, der Export des heimischen Salzes würde die Einfuhr des hessischen und sächsischen Salzes und damit den Export des heimischen Weines beeinträchtigen.
Im Jahr 1738 übernahm die Handelsgesellschaft Todesco die Salzproduktion; die Bauaufsicht über die zu errichtenden Salinengebäude ging an den Oberlieutenant Balthasar Neumann, den Architekten der Würzburger Residenz, der später mit dem Kissinger Apotheker Boxberger die Rakoczi-Quellen entdeckte. Er wird uns auch im Zusammenhang mit der Neugestaltung der Marienkapelle noch einmal begegnen. Zehn Jahre später gingen die Salzhütten an Johann Samuel Dabré als vererbbares Lehen, der dem Hochstift Würzburg eine jährliche Salzproduktion von 20.000 Zentnern versprach. Dem Hochstift wurde ein Zehntel der Einnahmen garantiert. Die Vertragsklausel, nach der der Betrieb des Kurbrunnens nicht beeinträchtigt werden durfte, zeugt von einem Bewusstsein für den Kurbetrieb.
[[Datei:Fürstbischof Seinsheim Diözesanmuseum Bamberg.JPG|mini|Fürstbischof Adam Friedrich von Seinsheim]]
[[Datei:Obere Saline (Straßenseite) 2.jpg|mini|links|Außenansicht der Oberen Saline]]
Nach den überschaubaren Bemühungen der Fürstbischöfe im 17. Jahrhundert um das Kissinger Salinenwesen unternahm Fürstbischof Adam Friedrich von Seinsheim wieder größere Anstrengungen. Aus dem gezielten Ausbau der Salinenanlagen nahe dem Kloster Hausen entstand die ''Obere Saline'', an der später, Reichskanzler Otto von Bismarck zahlreiche Kuraufenthalte verbrachte. Das Wikibook wird später noch einmal auf dieses Thema zurückkommen. Zwischen 1764 und 1767 entstanden neue Gradierwerke und Salzpfannen sowie ein Kanal. Die Anlage wurde durch eine 1764 gegründete Salinensozietät mit 40 Aktionären und einem Stammkapital von 180.0000 Gulden finanziert.
Die hohen Erwartungen des Unternehmens wurden jedoch nicht erfüllt. So wurden jährlich höchstens 11.000 statt der erhofften 20.000 Zentner Salz produziert und reichten nicht einmal aus, den jährlichen Bedarf des Hochstifts von 70.000 bis 80.000 Zentnern zu decken. Zusätzlich galt das Salz als teuer und qualitativ nicht hochwertig. Die Wirtschaftspolitik der würzburger Fürstbischöfe trug ihren Teil zur Situation bei. So hatte beispielsweise ein Handelsabkommen von 1769, das Bayern die Einfuhr von Salz und Würzburg hingegen im gleichen Maße den Export von Wein nach Bayern eine vermehrte Einfuhr des hochwertigen Reichenhallerer Salzes zur Folge. Ende des 18. Jahrhunderts kehrte das Hochstift wieder zum Mittel der Verpachtung zurück, die wieder jährlich 16.000 Gulden einbringen sollte.
In der wirtschaftlichen Förderung der Kissinger Salzproduktion war es einerseits Fürstbischof Adam Friedrich von Seinsheim, der sich hervortat. Andererseits wurden zugunsten anderer Interessen wie zum Beispiel dem Weinexport Investitionen wie beispielsweise die Soleleitung von Reichenhall nach Traunstein im Jahr 1616 gemieden. Auch Ende des 18. Jahrhunderts finanzierte das Hochstift seinen Haushalt vorwiegend mit bäuerlichen Abgaben, Zöllen und Steuern und nur zu geringem Teil mit wirtschaftlichen Aktivitäten.
==== Der Kurbetrieb ====
Nach der mäßigen Förderung des Kurbetriebs durch die Fürstbischöfe folgte nach dem Dreißigjährigen Krieg eine gezielte Förderung im 18. Jahrhundert.
Der erste Nachweis für einen Kurgast in Kissingen stammt aus dem Jahr 1520. Laut den Protokollen des Würzburger Domkapitels wurde einem Domherren die Genehmigung für einen Kuraufenthalt in Kissingen erteilt. Im Jahr 1544 erlaubte Fürstbischof Konrad von Bibra den Hauswirten, Wein und Bier außerhalb des Wirtshauses auszuschenken. Die Kur spielte zu der Zeit weder für die Fürstbischöfe noch für die Kissinger eine größere Rolle.
Dafür finden sich zu der Zeit einige prominente Kurgäste wie der letzte Graf von Henneberg, Georg Ernst, der zwischen 1573 und 1581 Stammgast wurde, und der bereits erwähnte sächsische Hofarzt Kolreuter, der die Möglichkeiten der Kissinger Kur erkundete. Ebenfalls zur Erkundungsreise kam im Jahr 1587 Dr. Johann Wittich, Leibarzt des Grafen Albrecht von Schwarzburg, der einen regelmäßigen Transport des Heilwassers in die Residenz des Grafen in Arnstadt auskundschaften sollte.
[[Datei:Schönborn Würzburg Mainfränkisches Museum Marienberg.jpg|miniatur|Fürstbischof Friedrich Karl von Schönborn (um 1730)]]
[[Datei:II. Rákóczi Ferenc Mányoki.jpg|mini|left|Franz II. Rákóczi, Porträt von Adam Manyoki.]]
Nach dem Dreißigjährigen Krieg kam es unter Fürstbischof Friedrich Karl von Schönborn zur Entdeckung der Rákoczy-Quelle, die Kissingens Ruf als Heilbad begründete. Die Entdeckung erfolgte durch den Architekten Balthasar Neumann, der im Auftrag des Fürstbischofs zum Schutz der Heilwasser Maxbrunnen und Pandur den Lauf der Fränkischen Saale verlegte, und des hiesigen Apothekers Georg Anton Boxberger. Zu Ehren der beiden Quellenentdecker wurde im Rosengarten das Boxberger-Neumann-Denkmal errichtet. Balthasar Neumann wird uns bei der Restaurierung der Marienkapelle noch einmal begegnen. Namenspate der neu entdeckten Quelle war der ungarische Freiheitskämpfer Franz II. Rákoczy, der zwischen 1706 und 1711 in Kämpfe gegen würzburgische Dragoner in Österreich verwickelt war. Ein Aufenthalt Rákoczys in Kissingen lässt sich nicht nachweisen, doch dürften Veteranenoffiziere seines Dragonerregiments den Namen Rákoczy nach Kissingen gebracht haben. Der Name Pandur hingegen bezieht sich auf die in Südungarn aufgestellten Truppen der österreichischen Armee, insbesondere das Pandurenkorps unter dem Freiherren von Trenck.
Gleichzeitig wurde das Aussehen der Kuranlage durch die Anlage des Kurgartens und das neuerbaute Kurhaus aufgewertet.
==== Kissingen baut unter Friedrich von Gärtner ====
[[Datei:Ludwig I of Bavaria.jpg|mini|Ludwig I., König von Bayern, Gemälde von Joseph Karl Stieler, 1826]]
[[Datei:Friedrich von gaertner.jpg|miniatur|left|Friedrich von Gärtner, aus dem Buch von Hans Moninger, 1882]]
Der Höhepunkt der aufstrebenden Entwicklung des Ortes war die Bautätigkeit unter König Ludwig I. und dem Architekten Friedrich von Gärtner. In diesem Zusammenhang spielten die Folgen der Französischen Revolution und der Napoleonischen Kriege eine Rolle, die sich zwar nicht in Kissingen selbst abspielten, sich aber dennoch auf den Ort und seinen Kurbetrieb auswirkten. So gehörte Kissinge von nun an - vorher über Jahrhunderte vom Würzburger Hochstift regiert - durch den Reichsdeputationshauptschluss und die Mediatisierung des Hochstifts Würzburg zum Kurfürstentum Bayern. Durch die langen Kriege waren die Kurgastzahlen drastisch gesunken, was für Kissingen eine Krise bedeutete. Der Medizinische Rat Dr. Horch kam in einem Gutachten im Jahr 1811 zu dem Schluss, dass Kissingen ein Provinzbad war und sein Angebot und seine Infrastruktur der Nachfrage nicht genügten. Ferdinand Erzherzog von Österreich, Großherzog von Toskana, der von 1805 bis 1814 auch das Territorium des Großherzogtums regierte, zu dem auch Kissingen gehörte, suchte nach Möglichkeiten für einen Aufschwung für die Region. Dies wurde aber erst ab dem Jahr 1814 möglich, als Franken durch die Pariser Konvention endgültig zum Königreich Bayern gehörte. Das bayerische Königshaus erkannte das - auch wirtschaftliche - Potential des Kurortes Kissingen. Die Investitionen der Wittelsbacher bedeuteten einen Modernisierungsschub für den Ort.
Johann Friedrich Gärtner wurde am 10. Dezember 1791 in Koblenz als Sohn des Architekten Johann Andreas Gärtner und dessen Ehefrau Barbara Sachs geboren. 1809 studierte er an der Kunstakademie München und von 1812 bis 1814 in Paris. Es folgten mehrere Jahre Aufenthalt in Rom, Neapel und auf Sizilien. Im Jahr 1819 erhielt er einen Ruf als Professor der Baukunst an der Kunstakademie. Nebenbei leitete er als Direktor die Porzellanmanufaktur Nymphenburg und Glasmalereianstalt. Im Jahr 1827 wurde er mit dem Entwurf für ein neues königliches Bibliotheks- und Archivgebäude (heute: Bayerische Staatsbibliothek) beauftragt. Durch diese Arbeit erlangte er das besondere Vertrauen König Ludwig I., der ihn nun auch mit der nördlichen Fortführung der Münchner Ludwigstraße beauftragte. Im Jahr 1829 begann von Gärtner mit dem Bau der Ludwigskirche. Er wurde zum Oberbaurat und Generalinspektor der architektonischen und plastischen Kunstdenkmäler Bayerns ernannt, übernahm die Leitung einer Reihe öffentlicher Bauten, wurde 1840 geadelt und ging mit einem Gefolge von Bauleuten und Malern nach Athen, um dort den nach seinem Entwurf erbauten königlichen Palast zu vollenden und auszuschmücken. Im Jahr 1842 wurde er zum Direktor der Münchner Akademie ernannt und begann im selben Jahr mit der Erweiterung des Alten Südlichen Friedhof in München. Gärtner erhielt 1837 das Ritterkreuz des Verdienstordens der Bayerischen Krone, verbunden mit der Erhebung in den persönlichen Adel. Außerdem war er Kommandeur des Erlöser-Ordens sowie Offizier des belgischen Leopoldsordens. Von 1841 bis 1644 errichtete er die Feldherrnhalle in München, die im am 9. November 1923 Schauplatz von Adolf Hitlers Putschversuch wurde. Gärtner starb am 21. April 1847 in München und wurde in dem von ihm selbst entworfenen Neuen Teil des Alten Südlichen Friedhofs in München bestattet.
Die Weichenstellungen in der Städteplanung und im Kurviertel, die in dieser Zeit von Ludwig II. und Architekt Friedrich von Gärtner gelegt wurden, wirken bis in die heutige Zeit hinein. Die Idee, das durch die Ausfallstraße nach Bad Brückenau und Hammelburg geteilte Kurviertel zu vereinen, stammt von König Ludwig I. Die Funktion der bis dahin bestehenden Saalebrücke im Kurviertel wurde von der heutigen Saalebrücke übernommen, die über die Ludwigsbrücke verlängerte Ludwigstraße wurde neue Verkehrsachse.
[[Datei:Бад Киссинген. Аркаденбау со стороны сада.jpg|miniatur|Panoramasicht auf den vierflügeligen Arkadenbau mit Conversationssaal]]
[[Datei:Krugmagazin 01.JPG|mini|left|Krugmagazin]]
[[Datei:Brunnenhalle 05.jpg|mini|left|Brunnenhalle in Bad Kissingen (1842)]]
Zwischen 1835 und 1838 entstand im Kurviertel der Arkadenbau mit dem kleinen Konversationshaus, dem heutigen "Kleinen Kursaal". In den Jahren 1836 bis 1839 entstand das heutige Krugmagazin, weil das alte Krugmagazin den Anforderungen des Wasserversandes nicht mehr gerecht wurde. Im Jahr 1842 entstand neben dem Arkadenbau die gusseiserne Brunnenhalle, die als erster Ingenieurbau Bayerns gilt.
Der persönliche Einfluss bis him zum Eingreifen bis ins Detail von König Ludwig I. drückt nicht nur die personalisierte Linie seiner Politik, sondern auch sein persönliches Interesse für die Entwicklung Kissingens aus. Sein Interesse für Denkmalschutz äußerte sich auch in seinem Einsatz für die Burgruine Botenlauben.
Ferner wurden Maßnahmen zur Verschönerung des Ortes getroffen. In der Umgebung wurden Wander- und Spazierwege eingerichtet, die das Naturerlebnis steigern sollten, der Altenberg zur Parkanlage umgebaut, die Burgruine Botenlaube in das Konzept miteingebunden, die Forsthäuser Klaushof und Seehof entwickelten sich zu gastronomischen Zielen.
Dieses Engagement seitens der Regierung bedeutete nicht nur eine Einnahmequelle, sondern diente einer Etablierung von Staatsbädern, die Finanzquelle und staatliche Repräsentation vereinte, und der Integration der Untertanen in den Gesamtstaatenverband. Die adelige Kurgaststruktur von Bad Kissingen brach zugunsten einer bürgerlichen Oberschicht auf. Dies trug durch einen steigenden Wohn- und Lebensstil zu einem langsam wachsenden Qualitätsanstieg in allen Bereichen des Kulturlebens bei.
Gleichzeitig setzte auch eine Entfestigung des Stadtbildes ein, indem die mittelalterlichen Wehranlagen in Form von Stadtmauern und Türmen bis auf wenige Reste verschwanden. Die mittelalterlichen Straßenstrukturen sind im Stadtbild noch zu erkennen. Möglich war nun ein Ausgreifen der Stadt in alle Richtungen.
Mit den Baumaßnahmen unter Ludwig I. und seinem Architekten Gärtner setzte sich auch ein Prozess in Gang, in dem sich der Schwerpunkt des Kurgastbesuchs vom Adel auf die Oberschicht verlagerte, die einerseits durch ihre wirtschaftliche Potenz und andererseits durch ihre wachsenden Ansprüche in Wohn- und Lebensstil zu einem Qualitätsschub in der Entwicklung des Kurortes sorgte. Die Entwicklung Kissingens als Kurort für Bürgertum und Adel hielt bis zum Ersten Weltkrieg an.
Die Wechselwirkung zwischen Salzgewinnung und Kurbetrieb hielt nicht so lange an. Lange Zeit über liefen beide als sich gegenseitig bedingende Einnahmequellen nebeneinander. Dies änderte sich mit dem Jahr 1868, als das staatliche Salzmonopol fiel und die industrielle Salzgewinnung aufgegeben wurde. Von nun an war es der Kurbetrieb, der der Salzgewinnung eine schwindende Restbedeutung gab.
=== "Schlacht bei Kissingen" ===
[[Datei:Gefecht-Kapellenfriedhof-Kissingen-1866.jpg|left|mini|300px|Zeitgenössische Postkartendarstellung der ''Schlacht bei Kissingen''.]]
[[Datei:War Memorial 1866 (Winkels) – 20140923-006.JPG|mini|300px|Das Gefallenendenkmal am Winkelser Ortsausgang für den ''Deutschen Krieg''.]]
[[Datei:War Memorial 1866 (Winkels) – 20140923-014.JPG|mini|300px|Inschrift am Gefallenendenkmal]]
Der ''Deutsche Krieg'' von 1866 machte auch Bad Kissingen nicht Halt. Beim ''Deutschen Krieg'' handelte es sich um den zweiten von drei Einigungskriegen, die unter Reichskanzler Otto von Bismarck zur Gründung des Deutschen Reiches führen sollten. Der erste Einigungskrieg war der ''Deutsch-Dänische Krieg'' von 1864, der dritte der ''Deutsch-Französische Krieg'' von 1870/71. Im ''Deutschen Krieg'' kämpften Preußen und seine Verbündeten gegen Österreich, um dessen Vormachtstellung im Deutschen Bund einzudämmen. Die Kampfhandlungen erfassten auch Bad Kissingen. So drangen preußische Truppen von Süden her über Garitz (heute Stadtteil von Bad Kissingen) in Bad Kissingen ein und besetzten die ''Villa Vay'' (später ''Café Bellevue''). Nachdem die bayerischen Truppen die Saalebrücken in den heutigen ''Luitpoldpark'' zerstört hatten, bauten die preußischen Truppen aus Möbelresten aus der ''Villa Vay'' provisorische Brücke und überquerten die Saale. Zwei Grabmäler auf dem Altenberg erinnern an die Kampfhandlungen. Auf ihrem Durchzug durch Kissingen erreichten die preußischen Truppen auch die Marienkapelle mit dem Kapellenfriedhof (dazu später mehr in den entsprechenden Kapiteln über die Marienkapelle und den Kapellenfriedhof in diesem Wikibook). Ein entscheidendes Gefecht fand schließlich zwischen dem heutigen Bad Kissinger Stadtteil Winkels und dem Nachbarort Nüdlingen statt. Einige Gefallene fanden auf dem Nüdlinger Friedhof ihre letzte Ruhe. Zwischen Winkels und Nüdlingen erinnert ein im Jahr 1867 von Bildhauer Michael Arnold geschaffener Gedenkstein an die in der Schlacht gefallenen Soldaten des 2. Posenschen Infanterie-Regimentes Nr. 19.
[[Datei:Bad Kissingen, Bahnhof-001.jpg|mini|links|Bahnhof von Bad Kissingen.]]
Durch die "Schlacht bei Kissingen" wurden logistische Probleme in Kissingen deutlich. Dies führte dazu, dass König Ludwig II. am 9. April 1867 eine Bahnverbindung für den Ort genehmigte. Im Mai 1874 konnte der neoklassizistische Bahnhofsbau eröffnet werden. Der Bahnhofsbau beherbergt auch ein als "Königssalon" genanntes "Fürstenzimmer" für den Hofadel, das als Wartebereich beziehungsweise als Stätte für Empfänge gedacht war.
=== Die Kur wird ausgebaut ===
==== "Kurorchester Bad Kissingen" / "Staatsbad Philharmonie Kissingen" ====
[[Datei:Bad Kissinger Kurorchester 02.JPG|mini|350px|Das Kurorchester Bad Kissingen (2012) auf der Wandelhallen-Drehbühne von 1911; Leitung: Elena Iossifova, Violine (links)]]
Im 17. und 18. Jahrhundert und damit ein gewisse Zeit vor der Gründung des Kurorchesters spielte das Hoforcheser bei Besuchen der Würzburger Fürstbischöfe auf. Doch insgesamt war das kurmusikalische Angebot in Kissingen eher schlecht. So nefand der Arzt Adam Elias von Siebold im Jahr 1828: „Die Musik in Kissingen war seit mehreren Jahren sehr schlecht, obschon die Curgäste ein bedeutendes Honorar dafür zahlten.“
Im Jahr 1836 engagierten die Brüder Peter und Ferdinand Bolzano seit 1824 Pächter des Kissinger
Kurbetriebs, den böhmischen Kapellmeister Johann Kliegl, der vom Kissinger Publikum aufgenommen wurde. Daher gilt der 1. Mai 1837, an dem die folhnde Kursaison begann, als Geburtsstunde des Kurorchesters. Zunävhst spielten die Musiker im Kurgarten an einem Tisch herum und erst ab 1838 in dem von Friedrich von Gärtner erbauten Conversationssaal (dem heutigen Rossinisaal). Das Niveau der in dem damals noh leeren Saal gespielten Konzerte galt als dilletantisch. Die Musiker bekamen kein festes Gehalt und mussten bei ihren wohlhabenden Zuhörern sammeln gehen.
Ab 1845 spielte der Würzburger Komponist und Musikdirektor Johann Valentin Hamm jeden Sommer im Kurorchester und war ab 1855 Kapellmeister. Er führte die Tradition des Morgenchorals ein, bei dem die Zuhörer sich von ihren Plätzen erheben. Der Mainzer Kapellmeister Matthias Heinefetter wurde Dirigent und Musikdirektor und führte das Kurorchester in seine erste Blütezeit. Nun fanden die Kurkonzerte in dem 1855 mitten im Kurgarten errichteten, rundum offenen Musikpavillon statt, dessen Akustik allerdings völlig unzureichend galt. Nachdem sich Heinefetter und sein Nachfolger Eduard Reimann Vorwürfen ausgesetzt sahen, dass bei den Zuhörern gesammelte Geld nicht ordungsgemäß abgerechnet zu haben, wurden diese Sammlungen ab 1876 unter Strafe gestelt sowie die Kurtaxe erhoben, aus der auch das Kurrchester bezahlt wurde. Im Lauf der Zeit urde die Kissinger Kurmusik immer anpruchsvoller. Beispielsweise wurden im Mai 1878 in 62 regulären Konzerten 486 verschiedene Werke aufgeführt. Auf dem Spielplan standen Johann Strau0 und Familie, Richard Wagner, Friedrich von Flotow, Carl Maria von Weber, Gioacchino Rossini, Wolfgang Amadeus Mozart, Johannes Brahms und Camille Saint-Saëns.
Nach Reimanns Tod im Jahr 1898 wurde das Münchner Kaim-Orchester (die späteren Münchner Philharmoniker) verpflichtet. Im Jahr wurde der bestehende Pavillon durch einen größeren ersetzt. Sechs Jahre späer weigerte sich das bayerische Finanzministerium, das volle Orchester zu bezahlen, so dass Kaim nach Mannheim wechselte.
Im Jahr 1908 kam der Wiener Martin Spörr. Im Jahr 1911 wurde in der Wandelhalle die Drehbühne für die Krkonzerte installiert.
Nach dem Ende der Saison kehrten die Münchner Philharmoniker zurück; Kapellmeister wurde Carl Snoeck. Nun wurde auch moderne Musik von von Richard Strauss, Hugo Wolf und Arthur Honegger gespielt. Das Kissinger Kurorchester galt als das beste in Deutschland.Während der Naziherschaft leistete Dirigent Adolf Mennerich, indem er einern Abend ausschlirßlivh Musik jüdischer Dirigenten komponierte. Auf Druck der Machthaber musste das Kurorchester jedoch die beide jüdischen Mitglieder, Konzertmeister Snoeck und Violinist Josef Lengfeld, ausschließen. Ende August 1942 endete die Kurmusik kriegsbedingt.
NachKriegsede gaben die Münchner Phlharmoniker nur noch Gastspiele. Die Kurkonzerte wurden bis 1949 vom Städtischen Orchester Würzburg, ab 1950 von den Hofer Symphonikern bestritten, deren Vertrag wegen ihrer vermehrten Beanspruchung in Hog im Jahr 1979 endete.
Ab den 1980er Jahren wurden die Kurkonzerte von zunächst 12, dann 18 fest angestellten Musikern bestritten. Im Jahr 1981 wurde Kapellmeister Willibald Sandner von Mario Weber abgelöst, der ab 1995 das Kurorchester auch als Blech blasendes Ballroom Orchestra mit Swing und Tanzmusik auftreten ließ. Ihm folgte im Jahr 1999 sein Stellvertreter Jaroslav Drasil, der das nun 13köpfige Kurochester bis 2010 leitete. Seine Nachfolge trat am 1. Juni 2010 mit der Bulgarin Elena Iossifova erstmls in der Geschichte des Kurorchesters eine Frau an. Sie erweiterete das Spektrum des Kurorchesters von Klassik bis zu Rio Reiser und Ton Steine Scherben. Ihre Nachfolge trat am 1. März 2018 Burghard Toelke an.
Im September 2018 wurde das Kurorchester in „Staatsbad Philharmonie Kissingen“ umbenannt, womit deutlich gemacht werden solle, dass das Orchester ganzjährig auf hohem Niveau spiele und nicht nur während einer begrenzten Spielzeit in der Sommersaison auftritt, wie dies der Begriff Kurorchester vermuten lasse. Nach Ende von Toelkes Tätigkeit im November 2021 wurde kein neuer Orchesterleiter berufen. Stattdessen setze das Orchester auf „kollektive Verantwortung für alle Bereiche“.
==== Kissingen wird "Bad" ====
Im Jahr 1883 wandten sich Stadtmagistrat und "Curcommission" an das Bezirksamt in Kissingen mit dem Anliegen, den Ortsnamen um den Zusatz "Bad" zu ergänzen. Die Gründe lagen jedoch nicht in erster Linie in eine Steigerung des Ansehens des Ortes, sondern war praktischer Natur. In erster Linie wollte man zukünftige Verwechslungen mit dem fränkischen Kitzingen und dem niederländischen Vlissingen vermeiden. Das Anliegen wurde über das bayerische Innenministerium König Ludwig II. vorgelegt, der am 24. April Kissingens Bad-Erhebung zu Bad Kissingen genehmigte. Durch die Bad-Erhebung wurde die Trennung zwischen der Stadt einerseits und dem baulichen Ausgreifen der Stadt unter Ludwig I. und seinem Architekt Friedrich von Gärtner andererseits aufgehoben und wuchs zu einer übergeordneten Einheit als Inbegriff von Stadt und "Weltbad" zusammen.
==== Bad Kissingen baut unter Max Littmann ====
[[Datei:Max Littmann, Porträt, 1912.jpg|mini|hochkant|Max Littmann (1912)]]
[[Datei:Regentenbau Bad Kissingen 01.JPG|miniatur|links|Luftbild vom Regentenbau]]
[[Datei:Wandelhalle 01.jpg|miniatur|links|Wandelhalle, Sicht von der Bühne mit Konzertbestuhlung]]
[[Datei:Бад Киссинген.Городской театр.jpg|miniatur|Vorderansicht des Kurtheaters]]
[[Datei:Kurhausbad Bad Kissingen - außen.JPG|miniatur|Kurhausbad in Bad Kissingen]]
Um 1900 befand sich Bad Kissingen durch die positive Entwicklung des Kurwesens an einem strukturellen Wendepunkt. Es wurden ähnlich prägende Weichenstellungen nötig, wie sie unter König Ludwig I. und seinem Architekten von Gärtner stattgefunden hatten. Die Kureinrichtungen hatten ihre Kapazitätsgrenzen erreicht, die Infrastruktur musste den steigenden Anforderungen angepasst werden. Dabei galt es, die Ergänzungen behutsam an die Gärtner'schen Vorarbeiten anzupassen. Von 1910 bis 1913 errichtete der Architekt Littmann - wie Friedrich von Gärtner aus München stammend - den Regentenbau sowie - am Standort der früheren Brunnenhalle - die Wandelhalle mit Brunnenhalle. Die Wandelhalle ist 90 Meter lang und mit ihrer Grundfläche von 2.640 Quadratmetern die größte Trinkhalle Europas. Dabei wurde darauf geachtet, dass Littmanns Ergänzungen und von Gärtners Vorgängerbauten harmonisch zueinander passten. Daneben errichtete Max Littmann neben einigen Privatbauten das bereits 1905 eingeweihte Kurtheater sowie im Jahr 1927 das Kurhausbad.
Max Littmann wurde am 3. Januar 1862 in Schloßchemnitz (heute Ortsteil von Chemnitz) als Sohn des Kaufmanns Johann Bernhard Littmann und dessen Ehefrau Hulda Emilie geb. Heurig, geboren. In Chemnitz machte Littmann eine Maurerlehre und war 1878 bis 1882 Schüler an der Gewerbeakademie Chemnitz. Von 1883 bis 1885 studierte er Architektur in Dresden am Königlich-Sächsischen Polytechnikum. Im Jahr 1885 siedelte er nach München über, wo er sich nach Studienreisen nach Italien und Paris 1888 als freischaffender Architekt niederließ. Zunächst betrieb Littmann zusammen mit seinem Studienkollegen Albin Lincke ein Architekturbüro. Im Jahr 1891 heiratete er Ida Heilmann, die Tochter des Bauunternehmers Jakob Heilmann. Von 1891 bis 1908 war Littmann Teilhaber im Baugeschäft seines Schwiegervaters Jakob Heilmann, der Heilmann & Littmann oHG (später GmbH) und tat sich nun vor allem durch die Erstellung von repräsentativen Bauten wie Theatern, Warenhäusern und Kurhäusern hervor. Littmann reformierte den Theaterbau; seine Theater waren weniger Hof- oder Stände- als Bürgertheater. Sein Hauptwerk sind die Hoftheater in Stuttgart, das aus einem großen Haus für die Oper (noch heute von der Staatsoper Stuttgart genutzt) und einem kleinen, im Zweiten Weltkrieg zerstörten Haus für das Schauspiel bestand. Littmann starb am 20. September 1931 in München.
==== Berühmte Kurgäste ====
===== Kaiserin "Sisi" =====
[[Datei:Sisi-Denkmal (Bad Kissingen) 5.jpg|mini|"Sisi"-Denkmal auf dem Altenberg von 1907]]
In den Jahren 1862 bis 1865 sowie 1897 und 1898 verbrachte die österreichische Kaiserin Elisabeth von Österreich-Ungarn ("Sisi"), Ehefrau von Kaiser Franz Josef, ihre Kuraufenthalte in Bad Kissingen. Dabei residierte sie gerne im heutigen "Kaiserhof Victoria" (Am Kurgarten). Das Jahr 1864 wurde in diesem Zusammenhang als "Kaiserkur" bekannt, bei der neben "Sisi" und ihrem Ehemann u. a. der bayerische König Ludwig II. und der russische Zar Alexander II. anwesend waren. Während ihrer Kuraufenthalte unternahm sie gerne Spaziergänge auf dem Altenberg. Auf dem Altenberg wurde im Jahr 1907 zu ihren Ehren das "Sisi"-Denkmal errichtet.
===== Otto von Bismarck =====
[[Datei:Bismarck-Denkmal-02.JPG|mini|left|Bismarck-Denkmal Bad Kissingen Nahaufnahme.jpg|Bismarck-Denkmal von 1877.]]
Im Jahr 1874 verbrachte Reichskanzler Otto von Bismarck im Haus der Dres. Diruf in der damaligen Saalestraße (heute: Bismarck-Straße) seinen ersten von mehreren hiesigen Kuraufenthalten. Während dieses Kuraufenthaltes verübte der Böttchergeselle Eduard Kullmann aus Protest gegen Bismarcks Kulturkampf gegen die katholische Kirche ein Attentat auf den Reichskanzler, bei dem dieser nur leicht verletzt wurde. An der Stelle des Attentats befindet sich eine von Bildhauer Michael Arnold angefertigte Gedenktafel, die an das Attentat erinnert.
Während man in Kissingen fürchtete, Bismarck würde nicht mehr nach Kissingen zurückkommen, kehrte Bismarck im Jahr 1876 zurück, verbrachte aber ab da seine Kuraufenthalte (bis 1893) im heutigen Stadtteil Hausen in der "Oberen Saline", wo sich heute u. a. das "Bismarck-Museum" befindet. Hier bekam er Personal zur Erledigung seiner Amtsgeschäfte sowie Wachpersonal gestellt. In Hausen verfasste er auch das berühmte "Kissinger Diktat", in dem er die Grundlagen seiner Außenpolitik darlegte. Bismarck sah seine Kuraufenthalte in Bad Kissingen beziehungsweise Hausen als Geste der Versöhnung, nachdem Preußen den "Deutschen Krieg" gewonnen hatte. Im Jahr 1877 wurde zu seinen Ehren das Bismarck-Denkmal errichtet; Bismarck selbst fühlte sich jedoch zu verlegen, es persönlich in Augenschein zu nehmen. Im Jahr 1893 wurde die Saalestraße in Bismarckstraße umbenannt, im Jahr 1914 begann man mit dem Bau des Bismarckturms auf dem Sinnberg.
==== Erster Weltkrieg ====
Zu Beginn des 20. Jahrhunderts hatten einerseits die Russische Revolution zu einem Rückgang der Gästezahlen aus Osteuropa und andererseits der Erste Weltkrieg zu einem Rückgang der Gästezahlen insgesamt geführt. Nach dem Krieg war Bad Kissingen von Rezession und Inflation betroffen. Trotzdem entwickelte sich der Ort weiter. So entstand in dieser Zeit nicht nur Littmanns Kurhausbad, sondern auch das neue Wasserwerk, das E-Werk, der Schlachthof und der Flug- bzw. Turnierplatz. Die Kurgastzahlen stiegen wieder.
==== Zweiter Weltkrieg ====
Trotzdem setzte sich der Trend zum Ausbleiben ausländischer Kurgäste fort, sowohl politisch bedingt vor allem innerhalb der jüdischen Klientel als auch kriegsbedingt insgesamt. Das Leben in Bad Kissingen wurde in politischem, wirtschaftlichem und öffentlichem Gebiet gleichgeschaltet. In der "Reichskristallnacht" vom 9. November 1938 wurde die "Neue Synagoge" beschädigt und im Nachgang abgerissen, obwohl die Schäden reparabel gewesen wären. Von den 171 jüdischen Bürgern Bad Kissingens, die zu Beginn des Dritten Reiches hier gemeldet waren - Bad Kissingen zählte zu besseren Zeiten zu den zehn größten jüdischen Gemeinden in Bayern - lebte nach Kriegsende keiner mehr im Ort. 69 Kissinger Juden fielen Deportation und Vertreibung zum Opfer.
Während des Krieges wurde Bad Kissingen zur Auffangregion für das von schweren Luftangriffen getroffene Schweinfurt. Im Jahr 1945 wurden 3.000 Verwundete in den 30 Kissinger Lazaretten betreut. An der Bausubstanz gab es keine größeren Schäden; lediglich ein Jagdbomberangriff vom 5. April 1945 auf den Bahnhof hatte mäßigen Schaden angerichtet. Am Morgen des 7. April 1945 wurde auf Befehl des Kampfkommandaten Karl Kreuzberg die Ludwigsbrücke gesprengt, um die anrückenden amerikanischen Truppen aufzuhalten.
Die letzten Kriegswochen waren von einer Zunahme der Lazarette zur Versorgung der Verwundeten sowi er Ereartung der amerikanischen Truppen geprägt. In erwartung einer Bombardierung Bad Kissingens wurden in unterirdischen Verstecken Lebensmittel gehortet; aus Angst vor Strafaktionen wurden Hitlerbilder, -statuen und andere Spuren der Nazizeit vernichtet. Nach der Osterwoche 1945 wurde schließlich klar, dass es auch nach dem Einmarsch der Amerikaner keinen großen Endkampf um Bad Kissingen geben würde. Nach der Sprengung der Ludwigsbrücke wurde bei dem Schweizerhaussteg im Rosengarten eine Behelfsbrücke errichtet, die bis zur Vollendung des Neubaus der Ludwigsbrücke im November 1946 in Betrieb war.
Auf der Konferenz von Jalta beschlossen die Alliierten die „Westverschiebung“ der deutschen BEvölkerungsgruppen aus Polen, Jugoslawien, der Tshechoslowakei und Ungarn. Zum zweiten versuchte die deutsche Bevölkerung vor den alliierten Truppen zu fliehen, sls sowohl die Ostfront als auch die Westfront deutschen Boden erreichten. Bereits nach der deutschen Kapitulation vom 8. Mai 1945 setzte in Ost- und Südosteuropa eine „wilde“ Vertreibung der deutschen Bevölkerung ein, die sich bis 1946 als „otganisierte“ Vertreibung fortsetzte. Die Gesamtzahl der Deutschen, die sich nach Kriegsende zum Verlassen ihrer angestammten Heimat gezwungen sah, liegt bei etwa 15 Millionen. Schätzungen zufolge sind dabei etwa 2 bis 2,5 Millionen Deutsche durch Hunger, Kälte, Misshandlungen, Mord und Selbstmord umgekommen. Millionen von zurückkehrenden Deurschen strömten in die drei Besatzungszonen der späteren Bundesrepublik Deutschland. Von ihnen nahm allein Bayern in den Jahren 1945/46 zwei Millionen, darunter großteils Sudetendeutsche.
Viele Kurhäuser in Bad Kissingen waren zu Heereskurlazaretten umfunktioniert worden, beherbergten Evakuierte aus dem Rheinland und Ausgebombte aus Schweinfurt und Würzburg. I den ersten Monaten des Jahres 1945 wurden viele deutsche Heimatvertriebene im Regentenbau znd anderen Sälen untergebracht. Als am 7. April 1945 die Amerikaner Bad Kissingen besetzten, beschlagnahmten sie 200 Häuser für ihren Bedarf. Der Kreis Bad Kissingen beherbergte Ende 1945 über 4.000 Evkuierte und 3.000 Besatzungsoldaten. Im Hauptvertreibungsjahr 1946 wurden Bad Kissingen 300 bis 400 Vertriebene zugewiesen. Die Sonderzählung vom 29. Oktober 1946 ergab für den Landkreis Bad Kissingen mit insgesamt 9.191 Flüchtlingen einen Anteil von 16,4% an der Bevölkerung. Neben den Sudetendeutschen stammte ein Großteil der Vertriebenen aus Jugoslawien, Ostpreußen, Polen, Schlesien und Ungarn. Für ihre Eingliederung esren dir im November 1946 geschaffenen Flüchtlingsverwaltungen zuständig. Das größte Problem war die Wohnraumbeschaffung, die bis von den Wohnungsämtern in die 1950er Jahre durch ein Zwangssystem gesteuert wurde. Ein wichtiger Fakto war der Soziale Wohnungsbau. Im Jahr 1950 gründeten die Heimatvertriebenen in Eigeninitiative die Stellen- und Wohnungsbaugenossnschaft Bad Kissingen Stadt und Land. Durch die geschafffenen Wohnungen konnten Anfang der 1950er Jahre die drei großen Flüchtlingslager aufgelöst werden. Der Fleiß und Ehrgeiz der Heimatvertriebenen nicht nur in Bad Kissingen trug zum deutschen Wirtschaftswunder bei, in Bad Kissingen durch die Gründung von zahlreichen Mittelstandsbetrieben. So gab es bereits im Jahr 1949 in der AStadt Bad Kissingen 17 Flüchtlingsbeitriebe mit 180 Beschäftigten.
[[Datei:Heiligenhof 01.jpg|miniatur|Heiligenhof Bad Kissingen (Vorderansicht, 2009)]]
Am 1. April 1952 wurde mit dem „Heiligenhof“ eine Einrichtung der Heimatvertriebenen in Bad Kissingen gegründet, die als „Sudetendeutsche Heimatstätte der europäischen Jugend“ vom Sudetendeutschen Sozialwerk übernommen wurde. Träger ist die Stiftung Sudetendeutsches Sozial- und Bildungswerk. Das Motto des Hauses ist „Alles Leben ist Begegnung“. Anfangs standen Jugendleiterlehrgänge und Freizeitmaßnahmen für Kinder aus den umliegenden Flüchtlingslagern im Vordergrund. In den 1960er Jahren erlaubten bauliche Erweiterungen die Durchführung von Erwachsenenbildungswochen. Im Lauf der Zeit entstand ein Informations- und Bildungszntrum, dass nicht nur für Heimatertriebene, sondern auch andere Kreise der Bevölkerung von Bedeutung ist.
=== Die Kur nach dem Zweiten Weltkrieg ===
In der Geschichte Bad Kissingens wurde der Kurbetrieb des Ortes vor allem von wohlhabenden Kurgästen aus Politik (u. a. von Bismarck über Sisi und Ludwig II. zu den russischen Zaren) und Kultur (hier sei u. a. an Namen wie Gioacchino Rossini, Theodor Fontane und Adolph Menzel erinnert) bestritten, die nicht nur nach Wiederherstellung ihrer Gesundheit, sondern auch nach der Erholung einer „Sommerfrische“ suchten, denen Komfort und kulturelle Abwechslung geboten wurde und die entsprechend ihres Wohlstandes viel Geld in Bad Kissingen da ließen. An diese Zeit erinnern auch die in diesem Wikibook beschriebenen Bauten wie die Wandelhalle, der Arkadenbau oder Regentenbau und das Kurtheater.
Nach dem Zweiten wurde die von den Sozialversicherungsträgern bezahlte Sozialkur zur Grundlage des Bad Kissinger Kurwesens. Die damalige Generation von Kurgästen entwickelte – teilweise durdh ihre eigenen finanziellen Verhältnisse dazu gezwungen – den Anspruch, dass die Kur zum Erhalt der Gesundheit von Staat und Sozialversicherungen zu finanzieren sei. Lieber verzichten sie auf präventive Maßnahmen für die Gesundheit als selbst dafür zu bezahlen. Demgegenüber enrwickelte sich die Generation ihrer Enkel, die in Zeiten des Wohlstandes und der Macht des Geldes aufgewachsen sind. Sie sind finanziell besser gestellt und können viele Dienstleistungen aus eigener Tasche bezahlen. Sie stellen ihre Forderungen nicht mehr an den Staat, sondern an die Dienstleister. Sie erwarten nun 5-Sterne-Versorgung zu einem 3-Sterne-Preis, Fitnessstudios mit den modernsten Hightech-Geräten, Wellness und Beautyowie Shiatu ujnd Aurveda. Der Gesetzgeber reagierte darauf mit Gesetzen, die sich an die Eigenverantwortungen des Kurgastes richteten, der, wenn er eine Kur wollte, selber dafür bezahlen musste. Dies führte wiederum für die einzelen Kurorte wie Bad Kissingen zur Reduzierung des Gästepotentials. Hinzu kam, dass sich das Gästespektrum um „Gesundheitstouristen“ erweiterte in Gestalt von Kurzurlaubern, die nur für zwei bis drei Tage bleiben, oder von Tagungsteilnehmern.
Im Geschichtsband „1.200 Jahre Bad Kissingen – Facetten einer Stadtgescichte“, der zum groß gefeierten runden Jubiläum der ersten verbürgten urkundlichen Erwähnung Bad Kissingens erschien, wirft die Frage auf, wie auf diese Situation am besten zu reagieren ist. Unter dem Motto „Liegt die Zukunft in der Vergangenheit?“ entwickelt das Kapitel „Bad Kissingen – Back to the Future. Das Staatsbad auf dem Weg in die Zukunft“ ein Plädoyer, Bad Kissingens Verganganheit mit seinen Prachtbauten, die für heutige Gäste immer noch einen Anreiz bieten, Bad Kissingen zu besuchen, mit der Zukunft zu verbinden, die bedeutet, auf die neuen ünsche der Gäste bei der Gesundheitsversorgung einzugehen.
Vielleicht kann neben den anderen Bad Kissinger Großbauten oder touristischen Großereignissen wie dem „Rakoczy-Fest“ oder dem auf der Burgruine Botenlauben stattfindende „Burgfest“, die an die wechselvolle Geschichte Bad Kissingens erinnern, auch die Marienkapelle mit dem dazugehörigen Kapellenfriedhof ein Teil dazu tun.
=== Terassenschwimbad ===
[[Datei:Terrassenschwimmbad Bad Kissingen – 20130505-027.JPG|mini|Terrassenschwimmbad Bad Kissingen]]
In der ersten Hälfte der 1950er Jahre machte sich ie Anwesenheit der in Bad Kissingen stationierten US-Soldaten bemerkbar, als diese unentgeltlich beim Bu des Terrasenschwimbades am Finterberg mithalfen.
Als nämlich ersichtlich wurde, dass die 1887 im Luitpoldpark erbaute ''Städtische Flussbade- und Schwimmanstalt'' den steigenden Ansprüchen nicht mehr gerecht wurde, beschloss der Stadtrat unter Oberbürgermeister Hans Weiß den Bau einer neuen Badeanlage. Als Standort wurde wegen des Ausblicks, der direkten Sonneneinstrahlung und des Schutzes vor Hochwaser ein 4,5 ha großes Gelände auf dem Finsterberg beim Bad Kissinger Stadtteil Reiterswiesen ausgewählt.
Für die Konzeption des Terrassenschwimmbades dienten u. a. die Badeanlagen von Frankfurt, Wiesbaden und vor allem Baden-Baden als Vorbilder. Für die Gesamtplanung war der Bad Kissinger Architekt Anton Koller verantwortlich. Die Bauarbeiten begannen im März 1952, wobei die in Bad Kissingen stationierten US-Soldaten unentgeltlich das Gelände planierten. Am 24. März 1952 führte Oberbürgermeister Weiß den ersten Spatenstich aus: der Grundstein wurde am späteren Standort des Sprungturms verlegt. in der Saison 1954 wurde das Gelände mit über 40.000 Blumen wie Polyantha-Rosen, Stauden und Sommerblumen bepflanzt. Im August 1954 fand das große Eröffnungsfest für das seir 1996 unter Denkmalschutz stehende Terrassenschwimmbad statt. Die Baukosten lagen bei 1,2 Millionen DM.
Am 8. Juli 1954 lobte die lokale „Main-Post“ den Ausblick und die üppige Bepflanzung; »diese Anlage«, so die Zeitung, »übertrifft alle Erwartungen«. Allein im Jahr 1969 verzeichnete das Bad eine bis heute unerreichte Zahl von 195.000 Badegästen.
Vom 22. bis 24. August 1954 fanden im Terrassenschwimmbad unter der Bericghterstatung von vier Wochenschauen, dem Fernsehstudio und mehr als 60 auswärtigen Vertretern von Nachrichten und überregionalen Zeitungen die ''66. Deutschen Schwimmmeisterschaften 1954'' mit mehr als 1.000 Sportlern statt. Zu den prominenten Gästen des Bades gehörten Bundespräsident Prof. Dr. Theodor Heuss, Bundespräsident Heinrich Lübke, Prinzessin Soraya Esfandiary Bakhtiary, Big-Band-Leader Max Greger, Schauspieler Willy Millowitsch sowie die Schauspielerin, Sängerin und Tänzerin Marika Rökk.
Im Jahr 1983 beschloss der Bad Kissinger Stadtrat unter dem neuen Bürgermeister Georg Straus auf Grund des altersbedingten Zustandes des Terrassenschwimmbades eine umfangreiche Sanierung. Das umfangreiche Konzept der Planungs- und Forschungsgesellschaft Kulmbach vom Dezember 1984 sah eine Sanierung der Technik, eine Umgestaltung des Schwimmer- und des Nichtschwimmerbeckens, die Ergänzung einiger Attraktionen, den Bau eines Mutter-Kind-Hauses sowie, angesichts der Austragung zukünftiger Schwimmwettkämpfe, eine Vertiefung des Sprungbeckens und eine Erhöhung des Sprungturms vor. Am Ende der Badesaison 1986 begannen die Bauarbeiten, die einen vom Freistaat Bayern bezuschussten Betrag von 8,2 Millionen DM kosteten und eine Erweiterung der Schwimmbadfläche um 0,3 Hektar erforderten. Am 16. Juni 1988 wurde das Terrassenschwimmbad neu eröffnet.
Eine grundlegende Renovierung des Eingangs- und des Sanitärbereiches erfolgte im Jahr 1993. Alle Toiletten und Duschen wurden erneuert, eine Heizungsanlage für das Duschwasser installiert sowie die Einzel-Umkleidekabinen für Damen und Herren durch weiträumige Sammelumkleiden mit Schränken ersetzt. Die Gesamtkosten der Renovierungsmaßnahmen beliefen sich auf 855.000 DM.
=== KissSalis Therme ===
[[Datei:KissSalis – D966.jpg|mini|KissSalis Therme]]
Als einen Schritt der Bad Kissinger Kur in die Zukunft könnte man ielleicht auch die KissSalis Therme ansehen. Dass am 28. Februar 2004 eröffnete Thermalbad im Bad Kissinger Statteil Garitz mit großem Sauna- und Wellnessbereich wurde nach Plänen der Architekten Kenéz + Jaeger erbaut; der erste Spatenstich war am 3. Mai 2001 erfolgt. Das Heilwasser der KissSalis Therme stammt aus dem Hausener Schönbornsprudel.
Der Name geht auf den Bad Kissinger Stadrat Johannes R. Köhler zurück, der zu Beginn seiner beruflichen Laufbahn das elterliche Teppichgeschäft übernommen, im Erwachsenenalter dann aber Musik studiert hatte und mit seiner „Musik zum Streicheln“ große Erfolge erzielte. Er hatte den Namen „KissSalis“ von der lateinischen Inschrift auf einer historischen Porzellaneule hergeleitet: „In Aquis Kissingen salus“ lat.: „In den Wassern Kissingens ist Heil“.
Seit der Eröffnung wurde die KissSalis Therme mehrfach renoviert und modernisiert. Im April 2009 wurde neben der Therme ein Wohnmobilstellplatz errichtet, im Jahr 2010 der SaunaPark um eine große Aufgusssauna sowie einen neuen Ruhe- und Loungebereich erweitert.
Im Thermenranking 2025, einer bundesweiten Analyse von 197 Thermen- und Spa-Anlagen auf Grundlage von rund 919.000 Gästebewertungen der Plattformen Google und TripAdvisor, belegte die KissSalis Therme den zweiten Platz in der Kategorie der klassischen Thermalbäder.
=== Kirchen ===
==== St.-Jakobus-Kirche ====
[[Datei:Бад Киссинген.Якобскирхе.jpg|mini|225px|St.-Jakobus-Kirche]]
Den ersten Hinweis auf einen katholischen Pfarrer in Kissingen liefert ein Rechtsstreit aus dem Jahr 1206, in dessen Zusammenhang ein Symon aus Kissingen in eine Auseinandersetzung um Besitzverhältnisse an einer Kapelle in Haard verwickelt war. Der erste Hinweis auf eine Pfarrei findet sich im Jahr 1286 in Gestalt einer Urkunde über den Bau eines Gotteshauses zu Ehren der Muttergottes und zu Ehren des St. Jakobus. Finanziert wurde der Bau durch die Spende eines ehemaligen Nüdlinger Bürgers namens Conrad aus dem Verkauf dreier Äcker. Nicht bekannt ist jedoch, ob es sich bei dem besagten Kirchenbau um die Marienkapelle oder die St.-Jakobus-Kirche handelt. Die erste der Marienkapelle zuordenbare Erwähnung stammt aus dem Jahr 1348, für die St.-Jakobus-Kirche aus dem Jahr 1341.
Die Pfarrei Kissingen kam Ende des 14. Jahrhunderts an das Hochstift Würzburg. Während es für das 15. Jahrhundert wenige Aufzeichnungen gibt, sind für das 16. Jahrhundert Veränderungen an der Pfarrei Kissingen durch Fürstbischof Julius Echter von Mespelbrunn zum Beispiel in Form einer Neuordnung des Pfarrgebiets bekannt, die im Laufe dieses Wikibooks (siehe Kapitel "Die Markgrafen von Schweinfurt, die Henneberger und die Burg Botenlauben") bereits angesprochen wurden.
Vom chronologischen Standpumkt aus betrachtet, wäre es nun angebracht, auf die Entstehung der Marienkapelle einzugehen. Da diese jedoch zum Kernthema dieses Wikibooks gehört, muss dessen Autor den Leser um Geduld bitten und auf das entsprechende, spätere Kapitel verweisen, wo ausführlicher auf die Marienkapelle eingegangen wird.
Das andere Gotteshaus dieser Zeit war die barocke St.-Jakobus-Kirche. Der Kirchenbau aus dem 14. Jahrhundert war bis zur Zeit von Fürstbischof Julius Echter von Mespelbrunn baufällig geworden. Dieser ließ 1607/1608 den Turm neu aufbauen und zur gleichen Zeit oder 1629 das Langhaus um ein Seitenschiff ergänzen. Unter Fürstbischof Adam Friedrich von Seinsheim fand von 1772 bis 1775 nach einem Entwurf des Würzburger Hofbauamtmannes Johann Philip Geigel ein Neubau der St.-Jakobus-Kirche statt. Als ihre Kapazitäten nicht mehr ausreichten, wurde im Jahr 1883 die Herz-Jesu-Kirche eingeweiht, die von der St.-Jakobus-Kirche auch den Status einer Pfarrkirche übernahm.
==== Herz-Jesu-Stadtpfarrkirche ====
[[Datei:Bad Kissingen Herz-Jesu-Kirche-20170408-RM-125644.jpg|mini|225px|Herz-Jesu-Stadtpfarrkirche]]
Die ersten Anfragen nach einem Kirchenneubau, weil die St.-Jakobus-Kirche den Ansprüchen nicht mehr genügte, wurden zunächst im Jahr 1844 an König Ludwig I. und später an König Maximilian II. gerichtet. Doch erst König Ludwig II. genehmigte 1881 den Bau einer neuen Kirche. Dieser Bau wurde unter anderem durch eine Prämienlotterie finanziert und durch den Münchner Architekt Karl von Lembach zwischen 1881 und 1884 ausgeführt. Am 31. August 1884 wurde die Herz-Jesu-Stadtpfarrkirche eingeweiht.
Während ihrer Kur im Jahr 1897 besuchte die als „Sisi“ bekannte österreichische Kaiserin Elisabeth von Österreich-Ungarn einen Sontagsgottesdienst in der Herz-Jesu-Stadtpfarrkirche. Von 1905 bis 1909 fertigte der Künstler Max Roßmann aus Amorbach unter Stadtpfarrer Friedrich Roth zwei Triptychen für die 1907 genehmigten Seitenaltäre sowie für Chor und Mittelschiff einen Zyklus von Wandgemälden an. Im Jahr 1924 fand zum Zwecke der Instandsetzung der Orgel ein Wohltätigkeitskonzert statt, in dessen Rahmen auch der aus Garitz stammende Opernsänger Baptist Hoffmann auftrat.
Als die Orgel der Kirche im Jahr 1940 ihre Funktionstüchtigkeit verlor, wurde sie durch eine neue Orgel ersetzt; die Kosten wurden teilweise durch Spenden gedeckt. Während des Zweiten Weltkrieges mussten die fünf Glocken der Kirche abgeliefert werden, konnten aber nach Kriegsende von Stadtpfarrer Josef Stürmer zurückgeholt werden.
In den Jahren 1947 bis 1957 erfolgte unter Pfarrer Stürmer und dem Würzburger Dombaumeister Hans Schädel ein erster Umbau, in dessen Rahmen die neugotischen Elemente der Kirche entfernt wurden. Auf einen Beschluss der Kirchenverwaltung erfolgte eine Tünchung des Kircheninneren. Eine Sachverständigen-Kommission unter Beteiligung von Professor Schmuderer vom Denkmalamt in München, Domkapitular und Kunsthistoriker Eugen Kainz, Dombaumeister Hans Schädel, Kirchenmalermeister Menna und – ab 1948 – auch unter besonderem Einfluss durch Bischof Julius Döpfner, entschied sich für eine Entfernung »der monumentalen Malereien« (gemeint waren die Wandgemälde im Mittelschiff). Der Münchner Professor Robert Rabold ersetzte das Mittelfenster, das nun Christus als guten Hirten im Weinberg darstellte. Die Umgestaltung der Kirche zog sich auf Grund von Problemen in der Finanzierung bis 1953. Die Kosten wurden dann u. a. durch einen Zuschuss des Staatsministeriums für Unterricht und Kultus und eine Spende des in New York lebenden Bad Kissinger Ehrenbürger John Hugo Kliegl gedeckt. In den 1950er Jahren wurden die Glasfenster der Kirche von dem rheinische Künstler Georg Meistermann erneuert.
Im Rahmen einer Renovierung im Jahr 2003 fnden u. a. folgende Arbeiten statt:
* So wurde die Kirche unter Domkapitular Jürgen Lenssen entsprechend den Vorgaben des Zweiten Vatikanischen Konzils umgestaltet.
* Die Reliquien der Heiligen Kilian, Burkard, Adalbero und Laurentius wurden an ihren neuen Lageort im Altar verbracht.
* Im hinteren Teil des rechten Seitenschiffes befindet sich in einer neuen Sandsteinstele das ehemalige Wallfahrtsbild, eine spätgotische Madonna um 1450, aus der Marienkapelle.
* Unter der Empore und im linken Seitenschiff wurden zwei Skulpturen von Valentin Weidner aufgestellt: eine Herz-Jesu-Statue aus dem Jahre 1884 sowie eine Statue des hl. Antonius von Padua.
Abschluss der Renovierung war die feierliche Weihe der Kirche am 7. Dezember 2003 durch Bischof em. Paul-Werner Scheele.
==== Stationsberg ====
[[Datei:Stationsberg (Bad Kissingen), Station of the Cross No. 12 – 20130604-063.JPG|miniatur|225px|Kreuzigungsgruppe des heutigen ''Stationsberg''-Kreuzweges]]
[[Datei:Poppenroth, D-6-72-114-218, Kreuzigungsgruppe Bad Kissingen 20220106 0188.jpg|miniatur|225px|Ursprüngliche Kreuzigungsgruppe von Bad Kissingen (heute in Poppenroth)]]
Im Jahr 1758 genehmigte "das Hohe Ordinariat" die Errichtung eines Kreuzweges. Als "Kreuzberg" wurde ein Teil des Zückbergs ausgewählt, die Stationen von Andreas Eisfelder gestiftet. Am 14. September 1758 (Fest der Erhöhung des Kreuzes) wurde der Kreuzweg von den Franziskanern aus Hammelburg eingeweiht. Anfangs gab es zwei Prozessionen zum Stationsberg, eine Prozession der Männer in Begleitung des Pfarrers mit Kreuzpartikel, dann eine Prozession der Frauen in Begleitung des Dekans ohne Partikel. Jede der Prozessionen feierte in der Marienkapelle ihre eigene Messe.
Die Prozessionen starteten am Ölberg am heutigen Theaterplatz. Im Jahr 1883 schlug der Verschönerungsverein der Kirchenverwaltung vor, den Ölberg an die neu errichtete Herz-Jesu-Stadtpfarrkirche zu verlegen. Doch wurde der Ölberg wegen Einsturzgefahr abgebaut und hinter die neue Stadtpfarrkirche verlegt. Am 3. März 1795 stiftete Georg Renninger eine zweite Prozession zum Kalvarienberg. Im Laufe des 19. Jahrhunders schwand jedoch der Eifer der Gläubigen. Die Stationen verfielen; die Gläubigen stellten ihr Holz an den Stationen ab. So wurden die Stationen für 80 DM an die Gemeinde Poppenroth (heute Stadtteil von Bad Kissingen) verkauft. Der Ankauf nach Poppenroth wurde von der als „Nunnä-Fräla“ bekannten Poppenrotherin Katharina Pfrang gestiftet; dass sie die Figuren im Huckelkorb persönlich von Bad Kissingen nach Poppenroth transportierte, gilt jedoch als Legende. In den Jahren 1892 bis 1894 führte Bildhauer Valentin Weidner den Auftrag aus, für den Bad Kissinger Kreuzweg neue Stationen zu errichten und die Kreuzigungsgruppe "künstlerisch auszuführen".
==== Evangelische Erlöserkirche ====
[[Datei:Erlöserkirche-3A.JPG|mini|Erlöserkirche von 1891 (Vorderansicht)]]
Vor 1803 gab es in Kissingen nur vereinzelte protestantische Bürger, die aus anderen Gemeinden stammten. Für das Jahr 1578 wird ein Kissinger namens Nicolaus Nicander erwähnt, der in Wittenburg studierte und "Protestantischer Diakonus" wurde. Erst mit der Sakularisation sowie dem Anschluss an Bayern entstand eine wachsende protestantische Gemeinde in Kissingen. Im Jahr 1824 befanden sich unter 1.609 Kissinger Bürgern lediglich vier Protestanten, die die Gottesdienste in Schweinfurt, Geroda, Niederwerrn oder Poppenlauer besuchen mussten. Erst der Aufschwung im Kurwesen zur Mitte des 19. Jahrhunderts brachte die Anwesenheit evangelischer Kurgäste im Ort, was öffentliche Gottesdienste erforderlich machte. Im Jahr 1840 fand der erste Gottesdienst in einem Behelfsraum im königlichen Landgericht unter der Predigt des Schweinfurter Pfarrers Höfer statt.
Im Jahr 1844 reichten Protestanten aus Kissingen eine Petition bei König Ludwig I. ein, Sammlungen für ein protestantisches Gotteshaus in Kissingen zu erlauben. König Ludwig I. finanzierte den Bau des Gotteshaues, der von Architekt Friedrich von Gärtner ausgeführt wurde, aus königlichen Mitteln. Nach zweijähriger Bauzeit wurde der Kirchenbau, dessen Kosten sich auf 40.000 Gulden beliefen, in der Prinzregentenstraße im Jahr 1847 eingeweiht. Mit dem 1. März 1850 wurde Kissingen ständiges Vikariat der Pfarrei Schweinfurt. im Jahr 1856 wurde das Vikariat Kissingen selbständig. Nachdem ab 1851 ein Privatlehrer auf Gemeindekosten die evangelischen Schüler unterrichtet hatte, wurde im Jahr 1858 eine öffentliche protestantische Schule gegründet. Im Jahr 1850 wurde mit dem Bau eines Pfarrhauses in der Von-Hessing-Straße begonnen, der auch durch zahlreiche Spenden von Kurgästen finanziert wurde. Nach dem ersten Besuch König Ludwigs II. in Bad Kissingen hatte eine Petition einflussreicher Kurgäste für die Errichtung einer eigenen Pfarrei Erfolg.
Im Jahr 1885 wurde eine durch Spenden finanzierte Orgel angeschafft. Wegen eines Anstiegs der Kurgastzahlen in der zweiten Hälfte des 19. Jahrhunderts begann im Jahr 1890 nach Entwürfen des Münchner Architekten August Thiersch eine Erweiterung des Kirchengebäudes, deren Kosten sich alles in allem auf 98.000 Mark beliefen; die Einweihung fand am 25. Oktober 1891 statt. Unter anderem wurde das Kirchenschiff verlängert, an der Front zwei Kirchtürme ergänzt, die Apsis durch ein Querhaus und eine Vierung mit oktogonalem Turm ersetzt sowie neue Glocken eingebaut, die bestehenden 500 Sitzplätze um 300 weitere ergänzt. Im Jahr 1952 wurde die Kirche erstmals renoviert. Die in der Salinenstraße gelegene, stillgelegte anglikanische Kirche, die uns im Folgenden noch genauer beschäftigen wird, wurde als Behelfs-Gemeindehaus genutzt. Sie wurde abgerissen, als im Jahr 1968 ein neues Gemeindehaus gebaut und im Jahr 1969 eingeweiht wurde. Seit einer erneuten Renovierung im Jahr 1980 trägt das Kirchengebäude den Namen "Erlöserkirche".
==== Anglikanische Kirche ====
[[Datei:Anglikanische Kirche Kissingen.jpg|mini|Anglikanische Kirche in Bad Kissingen (Foto ca. 1910)]]
Asschlaggebend für den Bau der anglikanischen Kirche, der nach der Mitte des 19. Jahrhunderts beschlossen und durch Spenden von Gästen und Gönnern finanziert wurde, waren die zahlreichen Kurgäste aus Großbritannien. Der Lord Bishop von Gibraltar war Vorsitzender und A. B. Granville war Vorsitzender des Kirchenkomitees, das die Spendenaufrufe der lokalen Presse und weitere Aktionen initiierte und steuerte. Das Gotteshaus wurde nach siebenjähriger Bauzeit, deren Kosten in Höhe von 1.350 Pfund schon vor der Eröffnung fast abgedeckt waren, am 24. August 1862 eingeweiht und befand sich in der Salinenstraße am Standort des heutigen evangelischen Gemeindehauses. Es war im Stil der neuromantisierenden Neugotik gestaltet, hatte einen kreuzförmigen Grundriss, keine Türme und war durch Fialenpfeiler vertikal gegliedert. Später wurden noch kleinere Vorhaben umgesetzt wie die eiserne Umzäunung, die Bemalung der Decke und die Innenausstattung.
Der Treuhänder Granville bezahlte auch einen Pfarrer mit einem monatlichen Einkommen von 15 Pfund. Der Organist Mr. Gould war für das Spendensammeln nach den Gottesdiensten zuständig. Die Gehälter sowie alle weiteren Ausgaben wurden durch einen Spendenfonds gedeckt. Mit dem Ersten Weltkrieg sank die Zahl der britischen Kurgäste, was sich negativ auf den Gottesdienstbetrieb auswirkte. Im Jahr 1953 erwarb die evangelische Gemeinde das anglikanische Gotteshaus, um es zu einem Gemeindehaus umzubauen. Dieser bereits erwähnte Umbau zu einem Behelfs-Gemeindehaus erfolgte schließlich im Jahr 1954. Doch zeigten sich am Kirchengebäude Fundamentschäden, die immer stärker wurden, bis sich bis zum Jahr 1965 die südliche Giebelmauer immer stärker zur Maxstraße hin neigte. Im Jahr 1968 musste das Kirchengebäude schließlich abgerissen werden; an seinem Standort entstand das heutige evangelische Gemeindehaus.
==== Russisch-orthodoxe Kirche des Sergius von Radonesch ====
[[Datei:Russische Kirche.JPG|mini|Russische Kirche Bad Kissingen]]
Die Kissinger russisch-orhodoxe Kirche des Sergius von Radonesch entstand in der zweiten Hälfte des 19. Jahrhunderts in der Tradition von russischen Gotteshäusern, die zu Beginn des 20. Jahrhunderts auch an anderen deutschen Bade- und Kurorten wie Baden-Baden, Bad Ems, Bad Nauheim und Bad Homburg entstanden. Anlass war die hohe Anzahl an russischen Gästen in Bad Kissingen. Der früheste Anstoß zum Bau des Gotteshauses war im Jahr 1856 der Besuch von Zar Alexander II., dem der Magistrat ein Grundstück zum Bau der Kirche schenken wollte. Dieses Vorhaben wurde hinfällig, als der geplante Besuch des Zaren nicht zustande kam. Dabei blieb es auch, als der Zar in den Jahren 1864 und 1868 zur Kur nach Kissingen kam; stattdessen erhielt er eine provisorische Kapelle im Hotel. Als mit dem Bau einer Eisenbahnlinie zwischen Russland und Deutschland ab 1848 und dem Bau des Kissinger Bahnhofs nach dem Deutsch-Französischen Krieg von 1870/71 auch die Zahl der russischen Kurgäste stieg, wurde von der Kurverwaltung im Casino ein Raum für russisch-orthodoxe Gottesdienste in den Sommermonaten zur Verfügung gestellt.
Zu konkreten Plänen für ein eigenes russisches Gotteshaus in Bad Kissingen kam es schließlich im Jahr 1897. Unter Leitung von Erzpriester Alexej Maltzev, dem Vorsteher der russischen Botschaftskirche in Berlin, und der unentgeltlichen Beteiligung des St. Petersburger Hofarchitekten Victor von Schroeter sollte das Gotteshaus nach Plänen des Kissinger Architekten Carl Krampf errrichtet und durch Spendensammlungen in Russland und im Ausland finanziert werden. Im Jahr 1897 erwarb man das Grundstück für 8.000 Mark und zwei Jahre später ein weiteres Stück Land für 2.400 Mark. Am 20. Juli 1898 wurde der Grundstein gelegt und die Kirche schließlich am 18. Juli 1901 eingeweiht. Die Kirche wurde im Stil der byzantinischen Monumentalarchitektur errichtet und dem Heiligen Sergius von Radonesch, einem der volkstümlichsten Heiligen der Russen, geweiht. Die Besucher der Kirche stammten hauptsächlich aus der russischen Mittelschicht; zu den Besuchern zählte aber auch Graf Leo Tolstoi und vier Mitglieder des russischen Kaiserhauses. Die deutsche Kriegserklärung an Russland am 1. August 1914 zu Beginn des Ersten Weltkrieges brachte den religiösen Betrieb der Kirche zum Erliegen. Alle russischen Staatsangehörigen und Priester mussten ausreisen, die Kirche selbst wurde geschlossen und unter Zwangsverwaltung gestellt, ihr Vermögen eingezogen, ihre Glocken beschlagnahmt und eingeschmolzen.
Nach Ende des Ersten Weltkrieges wurde im Jahr 1921 wieder ein Gottesdienst in der Kirche gefeiert und Nicola Bader zum Priester ernannt. Die russische Gemeinde von Bad Kissingen bestand aus 15 Emigranten. Nachdem Nicolas Bader Bad Kissingen verlassen hatte, wurde der Gottesdienst von 1926 bis 1930 saisonweise von auswärtigen Geistlichen zelebriert. Nach Ende des Zweiten Weltkrieges entwickelte sich nach und nach eine russisch-orthodoxe Gemeinde in Bad Kissingen, und es kamen über 15 russisch-orthodoxe Geistliche in den Ort. Im Februar 1946 wurden ein Gemeinderat, ein Kirchenältester und eine Revisionskommission gewählt. Im Oktober 1948 wurde die Ausmalung der Kirche restauriert. Die Umsiedlung der "displaced persons" hingegen sorgte dafür, dass 1950 die meisten russisch-orthodoxen Mitglieder der örtlichen Gemeinde nach Amerika ausgewandert waren. Der letzte Priester hieß Michail Sagorjanskij, der 1973 in Darmstadt starb. Nach dem Zweiten Weltkrieg verlegte die "Bruderschaft des Heiligen Fürsten Wladimir" ihren Vereinssitz von Berlin nach Bad Kissingen und versuchte von nun an, Gottesdienste hier abzuhalten. Seit dem Fall des Eisernen Vorhangs kamen sehr viele deutschstämmige Aussiedler aus der ehemaligen Sowjetunion. So kamen auch einige orthodoxe Christen in den Ort, die von da an an den Gottesdiensten teilnahmen.
Im Mai 1997 wurde eine weitere Renovierung der Kirche vollendet. Seit 1997 hat die russisch-orthodoxe Gemeinde Bad Kissingens einen ständigen Priester.
==== Parkfriedhof ====
[[Datei:Parkfriedhof Bad Kissingen – 20120708-015.JPG|mini|225px|links|Hauptgang]]
[[Datei:Parkfriedhof Bad Kissingen – 20120708-016.JPG|mini|225px|Gräberfeld]]
Nachdem der Kapellenfriedhof schon einige Male erweitert worden war und das Potential für weitere Erweiterungen fast schon ausgereizt war, kam nur noch die Anlage eines neuen Friedhofs in Frage. Die ersten Pläne dazu gab es schon im Jahr 1871; als möglicher Ort für den neuen Friedhof kam damals schon nur das heutige Terrain zwischen Dummentaler und Sinnberger Weg in Frage. Bereits im Jahr 1880 stand eine Fläche mit 9.984 m² für 2.300 Gräber und Erweiterungspotential für 1.200 Gröber zur Verfügung; aus unbekannten Grund kam es damals noch zu keiner Friedhofsneuanlage. Am selben Ort begann man schließlich im Jahr 1932, als der Kapellenfriedhof nur noch für orrtsansässige Familien nutzbar war, zur Anlage des insgesamt 83.552 m² großen Parkfriedhofs, von dem zuerst im Jahr 1933 der vorgesehene kleine Teil und der Rest in den Jahren 1934 bis 1936 angelegt wurde. Dabei wurden Pläne von Stadtbaumeister Josef Fischer umgesetzt. Die Kosten beliefen sich auf 330.000 RM, die ohne Schuldenaufnahme finanziert wurden. Wie Oberbürgermeister Dr. Max Pollwein bei der Einweihung des Parkfriedhofs hoffte, "möge nun allen, die da abberufen werden, auf dieser Ruhestätte die Erde leicht sein". Der bereits von Anfang an für 35.000 bis 40.000 Einwohner geplante Friedhof musste dennoch in den Jahren 1975 und 1986 nach Osten hin erweitert werden. Für die steigende Anzahl an Feuerbestattungen wurde im Jahr 1983 ein Kolumbarium erbaut, das im Jahr 1999 um einen Mauerring für weitere Urnen ergänzt wurde.
==== Judentum ====
===== "Neue Synagoge" =====
[[Datei:Synagoge-Kissingen.jpg|mini|Die ''Neue Synagoge'']]
[[Datei:Bad Kissingen - Gedenkplatte zur ehem. Hauptsynagoge.JPG|mini|links|Gedenktafel von 2002]]
Die älteste Synagoge, die sich in Kissingen nachweisen lässt, war das in der Nähe des Erthalschen Judenhofes befindliche jüdische Bet- und Schulhaus von 1705, das durch die Initiative aller in Kissingen lebenden Juden entstand. In den Jahren 1851/52 wurde es durch die einfache und schlichte "Alte Synagoge" ersetzt. Bereits vier Jahrzehnte soäter wurde Architekt Carl Krampf von der jüdischen Gemeinde mit einem repräsentativen Neubau beauftragt. Im Jahr 1894 legte Carl Krampf, der zu gleichen Zeit auch die katholische St.-Laurentius-Kirche im heutigen Stadtteil Reiterswiesen konzipierte, einen Entwurf für die "Neue Synagoge" vor. Wie die jüdische Gemeinde in Baden-Baden, die im August 1899 ihre Synagoge einweihte, entschied sich die jüdische Gemeinde von Bad Kissingen für eine Gestaltung im neoromanischen Stil. Der Entschluss einerseits für den Neubau der Synagoge und andererseits für ihre neoromanische Gestaltung waren Anzeichen der Integration der jüdischen Mitbürger sowie des gestiegenen Selbstbewusstseins und Ansehens der jüdischen Gemeinde. Die Synagoge sollte für das Weltbad Bad Kissingen repräsentativ sein sowie den Kurbauten und christlichen Kirchen Bad Kissingens ebenbürtig sein. Unter Berichterstattung der lokalen "Saale-Zeitung" fand am 14. Juni 1902 die Einweihung der "Neuen Synagoge" statt. Kantor der "Neuen Synagoge" wurde Ludwig Steinberger, der Vater des Physik-Nobelpreisträgers Jack Steinberger.
Mitte Oktober 1938 wurde die "Neue Synagoge" von Kreisleiter Heimbach und zwei Begleitern besichtigt. Auf Nachfrage nach dem Grund für die Besichtigung erhielt der Hausmeister der Synagoge die Antwort, dass die "Existenz der Synagoge ... nur eine Frage der Zeit sei"<ref>Baruch Zvi Ophir, Pinkas Hakehillot: ''Encyclopaedia of Jewish Communities from their Foundation till after the Holocaust, Germany – Bavaria.'', In Collaboration with Shlomo Schmiedt and CHasia Turtel Aberzhanska. Jerusalem, S. 423</ref>. In der Nacht von 9. November 1938, der "Reichspogromnacht", auf den 10. Oktober 1938 wurde die "Neue Synagoge" in Brand gesteckt. Obwohl die Schäden reparabel gewesen wären, beschloss der Bad Kissinger Stadtrat am 17. März 1939 den Abriss der "Neuen Synagoge". Heute befindet sich an ihrem ehemaligen Standort eine Gedenktafel, die an die "Neue Synagoge" erinnert.
===== Jüdischer Friedhof =====
[[Datei:Jüdischer Friedhof 04.JPG|mini|Blick auf den Friedhof]]
Vor der Anlage des jüdischen Friedhofs von Bad Kissingen wurden die verstorbenen Juden des Ortes vermutlich in Pfaffenhausen (heute Stadtteil von Hammelburg) bestattet. Im Jahr 1817 erwarb die jüdische Gemeinde Bad Kissingen am heutigen Standort des jüdischen Friedhofs am damaligen Zückberg in der heutigen Bergmannstraße ein Gelände für die Anlage des Friedhofs. Aus diesem Jahr haben sich zwei Urknden erhalten, die den Verkauf des Geländes bestätigen; das in verschiedenen Quellen genannte Jahr 1801 für die Anlage des Friedhofs hat sich archivalisch nicht bestätigen lassen. Im Jahr 1891 wurde der Friedhof das erste Mal erweitert sowie das Taharahaus eingeweiht; eine weitere Friedhofserweiterung fand 1933 statt. Während des Zweiten Weltkrieges wurden in der Friedhofshalle russische Kriegsgefangene untergebracht. Nach dem Ende des Zweiten Weltkrieges fanden auf dem Friedhof wieder Beerdigungen verstorbener Juden statt.
== Marienkapelle ==
=== Geschichte ===
==== Anfänge ====
==== Liebfrauensee ====
Vor der Anlage von Marienkapelle und Kapellenfriedhof befindet sich der 1.076 m² große Liebfrauensee. Der Sage nach ist er mit dem Golf Biscaya verbunden beziehungsweise bezieht sein Wasserreservoir aus dem Bad Kissinger Stationsberg. Der Sage nach soll auf seinem Grund ein Riese schlafen, dessen Bewegungen Erdbeben auslösen, während die Gasblasen aus dem See seinen Atem darstellen; wenn er eines Tages aufsteht, sollen riesige Wasserfluten die Stadt erfassen.
Der Sage nach geht der Name des Sees auf eine zunächst unglückliche Liebesgeschichte zurück. Demnach stand einst am Fuß des Sees eine Mühle, die einem reichen Adeligen aus der Stadt gehörte. Sein Geselle verliebte sich in die Tochter des Müllers, der allerdings nur einen reichen Schwiegersohn wollte. Aus Liebeskummer wollte sich der Müllersgeselle in den See stürzen, wurde jedoch von einer Marienerscheinung davon abgehalten, die ihm versprach: „Nach drei Jahren“. Der junge Mann zog in die Ferne und kam nach drei Jahren wieder. Der Müller war inzwischen erkrankt und verarmt und erlaubte die Hochzeit.
==== Die Marienkapelle ====
Im Zusammenhang mit der Stiftung dreier Äcker vom 2. März 1286 durch den Schuster Konrad zu Nüdlingen ist für dieses Jahr ein Kirchenneubau in Kissingen bezeugt. Dieser Kirchenbau ist jedoch sowohl jedoch der hl. Maria als auch dem hl. Jakobus gewidmet, sodass unsicher ust, ob dieser sich auf die ''Marienkapelle'' oder auf die ''Jakobuskirche'' bezieht. Die erste eindeutige urkundliche Bezeugung der ''Marienkapelle'' vom 5. Juni 1348 bezieht sich auf eine Stiftung zum Bau einer neuen Kirche durch den Münnerstädter Herrmann Wunder und seine Frau Katharina; in dieser Zeit entstand der Turmunterbau. Ebenfalls aus dem Jahr 1348 stammt die erste bekannte urkundliche Erwähnung des ''Kapellenfriedhofes'', der durch die zahlreichen Opfer der Pest erforderlich wurde.
In ihrer Anfangszeit befand sich die Kapelle mit dem Patrozinium Mariens noch außerhalb der Kissinger Stadtmauern; dementsprechend ist bei der Erwähnung von 1348 von einer „capella extra muros“, also einer „Kapelle außerhalb der Mauern“, die Rede. Vornehmlich fanden in der ''Marienkapelle'', die ebenso als Friedhofskirche diente, Beerdigungen Kissinger Adeliger statt; ebenso war sie das Ziel von Wallfahrten.
Der Historiker Michael Stöger vermutete, Otto von Botenlauben, Hausherr der im heutigen Stadtteil Reiterswiesen gelegenen ''Burgruine Botenlauben'', sei Bauherr einer „Marienkapelle“ gewesen, die sich am Standort der heutigen ''Sparkasse Bad Kissingen'' befunden habe. Diese Theorie gilt in Bezug auf die heutige ''Marienkapelle'' als unwahrscheinlich, und zwar einerseits durch die Stiftung von Herrmann Wunder und seiner Ehefrau sowie durch das Fehlen eines urkundlichen Beleges für Otto von Botenlauben als Begründer der ''Marienkapelle''. Ferner hätte es für Otto von Bodenlauben keine Notwendigkeit gegeben, überhaupt ein Kirchengebäude in der Stadt zu stiften, da auf der ''Burg Bodenlaube'' eine Kapelle vorhanden war. Stöger könnte eine ''St.-Katharina-Kirche'' gemeint haben, die in einer Münnerstädter Klosterurkunde vom 30. April 1357 genannt wird.
Bereits 1413 entstand die inzwischen einzige Glocke des Kirchturms, die einen Durchmesser von 80 Zentimetern und ein Gewicht von 310 Kilogramm aufweist. Wie eine Inschrift an zwei Strebepfeilern des spätgotischen Kirchenchores nachweist, wurde dessen Bau im Jahr 1446 von Peter von Herbilstadt gestiftet und im Jahr 1456 von Heinrich Zabenstein ausgeführt.
==== Neugestaltung unter Balthasar Neumann ====
[[Datei:Balthasar Neumann Würzburg Mainfränkisches Museum Marienberg.jpg|mini|Balthasar Neumann, Porträt von Marcus Friedrich Kleinert (1727)]]
[[Datei:Residenz Wuerzburg Vorderan.jpg|mini|Die ''Würzburger Residenz''.]]
Dr. theol. Johannes Laurentius Helbig, seit dem Jahr 1700 Pfarrer von Bad Kissingen, bezeichnete am 7. Juli 1701 die Bausubstanz des Kirchengebäudes als ''»höchst ruinös und dahero ohnumgänglich zu reparieren«''<ref>Pfarrarchiv Bad Kissingen, Band 21 – ''Protocollum Capituli ruralis Muenerstadiani ab anno 1700'', S. 23</ref> und trat für entsprechende Baumaßnahmen ein. Er schlug vor, das Vorhaben unter anderem mit dem Verkauf des Landbesitzes der ''Marienkapelle'' von einem Morgen zu finanzieren. Nachdem zweimal Abgesandte des Bistums Würzburg den Zustand der ''Marienkapelle'' untersuchten, weitere Maßnahmen jedoch ausblieben, appellierte Helbig im Jahr 1702 erneut an seine Vorgesetzten, dass ''»die Gefahr wird von tag zu tag grösser«'' werde und ''»daß das Dach einfallen, Altäre, Orgel und anderes in der Kirche zerschmettern oder auch Menschen erschlagen könnte.«''<ref>Pfarrarchiv Bad Kissingen – S. 51b</ref> Nach einer im September 1725 begonnenen Sammlung im Juni 1726, die einen Ertrag von 250 Gulden erbrachte, wurde der Baumeister Balthasar Neumann mit einem Neubau der ''Marienkapelle'' beauftragt, den dieser ab 1727 ausführte.
Der Architekt und Baumeister Balthasar Neumann wurde am 27. Januar 1687 in Eger geboren. Sein erster Lehrmeister war wahrscheinich sein Pate, der Glocken- und Metallgießer Balthasar Platzer aus Eger. Seit 1711 war Neumann nachweislich in der Gießerei Ignaz Kopp in Würzburg beschäftigt. Im Jahr 1712 wurde er Gemeiner in der fränkischen Kreis-Artillerie, da er nur so die Ingenieurslaufbahn einschlagen konnte. Beim Militär brachte er es bis 1718 zum fürstlichen Ingenieur-Kapitän. In den Jahren 1717/18 befand er sich mit den Truppen in Österreich und Ungarn, wo er, wie auf einer Reise nach Mailand, Berufserfahrung und Eindrücke sammeln konnte. In Würzburg wurde der Stückhauptmann (der Artillerie) und Oberingenieur Neumann im Jahr 1719 vom neuen Fürstbischof Johann Philipp Franz von Schönborn zum fürstbischöflichen Baudirektor in Würzburg berufen. Auf Empfehlung des Mainzer Kurfürsten Lothar Franz von Schönborn, des Onkels des Fürstbischofs, beauftragte dieser Neumann mit der Planung des Neubaus der seit 1981 zum UNESCO-Weltkulturerbe gehörenden Würzburger Residenz. Eine Studienreise in diesem Zusammenhang führte ihn bis nach Paris, wo er seine Fähigkeiten vertiefte. Im Jahr 1724 wurde er Major und heiratete ihm Jahr darauf Maria Eva Engelberta Schild, Tochter des Geheimen Hofrats Franz Ignaz Schild. 1729 wurde er Oberstleutnant in der fränkischen Kreisartillerie und Baudirektor in Bamberg. 1731 erhielt er den für ihn neu eingerichteten Lehrstuhl für Zivil- und Militärbaukunst an der Universität Würzburg und wurde 1741 Oberst (der höchste für ihn möglichen militärische Rang). Im Jahr 1723 wurde Neumann Mitglied der bischöflichen Baukommission. Als Baudirektor des Domkapitels nahm er eine beherrschende Rolle im Würzburger Bauwesen ein. Er starb am 19. August 1753 als Oberst der Artillerie und fürstbischöflicher Oberbaudirektor und wurde in der Würzburger Marienkapelle beigesetzt.
Der Neustädter Benedikt Lux ergänzte Neumanns Neubau in der ''Marienkapelle'' in den Jahren 1734 bis 1738 mit Altar- und Kanzelneubau.
Am Hauptaltar zeigt das Altarbild, dessen Entstehung unbekannt ist, den heiligen Burkard, den ersten Bischof von Würzburg und von nun an Patron der Kapelle, vor der Würzburger Residenz bei der Verehrung Mariens. Der hl. Burkard wird dabei von Skulpturen von Johannes dem Täufer und dem Apostel Johannes (beide jeweils innen) sowie die hl. Joachim und Anna, der Eltern der hl. Maria (beide jeweils außen) flankiert. Und dem Altarbild des hl. Burkard befindet sich in der Tabernakelnische eine Gnadenfigur in Form einer Pietà von 1420.
Der linke Seitenaltar beherbergt den hl. Josef zwischen Skulpturen der hl. Katharina und der hl. Apollonia von Alexandria, der rechte Seitenaltar die Immaculata zwischen Skulpturen des Elias und des Elischa.
[[Datei:Bad Kissingen, Marienkapelle 301-Pulpit.JPG|mini|200px|Kanzel]]
<gallery>
Bad Kissingen, Marienkapelle 205-Altar.JPG|Linker Seitenaltar
Bad Kissingen, Marienkapelle 201-Altar.JPG|Hauptaltar
Bad Kissingen, Marienkapelle 202-Altar.JPG|Pietà in der Tabernakelnische des Hauptaltars
Bad Kissingen, Marienkapelle 207-Altar.JPG|Rechter Seitenaltar
</gallery>
Im Jahr 1740 errichtete Valtin Lohr eine neue Sakristei.
Die von Benedikt Lux geschaffene Kanzel ist an Korb und Schalldeckel mit Voluten versehen. Gegenüber der Kanzel befindet sich ein Dreifaltigkeitsaltar aus der Zeit um 1700 mit einer Darstellung der Hl. Dreifaltigkeit sowie der hl. Barbara von Nikomedien. Der Altar ist mit gedrehten Säulen und Schleiern aus schwerem Akanthus ausgestattet.
Am 29. September 1744 fand die feierliche Weihe der Kapelle in ihrer neuen Gestalt durch Johannes Bernardus Mayer, dem Weihbischof der Diözese Würzburg in Anwesenheit von 12 Priestern und zwei Mönchen statt. In diesem Rahmen firmte der Weihbischof 73 Kissinger Kinder.
==== Nach der Neugestaltung ====
[[Datei:97688 Bad Kissingen, Germany - panoramio (34).jpg|links|mini|150px|Bildstock]]
[[Datei:Bad Kissingen, Kapellenstraße 17-001.jpg|mini|Küsterhaus]]
Das ehemalige Küsterhaus befindet sich auf dem Friedhofsgelände nahe dem Haupteingang auf Höhe der Marienkapelle. Es stammt aus der ersten Hälfte des 19. Jahrhunderts. Das Gebäude stellt einen zweigeschossigen, verputzten Walmdachbau über einem hohen Sandsteinquadersockel dar.
Nahe der Nepomuk-Statue befindet sich ein Bildstock, der – inzwischen nicht mehr sichtbar – mit 1719 bezeichnet war. Über einem 97 Zentimeter hohen Tischsockel und einer 1,40m ionisierenden Säule befindet sich eine 90 Zentimeter hohe Aufsatztafel, deren Schauseiten das Wunder von Vierzehnheiligen und eine Abbildung der 11köpfigen, vor dem Kreuz knieenden Stifterfamilie zeigen. Der Bildstock wird bekrönt von einer Darstellung des hl. Georg mit Drachen. Der jetzige Standort des Bildstocks ist wahrscheinlich auch der originale.
Auf dem Sockel befindet sich folgende Inschrift:
AD GLORIAM DEI<br/>
ET SANCTORUM XIV<br/>
AUXILIATORUM VE<br/>
NERATIONEM<br/>
Auf Deutsch:<br/>
Zur Ehre Gottes<br/>
Und zur Verehrung der 14 heiligen
Nothelfer<br/>
Der Bildstock befindet sich auch auf bildlichen Darstellungen der Schlacht bei Kissingen von 1866.
==== "Schlacht bei Kissingen" ====
[[Datei:Gefecht-Kapellenfriedhof-Kissingen-1866.jpg|left|mini|300px|Zeitgenössische Postkartendarstellung der ''Schlacht bei Kissingen''.]]
[[Datei:Oskar v Zoller (IZ 48-1867 S 80).jpg|mini|Generalleutnant Oskar von Zoller]]
Die "Schlacht bei Kissingen" betraf beim Durchmarsch der preußischen Truppen durch Kissingen auch die Marienkapelle und den Kapellenfriedhof (zum Kapellenfriedhof, speziell zu den Gefallenen der Schlacht siehe den entsprechenden Abschnitt im Wikibooks-Kapitel über den Kapellenfriedhof). Generalleutnant Oskar von Zoller ließ den Kapellenfriedhof von Resten verschiedener Kompanien, u. a. dem 15. Infanterie-Regiment, verschanzen und verteidigen, um den Preußen den Weitermarsch nach Winkels (heute Stadtteil von Bad Kissingen) und Nüdlingen zu versperren. Die bayerischen Truppen nutzten Steine Steine von Meßnerhaus und Mauer als Schießscharten. Während des Gefechts entstanden viele Sachschäden, Gräber wurden umgestoßen, Tote und Verletzte waren auf dem Gelände verteilt. Die preußischen Soldaten nutzten die Kapelle als Gefangenenlager für gefangengenommene bayerische Soldaten. Eine zeitgenössische Zeichnung, die sich in Privatbesitz befindet, zeigt die Festnahme des Kapellenkirchners Kaspar Betzer, der vergeblich versucht hatte, diese Art der Nutzung der Kapelle zu verhindern. In Betzers Familie wurde der Beruf des Totengräbers schon seit 300 Jahren ausgeübt; der Tag der "Schlacht bei Kissingen" war der 100. Geburtstag seines Vaters. Als die preußischen Soldaten den Schlüssel der Kapelle verlangten, behauptete er zunächst, er hätte ihn seiner Tochter mitgegeben, musste den Schlüssel aber hergeben, als die preußischen Soldaten auf ihrer Forderung bestanden.
[[Datei:Zoller-Gedenkstein (Bad Kissingen) – 20140928-011.jpg|mini|300px|Zoller-Gedenkstein in der Münnerstädter Straße.]]
An der Münnerstädter Straße Richtung Nüdlingen entstand zu Ehren von Oskar von Zoller der ''Zoller-Gedenkstein''. Es wurde im Jahr 1866 von Bildhauer Michael Arnold gefertigt. Bei einem Besuch der Lazarette und Kriegsschauplätze in Kissingen am 22. September 1866 nach dem Krieg zeigte sich die bayerische Königin Marie Friederike von Preußen besonders betroffen von Oskar von Zollers Schicksal. Sie beauftragte den Bildhauer Michael Arnold mit einen Entwurf für einen Zoller-Gedenkstein. Dessen erster Entwurf einer zerbrochenen Säule wurde bon der Kömihin abgelehnt; sein zweiter Entwutf mit einem Kreuz auf einem Felsen fand indessen ihre Zustimmung. Über Graf Castell erkundigte sie sich bei Bezirksamtsmann und Badkommisär Joseph Ferdinand Freiherr von Parseval nach dem genauen Todesort des Generalleutnants. Am 17. November 1866 wurde das Denkmal eingeweiht. Im Jahr 1977 wurde der Zoller-Gedenkstein im Rahmen des Ausbaus der Münnerstädter Straße auf die dem bisherigen Standort gegenüber liegende Straßenseite umgesetzt; am neuen Standort entstand eine neue Grünanlage für das Denkmal.
Schriftsteller Theodor Fontane schilderte die "Schlacht bei Kissingen" in einem Kriegsbericht.
==== Nach 1866 ====
[[Datei:Bad Kissingen, Kapellenstraße, Hl. Nepomuk, 001.jpg|mini|150px|St.-Nepomuk-Statue]]
[[Datei:Bad Kissingen, Kapellenstraße, Kriegerdenkmal, 001.jpg|mini|150px|links|Gefallenendenkmal]]
Zwischen Marienkapelle und Liebfrauensee befindet sich zur Kapellenstraße hin eine 1,80m große Sandsteinstatue, die wohl aus dem 18. Jahrhundert stammt und den Brückensturz des hl. Nepomuk zeigt. Vor ihrer Versetzung an ihren jetzigen Standort an der Marienkapelle im Jahr 1907 befand sich die Statue um 1870 an einer Saalebrücke, die im Krieg gesprengt wurde. Bei dem Brückensturz handelt es sich um das Martyrium des Heiligen, auf das dessen Heiligsprechung zurückgeht. Demnach hielt er sich an das Beichtgeheimnis und weigerte sich, dem König Wenzel zu verraten, was dessen Ehefrau dem Heiligen in der Beichte anvertraut hatte, woraufhin Wenzel ihn von der Brücke werfen ließ.
Vor der Marienkapelle befindet sich ein Gefallenendenkmal, das an die Toten des Ersten Weltkriegs erinnert. Es entstand im Jahr 1924 nach Entwürfen des Münchners Heinrich Salomoun. Auf dem Sockel befindet sich ein breites Kämpferkapitell mit Soldatenreliefs, darüber die Figur eines brüllenden, verletzten Löwen.
== Kapellenfriedhof ==
==== Geschichte ====
===== Anfänge =====
[[Datei:Bad Kissingen, Friedhofskreuz, 001.jpg|mini|links|150px|Friedhofskreuz (18. Jhdt.)]]
Die erste bekannte Erwähnung des Kapellenfriedhof stammt aus dem Jahr 1348, etwa aus der Entstehungszrit der Marienkapelle, als viele Kissinger der Pest zum Opfer fielen. Das erste, nicht mehr existente Leichenhaus des Friedhofs entstand im Jahr 1841. Im Jahr 1855 fand eine erste Erweiterung des Friedhofs statt.
Das neben der Marienkapelle befindliche Kruzifix aus Sandstein mit Mater-Dolorosa-Darstellung entstand im 18. Jahrhundert. Es steht auf einem breiten Tischsockel mit einer Reliefdarstellung des schlafenden Christuskindes. Vor dem Kruzifix befindet sich eine ebenfalls aus Sandstein bestehende Marienfigur.
===== "Schlacht bei Kissingen" =====
[[Datei:Gefecht-Kapellenfriedhof-Kissingen-1866.jpg|mini|300px|Zeitgenössische Postkartendarstellung der ''Schlacht bei Kissingen''.]]
[[Datei:Germania (Bad Kissingen) – E650.jpg|mini|150px|Die „Germania“.]]
[[Datei:Bad Kissingen, Friedhof, 008.jpg|150px|mini|Gedenksäule]]
Während der "Schlacht bei Kissingen" am 10. Juli 1866 im Rahmen des "Deutschen Krieges" ließ Genneralleutnant Oskar von Zoller den Kapellenfriedhof von Resten verschiedener Kompanien, u. a. dem 15. Infanterie-Regiment, verschanzen und verteidigen, um den Preußen den Weitermarsch nach Winkels (heute Stadtteil von Bad Kissingen) und Nüdlingen zu versperren. Die bayerischen Truppen nutzten Steine von Meßnerhaus und Mauer als Schießscharten. Während des Gefechts entstanden viele Sachschäden, Gräber wurden umgestoßen, Tote und Verletzte waren auf dem Gelände verteilt. Bei der Erstürmung des Friedhofs durch preußische Soldaten verloren auf beiden Seiten viele Soldaten ihr Leben. Sie und etwa 151 der insgesamt 350 Gefallenen wurden auf dem Kapellenfriedhof bestattet (siehe Kapitel "Kriegsgräber").
Gegenüber dem Friedhof fanden 63 Gefallene in einem Massengrab ihre letzte Ruhe, für das Bildhauer Michael Arnold das Mahnmal der ''Trauernden Germania'' schuf. Kurz nach dem ''Deutschen Krieg'' entstand im September 1866 in Bad Kissingen ein Komitee zur Errichtung eines Denkmals; zu den Gründungsmitgliedern gehörte auch als Initiator der Bezirksamtsmann und Badkommissär (Kurdirektor) Joseph von Parseval, der von den wohlhabenden Kurgästen 4.000 Gulden an Spenden sammelte. Das Startkapital von 80 Gulden wurde durch Spenden der am Krieg beteiligten Regimenter ergänzt, so dass das Guthaben des Komitees am 27. Mai 1868 bei 1.948 Gulden und 29 kr. lag. Als Standort stellte die Witwe Mathilde Panizza, Mutter des Schriftstellers Oskar Panizza sowie Eigentümerin des ''Russischen Hofes'', ihren südlich des Bad Kissinger Kapellenfriedhofes gelegenen Acker zur Verfügung. Mit der Ausführung des Denkmals wurde der Bildhauer Michael Arnold beauftragt. Nach Angaben der Festschrift des ''Vereins für christliche Kunst'' ließ Arnold die eigentliche ''Germania''-Skulptur mit seinem 1:2-Modell als Vorlage von seinem Schüler Valentin Weidner „zu seiner großen Zufriedenheit“ ausführen. Den Angaben von Arnolds Schüler Balthasar Schmitt zufolge konnte Arnold aus gesundheitlichen Gründen lediglich die Modelle zu seinen Werken herstellen. Die 1867/68 fertiggestellte ''Germania'' konnte erst am 8. September 1869 (unter Joseph von Parsevals Nachfolger Clemens zu Pappenheim eingeweiht werden, da es drei Jahre dauerte, bis die Namen aller Kriegsopfer, die auf den Sockel der Skulptur gemeißelt wurden, in Erfahrung gebracht werden konnten.
In der Brust der Marienfigur vor dem Kruzifix neben der Marienkapelle befindet sich ein Loch mit Bleiresten, das der Legende zufolge während der "Schlacht bei Kissingen" entstanden sein soll, als ein preußischer Soldat vom Westeingang des Friedhofs auf einem auf dem Kruzifixsockel stehenden bayerischen Soldaten schoss. Eine andere Version der Legende besagt, der preußische Soldat habe gezielt auf die Marienfigur geschossen. Kreisheimatpfleger Werner Eberth zufolge stammt das Loch mit den Resten aus Lötblei wohl eher von einem an der Marienfigur befestigten, zur Mater-Dolorosa-Darstelllung gehörenden Schwert oder Dolch; Schwert oder Dolch fielen Eberth zufolge einem Diebstahl zum Opfer.
Zwischen den Kriegsgräbern befindet sich auch eine Gedenksäule für die Gefallenen des ''Deutschen Krieges''. Die Säule ist mit einem bayerischen Raupenhelm auf einem Lorbeerkranz mit Schwert ausgestattet. Unter den im Bad Kissinger Stadtarchiv erhaltenen Entwürfen des Bildhauers Michael Arnold befindet sich auch ein Entwurf für die Gedenksäule. Allem Anschein nach wurde die Gedenksäule auch nach Michael Arnolds Entwurf ausgeführt.
===== Mariensäule =====
[[Datei:97688 Bad Kissingen, Germany - panoramio (39).jpg|mini|Mariensäule]]
Die Mariensäule und wurde im Jahr 1905 von Bildhauer Valentin Weidner errichtet. Am 8. Dezember 1905 (Mariä Empfängnis) wurde sie ursprünglich nördlich der Herz-Jesu-Stadtpfarrkirche aufgestellt; ein Kurgast soll sie gestiftet haben. Im Jahr 1958 wurde sie neben der Herz-Jesu-Stadtpfarrkirche durch eine barocke Madonnenfigur ersetzt. Bei der Auflösung des Kissinger Instituts der Englischen Fräuulein in Bad Kissingen haben diese die Madonnenfigur von der Herz-Jesu-Stadtpfarrkirche mitgenommen und im Garten ihres Erholungsheims in Kirchehrenbach (Fräänkische Schweiz) wieder aufgestellt. Die Hand mit dem Zepter ist abgebrochen, jedoch wohlverwahrt.
Als wegen Schwesternmangel die Schließung des Erholungsheims bevorstand, einigten sich die Englischen Fräulein mit der Stadt Bad Kissingen über eine Rückgabe der Statue. Im Gegenzug übernahm die Stadt die Betreuuung der Englischen Fräulein auf dem Kapellenfriedhof. Nach mehreren Standortalternativen fiel schließlich die Entscheidung, die Mariensäule in der Ost-West-Achse des Friedhofs aufzustellen. womit sie dem Friedhofskreuz von Valentin Weidner spiegelbildlich auf der Querachse gegenübersteht.
Der Bad Kissinger Steinmetzbetrieb Torsten Göbel bekam den Auftrag zur Ergänzung der Säule. Nach der Vorlage von Valentin Weidner von 1905 entstand eine neue Säulenbasis aus rotem Sandstein. Im Rahmen einer Maiandacht wurde die neue Mariensäule am 29. Mai 1994 von Stadtpfarrer Dekan Oskar Pflüger neu eingeweiht, woran auch eine Vertretung der Englischen Fräulein aus Bamberg teilnahm.
===== Friedhofserweiterung von 1890 =====
[[Datei:Bad Kissingen, Friedhof, Leichenhalle, 001.jpg|mini|Leichenhaus]]
[[Datei:97688 Bad Kissingen, Germany - panoramio (44).jpg|mini|Friedhofskreuz (1890 von Valentin Weidner]]
Im Jahr 1890 wurde der Kapellenfriedhof ein zweites Mal erweitert, wobei er seine heutige Ausdehnung erhielt. Bei dieser Friedhofserweiterung entstand von 1890 das heutige Leichenhaus. Erste Pläne für das Leichenhaus gehen auf das Jahr 1885 zurück. Bei dem von Architekt Jakob Hergenröther errichteten Leichenhaus handelt es sich um einen eingeschossigen Satteldachbau im Rundbogenstil. Im Eingangsbereich ist es mit einem mittigen Dreiecksgiebel über einer dreifachen Arkatur gestaltet.
Das Friedhofskreuz von Valentin Weidner wurde bei der Friedhofserweiterung von 1890 in der Mitte des nach Osten erweiterten Teils des Kapellenfriedhofs aufgestellt. Die Einweihung Ende September 1890 fand unter Berichterstattug der lokalen "Saale-Zeitung" statt. Am Friedhofskreuz fällt die achteckige Ausführung des Kreuzesstammes auf. Das Friedhofskreuz wurde Ende der 1980er Jahre renoviert.
Eine zwischen den Jahren 1925 und 1929 geplante Erweiterung fand nicht statt, da am Sinnberg der Parkfriedhof entstand.
Der barockisierende Torbogen, der zum Friedhof mit einer Fläche von 10.000 m² führt, datiert vom Jahr 1909.
===== Gegenwart =====
[[Datei:Denkmal Flurl 02.JPG|mini|150px|links|Matthias-von-Flurl-Denkmal (2017, Detail)]]
Im Jahr 1980 fand aus wasserschutzrechtlichen Gründen die letzte Bestattung auf dem Kapellenfriedhof statt. Seitdem wird er in gärtnerischer Hinsicht nur sehr behutsam gepflegt, was laut Stadtplanungsamt „den Prozess des Entstehens und Vergehens in den Jahrzehnten und im Altern und Absterben“ widerspiegeln soll. Im Jahr 2012 verkleinerte die Stadt Bad Kissingen den Gräberbestand auf dem Friedhof um 30 Gräber. Im Jahr 2014 hat Kreisheimatpfleger Werner Eberth eine Bürgerinitiative begründet, in deren Rahmen ehrenamtliche Bad Kissinger Bürger die Grabstellen auf dem Kapellenfriedhof pflegen.
Am 15. Juli 2017 wurde auf dem Friedhof ein Denkmal für Salinen-Inspektor Mathias von Flurl enthüllt. Dieser war am 27. Juli 1823 während eines Aufenthaltes an der Oberen Saline im heutigen Bad Kissinger Stadtteil Hausen an einem Schlaganfall verstorben und wurde auf dem Kapellenfriedhof bestattet.
=== Grabanlagen ===
==== Kriegsgräber ====
Während der "Schlacht bei Kissingen" im "Deutschen Krieg" von 1866 fanden Teile der Kämpfe, wie im entsprechenden Kapitel dieses Wikibooks ausgeführt, auch auf dem Gelände des Kapellenfriedhofs statt. Aus diesem Grund finden sich auf dem Kapellenfriedhof auch Gräber von Gefallenen der Schlacht. Der Todestag der Gefallenen ist dementsprechend, wenn nicht anders angegeben, der 10. Juli 1866, der Tag der Schlacht.
===== Franz Doyesez =====
Das Grab des Provisors/Apothekers Franz Doyesez (geb. 1840 in Trebnitz, Schlesien) befindet sich nahe der Nordmauer im Zentrum des Kapellenfriedhofs. Doyesez war, vermutlich zwischen 1850 und 1860, aus Preußen geflohen, um nicht in der Armee dienen zu müssen. Er arbeitete in der heutigen Boxberger-Apotheke in der Unteren Markstraße. Laut Augenzeugin Amalie Ihl wurde er während der Gefechte vom einem Granatsplitter tödlich ins Herz getroffen. Nach Augenzeugenberichten war er sofort tot. Jahrzehntelang erinnerte ein Text im Ladenraum an Doyesez' Schicksal. Bei einem Umbau der Apotheke wurde der Text entfernt.
===== Michael Hergenröther =====
Das Grab des Hausdieners Michael Hergenröther (geb. 1808, Geburtsort unbekannt) befindet sich nahe der Nordmauer im Zentrum des Kapellenfriedhofs. Er war im "Russischen Hof" (heute: Kurhausstraße 9) tätig, der der Mutter des Schriftstellers Oskar Panizza gehörte. Laut den Memoiren seiner Chefin fand Hergenröther den Tod, als er seinen kämpfenden Landsleuten den Weg über den Zaun weisen wollte. Hergenröther soll laut mündlicher Überlieferung 13 Kinder gehabt haben.
===== Wilhelm Lüders =====
[[Datei:Bad Kissingen, Kapellenstraße, Friedhof, Soldatengräber-008.jpg|mini|links|Grab Wilhelm Lüders]]
Wilhelm Lüders war preußischer Hauptmann. Während der Gefechte wurde er lediglich verwundet und starb am 9. August.
===== Paul von Brosowski, Carl von Rex, Feldwebel Schmitt aus Aschersleben, W. Schuermannn III =====
[[Datei:Bad Kissingen, Friedhof, 009.jpg|mini|Grab von Paul von Brosowski,<br/>Lieutenant Carl von Rex,<br/>Feldwebel Schmitt aus Aschersleben,<br/>Füsilier W. Schuermannn III]]
Paul Brzsowski (geb. in Potsdam) gehörte dem 6. Westfälischen Infanterie-Regiment und starb durch bayerische Kugeln.
Der preußische Lieutenant Carl von Rex (geb. in Erfurt) gehörte ebenfalls dem 6. Westfälischen Infanterie-Regiment an und starb durch eine preußische Kanone.
Ferner liegen in dem Grab der Feldwebel Schmitt (geb. in Aschersleben) und der Füsilier W. Schuermannn III.
===== Friedrich Johann Ernst von Reitzenstein =====
[[Datei:GRÄBER auf dem Kapellenfriedhof.jpg|mini|links|Friedrich Johann Ernst von Reitzenstein]]
Friedrich Johann Ernst von Reitzenstein (geb. 1823 in Kronach) stammte aus dem Vogtländischen Uradel (1318) der fränkischen Reichsritterschaft, Kanton Gebürg. Im Jahr 1759 wurde seine Familie in den Freiherrenstand erhoben. Friedrich Johann Ernst von Reitzenstein war Hauptmann in der 4. Compagnie I. Bataillon 12. Infanterie-Regiment "König Otto von Griechenland". Bei der Verteidigung von Winkels erlitt er schwere Verwundungen durch Schüsse in Schultergelenk und Leber.
===== Karl Heinrich August Rohdewald =====
[[Datei:Grabmal August Rohdewald auf dem Kapellenfriedhof.jpg|mini|Karl Heinrich August Rohdewald]]
Karl Heinrich August Rohdewald (geb. 1821 in Detmold) begann seine militärische Laufbahn als Offiziers-Aspirant im Füsilier-Bataillon Lippe. Im Jahr 1842 erlangte er sein Reifezeugnis zum Offizier. Im Jahr 1849 wurde er Adjutant des II. Füsilier-Bataillons Lippe und daraufhin Adjutant des Füsilier-Bataillons Lippe, im Jahr 1563 Stabskapitän, im Jahr 1859 Kompanie-Chef sowie im Jahr 1863 Major und Bataillons-Kommandeur des Füsilier-Bataillons Lippe. Karl Heinrich August Rohdewald wurde im Jahr 1861 mit dem LMV-Orden und im Jahr 164 mit dem LGDKr-Orden ausgezeichnet. Er fiel am 10. Juli 1866 um 18:30 Uhr auf der Passhöhe des Schlegelberges zwischen Winkels und Nüdlingen beim ehemaligen Waldschlösschen durch ein Schrapnellgeschoss in den Kopf. Theodor Fontane zufolge fiel Karl Heinrich August Rohdewald nicht hoch zu Ross, sondern links seitlich seines Bataillons zu Fuß.
Karl Heinrich August Rohdewalds Offizierscorps stiftete den Steinsarg und ließ ihn mit einer Inschrift versehen. Der bronzene Aufsatz in Form eines griechischen Helmes mit Säbel und Wehrgehänge fiel vor einigen Jahren einem Diebstahl zum Opfer. Im Jahr 2009 hat eine Bad Kissingerin den Aschacher Bildhauer Ludwig Bauer beauftragt, den Helm zu ersetzen. Theodor Fontane erwähnte das Grabmal auch in seiner Novelle "Eine Frau in meinen Jahren".
===== Schmidt, Vorname unbekannt =====
Der Buchdrucker und Corporal im 6. Jäger-Bataillon Schmidt (geb. in Bayreuth, Geburtsdatum und Vorname unbekannt) starb laut Augenzeugen J. Heinemann, im Gegensatz zur Schilderung bei Theodor Fontane, "an der Promenade, vor dem Hotel Sanner" (heute: Rhön-Reha-Klinik, Kurhausstraße 20) im tapferen Kampf gegen sieben Preußen, die ihn mit einem provisorischen Kreuz bestatteten und dieses beschrifteten mit "Hier ruht ein seiner Pflicht gefallener tapferer Bayer". Schmidt wurde später auf den Kapellenfriedhof umgebettet. Wie Theodor Fontane bei einem Besuch im Jahr 1867 auffiel, war das Grab wie das Grab eines volkstümlichen Helden mit Blumen und Gedichten geschmückt.
===== Ignaz Thoma =====
Der Bürstenbinder und Hauptmann 9. Kompanie III. Bataillon 9. Infanterie-Regiment "Wrede" Ignaz Thoma (geb. 1820 in Kaufbeuren) stammte aus einer Melberfamilie und war wahrscheinlich Schüler der Lateinschule Kaufbeuren. Im Jahr 1842 trat er als Transkribierter dem 11. Inf.-Rgt- "Ysenburg" bei und vollendete im Jahr 1847 seine Dienstzeit als Sergeant. Er verpflichtete sich 1848 weiter und wurde als Unterlieutenant in das 3. Jäger-Bataillon versetzt, im Jahr 1851 in das 5. Jäger-Bataillon und im Jahr 1859 als Oberlieutenant in das 9. Infanterie-Regiment "Wrede". Am 20. Mai 1866 wurde er Hauptmann II. Klasse. Auf Grund seiner Mittellosigkeit musste ihm sein Bruder für seine Equipierung anlässlich seiner Beförderung zum Offizier Geld leihen. Thoma hielt mit 200 Mann die Stellung am Kapellenfriedhof zwei Stunden lang, bevor er der preußischen Übermacht weichen musste. Er wurde wenige Meter außerhalb auf dem Weg nach Winkels verwundet.
===== Colmar von Uthmann =====
Colmar von Uthmann, Premier-Lieutenant und Kompanie-Chef 6. Compagnie II. Battaillon 2tes Posensches Infanterie-Regiment Nr. 19 (geb. 1836, Langenau in Schlesien) fiel im Kampf um die Höhen bei Winkels. An ihn und andere Gefallene erinnert auch das von Bildhauer Michael Arnold geschaffenes Denkmal auf der Passhöhe nach Nüdlingen.
===== Eduard Warnberg =====
[[Datei:Grab Eduard Warnberg auf dem Kapellenfriedhof.jpg|mini|links|Hauptmann Eduard Warnberg]]
Hauptmann Eduard Warnberg (geb. 1827 in Ansbach) besuchte "4 lateinische Klassen" und trat im Jahr 1843 als freiwillig Gmeiner und Kadett ins 4. Infanterie-Regiment "Gumppenberg" ein. Im Jahr 1848 wurde er im gleichen Regiment Unterlieutenant und im Jahr 1856 Oberlieutenant. Wegen Wechselschulden wurde er zwischen 1861 und 1864 mehrmals unfreiwillig zu verschiedenen Regimentern versetzt. Zuletzt war er im 11. Infanterie-Regiment und wurde am 5. Juli 1866 zum Hauptmann 1. Klasse befördert. Er starb am 29. Juli 1866 an den Folgen eines Bauchschusses.
Das Grabmal könnte von Bildhauer Michael Arnold stammen. Es entspricht einem kolorierten Aquarellentwurf von Arnold.
===== Weichselsberger, Anton =====
[[Datei:Bad Kissingen, Kapellenstraße, Friedhof, Soldatengräber-007.jpg|mini|Lieutenant Weichselsberger]]
Der Bayer Anton Weichelsberger war laut Grabinschrift "Lieutenant im k. b. 11. Infant. Regiment". Die Grabinschrift fiel starker Verwitterung zum Opfer.
===== August von Zwehl =====
Der preußische Hauptmann August von Zwehl (geb. 1830 in Lügta/Westfalen) war zunächst Unteroffizier im 19. Infanterie-Regiment, wurde im Jahr 1850 Port d'Epée Fähnrich im Jahr 1852 Seconde Lieutenant, 1866 Hauptmann und Compagnie-Chef im 7. königlich preußischen 2ten Posenschen Infanterie-Regiment No. 19. Er wurde beim Kampf um die Höhen bei Winkels (Schlegelberg) verwundet und starb zwei Tage später. An ihn und andere Gefallene erinnert auch das von Bildhauer Michael Arnold geschaffenes Denkmal auf der Passhöhe nach Nüdlingen.
==== Historische Persönlichkeiten ====
In diesem Kapitel des Wikibooks sind die Grabstätten von Persönlichkeiten beschrieben, die sich vor allem in der Ortsgeschichte Bad Kissingens hervorgetan haben. Das Wort "Historisch" in dieser Wukibook-Überschrift ist daher in den meisten Fällen als "lokalhistorisch" zu verstehen.
===== Augsburger Diakonissen =====
Das Schwestengrab der Augsburger Diakonissen befindet sich an der Südmauer des Kapellenfriedhofs.
Nachdem Theodor Fliedner im Jahr 1836 das erste Diakonissen-Haus in Kaiserswerth gegründet hatte, entstand die erste evangelisch-lutherische Gemeinschaft der Diakonissen im Jahr 1855. Die Haupttätigkeiten der Diakonissen bestehen aus Krankenpflege, Erziehungs-, Sozial- und Altenarbeit, evangelischer Erwachsenenbildung und ökumenischer Diakonie in Tansania. In Kissingen waren Diakonissen ab dem Jahr 1865 als Kurschwestern tätig. Ab dem Jahr 1887 betrieben sie eine evangelische Kinderheilanstalt und danach bis 2000 in der Salinenstraße 32 ein Reha-Zentrum für Kinder und Jugendliche und ab 1910 das Altenheim Katharinenstift. Im Jahr 1957 wurde die Diakonissenanstalt aufgelöst.
Katharina Krebs (geb. 1829 in Poppenlauer) legte mit ihrem Vermächtnis den Grundstein für die Gründung des Katharinenstiftes in Bad Kissingen. Sie starb im Jahr 1903.
Anni Henle (geb. 1897 in Augsburg) trat im Jahr 1920 ins Mutterhaus ein. Ab 1941 leitete sie das Katharinenstift. Anni Henle starb im Jahr 1945.
Anna Heinle (geb. 1892 in Nördlingen) trat im Jahr 1913 ins Mutterhaus ein. Ab dem Jahr 1929 war sie in der Kinderheilanstalt tätig. Anna Heinle starb im Jahr 1953.
===== Dr. Franz von Balling =====
[[Datei:Anton-von-Balling-Grabmal.JPG|mini|Familiengrab Balling]]
[[Datei:Franz-Anton-von-Balling.JPG|left|mini|150px|Balling-Büste am Ballinghain, von Valentin Weidner]]
[[Datei:Bad Kissingen, Martin-Luther-Straße 3 , 001.jpg|mini|275px|Ballinghaus]]
Das Grab von Badearzt Franz Anton von Balling (geb. 1800 in Sulzfeld) befindet sich an der Südmauer des Kapellenfriedhofs. Die Grabanlage wurde von Valentin Weidner im Renaissancestil gestaltet und mit den Büsten von Dr. Balling (zwischenzeitlich gestohlen) und dessen Frau Anna ausgestattet. Am 12. Juli 1881 beschrieb die lokale "Saale-Zeitung" die Familiengruft als "weitere hervorragende Zierde"<ref>Saale-Zeitung, 12. Juli 1881</ref> für den Friedhof. Die Grabanlage wurde Anfang der 1990er Jahre von der Stadt Bad Kissingen renoviert.
Als Kind lebte Balling in Bad Neustadt/Saale. Ab 1814 besuchte er das Gymnasium in Münnerstadt. Ab 1819 studierte er Medizin in Würzburg und wurde 1824 promoviert. Ab 1826 war er Assistenzarzt am Juliusspital in Würzburg. Er erhielt ein Stipendium zum Weiterstudium in Berlin, Wien und Paris. Für kurze Zeit war er an der Universität Landshut tätig, musste sie aber, vermutlich wegen seiner liberalen Ansichten, wieder verlassen. 1833 war er in Ludwigsbad/Wipfeld tätig und ließ sich 1834 in Kissingen nieder. Im Jahr 1836 heiratete er die Kissinger Kaufmannstochter Anna Maria Schoeller. Balling war literarisch auf dem Gebiet der Balneologie tätig und veröffentlichte u. a. "Kissingens Bäder und Heilquellen. Ein Taschenbuch für Kurgäste und Ärzte" (1838). Um 1840 ließ er das heute noch existierende Ballinghaus in der Martin-Luther-Straße 3 errichten. Architekt des Anwesens im klassizistischen Stil war Johann Gottfried Gutensohn. Balling gründete das Actienbad (das heutige Luitboldbad). Durch sein großes Interesse an Landwirtschaft und Gartenbau verwandelte er seinen Besitz in eine landwirtschaftliche Musteranlage, woraus im Jahr 1890 der Ballinghain (zwischen Bahnhof und dem heutigen Stadtteil Reiterswiesen an der heutigen Umgehungsstraße) hervorging. Durch den Bau der Umgehungsstraße und des Elisabeth-Krankenhauses ist die ursprüngliche Konzeption des Ballinghains nicht mehr erhalten. Im Jahr 1865 wurde Balling zum Ehrenbürger von Kissingen ernannt und wurde 1874 in den persönlichen Adelsstand erhoben. Zudem war er Mitglied des Magistrats. Franz Anton Balling starb 1876 in Kissingen.
===== Gustav Graf von Blome =====
Das Grab des österreichischen Diplomats und Politikers Gustav Graf von Blome (geb. 1829 in Hannover) befindet sich im Zentrum des Kapellenfriedhofs nahe der Mariensäule. Nach dem Besuch der Ritterakademie in Lüneburg, dem Studium der Rechtswissenschaften in Bonn und der Teilnahme am dänischen Krieg 1848/49 trat er in den österreichischen diplomatischen Dienst ein. In diesem Zusammenhang war er in St. Petersburg, Paris, im Wiener Außenministerium und als Gesandter in Hamburg und in München als bevollmächtigter Minister am königlich bayerischen Hof tätig. Ferner war Blome
* Fideikommissherr auf Montpreis (Steiermark),
* Königlich Kaiserlicher Kämmerer,
* Geheimrat und außerordentlicher Gesandter und bevollmächtigter Minister zur Diposition,
* Mitglied des Herrenrates des österreichischen Reichsrates auf Lebenszeit.
Blome trat für sozialpolitische Reformen, die berufsständische Organisation der Wirtschaft, eine Arbeiterunfallversicherung, die Sonntagsruhe und ein Verbot der Nachtarbeit für Frauen ein. Gustav Graf von Blome starb im Jahr 1906.
===== Familie Boxberger =====
[[Datei:Bad Kissingen, Untere Marktstraße 12 , 001.jpg|mini|links|250px|Das ''Haus Boxberger'']]
[[Datei:Boxberger-Neumann-Kissingen.JPG|mini|200px|Das ''Boxberger-Neumann-Denkmal'']]
Das Familiengrab der Apothekerfamilie Boxberger befindet sich an der Nordmauer des Kapellenfriedhofs.
Georg Anton Boxberger wurde 1679 in Hammelburg geboren. Im Jahr 1711 gründete er die erste Apotheke in Kissingen (die heutige Boxberger-Apotheke). Boxberger war auch als Bürgermeister tätig. Im Jahr 1737 entdeckten er und der Baumeister Balthasar Neumann, dcr uns bereits bei der Restaurierung der Marienkapelle begegnet ist, bei der Verlegung der Saale die Rákoczy-Quelle, deren großen Wert Boxberger beschrieb. Boxberger starb im Jahr 1765 in Kissingen. Zu Ehren der beiden Quellenentdecker wurde im Jahr 1937 im Bad Kissinger Rosengarten das Boxberger-Neumann-Denkmal aufgestellt.
Der Arzt Dr. Karl August Boxberger wurde im Jahr 1808 geboren. Er ließ das heutige ''Haus Boxberger'' errichten, in dem sich heute die heutige Boxberger-Apotheke befindet. Er war auch der Verfasser einer "Geschichte Kissingens und seiner Umgebung". Dr. Karl August Boxberger starb im Jahr 1880 in Würzburg.
Der Apotheker Franz Seraph Boxberger wurde im Jahr 1842 geboren. Im Jahr 1871 übernahm er die Apotheke. Im Jahr 1874 wurde er zum Königlichen Hofapotheker ernannt. Er war auch als Magistratsrat tätig. Die von ihm hergestellten Quellenprodukte und Salze trugen zum guten Ruf Kissingens als Bad bei. Franz Seraph Boxberger starb im Jahr 1914.
===== Max Graf von Coudenhouve =====
Das Grab von Max Graf von Coudenhouve (gwb. 1655 in Wien), Hofrat beim Verwaltungsgerichtshof in Wien, Kaiserlicher und Königlicher wirklicher Geheimer Rat und Kämmerer, befindet sich nahe des von Valentin Weidner geschaffenenen Friedhofkreuzes von 1890. Das österreichische Familiengeschlecht Coudenhove stammt aus Brabant. Es wurde 1240 erstmals erwähnt und 1790 in den Reichsgrafenstand erhoben. Im Jahr 1888 wurde Max Graf von Coudenhouve für im österreichischen Staatsdienst aktiv. Im Jahr 1908 wurde er Landespräsident von Österreich-Schlesien und war während des Ersten Weltkriegs Statthalter in Böhmen. Zu den hohen Auszeichnungen, die er erhielt, gehört das Großkreuz des Franz-Joseph-Ordens. Nach dem Ende der österreichischen Monarchie zog er sich ins Privatleben zurück und bewirtschaftetete seinen Familienbesitz Seehof, den seine Vorfahren nach dem Aussterben derer von Erthal geerbt hatten. Max Graf von Coudenhouve starb im Jahr 1928.
===== Prof Dr. Carl von Dapper-Saalfels =====
[[Datei:Carl-von-Dapper-Grabmal.JPG|mini|Prof Dr. Carl von Dapper-Saalfels]]
[[Datei:Residenz-Dapper-Kissingen.JPG|mini|left|"Sanatorium von Dapper" (Menzelstraße)]]
Das Grab von Prof Dr. Carl von Dapper-Saalfels, Nervenarzt, Königlich Preußischer Professor, Königlich Bayerischer Hofrat, Oldenburgisch Geheimer Medizinalrat (geb. 1863 in Kerpen/Köln) befindet sich im Inneren des Kapellenfriedhofs unterhalb der Mariensäule. Dapper eröffnete im Jahr 1894 in der heutigen Menzelstraße ein Sanatorium, das schnell Weltruhm erlangte, von zahlreichen hochgestellten Persönlichkeiten aus aller Welt besucht wurde und im Jahr 1899 um drei weitere Häuser erweitert werden musste. Prof Dr. Carl von Dapper-Saalfels verfasste zahlreiche wissenschaftliche Arbeiten, z. B. "Untersuchung über die Wirkung des Kissinger Mineralwassers auf den Stoffwechsel des Menschen" (1895), "Über den Einfluss der Kochsalzquellen auf den Stoffwwechsel [...]" (1896). Im Jahr 1913 wrde er geadelt. Prof Dr. Carl von Dapper-Saalfels starb im Jahr 1937.
===== Dr. Wendelin Dietz =====
[[Datei:Bad Kissingen, Schloßstraße 6 – 20130528-010.JPG|mini|300px|''Sanatorium Dr. Dietz'' in der Schloßstraße 6]]
Das Grab von Dr. Wendelin Dietz (geb. 1847 in Heufurt), Brunnenarzt, Königlich Bayerischer Hofrat, Oberstabsarzt der Königlich Bayerischen Landwehr, befindet sich an der Nordmauer des Kapellenfriedhofs. Dr. Wendelin Dietz arbeitete zunächst in der Rhön. Dort wurde er für seinen Einsatz gegen eine Typhusepidemie im thüringischen Frankenheim ausgezeichnet. In Bad Kissingen errichtete er im Jahr 1888 in der Prinzregentenstraße 18 eine pneumatische und elektrische Anstalt (Neubau 1901), die von seinen Söhnen A. und B. Dietz zu einem modernen Inhalatorium ausgebaut wurde. Im Jahr 1900 errichtete er in der Schlossstraße 6 ein Sanatorium. Dr. Wendelin Dietz war Geheimer Sanitätsrat und Führer der freiwilligen Sanitätskolonne. Im Jahr 1891 initiierte er den Bau des König-Ludwig.-I.-Denkmals im Kurgarten und im Jahr 1907 den Bau des Wittelsbacher Jubiläumturms auf dem Scheinberg. Dr. Dietz verfasste "Bad Kissingen als Terrainkurort" (1886), "Die Bienenschlacht" (Verarbeitung der Peter-Heil-Sage), "Sonskonea" (der Kampf zwischen Chatten und Hermunduren). Dr. Wendelin Dietz starb im Jahr 1908.
===== Dr. Oskar von Diruf =====
[[Datei:Gustav-Diruf-Grabmal.JPG|mini|Familiengrab Diruf]]
Das Familiengrab von Brunnenarzt Dr. Oskar von Diruf (geb. 1824 in Würzburg) befindet sich an der Nordmauer des Kapellenfriedhofs. Die beherrschende Figur des Familiengrabs stellt den kgl. Hofrat Dr. Gustav Diruf dar, der im Alter von etwa 45 Jahren verstarb. Die Äskulapschlange an der Säule neben der Figur symbolisiert den Arztberuf. Die Grabtafel für die im Kindesalter verstorbene Olga Diruf (1870-1875) ist als offene Buchseite gestaltet; die Initiale "O" dient als Rahmen für ein Porträt Olgas. Die Grabanlage wurde von Bildhauer Michael Arnold geschaffen, was durch seine ligierte Signatur "MA", ein Foto in Arnolds Album seiner Werke und durch Überlieferung in der Familie Diruf belegt ist.
Im Jahr 1874 wohnte Reichskanzler Otto von Bismarck im Kurhaus der Dres. Diruf, als der Böttchergeselle Kullmann das Attentat auf Bismarck verübte. Dr. Oskar von Diruf versorgte als Bismarcks Kurarzt dessen Schusswunde nach dem Attentat. Dr. Oskar von Diruf regte seinen Studienfreund, den Schriftsteller Victor von Scheffel, zum Gebrauch der Kissinger Heilquellen an. Dr. Oskar von Diruf war Königlich Bayerischer Brunnenarzt, Geheimer Hofrat, Ehrenbürger von Bad Kissingen, Mitglied vieler Vereine und Inhaber hoher Orden. Er verfasste Badeliteratur wie "Kissingen und seine Heilquellen" (1871) wie auch einen Augenzeugenbericht über das Gefecht von 1866. Oskar von Diruf stiftete unter anderem den Bauplatz zur Errichtung der Evangelischen Kinderheilstätte in der Salinenstraße, war dort kostenlos als Arzt aktiv wie auch an der israelitischen Kinderheilstätte. Dr. Oskar von Diruf starb im Jahr 1912.
===== Elisabethinerinnen =====
Das Schwesterngrab der Elisabethinerinnen befindet sich hinter der Marienkapelle. Der Orden der Elisabethinerinnen, der sich vor allem der Alten- und Krankenpflege widmet, wurde im Jahr 1626 in Aachen gegründet. Es entstanden Niederlassungen in Europa und Kanada. Im Jahr 1736 erfolgte die Neugründung in Breslau. Nachdem die Schwestern 1945 aus Schlesien ausgewiesen wurden, begannen sie im Jahr 1947 in Bad Kissingen zu wirken. In der Salinenstraße 6 erwarben sie ein Kurheim, das heute noch als Alten- und Pflegeheim besteht. Es folgte im Jahr 1949 der Ankauf und Umbau des Hotels "Englischer Hof" zu einem Krankenhaus. Am Ballinghain erfolgte im Jahr 1966 an der Adresse Kissinger Straße 152 der Bau des St.-Elisabeth-Krankenhauses mit Mutterhaus und Kapelle.
===== Dr. F. D. Erhard (Grab Almstedt) =====
[[Datei:Erhard, Friedrich Daniel.jpg|mini|Dr. F. D. Erhard]]
Der Gerichtsarzt Dr. F. D. Erhard (geb. 1800 in Nördlingen) ist im Grab Almstedt hinter der Marienkapelle bestattet. Nach seinem Studium in Würzburg und München-Landshut erfolgte im Jahr 1822 die Promotion, im Jahr 1826 die Große Staatsprüfung. Im Jahr 1827 wurde Dr. Erhard Gerichts- und Leibarzt in Amorbach am Hof des Fürsten von Leiningen, im Jahr 1851 Honorarprofessor für Arzneimittelkunde in Würzburg, ab dem Jahr 1853 Brunnen- und Gerichtsarzt in Kissingen, im Jahr 1857 Königlicher Hofrat, im Jahr 1862 Bezirksarzt 1. Classe. Im Jahr 1878 verlieh ihm die Stadt Kissingen die Ehrenbürgerwürde. Auf Anweisung von König Maximilian II. von Bayern verfasste er Physikatsberichte, die die Lebensumstände der Bewohner um 1860 schilderten, sowie zwei Badeschriften. In der Schlacht von 1866 versorgte er als Sanitätsarzt bayerische und preußische Verwundete. Auf ihn gehen Stiftungen für Schule, Studierende und Wohltätigkeit zurück. Dr. F. D. Erhard starb im Jahr 1879.
===== Erlöserschwestern (Barmherzige Schwestern) =====
Das Grab der Erlöserschwestern befindet sich hinter der Marienkapelle. Der Orden der Erlöserschwestern mit seinen Schwerpunktätigkeiten in der Kranken- und Altenpflege, in der Bildungs- und Erziehungsarbeit und in der Lebensbegleitung wurde im Jahr 1849 von Elisabeth (Maria Alphonse) Eppinger in Niederborn/Elsass gegründet. Im Jahr 1866 entstand die Diözesankongregation Würzburg (Mutterhaus). In Kissingen waren die Erlöserschwestern ab 1855 in Spital, ambulanter Krankenpflege und Kinderbewahranstalt (später: Kliegl-Kindergarten und Hort) tätig. Weitere Tätigkeiten in Kissingen waren:
* das Hemmerich-Spital (1889-1961)
* das Städische Armenhaus (1892-1930)
* Filialen für ambulante Krankenpflege
* Kindergarten
* Handarbeitslehre in Garitz (1899) und Reiterswiesen
* Klinik Dr. Bomhard (1919-1950)
* Kindererholungsheim der Stadt Schweinfurt "Villa Klara" (1926-...)
* Versorgungskuranstalt (1929-1945)
* Frauenklinik Dr. Grieninger (1933-1938)
* Heereskurlazerett (1936-1945)
* Bergmannsheim (...-1941)
* Klinik Dr. Katzenberger (1935-1954)
* Ostendhaus (...-1964)
* Kur- und Erholungsheim Maria Amalie (1954)
* Schwesternerholungsheim St. Michael (1954)
* Noviziat (1947-1954)
===== Karl Gayde =====
Das Grab von Malermeister Karl Gayde (geb. 1644 in Heilbronn) befindet sich nahe der Mariensäule. Das Grab wurde im Jahr 1900 von Bildhauer Valentin Weidner geschaffen (signiert mit "VW" in Ligatur, Eb 1900). Das aus Muschelkalk bestehende Grab ist eher niedrig gehalten und mit zwei Ecklaternen versehen. Es wird von einer an ägyptische Vorbilder erinnernden Stele mit schwarzen Marmortafeln überragt.
Gayde war ab dem Jahr 1872 Generalbevollmächtigter, ab dem Jahr 1883 Vorstand des Gemeindekollegiums und bis zum Jahr 1908 Magistratsrat. Im Jahr 1819 wurde er Ehrenbürger von Bad Kissingen. Gayde war als evangelischer Gemeindevorstand aktiv und förderte das evangelische Katharinenstift finanziell. Er war Ehrenmitglied der Freiwilligen Feuerwehr und dort in Führerstellung aktiv. Er gründete einen Verein mit dem Ziel der Förderung der sechsklasssigen Realschule, die sich später zum Gymnasium entwickelte. Sein Wohnhaus "Villa Gayde" (das heutige "Kurheim Ross" in der Von-der-Tann-Straße) wurde im Jahr 1885 mit den Häusern Ina und Amrhein erweitert. In künstlerischer Hinsicht sind die Wanddekorationen im Treppenaufgang seines Hauses mit typischen Kastanienranken, Wandmalereien in der Weinstube Schubert (1893) sowie ein bemalter Bücherschrank der Alpenvereinssektion Bad Kissingen bekannt. Die großflächigen Malereien in der Villa Aegir (heute: "Forum Frankenland") sowie seine Ausmalung der evangelischen Kirche von 1891 sind nicht mehr erhalten. Erhalten hat sich dagegen eine von ihm entworfene und weit verbreitete Feldpostkarte für den Bad Kissinger Landsturm aus dem Jahr 1914. Karl Gayde starb im Jahr 1928.
===== August Gleissner =====
Das Grab des Architekten und Baumeisters August Gleissner (geb. 1860 in Hammelburg) befindet sich an der Nordmauer des Kapellenfriedhofs bei der Marienkapelle. August Gleissner errichtete in Bad Kissingen viele Wohnhäuser wie zum Beispiel die an den Jugendstil angelehnten Wohnhäuser in der Hartmannstraße 24 im Jahr 1901, in der Prinzregentenstraße 19 im Jahr 1906 (Villa Karneol) und in der Erhardstraße 26 im Jahr 1909 (Villa Sepia). Gleissner war Vorstand des Gemeindekollegiums, Vorsitzender des Kurvereins, Vorstand der Liedertafel, Zugführer der Freiwilligen Feuerwehr, ab 1914 Vorstand der Ortskrankenkasse und Ehrenmeister der Unterfränkischen Handwerkskammer. August Gleissner starb im Jahr 1927.
===== Dr. Josef Gleissner =====
Das Grab des Badearztes und Sanitätsrates Dr. Josef Gleissner befindet sich an der Südmauer des Kapellenfriedhofs nahe der Marienkapelle. Dr. Josef Gleissner, der aus der Kissinger Baumeisterfamilie Gleißner stammte, machte sein Abitur am Gymnasium in Münnerstadt und studierte Medizin in Würzburg. Im Jahr 1899 ließ er sich als praktischer Arzt in Bad Kissingen nieder und übernahm das im Jahr 1988 abgerissene Palast-Hotel Sanner am Standort der heutigen Rhön-Reha-Klinik in der Kurhausstraße, das bis 1954 eines der bedeutendsten Sanatorien in Bad Kissingen war. Dr. Josef Gleissner liebte die Musik Richard Wagners und war mit dessen Enkeln Wieland und Wolfgang sowie deren Mutter Winifried sehr gut befreundet. In seiner Funktion als Delegierter des Corps der Mainländer (Moenania) nahm er am 80. Geburstag von Reichskanzler Otto von Bismarck in dessen Landsitz Friedrichsruh teil. Dr. Josef Gleissner starb im Jahr 1938.
===== Dr. Sebastian Goldwitz =====
Das Epitaph von Dr. Sebastian Goldwitz (geb. 1752 in Bamberg), Doktor der Philosophie und Arzneiwissenschaften, Stadt- und Distrikts-Physikus befindet sich an der Außenwand der Marienkapelle. Goldwitz war ab 1786 als Physikus tätig. Er wurde vom Staat als Amtsarzt bestellt und damit für die medizinische Versorgung und Überwachung zuständig. In seiner Schrift "Die Mineralquellen zu Kissingen und Bocklet im fränkischen Hochstift Würzburg" von 1795 beschrieb er das Kissinger Kaskadental. Goldwitz empfahl viel Bewegung, die Bade- und Trinkkur. Goldwitz starb 1824.
===== Friedrich Wilhelm Grell =====
Die Grabanlage des Lehrers und Komponisten Friedrich Wilhelm Grell (geb. 1866 in Kleinlangheim) befindet sich in der nordöstlichen Ecke des Kapellenfriedhofs. Nach seiner Lehrtätigkeit in Geroda zog Grell im Jahr 1908 nach Bad Kissingen. Grell galt als Kissinger Original, das liebevoll "Papa Grell" und von den Kindern "Brotrinde" genannt wurde. Er trug immer eine frackähnliche Jacke mit Chemisette (gestärkter Hemdbrust), Manschetten, Gamaschen und an Festtagen eine rote Nelke. Grell verdiente seinen Lebensunterhalt durch Musikunterricht, sein Musikhaus "Germania", Klavierspielen in Lokalen und im Apollo-Theater zu Stummfilmen. Grell schrieb Hymnen und Huldigungsmärche unter anderem für König Ludwig II., Ferdinand Graf von Zeppelin und Generalfeldmarschall Paul von Hindenburg, die sogar vom Musikkorps des persischen Schahs gespielt wurden. Grell starb im Jahr 1941.
===== Otto von Gustedt-Deersheim =====
Das Familiengrab der Familie Gustedt-Deersheim v. befindet sich im Zentrum des Kapellenfriedhofs bei der Mariensäule. Der Rittmeister und Flügeladjutant des preußischen Kronprinzen Otto Freiherr von Gustedt-Deersheim wurde im Jahr 1839 in Garden geboren. Seine Mutter war Jenny von Pappenheim, verh. v. Gustedt (1811-1890) und eine uneheliche Tochter des Königs von Westfalen Jerôme Bonaparte und damit Nichte von Napoleon Bonaparte. Sie lebte viele Jahre in Weimar in engem Kontakt mit Johann Wolfgang von Goethe und war eine enge Freundin der späteren deutschen Kaiserin Augusta (1811-1890).
Otto Freiherr von Gustedt-Deersheim erhielt das Eiserne Kreuz für besondere Leistungen bei der Schlacht von Wörth im Deutsch-Französischen Krieg von 1870/71. In diesen Krieg zog er mit dem Säbel seines Großonkels Napoleon. Otto Freiherr von Gustedt-Deersheim starb im Jahr 1905 in Neuhausen.
===== Werner von Gustedt-Deersheim =====
Der Privatier und Landwirt Werner Freiherr von Gustedt-Deersheim war der Sohn von Otto Freiherr von Gustedt-Deersheim und wurde im Jahr 1864 in Offenburg geboren. Er starb im Jahr 1945.
===== Auguste Viktoria von Gustedt-Deersheim =====
Otto Freiherr von Gustedt-Deersheims Tochter Auguste Victoria Freiin von Gustedt-Deersheim wurde möglicherweise im Jahr 1870 geboren. Sie war das Patenkind der deutschen Kaiserin Augusta. Auguste Victoria Freiin von Gustedt-Deersheim starb im Jahr 1914.
===== Philipp Hailmann =====
[[Datei:Hailmann-Grabmal.JPG|mini|Grab Philipp Hailmann]]
Das Grab von Philipp Hailmann befindet sich an der Südseite des Kapellenfriedhofs. Das Grabmal besteht aus weißem und schwarzem Marmor, wurde 1903 von Valentin Weidner geschaffen und ist von diesem signiert. In der Mittelnische des Grabmals befindet sich eine fast lebensgroße, trauernde Frauengestalt in antiker Manier.
Der Buch- und Kunsthändler Philipp Hailmann wurde im Jahre 1832 geboren. Nach dem Besuch der Lateinschule von 1844 bis 1849 und der I. Gymnasialklasse in Würzburg erlernte er von 1855 bis 1858 seinen Beruf in Leipzig, Stuttgart, Paris und Brüssel, legte im Jahr 1859 die Prinzipalprüfung ab und übernahm in Kissingen die Jügel'sche Buchhandlung. In Kissingen gehörte Hailmann zu den reichsten Bürgern und Großgrundbesitzern, war Herzoglich Sächsisch Altenburgischer Kommerzienrat und war von 1869 bis 1875 sowie 1881 bis 1884 Mitglied des Gemeindekollegiums, von 1875 bis 1881 sowie von 1890 bis 1896 Magistratsrat. Ferner war er Distriktsrat, Vertreter der Großgrundbesitzer im unterfränkischen Landrat, Mitbegründer des Actienbad-Etablissements, Mitbegründer des Jagdclubs und Vorstand der Schützengesellschaft.
[[Datei:Bad Kissingen, Am Kurgarten 6-20160227-002.jpg|left|mini|„Haus Collard“, Am Kurgarten 6]]
Im Jahr 1877 erbte er von seiner Tante Anna Hemmerich, geb. Hailmann, das Hotel mit Poststation Hemmerich in der Kurhausstraße 14 (die heutige Hypo-Vereinsbank). Die Familie hatte einen umfangreichen Besitz, zu dem auch das Grand-Hotel gehörte (das heutige Haus Collard, Adresse: Am Kurgarten 6), in dem im Jahr 1857 der italienische Komponist Giacomo Rossini zur Kur weilte. Im Jahr 1857 beauftragte Hailmann den Bildhauer Michael Arnold, vor dem „Haus Collard“ die Skulpturengruppe ''Hygieia'' zu errichten, weil er eine verkehrsberuhigte Zone schaffen wollte. Heute befindet sich die ''Hygieia'' in der Lindesmühlpromenade im ''Luitpoldpark''.
[[Datei:Kurhausstraße 26 Villa (Bad Kissingen).JPG|mini|300px|„Villa Hailmann“, Kurhausstraße 26]]
Von 1901 bis 1903 entstand in seinem Auftrag die „Villa Hailmann“ (heutige Adresse: Kurhausstraße 26) in Formen der Neurenaissance unter dem österreichischen Architekt Antony Krafft. Hailmann erlebte die Fertigstellung der Villa nicht mehr. Sie verfiel zunächst nach dem Tod von Hailmanns Witwe. Dies fand ein Ende, nachdem die Villa im Jahr 1941 staatliches Eigentum geworden war. Ab dem Jahr 1997 war in dem Anwesen das Staatliche Hochbauamt untergebracht; aktuell befindet sich hier das Wasserwirtschaftsamt.
Philipp Hailmann starb im Jahr 1903. In seinem Nachruf hieß es, er machte von seinem Reichtum „noblen Gebrauch, indem er den Bedrängten beisprang“.
===== Karl Halder =====
Das Grab des Musiklehrers, Tonkünstlers und Kurhausbesitzers Karl Halder (geb. 1877 in Kempten) befindet sich im Zentrum des Kapellenfriedhofs nahe der Südmauer. Halder war Kammermusiker, komponierte Messen, dirigierte viele Jahre lang den Liederkranz und war Mitglied im Alpnverein. Karl Halder starb im Jahr 1912.
===== Eduard Hemmerich =====
Das Grab des Hoteliers und Posthalters Eduard Hemmerich (geb. 1797 in Würzburg) befindet sich an der Südmauer des Kapellenfriedhofes auf Höhe des Leichenhauses. Eduard Hemmerich war Eigentümer des um 1835 erbauten Hotels Hemmerich mit angebauter Poststation für Sachen und Personen in der Martin-Luther-Straße 9 (heute: Hypo-Vereinsbank), das von seiner Frau Anna, geb. Hailmann, bis zu ihrem Tod im Jahr 1877 geführt wurde. Um 1900 wurde es Teil des heutigen ''Kaiserhofs Victoria''. Im Jahr 1841 schrieb Eduard Hemmerich sein Testament und vermachte die Hälfte seines Vermögen dem Hohmann-Hemmerichschen Bürgerspital, das armen, notdürftigen bresthaften katholische Bewohnern der Stadt mit makellosem Vorleben Obdach, Nahrung und Kleidung gewährte (Neubau im Jahr 1879 in der Hemmerichstraße 3). Eduard Hemmerich starb im Jahr 1853.
===== Johanna Hesse =====
[[Datei:Johanna-Hesse.jpg|mini|150px|Johanna Hesse<br /><small>(Quelle: Deutsches Theatermuseum, München)</small>]]
Das Grab der Opern- und Konzertsängerin Johanna Hesse (eigtl. Rosl Zapf, geb. 1880 in Berlin) befindet sich an der Südmauer des Kapellenfriedhofs nahe der Marienkapelle. Johanna Hesse absolvierte ihre Gesangsausbildung in Berlin und war zunächst als Konzertsängerin tätig. Im Jahr 1919 wurde sie als Sopranistin am Landestheater Darmstadt engagiert, an dem sie bis zum Jahr 1922 sang und in der Uraufführung von Emil Nikolaus von Rezničeks Oper ''Ritter Blaubart'' von 1920 den Part der Judith sang. Danach folgten Gastspiele an den Staatsopern in Dresden, München und Leipzig. Sie hatte große Erfolge in Wagner-Partien (z. B. Senta im ''Fliegenden Holländer'', Venus im ''Tannhäuser'', Brunhilde im ''Ring des Nibelungen''). In den Jahren 1923/24 absolvierte sie Gastspiele an der Wiener Staatsoper wie auch an den Opernhäusern von Köln und Frankfurt. Ab 1925 sang sie zahlreiche Wagner-Konzerte. Bis zum Jahr 1933 war sie Mitglied des Ensembles des Theaters von Bonn, musste dann aber als Jüdin auf Grund der Machtübernahme der Nationalsozialisten ihre aktive Karriere als Sängerin vorzeitig beenden. Johanna Hesse starb im Jahr 1958.
===== Balthasar Heußlein von Eußenheim =====
Das Epitaph von Caspar Heußlein von Eußenheim (geb. 1525, vermutlich im Schloss Eußenheim) befindet sich im Chor der Marienkapelle. Balthasar Heußlein von Eußenheim war der erste seines Geschlechts, der sich in Kissingen niederließ. Ihm gehörten ein ritterlicher Besitz in Kissingen, ein Burggut in Münnerstadt und ein Gut in Fatschenbrunn bei Eltmann. Balthasar Heußlein von Eußenheim reiste 1562 mit dem Würzburger Fürstbischof Friedrich von Wisberg zur Krönung Kaiser Maximilians nach Frankfurt. Das auf Balthasar Heußlein von Eußenheims Epitaph dargestellte Kind ist Heußleins Sohn Georg Christoph (gest. 1591). Balthasar Heußlein von Eußenheim starb 1593.
===== Carl Leo Heußlein von Eußenheim und Christian Freiherr Lochner von Hüttenbach genannt Heußlein von Eußenheim =====
[[Datei:Kissingen neues Rathaus 0417RM0528.jpg|mini|links|Das "Neue Rathaus".]]
[[Datei:Heusslein-Eussenheim.JPG|mini|Familiengrab der Adelsfamilie Heußlein von Eußenheim]]
Das Familiengrab der Adelsfamilie Heußlein von Eußenheim befindet sich an der Nordmauer des Kapellenfriedhofs. Der Familie Heußlein von Eußenheim gehörte ein Schloss in der heutigen Innenstadt des Ortes, das heutige "Neue Rathaus". Am Standort des heutigen "Neuen Rathauses" hatte sich im Jahr 1590 Johann Christoph von Schletten ein Wohnhaus (Kemenate) errichten lassen. Die Kemenate wurde im Jahr 1709 von der Familie Heußein von Eußheim aufgekauft. An ihrer Stelle entstand nach den Plänen von Architekt Johann Dientzenhofer ein Schloss, das heutige "Neue Rathaus". Es wurde im Jahr 1928 an die Stadt Bad Kissingen verkauft. Seitdem die Bad Kissiger Stadtverwaltung von 1816 bis 1865 nicht im heutigen ''Alten Rathaus'' in der Bad Kissinger Fußgängrzone untergebracht war, zog sie im Jahr 1929 ebdgplzih in das ''Neue Rathaus'' um.
Carl Leo Heußlein von Eußenheim (geb. 1838 in Kissingen) trat mit 18 Jahren als Kadett in das 13. Infanterie-Regiment, später in das 5. Cheveauleger-Regiment ein, bis in eine Lungenerkrankung zwang, den Militärdienst zu unterbrechen. Carl Leo Heußlein von Eußenheim lebte 1861, lebte danach in Ceylon und danach in Würzburg. Im Jahr 1864 befreite er auf einer Reise nach Mexiko einen päpstlichen Nuntius aus der Gefangenschaft einer Räuberbande, wofür ih Papst Leo IX. mit einem Orden und einrm wertvollen Rosenkranz auszeichnete. Im Jahr 1865 trat er in das 9. Infanterie-Regiment Wrede in Würzburg ein, wurde Oberleutnant im 6. Cheveauleger-Regiment und zog 1870/71 in den Deutsch-Französischen Krieg. Bei einem Kurierritt durch die Feuerlinien tat er sich besonders hervor, trug zum Sieg bei Sedan bei und wurde mit dem Ritterkreuz ausgezeichnet. Nach den Anstrengungen starb er kurz darauf im Jahr 1870 in Messincort. Mit ihm starb sein Geschlecht aus.
Christian Freiherr Lochner von Hüttenbach genannt Heußlein von Eußenheim war mit Adelheid verheiratet, der Schwester von Carl Leo Heußlein von Eußenheim. Um ein Erlöschen des Namens zu verhindern, erlaubte König Ludwig II. ihm, sich "Lochner von Hüttenbach, „genannt Heußlein von Eußenheim“ zu nennen. Christian Freiherr Lochner von Hüttenbach war Hauptmann, Königlich Bayerischer Kammerherr und Kommandant der 3. Sanitätskompanie. Er nahm am "Deutschen Krieg" von 1866 und am "Deutsch-Französischen Krieg" von 1870/71 teil. Er quttierte den Militärdienst, zog mit seiner Familie nach Kissingen und verwaltete den Besitz seiner Frau. Christian Freiherr Lochner von Hüttenbach schrieb Kritiken für Theaterstücke, die im Kissinger Kurtheater aufgeführt wurden, sowie heimatkundliche Beiträge für die lokale "Saale-Zeitung". Christian Freiherr Lochner von Hüttenbach war gut mit Reichskanzler Otto von Bismarck befreundet; beide besuchten sich gegenseitig auf Christian Freiherr Lochner von Hüttenbachs Schloss beziehungsweise Bismarcks Friedrichsruh. Zu seinem Besitz gehörte auch das Neue Schloss in der Maxstraße 18 und das Jägerhaus im heutigen Stadtteil Winkels. Christian Freiherr Lochner von Hüttenbach starb 1916.
Im Jahr 1870 bestellte Christoph Heußlein von Eußenheim, der Vater von Carl Leo Heußlein von Eußenheim, bei Bildhauer Michael Arnold ein Grabmal für ein Familiengrab. Ausgestattet war das Grabmal mit einer lebensgroßen Ritterfigur in Harnisch, mit dem Familienwappen der Eußenheim, drei 2:1 gestellten Rosen, auf dem Schild. Im Zweiten Weltkrieg oder kurz danach stürzte eine hinter der Nordmauer befindliche Pappel auf das Familiengrab und zerstörte die Ritterfigur sowie das daneben liegende, von Bildhauer Valentin Weidner geschaffene Grab der Grafen von Luxburg. Selbst in der Familie Lochner war unbekannt, dass das Grabmal von Bildhauer Michael Arnold geschaffen wurde, doch ist seine Urheberschaft durch zwei Fotos in dem von ihm angelegten Album seiner Werke belegt.
===== Baptist Hoffmann =====
[[Datei:Baptist-Hoffmann.jpg|miniatur|rechts|Baptist Hoffmann]]
[[Datei:Johann-Baptist-Hoffmann-Kammersänger.JPG|mini|links|Grabmal von Baptist Hoffmann.]]
Das Grab des Opernsängers Baptist Hoffmann (geb. 1837 in Garitz [heute Stadtteil von Bad Kissingen]) befindet sich an der Südmauer des Kapellenfriedhofs. Hoffmann wurde bei Julius Stockhausen in Frankfurt und an der Gesangsschule Weinlich-Tipka in Graz zum Baritonsänger ausgebildet. Nachdem seine Mutter Margarethe Hoffmann einer Gesangskarriere ihres Sohnes zunächst skeptisch gegenüber stand, wurde sie nach dem frühen Tod seines Vaters bis zu ihrem eigenen Tod im Jahr 1910 zur künstlerischen Betreuerin ihres Sohnes. Seine erste Sängertätigkeit fand 1888 in Graz statt. Danach folgten bis 1894 Engagements in Köln und anschließend bis 1897 an der Hamburger Oper, danach bis 1919 an der Hofoper in Berlin. Im Jahr 1913 wurde er Königlich Preußischer Kammersänger. Er galt als einer der ersten Opernsänger, die das lyrische wie das heroische Opernfach gleichermaßen beherrschten. Hoffmann sang Gastrollen in München, Dresden, Hamburg, London und Brüssel. Nachdem er durch die Inflation sein Vermögen verloren hatte, war er ab 1919 als Gesangslehrer tätig.
Baptist Hoffmann starb im Jahr 1937 in Bad Kissingen. Heute ist in Garitz eine Straße nach Baptist Hoffmann benannt, wo auch sein Geburtshaus steht (heute Baptist-Hoffmann-Straße 30).
===== Ernst Ihl =====
Das Grab des Apothekers Ernst Ihl (geb. 1842) befindet sich an der Nordmauer des Kapellenfriedhofs. Nach Besuch des Gymnasiums Münnerstadt und der Gewerbeschule in Würzburg machte Ernst Ihl eine Lehre bei seinem Vater Johann Baptist Ihl in Kissingen. Danach folgten eine Tätigkeit als Provisor in Baden-Baden und ein Studium an der Universität Würzburg. Danach arbeitete er in der heutigen Boxberger-Apotheke in Kissingen.
Ernst Ihl kaufte ein um 1830 erbautes Haus in der Ludwigstraße und eröffnete hier die Ludwigs-Apotheke (die zweite Apotheke in Kissingen). Er und sein Vater erstellten und lieferten die Arzneimittel und analytischen Untersuchungen für Kaiserin Elisabeth Österreich-Ungarn ("Sisi") bei deren Kuraufenthalten von 1862 bis 1865 sowie 1897 und 1898. Im Jahr 1898 wurde Ernst Ihl Königlicher und Kaiserlicher Hoflieferant. Ernst Ihl war
* von 1876 bis 1884 im Gemeindekollegium tätig (davon vier Jahre im Vorstand)
* Mitglied der Kranken-, Unterstützungs- und Sterbe-Cassa
* im Vorstand des liberalen Vereins
* im Vorstand der Arbeitsgemeinschft für ein Wasserwerk
* als ausgebildeter Bariton aktives Mitglied der Liedertafel und
* Leutnant der Landwehr.
Ernst Ihl starb im Jahr 1899.
===== Johann Baptist Ihl =====
Das Grab des Apothekers Johann Baptist Ihl (geb. 1772 in Orb) befindet sich hinter dem Chor der Marienkapelle. Nach Besuch der Lateinschule und des Gymnasiums in Aschaffenburg machte Johann Baptist Ihl eine Apothekerlehre in Orb. Es folgten Tätigkeiten als Gehilfe in Klingenberg, Miltenberg und Lohr. Dem schloß sich ein Studium in Würzburg an. Ab 1830 war er in der heutigen Boxberger-Apotheke tätig; von 1837 bis 1866 war er Pächter der Apotheke. Ihl ließ in der Theresienstraße ein Kurhaus, das heutige Kurheim Rosengarten (heutige Adresse: Balthasar-Neumann-Promenade 8) errichten. Johann Baptist Ihl starb im Jahr 1852.
===== Institut der Englischen Fräulein =====
[[Datei:97688 Bad Kissingen, Germany - panoramio (39).jpg|mini|Mariensäule]]
Das Grab der Bad Kissinger Schwestern vom Institut der Englischen Fräulein befindet sich in der Nordwest-Ecke des Kapwllenfriedhofs hinter dem Chor der Marienkapelle. Das 1609 von Maria Ward gegründete Institut der Englischen Fräulein, das zu Erziehung der weiblichen Jugend und zur Unterstützung der Seelsorgearbeit der Priester gegründet wurde, war von 1862 bis 1973 in Bad Kissingen aktiv. Sie betrieben zunächst eine Höhere Töchterschule mit Internat (das Institut St. Maria) und bis 1925 eine Volksschule. Am Standort der Internatsgebäude (heute: Hartmannstraße 2) steht heute das kaholische Gemeindehaus; das Schulhaus in der Kapellenstraße 5 existiert noch. Die Madonna auf der Säule in der Mitte des Friedhofsgeländes stammt aus dem Besitz des Instituts.
===== Dr. Georg Jaeger =====
Das Epitaph von Pfarrer Dr. Georg Joseph Jaeger (geb. 1768 in Kissingen) befindet sich an der Außenwand der Marienkapelle. Der Gedenk- und Grabstein enthält das Familienwappen sowie eine lateinische Inschrift, die Jaegers Werdegang zusammenfasst. Er studierte in Würzburg Philosophie, Theologie, Rechtswissenschaften, Geschichte und Medizin. Er verfasste über 20 Werke, zum Großteil über historische Themen, wie zum Beispiel im Jahr 1803 die Schrift "Briefe über die hohe Rhön in Franken", die sich mit geologischen, botanischen, wirtschaftlichen, sozialen und ethnologischen Aspekten beschäftigt, im Jahr 1823 die "Geschichte des Städtchens Kissingen und seiner Mineralquellen". Jaeger starb im Jahr 1824. Sein Elternhaus am Marktplatz 11 existiert noch.
===== Cyrill Kistler =====
[[Bild:Cyrill-Kistler.jpg|mini|hochkant=0.7|Cyrill Kistler]]
[[Datei:Cyrill-Kistler-Grabmal.JPG|mini|links|Grab von Cyrill Kistler]]
Das Grab des Komponisten Cyrill Kistler (geb. 1848 in Großaitingen) befindet sich im Zentrum des Kapellenfriedhofs nahe der Mariensäule. Kistlers Grabmal stammt von Valentin Weidner (signiert links "VW" in Ligatur, Eb 1907). Es besteht aus einer Stele auf Tuffsteinsockel und trägt ein Profilrelief des Komponisten.
Von 1865 bis 1867 besuchte Kistler das Lehrerseminar in Lauingen und studierte von 1876 bis 1878 Orgel und Komposition an der Königlichen Musikschule in München. Im Jahr 1883 übernahm er die Lehrerstelle für Musiktheorie am fürstlichen Konservatorium in Sondershausen. Im Jahr 1876 lernte er in Bayreuth Richard Wagner kennen, der ihn von da an nachhaltig beeinflusste. Ab 1884 war Kistler in Kissingen tätig, gründete eine eigene Musikschule und war ab 1880 Herausgeber der Zeitschrift "Musikalische Tagesfragen. Organ für Musiker, Musikfreunde und Freunde der Wahrheit". Zu seinen Kompositionen zählen Opern (z. B. "Valdurs Tod", "Die Kleinstädter", "Kunihild", "Der Schmied von Kochel"), weltliche und geistliche Chöre, Lieder, Orgel- und Klavierstücke. Im Jahr 1904 veröffentlichte er seine Harmonielehre "Der einfache Kontrapunkt und die einfache Fuge". Cyrill Kistler starb im Jahr 1907. In der Martin-Luther-Straße steht eine Kistler-Büste.
===== Dr. Ernst Kraft =====
Das Grab des Apothekers und Herzoglich Sächsischen Hoflieferants Dr. Ernst Kraft (geb. 1861 in Hohenmölsen) befindet sich am Ostende des Kapellenfriedhofs. Dr. Kraft übernahm im Jahr 1893 die Boxberger-Apotheke. Er entwickelte Medikamente wie "Boxbergers Kissinger Pillen" (1885), die heute noch als "Silberne Boxberger" erhältlich sind, weiter und verhalf ihnen zu weltweitem Ruf. Dr. Kraft verfügte über das alleinige Recht zur Gewinnung des Salzes aus den Quellen. Von ihm stammt die Lehrschrift "Analytisches Diagnostikum". Dr. Kraft war Stadtrat und Gründungsmitglied der Sektion Bad Kissingen des Deutschen Alpenvereins. Ab 1831 unterstützte er finanziell die evangelische Kinderheilstätte. Dr. Kraft verbot einem seiner Mieter die Ausstellung antisemitischer Propaganda und führte ab 1925 deswegen einen Prozess gegen den Mieter (eine Unterschriftenliste angesehener Kissinger Familien gegen die Propaganda ist noch erhalten). Dr. Kraft starb im Jahr 1945.
===== Carl und Franz Krampf =====
Das Grabmal des Architekten Carl Krampf (geb. 1863 in Bad Kissingen) und seines Bruders Franz Krampf (geb. 1875 in Bad Kissingen) , der ebenfalls Architekt war, befindet sich an der Nordmauer des Kapellenfriedhofs.
Carl Krampf schuf in Bad Kissingen etwa 50 Bauten, folgte stiltechnisch vor allem dem Jugendstil und dem Historismus. Zu seinen Bauten zählen die Laurentiuskirche im heutigen Stadtteil Reiterswiesen, der Wittelsbacher Jubiläumsturm im heutigen Stadtteil Arnshausen, die Russische Kirche, zahlreiche Wohnhäuser in der Innenstadt sowie die im Zusammenhang mit der Reichskristallnacht zerstörte ''Neue Synagoge''. Gesellschaftlich aktiv war er als Oberleutnant der Landwehr, Mitglied der Freiwilligen Feuerwehr sowie als Gründungsmitglied der Sektion Bad Kissingen des Deutschen Alpenvereins. Carl Krampf starb 1910 in Bad Kissingen.
Zum Schaffen seines Bruders Franz Krampf gehören unter anderem der Tattersall und die Häuser Theresienstraße 10 und 12. Franz Krampf starb 1945 in einem Gefängnis des Nazi-Regimes.
===== Johann Sebastian Krampf =====
Das Epitaph von Johann Sebastian Krampf (geb. 1751 in Althausen), Rektor der Lateinschule in Kissingen, befindet sich an der äußeren Chorwand der Marienkapelle. Er starb 1817 in Kissingen.
===== José de Legòrburu y Dominguez-Matamoros =====
[[Datei:Jose-Legorburu-Dominguez-Matamoros.jpg|thumb|hochkant|José de Legorburu y Domínguez-Matamoros]]
Das Grab des Majors, Schriftstellers, Dichters und Flugpioniers José de Legòrburu y Dominguez-Matamoros (geb. 1992inn Oviedo) befindet sich zwischen der Nordmauer des Kapellenfriedhofs und der Mariensäule. Er stammte aus einer alten baskischen Adelsfamilie („Matamoros“ bedeutet „Maurentöter“). Seine Militärkarriere begann im Jahr 1899 bei der Kavallerie, im Jahr 1925 wurde er Comandante. Im Jahr 1916 machte er den Pilotenschein. Trotzdem soll er bereits im Jahr 1912 die Meerenge bei Gibraltar überflogen haben. Er war überzeugter Republikaner und wurde im Jahr 1931 Adjutant des Präsidenten, im Jahr 1933 Attaché der spanischen Luftwaffe für Paris, London und ganz Europa. Er starb im Jahr 1935.
===== Otto Levin =====
Das Grab des Buchhändlers, Buchdruckers, Buchbinders und Fotografen Otto Lvin (geb. 1849 in Osterode) befindet sich an der Südseite des Kapellenfriedhofs. Im Jahr 1875 kam er für die Hofbuchhandlung Brückner und Renner nach Kissingen und hatte ab 1879 einen Wohnsitz im Ort. Er hatte einen eigenen Postkartenverlag. Otto Levin starb im Jahr 1906.
===== Gerhard Linhard =====
[[Datei:Grabstätte der Familie Linhard.jpg|mini|Familiengrab Linhard]]
Das Familiengrab des Gerichts- und Wundarztes sowie Bürgermeisters Gerhard Linhard (geb. 1805, Geburtsort unbekannt) befindet sich an der Nordmauer des Kapellenfriedhofs. Linhard wirkte und wohnte zunächst als Gerichtsarzt in Aschach (heute Ortsteil von Bad Bocklet), dem Verwaltungssitz der unteren Verwaltungsbehörde (Landgericht), wo er unter anderem medizinische Pfuscher aufzuspüren und anzuzeigen hatte. Zu seiner Zeit waren Wundärzte handwerkliche Ärzte, die vor allem vom mittleren Bürgertum aufgesucht wurden. Linhard zog wohl im Jahr 1829 nach Kissingen und genoss sowohl menschlich als auch beruflich ein hohes Ansehen. Von 1854 bis 1864 war er Bürgermeister (Stadtvorstand) von Kissingen, als welcher er eine rege Tätigkeit entwickelte. So entstanden in seiner Amtszeit das heutige Kurtheater unter dem Architekten Max Littmann (1856), der uns im allgemeinen Geschichtskapitel über Bad Kissingen bereits begegnet ist. Im gleichen Jahr wurde Kissingen an das Telegrafennetz angeschlossen. Im Jahr 1858 bekam Kissingen eine evangelische Schule mit eigenem Lehrer, im Jahr 1860 entstand die Freiwillige Feuerwehr. Seinen Nachfahren gehörte das Hotel „Frühlingsgarten“ auf dem Gelände des heutigen Sanatoriums „Frankenland“. Gerhard Linhard starb im Jahr 1880.
===== Andreas Lohrey =====
Das Grab von Bauunternehmer und Architekt Andreas Lohrey (geb. 1843 in Schonungen) befindet sich nahe der Nordmauer des Kapellenfriedhofs. Lohrey errichtete Villen wie zum Beispiel Marbachweg 1 und Salinenstraße 47 und führte den Bau der Herz-Jesu-Stadtpfarrkirche sowie den Umbau des Kurhaushotels (des späteren „Steigenberger Kurhaushotels“) durch. Im Jahr 1883 übernahm er die im Jahr 1877 gegründete Personenschifffahrt auf der Saale (das "Dampferle"), die sich noch heute in Familienbesitz befindet. Andreas Lohrey starb im Jahr 1924.
===== Caroline Gräfin von Luxburg und Dr. Friedrich Graf von Luxburg =====
[[Datei:Friedrich-von-Luxburg-Grabmal.JPG|mini|Familiengrab Luxburg]]
[[Datei:Friedrich-Graf-Luxburg-1875.jpg|mini|hochkant|links|Friedrich Graf von Luxburg (1875)]]
[[Datei:Aschach, Schloss und Schlossmühle, von Südosten Bad Bocklet 20191216 002.jpg|mini|links|300px]]
Das Familiengrab Luxburg befindet sich an der Nordmauer des Kapellenfriedhofs. Das Ehrengrab von Friedrich Graf von Luxburg wurde im Jahr 1905 von Bildhauer Valentin Weidner geschaffen und ist mit "V.W., Eb 1905" signiert. Es besteht aus grünem Sandstein. Während des Zweiten Weltkrieges oder kurz danach wurde das Grab wie das daneben liegende, von Bildhauer Michael Arnold geschaffene Familiengrab der Adelsfamilie Heußlein von Eußenheim von einer morschen, hinter der Nordmauer befindlichen Pappel zerstört. Das Grab Luxburg wurde in der Nachkriegszeit offensichtlich vereinfacht.
Caroline Gräfin von Luxburg, verh. v. Cetto (geb. 1820 in Dresden), war die erste Hofdame der Kronprinzessin Marie von Preußen, der späteren Königin von Bayern. Beide kannten sich aus Berlin. Caroline Gräfin von Luxburg, verh. v. Cetto starb 1881 in München.
Der Jurist und Regierungspräsident Dr. jur. h. c. Friedrich Graf von Luxburg (geb. 1829 in Laubegast/Dresden), besuchte von 1840 bis 1845 das College Le Grand in Paris, war Page in München und absolvierte sein Studium in Heidelberg, Berlin und München. Im Jahr 1853 folgte das juristische Staatsexamen. Ab 1856 war er Landrichter in Kissingen, Regensburg und München. Von 1846 bis 1863 war er Landrichter, Bezirksamtmann und Bad-Kommissar in Kissingen. Von 1868 war er als Regierungspräsident von Unterfranken und Aschaffenburg tätig. Er wurde Ehrenbürger von Bad Kissingen (1893) und Würzburg (1899). Friedrich Graf von Luxburg war Förderer von Landwirtschaft, Industrie, Bildung und Fürsorge. Als Kunstliebhaber gründete er im Jahr 1893 den "Fränkischen Kunst- und Altertumsverein, Würzburg" (heute: "Freunde Mainfränkischer Kunst und Geschichte"). Im Jahr 1874 erwarb er das Schloss Aschach als Familienbesitz. Im Jahr 1955 ging das Schloss als Schenkung an den Bezirk Unterfranken. Friedrich Graf von Luxburg starb im Jahr 1905 in Würzburg.
===== Dr. Johann Adam Maas =====
Das Grab des Landgerichtsarztes Dr. Johann Adam Maas (geb. 1784 in Würzburg) befindet sich an der Südmauer am östlichen Ende des Kapellenfriedhofs. Seit etwa 1814 war Maas in Kissingen tätig. Außerhalb des Stadtkerns ließ er ein Kurhaus, das heutige Haus Rottmann in der Ludwigstraße, errichten. Während der napoleonischen Kriege betätigte er sich als Arzt im Lazarett zu Zell/Würzburg sowie als Feldchirurg im Offiziersrang beim Landwehrbataillon. Im Jahr 1820 verfasste er mit "Kissingen und seine Heilquellen" eine ausführliche Beschreibung von Krankheiten, die durch eine Bade- und Trinkkur geheilt werden können. Im Jahr gründete er das durch eine Stiftung der Königin Therese von Bayern entstandene Theresienspital für bedürftige Bedienstete, das an anderer Stelle als Theresienkrankenhaus weiterbestand. Er arbeitete als Arzt im Spital und stiftete sein Jahresgehalt von 100 fl. Maas war Schwiegervater von Dr. Heinrich Carl Welsch und Großvater von Dr. Hermann Welsch, die ebenfalls auf dem Kaüellenfriedhof bestattet sind. Maas starb 1852 in Bad Kissingen.
===== Matthäus und Fritz Memmel =====
[[Datei:Bad Kissingen, Ludwigstraße 14 , 003.jpg|thumb|200px|''Ludwigstraße 14'' in Bad Kissingen.]]
Das Grab von Matthäus Memmel (geb. 1857 im Nachbarort Nüdlingen) und seinem Sohn Fritz (geb. 1884) befindet sich an Südtmauer am östlichen Ende des Friedhofs. Nach einem beruflichen Aufenthalt in den USA gründete Matthäus Memmel nach seiner Rückkehr nach Kissingen im Jahr 1880 einen Konditoreibetrieb in Kissingen. Der Umsatz erlaubte ihm im Jahr 1903 den Bau eines eigenen Hauses mit Geschäft in der Ludwigstraße 14 nach Plänen des Architekten Carl Krampf im barockisierenden Jugendstil.
Wie seine Konditorkollegen Johann Baptist Messerschmitt und Kaspar Zoll verkaufte auch Matthäus Memmel im Kurgarten Feingebäck an die Kurgäste zum Frühstück. In diesem Sinne schrieb Theodor Fontane in einem Lobgedicht, das er im Jahr 1890 in das Goldene Buch von Bad Kissingen eintrug:
"Memmel, Zoll und Messerschmitt (alles Feinbäcker)<br/>
Alles wirkt zum Siege mit.<br/>
Und das fränkische, freundliche Wesen<br/>
Fügt den Schlußstein zum Genesen."<br/>
Matthäus Memmel starb im Jahr 1934.
Sohn Fritz Memmel arbeitete in Genua, Rom, an der Riviera, in Jerusalem und Kairo, bevor er 1934 die Konditorei des Vaters,Bad Kissingen, die erste elektrisch betriebene Zwiebackfabrik in Bad Kissingen übernahm. Im Jahr 1939 eröffnete er seine Kolonial-Stube mit selbst erworbenen Schaustücken aus seiner Zeit in Afrika.Viele der Ausstellungsstücke gingen verloren, als das Haus im Jahr 1945 beschlagnahmt wurde. Als im April 1945 mit dem Kurviertel links der Saale auch die Ludwigsstraße gesperrt wurde, fanden Fritz Memmel und sein Sohn Josef Unterschlupf im Billardzimmer des Café Hinsche. Fritz Memmel führte die familiäre Konditorei in der Ludwigstraße bis zu seinem Tod im Jahr 1949 weiter. Ende der 1950er Jahre wurde der Betrieb aufgegeben.
===== Johann Baptist Messerschmitt =====
[[Datei:Haus Bad Kissingen.JPG|mini|hochkant=1.1|''Haus Messerschmitt'' in Bad Kissingen]]
Das Grab des Konditormeisters Johann Baptist Messerschmitt befindet sich auf Höhe von Marienkapelle, Marienstatue und Kreuz an der Südmauer des Friedhofs.
Johann Baptist Messerschmidt wurde 1836 in Bamberg geboren. Mit Adam Messerschmitt gründete bereits 1848 das erste Mitglied der weit verzweigten Familie Messerschmitt ein Geschäft in Kissingen. Im Jahr 1894 erbaute Johann Baptist Messerschmidt am Kurgarten gegenüber dem ehemaligen Steigenberger Kurhaushotel das heute noch existierende Gründerzeiteckhaus ''Haus Messerschmitt'' mit eigenem Gartenlokal und Kurhaus. Messerschmitt betrieb auch das ebenfalls noch existierende ''Cafè Jagdhaus'' am Staffelsberg sowie ab 1904 ine Filiale in Berlin „Unter den Linden“.
Dank seiner Fähigkeiten wurde Messerschmitt mit verschiedenen Titeln wie
* Herzogisch-Sächsich-Altenburgischer Hoflieferant (1896),
* Hgerzoglich-Braunschweigisch-Lüneburgischer Hoflieferant (1897),
* Confectioner of his Royal Highness Prince Christian of Schleswig-Hokkstein (1901)
bedacht.
Wie seine Konditorkollegen Matthäus Memmel und verkaufte auch Johann Baptist Messerschmitt im Kurgarten Feingebäck an die Kurgäste zum Frühstück. In diesem Sinne schrieb Theodor Fontane in einem Lobgedicht, das er im Jahr 1890 in das Goldene Buch von Bad Kissingen eintrug:
"Memmel, Zoll und Messerschmitt (alles Feinbäcker)<br/>
Alles wirkt zum Siege mit.<br/>
Und das fränkische, freundliche Wesen<br/>
Fügt den Schlußstein zum Genesen."<br/>
Johann Baptist Messerschmidt starb im Jahr 1918.
Das ''Haus Messerschmitt'' wurde im Jahr 1894 von Architekt Karl Weinschenk errichtet, der in Bad Kissingen auch die Häuser Marktplatz 18 und Kurhausstraße 27 in einem ähnlichen, für Bad Kissingen unüblichen Dekor entwarf. An der Fassade befinden sich zwei weibliche Steinfiguren. Die linke Steinfigur hält mit Zeichenblock, Winkel und Lineal die Insignien des Architekturberufes in Händen und stellt laut Heimatforscher Edi Hahn die Franconia dar.<ref name=Hahn-Kuranlagen-12>''Das Messerschmitt-Haus und seine Nachbarn'', in: Edi Hahn: ''Eine Führung durch die Kuranlagen'', 1989, S. 12</ref> Laut Edi Hahn handelt es sich bei der rechten Figur um die Bavaria, bei der kleinen Frauenfigur auf ihrem Schoß um Hygieia, die griechische Göttin der Gesundheit.<ref name=Hahn-Kuranlagen-12/> Inzwischen dient das Anwesen als Wohn- und Geschäftshaus.
===== MSC (Herz-Jesu-Missionare) =====
Das Grab der Missionare von heiligsten Herzen Jesu befindet sich am westlichen Ende des Kapellenfriedhofs hinter dem Chor der Marienkapelle. Der Orden wurde im Jahr 1854 von P. Julius Chevalier in Isssoudon (Frankreich) gegründet. Im 19. und 20. Jahrhundert verbreitete sich die Kongregation in Holland, Österreich und Deutschland. Seelsorge und Jugenderziehung wurden zur Haupttätigkeit des Orrdens. Im Jahr 1921 wurden die Patres von Stadtpfarrer Friedrich Roth, der ebenfalls auf dem Kapellenfriedhof bestattet ist, nach Bad Kissingen geholt.
===== Jacques Pilartz =====
[[Datei:Familiengrab Pilartz auf dem Kapellenfriedhof.jpg|mini|Familiengrab Pilartz]]
Das Grab des Hoffotografen Jacques Pilarrtz (geb. 1836 in Köln) befindet sich an der Ostmauer des Kapellenfriedhofs. Pilartz hatte als niederländischer Staattsbürger zunächst ein Atelier für Fotografie in Amsterdam uns eröffnete dann 1875 ein Atelier in Kissingen, das später von Pilartz' Frau und danach vom gemeinsamen Sohn Otto geführt wurde. Pilartz fotografierte mehrmals Reichskanzler Otto von Bismarck, dessen "Lieblingsfotograf" er wurde. Vor allem Pilartz' Bismarck-Fotografien um 1890 fanden weite Verbreitung in Deutschland. Pilartz fotografierte auch Kaiserin Auguste Viktoria mit Kindern während einer Kur in Bad Kissingen 1889. Pilartz wurde u. a. mit der silbernen Medaille der Ausstellung in Amsterdam und der italienischen goldenen Medaille für Kunst und Wissenschaft ausgezeichnet. Pilartz starb 1910 in Bad Kissingen.
===== Emanuel Edler von Rössler =====
Das Grab des Privatiers Emanuel Edler von Rössler (geb. 1859 in Lemberg/Galizien) befindet sich inmitten des westlichen Teils des Kapellenfriedhofs unterhalb der Mariensäule. Seine Familie stammt aus dem österreichischen Kaiseradel. Durch eine Erbschaft zu Wohlstand gekommen, eröffnete Emanuel Edler von Rössler im Jahr 1898 mit seiner Frau Franzi in Bad Kissingen ein festes Ladengeschäft für Klöppelspitzen, feine Handstickereien und Wohndekor. Über die Familien Licha-Keul besteht das Geschäft bis in die Gegenwart im ''Haus Collard'' (Am Kurgarten 6) mit vielen Filialen. Emanuel Edler von Rösslers Familie wurde im Jahr 1823 nobilitiert. Sie starb im Mannesstamm aus, als Sohn Roman bei einem Bootsunfall in der Fränkischen Saale ertrank. Emanuel Edler von Rössler starb im Jahr 1921.
===== Friedrich Roth =====
Das Grab des Bad Kissinger Stadtpfarrers Friedrich Roth (geb. 1847 in München) befindet sich am Ostende des Kapellenfriedhofs in der Höhe des Kreuzes. Vor seiner Tätigkeit in Bad Kissingen war Friedrich Roth in der Region in Ochsenfurt, Aschaffenburg, Meiningen und Dettelbach tätig. In Bad Kissingen entwickelte er eine intensive Bautätigkeit mit der neugotischen Innenausstattung der Stadtpfarrkirche, dem Neubau der Laurentiuskirche im heutigen Stadtteil Reiterswiesen, der Restaurierung der Marienkapelle und der Gründung des Kindergartens in der Maxstraße. Im Jahr 1921 holte Roth die Herz-Jesu-Missionare nach Bad Kissingen. Im Jahr 1920 wurde er Ehrenbürger der Stadt. Im Jahr 1926 starb Friedrich Roth in Bad Kissingen.
===== Christian Sandrock =====
[[Datei:Sandrock, Christian.jpg|mini|Grab Christian Sandrocks]]
Das Grab von Christian Sandrock (geb. 1865 in Rotterdam) befindet sich nahe der Nordmauer im Zentrum des Kapellenfriedhofs. Der Bruder der Schauspielerin Adele Sandrock war Historien- und Porträtmaler sowie Schriftsteller. Sein Theaterstück "Jeanne" kam im Jahr 1910 unter Mitwirkung von Adele Sandrock in Bad Kissingen zur Uraufführung. Als langjähriger Kurgast Bad Kissingens besaß Sandrock die Ehrenurkunde der Stadt. Christian Sandrock starb 1924 in Bad Kissingen.
===== Tobias August Schachenmayer =====
Das Grab des Buchhändlers und Redakteurs Tobias August Schachenmayer (geb. 1825 in Isny) befindet sich in der Südostecke des Kapellenfriedhofs. Als Buchhändler war Schachenmayer in Hamburg, Bremen, Graz und Kempten tätig. Im Jahr 1869 kaufte er in Kissingen Druckerei und Verlag von A. Reichardt und führte 1846/47 das "Kissinger Intelligenzblatt", die 1863 in "Saal-Zeitung" umbenannt wurde (die heutige "Saale-Zeitung" und Verlag T. A. Schachenmayer) , weiter. Schachenmayer verlegte auch balneologische und stadtgeschichtliche Ansichtspostkarten. Politisch vertrat er die Ansichten des liberalen Bürgertums. Schachenmayer starb 1912 in Bad Kissingen.
===== Johann Christoph von Schletten =====
Das Epitaph von Johann Christoph von Schletten befindet sich im Chor der Marienkapelle. Um 1574 war er als Schultheiß zu Hammelburg tätig. Um 1566 bekam er vom Würzburger Fürstbischof Friedrich von Wirsberg ein Rittermannslehen (Burggraf) zu Bothenlaube. Seit 1590 hatte er ein Wohnhaus (Kemenate). Die Kemenate wurde im Jahr 1829 von der Familie Heußlein von Eußenheim aufgekauft. An ihrer Stelle wurde 1709 nach Plänen von Johann Dietzenhofer ein Schloss, das heutige "Neuen Rathauses", errichtet. Die von Schletten waren vermutlich eine seit dem 14. Jahrhundert in Kissingen ansässige Adelsfamilie. Der Kissinger Adel lebte von der Verwaltung des Besitzes und der Landwirtschaft mit dem Recht auf Viehzucht. Die Schletten bekamen auch Abgaben von so genannten Schutzjuden.
===== Adolf und Karl Schmidt =====
Das Familiengrab der Autobauerfamilie Schmidt befindet sich im Zentrum des Kapellenfriedhofs oberhalb der Mariensäule.
Autobauer, Wagenhändler, Gewerberat und Stadtrat Adolf Schmidt (geb. 1873) übernahm im Jahr 1905 die väterliche Wagenbaufabrik und machte sie zu einer der bedeutendsten der Branche. Unter den Vorzeichen der fortschreitenden Automobilisierung stellte er den Betrieb unter dem Namen "Auto-Palast Schmidt" in der Salinenstraße 11 auf Garagen, die erste Tankstelle (Benzindepot), Kfz-Reparatur, Handel mit Autos (Benz) und Reifen (Michelin und Continental) sowie Autoverleih um. Dieses Ziel verfolgte er auch im Jahr 1928 mit einem Besuch in den USA. Adolf Schmidt war längere Zeit lang Leiter der gewerblichen Abteilung des Polytechnischen Vereins, war 2. Vorsitzender des Automobil-Clubs Bad Kissingen sowie aktiver Mitarbeiter im Haus- und Kurhausbesitzerverein. Adolf Schmidt starb im Jahr 1929.
Wagenfabrikant Karl Schmidt (geb. 1834, Wintersweiler/Baden) lebte bis zum Jahr 1870 mit seiner Familie in Paris und war "Beamter" in einer Wagenfabrik mit etwa 600 Mitarbeitern. Im Jahr 1871 kam Karl Schmidt nach Kissingen und arbeitete in der Lutzschen Wagenfabrik von Christian Behlert. In seinen Erinnerungen beschrieb Karl Schmidt seine Flucht vor dem ''Deutsch-Französischen Krieg'' von 1870/71 aus Paris über Dieppe nach London. Im Jahr 1875 gründete er eine eigene Fabrik, stellte mit ihr Phaetons (leichte vierrädrige Kutschenwagen), Chaisen und ähnliches her und exportierte seine Produkte bis nach Indien, England, Russland und Südafrika. Im Jahr 1900 baute die Firma den ersten auf Gummirädern montierten Landauer. Karl Schmidt gehörte die Bismarck-Waage an der Salinenpromenade, auf der Bismarck sich regelmäßig wog. Karl Schmidt starb im Jahr 1909.
===== Albert und Balduin Schmidt =====
Das Familiengrab der Hotelbesitzerfamilie Schmidt befindet sich an der südlichen Friedhofsmauer.
Hotelbesitzer und Landesgewerberat Albert Schmidt (geb. 1876 in Meiningen) übernahm im Jahr 1918 das Hotel seines Vaters Balduin Schmidt. Unter seiner Leitung logierten in dem Hotel zahlreiche Prominente wie Künstler und Filmstars (z. B. Lil Dagover) sowie im Jahr 1928 für eine Nacht auch der spätere Reichskanzler und Diktator Adolf Hitler, der sich hier noch als Schriftsteller eintrug. Nach dem Zweiten Weltkrieg verkaufte Witwe Toni Schmidt das Anwesen an die Bayerische Hypotheken- und Wechselbank, die es abreißen ließ und an seinem Standort einen Bank-Neubau errichtete. Albert Schmidt starb im Jahr 1932.
Hotelbesitzer Balduin Schmidt (geb. Gillersdorf/Thüringen) war zur Blütezeit Meiningens der Geschäftsführer des "Sächsischen Hofes", das musikalische Größen wie Johann Strauß, Max Reger, Hans von Bülow und Johannes Brahms beherbergte, die wohl auch von Balduin Schmidt betreut wurden. Im Jahr 1878 zog er nach Kissingen und übernahm hier das Hotel "Wittelsbacher Hof" am Marktplatz 1, das er umbaute und zu einem führenden Etablissement mit gediegener Vornehmheit machte. Balduin Schmidt starb im Jahr 1917.
===== Lina Schonder =====
Das Grab der Hauswirtschafterin und Heimatdichterin Lina Schonder, geb. Grell (geb. 1904 in Bullenheim) befindet sich im Nordosten des Kapellenfriedhofs. Lina Schonder und ihr Mann, der Holzschnitzer und Stadtrat Lothar Schonder, führten gemeinsam ein Lokal in der Theresienstraße 3 (heute "König-Pilsener-Stube"), wo sie Holzschnitzereien, Spirituosen und Illustrierte verkauften. Lina Schonder verfasste stimmungsvolle Gedichte und Erzählungen in Hochdeutsch und Rhöner Mundart, in denen in ihrer warmherzigen Art vor allem ihre Natur- und Heimatverbundenheit sowie ihre tiefe Religiosität zum Ausdruck kamem. Sie veröffentlichte die Gedichtbände "Du schönes Kissingen", "Kinder der Rhön", "Rhönwind" und "Rhönquelle". Der Rhönklub zeichnete sie mit dem Goldenen Ehrenzeichen aus. Lina starb im Jahr 1973.
===== Dr. Alfred Sotier und Dr. Paul Sotier =====
[[Datei:Paul-Sotier-Grabmal.JPG|mini|Familiengrab Sotier]]
Das Familiengrab Sotier befindet sich an der Nordmauer des Kapellenfriedhofs.
Der praktische Arzt und Medizinalrat Dr. Alfred Sotier (geb. 1833 in Münnerstadt) besuchte das Gymnasium Münnerstadt, machte im Jahr 1858 sein Staatsexamen und eröffnete seine erste Praxis im Jahr 1859 in Aschach. Wenig später ließ er sich in Kissingen nieder. Als Zivilarzt war er im ''Deutschen Krieg'' von 1866 tätig. Beim Besuch des bayerischen Königs Ludwig II. wurde Sotier von diesem ausgezeichnet. Im ''Deutsch-Französischen Krieg'' von 1870/71 war Sotier Operationsarzt. Er wurde auch Bahnarzt für preußische Bahnbedienstete. Im Jahr 1881 verfasste er "Bad Kissingen, Monographie". In der Prinzregentenstraße errichtete er ein Kurhaus (das heutige ''Uibeleisen''). Er war beratender Arzt von Kaiserin Auguste Viktoria (1889) und Kaiserin Elisabeth von Österreich (1897) während deren Kuren in Bad Kissingen. Dr. Alfred Sotier starb im Jahr 1902.
Der Arzt Dr. Paul Sotier (geb. 1876) bildete sich nach seiner Approbation im Jahr 1903 in Paris, St. Petersburg und Moskau weiter. Im Jahr 1905 ließ er sich in Bad Kissingen nieder und übernahm durch Einheirat mit Anna Düring den "Fürstenhof" in der Bismarckstraße (heute ''Bayerischer Hof''). Im "Fürstenhof" wohnten 1945-1946 SKH Prinz Louis Ferdinand v. Hohenzollern und seine Gattin Kira (Romanow) mit Kindern. Im Jahr 1952 lebte Kronprinzessin Cecilie im "Fürstenhof" und starb hier im Jahr 1954. Im Jahr 1927 behandelte er "Kaiserin" Hermine während ihrer Kur in Bad Kissingen und wurde Leibarzt von "Kaiser Wilhelm II." in Doorn. Dr. Paul Sotier starb im Jahr 1950.
===== Josef Steinbach =====
[[Datei:Ruhestätte der Familie Steinbach auf dem Kapellenfriedhof.jpg|mini|Familiengrab Steinbach]]
Das Familiengrab Steinbach befindet sich auf der Ostmauer des Kapellenfriedhofs. Das Familiengrab Steinbach aus rotem Sandstein und mit weißer Marmorschrifttafel stammt von Bildhauer Valentin Weidner und ist mit "V.W." signiert. Die Büste im Zentrum des Grabmales ist mit "V. Weidner, fec. Eb 1890" signiert.
Schlossermeister, Büchsenmachermeister, Gastwirt und Hotelier Josef Steinbach (geb. 1825 in Burgsinn) erlernte das Büchsenmacherhandwerk in Ansbach, wurde im Jahr 1840 Geselle, ging auf Wanderschaft und arbeitete 2 Jahre lang in Philadelphia, USA. Im Jahr 1847 bezeichnete er sich als "Büchsenmachermeister in Kissingen ansässig". Eine von ihm hergestellte und signierte Scheibenpistole befindet sich in Privatbesitz in Bad Kissingen. Ab 1851 betrieb er das Schützenhaus in der heutigen Rosenstraße 32 mit Schankwirtschaft und Konzession für kalte Speisen. Ab 1875 führte er das von ihm erbaute Hotel Diana, in welchem viele Mitglieder des Hochadels logierten wie zum Beispiel Franz Joseph I. von Österreich. Josef Steinbach starb im Jahr 1890.
===== Michael Stöger (Familiengrab Schöller) =====
Der Königliche Gymnasial-Professor für Deutsch, Geschichte und Erdkunde Michael Stöger (geb. 1849 in Zwiesel) ist im Familiengrab seiner Schwiegereltern, der Pensionsbesitzer Schöller bestattet. Das Grab befindet sich an der Südmauer nahe der Südostecke des Kapellenfriedhofs. Das Grab wurde von Bildhauer Michael Arnold geschaffen. Wegen der starken Verwitterung der Grabinschriften lässt sich das Entstehungsjahr der Grabanlage nur schwer bestimmen, in Betracht kommt das Jahr 1873. Michael Arnolds Urheberschaft ist durch ein Foto des Grabsteins in seinem Fotoalbum belegt. Als im Jahr 1994 die fast lebensgroße Engelsfigur des Grabes umstürzte, wurde sie auf Betreiben von Stadtheimatpfleger Werner Eberth wieder aufgestellt.
Zunächst lehrte Michael Stöger als Assistent an der Gewerbeschule in Freising und ab dem Jahr 1871 an der Gewerbeschule in Kissingen, die unter seiner Mitwirkung zur sechsklassigen Schule mit Latein ausgebaut wurde. Der "Papa Stöger" genannte Michael Stöger war eine angesehene und beliebte Persönlichkeit. Er war auch in der Heimatgeschichte aktiv und verfasste Schriften wie "Der fränkische Saalgau und seine früheren Ortschaften", "Lebensbeschreibung des fränkischen Geschichtsschreibers Ignaz Gropp" und "Entwurf zu einer Geschichte Bad Kissingens" (1896). Daneben engagierte er sich für den Erhalt der Burgruine Botenlaube und legte die Mauerreste des Gilgenkirchleins von Bremersdorf an der Ilgenwiese sowie der Henneburg in Nüdlingen frei. Im Jahr 1902 war er Vorstand des Gemeindekollegiums und Sektionsvorstand des Rhönklubs. Michael Stöger starb im Jahr 1909 während des Unterrichts.
===== Dr. Hugo Stöhr =====
[[Datei:Stöhr Hugo a.jpg|miniatur|Dr, Hugo Stöhr]]
Das Grab von Frauen- und Badearzt Hugo Stöhr (geb. 1830 in Würzburg) befindet sich in der östlichen Hälfte des Kapellenfriedhofs zwischen Leichenhalle und Kreuz. Nach Stöhrs Studium in Würzburg, Wien und Paris folgte ein Einsatz als Assistenzarzt während der großen Choleraepidemie in Augsburg. Im Jahr 1856 machte er sein Staaatsexamen. Danach wurde Stöhr Leibarzt des Fürsten Adolf von Löwenstein-Wertheim. Im Jahr 1862 begann seine Tätigkeit in Kissingen. Im Jahr 1876 wurde er Großherzoglich Oldenburgischer Hofrat, im Jahr 1883 Mecklenburgisch Schweriner Geheimer Hofrat und im Jahr 1895 Königlich Bayerischer Hofrat. Stöhr wurde mit zahlreichen Orden und Auszeichnungen bedacht. Stöhr betätigte sich in den Kriegen von 1866 un 1870/71 und unterstützte das Rote Kreuz und die Sanitäts-Colonne (Ehrenmitglied). Ebenso leitete Stöhr "theatralische Aufführungen" des Dilettantenvereins. Zu der von ihm verfassten Literatur gehören Titel wie "Erinnerungen eines fröhlichen Wanderburschen" mit einer Schilderung der Vorzüge Kissingens und "Kissingen Spa" (auf Englisch). Die ehemalige Villa Stöhr befindet sich in der Von-der-Tann-Straße 8. Dr. Hugo Stöhr starb im Jahr 1901.
===== Karl Streit (Grab Dr. Löffler) =====
[[Datei:Karl-Streit.jpg|mini|links|hochkant|Karl Streit<small> (Zeichnung von Christian Wilhelm Allers)</small>]]
Der Königliche Ökonomierat Dr. Karl Streit (geb. 1833 in Münnerstadt) ist im Grab von Dr. Löffler beerdigt. Das Grab befindet sich an der Ostmauer des Kapellenfriedhofs. Nach dem Besuch des Gymnasiums Münnerstadt wurde Karl Streit Sekretär des landwirtschaftlichen Vereins und Regierungsrevisor. Als sein Bruder Dr. Ignaz von Streit im Jahr 1875 die Bäder Kissingen und Bocklet pachtete, übernahm Karl Streit in der Oberen Saline (im heutigen Bad Kissinger Stadtteil Hausen) die Oberaufsicht über Landwirtschaft und Gärtnerei. In der Oberen Saline richtete Karl Streit ein Zimmer für Reichskanzler Otto von Bismarck ein, in dem dieser zwischen 1876 und 1893 insgesamt 14mal und Kaiserin Auguste Viktoria einmal im Jahr 1889 mit ihrer Familie zur Kur weilte. Karl Streit sammelte Kunstwerke, vor allem die Werke des damals noch unbekannten Tilman Riemenschneider, die sich heute teilweise im Nationalmuseum München und im Mainfränkischen Museum Würzburg befinden. Karl Streit war unter anderem der Verfasser von "Tylman Riemenschneider 1461-1530, Leben und Kunstwerk des fränkischen Bildschnitzers" (Berlin, 1888). Diese Vorliebe für Riemenschneider findet unter anderem ihren Ausdruck in dem Metallrelief "Beweinung Christi" im Mittelteil seines Grabes. Streit stiftete auch das "Rosenkranzbild" im Chor der Marienkapelle. Karl Streit war Mitglied und Vorstand im:
* landwirtschaftlichen Bezirks- und Kreisverein (1880-1895)
* Altertumsverein Würzburg (heute: Freunde Mainfränkischer Kunst und Geschichte)
* Corps Moenania (Mainländer)
* Ehrenmitglied im Kriegerverein Kissingen und Hausen (dort hielt er "Reden von feurigstem Patriotismus für Kaiser und Reich")
Jedes Jahr wurde Karl Streit von Prinzregent von Luitpold von Bayern zur Audienz und zur Tafel geladen. Im Jahr 1894 wurde er zum Ehrenbürger von Münnerstadt ernannt. Karl Streit starb im Jahr 1902.
===== Josef Stürmer =====
Das Grab des Dekans, Geistlichen und Stadtpfarrers von Bad Kissingen Josef Stürmer (geb. 1904 in Aschaffenburg) befindet sich an der Nordmauer nahe der Mariensäule. Stürmer war zunächst in Rimpar, Schweinfurt und Frammersbach tätig. In den Jahren 1933 und 1937 wurde er wegen seiner Einstellung zum Nationalsozialismus verhaftet. Während seiner Amtszeit in Bad Kissingen wurde die Herz-Jesu-Stadtpfarrkirche unter Entfernung der neugotischen Ausstattung innen neu gestaltet. Josef Stürmer starb im Jahr 1961.
===== Kaspar Wahler und Kaspar Wahler jun. =====
Das Familiengrab des Ökonoms Kaspar Wahler (geb. 1830 in Euerdorf) und des Brauereibesitzers Kaspar Wahler jun. (geb. 1866 in Euerdorf) befindet sich in der Südostecke des Kapellenfriedhofs.
Im Jahr 1885 erwarb Ökonom Kaspar Wahler die Schmidtsche Brauerei auf dem Gelände des ehemaligen Schlosses der Herren von Erthal in der Bachstraße 1. Kaspar Wahler starb im Jahr 1902.
Sein Sohn, der Brauereibesitzer Kaspar Wahler jun., absolvierte seine Ausbildung in Weihenstephan. Er baute die bis 1992 existierende Brauerei Wahler aus. Deren Sudhaus und Mälzerei befanden sich bis zum Jahr 1962 in der Stadt auf dem heutigen Wahler-Parkplatz, die Gär- und Lagerkeller in der Schönbornstraße auf dem Platz der späteren Gaststätte "Zum Wahler-Bräu". Dieser Keller wurde im Verlauf des ''Deutschen Krieges'' geplündert. Wahler jun. eröffnete in seinem Lokal "Deutscher Kaiser" in der heutigen Sparkassen-Passage unter dem Namen "Apollo" ein Varieté-Theater, in dem ab 1909 auch Spielfilme gezeigt wurden. Wahler jun. war auch leidenschaftlicher Jäger; besonders beliebt waren die sogenannten "Wahler-Jagden". Wahler jun. war Mitglied des Kollegiums der Gemeindebevollmächtigten, Mitglied des Magistrats, Stadtrat (1924-1933) für den Bürgerblock, stellvertretender Bürgermeister, Ehrenmitglied der Liedertafel, des Rhönklubs und des Turn- und Sportvereins. Kaspar Wahler jun. starb im Jahr 1956.
===== Hans Weidner =====
[[Datei:Hans Weidner (1875-1953)-MJ.jpg|miniatur|Hans Weidner (1908)<br/>mit Ehefrau Käthe, geb. Halk]]
Bildhauer Hans Wedner (geb. 1875 in Bad Kissingen), der Sohn des Bildhauers Valentin Weidner, ist im Grab seiner Schwiegereltern Halk bestattet. Es befindet sich an der Südmauer des Kapellenfriedhofs, knapp oberhalb der Marienkapelle und wurde von Valentin Weidner geschaffen. In den Familiengrab fanden Hans Weidners Frau Käthe, geb. Halk, sowie der gemeinsame Sohn Oskar ihre letzte Ruhe.
Nach einer Ausbildung zum Bildhauer bei seinem Vater und an der Königlichen Akademie für Künste in München war Hans Weidner im Jahr 1907 im Vatikan tätig. Danach arbeitete er in der Werkstatt des Vaters mit, die er im Jahr 1919 übernahm. Er schuf u. a. einige Grabmäler auf dem Kapellenfriedhof, die er mit „H. W.“ signierte. Wegen einer Staublunge arbeitete er vorwiegend als Restaurator, Vergolder und Holzschnitzer. Wegen der Weltkriege, Wirtschaftskrise und Inflation war Hans Weidner trotz künstlerischen Talents geschäftlich nicht erfolgreich, so dass er von den Einnahmen des Kurzwarengeschäfts seiner Schwiegereltern leben musste. Hans Weidner starb 1953 in Bad Kissingen.
Sein Wohnhaus in der Brunnengasse existiert noch.
===== Valentin Weidner =====
[[Datei:Weidner-Grabmal 01.JPG|mini|links|Familiengrab Weidner]]
[[Datei:Valentin-Weidner.jpg|mini|Valentin Weidner]]
Das Grabmal des Bildhauers Valentin Weidner (geb. 1848 in Würzburg) befindet sich östlich der Marienkapelle hinter deren Chor. Die beiden Stelen neben dem Mittelkreuz zeigen links die Grablegung Christi sowie rechts den Auferstandenen. Im Grab sind neben Valentin Weidner sind seine zweite Ehefrau Anna Mathilde Reuß, sowie Barbara Maria, dritte Tochter aus zweiter Ehe, und der Ehemann der vierten Tochter Maria Rosa, der Kurhausbesitzer Johann Fridolin Hofmann, bestattet. Sohn Hans Weidner, der aus der ersten Ehe stammte und ebenfalls Bildhauer wurde, ist im Familiengrab seiner Schwiegereltern Halk bestattet.
Laut Familienlegende studierte Valentin Weidner bei Ferdinand von Miller dem Älteren an der Königlichen Kunstakademie in München. Er war ferner Schüler des Bildhauers Michael Arnold, dessen Atelier er später übernahm. Weidner war zweimal verheiratet. Aus sein ersten Ehe mit Maria Elisabeth Seitz stammte der Sohn Hans Weidner, der ebenfalls Bildhauer wurde. Weidner betätigte sich auch als Feuerwehrkommandant, als Mitglied des Gemeindekollegiums und als Stellvertreter des Bürgermeisters. Im Jahr 1919 wurde er Ehrenbürger der Stadt Bad Kissingen. Weidner starb im gleichen Jahr in Bad Kissingen vor der geplanten Überreichung der Ehrenbürgerurkunde.
Sein nach den Plänen von Architekt Carl Krampf errichtetes Wohnhaus am Valentin-Weidner-Platz 1 existiert noch. Von Valentin Weidner stammen zahlreiche Gräber auf dem Kapellenfriedhof, sowie zahlreiche Denkmäler (z. B. St.-Wendelin-Statue am Wendelinus, Kreuzwege im heutigen Stadtteil Abertshausen und auf dem Bad Kissinger Stationsberg) und Kirchenausstattungen in Bad Kissingen und Umgebung (z. B. Bad Kissinger Stadtpfarrkirche).
===== Dr. Heinrich Carl Welsch und Dr. Hermann Welsch =====
[[Datei:Heinrich-Carl-Welsch-Grabmal.JPG|miniatur|left|Grabmal der Familie Welsch]]
Badearzt Heinrich Carl Welsch (geb. 1808 in Odernheim am Glan) und sein Sohn, der Badearzt Dr. Hermann Welsch (geb. 1842 in Kissingen) sind in der Familiengruft Welsch an der Südmauer am Ostende des Friedhofs bestattet. Das Grabmal wurde von Bilhauer Valentin Weidner gefertigt. Der Sockel der nachträglich tiefergelegten Marmorbüste von Dr. Carl Welsch passt vom Material her nicht zum restlichen Grab. Vorher überragte die Büste die südliche Friedhofsmauer und soll nachts Passanten auf der Kapellenstraße erschreckt haben. Die Büste ist am Schulteransatz signiert mit "V. Weidner fec. Eb 1882").
[[Datei:Bismarckstraße 24 (Bad Kissingen) – 20170923-040.JPG|mini|Das ''Westendhaus'' in der Bismarckstraße 24]]
Die protestantische Familie Welsch stammte ursprünglich aus Wales, war aber aus Glaubensgründen zugewandert. Nach seiner Gymnasialzeit in Kreuznach und Zweibrücken studierte Heinrich Carl Welsch Medizin zunächst an der Universität Erlangen, später an der Ludwig-Maximilians-Universität München und schließlich an der Julius-Maximilians-Universität Würzburg und promovierte im Alter von 20 Jahren. In dieser Zeit besuchte er das erste Mal Kissingen. Nach einem kurzen Aufenthalt in Paris ging er nach Würzburg und machte sein praktisches Examen an der Otto-Friedrich-Universität Bamberg. Während einer Kur in Kissingen suchte er den Badearzt Johann Adam Maas auf und lernte dessen 14jährige Tochter Eva Amalie Therese Maas, seine spätere Ehefrau, kennen. In Speyer eröffnete Welsch eine florierende Arztpraxis. Im Jahr 1837 heirateten Welsch und die inzwischen 19jährige Eva Amalie, weswegen Welsch u. a. seine Praxis nach Kissingen verlegte. Aus dieser Ehe stammte u. a. der Sohn Hermann Welsch, der später auch Badearzt wurde. Auch hier erwarb sich Welsch' Praxis einen guten Ruf. Zu seinen prominentesten Patientinnen gehörte die österrreichische Kaiserin Elisabeth ("Sisi"). Aufgrund seiner Englischkenntnisse hatte er auch Patienten aus dem Ausland. Mit seinem Vermögen aus dem Praxisbetrieb ließ er im Jahr 1840 das Westendhaus (heute Bismarckstraße 26), eines der ältesten Kissinger Kurhäuser, erbauen. Heinrich Carl Welsch starb im Jahr 1882.
Dr. Hermann Welsch kam 1642 als Enkel von Dr. Johann Adam Maas, der auch auf dem Kapellenfriedhof liegt, zur Welt. Mit seiner Badeliteratur (u. a. „The Springs and Baths of Kissingen“) lockte er englischsprachige Kurgäste nach Kissingen. Welsch war Ritter des Sächsischen Ernestiner-Ordens. Er starb im Jahr 1892 während eines Krankenbesuchs.
===== Barbara Elisabetha Wieber =====
Das Epitaph von Barbara Elisabetha Wieber (geb 1801) befindet sich an der äußeren Chorwand der Marienkapelle. Die von den Eltern gewidmete Grabinschrift weist auf ein früh verstorbenes irdisches Leben hin. Barbara Elisabetha Wieber starb im Jahr 1822.
===== Johannes Wiesinger =====
[[Datei:Bad Kissingen, Friedhof, 010.jpg|mini|Johannes Wiesinger]]
Das Grab des Theologen sowie Orts- und Badepredigers Johannes Wiesinger (geb. 1821, Geburtsort unbekannt) befindet sich nahe der Südmauer im Zentrum des Kapellenfriedhofs. Wiesinger war von 1870 bis 1882 in Kissingen tätig. Danach war er Dekan in Würzburg. Am 13. Juli 1874 hielt er nach dem Attentat auf Reichskanzler Otto von Bismarck in der heutigen Bismarckstraße einen Dankgottesdienst in der heutigen Erlöserkirche. Wiesinger starb im Jahr 1886 in Würzburg. Sowohl sein Nachruf in der lokalen "Saale-Zeitung" als auch Mathilde Panizza, die Mutter des Schrifstellers Oskar Panizza, in ihren Memoiren beschreiben Wiesinger als ausgezeichneten Redner.
===== Hermann und Kaspar Zoll =====
Das Grab des Konditormeisters Hermann Zoll (geb. 1842) und seines Vaters, des Schmiedemeisters und Melbers Kaspar Zoll (geb. 1808 in Arnshausen [heute Stadtteil von Bad Kissingen]) befindet sich an der Nordmauer am östlichen Ende des Kapellenfriedhofs. Die Vorfahren von Vater und Sohn waren in Westheim und Arnshausen als Müller tätig. Im Jahr 1847 eröffnete Kaspar Zoll eine Restauration in Kissingen (in der heutigen Schlossstraße). Im Jahr 1863 eröffnete Hermann Zoll in der Ludwigstraße 4 eine Konditorei, die nach Hermann Zolls Tod im Dezember 1893 von dessen Sohn Adam Zoll weitergeführt wurde. Nach dem Tod des letzten Mitglieds der Familie Zoll wurde die Konditorei von Oscar Schmaus weitergeführt.
Wie seine Konditorkollegen Johann Baptist Messerschmitt und Matthäus Memmel verkaufte auch Kaspar Zoll m Kurgarten Feingebäck an die Kurgäste zum Frühstück. In diesem Sinne schrieb Theodor Fontane in einem Lobgedicht, das er im Jahr 1890 in das Goldene Buch von Bad Kissingen eintrug:
"Memmel, Zoll und Messerschmitt (alles Feinbäcker)<br/>
Alles wirkt zum Siege mit.<br/>
Und das fränkische, freundliche Wesen<br/>
Fügt den Schlußstein zum Genesen."<br/>
== Literatur ==
* Elisabeth Keller: ''Die Flurdenkmale im Landkreis Bad Kissingen'', Band 1, Eigenverlag des Landkreises Bad Kissingen, 1978
* Franz Warmuth: ''100 Jahre Herz Jesu Pfarrei Bad Kissingen – Beitrag zur Geschichte der Pfarrei Bad Kissingen.'' Bad Kissingen 1984, S. 23–38
* Edi Hahn: ''Bad Kissingen und seine Umgebung die schönsten Sagen, Legenden und Geschichten'', Bad Kissingen 1986, ISBN 3-925722-01-7
* Edi Hahn: ''Eine Führung durch die Kuranlagen'', Bad Kissingen, 1989, ISBN 3-925722-03-3
* Hans-Jürgen Beck, Rudolf Walter: ''Jüdisches Leben in Bad Kissingen''. Herausgegeben von der Stadt Bad Kissingen, Bad Kissingen 1. Auflage: 1990
* Denis A. Chevalley, Stefan Gerlach: ''Denkmäler in Bayern - Stadt Bad Kissingen'', Edition Lipp (1998). ISBN 3-87490-577-2
* Werner Eberth: ''Valentin Weidner.'' In: ''Kissinger Hefte.'' Band 1, Theresienbrunnen-Verlag, Bad Kissingen 1992, {{DNB|920517749}}.
* Werner Eberth: ''Valentin und Hans Weidner (1848–1919), (1875–1953). Bildhauer des Historismus in Franken. Ergänzungen zum ''Kissinger Heft.'' Band 1, Beiheft zur Ausstellung: „Der Bad Kissinger Bildhauer Valentin Weidner“ 1992.'' Theresienbrunnen-Verlag, Bad Kissingen 1996, {{OCLC|164759770}}.
* Werner Eberth: ''Bismarck und Bad Kissingen.'' Theresienbrunnen-Verlag, Bad Kissingen 1998.
* Thomas Ahnert, Peter Weidisch (Hg.): ''1200 Jahre Bad Kissingen, 801-2001, Facetten einer Stadtgeschichte''. Festschrift zum Jubiläumsjahr und Begleitband zur gleichnamigen Ausstellung. Sonderpublikation des Stadtarchivs Bad Kissingen. Verlag T. A. Schachenmayer, Bad Kissingen 2001, ISBN 3-929278-16-2
* Werner Eberth: ''Michael Arnold – Ein Bildhauer des Spätklassizismus.'' Theresienbrunnen-Verlag, Bad Kissingen 2001, S. 118–150
* Gerhard Wulz: ''Der Kapellenfriedhof in Bad Kissingen. Ein Führer mit Kurzbiografien.'' Stadt Bad Kissingen, Bad Kissingen 2001, ISBN 3-934912-04-4
* Peter Ziegler: ''Prominenz auf Promenadenwegen – Kaiser, Könige, Künstler, Kurgäste in Bad Kissingen'', Verlag Ferdinand Schöningh, 2004, ISBN 3-87717-809-X
* ''Terrassenschwimmbad Bad Kissingen 1954–2004.'' Bad Kissingen 2004.
* Werner Eberth: ''Beiträge zur Geschichte von Hausen und Kleinbrach. Ein geschichtliches Lesebuch für Hausener und Kleinbracher und die es werden wollen.'' Band 2. Theresienbrunnen-Verlag, Bad Kissingen 2010, {{DNB|1009635379}}.
* Bad Kissingen (Hrsg.), Benno Dichtel: Als das Rathaus noch ein Schloss war. Aus der Geschichte eines fränkischen Adelsgeschlechtes – ein Familienmitglied erinnert sich, Ausgabe Version 06, Nov. 2012
* Cornelia Oelwein: ''Max Littmann (1862–1931): Architekt • Baukünstler • Unternehmer'', Sonderpublikationen des Stadtarchivs Bad Kissingen, Band 7, herausgegeben von Peter Weidisch, Michael Imhof Verlag, 2013, ISBN 978-3-865-68-923-8
* Werner Bartsch: ''Das Rathaus in Bad Kissingen – Johann Dientzenhofers Planung zum Heußleinschen Schloss'', Bad Kissinger Archiv-Schriften, hrsg. von Peter Weidisch, Band 3, Michael-Imhof-Verlag, 2015, ISBN 978-3-86568-674-9
* Werner Eberth, Peter Ziegler: ''Das Kurtheater im Bade Kissingen.'' Theresienbrunnen-Verlag, Bad Kissingen 2015, {{DNB|1072257564}}
* Werner Eberth: ''Der Deutsche Krieg von 1866 im Landkreis Bad Kissingen.'' Theresienbrunnen-Verlag, Bad Kissingen 2016, {{DNB|1103677756}}
* Gerhard Wulz: ''Der Kapellenfriedhof in Bad Kissingen. Ein Führer mit Kurzbiografien.'' Stadt Bad Kissingen, Bad Kissingen 2001, 2. erweiterte und überarbeitete Ausgabe, Bad Kissingen 2019, ISBN 978-3-934912-24-3
* Cornelia Oelwein, Annette Späth: ''Kaiserlich & inkognito: Sisi in Bad Kissinge'' (= Bad Kissinger Museums-Informationen. Heft 11. Herausgegeben von Peter Weidisch). Verlag Stadt Bad Kissingen, Bad Kissingen 2023, ISBN 978-3-934912-29-8.
== Weblinks ==
* [https://osthessen-news.de/n1116873/rh%C3%B6n-bad-kissingen-weiterhin-nummer-1-als-deutschlands-bekanntester-kurort.html Bad Kissingen weiterhin Nummer 1 als Deutschlands bekanntester Kurort – osthessen-news.de, 03.07.2005 (abgerufen am 16.01.2023)]
* [https://www.badkissingen.de/kultur/unesco-welterbe – UNESCO-Welterbe in Bad Kissingen (abgerufen am 16.01.2023)]
* [https://welterbe.badkissingen.de/ Great Spa Towns of Europe - Bad Kissingen (abgerufen am 16.01.2023)]
* [https://www.fuldaerzeitung.de/unterfranken/unesco-welterbe-hessen-bayern-bad-kissingen-darmstadt-china-dirk-vogel-jochen-partsch-90884925.html Fuldaer Zeitung, 28.07.2021 – Bad Kissingen ist nun Unesco-Welterbe: Großer Jubel im Kurort (abgerufen am 16.01.2023)]
* [https://www.faz.net/aktuell/feuilleton/debatten/unesco-darmstaedter-mathildenhoehe-baden-baden-bad-ems-und-bad-kissingen-weltkulturerbe-17452778.html FAZ.net, 24.07.2021 – UNESCO hat entschieden: Mathildenhöhe, Baden-Baden, Bad Ems, und Bad Kissingen sind Welterbe (abgerufen am 16.01.2023)]
* [https://www.infranken.de/lk/bad-kissingen/welterbeurkunde-uebergeben-bad-kissingen-feiert-art-5574087 Welterbeurkunde übergeben: Bad Kissingen feiert (abgerufen am 16.01.2023)]
* [https://www.br.de/nachrichten/bayern/unesco-welterbe-bad-kissingen-erhaelt-ernennungsurkunde,TLR9fOi BR.de, 27.10.2022 – infranken.de, 28.10.2022: Unesco-Welterbe: Bad Kissingen erhält Ernennungsurkunde (abgerufen am 16.01.2023)]
== Einzelnachweise ==
<references/>
== Projektdefinition ==
* '''Zielgruppe:''' "Alle Interessierten"
* '''Lernziele:''' Bad Kissingen, Marienkapelle, Kapellenfriedhof, Ortsgeschichte"
[[Kategorie: Buch]]
jgn03owp1q6odc5u7n8ru3e2hlhev6f
Ing Mathematik: Python
0
117969
1086427
1086401
2026-05-20T16:29:03Z
Intruder
1513
/* Thermodynamik */
1086427
wikitext
text/x-wiki
{{Navigation_zurückhochvor_buch|
zurücktext=Julia für Ingenieure|
zurücklink=Ing Mathematik: Julia|
hochtext=Gesamtinhaltsverzeichnis|
hochlink=Ing:_Mathematik_für_Ingenieure|
vortext=Landau-Notation|
vorlink=Ing Mathematik: Landau}}
= Hallo Welt und allgemeine Hinweise =
== Was ist Python ==
* Python ist eine universelle höhere Programmiersprache.
* Python ist objektorientiert.
* Python ist Open-Source (Python Software Foundation License).
* Python ist für viele Betriebssysteme erhältlich (z.B. für Linux, MS Windows, macOS).
* Python ist ein Interpreter.
* Python ist durch Module fast beliebig erweiterbar.
* Python als Programmiersprache ist case-sensitive - d.h. Groß- und Kleinschreibung ist relevant bei der Eingabe von Befehlen.
{{Wikipedia | Python (Programmiersprache)}}
== Python installieren ==
=== MS Windows ===
Laden Sie das aktuelle Python-Paket von der Webseite [https://www.python.org/] herunter. Weiter geht es wie bei jedem anderen größeren zu installierenden Programm. Einfach das Installationsprogramm im Explorer doppelklicken und den Anweisungen des Setup-Programmes folgen.
=== Linux ===
Entweder ist Python bereits standardmäßig installiert, ansonsten ist die Installation mittels Paketmanagementsystem einfach möglich. Aber auch die Spyder-Entwicklungsumgebung ([https://www.spyder-ide.org]) bietet einen guten Einstieg mit Python (das gilt auch für MS Windows). Spyder bringt auch schon etliche wichtige Module standardmäßig mit.
== Python starten ==
=== MS Windows ===
Das Icon für das Python-Programm doppelklicken. Und schon startet das Programm.
[[Datei:PythonIng_start1.jpg]]
Python im interaktiven Modus präsentiert sich dann so:
Python 3.12.4 (tags/v3.12.4:8e8a4ba, Jun 6 2024, 19:30:16) [MSC v.1940 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
Alternativ kann das Programm auch über die Eingabeaufforderung oder die PowerShell gestartet werden:
c:\devel\Python>python.exe
Python 3.12.4 (tags/v3.12.4:8e8a4ba, Jun 6 2024, 19:30:16) [MSC v.1940 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
=== Linux ===
Tippen Sie einfach das Wort „python“ (oder unter openSUSE Tumbleweed z.B. auch „python3.11“ oder „python3.13“) in einem Linux-Terminal ein, schließen den Befehl mit der RETURN-Taste ab, und schon startet Python im interaktiven Modus:
Python 3.13.12 (main, Feb 09 2026, 22:37:44) [GCC] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
Es gibt auch noch andere Möglichkeiten Python zwecks Programmausführung zu starten, z. B. den {{W|Shebang}} (<code>#!</code>) am Beginn eines Python-Scripts. Das Script sei als Script.py gespeichert. Dann kann das Script mit ./Script.py ausgeführt werden. Für openSUSE Tumbleweed sei nachfolgend ein lauffähiges "Hallo Welt!"-Script angegeben. Es wird in diesem Script der Python-Interpreter in der Version 3.13 verwendet :
#!/usr/bin/python3.13
print("Hallo Welt!")
Die Berechtigungen zum Ausführen der Datei müssen natürlich noch richtig gesetzt werden, z.B. mittels <code>chmod 777 Script.py</code>.
<small>Oder es wird in einen Pfad verschoben, in dem sich ausführbare Programme generell befinden (<code>echo $PATH</code>). Das Script kann dann wie ein normales Programm ohne weitere Angaben mit Script.py gestartet werden. Alternativ wird nicht das Script an sich verschoben, sondern nur ein symbolischer Link angelegt, z.B. mit <code>ln -s ~/tmp/Script.py ~/.local/bin/Script.py</code>.<code>~/.local/bin</code> sei ein im PATH gelegenes Verzeichnis. Dies sind aber schon Features für fortgeschrittene Linux-Benutzer und werden am Anfang eher selten benötigt.</small>
== Ein paar Worte zur Erklärung ==
Getestet wurden die Beispiele unter den Betriebssystemen
* MS Windows 10 mit der Python-Version 3.12.0 (teilweise auch mit 3.12.2 und 3.13.1; nur die Inhalte die bis spätestens Juli 2025 erstellt wurden)
* MS Windows 11 ab der Python-Version 3.13.4 (nur zum Teil; ab Juli 2025)
* openSUSE Leap 15.6 mit der Python-Version 3.11.12 (Spyder, nur vereinzelt) und zum Teil mit 3.12.11 (ab Juli 2025 bis November 2025).
* openSUSE Tumbleweed ab der Python-Version 3.13.9 (nur vereinzelt, ab November 2025)
An Beliebtheit rangiert Python mit Stand März 2026 mit einem Rating von 21,25% an 1. Stelle vor C und C++ (lt. [https://www.tiobe.com/tiobe-index/ TPCI - TIOBE Programming Community Index]). Lt. [https://innovationgraph.github.com/global-metrics/programming-languages GitHub Top 50 Programming Languages Globally] lag Python im Q3/2025 auf Rang 2, vor TypeScript und hinter JavaScript. Der Name "Python" rührt von der Komikertruppe {{W|Monty Python}} her. Die Icons für Python (z.B. Python selbst, Eric IDE, IDLE) sind aber durch die Python-Schlangenart symbolisiert.
<gallery>
Python-logo-notext.svg|Python-Logo
Guido van Rossum OSCON 2006.jpg|Guido van Rossum (geb. 1956), der Erfinder von Python
</gallery>
== Ein erstes Programm ==
Kommentare werden in Python mit der Raute (#) eingeleitet. Sie werden vom Python-Interpreter ignoriert. Text kann mit der print-Funktion ausgegeben werden. Starten Sie Python und geben sie folgende Anweisungen zeilenweise ein
>>> # Das ist ein Kommentar
>>> print("Hallo Welt!")
Als Ergebnis erhalten Sie
Hallo Welt!
Der Prompt (>>>) ist selbstverständlich nicht einzutippen, sondern wird vom Python-System geliefert.
Strings können in Python entweder in Anführungszeichen (") gesetzt werden oder in Hochkommatas('). In diesem Text wird die erste Variante bevorzugt eingesetzt.
Im Gegensatz zu Julia ist es hier egal, ob zwischen <code>print</code> und der öffnenden Klammer Leerzeichen stehen.
= Python als Taschenrechner =
== Allgemeines ==
Wir wollen 3 * 5 berechnen. Dazu starten wir Python im interaktiven Modus. Geben Sie dann die Formel
>>> 3 * 5
ein, drücken die Taste ENTER/RETURN ({{Taste|↵}}) und erhalten als Ergebnis
15
Auch kompliziertere Ausdrücke sind möglich. Beispielsweise mit Winkelfunktionen, Quadratwurzeln etc. Wir wollen nun den Ausdruck <math>\sin\sqrt{15}</math> berechnen :
>>> import math
>>> math.sin(math.sqrt(15))
-0.6679052983383519
Als erstes wird das math-Modul importiert. Dann wird der mathematische Ausdruck berechnet.
Eine andere Variante, die dasselbe Ergebnis liefert, ist
>>> from math import *
>>> sin(sqrt(15))
-0.6679052983383519
Es wird also aus dem Modul <code>math</code> alles importiert (erkennbar am <code>*</code>). Will man nicht alles importieren, so kann man das auch einschränken:
>>> from math import sin, sqrt
Beenden lässt sich das Python-Programm durch Eingabe von <code>exit()</code> (und natürlich ist zur Bestätigung die RETURN-Taste zu drücken).
== Die Hilfefunktion von Python ==
Bei Eingabe der Anweisung help() springt Python in den Hilfemodus.
Eingabe:
>>> help()
Eingabe:
help> math.sin
Ausgabe:
Help on built-in function sin in math:
math.sin = sin(x, /)
Return the sine of x (measured in radians).
Für die komplette Python-Dokumentation siehe [https://docs.python.org/3/]. Verlassen kann man den Hilfemodus durch das Drücken von STRG-C.
== Aufgaben ==
* Erkunden Sie die Tangensfunktion "tan" mittels Python-Hilfe (vergessen Sie nicht das math-Modul zu importieren und das <code>math.</code> vor <code>tan</code>)
* Berechnen Sie mit Python den Ausdruck <math>\frac{1}{2}\cdot \text{e}^2 \cdot \tan(\pi/3)</math>. Siehe für die Exponentialfunktion im Python-Hilfesystem auch den Befehl <code>math.exp</code>. Alternativ kann auch die Konstante <code>math.e</code> eingesetzt werden. Potenzieren kann man bei Python mit dem **-Operator (z.B. 2**3 = 8). Für <math>\pi</math> gibt es <code>math.pi</code>.
= Python als Scriptsprache =
Häufig wird man aber kompliziertere Anweisungsfolgen verarbeiten müssen. Diese will man normalerweise nicht jedesmal neu eingeben, sondern in einer Datei speichern und diese Datei dann zur Ausführung bringen. Speichern Sie dazu folgenden Code in einer Textdatei, z.B. unter MS Windows als c:\tmp\test1.py
# Das ist ein Kommentar
print("Hallo Welt!")
Python-Dateien werden mit der Dateiendung .py versehen. Achten Sie darauf, dass vor dem print keine Leerzeichen vorhanden sind. Das ist eine Python-Eigenheit. Wie wir später sehen werden, nutzt Python Einrückungen als syntaktisches Mittel, z.B. um bei Schleifen den Schleifenkörper zu kennzeichnen.
Danach bringen Sie die Skriptdatei test1.py (sozusagen das Hauptprogramm) folgendermaßen zur Ausführung:
1) Starten Sie unter MS Windows die Eingabeaufforderung (oder alternativ auch die Windows PowerShell). Das sieht dann etwa so aus:
Microsoft Windows [Version 10.0.19045.3693]
(c) Microsoft Corporation. Alle Rechte vorbehalten.
C:\Users\xyz>
: <small>Falls jemand nicht weiß, wie man die Eingabeaufforderung startet: Eine Möglichkeit ist, einfach in der Taskleiste von Windows das "Start"-Symbol ([[Image:Windows_logo_-_2021_(Black).svg|10px]]) mit der rechten Maustaste anklicken. "Ausführen" auswählen (oder alternativ für die PowerShell unter Windows 10 den Eintrag "Windows PowerShell", unter Windows 11 den Eintrag "Terminal"). Im sich öffnenden Dialogfenster gibt man in die "Öffnen"-Zeile das Wort <code>cmd</code> ein und mit "OK" wird das Ganze bestätigt.</small>
2) Wechseln Sie mittels <code>cd c:\tmp</code> in das Verzeichnis c:\tmp
3) Angenommen, Sie haben Python unter dem Pfad <code>c:\devel\Python\</code> installiert. Starten Sie das Programm so (der Prompt <code>c:\tmp></code>ist natürlich nicht mit einzutippen):
c:\tmp>c:\devel\Python\python.exe test1.py
4) Wie erwartet ergibt sich folgende Ausgabe am Bildschirm
Hallo Welt!
Die Vorgehensweise unter Linux ist prinzipiell gleich. Die kleinen Unterschiede, wie z.B. der Slash statt dem Backslash in Pfadangaben, sollten für Linux-Benutzer keine Hürde darstellen.
== Variablen ==
Variablenbezeichner können aus Buchstaben (A-Za-z), Ziffern (0-9) und Underscores (_) bestehen, dürfen aber nicht mit einer Zahl beginnen. Führende Underscores haben u.a. im Kontext mit der Objektorientierten Programmierung eine spezielle Bedeutung und sollten nicht für "normale" Variablenbezeichner verwendet werden.
Gültige Variablenbezeichner wären also:
xyz
x1
_wert
name_anzahl
Es gibt in Python etliche Schlüsselwörter (z.B. for, if oder return). Diese dürfen nicht als eigene Variablenbezeichner verwendet werden. Eine Liste aller Schlüsselwörter liefert das Script
import keyword
print(keyword.kwlist)
<small>Übung: Speichern Sie dieses Script in eine Datei, z.B. in c:\tmp\test1.py. Führen Sie diese Datei aus, um die Liste der Schlüsselwörter auszugeben.</small>
Da Python case-sensitiv ist, repräsentieren folgende Bezeichner verschiedene Variablen:
xyz
XYZ
xYz
Werte werden an Variablen mittels Gleich-Zeichen (=) zugewiesen. Im Folgenden wird der Code immer in der Datei c:\tmp\test1.py gespeichert.
x = 5
y = 10
z = x*y
print(z)
Bringen Sie die Datei test1.py zur Ausführung so erhalten Sie folgende Bildschirmausgabe
50
Sie können auch mehrere Anweisungen in einer Zeile durch Semikolon getrennt schreiben. Dies führt aber zu unübersichtlichem Code.
x = 5; y = 10; z = x*y; print(z)
Ausgabe:
50
Auch aus der Programmiersprache C/C++ oder Java bekannte Konstrukte können Sie verwenden, z.B.
x = 5
# x = x - 2
x -= 2
print(x)
Bildschirmausgabe:
3
Beachten Sie, dass mit dem =-Zeichen eine Wertezuweisung durchgeführt wird. Dies ist nicht äquivalent zum mathematischen =-Zeichen, wie am vorigen Beispiel zu ersehen ist. Den Inkrement-/Dekrementoperator (z.B. x++ oder x--) aus C/C++ oder Java kennt Python aber nicht.
Variablen sind nicht an einen bestimmten Datentyp gebunden, folgendes ist mit Python problemlos möglich:
import math
wert = 10
print(wert)
wert = 35.5
print(wert)
wert = "Hallo"
print(wert)
wert = math.pi
print(wert)
Ausgabe:
10
35.5
Hallo
3.141592653589793
== Physische und logische Zeilen ==
In Python muss eine Anweisung in einer logischen Zeile Platz finden. Wird eine Anweisung aber zu lang für eine Zeile, dann kann sie in mehrere physische Zeilen unterteilt werden. Dies kann einerseits durch einen Backslash am Ende einer Zeile geschehen, z.B.
a = 2 + \
5
Dies stellt eine logische Zeile dar, die in zwei physische Zeilen unterbrochen ist.
Geklammerte Ausdrücke werden automatisch zu einer logischen Zeile verbunden, z.B.
a = (2 +
5)
Achtung: Im ersten Beispiel darf nach dem Backslash nichts mehr stehen, auch kein Kommentar. Dies trifft im zweiten Bespiel nicht zu, hier könnte noch ein Kommentar folgen, z.B.
a = (2 + # Kommentar
5)
Auch für Strings gibt es Möglichkeiten, diese auf mehrere Zeilen aufzuspalten.
# Kurzer String
str1 = "ABC"
# Langer String
str2 = """Hallo Welt,
Grüetzi Schwyzer,
Servus an alle"""
# Backslash
str3 = "UVW\
XYZ"
# Mit Klammern
str4 = ("Sehr langer Text, der automatisch .............. "
"in einer einzigen Variable zusammengefügt wird."
)
print(str1)
print(str2)
print(str3)
print(str4)
Ausgabe:
ABC
Hallo Welt,
Grüetzi Schwyzer,
Servus an alle
UVWXYZ
Sehr langer Text, der automatisch .............. in einer einzigen Variable zusammengefügt wird.
==Hexadezimale, oktale, binäre und andere Zahlen==
d = 1050 # Dezimalzahl
h = 0xAA2 # Hexadezimalzahl
o = 0o12 # Oktalzahl
b = 0b100001101 # Binärzahl
print(d)
print(h)
print(o)
print(b)
Ausgabe:
1050
2722
10
269
Groß- und Kleinbuchstaben sind in obigen Literalen übrigens egal. So kann man z.B. statt <code>0b1001</code> auch <code>0B1001</code> schreiben (siehe dazu [https://docs.python.org/3/reference/lexical_analysis.html#integer-literals]).
Sie können auch dezimale in hexadezimale Zahlen umwandeln, usw.:
h = hex(1050) # Dezimalzahl -> Hexadezimalzahl
b = bin(1050) # Dezimalzahl -> Binärzahl
o = oct(1050) # Dezimalzahl -> Oktalzahl
print(h)
print(b)
print(o)
Ausgabe:
0x41a
0b10000011010
0o2032
Gegeben sei die Zahl 121 zur Basis 3. Diese soll in eine Dezimalzahl umgewandelt werden. Das kann so geschehen:
z = int("121", 3)
print(z)
Ausgabe:
16
Dass dies richtig ist, davon kann man sich folgendermaßen überzeugen:
<math> 1 \cdot 3^2 + 2 \cdot 3^1 + 1 \cdot 3^0 = 9 + 6+ 1 = 16 </math>
Zahlen übersichtlicher schreiben kann man auch mittels Underscore, z.B.:
print("Eine Million (Variante 1) =", 1000000)
print("Eine Million (Variante 2) =", 1_000_000)
print("Eine Rechnung:", 2_000 * 400_000);
Es ergibt sich bei beiden Varianten die gleiche Ausgabe. Variante 2 ist aber im Sourcecode leichter lesbar, detto die Zahlen in der Rechnung:
Eine Million (Variante 1) = 1000000
Eine Million (Variante 2) = 1000000
Eine Rechnung: 800000000
== Strings und Platzhalter==
Ein paar einfache Beispiele:
print("Hallo {}" . format("Hugo"))
print("Hallo {:s}" . format("Hugo"))
print("Hallo %s" % "Hugo")
Ausgabe:
Hallo Hugo
Hallo Hugo
Hallo Hugo
Python-Code (formatted string literals):
str1 = "Hallo"
str2 = "Hugo"
print(f"{str1} {str2}")
Ausgabe:
Hallo Hugo
Komplexere Beispiele:
print("Hallo {} und {}" . format("Hugo", "Mike"))
print("Hallo {name1} und {name2}" . format(name2="Hugo", name1="Mike"))
# Füllzeichen: *
# Bündigkeit: > (=rechts), < (=links), ^ (=zentriert)
# Feldweite: 10
# Typ: s (=String), f (=Gleitkommazahl), d (=Dezimalzahl) etc.
print("Hallo {:*>10s}" . format("Hugo"))
print("Hallo {:*<10s}" . format("Hugo"))
Ausgabe:
Hallo Hugo und Mike
Hallo Mike und Hugo
Hallo ******Hugo
Hallo Hugo******
Python-Code:
str = "Hallo\t%s\t%7.2f\t%10.2e\t%i" % ("Hugo", 12.34567, 34.567, 264)
print(str)
Ausgabe:
Hallo Hugo 12.35 3.46e+01 264
== Unicode ==
Neben den bekannten ASCII-Zeichen lassen sich Zeichen auch mittels Unicode beschreiben. Griechische Buchstaben oder komplexere mathematische Operatoren - all das sollte kein Problem sein. Siehe auch {{W|Unicode}}, {{W|Liste der Unicodeblöcke}} und {{W|Unicodeblock Mathematische Operatoren}}. Im Folgenden werden ein paar Zeichen (Allquantor, Nabla-Operator, Existenzquantor), die man aus der Mathematik kennt, erzeugt.
ch1 = "\N{FOR ALL}"
ch2 = "\N{NABLA}"
ch3 = "\u2203"
print(ch1, ch2, ch3)
Ausgabe:
∀ ∇ ∃
<small>Diese Ausgabe ergibt sich z.B. mit der IDLE-Shell oder mit Cygwin. Beim Ausführen über die Windows-Eingabeaufforderung oder Windows PowerShell unter MS Windows 10 erfolgt keine korrekte Darstellung. IDLE ist die mit Python mitgelieferte IDE ('''I'''ntegrated '''D'''evelopment '''E'''nvironment, Integrierte Entwicklungsumgebung). Gegen Ende dieses Textes wird IDLE kurz beschrieben.
Das Problem mit der Windows Eingabeaufforderung lässt sich aber umgehen. Man muss nur eine Schriftart auswählen, die die Zeichen kennt, z.B. "DejaVu Sans Mono". Dazu klicken Sie einfach bei der Eingabeaufforderung mit der rechten Maustaste oben auf die weiße Leiste und wählen im aufpoppenden Fenster den Menüpunkt "Eigenschaften". Es öffnet sich ein Dialogfenster. Über den Reiter "Schriftart" lässt sich nun die Schriftart einstellen. Unter MS Windows 11 oder openSUSE Leap 15.6 (bash-Konsole) gibt es dieses Problem ohnehin nicht.</small>
== Reguläre Ausdrücke ==
Python kennt auch {{W|Regulärer Ausdruck|reguläre Ausdrücke}}. Dazu gibt es in Python das Modul <code>re</code>. Beipielsweise sollen alle Zahlen (<math>\text{zahl}\in\mathbb{N}_0</math>) in einem String gesucht und ausgegeben werden. Als String sei gegeben: <code>3x Grüße und 100 Kekse.</code> Das Muster (Pattern) ist <code>\d+</code>. <code>\d</code> steht für eine Dezimalziffer 0-9. Das Plus-Zeichen (+) steht symbolisch für ein oder mehrere Zeichen des vorherigen Ausdrucks. Hier also ein oder mehrere Dezimalziffern. Es wird die Funktion <code>findall</code> aus dem Modul <code>re</code>verwendet.
Python-Code:
from re import findall
str = "3x Grüße und 100 Kekse."
pat = "\\d+" # Doppel-Backslashes müssen verwendet werden, sonst gibt Python eine Warnung aus!
# alternativ: pat = r"\d+"
# oder: pat = "[0-9]+"
numb = findall(pat, str)
print(numb)
Ausgabe:
['3', '100']
Python kennt noch viele weitere Möglichkeiten mittels regulärer Ausdrücke zu hantieren. Dies soll hier aber nicht vertieft werden, da das Thema schon ziemlich speziell und komplex ist. Bei Bedarf siehe aber z.B. die Bücher ''Weigend, Seite 380ff'' und ''Ernesti, Kaiser'' [https://openbook.rheinwerk-verlag.de/python/28_001.html] oder die Python-Dokumentation [https://docs.python.org/3/library/re.html]. Auch [[Python unter Linux: Reguläre Ausdrücke]] liefert ein umfangreiches und brauchbares Python-2-Kapitel zu den regulären Ausdrücken. Die dort gelisteten Beispiele müssten ggf. vor Verwendung auf Python-3 umgeschrieben werden. <small>Wie macht man das? Dazu siehe z.B. [https://openbook.rheinwerk-verlag.de/python/43_001.html], [https://portingguide.readthedocs.io/en/latest/] oder [https://www.digitalocean.com/community/tutorials/how-to-port-python-2-code-to-python-3]</small>
<small>Es gibt auch ein externes Modul ''regex'', das bei Bedarf extra installiert werden muss ([https://pypi.org/project/regex/]). Es bietet zusätzliche Funktionalität und gründlicheren Unicode-Support. Dies sei hier aber nur der Vollständigkeit halber erwähnt.</small>
== Verzweigungen ==
=== if ===
Die IF-Verzweigung ist aus anderen Programmiersprachen bereits bekannt. In Pseudocode lässt sie sich folgendermaßen darstellen:
WENN bedingung TRUE
führe block1 aus
SONST
führe block2 aus
ENDE
In Python gibt es keinen expliziten ENDE-Kennzeichner. Stattdessen wird der Code durch Einrückungen strukturiert. Alles mit der gleichen Einrückungstiefe gehört zum selben Block. Dies zeichnet Python vor anderen Programmiersprachen aus.
Die test1.py-Datei laute also wie folgt:
x = 5
if x < 4:
print("x ist kleiner als 4")
else:
print("Der else-Zweig wird ausgefuehrt")
print("x ist groesser oder gleich 4")
Ausgabe:
Der else-Zweig wird ausgefuehrt
x ist groesser oder gleich 4
Man achte auch auf die Doppelpunkte in der if- und else-Zeile. Darauf vergisst man gerne, wenn man von anderen Programmiersprachen kommt.
Folgendes wäre in Python ein Fehler (genauer gesagt ein IndentationError).
x = 5
if x < 4:
print("x ist kleiner als 4")
else:
print("Der else-Zweig wird ausgefuehrt")
print("x ist groesser oder gleich 4")
Auch Nachstehendes würde nicht zum gewünschten Ergebnis führen (löst aber keine Fehlermeldung aus). Der letzte print-Befehl ist schon außerhalb der IF-ELSE-Verzweigung.
x = 3
if x < 4:
print("x ist kleiner als 4")
else:
print("Der else-Zweig wird ausgefuehrt")
print("x ist groesser oder gleich 4")
Ausgabe:
x ist kleiner als 4
x ist groesser oder gleich 4
Python kennt eine Reihe von Vergleichs- und Verknüpfungsoperatoren:
<, <= ... kleiner (gleich)
>, >= ... größer (gleich)
== ... gleich
!= ... ungleich
is ... identisch
is not ... nicht identisch
and ... AND
or ... OR
not ... NOT
Beispielsweise:
a = 5
b = 9
if a<=10 and b!=7:
print("OK")
else
print("Nicht OK")
Ausgabe:
OK
Der else-Block kann übrigens auch ersatzlos entfallen.
Mehrfache Verzweigungen werden durch das elif-Konstrukt erstellt.
a = 14
if a<=10:
print("<=5")
elif a>11 and a<15:
print("11 bis 15")
elif a>16 and a<20:
print("16 bis 20")
else:
print(">=20")
Ausgabe:
11 bis 15
In Python gibt es auch die Schlüsselwörter <code>True</code> (für wahr) und <code>False</code> (für falsch). Man beachte, dass sie mit Großbuchstaben beginnen. Andere Schreibweisen wären ein Fehler. Sie gehören zum Datentyp <code>bool</code>. Ihnen sind auch die Zahlen <code>1</code> und <code>0</code> zugewiesen.
=== match ===
Ab Python 3.10 gibt es auch die match-Anweisung. Dies ist das Python-Pendant für die switch-Anweisung in anderen Programmiersprachen, geht aber bei näherer Betrachtung weit darüber hinaus. Hier nur ein einfaches Beispiel:
x = "Hello"
match x:
case "Servus" | "Ciao": # or
print("Servus an alle")
case "Grüetzi":
print("Grüetzi Schwyzer")
case _: # other, default, sonstiges ...
print("Hallo Welt")
Ausgabe:
Hallo Welt
Für nähere Details siehe z.B. [https://www.geeksforgeeks.org/python-match-case-statement/], [https://learnpython.com/blog/python-match-case-statement/], [https://docs.python.org/3/tutorial/controlflow.html#match-statements] und das Python Enhancement Proposal (PEP) 636 – Structural Pattern Matching: Tutorial [https://peps.python.org/pep-0636] und dort insbesondere den Anhang A - Quick Intro.
<small><code>match, case, _</code> etc. sind sogenannte ''soft keywords''. Im Gegensatz zu den normalen Schlüsselwörtern dürfen ihnen auch Werte zugewiesen werden. Eine Liste der weichen Schlüsselwörter lässt sich durch <code>keyword.softkwlist</code> erstellen (die Anweisung gibt es seit Python 3.9). Siehe dazu auch [https://stackoverflow.com/questions/65800344/what-are-soft-keywords] und [https://docs.python.org/3/library/keyword.html#keyword.softkwlist].</small>
== Schleifen ==
=== while ===
Die WHILE-Schleife ist kopfgesteuert. Sie funktioniert wie aus anderen Programmiersprachen bekannt.
In Pseudocode:
SOLANGE bedingung TRUE
führe block aus
ENDE
In Python:
x = 0
while x <= 10:
print(x)
x += 1
Ausgabe:
0
1
2
3
4
5
6
7
8
9
10
=== for ===
for x in range(6):
print(x*2)
Ausgabe:
0
2
4
6
8
10
Die Schleife läuft von 0 bis 5. Ausgegeben wird jeweils der Wert x*2. Aquivalent kann diese Schleife auch so geschrieben werden:
for x in range(0, 11, 2):
print(x)
Die Ausgabe ist wie oben. Der Startwert sei 0, der Endwert ist 11-1 und die Schrittweite ist 2.
Ein anderes Beispiel sei
for x in "text":
print(x)
Ausgabe:
t
e
x
t
== Schleifen abbrechen ==
=== break ===
<code>break</code> bricht die Schleife ab und setzt mit dem nächsten Befehl außerhalb der Schleife fort.
for var in range(100):
print(var)
if var == 5:
break
Ausgabe:
0
1
2
3
4
5
=== continue ===
<code>continue</code> bricht den aktuellen Schleifendurchlauf ab und setzt mit dem nächsten Schleifendurchlauf fort.
for var in range (11):
if var == 5:
continue
print(var)
Ausgabe:
0
1
2
3
4
6
7
8
9
10
== try - except ==
try:
z1 = 12 / 0
print(z1)
except ZeroDivisionError:
print("Das Ergebnis ist unendlich")
except:
print("Kann nicht berechnet werden!")
print("Bitte die Formel korrigieren!")
Ausgabe:
Das Ergebnis ist unendlich
Es wird versucht, eine Zahl durch Null zu dividieren. Das ist nicht möglich, es wird eine Ausnahme ausgelöst. Das Programm springt daher in den except-ZeroDivisionError-Block und führt die dort gelisteten Anweisungen aus (in unserem Fall eine print-Anweisung). Würden wir dieses Programm ohne try-except ausführen, so ergibt sich aus
z1 = 12 / 0
print(z1)
folgende Fehlermeldung und ein unmittelbarer Programmabbruch
Traceback (most recent call last):
File "C:\tmp\test1.py", line 1, in <module>
z1 = 12 / 0
ZeroDivisionError: division by zero
Mit dem try-except-Mechanismus können also Ausnahmen oder Fehler aufgefangen und behandelt werden. In unserem Beispiel ist das eher trivial, aber bei größeren Programmen kann das durchaus Sinn machen.
== pass ==
Ein leerer Block muss in Python mittels dem Schlüsselwort <code>pass</code> dargestellt werden. Z.B.
x = 2
if x == 1:
print("Wert ist ", x)
else:
pass
Würde man das <code>pass</code> im else-Block weglassen, so würde man eine Fehlermeldung erhalten:
IndentationError: expected an indented block after 'else' statement on line 5
= Funktionen =
== Aufrufen von Funktionen ==
Funktionen sind uns im Rahmen dieses Kurses schon zuhauf begegnet. Sei es die print()-, die math.sin()- oder die hex()-Funktion. All diese Funktionen werden von Python zur Verfügung gestellt, ohne dass man sie explizit programmieren müsste. Aufgerufen werden diese Funktionen, indem man ihren Namen eintippt, gefolgt von runden Klammern. In diesen Klammern können noch Argumente übergeben werden. Auch Rückgabewerte sind möglich.
== Funktionen selber schreiben ==
Funktionen werden mit dem def-Schlüsselwort (man definiert die Funktion) eingeleitet, danach folgt der Funktionsname, danach wiederum runde Klammern, in denen formale Argumente stehen können. Abgeschlossen wird die def-Zeile mit einem Doppelpunkt. Danach folgt der Funktionskörper. Dieser Funktionskörper muss wiederum eingerückt werden (wie von den Verzweigungen und Schleifen bekannt). Aufgerufen wird diese Funktion, indem man ihren Funktionsnamen eingibt, gefolgt von runden Klammern (ggf. mit den aktuellen Parametern). Z.B.
# Funktion definieren
def halloWelt(i):
# i ... beliebige Ganzzahl
print("Hallo " * i, end="")
print("Welt!")
# Funktion aufrufen
halloWelt(3)
Ausgabe:
Hallo Hallo Hallo Welt!
Unterschied zwischen formalen und aktuellen Parametern:
[[Datei:PythonIng_func1.jpg]]
<small>Aktuelle Parameter werden auch Argumente genannt.</small>
Rückgabe von Funktionswerten:
# Funktion definieren
def mathFunc(a, b):
r1 = a + b
r2 = a * b
return r1, r2
# Funktion aufrufen
a, b = mathFunc(3, 5)
# Ausgabe der zurückgegebenen Werte
print(a)
print(b)
Ausgabe:
8
15
Vorgabeparameter, z.B.:
def mathFunc(a=10, b=20):
r1 = a + b
r2 = a * b
return r1, r2
a, b = mathFunc(3, 5)
print(a)
print(b)
a, b = mathFunc(5)
print(a)
print(b)
a, b = mathFunc(b=6)
print(a)
print(b)
Ausgabe:
8
15
25
100
16
60
== Lambda-Funktionen ==
print((lambda a, b: a*b) (3, 5))
Ausgabe:
15
Eingeleitet wird eine Lambda-Funktion (auch Lambda-Form, Lambda-Operator oder anonyme Funktion genannt) mit dem Schlüsselwort <code>lambda</code>. Es folgen die formalen Argumente, danach ein Doppelpunkt, die Berechnungsvorschrift und ggf. abschliessend in Klammern die aktuellen Parameter.
Man kann einer Lambda-Funktion auch einen Funktionsnamen geben und die Funktion über diesen Namen aufrufen, z.B.
prod = lambda a, b: a*b
print(prod(3, 5))
Als Ausgabe wird wieder die Zahl 15 geliefert.
== Rekursive Funktionen ==
Funktionen können wiederum andere Funktionen aufrufen. Von einem rekursiven Funktionsaufruf spricht man, wenn die aufgerufene Funktion gleich der aufrufenden ist.
def printFunc(i):
if (i >= 5):
return
else:
print("Hallo Welt")
printFunc(i+1)
printFunc(1)
Ausgabe:
Hallo Welt
Hallo Welt
Hallo Welt
Hallo Welt
== Funktionsannotationen ==
Python ist sehr flexibel, was Typen angeht. Im Vorhergehenden haben wir generell keine Typangaben gemacht. Will man Typen angeben, so bietet Python das Konzept der Funktionsannotation.
def calcFunc(a:int, b:int) -> int:
return a+b, a*b
r1 = calcFunc(8, 9)
r2 = calcFunc(8.0, 9.0)
print(r1)
print(r2)
Ausgabe:
(17, 72)
(17.0, 72.0)
Jetzt sieht man auf den ersten Blick, welche Typen der Programmierer im Sinn hatte, als er die Funktion erstellte. Das Problem dabei ist nur, dass es Python ziemlich egal ist, welche Typen man in Endeffekt eingibt. Im obigen Beispiel können statt Integer-Typen auch Float-Typen eingegeben werden.
== Variadische Funktionen ==
Python-Code:
def test1(a, *b):
print(a);
for c in b:
print(c);
test1("Hallo", "Welt", "Schweizer", "und alle anderen")
Ausgabe:
Hallo
Welt
Schweizer
und alle anderen
Mit dem Stern (auch als Splat-Operator bezeichnet) in der formalen Parameterliste bei der Funktion <code>test1</code> wird angezeigt, dass eine beliebige Anzahl von Argumenten übergeben wird. <small> Dies entspricht in etwa dem, was in anderen Programmiersprachen (PHP etc.) mittels Ellipse (<code>...</code>) angezeigt wird.</small>
= Tupel, Listen und andere =
[[Datei:Python 3. The standard type hierarchy.png|mini|hochkant=1.7|Datentypen und Strukturen]]
Tupel, Listen und einige andere sind Datenstrukturen oder Sequenzen.
Listen (z.B. eine Einkaufsliste) sind veränderbar (mutable). Ein Tupel kann dagegen nicht verändert werden (immutable). Listen werden beim Anlegen in eckige Klammern eingeschlossen, Tupel in runde Klammern. Beim Tupel können die Klammern auch weggelassen werden. Ein Tupel mit nur einem Element muss mit einem Beistrich abgeschlossen werden. Der Grund ist, dass Python sonst nicht entscheiden kann, ob ein Tupel angelegt werden soll, oder nur ein geklammerter Wert. Nachfolgend werden einige Operationen mit Listen und Tupel dargestellt.
Als Gedächtnisstütze kann man sich den Unterschied zwischen Tupel und Liste ev. so leichter merken:
: T'''u'''pel ... r'''u'''nde Klammern, '''u'''nveränderlich
: L'''i'''ste ... eck'''i'''ge Klammern, veränderl'''i'''ch.
# Liste und Tupel
liste = [1, 2, "Hallo"]
tupel = (1, 2, "Hallo")
# Ausgabe von liste und tupel
print(liste)
print(tupel)
# Ausgabe von Einzelelementen
print(liste[1])
print(tupel[2])
# Element an Liste anhängen und einfügen
liste.append(55)
liste.insert(4, "Welt")
print(liste)
# Element aus Liste entfernen
liste.remove(1)
print(liste)
# einige weitere Beispiele
liste2 = [1,]
tupel2 = 1, 2
tupel3 = (1,)
print(liste2)
print(tupel2)
print(tupel3)
Ausgabe:
[1, 2, 'Hallo']
(1, 2, 'Hallo')
2
Hallo
[1, 2, 'Hallo', 55, 'Welt']
[2, 'Hallo', 55, 'Welt']
[1]
(1, 2)
(1,)
Zu den Datenstrukturen gehören weiters auch Mengen und Dictionaries. Mengen sind von der Mathematik bekannt, sie sind ungeordnet und es kommen keine mehrfachen Elemente vor. Dictionaries sind durch Schlüssel :Wert-Paare gekennzeichnet. Mengen werden beim Anlegen wie Dictionaries in geschweifte Klammern eingeschlossen.
dict = {"vorname":"Hugo", "nachname":"Meister" }
menge = {1, 1, 3, 4, 4, 4, "Hallo"}
print(dict)
print(menge)
print(dict["vorname"])
Ausgabe:
{'vorname': 'Hugo', 'nachname': 'Meister'}
{1, 3, 4, 'Hallo'}
Hugo
Geschweifte Klammern ohne Inhalt stellen Dictionaries dar und keine Mengen:
di = {}
print(type(di))
Ausgabe:
<class 'dict'>
== List Comprehensions ==
Aus einer Eingabeliste soll eine Ausgabeliste erzeugt werden. Das kann folgendermaßen geschehen.
Mathematische Schreibweise: <math>lc = \{2x|x\in\ \mathbb{N}, 1\le x < 11\}</math>
Python-Code:
lc = [x*2 for x in range(1,11)]
print(lc)
Ausgabe:
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
Mathematische Schreibweise: <math>lc = \{2x | x \in \mathbb{N}, 1\le x < 11, x \bmod 2 = 0 \}</math>
Python-Code:
lc = [x*2 for x in range(1,11) if x%2 == 0]
print(lc)
Ausgabe:
[4, 8, 12, 16, 20]
Siehe auch {{W|List Comprehension}}.
== Set Comprehensions ==
Dies ist sehr ähnlich wie im vorigen Abschnitt beschrieben. Es wird aber keine Liste, sondern eine Menge erzeugt.
sc = {x*2 for x in range(1,11)}
print(sc)
Ausgabe:
{2, 4, 6, 8, 10, 12, 14, 16, 18, 20}
== Listen zusammenführen - zip() ==
li1 = ["A", "B", "C", "D"]
li2 = [1, 2, 3, 4]
li3 = [5.5, 6.6, 7.7, 8.8]
z = zip(li1, li2, li3)
print(z)
li4 = list(z)
print(li4)
Ausgabe:
<zip object at 0x00000283B6C6AC80>
[('A', 1, 5.5), ('B', 2, 6.6), ('C', 3, 7.7), ('D', 4, 8.8)]
== Generatorausdruck ==
g = (i*2 for i in range(1,11))
print(g)
t = tuple(g)
print(t)
print(t[1:3])
Ausgabe:
<generator object <genexpr> at 0x00000241D2A4A5A0>
(2, 4, 6, 8, 10, 12, 14, 16, 18, 20)
(4, 6)
== Slicing ==
slice ... Scheibe, Teil, in Scheiben schneiden
Beispiel: Zugriff auf Elemente eines geordneten sequentiellen Objekttyps (Liste, Tupel oder String):
str1 = "Hallo"
# Das erste Element wird mit dem Index 0 angesprochen
# [start (inkl.) : stop (exkl.) : step (default=1)]
str2 = str1[0:2]
# Alternativ auch: str2 = str1[:2]
print(str2)
tup1 = (0,1,2,3)
# Das letzte Element hat auch den Index -1, das vorletzte den Index -2 usw.
tup2 = tup1[-3:-1]
print(tup2)
lst1 = [[1, 5, 10, 20],
[30, 40, 50, 60]]
lst2 = lst1[1][1]
print(lst2)
Ausgabe:
Ha
(1, 2)
40
Beispiel: Umdrehen von Strings
str1 = "Hallo"
str2 = str1[::-1]
print(str2)
Ausgabe:
ollaH
= Objektorientierte Programmierung =
== Eine einfache Klasse ==
[[Datei:PythonIng_uml1.svg | 200px]]
class Fahrzeug:
raeder = 4
def __init__(self, geschwindigkeit, leistung):
self.__geschwind = geschwindigkeit
self.__leistung = leistung
def setGeschwindigkeit(self, geschwindigkeit): # geschwindigkeit in km/h
self.__geschwind = geschwindigkeit
def setLeistung(self, leistung):
self.__leistung = leistung
def convertGeschw(self):
# geschwindigkeit in m/s rueckgeben
return self.__geschwind / 3.6
fahr = Fahrzeug(150, 90)
print(fahr.convertGeschw())
Ausgabe:
41.666666666666664
Die Klasse Fahrzeug wird durch das class-Schlüsselwort eingeleitet. raeder ist ein Klassenattribut und public. __init__ wird bei der Objekterzeugung automatisch aufgerufen. Man achte darauf, dass diese Methode immer mit zwei Unterstrichen eingeleitet und abgeschlossen wird. Instanzattributen wird das Wort self vorangestellt. Wir sehen uns z.B. das Attribut self.__geschwind an. Auch hier werden zwei Unterstriche verwendet. Das bedeutet, dass dieses Attribut private ist. Bei den Methoden wird immer self als erster Parameter angegeben. Beim Aufruf der entsprechenden Funktion wird das self aber nicht berücksichtigt.
== Klassen importieren ==
Häufig ist es sinnvoll und übersichtlicher Klassen in eigenen Dateien zu speichern. Das sind dann eigene Module. Abgespeichert werden Sie mit der Endung py, wie bisher auch praktiziert. Aufgerufen werden Sie mit der import-Anweisung. Dann ist aber nur der Dateiname ohne Endung py zu verwenden. Klarer wird das mit einem Beispiel.
Datei c:\tmp\fahrzeug.py
class Fahrzeug:
raeder = 4
def __init__(self, geschwindigkeit, leistung):
self.__geschwind = geschwindigkeit
self.__leistung = leistung
def setGeschwindigkeit(self, geschwindigkeit): # geschwindigkeit in km/h
self.__geschwind = geschwindigkeit
def setLeistung(self, leistung):
self.__leistung = leistung
def convertGeschw(self):
# geschwindigkeit in m/s rueckgeben
return self.__geschwind / 3.6
Datei c:\tmp\test1.py
import fahrzeug
fahr = fahrzeug.Fahrzeug(150, 90)
print(fahr.convertGeschw())
Ausgabe:
41.666666666666664
Die üblichen import-Anweisungen lauten wie folgt:
{| {{prettytable}}
! import-Befehl
! Instanz
|-
| import xyz || xyz.Klasse
|-
| import xyz as x || x.Klasse
|-
| from xyz import Klasse || Klasse
|-
| from xyz import * || Klasse
|}
Der Vorteil der ersten beiden import-Anweisungen ist, dass es kaum zu Namenskollisionen kommen kann. Dafür hat man bei den letzten beiden Varianten weniger Tipparbeit.
== Vererbung ==
[[Datei:PythonIng_uml2.svg | 200px]]
Datei fahrzeug.py:
class Fahrzeug:
raeder = 4
def __init__(self, geschwindigkeit, leistung):
self.__geschwind = geschwindigkeit
self.__leistung = leistung
def setGeschwindigkeit(self, geschwindigkeit): # geschwindigkeit in km/h
self.__geschwind = geschwindigkeit
def setLeistung(self, leistung):
self.__leistung = leistung
def convertGeschw(self):
# geschwindigkeit in m/s rueckgeben
return self.__geschwind / 3.6
class Luftfahrzeug(Fahrzeug):
def __init__(self, geschwindigkeit, leistung, fluegel):
super().__init__(geschwindigkeit, leistung)
self.__flueg = fluegel
def getFlueg(self):
return self.__flueg
Datei test1.py:
import fahrzeug
fahr = fahrzeug.Luftfahrzeug(150, 90, 4)
print(fahr.getFlueg())
Ausgabe:
4
= Grafiken zeichnen =
Für das Zeichnen von Grafiken wird hier das Modul <code>matplotlib</code> verwendet. <code>matplotlib</code> ist ein externes Modul und muss vor der ersten Verwendung installiert werden. Das geht so:
# Starten Sie ein Terminal (bei Windows die Eingabeaufforderung).
# Führen Sie darin folgenden Befehl aus <code>c:\devel\Python\Scripts\pip.exe install matplotlib</code>
pip ist übrigens der Paketmanager von Python ({{W|Pip_(Python)}}).
Optimalerweise installieren wir auch gleich das Modul <code>numpy</code> (Numerical Python). Wir werden es im Folgenden oft benötigen (nicht nur bei den Grafiken). Das funktioniert vom Prinzip her genauso, wie für <code>matplotlib</code> gezeigt.
<small>Verwenden Sie Spyder, so sind diese Schritte nicht nötig. Spyder inkludiert diese Pakete standardmäßig. Unter openSUSE Tumbleweed lassen sich diese Pakete mittels YaST oder zypper installieren.</small>
== 2D ==
=== Graph einer Funktion ===
Es soll die cosh-Funktion im Intervall <math>x\in[-3,3]</math> gezeichnet werden. Der Programmcode lautet in der einfachsten Form:
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(-3., 3.1, .1)
y = np.cosh(x)
plt.plot(x,y)
plt.grid()
plt.show()
Ausgabe:
[[Datei:PythonIng_cosh1.jpg]]
Der Code ist quasi selbsterklärend. Das Untermodul pyplot des matplotlib-Moduls und das numpy-Modul werden importiert. x läuft von -3 bis +3. y wird für jeden x-Wert per Formel ausgerechnet. "plt.plot()" ist der Zeichenbefehl. "plt.show" ist notwendig, um das Fenster mit der Grafik anzuzeigen.
Die Schrittweite 0.1 wurde so gewählt, um einen ausreichend glatten Verlauf des Graphen zu gewährleisten. Das ist immer ein Kompromiss zwischen Berechnungszeit und Ansehnlichkeit. Testen Sie einfach ein paar verschiedene Werte, um ein Gefühl dafür zu zu bekommen. "plt.grid()" zeichnet ein Gitter in die Grafik (kann auch weggelassen werden).
Die Bezeichnungen plt und np könnten auch anders gewählt werden. Es ist aber Konvention, diese so wie hier gezeigt zu wählen.
<small>Mit der im obigen Bild gezeigten Menüleiste kann die dargestellte Grafik nachträglich noch geändert werden (Zoom, Pan, Achsenparameter, Kurvenparameter etc.). Natürlich kann man das alles auch direkt programmieren. Wie das funktioniert wird ansatzweise etwas später gezeigt.</small>
Ein etwas komplexeres Beispiel ist Folgendes:
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(-3., 3.1, .1)
y = np.cosh(x) + 2**x
plt.plot(x,y)
plt.grid()
plt.show()
Ausgabe:
[[Datei:PythonIng_cosh4.png]]
Man beachte, dass im Gegensatz zu Octave und Julia der ominöse Punkt (.) bei 2**x mit Python nicht benötigt wird. Das macht das Programmiererleben etwas einfacher.
=== Graphen mehrerer Funktionen und weiteres ===
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(-3., 3.1, .1)
y1 = np.cosh(x) + 2**x
y2 = np.sin(x) * np.cos(x)
plt.plot(x, y1, label = "cosh(x) + 2**x")
plt.plot(x, y2, label = "sin(x) * cos(x)")
plt.grid()
plt.title("Funktionsgraphen")
plt.xlabel("x")
plt.ylabel("y")
plt.legend(loc="best")
plt.show()
[[Datei:PythonIng_cosh2.png]]
Um die Linienstile etwas individueller zu gestalten, ist folgender Programmcode gedacht:
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(-3., 3.1, .1)
y1 = np.cosh(x) + 2**x
y2 = np.sin(x) * np.cos(x)
plt.plot(x, y1, label = "cosh(x) + 2**x", lw=5, ls="dotted")
plt.plot(x, y2, label = "sin(x) * cos(x)", lw=3, ls="--")
plt.grid()
plt.title("Funktionsgraphen")
plt.xlabel("x")
plt.ylabel("y")
plt.legend(loc="best")
plt.show()
[[Datei:PythonIng_cosh3.png]]
=== Funktion in Parameterdarstellung ===
Es soll die archimedische Spirale <math>x = t \cos(t), y = t \sin(t)</math> im Intervall <math>[0, 6\pi[</math> gezeichnet werden.
import matplotlib.pyplot as plt
import numpy as np
t = np.arange(0., 6*np.pi, .1)
x = t * np.cos(t)
y = t * np.sin(t)
plt.plot(x, y)
plt.grid()
plt.title("Archimedische Spirale")
plt.show()
[[Datei:PythonIng_spirale1.png]]
Diese Darstellung erscheint verzerrt. Will man gleiche Achsenskalierungen, so kann man den plt.axis()-Befehl verwenden.
import matplotlib.pyplot as plt
import numpy as np
t = np.arange(0., 6*np.pi, .1)
x = t * np.cos(t)
y = t * np.sin(t)
plt.plot(x, y)
plt.grid()
plt.title("Archimedische Spirale")
plt.axis("equal")
plt.show()
[[Datei:PythonIng_spirale2.png]]
=== Funktion in Polardarstellung ===
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(projection="polar")
r = np.arange(0, 1, 0.01)
theta = r**3
line = ax.plot(theta, r)
plt.show()
[[Datei:PythonIng_polar1.png]]
=== Logarithmische Achsenskalierung ===
==== Semilog ====
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0., 10, .1)
y = 10**x
plt.plot(x, y)
plt.grid()
plt.semilogy()
plt.show()
Ausgabe:
[[Datei:PythonIng_semilog1.png]]
==== LogLog ====
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0., 10, .1)
y = 10**x
plt.plot(x, y)
plt.grid()
plt.loglog()
plt.show()
[[Datei:PythonIng_loglog1.png]]
=== Gefüllte Fläche ===
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 3, 0.1)
y1 = 3*x - 1
y2 = x**2
plt.plot(x, y1, x, y2, color='black')
plt.fill_between(x, y1, y2, where=y1>=y2)
plt.show()
[[Datei:PythonIng_gefuellt.png]]
=== Linien, Pfeile, Rechtecke, Kreise und Texte ===
import matplotlib as mpl
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
r = mpl.patches.Rectangle((0, 0), 3, 3, angle=30, fill=False)
c = mpl.patches.Circle((4, 4), 2, fill=False)
ax.add_patch(r)
ax.add_patch(c)
ax.plot([-2, 7], [-2, 0], color="black")
ax.arrow(0, 7, 5, 0, length_includes_head=True, head_width=0.5, head_length=1.5,
color="black")
ax.set_aspect("equal")
plt.axis([-3, 8, -3, 8])
plt.show()
[[Datei:PythonIng_linien_pfeile_etc.png]]
Text kann mit <code>ax.text(x, y, "Text")</code> hinzugefügt werden, bspw.
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.text(0.1, 0.1, "Hallo")
ax.text(0.5, 0.5, "Welt", size="40", family="cursive", style="italic",
rotation=30.0)
plt.show()
Oder einfacher auch ohne <code>subplots</code>
import matplotlib.pyplot as plt
plt.text(0.1, 0.1, "Hallo")
plt.text(0.5, 0.5, "Welt", size="40", family="cursive", style="italic",
rotation=30.0)
plt.show()
[[Datei:PythonIng_text1.png]]
Auch Sonderzeichen (griechische Buchstaben etc.) können verwendet werden (siehe dazu auch [https://matplotlib.org/stable/users/explain/text/mathtext.html]).
import matplotlib.pyplot as plt
plt.text(.3, .5,
r'$\Omega\ \psi\ \oint\ \nabla\ \dot a\ \frac{a}{b}\ a_b$',
size="20")
plt.show()
[[Datei:PythonIng_text20.svg]]
Jetzt wird noch gezeigt, wofür <code>subplots</code> sinnvoll eingesetzt werden können.
import matplotlib.pyplot as plt
fig, ax = plt.subplots(nrows=1, ncols=2)
ax[0].text(0.1, 0.1, "Hallo")
ax[1].text(0.1, 0.5, "Welt", size="40", family="cursive", style="italic",
rotation=30.0)
plt.show()
[[Datei:PythonIng_text2.png]]
=== Aufgaben ===
* Zeichnen Sie die Strophoide <math>x = \frac{a(t^2-1)}{t^2+1}, y = \frac{at(t^2-1)}{t^2+1}, a = 2, -3 \leq t \leq 3</math>. Das Ganze sollte in etwa so aussehen wie folgende Grafik:
[[Datei:octave_strophoide.jpg]]
* Zeichnen Sie die verschlungene Hypozykloide <math>x = (R-r)\cos t + c\cos\frac{R-r}{r}t, y = (R-r)\sin t - c\sin\frac{R-r}{r}t, c = 3, r = 2, R = 6, -15 \leq t \leq 15</math>. Das Ganze sollte in etwa so aussehen wie folgende Grafik:
[[Datei:octave_hypozykloide.jpg]]
* Testen Sie bei den obigen Übungsaufgaben verschiedene Linienstile und Farben. Farben können mit dem plt.plot()-Parameter color gewählt werden.
* Testen Sie bei den obigen Übungsaufgaben verschiedene Werte für a, c, r und R.
== 3D ==
=== Räumliche Kurven ===
import matplotlib.pyplot as plt
import numpy as np
t = np.arange(0, 6*np.pi, 0.1)
x = t * np.cos(t)
y = t * np.sin(t)
z = t
fig, ax = plt.subplots(subplot_kw={"projection": "3d"})
ax.plot(x, y, z)
plt.show()
[[Datei:PythonIng_raumkurve1.png]]
=== Flächen ===
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0, 10, 0.1)
y = np.arange(0, 10, 0.1)
x, y = np.meshgrid(x, y)
z = np.sin(x) + 3 * np.cos(y)
fig, ax = plt.subplots(subplot_kw={"projection": "3d"})
ax.plot_surface(x, y, z)
plt.show()
[[Datei:PythonIng_fläche1.png]]
Das Ganze in Netzdarstellung läßt sich so programmieren:
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0, 10, 0.5)
y = np.arange(0, 10, 0.5)
x, y = np.meshgrid(x, y)
z = np.sin(x) + 3 * np.cos(y)
fig, ax = plt.subplots(subplot_kw={"projection": "3d"})
ax.plot_wireframe(x, y, z)
plt.show()
[[Datei:PythonIng_fläche2.png]]
Ein etwas komplexeres Beispiel:
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0.1, 10, 0.1)
y = np.arange(0.1, 10, 0.1)
x, y = np.meshgrid(x, y)
z1 = np.sin(x) + 3 * np.cos(y)
z2 = np.sin(x) + np.log(y)
z3 = x + np.cos(y)
z4 = x**2 - y
fig, ax = plt.subplots(subplot_kw={"projection": "3d"}, nrows=2, ncols=2)
ax[0][0].plot_surface(x, y, z1)
ax[0][1].plot_surface(x, y, z2)
ax[1][0].plot_surface(x, y, z3)
ax[1][1].plot_surface(x, y, z4)
plt.show()
[[Datei:PythonIng_subplot1.png]]
Man beachte, dass man die Unterbilder im Bild nach dem Ausführen des Scripts z.B. mit der mittleren Maustaste einzeln drehen, oder über die Einträge in der Menüzeile einzeln bearbeiten kann. Mit ein paar Zeilen Programmtext lässt sich also eine Menge an Funktionalität generieren.
Die Farbgebung lässt sich über <code>colormaps</code> variieren.
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import cm
x = np.arange(0, 10, 0.1)
y = np.arange(0, 10, 0.1)
x, y = np.meshgrid(x, y)
z = np.sin(x) + 3 * np.cos(y)
fig, ax = plt.subplots(subplot_kw={"projection": "3d"})
ax.plot_surface(x, y, z, cmap = cm.coolwarm)
plt.show()
[[Datei:PythonIng_colormap1.png]]
Es gibt eine Menge an Colormaps, z.B. <code>plasma, Greys, Dark2, ocean</code>. Zwecks detaillierterer Infos siehe die matplotlib-Dokumentation. <small>Verwendet man die IDE namens IDLE, so gibt es dort auch die automatische Codevervollständigung. D.h. es werden alle Möglichkeiten (in unserem Fall nach dem Eintippen von <code>cm.</code> alle verfügbaren Colormaps) angezeigt.</small>
Die "edgecolor" und Linienbreite können auch frei gewählt werden:
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import cm
x = np.arange(0, 10, 0.1)
y = np.arange(0, 10, 0.1)
x, y = np.meshgrid(x, y)
z = np.sin(x) + 3 * np.cos(y)
fig, ax = plt.subplots(subplot_kw={"projection": "3d"})
ax.plot_surface(x, y, z, cmap = cm.coolwarm, edgecolor="black", linewidth=1.0)
plt.show()
[[Datei:PythonIng_colormap2.png]]
=== Höhenlinien ===
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0, 10, 0.1)
y = np.arange(0, 10, 0.1)
x, y = np.meshgrid(x, y)
z = np.sin(x) + 3 * np.cos(y)
fig, ax = plt.subplots()
ax.contour(x, y, z)
plt.show()
[[Datei:PythonIng_höhenlinien1.png]]
Etwas abgewandelt sieht das so aus:
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0, 10, 0.1)
y = np.arange(0, 10, 0.1)
x, y = np.meshgrid(x, y)
z = np.sin(x) + 3 * np.cos(y)
fig, ax = plt.subplots()
hl = ax.contour(x, y, z)
ax.clabel(hl, inline = True)
plt.show()
[[Datei:PythonIng_höhenlinien2.png]]
Und noch eine Variante sei gezeigt.
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0, 10, 0.1)
y = np.arange(0, 10, 0.1)
x, y = np.meshgrid(x, y)
z = np.sin(x) + 3 * np.cos(y)
fig, ax = plt.subplots()
ax.contourf(x, y, z)
plt.show()
[[Datei:PythonIng_höhenlinien3.png]]
=== Aufgaben ===
* Zeichnen Sie die räumliche Kurve <math>x = 2 \cdot \cosh(t)</math>, <math>y = 5 \cdot \sin(t)</math>, <math> z = t^{2} - t</math>, <math>0 \leq t \leq 3\pi</math>.
* Zeichnen Sie die Fläche <math>z = \log(x) + \cos(y)</math>.
== Animationen ==
=== Mit matplotlib ===
Auch mit matplotlib sind Animationen möglich. Das ist ein bisschen komplizierter und wird deshalb hier nur mit einem sehr einfachen Beispiel dargestellt (bei Interesse siehe z.B. auch das [https://matplotlib.org/stable/users/explain/animations/animations.html#animations Animations using Matplotlib-Tutorial]).
import matplotlib.pyplot as plt
import matplotlib.animation as ani
import matplotlib
import numpy as np
def update(frame):
line.set_xdata(x[:frame])
line.set_ydata(y[:frame])
return (line)
fig, ax = plt.subplots()
x = np.arange(0, 10, .1)
y = np.sin(x)
line, = ax.plot(x[0], y[0])
ax.set(xlim=[0, 10], ylim=[-1, 1])
a = ani.FuncAnimation(fig=fig, func=update, frames=100, interval=20)
plt.show()
# Speichere die Animation in einem animierten GIF (optional)
a.save(filename="c:/tmp/PythonIng_anim5.gif", writer="pillow")
[[Datei:PythonIng_anim5.gif]]
Es wird eine Sinuskurve auf den Bildschirm gezeichnet. In der letzten Zeile wird diese Animation in ein animiertes GIF gespeichert. Das ist natürlich optional und kann auch weggelassen werden.
=== Mit VPython ===
Aber auch mit dem Modul VPython lassen sich einfache 3D-Animationen erstellen. VPython ist ein externes Modul, das vorab installiert werden muss. Unter openSUSE Tumbleweed gibt es dzt. kein entsprechendes rpm-Paket. Die übliche Methode der Installation mittels YaST oder zypper ist somit nicht möglich. Auch eine direkte Verwendung von pip führt nur zu einer Fehlermeldung (<code>error: externally-managed-environment</code>). Es empfiehlt sich dort folgende Vorgehensweise:
# Erstelle zuerst eine virtuelle Umgebung, z.B.: <code>python3.11 -m venv ~/tmp/venv1</code>
# Wechsle das Verzeichnis: <code>cd ~/tmp/venv1/bin</code>
# Installiere das entsprechende Paket: <code>./pip install vpython</code>
# Führe das entsprechende Skript aus: <code>./python ~/tmp/test1.py</code>
Aktuell (März 2026) ist dieses Programmpaket lt. der [https://vpython.org/presentation2018/install.html VPython-Homepage] nur für die Python-Versionen 3.8 bis 3.12 verfügbar.
Ein Beispiel zu einer einfachen Animation wird nachfolgend geliefert.
from vpython import *
scene.width = 1200
scene.height = 600
scene.center = vector(20,0,0)
scene.background = color.white
cylinder(pos=vector(0,0,0), axis=vector(20,0,0), radius=5,
color=color.blue)
cone(pos=vector(0,0,0), axis=vector(-10,0,0), radius=5,
color=color.blue)
helix(pos=vector(20,0,0), axis=vector(40,0,0), radius=2,
coils=10, thickness=0.5, color=color.blue)
ball = sphere(pos=vector(20,0,0), color = color.green, radius = 1)
ball.p = vector(0.15, 0, 0)
toc = True
while True:
rate(200)
if(ball.pos.x <= 60 and toc == True):
ball.pos += ball.p
else:
toc = False
ball.pos -= ball.p
if(ball.pos.x <= 20 and toc == False):
toc = True
[[Datei:PythonIng_vpython_anim.JPG]]
Idealerweise öffnet sich beim Ausführen des Scripts ein Browserfenster. Darin wird die programmierte Animation gezeigt (siehe auch den obigen Screenshot). Eine Größenänderung können Sie mit der mittleren Maustaste initiieren. Die Szenerie drehen können Sie mit der rechten Maustaste.
=== Mit VTK ===
Komplexer, aber auch mächtiger als VPython ist die Verwendung von VTK ('''V'''isualization '''T'''ool'''k'''it). Genauer gesagt des Python-Wrappers von VTK. Dieses externe Python-Modul muss vorab installiert werden (z.B. mittels YaST, pip oder in eine virtuelle Umgebung). VTK ist eine Softwarebibliothek zur 3D-Visualisierung und wurde ursprünglich in C++ geschrieben. Verbreitet eingesetzt wird diese Bibliothek in der Wissenschaft und Forschung, z.B.
* in der medizinischen Bildgebung
* für Strömungssimulationen
* für Klimadaten
VTK funktioniert nach dem {{W|Grafikpipeline|Pipeline-Prinzip}}:
Source (Quellen) -> Filter -> Mapper (Senken) -> Actor/Renderer
Daten fließen von den Quellen zu den Senken.
Als einfaches Beispiel wird die Darstellung eines Zylinders gezeigt, der mit den Maustasten gedreht oder in der Größe geändert werden kann:
import vtk
# Zylinder erzeugen
cyl = vtk.vtkCylinderSource()
cyl.SetRadius(5.0)
cyl.SetHeight(20.0)
cyl.SetResolution(40)
# Geometrie in darstellbare Daten umwandeln
mapper = vtk.vtkPolyDataMapper()
mapper.SetInputConnection(cyl.GetOutputPort())
# Objekt in der Szene
actor = vtk.vtkActor()
actor.SetMapper(mapper)
# Szene verwalten
renderer = vtk.vtkRenderer()
renderer.AddActor(actor)
# Render-Fenster
render_window = vtk.vtkRenderWindow()
render_window.AddRenderer(renderer)
# Maus/Tastatur-Steuerung
interactor = vtk.vtkRenderWindowInteractor()
interactor.SetRenderWindow(render_window)
# Starten
render_window.Render()
interactor.Start()
Ausgabe:
[[Datei:PythonIng_VTK_1.png]]
Gleiches Beispiel wie oben, aber mit einer Animationssequenz:
import vtk
import time
cyl = vtk.vtkCylinderSource()
cyl.SetRadius(5.0)
cyl.SetHeight(20.0)
cyl.SetResolution(40)
mapper = vtk.vtkPolyDataMapper()
mapper.SetInputConnection(cyl.GetOutputPort())
actor = vtk.vtkActor()
actor.SetMapper(mapper)
renderer = vtk.vtkRenderer()
renderer.AddActor(actor)
render_window = vtk.vtkRenderWindow()
render_window.AddRenderer(renderer)
interactor = vtk.vtkRenderWindowInteractor()
interactor.SetRenderWindow(render_window)
for i in range(360):
actor.RotateZ(1)
actor.RotateY(.5)
render_window.Render()
time.sleep(0.01)
Das Grafikfenster schließt sich nach Ablauf der Schleife. Das Fenster bleibt geöffnet, wenn Sie am Programmende folgenden Befehl hinschreiben
interactor.Start()
Um den animierten Zylinder grün einzufärben, müssen Sie Folgendes im obigen Programm ergänzen (Farbnamen):
colors = vtk.vtkNamedColors()
actor.GetProperty().SetColor(colors.GetColor3d("Green"))
Als Namen können Sie u.a. die CSS3 Web-Farben verwenden (siehe z.B. [https://wiki.selfhtml.org/wiki/Farbe/Farbangaben] und {{W|Webfarbe#CSS_3}}).
Alternativ funktioniert auch das ({{W|RGB-Farbraum|RGB}}):
actor.GetProperty().SetColor(0.0, 0.6, 0.0)
Wie der Zylinder mit einer Textur versehen wird, zeigt folgendes Programm:
import vtk
import time
cylinder = vtk.vtkCylinderSource()
cylinder.SetResolution(30)
cylinder.SetHeight(3.0)
cylinder.SetRadius(1.0)
cylinder.CappingOn()
texture_coords = vtk.vtkTextureMapToCylinder()
texture_coords.SetInputConnection(cylinder.GetOutputPort())
texture_coords.PreventSeamOn()
reader = vtk.vtkJPEGReader()
reader.SetFileName("PythonIng_textur.jpg")
texture = vtk.vtkTexture()
texture.SetInputConnection(reader.GetOutputPort())
mapper = vtk.vtkPolyDataMapper()
mapper.SetInputConnection(texture_coords.GetOutputPort())
actor = vtk.vtkActor()
actor.SetMapper(mapper)
actor.SetTexture(texture)
renderer = vtk.vtkRenderer()
renderWindow = vtk.vtkRenderWindow()
renderWindow.AddRenderer(renderer)
interactor = vtk.vtkRenderWindowInteractor()
interactor.SetRenderWindow(renderWindow)
renderer.AddActor(actor)
for i in range(360):
actor.RotateZ(1)
actor.RotateY(.5)
renderWindow.Render()
time.sleep(0.01)
interactor.Start()
<gallery>
PythonIng_textur.jpg | Textur-Datei
PythonIng_VTK_2.png | Ausgabe (Screenshot)
</gallery>
Nun aber genug von VTK und der Erstellung von Grafiken, weiter geht es mit mathematischeren Themen.
= Vektoren und Matrizen =
== Zahlenfolgen ==
from numpy import *
start = 0
stop = 10
step = 2
num = 10
r = arange(start, stop, step)
l = linspace(start, stop, num)
print("r = ", r)
print("l = ", l)
Ausgabe:
r = [0 2 4 6 8]
l = [ 0. 1.11111111 2.22222222 3.33333333 4.44444444 5.55555556
6.66666667 7.77777778 8.88888889 10. ]
== Vektoren ==
Vektoren sollten jedem aus der Linearen Algebra bekannt sein.
=== Arrays ===
In Python mit NumPy kann man Vektoren durch die Funktion array erzeugen.
import numpy as np
l1 = (-5, 3, 2)
l2 = (1, 1, 4)
a1 = np.array(l1)
a2 = np.array(l2)
a3 = a1 + a2
a4 = 2 * a2
print(a1)
print(a2)
print(a3)
print(a3[2])
print(a4)
Ausgabe:
[-5 3 2]
[1 1 4]
[-4 4 6]
6
[2 2 8]
=== Zeilen- und Spaltenvektoren ===
import numpy as np
# Zeilenvektor
z = np.array([ [-5, 3, 2] ])
# Spaltenvektor
s = np.array([[1], [1], [4]])
print(z)
print(s)
Ausgabe:
[ [-5 3 2] ]
[[1]
[1]
[4]]
=== Skalarprodukt ===
import numpy as np
a1 = np.array((-5, 3, 2))
a2 = np.array((1, 1, 4))
skalarprodukt = np.dot(a1, a2)
print(skalarprodukt)
Ausgabe:
6
=== Vektorprodukt ===
<math>a\ast b=\left(\begin{array}{c}
a_{1}\\
a_{2}\\
a_{3}
\end{array}\right)\ast\left(\begin{array}{c}
b_{1}\\
b_{2}\\
b_{3}
\end{array}\right)=\left(\begin{array}{c}
a_{2}b_{3}-a_{3}b_{2}\\
a_{3}b_{1}-a_{1}b_{3}\\
a_{1}b_{2}-a_{2}b_{1}
\end{array}\right)
</math>
Python-Code:
import numpy as np
a1 = np.array((-5, 3, 2))
a2 = np.array((1, 1, 4))
vektorprodukt = np.cross(a1, a2)
print(vektorprodukt)
Ausgabe:
[10 22 -8]
=== Transponierter Vektor ===
import numpy as np
# Zeilenvektor
z = np.array([ [-5, 3, 2] ])
# Spaltenvektor
s = np.array([[1], [1], [4]])
# transponierter Vektor
z_tp = np.transpose(z)
# transponierter Vektor
s_tp = np.transpose(s)
print(z_tp)
print(s_tp)
Ausgabe:
[[-5]
[ 3]
[ 2]]
[ [1 1 4] ]
=== Vektorfelder visualisieren ===
import matplotlib.pyplot as plt
import numpy as np
# Daten generieren
x = np.arange(0, 10, 1)
y = np.arange(0, 10, 1)
X, Y = np.meshgrid(x, y)
U = X * Y
V = Y + X
# Plotten
fig, ax = plt.subplots()
ax.quiver(X, Y, U, V, angles='xy')
plt.show()
Ausgabe:
[[Datei:PythonIng_quiver1.png]]
== Matrizen==
import numpy as np
m1 = np.matrix([[1, 2, 3], [4, 5, 6]])
print(m1)
Ausgabe:
[[1 2 3]
[4 5 6]]
=== Zugriff auf Matrizenelemente ===
import numpy as np
m1 = np.matrix([[1, 2, 3], [4, 5, 6]])
# Element aus Zeile 2 und Spalte 3 (Achtung! Index startet bei Null)
print(m1[1,2])
Ausgabe:
6
=== Addition und Subtraktion von Matrizen ===
import numpy as np
m1 = np.matrix([[1, 2, 3], [4, 5, 6]])
m2 = np.matrix([[0, 0, 2], [1, 3, 2]])
print(m1 + m2)
print(m1 - m2)
Ausgabe:
[[1 2 5]
[5 8 8]]
[[1 2 1]
[3 2 4]]
=== Transponierte Matrix ===
import numpy as np
m = np.matrix([[1, 2, 3], [4, 5, 6]])
mt = np.transpose(m)
print(m)
print(mt)
Ausgabe:
[[1 2 3]
[4 5 6]]
[[1 4]
[2 5]
[3 6]]
=== Rang einer Matrix ===
import numpy as np
m = np.matrix([[1, 3], [0, -5]])
rg = np.linalg.matrix_rank(m)
print(rg)
Ausgabe:
2
=== Inverse Matrix ===
import numpy as np
m = np.matrix([[1, 3], [0, -5]])
mi = np.linalg.inv(m)
print(mi)
Ausgabe:
[[ 1. 0.6]
[-0. -0.2]]
=== Multiplikation von Matrizen (falksches Schema) ===
import numpy as np
m1 = np.matrix([[1, 3, 4], [0, -5, 1]])
m2 = np.matrix([[1, 2], [2, 3], [0, 2]])
print(m1 @ m2)
Ausgabe:
[[ 7 19]
[-10 -13]]
=== Eigenwerte und Eigenvektoren ===
import numpy as np
m = np.matrix([[5, 8], [1, 3]])
D,V = np.linalg.eig(m)
# Eigenwerte
print(D)
# Eigenvektoren
print(V)
Ausgabe:
[7. 1.]
[[ 0.9701425 -0.89442719]
[ 0.24253563 0.4472136 ]]
=== Teilmatrizen ===
import numpy as np
m = np.matrix([[1, 3, 4], [0, -5, 1]])
print("m = ", m)
# Erste Zeile extrahieren
m1 = m[0,:]
print("m1 = ", m1)
# Das Element aus der 1. Zeile und der 2. Spalte extrahieren
m2 = m[0,1]
print("m2 = ", m2)
# Zweite Spalte extrahieren
m3 = m[:, 1]
print("m3 = ", m3)
Ausgabe:
m = [[ 1 3 4]
[ 0 -5 1]]
m1 = [ [1 3 4] ]
m2 = 3
m3 = [[ 3]
[-5]]
=== Spezielle Matrizen ===
==== Nullmatrix ====
import numpy as np
z = np.zeros((3, 2))
print(z)
Ausgabe:
[[0. 0.]
[0. 0.]
[0. 0.]]
==== Einheitsmatrix ====
import numpy as np
z = np.eye(3)
print(z)
Ausgabe:
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
==== Matrix mit lauter Einsen ====
import numpy as np
z = np.ones((3, 2))
print(z)
Ausgabe:
[[1. 1.]
[1. 1.]
[1. 1.]]
=== Spärlich besetzte Matrizen ===
Das Thema spärlich besetzter Matrizen wird hier nur kurz angerissen. Nähere Details siehe unter dem Weblink [https://docs.scipy.org/doc/scipy/reference/sparse.html#module-scipy.sparse].
import numpy as np
import scipy
A = scipy.sparse.csr_array(np.eye(5))
print(A)
Ausgabe:
(0, 0) 1.0
(1, 1) 1.0
(2, 2) 1.0
(3, 3) 1.0
(4, 4) 1.0
= Lineare Gleichungssysteme =
Sei <math>Ax = b</math> ein lineares Gleichungssystem. <math>A</math> sei die Koeffizientenmatrix, <math>x</math> der Lösungsvektor und <math>b</math> ein bekannter Vektor.
Beispiel:
import numpy as np
A = np.array([[5, 1], [0, 2]])
b = np.array([1, 2])
x = np.linalg.solve(A, b)
print(x)
Ausgabe:
[0. 1.]
== Aufgabe ==
* Lösen Sie folgendes Gleichungssystem mittels Python (und zur Kontrolle auch händisch):
5x + 6y - 2z = 12
3x - y - 3z = 6
2x + 2y + 4z = 5
= Polynome =
== Ein erstes einfaches Beispiel ==
Gegeben sei das Polynom <math>7x^3+5x^2+1</math>. In Python:
import numpy as np
p = np.poly1d([7, 5, 0, 1])
print(p)
Ausgabe:
3 2
7 x + 5 x + 1
== Einzelne Polynomwerte berechnen ==
import numpy as np
p = np.poly1d([7, 5, 0, 1])
print(p(1.5))
Ausgabe:
35.875
== Polynome integrieren und differenzieren ==
import numpy as np
p = np.poly1d([7, 5, 0, 1])
# 1. Ableitung
p1 = p.deriv()
p2 = p.deriv(1)
# 2. Ableitung
p3 = p.deriv(2)
# Integral
p4 = p.integ()
print(p1)
print(p2)
print(p3)
print(p4)
Ausgabe:
2
21 x + 10 x
2
21 x + 10 x
42 x + 10
4 3
1.75 x + 1.667 x + 1 x
== Nullstellen bestimmen ==
import numpy as np
p = np.poly1d([2, 5, 0, 4])
r = np.roots(p)
print(r)
Ausgabe:
[-2.7621427 +0.j 0.13107135+0.84077099j 0.13107135-0.84077099j]
== Aufgaben ==
* Berechnen Sie den Wert für x = 3 des Polynoms <math>y = 2x^4 - 3x^3 - x + 7</math>.
* Differenzieren und integrieren Sie das Polynom <math>y = 2x^4 - 3x^3 - x + 7</math>.
* Berechnen Sie die Nullstellen von <math>y = 7x^5 - 3x^2 + 12</math>.
= Nichtlineare Gleichungen und Gleichungssysteme =
== Nullstellenbestimmung ==
Löse eine beliebige Gleichung f(x) = 0, z.B. <math> f(x) = x^2 - 5\cos(x) - 10 = 0 </math>:
import scipy
import numpy as np
def f(x):
return x**2 - 5*np.cos(x) - 10
xstart = [-1, 1] # Startwerte
xn = scipy.optimize.root(f, xstart)
print(xn.x)
Ausgabe:
[-2.46813009 2.46813009]
Funktionsgraph:
[[Datei:octave_nichtlin2.jpg]]
== Gleichungssysteme ==
SymPy ist ein externes Modul, das symbolisches Rechnen ('''Sym'''bolic '''Py'''thon) ermöglicht.
Folgende Aufgabe ist dem Buch "Knorrenschild: Numerische Mathematik, Hanser, 2017, Seite 72" entnommen. Zu lösen ist das nichtlineare Gleichungssystem
<math>f_1 = 2x_1 + 4x_2 = 0 </math>
<math>f_2 = 4x_1 + 8x_2^3 = 0</math>
Mit Python ist das so möglich:
import sympy
x1, x2 = sympy.symbols("x1 x2")
f1 = 2*x1 + 4*x2
f2 = 4*x1 + 8*x2**3
s = sympy.solve((f1, f2), x1, x2)
print(s)
Ausgabe:
[(-2, 1), (0, 0), (2, -1)]
Plot:
[[Datei:IngPython_nl_gleichung1.svg|500px]]
= Komplexe Zahlen =
Die imaginäre Einheit wird in Python durch den Buchstaben <code>j</code> symbolisiert. Darstellen kann man eine komplexe Zahl bekannterweise in mehreren Formen:
* Kartesische Darstellung <math>z = \Re(z) + j \cdot \Im(z)</math>
* Polardarstellungen <math>z = r \cdot (\cos(\phi) + j \cdot \sin(\phi)) = r \cdot e^{j\cdot \phi}</math>
Die konjugiert komplexe Zahl ist <math>z^* = \Re(z) - j \cdot \Im(z)</math>
Nachfolgend einige mathematische Operationen mit Python und NumPy.
import numpy as np
z1 = 2 + 5j # kartesische Darstellung
z2 = 3 * np.exp(3j) # Polardarstellung
# Addition
res = z1 + z2
print("z1 + z2 = ", res)
# Multiplikation
res = z1 * z2
print("z1 * z2 = ", res)
# Realteil
res = np.real(z2)
print("Realteil von z2 = ", res)
# Imaginärteil
res = np.imag(z2)
print("Imaginaerteil von z2 = ", res)
# Betrag
res = np.abs(z1)
print("Betrag von z1 = ", res)
# Argument
res = np.angle(z1)
print("Argument von z1 = ", res)
# Konjugiert komplexe Zahl
res = np.conj(z1)
print("Konjugiert komplexe Zahl von z1 = ", res)
Ausgabe:
z1 + z2 = (-0.9699774898013365+5.423360024179601j)
z1 * z2 = (-8.05675510050068-14.003167400647481j)
Realteil von z2 = -2.9699774898013365
Imaginaerteil von z2 = 0.4233600241796016
Betrag von z1 = 5.385164807134504
Argument von z1 = 1.1902899496825317
Konjugiert komplexe Zahl von z1 = (2-5j)
= Interpolation =
import numpy as np
import scipy
import matplotlib.pyplot as plt
# Stützpunkte
xp = np.arange(1, 6)
yp = (0, -5, 2, 7, 6)
ti = np.arange(1, 5, 0.01)
i1 = scipy.interpolate.interp1d(xp, yp, kind = "linear")
i2 = scipy.interpolate.interp1d(xp, yp, kind = "cubic")
plt.plot(xp, yp, "rx")
plt.plot(xp, i1(xp))
plt.plot(ti, i2(ti))
plt.show()
Ausgabe:
[[Datei:PythonIng_interpol1.png]]
= Differenzialrechnung =
== Numerisches Differenzieren ==
Als Beispiel differenzieren wir <math>y = 5x\sin{x}</math> und stellen das Ganze grafisch dar.
from findiff import Diff
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 1000)
f = 5 * x * np.sin(x)
dx = x[1] - x[0]
# Ableitung
d_dx = Diff(0, dx)
df_dx = d_dx(f)
# Grafik
plt.plot(x, f, label = "y")
plt.plot(x, df_dx, label = "y'")
plt.grid()
plt.legend(loc="best")
plt.show()
Ausgabe:
[[Datei:octave_diff1.jpg]]
<small>findiff ist ein externes Modul. Dieses muss installiert werden (z.B. so: ...\Python\Scripts\pip.exe install --upgrade findiff). Für die Vorgehensweise unter openSUSE Tumbleweed siehe das Kapitel VPython, nur dass das Ganze mit einer aktuelleren Python-Version exekutiert wird, z.B. mit Python 3.13. Das im Buch "Steinkamp: Der Python-Kurs für Ingenieure und Naturwissenschaftler, Rheinwerk" verwendete Modul "scipy.misc" ist veraltet (deprecated ... missbilligt). Lt. [https://docs.scipy.org/doc/scipy-1.17.0/dev/roadmap-detailed.html#misc SciPy-Dokumentation für die Version 1.17.0] wurden alle entsprechenden Features schon entfernt.</small>
== Symbolisches Differenzieren ==
Differenzieren Sie die Funktionen <math>f_1(x) = x^2</math> und <math>f_2(x) = \sin(x)\cos\left(\frac{x}{2}\right)</math>.
import sympy
x = sympy.symbols("x")
f1 = x**2;
f2 = sympy.sin(x) * sympy.cos(x/2.)
d1 = sympy.diff(f1, x)
d2 = sympy.diff(f2, x)
print(d1)
print(d2)
Ausgabe:
2*x
-0.5*sin(0.5*x)*sin(x) + cos(0.5*x)*cos(x)
== Aufgaben ==
* Differenzieren Sie die Funktion <math>y = \log(x) + 10x</math> und stellen Sie y, sowie y' grafisch am Bildschirm dar.
* Differenzieren Sie die Funktion <math>y = \frac{\sinh(x)}{(1+x)}</math> und stellen Sie y, sowie y' grafisch am Bildschirm dar.
= Integralrechnung =
== Numerisches Integrieren ==
Berechnen Sie das Integral <math>\int_{0}^{3}x^2 dx</math>.
import scipy
def f(x):
return x**2
i = scipy.integrate.quad(f, 0, 3)
print(i)
Ausgabe:
(9.000000000000002, 9.992007221626411e-14)
Das trifft den exakten Wert 9.0 ziemlich genau.
Berechnen Sie das Integral <math>\int_{0}^{\infty} 2^{-x} dx</math>.
import scipy
import numpy as np
def f(x):
return 2**(-x)
i = scipy.integrate.quad(f, 0, np.inf)
print(i)
Ausgabe:
(1.4426950408889556, 4.486558477977586e-09)
== Symbolisches Integrieren ==
Berechnen Sie <math>\int x^2 \text{d}x</math> und <math>\int \sin{x}\cos{\frac{x}{2}} \text{d}x</math>.
import sympy
x = sympy.symbols("x")
f1 = x**2
f2 = sympy.sin(x) * sympy.cos(x/2.)
i1 = sympy.integrate(f1, x)
i2 = sympy.integrate(f2, x)
print(i1)
print(i2)
Ausgabe:
x**3/3
-0.666666666666667*sin(0.5*x)*sin(x) - 1.33333333333333*cos(0.5*x)*cos(x)
Berechnen Sie das Integral <math>\int_{0}^{\infty} 2^{-x} \text{d}x</math>.
import sympy
x = sympy.symbols("x")
f = 2**(-x)
i = sympy.integrate(f, (x, 0, sympy.oo))
print(i)
Ausgabe:
1/log(2)
Mit <code>sympy.pprint(i)</code> ließe sich letzere Ausgabe etwas schöner schreiben:
1
──────
log(2)
Man beachtete, <code>log</code> steht hier für den natürlichen Logarithmus <code>ln</code>.
== Aufgaben ==
* Integrieren Sie die Funktion <math>y = \log(x) + 10x</math> von 1 bis 5.
* Integrieren Sie die Funktion <math>y = x^3</math> von 0 bis 4.
* Integrieren Sie <math>\int x^x(\log (x) + 1)\mathrm dx</math> symbolisch.
= Gewöhnliche Differenzialgleichungen =
== DGL numerisch lösen ==
Für die Lösung von Differenzialgleichungen steht u.a. die Funktion scipy.integrate.solve_ivp() zur Verfügung. Diese Funktion implementiert auch das Runge-Kutta-Verfahren (RK45).
{{Wikipedia | Runge-Kutta-Verfahren}}
Beispiel <math>y' = x^2 + y^3</math>:
import scipy
import numpy as np
import matplotlib.pyplot as plt
def dy_dx(x, y):
return x**2 + y**3
y0 = [1]
xi = [0, 1]
x = np.arange(0, 1, 0.01)
z = scipy.integrate.solve_ivp(dy_dx, xi, y0, method="RK45", dense_output=True)
y = z.sol(x)
plt.plot(x, y.T)
plt.grid()
plt.show()
[[Datei:PythonIng_dgl1.png]]
== DGL symbolisch lösen ==
Beispiel <math>y' = x^2 + y^3</math>:
import sympy
x = sympy.symbols("x")
y = sympy.Function("f")(x)
dgl = x**2 + y**3
lsg = sympy.dsolve(dgl, y)
print(lsg)
Ausgabe:
[Eq(f(x), (-x**2)**(1/3)), Eq(f(x), (-x**2)**(1/3)*(-1 - sqrt(3)*I)/2), Eq(f(x), (-x**2)**(1/3)*(-1 + sqrt(3)*I)/2)]
Mit <code>sympy.pprint</code> (pretty print) lässt sich die Ausgabe etwas übersichtlicher darstellen.
import sympy
x = sympy.symbols("x")
y = sympy.Function("f")(x)
dgl = x**2 + y**3
lsg = sympy.dsolve(dgl, y)
sympy.pprint(lsg)
Ausgabe:
⎡ _____ _____ ⎤
⎢ _____ 3 ╱ 2 3 ╱ 2 ⎥
⎢ 3 ╱ 2 ╲╱ -x ⋅(-1 - √3⋅ⅈ) ╲╱ -x ⋅(-1 + √3⋅ⅈ)⎥
⎢f(x) = ╲╱ -x , f(x) = ────────────────────, f(x) = ────────────────────⎥
⎣ 2 2 ⎦
== Aufgaben ==
* Lösen Sie die Differenzialgleichung <math>y' = \frac{1}{x\cdot y}</math> mit Python. Kontrollieren Sie das Ergebnis, indem Sie die DGl händisch lösen.
* Lösen Sie die Differenzialgleichung <math>m' = -k\cdot m</math>. Kontrollieren Sie das Ergebnis, indem Sie die DGl händisch lösen.
* Lösen Sie die Differenzialgleichung <math>y' = \sqrt{|y|}</math>.
=Laplace-Transformation=
Laplace-Transformation:
<math>F(s) =\mathcal{L} \left\{f\right\}(s) = \int_{0}^{\infty} f(t) \mathrm e^{-st} \,\mathrm{d}t, \qquad s\in\mathbb{C}
</math>
Inverse Laplace-Transformation:
<math>\mathcal{L}^{-1} \left\{F\right\}(t)
= \frac{1}{2 \pi \mathrm j} \int_{ \gamma - \mathrm j \infty}^{ \gamma + \mathrm j \infty} \mathrm e^{st} F(s)\,\mathrm ds
= \begin{cases}
f(t) & \text{für } t \geq 0 \\
0 & \text{für } t < 0
\end{cases}
</math>
Siehe auch [[Ing_Mathematik:_Laplace-Transformation]]
Code:
import sympy
from sympy.abc import t, s
# Laplace-Transformation der Funktion f(t) = 1 (Heaviside-Fkt.)
f = 1
# alternativ: f = sympy.Heaviside(t)
F = sympy.laplace_transform(f, t, s, noconds=True)
print("Laplace-Transformierte F(s):", F)
# Inverse Laplace-Transformation zurück in den Zeitbereich
f_inv = sympy.inverse_laplace_transform(F, s, t)
print("Inverse Transformation f(t):", f_inv)
Ausgabe:
Laplace-Transformierte F(s): 1/s
Inverse Transformation f(t): Heaviside(t)
Die Zeile
from sympy.abc import t, s
steht alternativ für
t = sympy.symbols("t")
s = sympy.symbols("s")
=Fourier-Reihen=
<math>
f(x)\approx \frac{a_{0}}{2}+\sum_{k=1}^{\infty}\left(a_{k}\cos\left(kx\right)+b_{k}\sin\left(kx\right)\right)
</math>
<math>
a_{k} = \frac{1}{\pi}\int_{-\pi}^{\pi}f(x)\cdot\cos\left(kx\right)\mathrm dx\quad\text{für }k\geq0
</math>
<math>
b_{k} = \frac{1}{\pi}\int_{-\pi}^{\pi}f(x)\cdot\sin\left(kx\right)\mathrm dx\quad\text{für }k\geq1
</math>
Für die Sägezahnfunktion <math>y=x;\, 0 < x < 2\pi</math> sei die Fourierreihe mit einem Python-Programm (unter Mithilfe von sympy) hergeleitet.
Code:
from sympy import fourier_series, pi, symbols, pprint
x = symbols('x')
f = x
s = fourier_series(f, (x, 0, 2*pi))
pprint(s.truncate(n=4))
Ausgabe:
2⋅sin(3⋅x)
-2⋅sin(x) - sin(2⋅x) - ────────── + π
3
Siehe auch [[Ing Mathematik: Fourierreihen]].
Ein komplizierteres Beispiel:
[[Datei:IngMath fourier bsp13.svg | 300px]]
<math>0\le t < T/2\text{:}\quad f(t) = H</math>
<math>T/2 \le t \le T\text{:}\quad f(t) = \frac{2H}{T}\left( t-\frac{T}{2}\right)</math>
Code:
import sympy as sp
H = sp.Symbol('H', positive=True)
T = sp.Symbol('T', positive=True)
t = sp.Symbol('t')
f = sp.Piecewise(
(H, (t > 0) & (t < T/2)),
(2*H/T*(t-T/2), (t > T/2) & (t < T))
)
f_series = sp.fourier_series(f, (t, 0, T))
sp.pprint(f_series.truncate(4))
Ausgabe:
⎛2⋅π⋅t⎞ ⎛4⋅π⋅t⎞ ⎛6⋅π⋅t⎞ ⎛2⋅π⋅t⎞ ⎛6⋅π⋅t⎞
H⋅sin⎜─────⎟ H⋅sin⎜─────⎟ H⋅sin⎜─────⎟ 2⋅H⋅cos⎜─────⎟ 2⋅H⋅cos⎜─────⎟
⎝ T ⎠ ⎝ T ⎠ ⎝ T ⎠ ⎝ T ⎠ ⎝ T ⎠ 3⋅H
──────────── - ──────────── + ──────────── + ────────────── + ────────────── + ───
π 2⋅π 3⋅π 2 2 4
π 9⋅π
=Rechnen mit wirklich großen Zahlen=
Bekannt ist, dass Python kaum Einschränkungen beim Wertebereich von Ganzzahlen hat, z.B.
print(10**300)
Ausgabe (gekürzt):
100000000000000000000...00000000000000000000000000000000000000000000000000000000000000000000000
Ähnliches geht auch mit Gleitpunktzahlen, z.B. durch die Verwendung des Moduls mpmath:
import mpmath
print(mpmath.mpf(1500.4)**mpmath.mpf(300))
Ausgabe:
7.27975299218612e+952
Anderes Beispiel:
from mpmath import mp, pi
mp.dps = 100
print(pi)
Ausgabe:
3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117068
mpmath kann noch einiges mehr, dazu sei aber auf die entsprechende Dokumentation auf der mpmath-Homepage verwiesen. mpmath ist Bestandteil von SymPy, kann aber auch separat installiert werden.
Aber auch Python selbst besitzt eine Möglichkeit, um mit großen bzw. exakten Gleitpunktzahlen zu rechnen, nämlich das interne Modul decimal. Dieses hat einige Vorteile gegenüber mpmath, aber auch gravierende Nachteile. Diese seien hier nicht detailliert aufgezählt. Grob gesagt hat decimal im Finanzwesen seine Berechtigung. Für wissenschaftliche Anwendungen wird aber mpmath vorzuziehen sein, da es u.a. vielfältige mathematische Funktionen bereit stellt. Nachfolgend ein einfaches Beispiel mit decimal:
import decimal
print("Potenzierung:", decimal.Decimal(1500.4) ** decimal.Decimal(300.0))
print("Einfache Addition:", 0.1 + 0.2)
decimal.getcontext().prec = 50
print("Addition mit decimal:", decimal.Decimal("0.1") + decimal.Decimal("0.2"))
Ausgabe:
Potenzierung: 7.279752992186121551039839134E+952
Einfache Addition: 0.30000000000000004
Addition mit decimal: 0.3
<u>Aufgabe:</u> Recherchieren Sie im Internet die genauen Vor- und Nachteile von decimal und mpmath. Verwenden Sie dazu auch KI (z.B. von Google, chatgpt).
=Regelungstechnische Aufgabenstellungen=
Für regelungstechnische Aufgaben gibt es u.a. das externe Paket <code>control</code>. Hier soll nicht detailliert darauf eingegangen werden. Anhand eines Beispiels soll anschließend nur die Visualisierung in Form eines Bode-Diagramms und der Sprungantwort gezeigt werden. Gegeben sei ein P-Regler mit <math>R = \frac{5}{2}</math> und eine Strecke <math>S= \frac{1}{30s^3+20s^2+10s+1,5}</math>. Gesucht sei vorerst ein Bode-Diagramm für den offenen Regelkreis und das Führungsverhalten.
import numpy as np
import control as ct
import matplotlib.pyplot as plt
zaehler1 = np.array([1.])
nenner1 = np.array([30., 20., 10., 1.5])
strecke = ct.tf(zaehler1, nenner1)
zaehler2 = np.array([5.])
nenner2 = np.array([2.])
regler = ct.tf(zaehler2, nenner2)
G0 = regler*strecke # oder: G0 = ct.series(regler, strecke)
Gw = ct.feedback(G0)
ct.bode_plot(G0, label='G0')
ct.bode_plot(Gw, label='Gw')
plt.show()
[[Datei:PythonIng_bode1.svg]]
Nun noch für obiges Beispiel die Sprungantwort. Diese zeigt einige große Überschwinger, d.h. der Regler kann sicher noch optimiert werden.
import numpy as np
import control as ct
import matplotlib.pyplot as plt
zaehler1 = np.array([1.])
nenner1 = np.array([30., 20., 10., 1.5])
strecke = ct.tf(zaehler1, nenner1)
zaehler2 = np.array([5.])
nenner2 = np.array([2.])
regler = ct.tf(zaehler2, nenner2)
G0 = regler*strecke
Gw = ct.feedback(G0)
t, y = ct.step_response(Gw)
plt.plot(t,y)
plt.title('Sprungantwort')
plt.xlabel('t')
plt.ylabel('h(t)')
plt.grid()
plt.show()
[[Datei:PythonIng_bode3.svg]]
Einige weitere wichtige Daten (Phasenreserve, Amplitudenreserve, Durchtrittsfrequenz) lassen sich mittels der <code>control</code>-Funktion <code>margin()</code> ermitteln. Die Ortskurve lässt sich mit der Funktion <code>nyquist_plot()</code> zeichnen. Dies sei hier aber nicht weiter ausgeführt.
==Aufgaben==
* Zeichen Sie mit Python die Ortskurve für obiges Beispiel.
* Was passiert, wenn man die Reglerverstärkung weiter aufdreht (z.B. auf <math>R = \frac{25}{2}</math>)?
* Wie sehen das Bode-Diagramm und die Sprungantwort aus, wenn ein PI-Regler verwendet wird?
= Stereostatik etc. =
Das Modul SymPy bietet einige Möglichkeiten einfache Bauwerke zu berechnen, z.B. Balken oder Fachwerke. Nachfolgend wird ein einfaches Fachwerk berechnet und gezeichnet.
Python-Code:
from sympy.physics.continuum_mechanics.truss import Truss
t = Truss()
# Knoten
t.add_node(("A", -3, 0), ("B", 0, 0), ("C", 4, 0), ("D", 7, 0),
("E", 6, 1.5), ("F", 2, 3), ("G", -2, 1.5))
# Stäbe
t.add_member(("AB","A","B"), ("BC","B","C"), ("CD","C","D"))
t.add_member(("AG","A","G"), ("GB","G","B"), ("GF","G","F"))
t.add_member(("BF","B","F"), ("FC","F","C"), ("CE","C","E"))
t.add_member(("FE","F","E"), ("DE","D","E"))
# Auflager; roller ... Loslager, pinned ... Festlager
t.apply_support(("A","roller"), ("D","pinned"))
# Einwirkende Kräfte
t.apply_load(("G", 5, 270), ("E", 3, 90))
# Berechnung
t.solve()
print("Reaction Forces: ", t.reaction_loads)
print("Internal Forces: ", t.internal_forces)
# Fachwerk zeichnen
p = t.draw()
p.show()
Ausgabe auf der Konsole:
Reaction Forces: {'R_A_y': 4.20000000000000, 'R_D_x': 0, 'R_D_y': -2.20000000000000}
Internal Forces: {'AB': 2.80000000000000, 'BC': 0.333333333333333, 'CD': -1.46666666666667,
'AG': -5.04777178564958, 'GB': -2.05555555555556, 'GF': -1.23413387432364,
'BF': 0.411111111111111*sqrt(13), 'FC': -0.3*sqrt(13), 'CE': 1.50000000000000,
'FE': 0.284800124843917, 'DE': 2.64407093534026}
Zeichnung:
[[File:PythonIng_fachwerk1.svg|300px]]
Details zu diesem Thema siehe z.B. [https://docs.sympy.org/latest/modules/physics/continuum_mechanics/index.html Continuum Mechanics] oder [https://docs.sympy.org/latest/tutorials/physics/continuum_mechanics/index.html Continuum Mechanics Tutorials]. Auch andere mechanische Probleme werden von SymPy abgehandelt ([https://docs.sympy.org/latest/tutorials/physics/index.html Physics Tutorials]).
== Aufgabe ==
Gegeben sei ein einseitig eingespannter Kragträger. Belastet wird er durch eine Einzellast am Trägerende. Für die Daten siehe folgende ASCII-Skizze:
| 20 kN
//|---> x |
//| V
//|----------------------
//| 10 m |
Elastizitätsmodul E = 2,1*10⁵ N/mm²
Flächenträgheitsmoment I = 0.001 m⁴
Berechnen Sie die Auflagerreaktionen, den Querkraft- und Biegemomentenverlauf, sowie die Verformungen.
Stellen Sie dies mit Hilfe von SymPy graphisch und auch mittels Formeln dar. Verwenden Sie dazu auch pprint (pretty print) aus dem SymPy-Modul. Zwecks Lösungsansatz siehe die oben aufgeführte Seite "Continuum Mechanics Tutorials". Achten Sie auch auf die Einheiten! Kontrollieren Sie das Ganze mittels händischer Rechnung. In dem genannten Tutorial ist von "Singularity Functions" die Rede. Gemeint ist damit in diesem Kontext die {{W|Föppl-Klammer}}.
Einige Python-Programme, vorrangig zu Maschinenelementen, finden sich auf [https://baymp.de/download_python.html BayMP für Python] (Balken, Zahnräder, Stabknickung usw.).
=Thermodynamik=
Für thermodynamische Aufgabenstellungen gibt es verschiedene externe Module. Eines davon ist PYroMat. Damit lassen sich thermodynamische Stoffdaten für viele Substanzen berechnen.
Beispiel (einige Stoffdaten für Wasser bei 400°C und 20 bar berechnen):
import pyromat as pm
# Wasserdaten laden:
H2O = pm.get('mp.H2O')
# Stoffdaten berechnen:
T = 673.15 # Temperatur in Kelvin
p = 20 # Druck in bar
v = H2O.v(T, p)
h = H2O.h(T, p)
s = H2O.s(T, p)
print(f"Spezifisches Volumen: {v} m³/kg")
print(f"Spezifische Enthalpie: {h} kJ/kg")
print(f"Spezifische Entropie: {s} kJ/(kg K)")
Ausgabe:
Spezifisches Volumen: [0.1512163] m³/kg
Spezifische Enthalpie: [3248.3789473] kJ/kg
Spezifische Entropie: [7.12924142] kJ/(kg K)
<small>
PYroMat muss vorab installiert werden (z.B. mittels pip, in eine virtuelle Umgebung)
</small>
<code>mp</code> steht für "multi phase". Für ein ideales Gas wäre <code>ig</code> zuständig, z.B. <code>'ig.O2'</code>.
Ein anderes Modul für einen anderen Aufgabenzweck ist TESPy ('''T'''hermal '''E'''ngineering '''S'''ystems in '''Py'''thon). Dieses Modul ist für die Anlagensimulation zuständig. Für nähere Informationen siehe die entsprechende Website weiter unten in diesem Text.
= Stochastik =
Die Stochastik ist ein sehr weites Feld. Hier werden nur einige wenige sehr einfache, aber wichtige Themen angerissen. Python stellt mit den Moduln math und statistics Software zu diesem Zwecke bereit. math und statistics sind bereits im Lieferumfang von Python enthalten. Aber auch mit den externen Modulen NumPy, SciPy und pandas kann man Stochastik in Python betreiben. Dies wird hier aber nicht gemacht.
== Lageparameter ==
import statistics
werte = [1, 3, 4, 4, 1, 7, 9, 1, 2, 3]
m1 = statistics.mean(werte)
m2 = statistics.mode(werte)
m3 = statistics.median(werte)
print("Arithmetischer Mittelwert = ", m1)
print("Modalwert = ", m2)
print("Median = ", m3)
Ausgabe:
Arithmetischer Mittelwert = 3.5
Modalwert = 1
Median = 3.0
== Streuungsparameter ==
import statistics
werte = [1, 3, 4, 4, 1, 7, 9, 1, 2, 3]
s = statistics.stdev(werte)
print("Standardabweichung = ", s)
Ausgabe:
Standardabweichung = 2.6770630673681683
== Kombinatorik ==
import math
n = 7
k = 5
print("n! = ", math.factorial(n))
print("Kombinationen (n über k) = ", math.comb(n, k))
Ausgabe:
n! = 5040
Kombinationen (n über k) = 21
= Ein- und Ausgabe =
== print ==
Die Anweisung print haben wir schon oft verwendet. Hier soll anhand von Beispielen kurz beschrieben werden, was der Befehl print leisten kann.
print("Hallo", "Welt", 1, sep="-")
print("Hallo", end=" ")
print("Welt")
Ausgabe:
Hallo-Welt-1
Hallo Welt
== input ==
a = int(input("Zahl 1: "))
b = int(input("Zahl 2: "))
print("a + b = ", a+b)
Ausgabe (nach Eingabe der beiden Ganzzahlen):
Zahl 1: 4
Zahl 2: 5
a + b = 9
== Aus Dateien lesen ==
Es seinen die datei.txt
Hallo Welt.
Wie geht es dir?
...
und test1.py
dat = open("datei.txt", mode = "r")
print(dat.read())
dat.close()
Ausgabe
Hallo Welt.
Wie geht es dir?
...
Mit dem open()-Befehl wird die Datei datei.txt im Lesemodus geöffnet (r ... read). Mit dem read()-Befehl wird die Datei eingelesen und mittels print ausgegeben.
== In Dateien schreiben ==
dat = open("datei.txt", mode = "a", encoding = "utf-8")
dat.write("Hänge Zeile an\n")
dat.close()
Die Datei datei.txt sieht nach Abarbeitung des obigen Skripts nun so aus
Hallo Welt.
Wie geht es dir?
...
Hänge Zeile an
Es wird die Datei im Schreibmodus geöffnet (a ... append (anhängend), w ... write (überschreibend)).
write() fügt hier also eine Zeile Text am Dateiende ein. close() schließt die Datei wieder.
Das close() kann man sich mit der with-Anweisung auch sparen.
with open("datei.txt", mode="a", encoding="utf-8") as dat:
dat.write("Hänge Zeile an\n")
= Benutzeroberflächen erstellen =
== tkinter ==
{{Wikipedia | Tkinter}}
Python bietet standardmäßig das Modul tkinter zur Programmierung von Benutzeroberflächen. Es müssen also bei der Verwendung von tkinter keine externen Module installiert werden. Hier wird eine (sehr) kurze Einführung in das Erstellen von grafischen Oberflächen mittels tkinter gegeben.
import tkinter as tk
win = tk.Tk()
win.title("Hallo Welt!")
win.minsize(300, 50)
but = tk.Button(win, text = "Push the button")
but.pack()
win.mainloop()
Ausgabe:
[[Datei:PythonIng_gui1.jpg]]
Ein etwas komplizierteres Beispiel sei nachfolgend gezeigt. Es sollen zwei Strings miteinander verknüpft und ausgegeben werden.
import tkinter as tk
win = tk.Tk()
win.title("Hallo Welt!")
def on_button_clicked():
str = ent1.get() + ent2.get()
lab2["text"] = str
ent1 = tk.Entry(win)
ent2 = tk.Entry(win)
lab1 = tk.Label(win, text="verknuepfen mit")
lab2 = tk.Label(win, text="")
but = tk.Button(win, text = "=", command=on_button_clicked)
ent1.pack(side="left")
lab1.pack(side="left")
ent2.pack(side="left")
but.pack(side="left")
ent2.pack(side="left")
lab2.pack(side="left")
win.mainloop()
Ausgabe (vor der Eingabe der Teilstrings):
[[Datei:PythonIng_gui2.jpg]]
Ausgabe (nach der Eingabe der Teilstrings und dem Drücken des =-Buttons):
[[Datei:PythonIng_gui3.jpg]]
== curses ==
{{Wikipedia | curses}}
Mit dem curses-Modul lassen sich u.a. TUIs ('''T'''ext '''U'''ser '''I'''nterfaces) erstellen. Ein sehr einfaches Beispiel zur allgemeinen Funktionsweise wird nachstehend geliefert.
import curses
stdscr = curses.initscr()
curses.start_color()
curses.init_pair(1, curses.COLOR_RED, curses.COLOR_WHITE)
stdscr.clear()
stdscr.addstr("Hallo Welt", curses.color_pair(1))
stdscr.refresh()
stdscr.getch()
curses.endwin()
Als Ausgabe sollte <span style="color:#FF0000;">Hallo Welt</span> (rote Schrift auf weißem Hintergrund) auf dem Terminal/der Konsole erscheinen. Getestet wurde dies mit openSUSE Tumbleweed, Python-Version 3.13.12. Das entsprechende Python-curses-Package muss installiert sein.
Allgemeine Informationen zur Terminal-/Konsolengröße und Cursorposition liefert folgendes Programm:
import curses
stdscr = curses.initscr()
stdscr.addstr(3, 5, "LINES: %d" % curses.LINES)
stdscr.addstr(4, 5, "COLS: %d" % curses.COLS)
(y,x) = stdscr.getyx()
stdscr.addstr(5, 5, "Momentane Cursorposition: [%d, %d]" % (y, x))
(y,x) = stdscr.getbegyx()
stdscr.addstr(6, 5, "Koordinatenursprung: [%d, %d]" % (y, x))
(y,x) = stdscr.getmaxyx()
stdscr.addstr(7, 5, "Fenstergröße: [%d, %d]" % (y, x))
stdscr.addstr(11, 2, "Taste drücken -> Ende")
stdscr.refresh()
stdscr.getch()
curses.endwin()
Es sollte sich in etwa folgende Ausgabe ergeben:
LINES: 44
COLS: 110
Momentane Cursorposition: [4, 15]
Koordinatenursprung: [0, 0]
Fenstergröße: [44, 110]
Taste drücken -> Ende
Zur Funktionsweise von curses siehe auch das Wikibook [[ncurses]]. Zum Verständnis sind dort allerdings elementare Kenntnisse in der Programmiersprache C erforderlich.
== Qt ==
{{Wikipedia | Qt (Bibliothek)}}
Auch für das Qt-Framework gibt es eine Anbindung an Python. Nachfolgend ein einfaches Beispiel.
import sys
from PySide6.QtWidgets import QApplication, QLabel
app = QApplication(sys.argv)
label = QLabel("Hallo Welt!")
label.show()
sys.exit(app.exec())
Ausgabe:
[[Datei:PythonIng_gui10.png]]
== Gtk ==
{{Wikipedia | GTK (Programmbibliothek)}}
Eine idente Ausgabe, wie oben für Qt gezeigt, erzeugt z.B. folgendes Gtk-Programm:
import gi
gi.require_version("Gtk", "4.0")
from gi.repository import Gtk
def on_activate(app):
win = Gtk.ApplicationWindow(application=app)
lab = Gtk.Label(label="Hallo Welt!")
win.set_child(lab)
win.present()
app = Gtk.Application()
app.connect('activate', on_activate)
app.run(None)
Auch für die Benutzung von Qt und Gtk müssen die jeweiligen Packages installiert sein. Getestet wurden die entsprechenden Python-Programme nur unter openSUSE Tumbleweed. Wie das GTK-Paket unter MS Windows 11 installiert wird, siehe z.B. [https://www.gtk.org/docs/installations/windows Setting up GTK for Windows].
Damit sei aber das Thema "Benutzeroberflächen erstellen" hier abgeschlossen, da dies schon ein sehr spezielles Aufgabengebiet ist, das eher Informatiker und nicht so sehr Ingenieure anspricht. Bei Bedarf siehe aber ggf. die entsprechenden Links unten in diesem Tutorial. Dort sind weiterführende Informationen zu finden.
= Style Guide, flake8 und Black =
Wie man schönen und richtigen Python-Code schreibt, erfahren Sie in
* [https://peps.python.org/pep-0008/ PEP 8 – Style Guide for Python Code]
Ein Modul, das prüft, ob die Richtlinien im Style Guide eingehalten wurden, ist ''flake8'':
* [https://flake8.pycqa.org/en/latest/ Flake8: Your Tool For Style Guide Enforcement]
Code formatieren kann man auch mit [https://pypi.org/project/black/ Black]. Z.B. übersetzt <code>black test1.py</code> die Datei <code>test1.py</code>
import sympy as sp
H = sp.Symbol("H", positive=True)
T = sp.Symbol("T", positive=True)
t = sp.Symbol("t")
f = sp.Piecewise(
(H, (t > 0) & (t < T / 2)),
(2 * H / T * (t - T / 2), (t > T / 2) & (t < T))
)
f_series = sp.fourier_series(f, (t, 0, T))
sp.pprint(f_series.truncate(4))
in
import sympy as sp
H = sp.Symbol("H", positive=True)
T = sp.Symbol("T", positive=True)
t = sp.Symbol("t")
f = sp.Piecewise(
(H, (t > 0) & (t < T / 2)), (2 * H / T * (t - T / 2), (t > T / 2) & (t < T))
)
f_series = sp.fourier_series(f, (t, 0, T))
sp.pprint(f_series.truncate(4))
Die Programmausgabe ist
reformatted test1.py
All done! ✨ 🍰 ✨
1 file reformatted.
Der Unterschied zwischen Black und Flake8:
* Black ist ein Code-Formatter. Er formatiert Ihren Code um, sodass er im Einklang mit PEP 8 steht.
* Flake8 ein Code-Linter. Flake8 verändert Ihren Code nicht, sondern durchsucht ihn nach potenziellen Fehlern etc.
Am obigen Beispiel sieht man auch, dass flake8 und Black nicht immer einer Meinung sind. Flake8 würde standardmäßig den mit Black formatierten Code bemängeln:
test1.py:8:80: E501 line too long (80 > 79 characters)
Diese Diskrepanz kann beseitigt werden. Da 79 Zeichen auf modernen Bildschirmen meist als zu kurz empfunden werden, ist ein Limit von 88 Zeichen (Black-Standard) oder mehr empfehlenswert. Um dies zu implementieren, erstellen Sie in Ihrem Projektverzeichnis eine <code>.flake8</code>-Datei mit dem Inhalt
[flake8]
max-line-length = 88
Und schon tritt ignoriert Flake8 dieses Problem.
= Einige Integrierte Entwicklungsumgebungen (IDEs)=
Werden Programmtexte größer und umfangreicher, so ist das Arbeiten mit der interaktiven Programmierumgebung bzw. das direkte Ausführen von Python-Skripten mühsam. Man wünscht sich z.B. Hilfen zum Debuggen oder die automatische Code-Vervollständigung. Zu diesem Zweck wurden IDEs (Integrated Development Environments) geschaffen. Von diesen seinen nachfolgend auszugsweise einige kurz beschrieben. Testen Sie einfach aus, welche davon für Sie bzw. für Ihr Python-Projekt geeignet sind.
== IDLE ==
IDLE ist die mit dem Python-Programmpaket mitgelieferte IDE. Der Name leitet sich einerseits ab vom Monty-Python-Mitglied Eric Idle, andererseits steht es als Abkürzung für "'''I'''ntegrated '''D'''evelopment and '''L'''earning '''E'''nvironment. IDLE ist einfach zu bedienen, bietet aber schon einen beachtlichen Leistungsumfang. Nachfolgend wird ein Screenshot zu IDLE geliefert. Rechts ist das Editor-Fenster zu sehen, links die interaktive Programmierumgebung. Um das Beispiel selbst nachvollziehen zu können, starten Sie IDLE. Das geht ähnlich, wie Sie die interaktive Programmierumgebung von Python starten (nur, dass Sie eben das IDLE-Icon doppelklicken und nicht das Python-Icon. Unter Linux geben Sie einfach in einem Terminal <code>idle3.13</code> o. Ä. ein). Weiter geht es mit "File - Open - ...". Die auszuführende Datei auswählen (im konkreten Fall ein "Hallo-Welt"-Programm). Es erscheint das rechte Fenster. Dort "Run - Run Module" auswählen. Und schon wird im linken Fenster "Hallo Welt!" ausgegeben.
[[Datei:PythonIng_idle1.jpg | 600px]]
Siehe auch {{W|IDLE}}.
== PyCharm ==
PyCharm ist ein kommerzielles Produkt. Es gab aber auch eine kostenlose Community Edition. Seit 2025 sind beide Varianten vereint. Für die ersten 30 Tage sind die Pro-Funktionen frei verfügbar, danach nur noch die Kernfunktionalitäten (oder man bezieht kostenpflichtig die Pro-Version). Zu beziehen ist PyCharm unter dem Weblink [https://www.jetbrains.com/pycharm/]. Nachfolgend ein etwas abgewandeltes "Hallo Welt"-Programm, editiert und ausgeführt mit PyCharm.
[[Datei:PyCharm_IDE_2023_screenshot.png | 600px]]
Siehe auch {{W|PyCharm}}.
== Eric ==
Auch eric ist Open Source und steht unter der GNU General Public License Version 3 oder später. Zu beziehen ist diese Software unter [https://eric-ide.python-projects.org/].
[[Datei:Screenshot_Eric_4.png | 600px]]
Siehe auch {{W|eric (Software)}}.
<small>
Unter openSUSE Tumbleweed sollte sich eric auch mit YaST installieren lassen. Bei mir gibt es aber dann beim Ausführen des eric-Programms eine Fehlermeldung (Stand März 2026):
...
ModuleNotFoundError: No module named 'PyQt6.QtPdfWidgets'
Umgehen kann man dieses Problem aber wieder mit dem Erstellen einer virtuellen Umgebung, in etwa so
python3.13 -m venv ~/tmp/venv1
cd ~/tmp/venv1/bin
./python3.13 -m pip install --upgrade --prefer-binary eric-ide
./eric7_ide
</small>
== PyScripter ==
Vom Funktionsumfang vergleichbar mit den vorherigen IDEs ist PyScripter. Auch PyScripter ist Open Source. Die Projekt-Homepage findet sich auf [https://sourceforge.net/projects/pyscripter/]. PyScripter ist nur für MS Windows verfügbar.
[[Datei:PythonIng_pyscripter1.jpg | 600px]]
== Spyder IDE ==
Spyder enthält bereits eine stabile Python-Version und etliche Module (z.B. matplotlib, numpy, control). Ansonsten kann dieses Softwarepaket vom Funktionsumfang her mit den anderen genannten IDEs locker mithalten. Spyder wurde unter der MIT-Lizenz veröffentlicht. Diese Software findet sich auf [https://www.spyder-ide.org].
[[Datei:Spyder-windows-screenshot.png | 600px]]
Siehe auch {{W|Spyder (Software)}}
== Sonstige ==
Die genannten IDEs sind nicht die Einzigen. Es gibt, um dem Image Pythons als beliebteste Programmiersprache gerecht zu werden, noch einige andere. Sowohl Open Source-Programme als auch kommerzielle Programme sind im Web zu finden, z.B. Thonny oder {{W|Visual Studio Code}}. Braucht man den Umfang von ausgewachsenen IDEs nicht, so kann man auch normale Texteditoren verwenden (z.B. {{W|Geany}} oder {{W|Kate_(Texteditor)|Kate}}).
= Debuggen und Testen =
Das Debuggen und Testen von Programmen sind wichtige Bestandteile der Programmierung. Syntaxfehler lassen sich i.A. leicht beheben. Schwieriger ist das Eingrenzen von logischen Fehlern, die ev. nur in bestimmten Situationen auftreten und keine explizite Fehlermeldung hervorrufen. Das Programm liefert falsche Ergebnisse oder es stürzt aus heiterem Himmel ab. Um das zu verhindern gibt es verschiedene Werkzeuge, die bei der Fehlersuche behilflich sein können. Vorerst siehe aber zwecks Begriffsklärung noch folgende Links:
* {{W|Debuggen}}
* {{W|Debugger}}
* {{W|Softwaretest}}
<gallery>
First Computer Bug, 1947.jpg
Test ganzheitlich.png
V-Modell.svg
</gallery>
== Das Modul pdb ==
Python bringt schon ein Modul zum Debuggen mit. Siehe z.B. [https://docs.python.org/3/library/pdb.html pdb — The Python Debugger].
Komfortabler lässt sich das aber mittels Integrierter Entwicklungsumgebungen (IDEs) angehen.
== Debuggen mit IDEs ==
Für die IDEs IDLE und Spyder sei kurz auf die entsprechenden Webseiten verwiesen:
* [https://www.cs.uky.edu/~keen/help/debug-tutorial/debug.html Debugging under IDLE].
* [https://docs.spyder-ide.org/current/panes/debugging.html Spyder Debugger]
Dort wird die Vorgehensweise auch mittels Screenshots erläutert.
== assert ==
assert ... behaupten, zusichern ({{W|Assertion (Informatik)}})
Python-Code:
def print1(x, y):
assert type(x) == float
assert type(y) == float
assert y != 0.0
print(x/y)
print1(10., 5.)
print1(10., 0.)
Ausgabe:
2.0
Traceback (most recent call last):
File "/home/hr/Develop/test1.py", line 8, in <module>
print1(10., 0.)
File "/home/hr/Develop/test1.py", line 4, in print1
assert y != 0.0
^^^^^^^^
AssertionError
Python-Code:
def print1(x, y):
assert type(x) == float
assert type(y) == float
assert y != 0.0
print(x/y)
print1(10., 5.)
print1("10.", "5.")
Ausgabe:
2.0
Traceback (most recent call last):
File "/home/hr/Develop/test1.py", line 8, in <module>
print1("10.", "5.")
File "/home/hr/Develop/test1.py", line 2, in print1
assert type(x) == float
^^^^^^^^^^^^^^^^
AssertionError
Aber auch bei nachfolgendem Code gibt es eine Fehlermeldung:
def print1(x, y):
assert type(x) == float
assert type(y) == float
assert y != 0.0
print(x/y)
print1(10., 5.)
print1(10, 5)
Ausgabe:
2.0
Traceback (most recent call last):
File "/home/hr/Develop/test1.py", line 8, in <module>
print1(10, 5)
File "/home/hr/Develop/test1.py", line 2, in print1
assert type(x) == float
^^^^^^^^^^^^^^^^
AssertionError
Damit letzteres funktioniert, kann man den Programmcode so umschreiben:
def print1(x, y):
assert type(x) == float or type(x) == int
assert type(y) == float or type(y) == int
assert y != 0.0
print(x/y)
print1(10., 5.)
print1(10, 5)
Ausgabe:
2.0
2.0
Und jetzt fangen wir den <code>AssertionError</code> auf:
def print1(x, y):
try:
assert type(x) == float or type(x) == int
assert type(y) == float or type(y) == int
assert y != 0.0
print(x/y)
except(AssertionError):
print("Hallo")
print1(10., 5.)
print1("10.", "5.")
Ausgabe:
2.0
Hallo
Ich hoffe, es ist wenigstens im Ansatz klar geworden, wofür <code>assert</code> gut sein kann. Ausschalten kann man die <code>assert</code>-Überprüfung übrigens mit dem Python-Schalter <code>-O</code>.
== Doctests ==
Innerhalb eines Docstrings kann die Arbeit im interaktiven Modus simuliert werden. Nach den Promptzeichen (>>>) erfolgen dann bei unserem Beispiel innerhalb des Docstrings simulierte Aufrufe der Funktion <code>print1()</code>. Danach folgen jeweils die Sollresultate. Wird das Modul oder die Datei als Hauptprogramm aufgerufen, so wird die Funktion <code>doctest.testmode()</code> aufgerufen und ein Bericht auf der Konsole ausgegeben. Wird das Modul nicht als Hauptprogramm aufgerufen, sondern importiert, dann wird diese <code>testmod</code>-Funktion nicht aufgerufen. D.h. dieser Code kann sowohl für Testzwecke als auch für den produktiven Einsatz verwendet werden. Das ist auch sinnvoll, weil wenn man Teile der Datei immer löschen bzw. einfügen müsste, so würden sich Fehlerquellen auftun. Das würde den Sinn und Zweck von Doctests konterkarieren.
def print1(x=0., y=1.):
""" Dividiere zwei Zahlen
Autor: Intruder
Datum: 12.08.2025
>>> print1(2., 1.)
2.0
>>> print1(5., 2.)
2.5
>>> print1(5.)
5.0
"""
print(x/y)
if __name__ == "__main__":
import doctest
doctest.testmod(verbose=True)
Ausgabe:
Trying:
print1(2., 1.)
Expecting:
2.0
ok
Trying:
print1(5., 2)
Expecting:
2.5
ok
Trying:
print1(5.)
Expecting:
5.0
ok
1 items had no tests:
__main__
1 items passed all tests:
3 tests in __main__.print1
3 tests in 2 items.
3 passed and 0 failed.
Test passed.
Das gezeigte Beispiel ist so ziemlich das einfachste, das es gibt. Für weiterführende Details siehe z.B.:
* [https://peps.python.org/pep-0257/ PEP 257 – Docstring Conventions]
* [https://docs.python.org/3/library/doctest.html doctest — Test interactive Python examples]
== pytest ==
Siehe zu diesem Thema auch {{W|Modultest}}.
pytest ist ein externes Modul und muss vorab installiert werden, z.B. mittels
pip install -U pytest
pip install -U pytest-html
Python-Code, Datei test1.py:
def add(x, y):
return x + y
def test_answer():
assert add(1, 1) == 3
Starten von pytest in der Konsole:
pytest test1.py
Ausgabe:
==================================================== test session starts ====================================================
platform linux -- Python 3.12.11, pytest-8.4.1, pluggy-1.6.0
rootdir: /home/hr/Develop
plugins: anyio-4.10.0, metadata-3.1.1, html-4.1.1
collected 1 item
test1.py F [100%]
========================================================= FAILURES ==========================================================
________________________________________________________ test_answer ________________________________________________________
def test_answer():
> assert add(1, 1) == 3
E assert 2 == 3
E + where 2 = add(1, 1)
test1.py:6: AssertionError
================================================== short test summary info ==================================================
FAILED test1.py::test_answer - assert 2 == 3
===================================================== 1 failed in 0.09s =====================================================
Hier erhalten wir einen Fehler, da 1+1 eindeutig ungleich 3 ist. Aber aus irgendeinem Grund wollte der Programmierer oder Tester in diesem Fall, dass dies so ist. Testfälle werden übrigens mit dem Präfix <code>test_</code> eingeleitet.
Python-Code:
def add(x, y):
return x + y + 1
def test_answer():
assert add(1, 1) == 3
Ausgabe:
==================================================== test session starts ====================================================
platform linux -- Python 3.12.11, pytest-8.4.1, pluggy-1.6.0
rootdir: /home/hr/Develop
plugins: anyio-4.10.0, metadata-3.1.1, html-4.1.1
collected 1 item
test1.py . [100%]
===================================================== 1 passed in 0.01s =====================================================
Jetzt ist alles in Ordnung. Weiterführendes siehe z.B.
* [https://docs.pytest.org/en/stable/ pytest: helps you write better programs]
== unittest ==
Auch unittest dient zur Durchführung von Testreihen, ist aber Bestandteil von Python. Hier wird vorerst nicht näher darauf eingegangen. Siehe z.B.
* [https://docs.python.org/3/library/unittest.html unittest — Unit testing framework]
Lt. ''Inden: Python Challenge; dpunkt, 2021, Seite 481'' soll unittest weniger komfortabel als pytest sein.
Einen Vergleich von unittest mit pytest findet man in
* [https://knapsackpro.com/testing_frameworks/difference_between/pytest/vs/unittest pytest vs unittest]
= Ausblick =
Dies war eine kurze Einführung in die Berechnungs- und Darstellungsmöglichkeiten mit Python. Es sollten etliche relevante Themen behandelt, oder zumindest kurz angesprochen worden sein. Wem dieser Text nicht ausreichend ist, der sei auf die entsprechenden weiterführenden Weblinks, Bücher und die Python-Hilfefunktion verwiesen. Python kennt noch viel mehr Befehle, als hier dargestellt wurden. Das Themenspektrum ist auch durch die Einbindung externer Module fast beliebig erweiterbar.
= Weblinks=
== Python allgemein ==
* [https://www.python.org/ Python Homepage]
== Externe mathematische Module ==
* [https://numpy.org/ NumPy]
* [https://numpy.org/doc/stable/user/numpy-for-matlab-users.html NumPy for MATLAB users]
* [https://scipy.org/ SciPy]
* [https://www.sympy.org/en/index.html SymPy]
* [https://pandas.pydata.org/ pandas]
* [https://github.com/maroba/findiff findiff]
* [https://mpmath.org/ mpmath]
== Externe Module für Grafiken ==
* [https://matplotlib.org/ Matplotlib]
* [https://vpython.org/ VPython]
* [https://docs.vtk.org/en/latest/api/python.html VTK]
== Erstellung von User Interfaces ==
* [https://docs.python.org/3/library/tkinter.html tkinter - Python interface to Tcl/Tk]
* [https://docs.python.org/3/library/curses.html curses - Terminal handling for character-cell displays]
* [https://wiki.qt.io/Qt_for_Python Qt for Python]
* [https://www.gtk.org/docs/language-bindings/python GTK and Python]
== Erstellen virtueller Umgebungen ==
* [https://docs.python.org/3/library/venv.html venv - Creation of virtual environments]
== Sonstige ==
* [https://python-control.readthedocs.io/en/stable/ Python Control Systems Library]
* [https://pypi.org/project/regex/ regex - Regular Expressions]
* [http://pyromat.org/ PYroMat]
= Bücher =
== Gedruckte Bücher, OpenBooks, Magazine ==
* Diverse: c't Python Lernen, Verstehen, Anwenden; Heise, 2022
* Ernesti, Kaiser: Python3 - das umfassende Handbuch; 5. Aufl., Rheinwerk, [https://openbook.rheinwerk-verlag.de/python/ OpenBook]
* Inden: Python Challenge; dpunkt, 2021, ISBN 978-3-86490-809-5
* Klein: Numerisches Python; 2. Aufl., Hanser, 2023, ISBN 978-3-446-47170-2
* Steinkamp: Der Python-Kurs für Ingenieure und Naturwissenschaftler; Rheinwerk, 2021, ISBN 978-3-8362-7316-9
* Weigend: Python 3 - Das umfassende Praxisbuch; 9. Aufl., mitp, 2022, ISBN 978-3-7475-0544-1
* Woyand: Python für Ingenieure und Naturwissenschaftler; 4. Aufl., Hanser, 2021, ISBN 978-3-446-46483-4
== Andere Wikibooks ==
* [[:en:Subject:Python_programming_language | Englische Wikibooks zum Thema Python]]
* [[Python|Deutschsprachiges Python-Wikibook]] [[Bild:2von10.png|20%]]
* [[Python unter Linux|Python 2.7 unter Linux]] [[Bild:10von10.png|100%]]
{{Navigation_zurückhochvor_buch|
zurücktext=Julia für Ingenieure|
zurücklink=Ing Mathematik: Julia|
hochtext=Gesamtinhaltsverzeichnis|
hochlink=Ing:_Mathematik_für_Ingenieure|
vortext=Landau-Notation|
vorlink=Ing Mathematik: Landau}}
n1u2qllyg0g0i199pj72dk77avjyckm
1086428
1086427
2026-05-20T16:30:33Z
Intruder
1513
/* Sonstige */
1086428
wikitext
text/x-wiki
{{Navigation_zurückhochvor_buch|
zurücktext=Julia für Ingenieure|
zurücklink=Ing Mathematik: Julia|
hochtext=Gesamtinhaltsverzeichnis|
hochlink=Ing:_Mathematik_für_Ingenieure|
vortext=Landau-Notation|
vorlink=Ing Mathematik: Landau}}
= Hallo Welt und allgemeine Hinweise =
== Was ist Python ==
* Python ist eine universelle höhere Programmiersprache.
* Python ist objektorientiert.
* Python ist Open-Source (Python Software Foundation License).
* Python ist für viele Betriebssysteme erhältlich (z.B. für Linux, MS Windows, macOS).
* Python ist ein Interpreter.
* Python ist durch Module fast beliebig erweiterbar.
* Python als Programmiersprache ist case-sensitive - d.h. Groß- und Kleinschreibung ist relevant bei der Eingabe von Befehlen.
{{Wikipedia | Python (Programmiersprache)}}
== Python installieren ==
=== MS Windows ===
Laden Sie das aktuelle Python-Paket von der Webseite [https://www.python.org/] herunter. Weiter geht es wie bei jedem anderen größeren zu installierenden Programm. Einfach das Installationsprogramm im Explorer doppelklicken und den Anweisungen des Setup-Programmes folgen.
=== Linux ===
Entweder ist Python bereits standardmäßig installiert, ansonsten ist die Installation mittels Paketmanagementsystem einfach möglich. Aber auch die Spyder-Entwicklungsumgebung ([https://www.spyder-ide.org]) bietet einen guten Einstieg mit Python (das gilt auch für MS Windows). Spyder bringt auch schon etliche wichtige Module standardmäßig mit.
== Python starten ==
=== MS Windows ===
Das Icon für das Python-Programm doppelklicken. Und schon startet das Programm.
[[Datei:PythonIng_start1.jpg]]
Python im interaktiven Modus präsentiert sich dann so:
Python 3.12.4 (tags/v3.12.4:8e8a4ba, Jun 6 2024, 19:30:16) [MSC v.1940 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
Alternativ kann das Programm auch über die Eingabeaufforderung oder die PowerShell gestartet werden:
c:\devel\Python>python.exe
Python 3.12.4 (tags/v3.12.4:8e8a4ba, Jun 6 2024, 19:30:16) [MSC v.1940 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
=== Linux ===
Tippen Sie einfach das Wort „python“ (oder unter openSUSE Tumbleweed z.B. auch „python3.11“ oder „python3.13“) in einem Linux-Terminal ein, schließen den Befehl mit der RETURN-Taste ab, und schon startet Python im interaktiven Modus:
Python 3.13.12 (main, Feb 09 2026, 22:37:44) [GCC] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
Es gibt auch noch andere Möglichkeiten Python zwecks Programmausführung zu starten, z. B. den {{W|Shebang}} (<code>#!</code>) am Beginn eines Python-Scripts. Das Script sei als Script.py gespeichert. Dann kann das Script mit ./Script.py ausgeführt werden. Für openSUSE Tumbleweed sei nachfolgend ein lauffähiges "Hallo Welt!"-Script angegeben. Es wird in diesem Script der Python-Interpreter in der Version 3.13 verwendet :
#!/usr/bin/python3.13
print("Hallo Welt!")
Die Berechtigungen zum Ausführen der Datei müssen natürlich noch richtig gesetzt werden, z.B. mittels <code>chmod 777 Script.py</code>.
<small>Oder es wird in einen Pfad verschoben, in dem sich ausführbare Programme generell befinden (<code>echo $PATH</code>). Das Script kann dann wie ein normales Programm ohne weitere Angaben mit Script.py gestartet werden. Alternativ wird nicht das Script an sich verschoben, sondern nur ein symbolischer Link angelegt, z.B. mit <code>ln -s ~/tmp/Script.py ~/.local/bin/Script.py</code>.<code>~/.local/bin</code> sei ein im PATH gelegenes Verzeichnis. Dies sind aber schon Features für fortgeschrittene Linux-Benutzer und werden am Anfang eher selten benötigt.</small>
== Ein paar Worte zur Erklärung ==
Getestet wurden die Beispiele unter den Betriebssystemen
* MS Windows 10 mit der Python-Version 3.12.0 (teilweise auch mit 3.12.2 und 3.13.1; nur die Inhalte die bis spätestens Juli 2025 erstellt wurden)
* MS Windows 11 ab der Python-Version 3.13.4 (nur zum Teil; ab Juli 2025)
* openSUSE Leap 15.6 mit der Python-Version 3.11.12 (Spyder, nur vereinzelt) und zum Teil mit 3.12.11 (ab Juli 2025 bis November 2025).
* openSUSE Tumbleweed ab der Python-Version 3.13.9 (nur vereinzelt, ab November 2025)
An Beliebtheit rangiert Python mit Stand März 2026 mit einem Rating von 21,25% an 1. Stelle vor C und C++ (lt. [https://www.tiobe.com/tiobe-index/ TPCI - TIOBE Programming Community Index]). Lt. [https://innovationgraph.github.com/global-metrics/programming-languages GitHub Top 50 Programming Languages Globally] lag Python im Q3/2025 auf Rang 2, vor TypeScript und hinter JavaScript. Der Name "Python" rührt von der Komikertruppe {{W|Monty Python}} her. Die Icons für Python (z.B. Python selbst, Eric IDE, IDLE) sind aber durch die Python-Schlangenart symbolisiert.
<gallery>
Python-logo-notext.svg|Python-Logo
Guido van Rossum OSCON 2006.jpg|Guido van Rossum (geb. 1956), der Erfinder von Python
</gallery>
== Ein erstes Programm ==
Kommentare werden in Python mit der Raute (#) eingeleitet. Sie werden vom Python-Interpreter ignoriert. Text kann mit der print-Funktion ausgegeben werden. Starten Sie Python und geben sie folgende Anweisungen zeilenweise ein
>>> # Das ist ein Kommentar
>>> print("Hallo Welt!")
Als Ergebnis erhalten Sie
Hallo Welt!
Der Prompt (>>>) ist selbstverständlich nicht einzutippen, sondern wird vom Python-System geliefert.
Strings können in Python entweder in Anführungszeichen (") gesetzt werden oder in Hochkommatas('). In diesem Text wird die erste Variante bevorzugt eingesetzt.
Im Gegensatz zu Julia ist es hier egal, ob zwischen <code>print</code> und der öffnenden Klammer Leerzeichen stehen.
= Python als Taschenrechner =
== Allgemeines ==
Wir wollen 3 * 5 berechnen. Dazu starten wir Python im interaktiven Modus. Geben Sie dann die Formel
>>> 3 * 5
ein, drücken die Taste ENTER/RETURN ({{Taste|↵}}) und erhalten als Ergebnis
15
Auch kompliziertere Ausdrücke sind möglich. Beispielsweise mit Winkelfunktionen, Quadratwurzeln etc. Wir wollen nun den Ausdruck <math>\sin\sqrt{15}</math> berechnen :
>>> import math
>>> math.sin(math.sqrt(15))
-0.6679052983383519
Als erstes wird das math-Modul importiert. Dann wird der mathematische Ausdruck berechnet.
Eine andere Variante, die dasselbe Ergebnis liefert, ist
>>> from math import *
>>> sin(sqrt(15))
-0.6679052983383519
Es wird also aus dem Modul <code>math</code> alles importiert (erkennbar am <code>*</code>). Will man nicht alles importieren, so kann man das auch einschränken:
>>> from math import sin, sqrt
Beenden lässt sich das Python-Programm durch Eingabe von <code>exit()</code> (und natürlich ist zur Bestätigung die RETURN-Taste zu drücken).
== Die Hilfefunktion von Python ==
Bei Eingabe der Anweisung help() springt Python in den Hilfemodus.
Eingabe:
>>> help()
Eingabe:
help> math.sin
Ausgabe:
Help on built-in function sin in math:
math.sin = sin(x, /)
Return the sine of x (measured in radians).
Für die komplette Python-Dokumentation siehe [https://docs.python.org/3/]. Verlassen kann man den Hilfemodus durch das Drücken von STRG-C.
== Aufgaben ==
* Erkunden Sie die Tangensfunktion "tan" mittels Python-Hilfe (vergessen Sie nicht das math-Modul zu importieren und das <code>math.</code> vor <code>tan</code>)
* Berechnen Sie mit Python den Ausdruck <math>\frac{1}{2}\cdot \text{e}^2 \cdot \tan(\pi/3)</math>. Siehe für die Exponentialfunktion im Python-Hilfesystem auch den Befehl <code>math.exp</code>. Alternativ kann auch die Konstante <code>math.e</code> eingesetzt werden. Potenzieren kann man bei Python mit dem **-Operator (z.B. 2**3 = 8). Für <math>\pi</math> gibt es <code>math.pi</code>.
= Python als Scriptsprache =
Häufig wird man aber kompliziertere Anweisungsfolgen verarbeiten müssen. Diese will man normalerweise nicht jedesmal neu eingeben, sondern in einer Datei speichern und diese Datei dann zur Ausführung bringen. Speichern Sie dazu folgenden Code in einer Textdatei, z.B. unter MS Windows als c:\tmp\test1.py
# Das ist ein Kommentar
print("Hallo Welt!")
Python-Dateien werden mit der Dateiendung .py versehen. Achten Sie darauf, dass vor dem print keine Leerzeichen vorhanden sind. Das ist eine Python-Eigenheit. Wie wir später sehen werden, nutzt Python Einrückungen als syntaktisches Mittel, z.B. um bei Schleifen den Schleifenkörper zu kennzeichnen.
Danach bringen Sie die Skriptdatei test1.py (sozusagen das Hauptprogramm) folgendermaßen zur Ausführung:
1) Starten Sie unter MS Windows die Eingabeaufforderung (oder alternativ auch die Windows PowerShell). Das sieht dann etwa so aus:
Microsoft Windows [Version 10.0.19045.3693]
(c) Microsoft Corporation. Alle Rechte vorbehalten.
C:\Users\xyz>
: <small>Falls jemand nicht weiß, wie man die Eingabeaufforderung startet: Eine Möglichkeit ist, einfach in der Taskleiste von Windows das "Start"-Symbol ([[Image:Windows_logo_-_2021_(Black).svg|10px]]) mit der rechten Maustaste anklicken. "Ausführen" auswählen (oder alternativ für die PowerShell unter Windows 10 den Eintrag "Windows PowerShell", unter Windows 11 den Eintrag "Terminal"). Im sich öffnenden Dialogfenster gibt man in die "Öffnen"-Zeile das Wort <code>cmd</code> ein und mit "OK" wird das Ganze bestätigt.</small>
2) Wechseln Sie mittels <code>cd c:\tmp</code> in das Verzeichnis c:\tmp
3) Angenommen, Sie haben Python unter dem Pfad <code>c:\devel\Python\</code> installiert. Starten Sie das Programm so (der Prompt <code>c:\tmp></code>ist natürlich nicht mit einzutippen):
c:\tmp>c:\devel\Python\python.exe test1.py
4) Wie erwartet ergibt sich folgende Ausgabe am Bildschirm
Hallo Welt!
Die Vorgehensweise unter Linux ist prinzipiell gleich. Die kleinen Unterschiede, wie z.B. der Slash statt dem Backslash in Pfadangaben, sollten für Linux-Benutzer keine Hürde darstellen.
== Variablen ==
Variablenbezeichner können aus Buchstaben (A-Za-z), Ziffern (0-9) und Underscores (_) bestehen, dürfen aber nicht mit einer Zahl beginnen. Führende Underscores haben u.a. im Kontext mit der Objektorientierten Programmierung eine spezielle Bedeutung und sollten nicht für "normale" Variablenbezeichner verwendet werden.
Gültige Variablenbezeichner wären also:
xyz
x1
_wert
name_anzahl
Es gibt in Python etliche Schlüsselwörter (z.B. for, if oder return). Diese dürfen nicht als eigene Variablenbezeichner verwendet werden. Eine Liste aller Schlüsselwörter liefert das Script
import keyword
print(keyword.kwlist)
<small>Übung: Speichern Sie dieses Script in eine Datei, z.B. in c:\tmp\test1.py. Führen Sie diese Datei aus, um die Liste der Schlüsselwörter auszugeben.</small>
Da Python case-sensitiv ist, repräsentieren folgende Bezeichner verschiedene Variablen:
xyz
XYZ
xYz
Werte werden an Variablen mittels Gleich-Zeichen (=) zugewiesen. Im Folgenden wird der Code immer in der Datei c:\tmp\test1.py gespeichert.
x = 5
y = 10
z = x*y
print(z)
Bringen Sie die Datei test1.py zur Ausführung so erhalten Sie folgende Bildschirmausgabe
50
Sie können auch mehrere Anweisungen in einer Zeile durch Semikolon getrennt schreiben. Dies führt aber zu unübersichtlichem Code.
x = 5; y = 10; z = x*y; print(z)
Ausgabe:
50
Auch aus der Programmiersprache C/C++ oder Java bekannte Konstrukte können Sie verwenden, z.B.
x = 5
# x = x - 2
x -= 2
print(x)
Bildschirmausgabe:
3
Beachten Sie, dass mit dem =-Zeichen eine Wertezuweisung durchgeführt wird. Dies ist nicht äquivalent zum mathematischen =-Zeichen, wie am vorigen Beispiel zu ersehen ist. Den Inkrement-/Dekrementoperator (z.B. x++ oder x--) aus C/C++ oder Java kennt Python aber nicht.
Variablen sind nicht an einen bestimmten Datentyp gebunden, folgendes ist mit Python problemlos möglich:
import math
wert = 10
print(wert)
wert = 35.5
print(wert)
wert = "Hallo"
print(wert)
wert = math.pi
print(wert)
Ausgabe:
10
35.5
Hallo
3.141592653589793
== Physische und logische Zeilen ==
In Python muss eine Anweisung in einer logischen Zeile Platz finden. Wird eine Anweisung aber zu lang für eine Zeile, dann kann sie in mehrere physische Zeilen unterteilt werden. Dies kann einerseits durch einen Backslash am Ende einer Zeile geschehen, z.B.
a = 2 + \
5
Dies stellt eine logische Zeile dar, die in zwei physische Zeilen unterbrochen ist.
Geklammerte Ausdrücke werden automatisch zu einer logischen Zeile verbunden, z.B.
a = (2 +
5)
Achtung: Im ersten Beispiel darf nach dem Backslash nichts mehr stehen, auch kein Kommentar. Dies trifft im zweiten Bespiel nicht zu, hier könnte noch ein Kommentar folgen, z.B.
a = (2 + # Kommentar
5)
Auch für Strings gibt es Möglichkeiten, diese auf mehrere Zeilen aufzuspalten.
# Kurzer String
str1 = "ABC"
# Langer String
str2 = """Hallo Welt,
Grüetzi Schwyzer,
Servus an alle"""
# Backslash
str3 = "UVW\
XYZ"
# Mit Klammern
str4 = ("Sehr langer Text, der automatisch .............. "
"in einer einzigen Variable zusammengefügt wird."
)
print(str1)
print(str2)
print(str3)
print(str4)
Ausgabe:
ABC
Hallo Welt,
Grüetzi Schwyzer,
Servus an alle
UVWXYZ
Sehr langer Text, der automatisch .............. in einer einzigen Variable zusammengefügt wird.
==Hexadezimale, oktale, binäre und andere Zahlen==
d = 1050 # Dezimalzahl
h = 0xAA2 # Hexadezimalzahl
o = 0o12 # Oktalzahl
b = 0b100001101 # Binärzahl
print(d)
print(h)
print(o)
print(b)
Ausgabe:
1050
2722
10
269
Groß- und Kleinbuchstaben sind in obigen Literalen übrigens egal. So kann man z.B. statt <code>0b1001</code> auch <code>0B1001</code> schreiben (siehe dazu [https://docs.python.org/3/reference/lexical_analysis.html#integer-literals]).
Sie können auch dezimale in hexadezimale Zahlen umwandeln, usw.:
h = hex(1050) # Dezimalzahl -> Hexadezimalzahl
b = bin(1050) # Dezimalzahl -> Binärzahl
o = oct(1050) # Dezimalzahl -> Oktalzahl
print(h)
print(b)
print(o)
Ausgabe:
0x41a
0b10000011010
0o2032
Gegeben sei die Zahl 121 zur Basis 3. Diese soll in eine Dezimalzahl umgewandelt werden. Das kann so geschehen:
z = int("121", 3)
print(z)
Ausgabe:
16
Dass dies richtig ist, davon kann man sich folgendermaßen überzeugen:
<math> 1 \cdot 3^2 + 2 \cdot 3^1 + 1 \cdot 3^0 = 9 + 6+ 1 = 16 </math>
Zahlen übersichtlicher schreiben kann man auch mittels Underscore, z.B.:
print("Eine Million (Variante 1) =", 1000000)
print("Eine Million (Variante 2) =", 1_000_000)
print("Eine Rechnung:", 2_000 * 400_000);
Es ergibt sich bei beiden Varianten die gleiche Ausgabe. Variante 2 ist aber im Sourcecode leichter lesbar, detto die Zahlen in der Rechnung:
Eine Million (Variante 1) = 1000000
Eine Million (Variante 2) = 1000000
Eine Rechnung: 800000000
== Strings und Platzhalter==
Ein paar einfache Beispiele:
print("Hallo {}" . format("Hugo"))
print("Hallo {:s}" . format("Hugo"))
print("Hallo %s" % "Hugo")
Ausgabe:
Hallo Hugo
Hallo Hugo
Hallo Hugo
Python-Code (formatted string literals):
str1 = "Hallo"
str2 = "Hugo"
print(f"{str1} {str2}")
Ausgabe:
Hallo Hugo
Komplexere Beispiele:
print("Hallo {} und {}" . format("Hugo", "Mike"))
print("Hallo {name1} und {name2}" . format(name2="Hugo", name1="Mike"))
# Füllzeichen: *
# Bündigkeit: > (=rechts), < (=links), ^ (=zentriert)
# Feldweite: 10
# Typ: s (=String), f (=Gleitkommazahl), d (=Dezimalzahl) etc.
print("Hallo {:*>10s}" . format("Hugo"))
print("Hallo {:*<10s}" . format("Hugo"))
Ausgabe:
Hallo Hugo und Mike
Hallo Mike und Hugo
Hallo ******Hugo
Hallo Hugo******
Python-Code:
str = "Hallo\t%s\t%7.2f\t%10.2e\t%i" % ("Hugo", 12.34567, 34.567, 264)
print(str)
Ausgabe:
Hallo Hugo 12.35 3.46e+01 264
== Unicode ==
Neben den bekannten ASCII-Zeichen lassen sich Zeichen auch mittels Unicode beschreiben. Griechische Buchstaben oder komplexere mathematische Operatoren - all das sollte kein Problem sein. Siehe auch {{W|Unicode}}, {{W|Liste der Unicodeblöcke}} und {{W|Unicodeblock Mathematische Operatoren}}. Im Folgenden werden ein paar Zeichen (Allquantor, Nabla-Operator, Existenzquantor), die man aus der Mathematik kennt, erzeugt.
ch1 = "\N{FOR ALL}"
ch2 = "\N{NABLA}"
ch3 = "\u2203"
print(ch1, ch2, ch3)
Ausgabe:
∀ ∇ ∃
<small>Diese Ausgabe ergibt sich z.B. mit der IDLE-Shell oder mit Cygwin. Beim Ausführen über die Windows-Eingabeaufforderung oder Windows PowerShell unter MS Windows 10 erfolgt keine korrekte Darstellung. IDLE ist die mit Python mitgelieferte IDE ('''I'''ntegrated '''D'''evelopment '''E'''nvironment, Integrierte Entwicklungsumgebung). Gegen Ende dieses Textes wird IDLE kurz beschrieben.
Das Problem mit der Windows Eingabeaufforderung lässt sich aber umgehen. Man muss nur eine Schriftart auswählen, die die Zeichen kennt, z.B. "DejaVu Sans Mono". Dazu klicken Sie einfach bei der Eingabeaufforderung mit der rechten Maustaste oben auf die weiße Leiste und wählen im aufpoppenden Fenster den Menüpunkt "Eigenschaften". Es öffnet sich ein Dialogfenster. Über den Reiter "Schriftart" lässt sich nun die Schriftart einstellen. Unter MS Windows 11 oder openSUSE Leap 15.6 (bash-Konsole) gibt es dieses Problem ohnehin nicht.</small>
== Reguläre Ausdrücke ==
Python kennt auch {{W|Regulärer Ausdruck|reguläre Ausdrücke}}. Dazu gibt es in Python das Modul <code>re</code>. Beipielsweise sollen alle Zahlen (<math>\text{zahl}\in\mathbb{N}_0</math>) in einem String gesucht und ausgegeben werden. Als String sei gegeben: <code>3x Grüße und 100 Kekse.</code> Das Muster (Pattern) ist <code>\d+</code>. <code>\d</code> steht für eine Dezimalziffer 0-9. Das Plus-Zeichen (+) steht symbolisch für ein oder mehrere Zeichen des vorherigen Ausdrucks. Hier also ein oder mehrere Dezimalziffern. Es wird die Funktion <code>findall</code> aus dem Modul <code>re</code>verwendet.
Python-Code:
from re import findall
str = "3x Grüße und 100 Kekse."
pat = "\\d+" # Doppel-Backslashes müssen verwendet werden, sonst gibt Python eine Warnung aus!
# alternativ: pat = r"\d+"
# oder: pat = "[0-9]+"
numb = findall(pat, str)
print(numb)
Ausgabe:
['3', '100']
Python kennt noch viele weitere Möglichkeiten mittels regulärer Ausdrücke zu hantieren. Dies soll hier aber nicht vertieft werden, da das Thema schon ziemlich speziell und komplex ist. Bei Bedarf siehe aber z.B. die Bücher ''Weigend, Seite 380ff'' und ''Ernesti, Kaiser'' [https://openbook.rheinwerk-verlag.de/python/28_001.html] oder die Python-Dokumentation [https://docs.python.org/3/library/re.html]. Auch [[Python unter Linux: Reguläre Ausdrücke]] liefert ein umfangreiches und brauchbares Python-2-Kapitel zu den regulären Ausdrücken. Die dort gelisteten Beispiele müssten ggf. vor Verwendung auf Python-3 umgeschrieben werden. <small>Wie macht man das? Dazu siehe z.B. [https://openbook.rheinwerk-verlag.de/python/43_001.html], [https://portingguide.readthedocs.io/en/latest/] oder [https://www.digitalocean.com/community/tutorials/how-to-port-python-2-code-to-python-3]</small>
<small>Es gibt auch ein externes Modul ''regex'', das bei Bedarf extra installiert werden muss ([https://pypi.org/project/regex/]). Es bietet zusätzliche Funktionalität und gründlicheren Unicode-Support. Dies sei hier aber nur der Vollständigkeit halber erwähnt.</small>
== Verzweigungen ==
=== if ===
Die IF-Verzweigung ist aus anderen Programmiersprachen bereits bekannt. In Pseudocode lässt sie sich folgendermaßen darstellen:
WENN bedingung TRUE
führe block1 aus
SONST
führe block2 aus
ENDE
In Python gibt es keinen expliziten ENDE-Kennzeichner. Stattdessen wird der Code durch Einrückungen strukturiert. Alles mit der gleichen Einrückungstiefe gehört zum selben Block. Dies zeichnet Python vor anderen Programmiersprachen aus.
Die test1.py-Datei laute also wie folgt:
x = 5
if x < 4:
print("x ist kleiner als 4")
else:
print("Der else-Zweig wird ausgefuehrt")
print("x ist groesser oder gleich 4")
Ausgabe:
Der else-Zweig wird ausgefuehrt
x ist groesser oder gleich 4
Man achte auch auf die Doppelpunkte in der if- und else-Zeile. Darauf vergisst man gerne, wenn man von anderen Programmiersprachen kommt.
Folgendes wäre in Python ein Fehler (genauer gesagt ein IndentationError).
x = 5
if x < 4:
print("x ist kleiner als 4")
else:
print("Der else-Zweig wird ausgefuehrt")
print("x ist groesser oder gleich 4")
Auch Nachstehendes würde nicht zum gewünschten Ergebnis führen (löst aber keine Fehlermeldung aus). Der letzte print-Befehl ist schon außerhalb der IF-ELSE-Verzweigung.
x = 3
if x < 4:
print("x ist kleiner als 4")
else:
print("Der else-Zweig wird ausgefuehrt")
print("x ist groesser oder gleich 4")
Ausgabe:
x ist kleiner als 4
x ist groesser oder gleich 4
Python kennt eine Reihe von Vergleichs- und Verknüpfungsoperatoren:
<, <= ... kleiner (gleich)
>, >= ... größer (gleich)
== ... gleich
!= ... ungleich
is ... identisch
is not ... nicht identisch
and ... AND
or ... OR
not ... NOT
Beispielsweise:
a = 5
b = 9
if a<=10 and b!=7:
print("OK")
else
print("Nicht OK")
Ausgabe:
OK
Der else-Block kann übrigens auch ersatzlos entfallen.
Mehrfache Verzweigungen werden durch das elif-Konstrukt erstellt.
a = 14
if a<=10:
print("<=5")
elif a>11 and a<15:
print("11 bis 15")
elif a>16 and a<20:
print("16 bis 20")
else:
print(">=20")
Ausgabe:
11 bis 15
In Python gibt es auch die Schlüsselwörter <code>True</code> (für wahr) und <code>False</code> (für falsch). Man beachte, dass sie mit Großbuchstaben beginnen. Andere Schreibweisen wären ein Fehler. Sie gehören zum Datentyp <code>bool</code>. Ihnen sind auch die Zahlen <code>1</code> und <code>0</code> zugewiesen.
=== match ===
Ab Python 3.10 gibt es auch die match-Anweisung. Dies ist das Python-Pendant für die switch-Anweisung in anderen Programmiersprachen, geht aber bei näherer Betrachtung weit darüber hinaus. Hier nur ein einfaches Beispiel:
x = "Hello"
match x:
case "Servus" | "Ciao": # or
print("Servus an alle")
case "Grüetzi":
print("Grüetzi Schwyzer")
case _: # other, default, sonstiges ...
print("Hallo Welt")
Ausgabe:
Hallo Welt
Für nähere Details siehe z.B. [https://www.geeksforgeeks.org/python-match-case-statement/], [https://learnpython.com/blog/python-match-case-statement/], [https://docs.python.org/3/tutorial/controlflow.html#match-statements] und das Python Enhancement Proposal (PEP) 636 – Structural Pattern Matching: Tutorial [https://peps.python.org/pep-0636] und dort insbesondere den Anhang A - Quick Intro.
<small><code>match, case, _</code> etc. sind sogenannte ''soft keywords''. Im Gegensatz zu den normalen Schlüsselwörtern dürfen ihnen auch Werte zugewiesen werden. Eine Liste der weichen Schlüsselwörter lässt sich durch <code>keyword.softkwlist</code> erstellen (die Anweisung gibt es seit Python 3.9). Siehe dazu auch [https://stackoverflow.com/questions/65800344/what-are-soft-keywords] und [https://docs.python.org/3/library/keyword.html#keyword.softkwlist].</small>
== Schleifen ==
=== while ===
Die WHILE-Schleife ist kopfgesteuert. Sie funktioniert wie aus anderen Programmiersprachen bekannt.
In Pseudocode:
SOLANGE bedingung TRUE
führe block aus
ENDE
In Python:
x = 0
while x <= 10:
print(x)
x += 1
Ausgabe:
0
1
2
3
4
5
6
7
8
9
10
=== for ===
for x in range(6):
print(x*2)
Ausgabe:
0
2
4
6
8
10
Die Schleife läuft von 0 bis 5. Ausgegeben wird jeweils der Wert x*2. Aquivalent kann diese Schleife auch so geschrieben werden:
for x in range(0, 11, 2):
print(x)
Die Ausgabe ist wie oben. Der Startwert sei 0, der Endwert ist 11-1 und die Schrittweite ist 2.
Ein anderes Beispiel sei
for x in "text":
print(x)
Ausgabe:
t
e
x
t
== Schleifen abbrechen ==
=== break ===
<code>break</code> bricht die Schleife ab und setzt mit dem nächsten Befehl außerhalb der Schleife fort.
for var in range(100):
print(var)
if var == 5:
break
Ausgabe:
0
1
2
3
4
5
=== continue ===
<code>continue</code> bricht den aktuellen Schleifendurchlauf ab und setzt mit dem nächsten Schleifendurchlauf fort.
for var in range (11):
if var == 5:
continue
print(var)
Ausgabe:
0
1
2
3
4
6
7
8
9
10
== try - except ==
try:
z1 = 12 / 0
print(z1)
except ZeroDivisionError:
print("Das Ergebnis ist unendlich")
except:
print("Kann nicht berechnet werden!")
print("Bitte die Formel korrigieren!")
Ausgabe:
Das Ergebnis ist unendlich
Es wird versucht, eine Zahl durch Null zu dividieren. Das ist nicht möglich, es wird eine Ausnahme ausgelöst. Das Programm springt daher in den except-ZeroDivisionError-Block und führt die dort gelisteten Anweisungen aus (in unserem Fall eine print-Anweisung). Würden wir dieses Programm ohne try-except ausführen, so ergibt sich aus
z1 = 12 / 0
print(z1)
folgende Fehlermeldung und ein unmittelbarer Programmabbruch
Traceback (most recent call last):
File "C:\tmp\test1.py", line 1, in <module>
z1 = 12 / 0
ZeroDivisionError: division by zero
Mit dem try-except-Mechanismus können also Ausnahmen oder Fehler aufgefangen und behandelt werden. In unserem Beispiel ist das eher trivial, aber bei größeren Programmen kann das durchaus Sinn machen.
== pass ==
Ein leerer Block muss in Python mittels dem Schlüsselwort <code>pass</code> dargestellt werden. Z.B.
x = 2
if x == 1:
print("Wert ist ", x)
else:
pass
Würde man das <code>pass</code> im else-Block weglassen, so würde man eine Fehlermeldung erhalten:
IndentationError: expected an indented block after 'else' statement on line 5
= Funktionen =
== Aufrufen von Funktionen ==
Funktionen sind uns im Rahmen dieses Kurses schon zuhauf begegnet. Sei es die print()-, die math.sin()- oder die hex()-Funktion. All diese Funktionen werden von Python zur Verfügung gestellt, ohne dass man sie explizit programmieren müsste. Aufgerufen werden diese Funktionen, indem man ihren Namen eintippt, gefolgt von runden Klammern. In diesen Klammern können noch Argumente übergeben werden. Auch Rückgabewerte sind möglich.
== Funktionen selber schreiben ==
Funktionen werden mit dem def-Schlüsselwort (man definiert die Funktion) eingeleitet, danach folgt der Funktionsname, danach wiederum runde Klammern, in denen formale Argumente stehen können. Abgeschlossen wird die def-Zeile mit einem Doppelpunkt. Danach folgt der Funktionskörper. Dieser Funktionskörper muss wiederum eingerückt werden (wie von den Verzweigungen und Schleifen bekannt). Aufgerufen wird diese Funktion, indem man ihren Funktionsnamen eingibt, gefolgt von runden Klammern (ggf. mit den aktuellen Parametern). Z.B.
# Funktion definieren
def halloWelt(i):
# i ... beliebige Ganzzahl
print("Hallo " * i, end="")
print("Welt!")
# Funktion aufrufen
halloWelt(3)
Ausgabe:
Hallo Hallo Hallo Welt!
Unterschied zwischen formalen und aktuellen Parametern:
[[Datei:PythonIng_func1.jpg]]
<small>Aktuelle Parameter werden auch Argumente genannt.</small>
Rückgabe von Funktionswerten:
# Funktion definieren
def mathFunc(a, b):
r1 = a + b
r2 = a * b
return r1, r2
# Funktion aufrufen
a, b = mathFunc(3, 5)
# Ausgabe der zurückgegebenen Werte
print(a)
print(b)
Ausgabe:
8
15
Vorgabeparameter, z.B.:
def mathFunc(a=10, b=20):
r1 = a + b
r2 = a * b
return r1, r2
a, b = mathFunc(3, 5)
print(a)
print(b)
a, b = mathFunc(5)
print(a)
print(b)
a, b = mathFunc(b=6)
print(a)
print(b)
Ausgabe:
8
15
25
100
16
60
== Lambda-Funktionen ==
print((lambda a, b: a*b) (3, 5))
Ausgabe:
15
Eingeleitet wird eine Lambda-Funktion (auch Lambda-Form, Lambda-Operator oder anonyme Funktion genannt) mit dem Schlüsselwort <code>lambda</code>. Es folgen die formalen Argumente, danach ein Doppelpunkt, die Berechnungsvorschrift und ggf. abschliessend in Klammern die aktuellen Parameter.
Man kann einer Lambda-Funktion auch einen Funktionsnamen geben und die Funktion über diesen Namen aufrufen, z.B.
prod = lambda a, b: a*b
print(prod(3, 5))
Als Ausgabe wird wieder die Zahl 15 geliefert.
== Rekursive Funktionen ==
Funktionen können wiederum andere Funktionen aufrufen. Von einem rekursiven Funktionsaufruf spricht man, wenn die aufgerufene Funktion gleich der aufrufenden ist.
def printFunc(i):
if (i >= 5):
return
else:
print("Hallo Welt")
printFunc(i+1)
printFunc(1)
Ausgabe:
Hallo Welt
Hallo Welt
Hallo Welt
Hallo Welt
== Funktionsannotationen ==
Python ist sehr flexibel, was Typen angeht. Im Vorhergehenden haben wir generell keine Typangaben gemacht. Will man Typen angeben, so bietet Python das Konzept der Funktionsannotation.
def calcFunc(a:int, b:int) -> int:
return a+b, a*b
r1 = calcFunc(8, 9)
r2 = calcFunc(8.0, 9.0)
print(r1)
print(r2)
Ausgabe:
(17, 72)
(17.0, 72.0)
Jetzt sieht man auf den ersten Blick, welche Typen der Programmierer im Sinn hatte, als er die Funktion erstellte. Das Problem dabei ist nur, dass es Python ziemlich egal ist, welche Typen man in Endeffekt eingibt. Im obigen Beispiel können statt Integer-Typen auch Float-Typen eingegeben werden.
== Variadische Funktionen ==
Python-Code:
def test1(a, *b):
print(a);
for c in b:
print(c);
test1("Hallo", "Welt", "Schweizer", "und alle anderen")
Ausgabe:
Hallo
Welt
Schweizer
und alle anderen
Mit dem Stern (auch als Splat-Operator bezeichnet) in der formalen Parameterliste bei der Funktion <code>test1</code> wird angezeigt, dass eine beliebige Anzahl von Argumenten übergeben wird. <small> Dies entspricht in etwa dem, was in anderen Programmiersprachen (PHP etc.) mittels Ellipse (<code>...</code>) angezeigt wird.</small>
= Tupel, Listen und andere =
[[Datei:Python 3. The standard type hierarchy.png|mini|hochkant=1.7|Datentypen und Strukturen]]
Tupel, Listen und einige andere sind Datenstrukturen oder Sequenzen.
Listen (z.B. eine Einkaufsliste) sind veränderbar (mutable). Ein Tupel kann dagegen nicht verändert werden (immutable). Listen werden beim Anlegen in eckige Klammern eingeschlossen, Tupel in runde Klammern. Beim Tupel können die Klammern auch weggelassen werden. Ein Tupel mit nur einem Element muss mit einem Beistrich abgeschlossen werden. Der Grund ist, dass Python sonst nicht entscheiden kann, ob ein Tupel angelegt werden soll, oder nur ein geklammerter Wert. Nachfolgend werden einige Operationen mit Listen und Tupel dargestellt.
Als Gedächtnisstütze kann man sich den Unterschied zwischen Tupel und Liste ev. so leichter merken:
: T'''u'''pel ... r'''u'''nde Klammern, '''u'''nveränderlich
: L'''i'''ste ... eck'''i'''ge Klammern, veränderl'''i'''ch.
# Liste und Tupel
liste = [1, 2, "Hallo"]
tupel = (1, 2, "Hallo")
# Ausgabe von liste und tupel
print(liste)
print(tupel)
# Ausgabe von Einzelelementen
print(liste[1])
print(tupel[2])
# Element an Liste anhängen und einfügen
liste.append(55)
liste.insert(4, "Welt")
print(liste)
# Element aus Liste entfernen
liste.remove(1)
print(liste)
# einige weitere Beispiele
liste2 = [1,]
tupel2 = 1, 2
tupel3 = (1,)
print(liste2)
print(tupel2)
print(tupel3)
Ausgabe:
[1, 2, 'Hallo']
(1, 2, 'Hallo')
2
Hallo
[1, 2, 'Hallo', 55, 'Welt']
[2, 'Hallo', 55, 'Welt']
[1]
(1, 2)
(1,)
Zu den Datenstrukturen gehören weiters auch Mengen und Dictionaries. Mengen sind von der Mathematik bekannt, sie sind ungeordnet und es kommen keine mehrfachen Elemente vor. Dictionaries sind durch Schlüssel :Wert-Paare gekennzeichnet. Mengen werden beim Anlegen wie Dictionaries in geschweifte Klammern eingeschlossen.
dict = {"vorname":"Hugo", "nachname":"Meister" }
menge = {1, 1, 3, 4, 4, 4, "Hallo"}
print(dict)
print(menge)
print(dict["vorname"])
Ausgabe:
{'vorname': 'Hugo', 'nachname': 'Meister'}
{1, 3, 4, 'Hallo'}
Hugo
Geschweifte Klammern ohne Inhalt stellen Dictionaries dar und keine Mengen:
di = {}
print(type(di))
Ausgabe:
<class 'dict'>
== List Comprehensions ==
Aus einer Eingabeliste soll eine Ausgabeliste erzeugt werden. Das kann folgendermaßen geschehen.
Mathematische Schreibweise: <math>lc = \{2x|x\in\ \mathbb{N}, 1\le x < 11\}</math>
Python-Code:
lc = [x*2 for x in range(1,11)]
print(lc)
Ausgabe:
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
Mathematische Schreibweise: <math>lc = \{2x | x \in \mathbb{N}, 1\le x < 11, x \bmod 2 = 0 \}</math>
Python-Code:
lc = [x*2 for x in range(1,11) if x%2 == 0]
print(lc)
Ausgabe:
[4, 8, 12, 16, 20]
Siehe auch {{W|List Comprehension}}.
== Set Comprehensions ==
Dies ist sehr ähnlich wie im vorigen Abschnitt beschrieben. Es wird aber keine Liste, sondern eine Menge erzeugt.
sc = {x*2 for x in range(1,11)}
print(sc)
Ausgabe:
{2, 4, 6, 8, 10, 12, 14, 16, 18, 20}
== Listen zusammenführen - zip() ==
li1 = ["A", "B", "C", "D"]
li2 = [1, 2, 3, 4]
li3 = [5.5, 6.6, 7.7, 8.8]
z = zip(li1, li2, li3)
print(z)
li4 = list(z)
print(li4)
Ausgabe:
<zip object at 0x00000283B6C6AC80>
[('A', 1, 5.5), ('B', 2, 6.6), ('C', 3, 7.7), ('D', 4, 8.8)]
== Generatorausdruck ==
g = (i*2 for i in range(1,11))
print(g)
t = tuple(g)
print(t)
print(t[1:3])
Ausgabe:
<generator object <genexpr> at 0x00000241D2A4A5A0>
(2, 4, 6, 8, 10, 12, 14, 16, 18, 20)
(4, 6)
== Slicing ==
slice ... Scheibe, Teil, in Scheiben schneiden
Beispiel: Zugriff auf Elemente eines geordneten sequentiellen Objekttyps (Liste, Tupel oder String):
str1 = "Hallo"
# Das erste Element wird mit dem Index 0 angesprochen
# [start (inkl.) : stop (exkl.) : step (default=1)]
str2 = str1[0:2]
# Alternativ auch: str2 = str1[:2]
print(str2)
tup1 = (0,1,2,3)
# Das letzte Element hat auch den Index -1, das vorletzte den Index -2 usw.
tup2 = tup1[-3:-1]
print(tup2)
lst1 = [[1, 5, 10, 20],
[30, 40, 50, 60]]
lst2 = lst1[1][1]
print(lst2)
Ausgabe:
Ha
(1, 2)
40
Beispiel: Umdrehen von Strings
str1 = "Hallo"
str2 = str1[::-1]
print(str2)
Ausgabe:
ollaH
= Objektorientierte Programmierung =
== Eine einfache Klasse ==
[[Datei:PythonIng_uml1.svg | 200px]]
class Fahrzeug:
raeder = 4
def __init__(self, geschwindigkeit, leistung):
self.__geschwind = geschwindigkeit
self.__leistung = leistung
def setGeschwindigkeit(self, geschwindigkeit): # geschwindigkeit in km/h
self.__geschwind = geschwindigkeit
def setLeistung(self, leistung):
self.__leistung = leistung
def convertGeschw(self):
# geschwindigkeit in m/s rueckgeben
return self.__geschwind / 3.6
fahr = Fahrzeug(150, 90)
print(fahr.convertGeschw())
Ausgabe:
41.666666666666664
Die Klasse Fahrzeug wird durch das class-Schlüsselwort eingeleitet. raeder ist ein Klassenattribut und public. __init__ wird bei der Objekterzeugung automatisch aufgerufen. Man achte darauf, dass diese Methode immer mit zwei Unterstrichen eingeleitet und abgeschlossen wird. Instanzattributen wird das Wort self vorangestellt. Wir sehen uns z.B. das Attribut self.__geschwind an. Auch hier werden zwei Unterstriche verwendet. Das bedeutet, dass dieses Attribut private ist. Bei den Methoden wird immer self als erster Parameter angegeben. Beim Aufruf der entsprechenden Funktion wird das self aber nicht berücksichtigt.
== Klassen importieren ==
Häufig ist es sinnvoll und übersichtlicher Klassen in eigenen Dateien zu speichern. Das sind dann eigene Module. Abgespeichert werden Sie mit der Endung py, wie bisher auch praktiziert. Aufgerufen werden Sie mit der import-Anweisung. Dann ist aber nur der Dateiname ohne Endung py zu verwenden. Klarer wird das mit einem Beispiel.
Datei c:\tmp\fahrzeug.py
class Fahrzeug:
raeder = 4
def __init__(self, geschwindigkeit, leistung):
self.__geschwind = geschwindigkeit
self.__leistung = leistung
def setGeschwindigkeit(self, geschwindigkeit): # geschwindigkeit in km/h
self.__geschwind = geschwindigkeit
def setLeistung(self, leistung):
self.__leistung = leistung
def convertGeschw(self):
# geschwindigkeit in m/s rueckgeben
return self.__geschwind / 3.6
Datei c:\tmp\test1.py
import fahrzeug
fahr = fahrzeug.Fahrzeug(150, 90)
print(fahr.convertGeschw())
Ausgabe:
41.666666666666664
Die üblichen import-Anweisungen lauten wie folgt:
{| {{prettytable}}
! import-Befehl
! Instanz
|-
| import xyz || xyz.Klasse
|-
| import xyz as x || x.Klasse
|-
| from xyz import Klasse || Klasse
|-
| from xyz import * || Klasse
|}
Der Vorteil der ersten beiden import-Anweisungen ist, dass es kaum zu Namenskollisionen kommen kann. Dafür hat man bei den letzten beiden Varianten weniger Tipparbeit.
== Vererbung ==
[[Datei:PythonIng_uml2.svg | 200px]]
Datei fahrzeug.py:
class Fahrzeug:
raeder = 4
def __init__(self, geschwindigkeit, leistung):
self.__geschwind = geschwindigkeit
self.__leistung = leistung
def setGeschwindigkeit(self, geschwindigkeit): # geschwindigkeit in km/h
self.__geschwind = geschwindigkeit
def setLeistung(self, leistung):
self.__leistung = leistung
def convertGeschw(self):
# geschwindigkeit in m/s rueckgeben
return self.__geschwind / 3.6
class Luftfahrzeug(Fahrzeug):
def __init__(self, geschwindigkeit, leistung, fluegel):
super().__init__(geschwindigkeit, leistung)
self.__flueg = fluegel
def getFlueg(self):
return self.__flueg
Datei test1.py:
import fahrzeug
fahr = fahrzeug.Luftfahrzeug(150, 90, 4)
print(fahr.getFlueg())
Ausgabe:
4
= Grafiken zeichnen =
Für das Zeichnen von Grafiken wird hier das Modul <code>matplotlib</code> verwendet. <code>matplotlib</code> ist ein externes Modul und muss vor der ersten Verwendung installiert werden. Das geht so:
# Starten Sie ein Terminal (bei Windows die Eingabeaufforderung).
# Führen Sie darin folgenden Befehl aus <code>c:\devel\Python\Scripts\pip.exe install matplotlib</code>
pip ist übrigens der Paketmanager von Python ({{W|Pip_(Python)}}).
Optimalerweise installieren wir auch gleich das Modul <code>numpy</code> (Numerical Python). Wir werden es im Folgenden oft benötigen (nicht nur bei den Grafiken). Das funktioniert vom Prinzip her genauso, wie für <code>matplotlib</code> gezeigt.
<small>Verwenden Sie Spyder, so sind diese Schritte nicht nötig. Spyder inkludiert diese Pakete standardmäßig. Unter openSUSE Tumbleweed lassen sich diese Pakete mittels YaST oder zypper installieren.</small>
== 2D ==
=== Graph einer Funktion ===
Es soll die cosh-Funktion im Intervall <math>x\in[-3,3]</math> gezeichnet werden. Der Programmcode lautet in der einfachsten Form:
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(-3., 3.1, .1)
y = np.cosh(x)
plt.plot(x,y)
plt.grid()
plt.show()
Ausgabe:
[[Datei:PythonIng_cosh1.jpg]]
Der Code ist quasi selbsterklärend. Das Untermodul pyplot des matplotlib-Moduls und das numpy-Modul werden importiert. x läuft von -3 bis +3. y wird für jeden x-Wert per Formel ausgerechnet. "plt.plot()" ist der Zeichenbefehl. "plt.show" ist notwendig, um das Fenster mit der Grafik anzuzeigen.
Die Schrittweite 0.1 wurde so gewählt, um einen ausreichend glatten Verlauf des Graphen zu gewährleisten. Das ist immer ein Kompromiss zwischen Berechnungszeit und Ansehnlichkeit. Testen Sie einfach ein paar verschiedene Werte, um ein Gefühl dafür zu zu bekommen. "plt.grid()" zeichnet ein Gitter in die Grafik (kann auch weggelassen werden).
Die Bezeichnungen plt und np könnten auch anders gewählt werden. Es ist aber Konvention, diese so wie hier gezeigt zu wählen.
<small>Mit der im obigen Bild gezeigten Menüleiste kann die dargestellte Grafik nachträglich noch geändert werden (Zoom, Pan, Achsenparameter, Kurvenparameter etc.). Natürlich kann man das alles auch direkt programmieren. Wie das funktioniert wird ansatzweise etwas später gezeigt.</small>
Ein etwas komplexeres Beispiel ist Folgendes:
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(-3., 3.1, .1)
y = np.cosh(x) + 2**x
plt.plot(x,y)
plt.grid()
plt.show()
Ausgabe:
[[Datei:PythonIng_cosh4.png]]
Man beachte, dass im Gegensatz zu Octave und Julia der ominöse Punkt (.) bei 2**x mit Python nicht benötigt wird. Das macht das Programmiererleben etwas einfacher.
=== Graphen mehrerer Funktionen und weiteres ===
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(-3., 3.1, .1)
y1 = np.cosh(x) + 2**x
y2 = np.sin(x) * np.cos(x)
plt.plot(x, y1, label = "cosh(x) + 2**x")
plt.plot(x, y2, label = "sin(x) * cos(x)")
plt.grid()
plt.title("Funktionsgraphen")
plt.xlabel("x")
plt.ylabel("y")
plt.legend(loc="best")
plt.show()
[[Datei:PythonIng_cosh2.png]]
Um die Linienstile etwas individueller zu gestalten, ist folgender Programmcode gedacht:
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(-3., 3.1, .1)
y1 = np.cosh(x) + 2**x
y2 = np.sin(x) * np.cos(x)
plt.plot(x, y1, label = "cosh(x) + 2**x", lw=5, ls="dotted")
plt.plot(x, y2, label = "sin(x) * cos(x)", lw=3, ls="--")
plt.grid()
plt.title("Funktionsgraphen")
plt.xlabel("x")
plt.ylabel("y")
plt.legend(loc="best")
plt.show()
[[Datei:PythonIng_cosh3.png]]
=== Funktion in Parameterdarstellung ===
Es soll die archimedische Spirale <math>x = t \cos(t), y = t \sin(t)</math> im Intervall <math>[0, 6\pi[</math> gezeichnet werden.
import matplotlib.pyplot as plt
import numpy as np
t = np.arange(0., 6*np.pi, .1)
x = t * np.cos(t)
y = t * np.sin(t)
plt.plot(x, y)
plt.grid()
plt.title("Archimedische Spirale")
plt.show()
[[Datei:PythonIng_spirale1.png]]
Diese Darstellung erscheint verzerrt. Will man gleiche Achsenskalierungen, so kann man den plt.axis()-Befehl verwenden.
import matplotlib.pyplot as plt
import numpy as np
t = np.arange(0., 6*np.pi, .1)
x = t * np.cos(t)
y = t * np.sin(t)
plt.plot(x, y)
plt.grid()
plt.title("Archimedische Spirale")
plt.axis("equal")
plt.show()
[[Datei:PythonIng_spirale2.png]]
=== Funktion in Polardarstellung ===
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(projection="polar")
r = np.arange(0, 1, 0.01)
theta = r**3
line = ax.plot(theta, r)
plt.show()
[[Datei:PythonIng_polar1.png]]
=== Logarithmische Achsenskalierung ===
==== Semilog ====
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0., 10, .1)
y = 10**x
plt.plot(x, y)
plt.grid()
plt.semilogy()
plt.show()
Ausgabe:
[[Datei:PythonIng_semilog1.png]]
==== LogLog ====
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0., 10, .1)
y = 10**x
plt.plot(x, y)
plt.grid()
plt.loglog()
plt.show()
[[Datei:PythonIng_loglog1.png]]
=== Gefüllte Fläche ===
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 3, 0.1)
y1 = 3*x - 1
y2 = x**2
plt.plot(x, y1, x, y2, color='black')
plt.fill_between(x, y1, y2, where=y1>=y2)
plt.show()
[[Datei:PythonIng_gefuellt.png]]
=== Linien, Pfeile, Rechtecke, Kreise und Texte ===
import matplotlib as mpl
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
r = mpl.patches.Rectangle((0, 0), 3, 3, angle=30, fill=False)
c = mpl.patches.Circle((4, 4), 2, fill=False)
ax.add_patch(r)
ax.add_patch(c)
ax.plot([-2, 7], [-2, 0], color="black")
ax.arrow(0, 7, 5, 0, length_includes_head=True, head_width=0.5, head_length=1.5,
color="black")
ax.set_aspect("equal")
plt.axis([-3, 8, -3, 8])
plt.show()
[[Datei:PythonIng_linien_pfeile_etc.png]]
Text kann mit <code>ax.text(x, y, "Text")</code> hinzugefügt werden, bspw.
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.text(0.1, 0.1, "Hallo")
ax.text(0.5, 0.5, "Welt", size="40", family="cursive", style="italic",
rotation=30.0)
plt.show()
Oder einfacher auch ohne <code>subplots</code>
import matplotlib.pyplot as plt
plt.text(0.1, 0.1, "Hallo")
plt.text(0.5, 0.5, "Welt", size="40", family="cursive", style="italic",
rotation=30.0)
plt.show()
[[Datei:PythonIng_text1.png]]
Auch Sonderzeichen (griechische Buchstaben etc.) können verwendet werden (siehe dazu auch [https://matplotlib.org/stable/users/explain/text/mathtext.html]).
import matplotlib.pyplot as plt
plt.text(.3, .5,
r'$\Omega\ \psi\ \oint\ \nabla\ \dot a\ \frac{a}{b}\ a_b$',
size="20")
plt.show()
[[Datei:PythonIng_text20.svg]]
Jetzt wird noch gezeigt, wofür <code>subplots</code> sinnvoll eingesetzt werden können.
import matplotlib.pyplot as plt
fig, ax = plt.subplots(nrows=1, ncols=2)
ax[0].text(0.1, 0.1, "Hallo")
ax[1].text(0.1, 0.5, "Welt", size="40", family="cursive", style="italic",
rotation=30.0)
plt.show()
[[Datei:PythonIng_text2.png]]
=== Aufgaben ===
* Zeichnen Sie die Strophoide <math>x = \frac{a(t^2-1)}{t^2+1}, y = \frac{at(t^2-1)}{t^2+1}, a = 2, -3 \leq t \leq 3</math>. Das Ganze sollte in etwa so aussehen wie folgende Grafik:
[[Datei:octave_strophoide.jpg]]
* Zeichnen Sie die verschlungene Hypozykloide <math>x = (R-r)\cos t + c\cos\frac{R-r}{r}t, y = (R-r)\sin t - c\sin\frac{R-r}{r}t, c = 3, r = 2, R = 6, -15 \leq t \leq 15</math>. Das Ganze sollte in etwa so aussehen wie folgende Grafik:
[[Datei:octave_hypozykloide.jpg]]
* Testen Sie bei den obigen Übungsaufgaben verschiedene Linienstile und Farben. Farben können mit dem plt.plot()-Parameter color gewählt werden.
* Testen Sie bei den obigen Übungsaufgaben verschiedene Werte für a, c, r und R.
== 3D ==
=== Räumliche Kurven ===
import matplotlib.pyplot as plt
import numpy as np
t = np.arange(0, 6*np.pi, 0.1)
x = t * np.cos(t)
y = t * np.sin(t)
z = t
fig, ax = plt.subplots(subplot_kw={"projection": "3d"})
ax.plot(x, y, z)
plt.show()
[[Datei:PythonIng_raumkurve1.png]]
=== Flächen ===
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0, 10, 0.1)
y = np.arange(0, 10, 0.1)
x, y = np.meshgrid(x, y)
z = np.sin(x) + 3 * np.cos(y)
fig, ax = plt.subplots(subplot_kw={"projection": "3d"})
ax.plot_surface(x, y, z)
plt.show()
[[Datei:PythonIng_fläche1.png]]
Das Ganze in Netzdarstellung läßt sich so programmieren:
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0, 10, 0.5)
y = np.arange(0, 10, 0.5)
x, y = np.meshgrid(x, y)
z = np.sin(x) + 3 * np.cos(y)
fig, ax = plt.subplots(subplot_kw={"projection": "3d"})
ax.plot_wireframe(x, y, z)
plt.show()
[[Datei:PythonIng_fläche2.png]]
Ein etwas komplexeres Beispiel:
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0.1, 10, 0.1)
y = np.arange(0.1, 10, 0.1)
x, y = np.meshgrid(x, y)
z1 = np.sin(x) + 3 * np.cos(y)
z2 = np.sin(x) + np.log(y)
z3 = x + np.cos(y)
z4 = x**2 - y
fig, ax = plt.subplots(subplot_kw={"projection": "3d"}, nrows=2, ncols=2)
ax[0][0].plot_surface(x, y, z1)
ax[0][1].plot_surface(x, y, z2)
ax[1][0].plot_surface(x, y, z3)
ax[1][1].plot_surface(x, y, z4)
plt.show()
[[Datei:PythonIng_subplot1.png]]
Man beachte, dass man die Unterbilder im Bild nach dem Ausführen des Scripts z.B. mit der mittleren Maustaste einzeln drehen, oder über die Einträge in der Menüzeile einzeln bearbeiten kann. Mit ein paar Zeilen Programmtext lässt sich also eine Menge an Funktionalität generieren.
Die Farbgebung lässt sich über <code>colormaps</code> variieren.
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import cm
x = np.arange(0, 10, 0.1)
y = np.arange(0, 10, 0.1)
x, y = np.meshgrid(x, y)
z = np.sin(x) + 3 * np.cos(y)
fig, ax = plt.subplots(subplot_kw={"projection": "3d"})
ax.plot_surface(x, y, z, cmap = cm.coolwarm)
plt.show()
[[Datei:PythonIng_colormap1.png]]
Es gibt eine Menge an Colormaps, z.B. <code>plasma, Greys, Dark2, ocean</code>. Zwecks detaillierterer Infos siehe die matplotlib-Dokumentation. <small>Verwendet man die IDE namens IDLE, so gibt es dort auch die automatische Codevervollständigung. D.h. es werden alle Möglichkeiten (in unserem Fall nach dem Eintippen von <code>cm.</code> alle verfügbaren Colormaps) angezeigt.</small>
Die "edgecolor" und Linienbreite können auch frei gewählt werden:
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import cm
x = np.arange(0, 10, 0.1)
y = np.arange(0, 10, 0.1)
x, y = np.meshgrid(x, y)
z = np.sin(x) + 3 * np.cos(y)
fig, ax = plt.subplots(subplot_kw={"projection": "3d"})
ax.plot_surface(x, y, z, cmap = cm.coolwarm, edgecolor="black", linewidth=1.0)
plt.show()
[[Datei:PythonIng_colormap2.png]]
=== Höhenlinien ===
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0, 10, 0.1)
y = np.arange(0, 10, 0.1)
x, y = np.meshgrid(x, y)
z = np.sin(x) + 3 * np.cos(y)
fig, ax = plt.subplots()
ax.contour(x, y, z)
plt.show()
[[Datei:PythonIng_höhenlinien1.png]]
Etwas abgewandelt sieht das so aus:
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0, 10, 0.1)
y = np.arange(0, 10, 0.1)
x, y = np.meshgrid(x, y)
z = np.sin(x) + 3 * np.cos(y)
fig, ax = plt.subplots()
hl = ax.contour(x, y, z)
ax.clabel(hl, inline = True)
plt.show()
[[Datei:PythonIng_höhenlinien2.png]]
Und noch eine Variante sei gezeigt.
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0, 10, 0.1)
y = np.arange(0, 10, 0.1)
x, y = np.meshgrid(x, y)
z = np.sin(x) + 3 * np.cos(y)
fig, ax = plt.subplots()
ax.contourf(x, y, z)
plt.show()
[[Datei:PythonIng_höhenlinien3.png]]
=== Aufgaben ===
* Zeichnen Sie die räumliche Kurve <math>x = 2 \cdot \cosh(t)</math>, <math>y = 5 \cdot \sin(t)</math>, <math> z = t^{2} - t</math>, <math>0 \leq t \leq 3\pi</math>.
* Zeichnen Sie die Fläche <math>z = \log(x) + \cos(y)</math>.
== Animationen ==
=== Mit matplotlib ===
Auch mit matplotlib sind Animationen möglich. Das ist ein bisschen komplizierter und wird deshalb hier nur mit einem sehr einfachen Beispiel dargestellt (bei Interesse siehe z.B. auch das [https://matplotlib.org/stable/users/explain/animations/animations.html#animations Animations using Matplotlib-Tutorial]).
import matplotlib.pyplot as plt
import matplotlib.animation as ani
import matplotlib
import numpy as np
def update(frame):
line.set_xdata(x[:frame])
line.set_ydata(y[:frame])
return (line)
fig, ax = plt.subplots()
x = np.arange(0, 10, .1)
y = np.sin(x)
line, = ax.plot(x[0], y[0])
ax.set(xlim=[0, 10], ylim=[-1, 1])
a = ani.FuncAnimation(fig=fig, func=update, frames=100, interval=20)
plt.show()
# Speichere die Animation in einem animierten GIF (optional)
a.save(filename="c:/tmp/PythonIng_anim5.gif", writer="pillow")
[[Datei:PythonIng_anim5.gif]]
Es wird eine Sinuskurve auf den Bildschirm gezeichnet. In der letzten Zeile wird diese Animation in ein animiertes GIF gespeichert. Das ist natürlich optional und kann auch weggelassen werden.
=== Mit VPython ===
Aber auch mit dem Modul VPython lassen sich einfache 3D-Animationen erstellen. VPython ist ein externes Modul, das vorab installiert werden muss. Unter openSUSE Tumbleweed gibt es dzt. kein entsprechendes rpm-Paket. Die übliche Methode der Installation mittels YaST oder zypper ist somit nicht möglich. Auch eine direkte Verwendung von pip führt nur zu einer Fehlermeldung (<code>error: externally-managed-environment</code>). Es empfiehlt sich dort folgende Vorgehensweise:
# Erstelle zuerst eine virtuelle Umgebung, z.B.: <code>python3.11 -m venv ~/tmp/venv1</code>
# Wechsle das Verzeichnis: <code>cd ~/tmp/venv1/bin</code>
# Installiere das entsprechende Paket: <code>./pip install vpython</code>
# Führe das entsprechende Skript aus: <code>./python ~/tmp/test1.py</code>
Aktuell (März 2026) ist dieses Programmpaket lt. der [https://vpython.org/presentation2018/install.html VPython-Homepage] nur für die Python-Versionen 3.8 bis 3.12 verfügbar.
Ein Beispiel zu einer einfachen Animation wird nachfolgend geliefert.
from vpython import *
scene.width = 1200
scene.height = 600
scene.center = vector(20,0,0)
scene.background = color.white
cylinder(pos=vector(0,0,0), axis=vector(20,0,0), radius=5,
color=color.blue)
cone(pos=vector(0,0,0), axis=vector(-10,0,0), radius=5,
color=color.blue)
helix(pos=vector(20,0,0), axis=vector(40,0,0), radius=2,
coils=10, thickness=0.5, color=color.blue)
ball = sphere(pos=vector(20,0,0), color = color.green, radius = 1)
ball.p = vector(0.15, 0, 0)
toc = True
while True:
rate(200)
if(ball.pos.x <= 60 and toc == True):
ball.pos += ball.p
else:
toc = False
ball.pos -= ball.p
if(ball.pos.x <= 20 and toc == False):
toc = True
[[Datei:PythonIng_vpython_anim.JPG]]
Idealerweise öffnet sich beim Ausführen des Scripts ein Browserfenster. Darin wird die programmierte Animation gezeigt (siehe auch den obigen Screenshot). Eine Größenänderung können Sie mit der mittleren Maustaste initiieren. Die Szenerie drehen können Sie mit der rechten Maustaste.
=== Mit VTK ===
Komplexer, aber auch mächtiger als VPython ist die Verwendung von VTK ('''V'''isualization '''T'''ool'''k'''it). Genauer gesagt des Python-Wrappers von VTK. Dieses externe Python-Modul muss vorab installiert werden (z.B. mittels YaST, pip oder in eine virtuelle Umgebung). VTK ist eine Softwarebibliothek zur 3D-Visualisierung und wurde ursprünglich in C++ geschrieben. Verbreitet eingesetzt wird diese Bibliothek in der Wissenschaft und Forschung, z.B.
* in der medizinischen Bildgebung
* für Strömungssimulationen
* für Klimadaten
VTK funktioniert nach dem {{W|Grafikpipeline|Pipeline-Prinzip}}:
Source (Quellen) -> Filter -> Mapper (Senken) -> Actor/Renderer
Daten fließen von den Quellen zu den Senken.
Als einfaches Beispiel wird die Darstellung eines Zylinders gezeigt, der mit den Maustasten gedreht oder in der Größe geändert werden kann:
import vtk
# Zylinder erzeugen
cyl = vtk.vtkCylinderSource()
cyl.SetRadius(5.0)
cyl.SetHeight(20.0)
cyl.SetResolution(40)
# Geometrie in darstellbare Daten umwandeln
mapper = vtk.vtkPolyDataMapper()
mapper.SetInputConnection(cyl.GetOutputPort())
# Objekt in der Szene
actor = vtk.vtkActor()
actor.SetMapper(mapper)
# Szene verwalten
renderer = vtk.vtkRenderer()
renderer.AddActor(actor)
# Render-Fenster
render_window = vtk.vtkRenderWindow()
render_window.AddRenderer(renderer)
# Maus/Tastatur-Steuerung
interactor = vtk.vtkRenderWindowInteractor()
interactor.SetRenderWindow(render_window)
# Starten
render_window.Render()
interactor.Start()
Ausgabe:
[[Datei:PythonIng_VTK_1.png]]
Gleiches Beispiel wie oben, aber mit einer Animationssequenz:
import vtk
import time
cyl = vtk.vtkCylinderSource()
cyl.SetRadius(5.0)
cyl.SetHeight(20.0)
cyl.SetResolution(40)
mapper = vtk.vtkPolyDataMapper()
mapper.SetInputConnection(cyl.GetOutputPort())
actor = vtk.vtkActor()
actor.SetMapper(mapper)
renderer = vtk.vtkRenderer()
renderer.AddActor(actor)
render_window = vtk.vtkRenderWindow()
render_window.AddRenderer(renderer)
interactor = vtk.vtkRenderWindowInteractor()
interactor.SetRenderWindow(render_window)
for i in range(360):
actor.RotateZ(1)
actor.RotateY(.5)
render_window.Render()
time.sleep(0.01)
Das Grafikfenster schließt sich nach Ablauf der Schleife. Das Fenster bleibt geöffnet, wenn Sie am Programmende folgenden Befehl hinschreiben
interactor.Start()
Um den animierten Zylinder grün einzufärben, müssen Sie Folgendes im obigen Programm ergänzen (Farbnamen):
colors = vtk.vtkNamedColors()
actor.GetProperty().SetColor(colors.GetColor3d("Green"))
Als Namen können Sie u.a. die CSS3 Web-Farben verwenden (siehe z.B. [https://wiki.selfhtml.org/wiki/Farbe/Farbangaben] und {{W|Webfarbe#CSS_3}}).
Alternativ funktioniert auch das ({{W|RGB-Farbraum|RGB}}):
actor.GetProperty().SetColor(0.0, 0.6, 0.0)
Wie der Zylinder mit einer Textur versehen wird, zeigt folgendes Programm:
import vtk
import time
cylinder = vtk.vtkCylinderSource()
cylinder.SetResolution(30)
cylinder.SetHeight(3.0)
cylinder.SetRadius(1.0)
cylinder.CappingOn()
texture_coords = vtk.vtkTextureMapToCylinder()
texture_coords.SetInputConnection(cylinder.GetOutputPort())
texture_coords.PreventSeamOn()
reader = vtk.vtkJPEGReader()
reader.SetFileName("PythonIng_textur.jpg")
texture = vtk.vtkTexture()
texture.SetInputConnection(reader.GetOutputPort())
mapper = vtk.vtkPolyDataMapper()
mapper.SetInputConnection(texture_coords.GetOutputPort())
actor = vtk.vtkActor()
actor.SetMapper(mapper)
actor.SetTexture(texture)
renderer = vtk.vtkRenderer()
renderWindow = vtk.vtkRenderWindow()
renderWindow.AddRenderer(renderer)
interactor = vtk.vtkRenderWindowInteractor()
interactor.SetRenderWindow(renderWindow)
renderer.AddActor(actor)
for i in range(360):
actor.RotateZ(1)
actor.RotateY(.5)
renderWindow.Render()
time.sleep(0.01)
interactor.Start()
<gallery>
PythonIng_textur.jpg | Textur-Datei
PythonIng_VTK_2.png | Ausgabe (Screenshot)
</gallery>
Nun aber genug von VTK und der Erstellung von Grafiken, weiter geht es mit mathematischeren Themen.
= Vektoren und Matrizen =
== Zahlenfolgen ==
from numpy import *
start = 0
stop = 10
step = 2
num = 10
r = arange(start, stop, step)
l = linspace(start, stop, num)
print("r = ", r)
print("l = ", l)
Ausgabe:
r = [0 2 4 6 8]
l = [ 0. 1.11111111 2.22222222 3.33333333 4.44444444 5.55555556
6.66666667 7.77777778 8.88888889 10. ]
== Vektoren ==
Vektoren sollten jedem aus der Linearen Algebra bekannt sein.
=== Arrays ===
In Python mit NumPy kann man Vektoren durch die Funktion array erzeugen.
import numpy as np
l1 = (-5, 3, 2)
l2 = (1, 1, 4)
a1 = np.array(l1)
a2 = np.array(l2)
a3 = a1 + a2
a4 = 2 * a2
print(a1)
print(a2)
print(a3)
print(a3[2])
print(a4)
Ausgabe:
[-5 3 2]
[1 1 4]
[-4 4 6]
6
[2 2 8]
=== Zeilen- und Spaltenvektoren ===
import numpy as np
# Zeilenvektor
z = np.array([ [-5, 3, 2] ])
# Spaltenvektor
s = np.array([[1], [1], [4]])
print(z)
print(s)
Ausgabe:
[ [-5 3 2] ]
[[1]
[1]
[4]]
=== Skalarprodukt ===
import numpy as np
a1 = np.array((-5, 3, 2))
a2 = np.array((1, 1, 4))
skalarprodukt = np.dot(a1, a2)
print(skalarprodukt)
Ausgabe:
6
=== Vektorprodukt ===
<math>a\ast b=\left(\begin{array}{c}
a_{1}\\
a_{2}\\
a_{3}
\end{array}\right)\ast\left(\begin{array}{c}
b_{1}\\
b_{2}\\
b_{3}
\end{array}\right)=\left(\begin{array}{c}
a_{2}b_{3}-a_{3}b_{2}\\
a_{3}b_{1}-a_{1}b_{3}\\
a_{1}b_{2}-a_{2}b_{1}
\end{array}\right)
</math>
Python-Code:
import numpy as np
a1 = np.array((-5, 3, 2))
a2 = np.array((1, 1, 4))
vektorprodukt = np.cross(a1, a2)
print(vektorprodukt)
Ausgabe:
[10 22 -8]
=== Transponierter Vektor ===
import numpy as np
# Zeilenvektor
z = np.array([ [-5, 3, 2] ])
# Spaltenvektor
s = np.array([[1], [1], [4]])
# transponierter Vektor
z_tp = np.transpose(z)
# transponierter Vektor
s_tp = np.transpose(s)
print(z_tp)
print(s_tp)
Ausgabe:
[[-5]
[ 3]
[ 2]]
[ [1 1 4] ]
=== Vektorfelder visualisieren ===
import matplotlib.pyplot as plt
import numpy as np
# Daten generieren
x = np.arange(0, 10, 1)
y = np.arange(0, 10, 1)
X, Y = np.meshgrid(x, y)
U = X * Y
V = Y + X
# Plotten
fig, ax = plt.subplots()
ax.quiver(X, Y, U, V, angles='xy')
plt.show()
Ausgabe:
[[Datei:PythonIng_quiver1.png]]
== Matrizen==
import numpy as np
m1 = np.matrix([[1, 2, 3], [4, 5, 6]])
print(m1)
Ausgabe:
[[1 2 3]
[4 5 6]]
=== Zugriff auf Matrizenelemente ===
import numpy as np
m1 = np.matrix([[1, 2, 3], [4, 5, 6]])
# Element aus Zeile 2 und Spalte 3 (Achtung! Index startet bei Null)
print(m1[1,2])
Ausgabe:
6
=== Addition und Subtraktion von Matrizen ===
import numpy as np
m1 = np.matrix([[1, 2, 3], [4, 5, 6]])
m2 = np.matrix([[0, 0, 2], [1, 3, 2]])
print(m1 + m2)
print(m1 - m2)
Ausgabe:
[[1 2 5]
[5 8 8]]
[[1 2 1]
[3 2 4]]
=== Transponierte Matrix ===
import numpy as np
m = np.matrix([[1, 2, 3], [4, 5, 6]])
mt = np.transpose(m)
print(m)
print(mt)
Ausgabe:
[[1 2 3]
[4 5 6]]
[[1 4]
[2 5]
[3 6]]
=== Rang einer Matrix ===
import numpy as np
m = np.matrix([[1, 3], [0, -5]])
rg = np.linalg.matrix_rank(m)
print(rg)
Ausgabe:
2
=== Inverse Matrix ===
import numpy as np
m = np.matrix([[1, 3], [0, -5]])
mi = np.linalg.inv(m)
print(mi)
Ausgabe:
[[ 1. 0.6]
[-0. -0.2]]
=== Multiplikation von Matrizen (falksches Schema) ===
import numpy as np
m1 = np.matrix([[1, 3, 4], [0, -5, 1]])
m2 = np.matrix([[1, 2], [2, 3], [0, 2]])
print(m1 @ m2)
Ausgabe:
[[ 7 19]
[-10 -13]]
=== Eigenwerte und Eigenvektoren ===
import numpy as np
m = np.matrix([[5, 8], [1, 3]])
D,V = np.linalg.eig(m)
# Eigenwerte
print(D)
# Eigenvektoren
print(V)
Ausgabe:
[7. 1.]
[[ 0.9701425 -0.89442719]
[ 0.24253563 0.4472136 ]]
=== Teilmatrizen ===
import numpy as np
m = np.matrix([[1, 3, 4], [0, -5, 1]])
print("m = ", m)
# Erste Zeile extrahieren
m1 = m[0,:]
print("m1 = ", m1)
# Das Element aus der 1. Zeile und der 2. Spalte extrahieren
m2 = m[0,1]
print("m2 = ", m2)
# Zweite Spalte extrahieren
m3 = m[:, 1]
print("m3 = ", m3)
Ausgabe:
m = [[ 1 3 4]
[ 0 -5 1]]
m1 = [ [1 3 4] ]
m2 = 3
m3 = [[ 3]
[-5]]
=== Spezielle Matrizen ===
==== Nullmatrix ====
import numpy as np
z = np.zeros((3, 2))
print(z)
Ausgabe:
[[0. 0.]
[0. 0.]
[0. 0.]]
==== Einheitsmatrix ====
import numpy as np
z = np.eye(3)
print(z)
Ausgabe:
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
==== Matrix mit lauter Einsen ====
import numpy as np
z = np.ones((3, 2))
print(z)
Ausgabe:
[[1. 1.]
[1. 1.]
[1. 1.]]
=== Spärlich besetzte Matrizen ===
Das Thema spärlich besetzter Matrizen wird hier nur kurz angerissen. Nähere Details siehe unter dem Weblink [https://docs.scipy.org/doc/scipy/reference/sparse.html#module-scipy.sparse].
import numpy as np
import scipy
A = scipy.sparse.csr_array(np.eye(5))
print(A)
Ausgabe:
(0, 0) 1.0
(1, 1) 1.0
(2, 2) 1.0
(3, 3) 1.0
(4, 4) 1.0
= Lineare Gleichungssysteme =
Sei <math>Ax = b</math> ein lineares Gleichungssystem. <math>A</math> sei die Koeffizientenmatrix, <math>x</math> der Lösungsvektor und <math>b</math> ein bekannter Vektor.
Beispiel:
import numpy as np
A = np.array([[5, 1], [0, 2]])
b = np.array([1, 2])
x = np.linalg.solve(A, b)
print(x)
Ausgabe:
[0. 1.]
== Aufgabe ==
* Lösen Sie folgendes Gleichungssystem mittels Python (und zur Kontrolle auch händisch):
5x + 6y - 2z = 12
3x - y - 3z = 6
2x + 2y + 4z = 5
= Polynome =
== Ein erstes einfaches Beispiel ==
Gegeben sei das Polynom <math>7x^3+5x^2+1</math>. In Python:
import numpy as np
p = np.poly1d([7, 5, 0, 1])
print(p)
Ausgabe:
3 2
7 x + 5 x + 1
== Einzelne Polynomwerte berechnen ==
import numpy as np
p = np.poly1d([7, 5, 0, 1])
print(p(1.5))
Ausgabe:
35.875
== Polynome integrieren und differenzieren ==
import numpy as np
p = np.poly1d([7, 5, 0, 1])
# 1. Ableitung
p1 = p.deriv()
p2 = p.deriv(1)
# 2. Ableitung
p3 = p.deriv(2)
# Integral
p4 = p.integ()
print(p1)
print(p2)
print(p3)
print(p4)
Ausgabe:
2
21 x + 10 x
2
21 x + 10 x
42 x + 10
4 3
1.75 x + 1.667 x + 1 x
== Nullstellen bestimmen ==
import numpy as np
p = np.poly1d([2, 5, 0, 4])
r = np.roots(p)
print(r)
Ausgabe:
[-2.7621427 +0.j 0.13107135+0.84077099j 0.13107135-0.84077099j]
== Aufgaben ==
* Berechnen Sie den Wert für x = 3 des Polynoms <math>y = 2x^4 - 3x^3 - x + 7</math>.
* Differenzieren und integrieren Sie das Polynom <math>y = 2x^4 - 3x^3 - x + 7</math>.
* Berechnen Sie die Nullstellen von <math>y = 7x^5 - 3x^2 + 12</math>.
= Nichtlineare Gleichungen und Gleichungssysteme =
== Nullstellenbestimmung ==
Löse eine beliebige Gleichung f(x) = 0, z.B. <math> f(x) = x^2 - 5\cos(x) - 10 = 0 </math>:
import scipy
import numpy as np
def f(x):
return x**2 - 5*np.cos(x) - 10
xstart = [-1, 1] # Startwerte
xn = scipy.optimize.root(f, xstart)
print(xn.x)
Ausgabe:
[-2.46813009 2.46813009]
Funktionsgraph:
[[Datei:octave_nichtlin2.jpg]]
== Gleichungssysteme ==
SymPy ist ein externes Modul, das symbolisches Rechnen ('''Sym'''bolic '''Py'''thon) ermöglicht.
Folgende Aufgabe ist dem Buch "Knorrenschild: Numerische Mathematik, Hanser, 2017, Seite 72" entnommen. Zu lösen ist das nichtlineare Gleichungssystem
<math>f_1 = 2x_1 + 4x_2 = 0 </math>
<math>f_2 = 4x_1 + 8x_2^3 = 0</math>
Mit Python ist das so möglich:
import sympy
x1, x2 = sympy.symbols("x1 x2")
f1 = 2*x1 + 4*x2
f2 = 4*x1 + 8*x2**3
s = sympy.solve((f1, f2), x1, x2)
print(s)
Ausgabe:
[(-2, 1), (0, 0), (2, -1)]
Plot:
[[Datei:IngPython_nl_gleichung1.svg|500px]]
= Komplexe Zahlen =
Die imaginäre Einheit wird in Python durch den Buchstaben <code>j</code> symbolisiert. Darstellen kann man eine komplexe Zahl bekannterweise in mehreren Formen:
* Kartesische Darstellung <math>z = \Re(z) + j \cdot \Im(z)</math>
* Polardarstellungen <math>z = r \cdot (\cos(\phi) + j \cdot \sin(\phi)) = r \cdot e^{j\cdot \phi}</math>
Die konjugiert komplexe Zahl ist <math>z^* = \Re(z) - j \cdot \Im(z)</math>
Nachfolgend einige mathematische Operationen mit Python und NumPy.
import numpy as np
z1 = 2 + 5j # kartesische Darstellung
z2 = 3 * np.exp(3j) # Polardarstellung
# Addition
res = z1 + z2
print("z1 + z2 = ", res)
# Multiplikation
res = z1 * z2
print("z1 * z2 = ", res)
# Realteil
res = np.real(z2)
print("Realteil von z2 = ", res)
# Imaginärteil
res = np.imag(z2)
print("Imaginaerteil von z2 = ", res)
# Betrag
res = np.abs(z1)
print("Betrag von z1 = ", res)
# Argument
res = np.angle(z1)
print("Argument von z1 = ", res)
# Konjugiert komplexe Zahl
res = np.conj(z1)
print("Konjugiert komplexe Zahl von z1 = ", res)
Ausgabe:
z1 + z2 = (-0.9699774898013365+5.423360024179601j)
z1 * z2 = (-8.05675510050068-14.003167400647481j)
Realteil von z2 = -2.9699774898013365
Imaginaerteil von z2 = 0.4233600241796016
Betrag von z1 = 5.385164807134504
Argument von z1 = 1.1902899496825317
Konjugiert komplexe Zahl von z1 = (2-5j)
= Interpolation =
import numpy as np
import scipy
import matplotlib.pyplot as plt
# Stützpunkte
xp = np.arange(1, 6)
yp = (0, -5, 2, 7, 6)
ti = np.arange(1, 5, 0.01)
i1 = scipy.interpolate.interp1d(xp, yp, kind = "linear")
i2 = scipy.interpolate.interp1d(xp, yp, kind = "cubic")
plt.plot(xp, yp, "rx")
plt.plot(xp, i1(xp))
plt.plot(ti, i2(ti))
plt.show()
Ausgabe:
[[Datei:PythonIng_interpol1.png]]
= Differenzialrechnung =
== Numerisches Differenzieren ==
Als Beispiel differenzieren wir <math>y = 5x\sin{x}</math> und stellen das Ganze grafisch dar.
from findiff import Diff
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 1000)
f = 5 * x * np.sin(x)
dx = x[1] - x[0]
# Ableitung
d_dx = Diff(0, dx)
df_dx = d_dx(f)
# Grafik
plt.plot(x, f, label = "y")
plt.plot(x, df_dx, label = "y'")
plt.grid()
plt.legend(loc="best")
plt.show()
Ausgabe:
[[Datei:octave_diff1.jpg]]
<small>findiff ist ein externes Modul. Dieses muss installiert werden (z.B. so: ...\Python\Scripts\pip.exe install --upgrade findiff). Für die Vorgehensweise unter openSUSE Tumbleweed siehe das Kapitel VPython, nur dass das Ganze mit einer aktuelleren Python-Version exekutiert wird, z.B. mit Python 3.13. Das im Buch "Steinkamp: Der Python-Kurs für Ingenieure und Naturwissenschaftler, Rheinwerk" verwendete Modul "scipy.misc" ist veraltet (deprecated ... missbilligt). Lt. [https://docs.scipy.org/doc/scipy-1.17.0/dev/roadmap-detailed.html#misc SciPy-Dokumentation für die Version 1.17.0] wurden alle entsprechenden Features schon entfernt.</small>
== Symbolisches Differenzieren ==
Differenzieren Sie die Funktionen <math>f_1(x) = x^2</math> und <math>f_2(x) = \sin(x)\cos\left(\frac{x}{2}\right)</math>.
import sympy
x = sympy.symbols("x")
f1 = x**2;
f2 = sympy.sin(x) * sympy.cos(x/2.)
d1 = sympy.diff(f1, x)
d2 = sympy.diff(f2, x)
print(d1)
print(d2)
Ausgabe:
2*x
-0.5*sin(0.5*x)*sin(x) + cos(0.5*x)*cos(x)
== Aufgaben ==
* Differenzieren Sie die Funktion <math>y = \log(x) + 10x</math> und stellen Sie y, sowie y' grafisch am Bildschirm dar.
* Differenzieren Sie die Funktion <math>y = \frac{\sinh(x)}{(1+x)}</math> und stellen Sie y, sowie y' grafisch am Bildschirm dar.
= Integralrechnung =
== Numerisches Integrieren ==
Berechnen Sie das Integral <math>\int_{0}^{3}x^2 dx</math>.
import scipy
def f(x):
return x**2
i = scipy.integrate.quad(f, 0, 3)
print(i)
Ausgabe:
(9.000000000000002, 9.992007221626411e-14)
Das trifft den exakten Wert 9.0 ziemlich genau.
Berechnen Sie das Integral <math>\int_{0}^{\infty} 2^{-x} dx</math>.
import scipy
import numpy as np
def f(x):
return 2**(-x)
i = scipy.integrate.quad(f, 0, np.inf)
print(i)
Ausgabe:
(1.4426950408889556, 4.486558477977586e-09)
== Symbolisches Integrieren ==
Berechnen Sie <math>\int x^2 \text{d}x</math> und <math>\int \sin{x}\cos{\frac{x}{2}} \text{d}x</math>.
import sympy
x = sympy.symbols("x")
f1 = x**2
f2 = sympy.sin(x) * sympy.cos(x/2.)
i1 = sympy.integrate(f1, x)
i2 = sympy.integrate(f2, x)
print(i1)
print(i2)
Ausgabe:
x**3/3
-0.666666666666667*sin(0.5*x)*sin(x) - 1.33333333333333*cos(0.5*x)*cos(x)
Berechnen Sie das Integral <math>\int_{0}^{\infty} 2^{-x} \text{d}x</math>.
import sympy
x = sympy.symbols("x")
f = 2**(-x)
i = sympy.integrate(f, (x, 0, sympy.oo))
print(i)
Ausgabe:
1/log(2)
Mit <code>sympy.pprint(i)</code> ließe sich letzere Ausgabe etwas schöner schreiben:
1
──────
log(2)
Man beachtete, <code>log</code> steht hier für den natürlichen Logarithmus <code>ln</code>.
== Aufgaben ==
* Integrieren Sie die Funktion <math>y = \log(x) + 10x</math> von 1 bis 5.
* Integrieren Sie die Funktion <math>y = x^3</math> von 0 bis 4.
* Integrieren Sie <math>\int x^x(\log (x) + 1)\mathrm dx</math> symbolisch.
= Gewöhnliche Differenzialgleichungen =
== DGL numerisch lösen ==
Für die Lösung von Differenzialgleichungen steht u.a. die Funktion scipy.integrate.solve_ivp() zur Verfügung. Diese Funktion implementiert auch das Runge-Kutta-Verfahren (RK45).
{{Wikipedia | Runge-Kutta-Verfahren}}
Beispiel <math>y' = x^2 + y^3</math>:
import scipy
import numpy as np
import matplotlib.pyplot as plt
def dy_dx(x, y):
return x**2 + y**3
y0 = [1]
xi = [0, 1]
x = np.arange(0, 1, 0.01)
z = scipy.integrate.solve_ivp(dy_dx, xi, y0, method="RK45", dense_output=True)
y = z.sol(x)
plt.plot(x, y.T)
plt.grid()
plt.show()
[[Datei:PythonIng_dgl1.png]]
== DGL symbolisch lösen ==
Beispiel <math>y' = x^2 + y^3</math>:
import sympy
x = sympy.symbols("x")
y = sympy.Function("f")(x)
dgl = x**2 + y**3
lsg = sympy.dsolve(dgl, y)
print(lsg)
Ausgabe:
[Eq(f(x), (-x**2)**(1/3)), Eq(f(x), (-x**2)**(1/3)*(-1 - sqrt(3)*I)/2), Eq(f(x), (-x**2)**(1/3)*(-1 + sqrt(3)*I)/2)]
Mit <code>sympy.pprint</code> (pretty print) lässt sich die Ausgabe etwas übersichtlicher darstellen.
import sympy
x = sympy.symbols("x")
y = sympy.Function("f")(x)
dgl = x**2 + y**3
lsg = sympy.dsolve(dgl, y)
sympy.pprint(lsg)
Ausgabe:
⎡ _____ _____ ⎤
⎢ _____ 3 ╱ 2 3 ╱ 2 ⎥
⎢ 3 ╱ 2 ╲╱ -x ⋅(-1 - √3⋅ⅈ) ╲╱ -x ⋅(-1 + √3⋅ⅈ)⎥
⎢f(x) = ╲╱ -x , f(x) = ────────────────────, f(x) = ────────────────────⎥
⎣ 2 2 ⎦
== Aufgaben ==
* Lösen Sie die Differenzialgleichung <math>y' = \frac{1}{x\cdot y}</math> mit Python. Kontrollieren Sie das Ergebnis, indem Sie die DGl händisch lösen.
* Lösen Sie die Differenzialgleichung <math>m' = -k\cdot m</math>. Kontrollieren Sie das Ergebnis, indem Sie die DGl händisch lösen.
* Lösen Sie die Differenzialgleichung <math>y' = \sqrt{|y|}</math>.
=Laplace-Transformation=
Laplace-Transformation:
<math>F(s) =\mathcal{L} \left\{f\right\}(s) = \int_{0}^{\infty} f(t) \mathrm e^{-st} \,\mathrm{d}t, \qquad s\in\mathbb{C}
</math>
Inverse Laplace-Transformation:
<math>\mathcal{L}^{-1} \left\{F\right\}(t)
= \frac{1}{2 \pi \mathrm j} \int_{ \gamma - \mathrm j \infty}^{ \gamma + \mathrm j \infty} \mathrm e^{st} F(s)\,\mathrm ds
= \begin{cases}
f(t) & \text{für } t \geq 0 \\
0 & \text{für } t < 0
\end{cases}
</math>
Siehe auch [[Ing_Mathematik:_Laplace-Transformation]]
Code:
import sympy
from sympy.abc import t, s
# Laplace-Transformation der Funktion f(t) = 1 (Heaviside-Fkt.)
f = 1
# alternativ: f = sympy.Heaviside(t)
F = sympy.laplace_transform(f, t, s, noconds=True)
print("Laplace-Transformierte F(s):", F)
# Inverse Laplace-Transformation zurück in den Zeitbereich
f_inv = sympy.inverse_laplace_transform(F, s, t)
print("Inverse Transformation f(t):", f_inv)
Ausgabe:
Laplace-Transformierte F(s): 1/s
Inverse Transformation f(t): Heaviside(t)
Die Zeile
from sympy.abc import t, s
steht alternativ für
t = sympy.symbols("t")
s = sympy.symbols("s")
=Fourier-Reihen=
<math>
f(x)\approx \frac{a_{0}}{2}+\sum_{k=1}^{\infty}\left(a_{k}\cos\left(kx\right)+b_{k}\sin\left(kx\right)\right)
</math>
<math>
a_{k} = \frac{1}{\pi}\int_{-\pi}^{\pi}f(x)\cdot\cos\left(kx\right)\mathrm dx\quad\text{für }k\geq0
</math>
<math>
b_{k} = \frac{1}{\pi}\int_{-\pi}^{\pi}f(x)\cdot\sin\left(kx\right)\mathrm dx\quad\text{für }k\geq1
</math>
Für die Sägezahnfunktion <math>y=x;\, 0 < x < 2\pi</math> sei die Fourierreihe mit einem Python-Programm (unter Mithilfe von sympy) hergeleitet.
Code:
from sympy import fourier_series, pi, symbols, pprint
x = symbols('x')
f = x
s = fourier_series(f, (x, 0, 2*pi))
pprint(s.truncate(n=4))
Ausgabe:
2⋅sin(3⋅x)
-2⋅sin(x) - sin(2⋅x) - ────────── + π
3
Siehe auch [[Ing Mathematik: Fourierreihen]].
Ein komplizierteres Beispiel:
[[Datei:IngMath fourier bsp13.svg | 300px]]
<math>0\le t < T/2\text{:}\quad f(t) = H</math>
<math>T/2 \le t \le T\text{:}\quad f(t) = \frac{2H}{T}\left( t-\frac{T}{2}\right)</math>
Code:
import sympy as sp
H = sp.Symbol('H', positive=True)
T = sp.Symbol('T', positive=True)
t = sp.Symbol('t')
f = sp.Piecewise(
(H, (t > 0) & (t < T/2)),
(2*H/T*(t-T/2), (t > T/2) & (t < T))
)
f_series = sp.fourier_series(f, (t, 0, T))
sp.pprint(f_series.truncate(4))
Ausgabe:
⎛2⋅π⋅t⎞ ⎛4⋅π⋅t⎞ ⎛6⋅π⋅t⎞ ⎛2⋅π⋅t⎞ ⎛6⋅π⋅t⎞
H⋅sin⎜─────⎟ H⋅sin⎜─────⎟ H⋅sin⎜─────⎟ 2⋅H⋅cos⎜─────⎟ 2⋅H⋅cos⎜─────⎟
⎝ T ⎠ ⎝ T ⎠ ⎝ T ⎠ ⎝ T ⎠ ⎝ T ⎠ 3⋅H
──────────── - ──────────── + ──────────── + ────────────── + ────────────── + ───
π 2⋅π 3⋅π 2 2 4
π 9⋅π
=Rechnen mit wirklich großen Zahlen=
Bekannt ist, dass Python kaum Einschränkungen beim Wertebereich von Ganzzahlen hat, z.B.
print(10**300)
Ausgabe (gekürzt):
100000000000000000000...00000000000000000000000000000000000000000000000000000000000000000000000
Ähnliches geht auch mit Gleitpunktzahlen, z.B. durch die Verwendung des Moduls mpmath:
import mpmath
print(mpmath.mpf(1500.4)**mpmath.mpf(300))
Ausgabe:
7.27975299218612e+952
Anderes Beispiel:
from mpmath import mp, pi
mp.dps = 100
print(pi)
Ausgabe:
3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117068
mpmath kann noch einiges mehr, dazu sei aber auf die entsprechende Dokumentation auf der mpmath-Homepage verwiesen. mpmath ist Bestandteil von SymPy, kann aber auch separat installiert werden.
Aber auch Python selbst besitzt eine Möglichkeit, um mit großen bzw. exakten Gleitpunktzahlen zu rechnen, nämlich das interne Modul decimal. Dieses hat einige Vorteile gegenüber mpmath, aber auch gravierende Nachteile. Diese seien hier nicht detailliert aufgezählt. Grob gesagt hat decimal im Finanzwesen seine Berechtigung. Für wissenschaftliche Anwendungen wird aber mpmath vorzuziehen sein, da es u.a. vielfältige mathematische Funktionen bereit stellt. Nachfolgend ein einfaches Beispiel mit decimal:
import decimal
print("Potenzierung:", decimal.Decimal(1500.4) ** decimal.Decimal(300.0))
print("Einfache Addition:", 0.1 + 0.2)
decimal.getcontext().prec = 50
print("Addition mit decimal:", decimal.Decimal("0.1") + decimal.Decimal("0.2"))
Ausgabe:
Potenzierung: 7.279752992186121551039839134E+952
Einfache Addition: 0.30000000000000004
Addition mit decimal: 0.3
<u>Aufgabe:</u> Recherchieren Sie im Internet die genauen Vor- und Nachteile von decimal und mpmath. Verwenden Sie dazu auch KI (z.B. von Google, chatgpt).
=Regelungstechnische Aufgabenstellungen=
Für regelungstechnische Aufgaben gibt es u.a. das externe Paket <code>control</code>. Hier soll nicht detailliert darauf eingegangen werden. Anhand eines Beispiels soll anschließend nur die Visualisierung in Form eines Bode-Diagramms und der Sprungantwort gezeigt werden. Gegeben sei ein P-Regler mit <math>R = \frac{5}{2}</math> und eine Strecke <math>S= \frac{1}{30s^3+20s^2+10s+1,5}</math>. Gesucht sei vorerst ein Bode-Diagramm für den offenen Regelkreis und das Führungsverhalten.
import numpy as np
import control as ct
import matplotlib.pyplot as plt
zaehler1 = np.array([1.])
nenner1 = np.array([30., 20., 10., 1.5])
strecke = ct.tf(zaehler1, nenner1)
zaehler2 = np.array([5.])
nenner2 = np.array([2.])
regler = ct.tf(zaehler2, nenner2)
G0 = regler*strecke # oder: G0 = ct.series(regler, strecke)
Gw = ct.feedback(G0)
ct.bode_plot(G0, label='G0')
ct.bode_plot(Gw, label='Gw')
plt.show()
[[Datei:PythonIng_bode1.svg]]
Nun noch für obiges Beispiel die Sprungantwort. Diese zeigt einige große Überschwinger, d.h. der Regler kann sicher noch optimiert werden.
import numpy as np
import control as ct
import matplotlib.pyplot as plt
zaehler1 = np.array([1.])
nenner1 = np.array([30., 20., 10., 1.5])
strecke = ct.tf(zaehler1, nenner1)
zaehler2 = np.array([5.])
nenner2 = np.array([2.])
regler = ct.tf(zaehler2, nenner2)
G0 = regler*strecke
Gw = ct.feedback(G0)
t, y = ct.step_response(Gw)
plt.plot(t,y)
plt.title('Sprungantwort')
plt.xlabel('t')
plt.ylabel('h(t)')
plt.grid()
plt.show()
[[Datei:PythonIng_bode3.svg]]
Einige weitere wichtige Daten (Phasenreserve, Amplitudenreserve, Durchtrittsfrequenz) lassen sich mittels der <code>control</code>-Funktion <code>margin()</code> ermitteln. Die Ortskurve lässt sich mit der Funktion <code>nyquist_plot()</code> zeichnen. Dies sei hier aber nicht weiter ausgeführt.
==Aufgaben==
* Zeichen Sie mit Python die Ortskurve für obiges Beispiel.
* Was passiert, wenn man die Reglerverstärkung weiter aufdreht (z.B. auf <math>R = \frac{25}{2}</math>)?
* Wie sehen das Bode-Diagramm und die Sprungantwort aus, wenn ein PI-Regler verwendet wird?
= Stereostatik etc. =
Das Modul SymPy bietet einige Möglichkeiten einfache Bauwerke zu berechnen, z.B. Balken oder Fachwerke. Nachfolgend wird ein einfaches Fachwerk berechnet und gezeichnet.
Python-Code:
from sympy.physics.continuum_mechanics.truss import Truss
t = Truss()
# Knoten
t.add_node(("A", -3, 0), ("B", 0, 0), ("C", 4, 0), ("D", 7, 0),
("E", 6, 1.5), ("F", 2, 3), ("G", -2, 1.5))
# Stäbe
t.add_member(("AB","A","B"), ("BC","B","C"), ("CD","C","D"))
t.add_member(("AG","A","G"), ("GB","G","B"), ("GF","G","F"))
t.add_member(("BF","B","F"), ("FC","F","C"), ("CE","C","E"))
t.add_member(("FE","F","E"), ("DE","D","E"))
# Auflager; roller ... Loslager, pinned ... Festlager
t.apply_support(("A","roller"), ("D","pinned"))
# Einwirkende Kräfte
t.apply_load(("G", 5, 270), ("E", 3, 90))
# Berechnung
t.solve()
print("Reaction Forces: ", t.reaction_loads)
print("Internal Forces: ", t.internal_forces)
# Fachwerk zeichnen
p = t.draw()
p.show()
Ausgabe auf der Konsole:
Reaction Forces: {'R_A_y': 4.20000000000000, 'R_D_x': 0, 'R_D_y': -2.20000000000000}
Internal Forces: {'AB': 2.80000000000000, 'BC': 0.333333333333333, 'CD': -1.46666666666667,
'AG': -5.04777178564958, 'GB': -2.05555555555556, 'GF': -1.23413387432364,
'BF': 0.411111111111111*sqrt(13), 'FC': -0.3*sqrt(13), 'CE': 1.50000000000000,
'FE': 0.284800124843917, 'DE': 2.64407093534026}
Zeichnung:
[[File:PythonIng_fachwerk1.svg|300px]]
Details zu diesem Thema siehe z.B. [https://docs.sympy.org/latest/modules/physics/continuum_mechanics/index.html Continuum Mechanics] oder [https://docs.sympy.org/latest/tutorials/physics/continuum_mechanics/index.html Continuum Mechanics Tutorials]. Auch andere mechanische Probleme werden von SymPy abgehandelt ([https://docs.sympy.org/latest/tutorials/physics/index.html Physics Tutorials]).
== Aufgabe ==
Gegeben sei ein einseitig eingespannter Kragträger. Belastet wird er durch eine Einzellast am Trägerende. Für die Daten siehe folgende ASCII-Skizze:
| 20 kN
//|---> x |
//| V
//|----------------------
//| 10 m |
Elastizitätsmodul E = 2,1*10⁵ N/mm²
Flächenträgheitsmoment I = 0.001 m⁴
Berechnen Sie die Auflagerreaktionen, den Querkraft- und Biegemomentenverlauf, sowie die Verformungen.
Stellen Sie dies mit Hilfe von SymPy graphisch und auch mittels Formeln dar. Verwenden Sie dazu auch pprint (pretty print) aus dem SymPy-Modul. Zwecks Lösungsansatz siehe die oben aufgeführte Seite "Continuum Mechanics Tutorials". Achten Sie auch auf die Einheiten! Kontrollieren Sie das Ganze mittels händischer Rechnung. In dem genannten Tutorial ist von "Singularity Functions" die Rede. Gemeint ist damit in diesem Kontext die {{W|Föppl-Klammer}}.
Einige Python-Programme, vorrangig zu Maschinenelementen, finden sich auf [https://baymp.de/download_python.html BayMP für Python] (Balken, Zahnräder, Stabknickung usw.).
=Thermodynamik=
Für thermodynamische Aufgabenstellungen gibt es verschiedene externe Module. Eines davon ist PYroMat. Damit lassen sich thermodynamische Stoffdaten für viele Substanzen berechnen.
Beispiel (einige Stoffdaten für Wasser bei 400°C und 20 bar berechnen):
import pyromat as pm
# Wasserdaten laden:
H2O = pm.get('mp.H2O')
# Stoffdaten berechnen:
T = 673.15 # Temperatur in Kelvin
p = 20 # Druck in bar
v = H2O.v(T, p)
h = H2O.h(T, p)
s = H2O.s(T, p)
print(f"Spezifisches Volumen: {v} m³/kg")
print(f"Spezifische Enthalpie: {h} kJ/kg")
print(f"Spezifische Entropie: {s} kJ/(kg K)")
Ausgabe:
Spezifisches Volumen: [0.1512163] m³/kg
Spezifische Enthalpie: [3248.3789473] kJ/kg
Spezifische Entropie: [7.12924142] kJ/(kg K)
<small>
PYroMat muss vorab installiert werden (z.B. mittels pip, in eine virtuelle Umgebung)
</small>
<code>mp</code> steht für "multi phase". Für ein ideales Gas wäre <code>ig</code> zuständig, z.B. <code>'ig.O2'</code>.
Ein anderes Modul für einen anderen Aufgabenzweck ist TESPy ('''T'''hermal '''E'''ngineering '''S'''ystems in '''Py'''thon). Dieses Modul ist für die Anlagensimulation zuständig. Für nähere Informationen siehe die entsprechende Website weiter unten in diesem Text.
= Stochastik =
Die Stochastik ist ein sehr weites Feld. Hier werden nur einige wenige sehr einfache, aber wichtige Themen angerissen. Python stellt mit den Moduln math und statistics Software zu diesem Zwecke bereit. math und statistics sind bereits im Lieferumfang von Python enthalten. Aber auch mit den externen Modulen NumPy, SciPy und pandas kann man Stochastik in Python betreiben. Dies wird hier aber nicht gemacht.
== Lageparameter ==
import statistics
werte = [1, 3, 4, 4, 1, 7, 9, 1, 2, 3]
m1 = statistics.mean(werte)
m2 = statistics.mode(werte)
m3 = statistics.median(werte)
print("Arithmetischer Mittelwert = ", m1)
print("Modalwert = ", m2)
print("Median = ", m3)
Ausgabe:
Arithmetischer Mittelwert = 3.5
Modalwert = 1
Median = 3.0
== Streuungsparameter ==
import statistics
werte = [1, 3, 4, 4, 1, 7, 9, 1, 2, 3]
s = statistics.stdev(werte)
print("Standardabweichung = ", s)
Ausgabe:
Standardabweichung = 2.6770630673681683
== Kombinatorik ==
import math
n = 7
k = 5
print("n! = ", math.factorial(n))
print("Kombinationen (n über k) = ", math.comb(n, k))
Ausgabe:
n! = 5040
Kombinationen (n über k) = 21
= Ein- und Ausgabe =
== print ==
Die Anweisung print haben wir schon oft verwendet. Hier soll anhand von Beispielen kurz beschrieben werden, was der Befehl print leisten kann.
print("Hallo", "Welt", 1, sep="-")
print("Hallo", end=" ")
print("Welt")
Ausgabe:
Hallo-Welt-1
Hallo Welt
== input ==
a = int(input("Zahl 1: "))
b = int(input("Zahl 2: "))
print("a + b = ", a+b)
Ausgabe (nach Eingabe der beiden Ganzzahlen):
Zahl 1: 4
Zahl 2: 5
a + b = 9
== Aus Dateien lesen ==
Es seinen die datei.txt
Hallo Welt.
Wie geht es dir?
...
und test1.py
dat = open("datei.txt", mode = "r")
print(dat.read())
dat.close()
Ausgabe
Hallo Welt.
Wie geht es dir?
...
Mit dem open()-Befehl wird die Datei datei.txt im Lesemodus geöffnet (r ... read). Mit dem read()-Befehl wird die Datei eingelesen und mittels print ausgegeben.
== In Dateien schreiben ==
dat = open("datei.txt", mode = "a", encoding = "utf-8")
dat.write("Hänge Zeile an\n")
dat.close()
Die Datei datei.txt sieht nach Abarbeitung des obigen Skripts nun so aus
Hallo Welt.
Wie geht es dir?
...
Hänge Zeile an
Es wird die Datei im Schreibmodus geöffnet (a ... append (anhängend), w ... write (überschreibend)).
write() fügt hier also eine Zeile Text am Dateiende ein. close() schließt die Datei wieder.
Das close() kann man sich mit der with-Anweisung auch sparen.
with open("datei.txt", mode="a", encoding="utf-8") as dat:
dat.write("Hänge Zeile an\n")
= Benutzeroberflächen erstellen =
== tkinter ==
{{Wikipedia | Tkinter}}
Python bietet standardmäßig das Modul tkinter zur Programmierung von Benutzeroberflächen. Es müssen also bei der Verwendung von tkinter keine externen Module installiert werden. Hier wird eine (sehr) kurze Einführung in das Erstellen von grafischen Oberflächen mittels tkinter gegeben.
import tkinter as tk
win = tk.Tk()
win.title("Hallo Welt!")
win.minsize(300, 50)
but = tk.Button(win, text = "Push the button")
but.pack()
win.mainloop()
Ausgabe:
[[Datei:PythonIng_gui1.jpg]]
Ein etwas komplizierteres Beispiel sei nachfolgend gezeigt. Es sollen zwei Strings miteinander verknüpft und ausgegeben werden.
import tkinter as tk
win = tk.Tk()
win.title("Hallo Welt!")
def on_button_clicked():
str = ent1.get() + ent2.get()
lab2["text"] = str
ent1 = tk.Entry(win)
ent2 = tk.Entry(win)
lab1 = tk.Label(win, text="verknuepfen mit")
lab2 = tk.Label(win, text="")
but = tk.Button(win, text = "=", command=on_button_clicked)
ent1.pack(side="left")
lab1.pack(side="left")
ent2.pack(side="left")
but.pack(side="left")
ent2.pack(side="left")
lab2.pack(side="left")
win.mainloop()
Ausgabe (vor der Eingabe der Teilstrings):
[[Datei:PythonIng_gui2.jpg]]
Ausgabe (nach der Eingabe der Teilstrings und dem Drücken des =-Buttons):
[[Datei:PythonIng_gui3.jpg]]
== curses ==
{{Wikipedia | curses}}
Mit dem curses-Modul lassen sich u.a. TUIs ('''T'''ext '''U'''ser '''I'''nterfaces) erstellen. Ein sehr einfaches Beispiel zur allgemeinen Funktionsweise wird nachstehend geliefert.
import curses
stdscr = curses.initscr()
curses.start_color()
curses.init_pair(1, curses.COLOR_RED, curses.COLOR_WHITE)
stdscr.clear()
stdscr.addstr("Hallo Welt", curses.color_pair(1))
stdscr.refresh()
stdscr.getch()
curses.endwin()
Als Ausgabe sollte <span style="color:#FF0000;">Hallo Welt</span> (rote Schrift auf weißem Hintergrund) auf dem Terminal/der Konsole erscheinen. Getestet wurde dies mit openSUSE Tumbleweed, Python-Version 3.13.12. Das entsprechende Python-curses-Package muss installiert sein.
Allgemeine Informationen zur Terminal-/Konsolengröße und Cursorposition liefert folgendes Programm:
import curses
stdscr = curses.initscr()
stdscr.addstr(3, 5, "LINES: %d" % curses.LINES)
stdscr.addstr(4, 5, "COLS: %d" % curses.COLS)
(y,x) = stdscr.getyx()
stdscr.addstr(5, 5, "Momentane Cursorposition: [%d, %d]" % (y, x))
(y,x) = stdscr.getbegyx()
stdscr.addstr(6, 5, "Koordinatenursprung: [%d, %d]" % (y, x))
(y,x) = stdscr.getmaxyx()
stdscr.addstr(7, 5, "Fenstergröße: [%d, %d]" % (y, x))
stdscr.addstr(11, 2, "Taste drücken -> Ende")
stdscr.refresh()
stdscr.getch()
curses.endwin()
Es sollte sich in etwa folgende Ausgabe ergeben:
LINES: 44
COLS: 110
Momentane Cursorposition: [4, 15]
Koordinatenursprung: [0, 0]
Fenstergröße: [44, 110]
Taste drücken -> Ende
Zur Funktionsweise von curses siehe auch das Wikibook [[ncurses]]. Zum Verständnis sind dort allerdings elementare Kenntnisse in der Programmiersprache C erforderlich.
== Qt ==
{{Wikipedia | Qt (Bibliothek)}}
Auch für das Qt-Framework gibt es eine Anbindung an Python. Nachfolgend ein einfaches Beispiel.
import sys
from PySide6.QtWidgets import QApplication, QLabel
app = QApplication(sys.argv)
label = QLabel("Hallo Welt!")
label.show()
sys.exit(app.exec())
Ausgabe:
[[Datei:PythonIng_gui10.png]]
== Gtk ==
{{Wikipedia | GTK (Programmbibliothek)}}
Eine idente Ausgabe, wie oben für Qt gezeigt, erzeugt z.B. folgendes Gtk-Programm:
import gi
gi.require_version("Gtk", "4.0")
from gi.repository import Gtk
def on_activate(app):
win = Gtk.ApplicationWindow(application=app)
lab = Gtk.Label(label="Hallo Welt!")
win.set_child(lab)
win.present()
app = Gtk.Application()
app.connect('activate', on_activate)
app.run(None)
Auch für die Benutzung von Qt und Gtk müssen die jeweiligen Packages installiert sein. Getestet wurden die entsprechenden Python-Programme nur unter openSUSE Tumbleweed. Wie das GTK-Paket unter MS Windows 11 installiert wird, siehe z.B. [https://www.gtk.org/docs/installations/windows Setting up GTK for Windows].
Damit sei aber das Thema "Benutzeroberflächen erstellen" hier abgeschlossen, da dies schon ein sehr spezielles Aufgabengebiet ist, das eher Informatiker und nicht so sehr Ingenieure anspricht. Bei Bedarf siehe aber ggf. die entsprechenden Links unten in diesem Tutorial. Dort sind weiterführende Informationen zu finden.
= Style Guide, flake8 und Black =
Wie man schönen und richtigen Python-Code schreibt, erfahren Sie in
* [https://peps.python.org/pep-0008/ PEP 8 – Style Guide for Python Code]
Ein Modul, das prüft, ob die Richtlinien im Style Guide eingehalten wurden, ist ''flake8'':
* [https://flake8.pycqa.org/en/latest/ Flake8: Your Tool For Style Guide Enforcement]
Code formatieren kann man auch mit [https://pypi.org/project/black/ Black]. Z.B. übersetzt <code>black test1.py</code> die Datei <code>test1.py</code>
import sympy as sp
H = sp.Symbol("H", positive=True)
T = sp.Symbol("T", positive=True)
t = sp.Symbol("t")
f = sp.Piecewise(
(H, (t > 0) & (t < T / 2)),
(2 * H / T * (t - T / 2), (t > T / 2) & (t < T))
)
f_series = sp.fourier_series(f, (t, 0, T))
sp.pprint(f_series.truncate(4))
in
import sympy as sp
H = sp.Symbol("H", positive=True)
T = sp.Symbol("T", positive=True)
t = sp.Symbol("t")
f = sp.Piecewise(
(H, (t > 0) & (t < T / 2)), (2 * H / T * (t - T / 2), (t > T / 2) & (t < T))
)
f_series = sp.fourier_series(f, (t, 0, T))
sp.pprint(f_series.truncate(4))
Die Programmausgabe ist
reformatted test1.py
All done! ✨ 🍰 ✨
1 file reformatted.
Der Unterschied zwischen Black und Flake8:
* Black ist ein Code-Formatter. Er formatiert Ihren Code um, sodass er im Einklang mit PEP 8 steht.
* Flake8 ein Code-Linter. Flake8 verändert Ihren Code nicht, sondern durchsucht ihn nach potenziellen Fehlern etc.
Am obigen Beispiel sieht man auch, dass flake8 und Black nicht immer einer Meinung sind. Flake8 würde standardmäßig den mit Black formatierten Code bemängeln:
test1.py:8:80: E501 line too long (80 > 79 characters)
Diese Diskrepanz kann beseitigt werden. Da 79 Zeichen auf modernen Bildschirmen meist als zu kurz empfunden werden, ist ein Limit von 88 Zeichen (Black-Standard) oder mehr empfehlenswert. Um dies zu implementieren, erstellen Sie in Ihrem Projektverzeichnis eine <code>.flake8</code>-Datei mit dem Inhalt
[flake8]
max-line-length = 88
Und schon tritt ignoriert Flake8 dieses Problem.
= Einige Integrierte Entwicklungsumgebungen (IDEs)=
Werden Programmtexte größer und umfangreicher, so ist das Arbeiten mit der interaktiven Programmierumgebung bzw. das direkte Ausführen von Python-Skripten mühsam. Man wünscht sich z.B. Hilfen zum Debuggen oder die automatische Code-Vervollständigung. Zu diesem Zweck wurden IDEs (Integrated Development Environments) geschaffen. Von diesen seinen nachfolgend auszugsweise einige kurz beschrieben. Testen Sie einfach aus, welche davon für Sie bzw. für Ihr Python-Projekt geeignet sind.
== IDLE ==
IDLE ist die mit dem Python-Programmpaket mitgelieferte IDE. Der Name leitet sich einerseits ab vom Monty-Python-Mitglied Eric Idle, andererseits steht es als Abkürzung für "'''I'''ntegrated '''D'''evelopment and '''L'''earning '''E'''nvironment. IDLE ist einfach zu bedienen, bietet aber schon einen beachtlichen Leistungsumfang. Nachfolgend wird ein Screenshot zu IDLE geliefert. Rechts ist das Editor-Fenster zu sehen, links die interaktive Programmierumgebung. Um das Beispiel selbst nachvollziehen zu können, starten Sie IDLE. Das geht ähnlich, wie Sie die interaktive Programmierumgebung von Python starten (nur, dass Sie eben das IDLE-Icon doppelklicken und nicht das Python-Icon. Unter Linux geben Sie einfach in einem Terminal <code>idle3.13</code> o. Ä. ein). Weiter geht es mit "File - Open - ...". Die auszuführende Datei auswählen (im konkreten Fall ein "Hallo-Welt"-Programm). Es erscheint das rechte Fenster. Dort "Run - Run Module" auswählen. Und schon wird im linken Fenster "Hallo Welt!" ausgegeben.
[[Datei:PythonIng_idle1.jpg | 600px]]
Siehe auch {{W|IDLE}}.
== PyCharm ==
PyCharm ist ein kommerzielles Produkt. Es gab aber auch eine kostenlose Community Edition. Seit 2025 sind beide Varianten vereint. Für die ersten 30 Tage sind die Pro-Funktionen frei verfügbar, danach nur noch die Kernfunktionalitäten (oder man bezieht kostenpflichtig die Pro-Version). Zu beziehen ist PyCharm unter dem Weblink [https://www.jetbrains.com/pycharm/]. Nachfolgend ein etwas abgewandeltes "Hallo Welt"-Programm, editiert und ausgeführt mit PyCharm.
[[Datei:PyCharm_IDE_2023_screenshot.png | 600px]]
Siehe auch {{W|PyCharm}}.
== Eric ==
Auch eric ist Open Source und steht unter der GNU General Public License Version 3 oder später. Zu beziehen ist diese Software unter [https://eric-ide.python-projects.org/].
[[Datei:Screenshot_Eric_4.png | 600px]]
Siehe auch {{W|eric (Software)}}.
<small>
Unter openSUSE Tumbleweed sollte sich eric auch mit YaST installieren lassen. Bei mir gibt es aber dann beim Ausführen des eric-Programms eine Fehlermeldung (Stand März 2026):
...
ModuleNotFoundError: No module named 'PyQt6.QtPdfWidgets'
Umgehen kann man dieses Problem aber wieder mit dem Erstellen einer virtuellen Umgebung, in etwa so
python3.13 -m venv ~/tmp/venv1
cd ~/tmp/venv1/bin
./python3.13 -m pip install --upgrade --prefer-binary eric-ide
./eric7_ide
</small>
== PyScripter ==
Vom Funktionsumfang vergleichbar mit den vorherigen IDEs ist PyScripter. Auch PyScripter ist Open Source. Die Projekt-Homepage findet sich auf [https://sourceforge.net/projects/pyscripter/]. PyScripter ist nur für MS Windows verfügbar.
[[Datei:PythonIng_pyscripter1.jpg | 600px]]
== Spyder IDE ==
Spyder enthält bereits eine stabile Python-Version und etliche Module (z.B. matplotlib, numpy, control). Ansonsten kann dieses Softwarepaket vom Funktionsumfang her mit den anderen genannten IDEs locker mithalten. Spyder wurde unter der MIT-Lizenz veröffentlicht. Diese Software findet sich auf [https://www.spyder-ide.org].
[[Datei:Spyder-windows-screenshot.png | 600px]]
Siehe auch {{W|Spyder (Software)}}
== Sonstige ==
Die genannten IDEs sind nicht die Einzigen. Es gibt, um dem Image Pythons als beliebteste Programmiersprache gerecht zu werden, noch einige andere. Sowohl Open Source-Programme als auch kommerzielle Programme sind im Web zu finden, z.B. Thonny oder {{W|Visual Studio Code}}. Braucht man den Umfang von ausgewachsenen IDEs nicht, so kann man auch normale Texteditoren verwenden (z.B. {{W|Geany}} oder {{W|Kate_(Texteditor)|Kate}}).
= Debuggen und Testen =
Das Debuggen und Testen von Programmen sind wichtige Bestandteile der Programmierung. Syntaxfehler lassen sich i.A. leicht beheben. Schwieriger ist das Eingrenzen von logischen Fehlern, die ev. nur in bestimmten Situationen auftreten und keine explizite Fehlermeldung hervorrufen. Das Programm liefert falsche Ergebnisse oder es stürzt aus heiterem Himmel ab. Um das zu verhindern gibt es verschiedene Werkzeuge, die bei der Fehlersuche behilflich sein können. Vorerst siehe aber zwecks Begriffsklärung noch folgende Links:
* {{W|Debuggen}}
* {{W|Debugger}}
* {{W|Softwaretest}}
<gallery>
First Computer Bug, 1947.jpg
Test ganzheitlich.png
V-Modell.svg
</gallery>
== Das Modul pdb ==
Python bringt schon ein Modul zum Debuggen mit. Siehe z.B. [https://docs.python.org/3/library/pdb.html pdb — The Python Debugger].
Komfortabler lässt sich das aber mittels Integrierter Entwicklungsumgebungen (IDEs) angehen.
== Debuggen mit IDEs ==
Für die IDEs IDLE und Spyder sei kurz auf die entsprechenden Webseiten verwiesen:
* [https://www.cs.uky.edu/~keen/help/debug-tutorial/debug.html Debugging under IDLE].
* [https://docs.spyder-ide.org/current/panes/debugging.html Spyder Debugger]
Dort wird die Vorgehensweise auch mittels Screenshots erläutert.
== assert ==
assert ... behaupten, zusichern ({{W|Assertion (Informatik)}})
Python-Code:
def print1(x, y):
assert type(x) == float
assert type(y) == float
assert y != 0.0
print(x/y)
print1(10., 5.)
print1(10., 0.)
Ausgabe:
2.0
Traceback (most recent call last):
File "/home/hr/Develop/test1.py", line 8, in <module>
print1(10., 0.)
File "/home/hr/Develop/test1.py", line 4, in print1
assert y != 0.0
^^^^^^^^
AssertionError
Python-Code:
def print1(x, y):
assert type(x) == float
assert type(y) == float
assert y != 0.0
print(x/y)
print1(10., 5.)
print1("10.", "5.")
Ausgabe:
2.0
Traceback (most recent call last):
File "/home/hr/Develop/test1.py", line 8, in <module>
print1("10.", "5.")
File "/home/hr/Develop/test1.py", line 2, in print1
assert type(x) == float
^^^^^^^^^^^^^^^^
AssertionError
Aber auch bei nachfolgendem Code gibt es eine Fehlermeldung:
def print1(x, y):
assert type(x) == float
assert type(y) == float
assert y != 0.0
print(x/y)
print1(10., 5.)
print1(10, 5)
Ausgabe:
2.0
Traceback (most recent call last):
File "/home/hr/Develop/test1.py", line 8, in <module>
print1(10, 5)
File "/home/hr/Develop/test1.py", line 2, in print1
assert type(x) == float
^^^^^^^^^^^^^^^^
AssertionError
Damit letzteres funktioniert, kann man den Programmcode so umschreiben:
def print1(x, y):
assert type(x) == float or type(x) == int
assert type(y) == float or type(y) == int
assert y != 0.0
print(x/y)
print1(10., 5.)
print1(10, 5)
Ausgabe:
2.0
2.0
Und jetzt fangen wir den <code>AssertionError</code> auf:
def print1(x, y):
try:
assert type(x) == float or type(x) == int
assert type(y) == float or type(y) == int
assert y != 0.0
print(x/y)
except(AssertionError):
print("Hallo")
print1(10., 5.)
print1("10.", "5.")
Ausgabe:
2.0
Hallo
Ich hoffe, es ist wenigstens im Ansatz klar geworden, wofür <code>assert</code> gut sein kann. Ausschalten kann man die <code>assert</code>-Überprüfung übrigens mit dem Python-Schalter <code>-O</code>.
== Doctests ==
Innerhalb eines Docstrings kann die Arbeit im interaktiven Modus simuliert werden. Nach den Promptzeichen (>>>) erfolgen dann bei unserem Beispiel innerhalb des Docstrings simulierte Aufrufe der Funktion <code>print1()</code>. Danach folgen jeweils die Sollresultate. Wird das Modul oder die Datei als Hauptprogramm aufgerufen, so wird die Funktion <code>doctest.testmode()</code> aufgerufen und ein Bericht auf der Konsole ausgegeben. Wird das Modul nicht als Hauptprogramm aufgerufen, sondern importiert, dann wird diese <code>testmod</code>-Funktion nicht aufgerufen. D.h. dieser Code kann sowohl für Testzwecke als auch für den produktiven Einsatz verwendet werden. Das ist auch sinnvoll, weil wenn man Teile der Datei immer löschen bzw. einfügen müsste, so würden sich Fehlerquellen auftun. Das würde den Sinn und Zweck von Doctests konterkarieren.
def print1(x=0., y=1.):
""" Dividiere zwei Zahlen
Autor: Intruder
Datum: 12.08.2025
>>> print1(2., 1.)
2.0
>>> print1(5., 2.)
2.5
>>> print1(5.)
5.0
"""
print(x/y)
if __name__ == "__main__":
import doctest
doctest.testmod(verbose=True)
Ausgabe:
Trying:
print1(2., 1.)
Expecting:
2.0
ok
Trying:
print1(5., 2)
Expecting:
2.5
ok
Trying:
print1(5.)
Expecting:
5.0
ok
1 items had no tests:
__main__
1 items passed all tests:
3 tests in __main__.print1
3 tests in 2 items.
3 passed and 0 failed.
Test passed.
Das gezeigte Beispiel ist so ziemlich das einfachste, das es gibt. Für weiterführende Details siehe z.B.:
* [https://peps.python.org/pep-0257/ PEP 257 – Docstring Conventions]
* [https://docs.python.org/3/library/doctest.html doctest — Test interactive Python examples]
== pytest ==
Siehe zu diesem Thema auch {{W|Modultest}}.
pytest ist ein externes Modul und muss vorab installiert werden, z.B. mittels
pip install -U pytest
pip install -U pytest-html
Python-Code, Datei test1.py:
def add(x, y):
return x + y
def test_answer():
assert add(1, 1) == 3
Starten von pytest in der Konsole:
pytest test1.py
Ausgabe:
==================================================== test session starts ====================================================
platform linux -- Python 3.12.11, pytest-8.4.1, pluggy-1.6.0
rootdir: /home/hr/Develop
plugins: anyio-4.10.0, metadata-3.1.1, html-4.1.1
collected 1 item
test1.py F [100%]
========================================================= FAILURES ==========================================================
________________________________________________________ test_answer ________________________________________________________
def test_answer():
> assert add(1, 1) == 3
E assert 2 == 3
E + where 2 = add(1, 1)
test1.py:6: AssertionError
================================================== short test summary info ==================================================
FAILED test1.py::test_answer - assert 2 == 3
===================================================== 1 failed in 0.09s =====================================================
Hier erhalten wir einen Fehler, da 1+1 eindeutig ungleich 3 ist. Aber aus irgendeinem Grund wollte der Programmierer oder Tester in diesem Fall, dass dies so ist. Testfälle werden übrigens mit dem Präfix <code>test_</code> eingeleitet.
Python-Code:
def add(x, y):
return x + y + 1
def test_answer():
assert add(1, 1) == 3
Ausgabe:
==================================================== test session starts ====================================================
platform linux -- Python 3.12.11, pytest-8.4.1, pluggy-1.6.0
rootdir: /home/hr/Develop
plugins: anyio-4.10.0, metadata-3.1.1, html-4.1.1
collected 1 item
test1.py . [100%]
===================================================== 1 passed in 0.01s =====================================================
Jetzt ist alles in Ordnung. Weiterführendes siehe z.B.
* [https://docs.pytest.org/en/stable/ pytest: helps you write better programs]
== unittest ==
Auch unittest dient zur Durchführung von Testreihen, ist aber Bestandteil von Python. Hier wird vorerst nicht näher darauf eingegangen. Siehe z.B.
* [https://docs.python.org/3/library/unittest.html unittest — Unit testing framework]
Lt. ''Inden: Python Challenge; dpunkt, 2021, Seite 481'' soll unittest weniger komfortabel als pytest sein.
Einen Vergleich von unittest mit pytest findet man in
* [https://knapsackpro.com/testing_frameworks/difference_between/pytest/vs/unittest pytest vs unittest]
= Ausblick =
Dies war eine kurze Einführung in die Berechnungs- und Darstellungsmöglichkeiten mit Python. Es sollten etliche relevante Themen behandelt, oder zumindest kurz angesprochen worden sein. Wem dieser Text nicht ausreichend ist, der sei auf die entsprechenden weiterführenden Weblinks, Bücher und die Python-Hilfefunktion verwiesen. Python kennt noch viel mehr Befehle, als hier dargestellt wurden. Das Themenspektrum ist auch durch die Einbindung externer Module fast beliebig erweiterbar.
= Weblinks=
== Python allgemein ==
* [https://www.python.org/ Python Homepage]
== Externe mathematische Module ==
* [https://numpy.org/ NumPy]
* [https://numpy.org/doc/stable/user/numpy-for-matlab-users.html NumPy for MATLAB users]
* [https://scipy.org/ SciPy]
* [https://www.sympy.org/en/index.html SymPy]
* [https://pandas.pydata.org/ pandas]
* [https://github.com/maroba/findiff findiff]
* [https://mpmath.org/ mpmath]
== Externe Module für Grafiken ==
* [https://matplotlib.org/ Matplotlib]
* [https://vpython.org/ VPython]
* [https://docs.vtk.org/en/latest/api/python.html VTK]
== Erstellung von User Interfaces ==
* [https://docs.python.org/3/library/tkinter.html tkinter - Python interface to Tcl/Tk]
* [https://docs.python.org/3/library/curses.html curses - Terminal handling for character-cell displays]
* [https://wiki.qt.io/Qt_for_Python Qt for Python]
* [https://www.gtk.org/docs/language-bindings/python GTK and Python]
== Erstellen virtueller Umgebungen ==
* [https://docs.python.org/3/library/venv.html venv - Creation of virtual environments]
== Sonstige ==
* [https://python-control.readthedocs.io/en/stable/ Python Control Systems Library]
* [https://pypi.org/project/regex/ regex - Regular Expressions]
* [http://pyromat.org/ PYroMat]
* [https://tespy.readthedocs.io/en/main/getting_started/introduction.html TESPy - Thermal Engineering Systems in Python]
= Bücher =
== Gedruckte Bücher, OpenBooks, Magazine ==
* Diverse: c't Python Lernen, Verstehen, Anwenden; Heise, 2022
* Ernesti, Kaiser: Python3 - das umfassende Handbuch; 5. Aufl., Rheinwerk, [https://openbook.rheinwerk-verlag.de/python/ OpenBook]
* Inden: Python Challenge; dpunkt, 2021, ISBN 978-3-86490-809-5
* Klein: Numerisches Python; 2. Aufl., Hanser, 2023, ISBN 978-3-446-47170-2
* Steinkamp: Der Python-Kurs für Ingenieure und Naturwissenschaftler; Rheinwerk, 2021, ISBN 978-3-8362-7316-9
* Weigend: Python 3 - Das umfassende Praxisbuch; 9. Aufl., mitp, 2022, ISBN 978-3-7475-0544-1
* Woyand: Python für Ingenieure und Naturwissenschaftler; 4. Aufl., Hanser, 2021, ISBN 978-3-446-46483-4
== Andere Wikibooks ==
* [[:en:Subject:Python_programming_language | Englische Wikibooks zum Thema Python]]
* [[Python|Deutschsprachiges Python-Wikibook]] [[Bild:2von10.png|20%]]
* [[Python unter Linux|Python 2.7 unter Linux]] [[Bild:10von10.png|100%]]
{{Navigation_zurückhochvor_buch|
zurücktext=Julia für Ingenieure|
zurücklink=Ing Mathematik: Julia|
hochtext=Gesamtinhaltsverzeichnis|
hochlink=Ing:_Mathematik_für_Ingenieure|
vortext=Landau-Notation|
vorlink=Ing Mathematik: Landau}}
42ymlipz5ca7fk1eow9le1gehv1lkhc
Grundlagen des Cannabis-Anbaus
0
118679
1086437
1085836
2026-05-20T22:09:15Z
~2026-29242-00
116199
/* Indoor: Der Cannabis-Anbau im Haus und in der Wohnung */
1086437
wikitext
text/x-wiki
= Die Grundlagen des Cannabis-Anbaus =
Lieber Leser, dieses Wikibuch befindet sich noch in der Entstehungsphase, also hilf bitte jederzeit mit, irgendeine oder alle Stellen dies Texts zu verbessern und zu erweitern.
In diesem Buch betrachten wir klassischen 'photoperiodischen' Cannabis, Autoflowering wird im Anhang behandelt. An entsprechenden Stellen können Verweise eingeblendet werden.
__FORCETOC__
__TOC__
== Vorwort ==
Da die [[w:Rechtliche_Regelungen_zu_Cannabis_nach_Ländern#Cannabisgesetz|Re-Regulierung von Cannabis für Erwachsene in Deutschland]] im April 2024 stattgefunden hat, wollen nun immer mehr Menschen ihre eigenen Cannabis-Blüten anbauen, um so dem Schwarzmarkt auszuweichen.
Natürlich gibt es bereits eine unüberschaubare Anzahl von Anleitungen in fast allen Sprachen im Internet zu finden. Die Anleitungen sind oft auf einem hohen Niveau und setzen eine Menge Grundkenntnisse voraus. Hier sollen diese Grundlagen so erklärt werden, dass man kein Naturwissenschaftler sein muss, um sie zu verstehen und zu beherrschen.
Für die Autoren
A. R. 4/20
== Namensgebung ==
Damit sich die Autoren im Buch klar ausdrücken können, werden hier ein paar Begriffe erklärt:
[[File:Illustration Cannabis sativa0 clean.jpg|thumb|Botanische Cannabis Illustration]]
* (Blueten-)Kelch/Kalyx: Einzelne Blütenknospe, aus der ein Bluetefaden wächst.
* Blütefaden
* Blatt / Stiel
* Stängel
* Sprossachse
* Nährlösung: Mit Dünger angereichertes Giesswasser.
* Medium/Substrat: Ist das, wo die Wurzeln reinwachsen. Generell bevorzugen die Wurzeln der Cannabis-Pflanze ein stark durchlüftetes Medium, deswegen sind Perlite, Cocos oder Torf oft Bestandteil professioneller Substrat-Mischungen.
* ... (unvollständige Liste, bitte erweitern)
== Messgeräte ==
Um die Umweltbedingungen der Pflanzen zu prüfen und zu optimieren bedient sich der Heimgärtner diverser Messgeräte:
=== Thermometer ===
Ein klassisches Temperaturmessgerät, das jedem bekannt sein sollte.
=== Hygrometer ===
Dieses Gerät zeigt die [[w:Luftfeuchtigkeit#Relative_Luftfeuchtigkeit|relative Feuchtigkeit der Raumluft]] an. Relativ zur maximalen Wasserhaltekapazität der Luft bei einer gegebenen Luft-Temperatur.
Zusammen mit der Temperatur lässt sich die [[w:Sättigungsdefizit|Dampfdruckdifferenz]] errechnen.
=== pH-Meter ===
Ein pH-Meter zeigt den [[w:PH-Wert|negativen, dekadischen Logarithmus der H<sup>+</sup>-Ionen Konzentration]] (im Wasser). Ein pH-Wert von 7 wird als neutral bezeichnet (destilliertes Wasser). Unter 7 kommt man in den sauren Bereich, über 7 wird es dagegen basisch bzw. alkalisch.
=== EC-Meter ===
Mit einem EC-Meter lässt sich die [[w:EC-Wert|elektrische Leitfähigkeit der Nährlösung]] bestimmen, die auch die Konzentration des Düngers (also im Wasser gelöste Salze in Form von [[w:Ion|Ionen]]) anzeigt.
=== Luxmeter ===
{| class="wikitable" style="float:right; margin-right:1em;"
|-
| klarer Himmel und Sonne im [[W:Zenit (Richtungsangabe)|Zenit]]
| style="text-align:right"| 130.000 lx
|-
| klarer Himmel, Sonnenhöhe 60° (Mitteleuropa mittags im Sommer (DIN 5034-2))<br /> Beiträge: Sonne = 70.000 lx, Himmelslicht = 20.000 lx
| style="text-align:right"| 90.000 lx
|-
| klarer Himmel, Sonnenhöhe 16° (Mitteleuropa mittags im Winter (DIN 5034-2))<br /> Beiträge: Sonne = 8.000 lx, Himmelslicht = 12.000 lx
| style="text-align:right"| 20.000 lx
|-
| bedeckter Himmel, Sonnenhöhe 60° (mittags im Sommer (DIN 5034-2))
| style="text-align:right"| 19.000 lx
|-
|vegetative Phase
| style="text-align:right"| 15.000 lx
|-
|Im Schatten im Sommer
| style="text-align:right"| 10.000 lx
|-
|bedeckter Himmel, Sonnenhöhe 16° (mittags im Winter (DIN 5034-2))
| style="text-align:right"| 6.000 lx
|-
|Bedeckter Wintertag
| style="text-align:right"| 3.500 lx
|-
|Keimlinge
| style="text-align:right"| ca. 1.500 lx
|-
|Beleuchtung TV-Studio
| style="text-align:right"| 1.000 lx
|-
|}
Das Luxmeter misst die [[w:Beleuchtungsstärke|Beleuchtungsstärke]] an einem gewissen Ort und liefert einen Wert in der Einheit Lux.
Da Pflanzen für die Photosynthese nur Licht in einem engen Wellenlängenbereich verwerten können, haben sich beim modernen Cannabis-Anbau inzwischen andere Einheiten zum Beschreiben der [[w:Photosynthetisch aktive Strahlung|photosynthetisch aktiven Strahlung]] ('''PAR''') oder der [[w:PPFD|photosyntethisch aktiven Photonenflussdichte]] ('''PPFD''') durchgesetzt.
== Lebenszyklus einer Cannabis-Pflanze ==
Hier werden die Grundlegenden Entwicklungsstadien der Hanf-Pflanze besprochen.
Für unsere Zwecke beginnt der Lebenszyklus mit der Keimung eines Cannabis-Samens.
Anschließend folgt die Wachstumsphase (Wuchs), bei der die Pflanze an Höhe und Gewicht zulegt.
Zum Ende ihres Lebens durchläuft die Cannabispflanze ihre Vermehrungsphase, bei der zuerst Blüten und bei einer etwaigen Bestäubung auch Samen gebildet werden.
=== Keimling ===
[[File:C sativa seedling.jpg|thumb|C sativa Keimling]]
Wenn ein Cannabis-Keimling das Licht der Welt erblickt, hat er spezielle Anforderungen an seine Umwelt, um sich ideal entwickeln zu können: Die Wurzeln sind noch zart und verbrennen leicht bei hohen EC-Werten (bei hoher Dünger-Konzentration). Deswegen brauchen Cannabis-Keimlinge ein nur leicht gedüngtes Medium mit einem pH wert von ca. 6.5 und einem EC-Wert von maximal 1.5.
Die notwendige Beleuchtung für Keimlinge ist viel geringer als für eine voll ausgewachsene Pflanze.
{| class="wikitable"
|+ Umweltbedingungen für Keimlinge
|-
! Einheit !! Empfohlener Wertebereich
|-
| Temperatur || 18-22°Celsius
|-
| Lux || 1500
|-
| EC || 0-1,5 EC
|-
| pH || 6,5
|-
| RH || 90-100%
|-
| Beleuchtungsdauer pro Tag || 18-24 Stunden
|}
=== Vegetativ ===
In der Wachstumsphase wachsen Wurzeln, Äste und Blätter. Die Pflanze vervielfacht ihre Masse in sehr kurzer Zeit. Dafür braucht sie mehr Licht und mehr Nährstoffe als im Keimlingsstadium.
{| class="wikitable"
|+ Umweltbedingungen im Wachstum
|-
! Einheit !! Empfohlener Wertebereich
|-
| Temperatur || 18-23°Celsius
|-
| Lux || 15000
|-
| EC || 2-3 EC
|-
| pH || 6,5
|-
| RH || 55-70%
|-
| Beleuchtungsdauer pro Tag || 18-24 Stunden
|}
=== Generativ ===
[[File:Cannabis male flowers.JPG|thumb|Männliche Cannabis Blüten enthalten keine Wirkstoffe]]
Die Blütephase wird eingeleitet, indem die Beleuchtungsdauer (mittels Zeitschaltuhr) auf 12 Stunden pro Tag geändert wird. Einige Profis beginnen die Blütephase mit 12 Stunden Licht und kürzen die tägliche Beleuchtungsdauer schrittweise um bis zu 60 Minuten.
Als Anfänger braucht man sich darüber keine Gedanken machen, und kann die Zeitschaltuhr für die Beleuchtung die gesamte Blütephase von 6 bis 18 Uhr auf AN schalten, und von 18 bis 6 Uhr auf AUS.
Da die Tagestemperaturen für manche Lampen zu Warm sind, entscheiden sich manche Heimgärtner dazu, die Zeiten umzudrehen, und nachts zu beleuchten, während die Pflanzen Tagsüber ihre Dunkelphase haben.
Jederzeit sollte darauf geachtet werden, dass die Pflanzen in der Blütephase eine absolut dunkle Dunkelphase genießen können. Kein Tageslicht oder (Kontroll-)LED Licht sollte die Dunkelheit in der Blüte stören.
Monochromatisch grünes Licht wird von Profis verwendet, die in der Dunkelphase bei den Pflanzen arbeiten, da das grüne Licht keine Photosynthese anregt.
Diese Angaben beziehen sich auf klassisches, photoperiodisches Cannabis, Autoflowering wird im Anhang erklärt.
{| class="wikitable"
|+ Umweltbedingungen in der Blüte
|-
! Einheit !! Empfohlener Wertebereich
|-
| Temperatur || 18-24°Celsius
|-
| Lux || 45000
|-
| EC || 2,5-3,5 EC
|-
| pH || 6,5
|-
| RH || 40-55%
|-
| Beleuchtungsdauer pro Tag || '''12 Stunden'''
|}
== Die Ernte ==
Der krönende Abschluss der Anbau-Bestrebungen. Bei der Ernte werden die reifen Blütenstände der Pflanzen von den Wurzeln abgeschnitten, um sie anschließend kopfüber an einem kühlen, trockenen und luftigen Ort aufzuhängen.
So bleiben die Blüten hängen, bis sie so trocken sind, dass die Äste beim biegen knackend zerbrechen. Dies dauert in der Regel etwa 14 Tage. Anschließend werden die großen Laub-Blätter entfernt (falls dies noch nicht geschehen ist) sowie alle Blattteile, die nicht mit Trichomen bzw. Harz besetzt sind. Die so getrimmten, trockenen Knospen werden dann in Gläsern bei 62-64% Luftfeuchtigkeit ausgereift.
== Indoor: Der Cannabis-Anbau im Haus und in der Wohnung ==
Wikipedia-Artikel: [[w:Indoor-Growing|Indoor-Growing]]
Hier die Checkliste mit allen benötigten Punkten:
=== Raum / Zelt ===
Die Räumlichkeit, in der angebaut werden soll. Zelte haben sich durchgesetzt.
=== Beleuchtung ===
Im Handel sind spezielle Wachstumslampen erhältlich, die modernen benutzen LEDs aufgrund der Effizienz.
Heutzutage werden fast ausschließlich LED Wachstumslampen angeboten. Dabei werden zwischen 200 und 500 Watt Lampenleistung pro Quadratmeter und/oder regelbare Armaturen bevorzugt.
=== Belüftung ===
Sehr wichtig für erfolgreiches Gärtnern. Ventilator plus Abluft mit Aktivkohlefilter
=== Pflanzencontainer ===
=== Erde ===
[[File:Grow box-nearly complete PNr°0075.jpg|thumb|Grow-Zelt mit Zubehör]]
Hier konzentrieren wir uns auf Erde als Medium. Hydroponik wird im Anhang besprochen.
Erde als Anfaenger0Substrat bietet viele Vorteile, da man sehr wenig falsch machen kann. Lebendige Erde besteht aus einer Unzahl von mikroskopischen Lebewesen, die organische Materie abbauen und fuer Pflanzenwurzeln verfuegbar machen. Das Medium kann also als Bioreaktor betrachtet werden, bei dem aus Erde, Luft und Feuchtigkeit mittels Lebewesen Nahrung für die Pflanzen erschlossen wird (Vgl. ''Soil food web''). [[File:Soil food webUSDA.jpg|thumb|Soil food webUSDA]]
=== Dünger ===
=== Genetik ===
=== Schädlingsmanagement ===
Im Gegensatz zum Anbau im Freien ist der Anbau im Haus mit Klimabedingungen verbunden, die Schädlinge lieben: Warm, trocken und die Abwesenheit natürlicher Fressfeinde sind der Grund für proaktiven Umgang mit PEsts )APM_
=== Organisch ===
[[File:Cannabis growing.jpg|thumb|Cannabis unter NatriumDampfLicht]]
== Outdoor: Cannabis-Anbau unter freiem Himmel ==
[[File:Mullaways Medical Cannabis Research Crop.JPG|thumb|Blühende Cannabis-Pflanzen unter freiem Himmel]]
Wikipedia-Artikel: [[w:Outdoor-Growing|Outdoor-Growing]]
=== Düngung ===
=== Bewässerung ===
== Gewächshaus: Besonderheiten beim Anbau im Gewächshaus ==
== Anhang ==
=== Automatisch blühendes Cannabis ===
In weiten Teilen Russlands existiert ein einheimischer Cannabis Phenotyp namens Cannabis ruderalis. Die Pflanzen dieses Phenotyps verfügen über eine Genetik, die sie nur 4 Wochen nach der Keimung, sozusagen automatisch, in die Blütephase schickt. Dieser Cannabistyp ist unsensibel für die tägliche Photoperiode und blüht bei jedem Beleuchtungszyklus.
Seit Anfang des Jahrtausends wurde diese Genetik in etablierte, klassisch photoperiodisch blühende Sorten eingekreuzt.
Davon profitieren all jene, die nicht nahe des Equators leben. wie wir Nordeuropäer: Denn mit der eingekreuzten "autoflowering" Genetik ist es nun möglich, draußen hochwertige, reife Cannabis Blüten zu ernten.
Generell produzieren "Autos" geringere Erntemengen pro Pflanze als "Photos", können dafür aber in den wärmsten 3 bis 4 Monaten des Jahres im Freien zur Reife gebracht werden und werden in der Regel geerntet, bevor "Photos" angefangen haben, zu blühen.
=== Vermehrung durch Stecklinge ===
Von klassischem, photoperiodischem Cannabis lassen sich leicht Mutter-/Vater-Pflanzen halten, die mit einer Beleuchtungsdauer von mindestens 16 Stunden pro Tag immer in der Wachstumsphase bleiben (da der Impuls zur Blüte ausbleibt). Von diesen Pflanzen lassen sich Äste oder Triebspitzen abnehmen und in Erde oder Wasser bewurzeln. Oftmals funktioniert dieses vegetative Vermehrung bei Cannabis so gut, dass kein [[w:Bewurzelungshormon|Bewurzelungshormon]] benutzt werden muss.
=== Hydroponik ===
pH, ec, Düngung
==== Steinwolle ====
==== Cocos ====
==== DWC ====
=== Krankheiten und Schädlinge ===
==== Pilze ====
* Mehltau
* Budrot
* ...
==== Insekten ====
* Spinnmilben
* Läuse
* was Dir noch so einfällt
=== Nützlinge ===
Marienkaeferlarven
p3rs1ppssyt3x1ttvgzixqy6dvecp77
1086438
1086437
2026-05-20T22:12:41Z
~2026-29242-00
116199
rearrange
1086438
wikitext
text/x-wiki
= Die Grundlagen des Cannabis-Anbaus =
Lieber Leser, dieses Wikibuch befindet sich noch in der Entstehungsphase, also hilf bitte jederzeit mit, irgendeine oder alle Stellen dies Texts zu verbessern und zu erweitern.
In diesem Buch betrachten wir klassischen 'photoperiodischen' Cannabis, Autoflowering wird im Anhang behandelt. An entsprechenden Stellen können Verweise eingeblendet werden.
__FORCETOC__
__TOC__
== Vorwort ==
Da die [[w:Rechtliche_Regelungen_zu_Cannabis_nach_Ländern#Cannabisgesetz|Re-Regulierung von Cannabis für Erwachsene in Deutschland]] im April 2024 stattgefunden hat, wollen nun immer mehr Menschen ihre eigenen Cannabis-Blüten anbauen, um so dem Schwarzmarkt auszuweichen.
Natürlich gibt es bereits eine unüberschaubare Anzahl von Anleitungen in fast allen Sprachen im Internet zu finden. Die Anleitungen sind oft auf einem hohen Niveau und setzen eine Menge Grundkenntnisse voraus. Hier sollen diese Grundlagen so erklärt werden, dass man kein Naturwissenschaftler sein muss, um sie zu verstehen und zu beherrschen.
Für die Autoren
A. R. 4/20
== Namensgebung ==
Damit sich die Autoren im Buch klar ausdrücken können, werden hier ein paar Begriffe erklärt:
[[File:Illustration Cannabis sativa0 clean.jpg|thumb|Botanische Cannabis Illustration]]
* (Blueten-)Kelch/Kalyx: Einzelne Blütenknospe, aus der ein Bluetefaden wächst.
* Blütefaden
* Blatt / Stiel
* Stängel
* Sprossachse
* Nährlösung: Mit Dünger angereichertes Giesswasser.
* Medium/Substrat: Ist das, wo die Wurzeln reinwachsen. Generell bevorzugen die Wurzeln der Cannabis-Pflanze ein stark durchlüftetes Medium, deswegen sind Perlite, Cocos oder Torf oft Bestandteil professioneller Substrat-Mischungen.
* ... (unvollständige Liste, bitte erweitern)
== Lebenszyklus einer Cannabis-Pflanze ==
Hier werden die Grundlegenden Entwicklungsstadien der Hanf-Pflanze besprochen.
Für unsere Zwecke beginnt der Lebenszyklus mit der Keimung eines Cannabis-Samens.
Anschließend folgt die Wachstumsphase (Wuchs), bei der die Pflanze an Höhe und Gewicht zulegt.
Zum Ende ihres Lebens durchläuft die Cannabispflanze ihre Vermehrungsphase, bei der zuerst Blüten und bei einer etwaigen Bestäubung auch Samen gebildet werden.
=== Keimling ===
[[File:C sativa seedling.jpg|thumb|C sativa Keimling]]
Wenn ein Cannabis-Keimling das Licht der Welt erblickt, hat er spezielle Anforderungen an seine Umwelt, um sich ideal entwickeln zu können: Die Wurzeln sind noch zart und verbrennen leicht bei hohen EC-Werten (bei hoher Dünger-Konzentration). Deswegen brauchen Cannabis-Keimlinge ein nur leicht gedüngtes Medium mit einem pH wert von ca. 6.5 und einem EC-Wert von maximal 1.5.
Die notwendige Beleuchtung für Keimlinge ist viel geringer als für eine voll ausgewachsene Pflanze.
{| class="wikitable"
|+ Umweltbedingungen für Keimlinge
|-
! Einheit !! Empfohlener Wertebereich
|-
| Temperatur || 18-22°Celsius
|-
| Lux || 1500
|-
| EC || 0-1,5 EC
|-
| pH || 6,5
|-
| RH || 90-100%
|-
| Beleuchtungsdauer pro Tag || 18-24 Stunden
|}
=== Vegetativ ===
In der Wachstumsphase wachsen Wurzeln, Äste und Blätter. Die Pflanze vervielfacht ihre Masse in sehr kurzer Zeit. Dafür braucht sie mehr Licht und mehr Nährstoffe als im Keimlingsstadium.
{| class="wikitable"
|+ Umweltbedingungen im Wachstum
|-
! Einheit !! Empfohlener Wertebereich
|-
| Temperatur || 18-23°Celsius
|-
| Lux || 15000
|-
| EC || 2-3 EC
|-
| pH || 6,5
|-
| RH || 55-70%
|-
| Beleuchtungsdauer pro Tag || 18-24 Stunden
|}
=== Generativ ===
[[File:Cannabis male flowers.JPG|thumb|Männliche Cannabis Blüten enthalten keine Wirkstoffe]]
Die Blütephase wird eingeleitet, indem die Beleuchtungsdauer (mittels Zeitschaltuhr) auf 12 Stunden pro Tag geändert wird. Einige Profis beginnen die Blütephase mit 12 Stunden Licht und kürzen die tägliche Beleuchtungsdauer schrittweise um bis zu 60 Minuten.
Als Anfänger braucht man sich darüber keine Gedanken machen, und kann die Zeitschaltuhr für die Beleuchtung die gesamte Blütephase von 6 bis 18 Uhr auf AN schalten, und von 18 bis 6 Uhr auf AUS.
Da die Tagestemperaturen für manche Lampen zu Warm sind, entscheiden sich manche Heimgärtner dazu, die Zeiten umzudrehen, und nachts zu beleuchten, während die Pflanzen Tagsüber ihre Dunkelphase haben.
Jederzeit sollte darauf geachtet werden, dass die Pflanzen in der Blütephase eine absolut dunkle Dunkelphase genießen können. Kein Tageslicht oder (Kontroll-)LED Licht sollte die Dunkelheit in der Blüte stören.
Monochromatisch grünes Licht wird von Profis verwendet, die in der Dunkelphase bei den Pflanzen arbeiten, da das grüne Licht keine Photosynthese anregt.
Diese Angaben beziehen sich auf klassisches, photoperiodisches Cannabis, Autoflowering wird im Anhang erklärt.
{| class="wikitable"
|+ Umweltbedingungen in der Blüte
|-
! Einheit !! Empfohlener Wertebereich
|-
| Temperatur || 18-24°Celsius
|-
| Lux || 45000
|-
| EC || 2,5-3,5 EC
|-
| pH || 6,5
|-
| RH || 40-55%
|-
| Beleuchtungsdauer pro Tag || '''12 Stunden'''
|}
== Die Ernte ==
Der krönende Abschluss der Anbau-Bestrebungen. Bei der Ernte werden die reifen Blütenstände der Pflanzen von den Wurzeln abgeschnitten, um sie anschließend kopfüber an einem kühlen, trockenen und luftigen Ort aufzuhängen.
So bleiben die Blüten hängen, bis sie so trocken sind, dass die Äste beim biegen knackend zerbrechen. Dies dauert in der Regel etwa 14 Tage. Anschließend werden die großen Laub-Blätter entfernt (falls dies noch nicht geschehen ist) sowie alle Blattteile, die nicht mit Trichomen bzw. Harz besetzt sind. Die so getrimmten, trockenen Knospen werden dann in Gläsern bei 62-64% Luftfeuchtigkeit ausgereift.
== Indoor: Der Cannabis-Anbau im Haus und in der Wohnung ==
Wikipedia-Artikel: [[w:Indoor-Growing|Indoor-Growing]]
Hier die Checkliste mit allen benötigten Punkten:
=== Raum / Zelt ===
Die Räumlichkeit, in der angebaut werden soll. Zelte haben sich durchgesetzt.
=== Beleuchtung ===
Im Handel sind spezielle Wachstumslampen erhältlich, die modernen benutzen LEDs aufgrund der Effizienz.
Heutzutage werden fast ausschließlich LED Wachstumslampen angeboten. Dabei werden zwischen 200 und 500 Watt Lampenleistung pro Quadratmeter und/oder regelbare Armaturen bevorzugt.
=== Belüftung ===
Sehr wichtig für erfolgreiches Gärtnern. Ventilator plus Abluft mit Aktivkohlefilter
=== Pflanzencontainer ===
=== Erde ===
[[File:Grow box-nearly complete PNr°0075.jpg|thumb|Grow-Zelt mit Zubehör]]
Hier konzentrieren wir uns auf Erde als Medium. Hydroponik wird im Anhang besprochen.
Erde als Anfaenger0Substrat bietet viele Vorteile, da man sehr wenig falsch machen kann. Lebendige Erde besteht aus einer Unzahl von mikroskopischen Lebewesen, die organische Materie abbauen und fuer Pflanzenwurzeln verfuegbar machen. Das Medium kann also als Bioreaktor betrachtet werden, bei dem aus Erde, Luft und Feuchtigkeit mittels Lebewesen Nahrung für die Pflanzen erschlossen wird (Vgl. ''Soil food web''). [[File:Soil food webUSDA.jpg|thumb|Soil food webUSDA]]
=== Dünger ===
=== Genetik ===
=== Schädlingsmanagement ===
Im Gegensatz zum Anbau im Freien ist der Anbau im Haus mit Klimabedingungen verbunden, die Schädlinge lieben: Warm, trocken und die Abwesenheit natürlicher Fressfeinde sind der Grund für proaktiven Umgang mit PEsts )APM_
=== Organisch ===
[[File:Cannabis growing.jpg|thumb|Cannabis unter NatriumDampfLicht]]
== Messgeräte ==
Um die Umweltbedingungen der Pflanzen zu prüfen und zu optimieren bedient sich der Heimgärtner diverser Messgeräte:
=== Thermometer ===
Ein klassisches Temperaturmessgerät, das jedem bekannt sein sollte.
=== Hygrometer ===
Dieses Gerät zeigt die [[w:Luftfeuchtigkeit#Relative_Luftfeuchtigkeit|relative Feuchtigkeit der Raumluft]] an. Relativ zur maximalen Wasserhaltekapazität der Luft bei einer gegebenen Luft-Temperatur.
Zusammen mit der Temperatur lässt sich die [[w:Sättigungsdefizit|Dampfdruckdifferenz]] errechnen.
=== pH-Meter ===
Ein pH-Meter zeigt den [[w:PH-Wert|negativen, dekadischen Logarithmus der H<sup>+</sup>-Ionen Konzentration]] (im Wasser). Ein pH-Wert von 7 wird als neutral bezeichnet (destilliertes Wasser). Unter 7 kommt man in den sauren Bereich, über 7 wird es dagegen basisch bzw. alkalisch.
=== EC-Meter ===
Mit einem EC-Meter lässt sich die [[w:EC-Wert|elektrische Leitfähigkeit der Nährlösung]] bestimmen, die auch die Konzentration des Düngers (also im Wasser gelöste Salze in Form von [[w:Ion|Ionen]]) anzeigt.
=== Luxmeter ===
{| class="wikitable" style="float:right; margin-right:1em;"
|-
| klarer Himmel und Sonne im [[W:Zenit (Richtungsangabe)|Zenit]]
| style="text-align:right"| 130.000 lx
|-
| klarer Himmel, Sonnenhöhe 60° (Mitteleuropa mittags im Sommer (DIN 5034-2))<br /> Beiträge: Sonne = 70.000 lx, Himmelslicht = 20.000 lx
| style="text-align:right"| 90.000 lx
|-
| klarer Himmel, Sonnenhöhe 16° (Mitteleuropa mittags im Winter (DIN 5034-2))<br /> Beiträge: Sonne = 8.000 lx, Himmelslicht = 12.000 lx
| style="text-align:right"| 20.000 lx
|-
| bedeckter Himmel, Sonnenhöhe 60° (mittags im Sommer (DIN 5034-2))
| style="text-align:right"| 19.000 lx
|-
|vegetative Phase
| style="text-align:right"| 15.000 lx
|-
|Im Schatten im Sommer
| style="text-align:right"| 10.000 lx
|-
|bedeckter Himmel, Sonnenhöhe 16° (mittags im Winter (DIN 5034-2))
| style="text-align:right"| 6.000 lx
|-
|Bedeckter Wintertag
| style="text-align:right"| 3.500 lx
|-
|Keimlinge
| style="text-align:right"| ca. 1.500 lx
|-
|Beleuchtung TV-Studio
| style="text-align:right"| 1.000 lx
|-
|}
Das Luxmeter misst die [[w:Beleuchtungsstärke|Beleuchtungsstärke]] an einem gewissen Ort und liefert einen Wert in der Einheit Lux.
Da Pflanzen für die Photosynthese nur Licht in einem engen Wellenlängenbereich verwerten können, haben sich beim modernen Cannabis-Anbau inzwischen andere Einheiten zum Beschreiben der [[w:Photosynthetisch aktive Strahlung|photosynthetisch aktiven Strahlung]] ('''PAR''') oder der [[w:PPFD|photosyntethisch aktiven Photonenflussdichte]] ('''PPFD''') durchgesetzt.
== Outdoor: Cannabis-Anbau unter freiem Himmel ==
[[File:Mullaways Medical Cannabis Research Crop.JPG|thumb|Blühende Cannabis-Pflanzen unter freiem Himmel]]
Wikipedia-Artikel: [[w:Outdoor-Growing|Outdoor-Growing]]
=== Düngung ===
=== Bewässerung ===
== Gewächshaus: Besonderheiten beim Anbau im Gewächshaus ==
== Anhang ==
=== Automatisch blühendes Cannabis ===
In weiten Teilen Russlands existiert ein einheimischer Cannabis Phenotyp namens Cannabis ruderalis. Die Pflanzen dieses Phenotyps verfügen über eine Genetik, die sie nur 4 Wochen nach der Keimung, sozusagen automatisch, in die Blütephase schickt. Dieser Cannabistyp ist unsensibel für die tägliche Photoperiode und blüht bei jedem Beleuchtungszyklus.
Seit Anfang des Jahrtausends wurde diese Genetik in etablierte, klassisch photoperiodisch blühende Sorten eingekreuzt.
Davon profitieren all jene, die nicht nahe des Equators leben. wie wir Nordeuropäer: Denn mit der eingekreuzten "autoflowering" Genetik ist es nun möglich, draußen hochwertige, reife Cannabis Blüten zu ernten.
Generell produzieren "Autos" geringere Erntemengen pro Pflanze als "Photos", können dafür aber in den wärmsten 3 bis 4 Monaten des Jahres im Freien zur Reife gebracht werden und werden in der Regel geerntet, bevor "Photos" angefangen haben, zu blühen.
=== Vermehrung durch Stecklinge ===
Von klassischem, photoperiodischem Cannabis lassen sich leicht Mutter-/Vater-Pflanzen halten, die mit einer Beleuchtungsdauer von mindestens 16 Stunden pro Tag immer in der Wachstumsphase bleiben (da der Impuls zur Blüte ausbleibt). Von diesen Pflanzen lassen sich Äste oder Triebspitzen abnehmen und in Erde oder Wasser bewurzeln. Oftmals funktioniert dieses vegetative Vermehrung bei Cannabis so gut, dass kein [[w:Bewurzelungshormon|Bewurzelungshormon]] benutzt werden muss.
=== Hydroponik ===
pH, ec, Düngung
==== Steinwolle ====
==== Cocos ====
==== DWC ====
=== Krankheiten und Schädlinge ===
==== Pilze ====
* Mehltau
* Budrot
* ...
==== Insekten ====
* Spinnmilben
* Läuse
* was Dir noch so einfällt
=== Nützlinge ===
Marienkaeferlarven
6day83eigxs7qjb44gric5ijts6u3hd
Ungarisch/Ungarisch-Grammatik/Kurze ungarische Wörter
0
121905
1086434
1086387
2026-05-20T21:07:01Z
~2026-24950-86
116058
/* drei „Buchstaben“ - aber mit Doppelbuchstaben (Digraphen) */
1086434
wikitext
text/x-wiki
{{Navigation hoch|
hochtext=Inhaltsverzeichnis: Grammatik|
hochlink=Ungarisch#Grammatik}}
== Lange vs kurze ungarische Wörter (Beispiele) ==
;Lange ungarische Wörter:
:Aufgabe: Lies das laut und langsam vor!
:1. A közlekedési kereszteződésnél mindig óvatosan kell megállni.
:2. A megbízhatatlanság sok problémát okoz a munkahelyen.
:3. A felkészülés a vizsgára hetekig tartott.
:4. A házfelújítás befejezése után mindenki megkönnyebbült.
:5. A szemetetgyűjtő autó minden hétfő reggel megérkezik.
:6. Az útkereszteződésben hosszú sor alakult ki.
:7. A természetvédelem fontosságát nem lehet eléggé hangsúlyozni.
:8. A vízszennyezés elleni küzdelem közös feladatunk.
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff"> ungarisch - deutsch </font> '''
|-
|
:1. A közlekedési kereszteződésnél mindig óvatosan kell megállni. - An der Straßenkreuzung muss man immer vorsichtig anhalten.
:2. A megbízhatatlanság sok problémát okoz a munkahelyen. - Unzuverlässigkeit verursacht viele Probleme am Arbeitsplatz.
:3. A felkészülés a vizsgára hetekig tartott. - Die Vorbereitung auf die Prüfung dauerte wochenlang.
:4. A házfelújítás befejezése után mindenki megkönnyebbült. - Nach dem Abschluss der Haussanierung waren alle erleichtert.
:5. A szemetetgyűjtő autó minden hétfő reggel megérkezik. - Das Müllsammelfahrzeug kommt jeden Montagmorgen an.
:6. Az útkereszteződésben hosszú sor alakult ki. - An der Straßenkreuzung bildete sich eine lange Schlange.
:7. A természetvédelem fontosságát nem lehet eléggé hangsúlyozni. - Die Bedeutung des Naturschutzes kann man nicht genug betonen.
:8. A vízszennyezés elleni küzdelem közös feladatunk. - Der Kampf gegen die Wasserverschmutzung ist unsere gemeinsame Aufgabe.
|}
:(Wer dabei an die Ansagerin in Loriots Sketch "Englische Ansage" denken muss, die versucht, die "th"-Namen möglichst genau auszusprechen, der kennt auch ihr verzweifeltes Stöhnen am Ende, als sie immer mehr ins Stottern kommt bis sie schließlich abbricht.)
:1. A tanár hozzáállása megváltozott az új szabályok után.
:2. A munkához való hozzáállás sok mindent elárul az emberről.
:3. A kereszteződésnél türelmes hozzáállásra van szükség.
:4. A szomszéd hozzáállása a közös udvarhoz javult.
:5. A gyerekek hozzáállása a tanuláshoz most komolyabb lett.
:6. A kereszteződésben figyelmetlen hozzáállás balesetet okozhat.
:7. A vezető hozzáállása meghatározza a csapat hangulatát.
:8. A hozzáállásunk a nehéz helyzetekhez mutatja meg az igazi jellemünket.
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff"> ungarisch - deutsch </font> '''
|-
|
:1. A tanár hozzáállása megváltozott az új szabályok után. - Die Einstellung des Lehrers hat sich nach den neuen Regeln verändert.
:2. A munkához való hozzáállás sok mindent elárul az emberről. - Die Einstellung zur Arbeit verrät viel über den Menschen.
:3. A kereszteződésnél türelmes hozzáállásra van szükség. - An der Kreuzung braucht man eine geduldige Haltung.
:4. A szomszéd hozzáállása a közös udvarhoz javult. - Die Haltung des Nachbarn zum gemeinsamen Hof hat sich verbessert.
:5. A gyerekek hozzáállása a tanuláshoz most komolyabb lett. - Die Einstellung der Kinder zum Lernen ist jetzt ernster geworden.
:6. A kereszteződésben figyelmetlen hozzáállás balesetet okozhat. - Eine unaufmerksame Haltung an der Kreuzung kann einen Unfall verursachen.
:7. A vezető hozzáállása meghatározza a csapat hangulatát. - Die Haltung des Leiters bestimmt die Stimmung des Teams.
:8. A hozzáállásunk a nehéz helyzetekhez mutatja meg az igazi jellemünket. - Unsere Einstellung zu schwierigen Situationen zeigt unseren wahren Charakter.
|}
;Kurze ungarische Wörter:
:Én is megy.
:Ő ki jön.
:Te lát őt.
:Ő ül le.
:Ő is él.
:Mi is jók.
:Te ne sírj!
:Ki sír még?
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff"> ungarisch - deutsch </font> '''
|-
|
:Én is megy. – Ich gehe auch.
:Ő ki jön. – Er kommt heraus.
:Te lát őt. – Du siehst ihn.
:Ő ül le. – Er setzt sich.
:Ő is él. – Er lebt auch.
:Mi is jók. – Wir sind auch gut.
:Te ne sírj! – Weine nicht!
:Ki sír még? – Wer weint noch?
|}
:Én adok sót.
:Te szép lány vagy.
:Jó úr ül ott.
:Lát egy őz.
:Ma ég a ház.
:Egy kis ló fut át.
:Ő ír egy dalt.
:Éj jön, hű a lég.
:Bocs, én kés.
:Ki kér még bort?
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff"> ungarisch - deutsch </font> '''
|-
|
:Én adok sót. – Ich gebe Salz.
:Te szép lány vagy. – Du bist ein schönes Mädchen.
:Jó úr ül ott. – Ein guter Herr sitzt dort.
:Lát egy őz. – Er sieht ein Reh.
:Ma ég a ház. – Heute brennt das Haus.
:Egy kis ló fut át. – Ein kleines Pferd läuft hinüber.
:Ő ír egy dalt. – Er schreibt ein Lied.
:Éj jön, hű a lég. – Die Nacht kommt, die Luft ist kühl.
:Bocs, én kés. – Sorry, ich bin spät.
:Ki kér még bort? – Wer will noch Wein?
|}
:Én jó levest főzök.
:Ma este hívsz.
:Ő ül a tónál.
:Kis Bál fut át.
:A lány sír, de szép lány.
:Jó ég, ég a fű!
:Apa ír egy szót.
:Őr áll a hídnál.
:Mi vesz mézet.
:Ti isztok sört.
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff"> ungarisch - deutsch </font> '''
|-
|
:Én jó levest főzök. = Ich koche eine gute Suppe
:Ma este hívsz. = Du rufst heute Abend an.
:Ő ül a tónál. – Er sitzt am See.
:Kis Bál fut át. – Der kleine Bál läuft hinüber.
:A lány sír, de szép lány. = Das Mädchen weint, aber sie ist ein schönes Mädchen.
:Jó ég, ég a fű! – Mein Gott, das Gras brennt!
:Apa ír egy szót. – Vater schreibt ein Wort.
:Őr áll a hídnál. – Ein Wächter steht an der Brücke.
:Mi vesz mézet. – Wir kaufen Honig.
:Ti isztok sört. – Ihr trinkt Bier.
|}
:Bocs, én nem lát.
:Te jó, de fél.
:Ő sír, én nem.
:Kis lány ad sót.
:Én vágy rá.
:Jó ég, mi ez?
:Te hív, én megy.
:Ő búj, én vár.
:Látom, ő él még.
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff"> ungarisch - deutsch </font> '''
|-
|
:Bocs, én nem lát. – Entschuldige, ich sehe nichts.
:Te jó, de fél. – Du bist gut, aber ängstlich.
:Ő sír, én nem. – Er weint, ich nicht.
:Kis lány ad sót. – Ein kleines Mädchen gibt Salz.
:Én vágy rá. – Ich sehne mich nach ihm/ihr.
:Jó ég, mi ez? – Mein Gott, was ist das?
:Te hív, én megy. – Du rufst, ich gehe.
:Ő búj, én vár. – Er versteckt sich, ich warte.
:Látom, ő él még. – Ich sehe, er ebt noch.
|}
== Lange Wörter ==
:Donaudampfschifffahrtsgesellschaft - 34 Buchstaben
:Donaudampfschifffahrtsgesellschaftskapitän - 42 Buchstaben
:Das längste deutsche Wort hat 64 Buchstaben:
:Konstantinopolitanischedudelsackpfeifenröhrlifabrikantentochter
:Konstantinopolitanische-dudelsackpfeifen-röhrli-fabrikanten-tochter
:Das längste ungarische Wort hat 44 Buchstaben:
:Megszentségteleníthetetlenségeskedéseitekért
:Es bedeutet ungefähr „für dein [Plural] fortgesetztes Verhalten, als ob du nicht entweiht werden könntest“.
:1.)
:Meg'''szent'''ségteleníthetetlenségeskedéseitekért
:szent - heilig
:2.)
:Meg<font color="ff00ff">szentség</font>teleníthetetlenségeskedéseitekért
:<font color="ff00ff">szentség</font> - Heiligkeit
:3.)
:Meg<font color="ff00ff">szentség</font><font color="229922">telen</font>íthetetlenségeskedéseitekért
:<font color="ff00ff">szentség</font><font color="229922">telen</font> - <font color="229922">un</font>heilig
:4.)
:Meg<font color="ff00ff">szentség</font><font color="229922">telen</font><font color="2137bb">ít</font>etetlenségeskedéseitekért
:<font color="ff00ff">szentség</font><font color="229922">telen</font><font color="2137bb">ít</font> - entheiligen
:5.)
:Meg<font color="ff00ff">szentség</font><font color="229922">telen</font><font color="2137bb">ít</font>'''het'''etlenségeskedéseitekért
:<font color="ff00ff">szentség</font><font color="229922">telen</font><font color="2137bb">ít</font>'''het''' - entheiligen können
:6.)
:Meg'''szentségteleníthetetlen'''ségeskedéseitekért
:szentségteleníthetetlen - nicht entheiligbar (nicht entheiligen können)
:7.)
:Megszentségteleníthetetlenségeskedéseitekért
:szentségteleníthetetlenség - die Unentheiligbarkeit
:8.)
:Megszentségteleníthetetlenségeskedéseitekért
:szentségteleníthetetlenséges - unentheiligkeitsartig
:9.)
:Megszentségteleníthetetlenségeskedéseitekért
:szentségteleníthetetlenségeskedik - sich unentheiligkeitsmäßig verhalten (so tun, als wäre man unentheiligbar)
:10.)
:Megszentségteleníthetetlenségeskedéseitekért
:szentségteleníthetetlenségeskedéseitek - eure Unentheiligkeits-Anstellereien
:11.)
:Megszentségteleníthetetlenségeskedéseitek<font color="993300">ért</font>
:„-<font color="993300">ért</font>“ - „wegen/für“
:12.)
:<font color="993300">Meg</font>szentségteleníthetetlenségeskedéseitekért
:„<font color="993300">meg</font>-“ - aspektual, perfektiv: „vollständig machen, völlig ...“
:13.)
:Megszentségteleníthetetlenségeskedéseitekért - „wegen eures Sich-so-verhaltens, als wärt ihr völlig unentheiligbar“.
:14.)
:Meg-szent-ség-telen-ít-het-etlen-ség-es-kedés-eitek-ért
== Zusammengesetzten Substantiven - Komposita ==
:Hier aber soll es um die vielen ganz kurzen ungarischen Wörter gehen.
:Diese eignen sich hervorragend, um sein Vokabular ohne extreme Anstrengungen zu erweitern.
:Die ungarische Sprache hat ungewöhnlich viele dieser kurzen Wörter, die dann wie im Deutschen zu zusammengesetzten Substantiven - Komposita - zusammengestellt werden.
:Diese einsilbigen (und natürlich auch andere mehrsilbige) Wörter werden dann zu langen „Wortungetümen“ zusammengesetzt, was ungarische Texte auf den ersten Blick fast unaussprechlich macht. Das Aneinanderfügen zu zusammengesetzten Substantiven folgt dabei erstaunlicherweise meist der Logik, die wir von deutschen zusammengesetzten Substantiven kennen. Daran kommen dann noch 1-3 Suffixe mit unterschiedlichsten Bedeutungen.
:Gelegentlich handelt es sich auch um logisch zusammengesetzte Wort, um einen ganz anderen Gegenstand zu beschreiben. So in der Art wie wir es aus alten Native-Amerikan-Filmen (früher politische inkorrekt als „Indianerfilme“ bezeichnet) kennen: Feuer-Wasser (für Alkohol), Feuer-Ross (für Lokomotive), Großer Weißer Vater (US-Präsident), Bleichgesicht, Donnerstock. Solche Konstruktionen kennt auch das Ungarische.
:kép - Bild
:fény - Licht, Glanz
:fénykép - Foto (= Lichtbild)
:fényképez - fotografieren
:fényképező - "Fotografier-"
:gép - Maschine, Gerät
:fényképezőgép - Fotoapparat (= Lichtbildmaschine)
:fényképész - Photograph
:tok - Gehäuse, Etui, Kapsel, Futteral, Scheide, Hülse
:fényképezőgéptok - Kameratasche (= Lichtbildmaschinenfutteral)
:Davon können wir jetzt noch den Plural bilden - durch anhängen von „-k“ (bzw. „-ok“ oder „-ek“)
:fényképezőgépek - Fotoapparate
:und dann noch den Akkusativ bilden - durch anhängen von „-t“ (bzw. „-ot“ oder „-et“)
:fényképezőgépeket - (den) Fotoapparaten
:„mit dem Fotoapparat“ dazu - durch anhängen von „-val/-vel“ (im konkreten Fall „-pel“ weil das „v“ von „-vel“ an den vorhergehenden Buchstaben „p“ angepasst wird)
:a fényképezőgéppel - „mit dem Fotoapparat“ (hier ohne Akkusativ, also ohne "t")
:„mit den Fotoapparaten“ (also im Plural)dazu - durch anhängen von „-val/-vel“ (im konkreten Fall „-kel“ weil das „v“ von „-vel“ an den vorhergehenden Buchstaben „k“ angepasst wird)
:fényképezőgépek - Fotoapparate
:a fényképezőgépekkel - „mit den Fotoapparaten“
:lép - treten, schreiten
:lépés - Schritt
:cső - Rohr, Röhre
:lépcső - Treppe (= Schreitrohr)
:fut - laufen, rennen
:futó - Läufer
:sző - weben, spinnen
:szőnyeg - Teppich
:lépcsőfutószőnyeg - Treppenläufer
:út - Reise, Weg, Straße
:levél - Brief
:útlevél - Pass (= Reisebrief)
:fénykép - Lichtbild
:fény - Licht
:kép - Bild
:útlevélfénykép - Passbild
:táv - fern-, tele-, Strecke
:cső - Rohr, Röhre
:távcső - Fernrohr, Fernglas
:mű - Werk (Produkt), Schöpfung, künstlich-
:fog - Zahn
:sor - Reihe, Zeile
:műfogsor - Zahnprothese (Totalprothese) (= künstliche Zahnreihe)
:szár - Bein, Stängel - normalerweise ist "láb = Bein", aber auch "lábszár" ist erlaubt, (alsó lábszár = Unterschenkel)
:kapocs - Klammer, Schnalle, Spange, Schließe
:csont - Knochen
:szárkapocscsont - Wadenbein (= Beinklammer-Knochen) (Lateinisch: Fibula) (Fibula nennt man auch die Gewandnadel [Fibel] mit der seit Jahrtausenden die Kleidung zusammengehalten wird. Am bekanntesten sind die alten Griechen und Römer, die damit ihre Toga zusammengehalten haben. Eine Fibula sieht oft aus wie eine sehr große Sicherheitsnadel.)
== Liste sehr kurzer ungarischer Wörter ==
=== ein Buchstabe ===
# a - der/die/das
# e - ez a
# ő - er/sie
# s (= és) - und
=== zwei Buchstaben ===
:Bei Verben ist hier die für Wörterbucheinträge übliche 3. Person Einzahl (ungarisch: E/3) aufgeführt.
# ad - geben, verkaufen
# ág - Ast
# ál - falsch, unecht
# ám - nun, jedoch, obwohl, aber, doch
# ár - Preis (Kosten), Flut
# ás - graben
# át - hindurch, durch, über
# az - der/die/das
# bő - weit (Kleidung), bauschig, breit, reichlich, ausführlich
# bú - Kummer, Trauer
# de - aber; doch (als Widerspruch)
# ég - Himmel, brennen, verbrennen
# éj - Nacht
# ék - Keil
# él - Leben, leben, Kante, Schneide
# én - ich
# ép - unversehrt, gesund, intakt, heil, unversehrt
# ér - Blutgefäß, Ader, wert sein, taugen, gelten, erreichen, ankommen, berühren
# és - und
# év - Jahr
# fa - Baum, Holz
# fő - kochen, sieden, Hauptsache, Kopf (Haupt)
# fű - Gras
# ha - wenn, falls
# hó - Schnee, Monat
# hő - Wärme, Hitze
# hű - loyal, treu, getreu, aussagefähig
# íj - Bogen (Flitzebogen, Waffen)
# ín - Sehne (am Muskel)
# ír - schreiben, der Ire/die Irin
# is - auch
# ív - Bogen (Krümmung - Mathematik, Gewölbe, Formulat, Packpapier)
# íz - Geschmack, Aroma, Marmelade, Fingerglied
# jó - gut, richtig, recht
# ki - wer
# kő - Stein
# lé - Saft
# ló - Pferd
# lő - schießen
# ma - heute
# mi - was, wir
# mű - Werk, Arbeit, Schöpfung
# ne - nicht
# nő - Frau, wachsen, zunehmen
# ok - Ursache, Grund
# ón - Zinn
# ól - Stall, Hütte
# óv - schützen, beschützen, warnen, behüten
# ők - sie (3. Person Plural)
# öl - Schoß, töten, umbringen, ermorden
# ön - Sie (höfliche Anrede)
# őr - Wächter, Aufsehen
# ős - Ahne, Vorfahre, uralt
# öt - fünf
# öv - Gürtel
# őz - Reh
# rá - drauf, darauf, daran
# rí - weinen
# ró - rügen, einschneiden, einkerben
# se - auch nicht, gar nicht
# sí - Ski
# só - Salz
# te - du
# ti - ihr
# tó - See
# tő - Wurzel, Haarwurzel, Stock (z. B. Weinstock, Rosenstock), (Wort-)Stamm
# tű - Nadel
# új - neu
# út - Straße (Fernstraße). Weg, Fahrt, Reise
# úr - Herr
# ül - sitzen, sich setzen, feiern
# űr - Weltraum, Leere, Vakuum
# üt - schlagen, hauen
# űz - treiben, betreiben, jagen, verfolgen
# vő - Schwiegersohn
=== drei Buchstaben ===
:Bei Verben ist hier die für Wörterbucheinträge übliche 3. Person Einzahl (ungarisch: E/1) aufgeführt.
# ács - Zimmermann
# adó - Steuer (Geld)
# agg - Greis, hochbetagt
# agy - Gehirn
# ágy - Bett
# alá - unter, hinunter
# áld - segnen
# áll - Kinn, stehen, sich hinstellen, standhalten
# alj - Unterteil, Grund, Unterlage
# apa - Vater
# arc - Gesicht, Wange
# árt - schaden
# áru - Ware
# ásó - Spaten
# bab - Bohne
# baj - Unglück, Übel, Leid
# báj - Anmut, Charme
# Bak - Steinbock (Sternzeichen)
# bak - Kutschersitz, Bock
# bal - linke/linker/linkes, die Linke (Faust)
# bán - bereuen, Ban (Titel)
# bár - Bar, obgleich, obwohl, mindestens
# bél - Darm
# bér - Lohn, Miete, Pacht
# bír - besitzen, haben, leiden (ausstehen), vertragen, können, mögen, tragen können, leiden können
# bíz - vertrauen, anvertrauen, überlassen
# bog - Knoten
# bók - Kompliment
# bor - Wein
# bot - Stock, Stab
# bőg - heulen, flennen, brüllen
# bök - stoßen, stechen
# bőr - Haut, Leder
# búg - heulen, brummen, dröhnen, gurren
# búj - vertieft sein
# búr - burisch, Bure
# bús - traurig, niedergeschlagen
# bűn - Sünde
# bűz - Gestank
# cár - Zar
# cég - Firma
# cél - Ziel
# cím - Adresse, Titel
# col - Zoll (Maßeinheit)
# csá - Hott!
# cső - Rohr, Röhre, Schlauch
# dac - Trotz
# dal - Lied, Gesang, Song
# dán - dänisch, Däne
# dél - Mittag, Süden
# dér - Raureif
# díj - Preis, Gebühr, Auszeichnung
# dió - Nuss
# dob - Trommel, werfen, schmeißen
# döf - stoßen, stechen, hineinstechen, erstechen, zustechen
# dog - Dogge (Hund)
# dög - Aas, Töle, Luder, Biest
# dől - fallen, sich neigen, kippen, fließen, strömen, versacken
# dúc - Strebe, Taubenschlag, Pfosten, Drempel
# dug - verstecken, hineinstecken, bumsen (Geschlechtsverkehr)
# dúl - toben, wüten
# dús - reichlich, üppig, wollüstig
# düh - Wut, Zorn, Rage
# edz - trainieren, abhärten, stählen, abschrecken (Metalle)
# egy - eins
# ejt - fallen lassen
# eke - Pflug
# élc - Witz, Bonmot
# élő - lebendig, lebend, live, Lebendige
# elő - hervor
# elv - Prinzip, Grundsatz
# emu - Emu
# epe - Galle, Gallenblase
# épp - gerade, eben
# érc - Erz
# ért - verstehen, sich verstehen, wegen, für
# erő - Kraft, Zwang
# érv - Argument
# eső - Regen
# ész - Verstand, Vernunft, Sinn, Gips
# faj - Art, Rasse, Stamm, Nation
# fáj - es tut weh (nur 3. Person Plural)
# fal - Mauer, Wand
# far - Hintern, Steiß, Heck
# fás - bewaldet, holzig, Baum-, Holz-
# fed - zudecken, bedecken, decken
# fej - Kopf, melken
# fék - Bremse, Zaum
# fel - hinauf
# fél - Hälfte, halb, Angst haben, befürchten
# fém - Metall
# fen - schärfen, wetzen, schleifen
# fér - Platz haben, hineinpassen
# fiú - Junge, Knabe, Sohn
# fix - fix, fest
# fog - Zahn, fangen
# fok - Grad, Stufe (nicht Treppe), Entwicklungszustand
# fon - spinnen
# föl - Sahne, Rahm, Haut (Milch), hinauf
# főz - kochen (Essen zubereiten)
# fúj - blasen, wehen, pusten
# fúr - bohren
# fut - laufen, rennen, fliehen
# fül - Ohr, Henkel
# fűt - heizen, beheizen
# fűz - Weide, schnüren, einfädeln, flechten, zusammenheften, broschieren
# gát - Damm, Barriere, Hindernis
# gaz - Unkraut, niederträchtig
# gáz - Gas
# gém - Reiher, Ziehbrunnenhebel
# gén - Gen
# gép - Maschine
# géz - Mull, Mullbinde
# góc - Krankheitsherd, Herd (Geologie)
# gól - Tor (Tortreffer)
# göb - Knoten
# gőg - Hochmut
# gőz - Dampf
# hab - Schaum
# had - Krieg
# hág - treten, steigen
# haj - Haar, Scheitel
# háj - Fett, Fettgewebe, rohes Schweinschmalz
# hal - Fisch, sterben
# hál - schlafen, übernachten
# hám - Geschirr (Gurtzeug für Tiere), Epithel
# has - Bauch
# hat - sechs, einwirken, wirken
# hát - Rücken, also, auch, dann, schon, na!
# ház - Haus
# heg - Narbe
# héj - Schale, Rinde
# hét - sieben, Woche
# hév - Hitze, Pathos, Eifer, Schwung, Glut, Inbrunst
# híd - Brücke
# híg - dünnflüssig, wässrig
# hím - männlich, Männchen
# hír - Nachricht, Meldung
# hit - Glaube
# hiú - eitel
# hív - rufen, nennen, treu, Anhänger (Fan), der gläubige
# hód - Biber
# hol - wo
# hon - Heimat, Vaterland
# hón - etwas unter dem Arm halten
# hoz - bringen, holen, tragen
# hős - Held, heldenhaft
# húg - die jüngere Schwester; die jüngere Nichte
# húr - Saite, Sehne (am Bogen)
# hús - Fleisch
# húz - ziehen, anziehen
# hűl - abkühlen, sich abkühlen, sich erkälten
# hűs - kühl, erfrischend
# ide - hierher
# idő - Zeit, Wetter
# iga - Joch, Tragejoch
# ige - Verb
# így - so, auf diese Weise
# ily - so eine, solche (Adverb: ilyen)
# ima - Gebet
# íme - siehe da, hier ist ..., das ist ...
# ing - Hemd
# int - winken, nicken, warnen, mahnen, ermahnen, einen Wink geben
# íny - Zahnfleisch
# itt - hier
# izé - Ding, Zeug, Dingsbums
# jár - gehen (zu Fuß), laufen (Maschine)
# jég - Eis (nicht Speiseeis)
# jel - Zeichen, Signal
# jog - Recht, Jura
# jód - Jod
# jól - gut, richtig
# jós - Wahrsager, Prophet
# jön - kommen
# juh - Schaf
# jut - gelangen, hingelangen, kommen, hinfahren, geraten, ausreichen, reichen, bekommen, zufallen, zukommen
# kád - Wanne
# kan - Eber, Keiler, Männchen
# kap - bekommen, überraschen
# kar - Arm, Zustand, Fakultät
# kár - Schaden, schade
# kéj - Lust, Wolllust
# kék - blau
# kel - aufstehen
# kém - Spion, Geheimagent
# ken - schmieren, bestreichen
# kén - Schwefel
# kép - Bild
# kér - bitten, verlangen, fordern, wünschen
# kés - Messer
# kéz - Hand
# kín - Qual, Pein
# kis - klein
# kód - Code
# köb - Kubus, Kubik-
# köd - Nebel
# köp - spucken
# kor - Alter, Zeit
# kór - Krankheit
# kos - Widder; Ramme (Technik)
# kör - Kreis, Runde
# kőr - Herz (Kartenspiel)
# köt - binden, knüpfen, stricken
# köz - Öffentlichkeit, Gemeinsamkeit, Abstand, Zwischenraum, Gasse, Gesamtheit, Allgemeinheit
# kúp - Kegel, Konus, Zäpfchen
# kúr - vögeln, poppen, rammeln
# kút - Brunnen
# láb - Bein
# lap - Blatt, Karte
# láp - Moor, Sumpf
# lát - sehen
# láz - Fieber
# léc - Latte
# lég - Luft
# lék - Loch
# lel - finden
# len - Flachs, Lein
# lép - Milz, schreiten, Bienenwabe
# les - Hinterhalt, Lauer, auflauern, lauern, belauern, lauschen, abgucken
# lét - Sein, Dasein, Existenz, Wesen
# lóg - hängen, schwänzen
# lom - Kram, Gerümpel
# lop - stehlen
# lök - stoßen, schieben, schubsen, stürzen
# lúd - Gans
# lúg - Lauge
# máj - Leber
# mák - Mohn
# mar - brennen, beißen, ätzen
# már - schon, bereits
# más - Kopie, sonstige, anders, andere, etwas anderes
# máz - Glasur
# meg - und, aber, denn, ja
# még - noch, außerdem, erst, sogar
# méh - Biene, Gebärmutter
# mén - Hengst
# mer - etwas wagen, sich trauen, riskieren
# mér - messen, wiegen, schöpfen
# mez - Trikot, Fußballtrikot
# méz - Honig
# míg - solange, solange bis, während, wohingegen, indes
# mód - Art, Weise, Möglichkeit, Maß, Modus, Mittel, Manier, Raum
# moh - Moos
# mór - Maure
# mos - waschen
# műt - operieren
# nád - Schilf
# nap - Tag, Sonne
# nem - nicht, nein, Geschlecht, Gattung
# nép - Volk
# név - Name
# néz - betrachten, ansehen
# nos - nun, also, so, und? , was dann?
# női - weiblich
# nős - verheiratet (nur für Männer)
# nyű - Made
# oda - dorthin
# odú - Grube, Loch, Höhle, Nest
# old - lösen, das Schmelzen
# olt - löschen, (Durst) stillen, impfen
# oly - solch
# óra - Uhr, Stunde
# orr - Nase
# orv - hinterlistig
# óta - seit
# ott - dort
# öcs - jüngere Bruder
# ölt - anziehen, anlegen (Kleidung), fädeln, annehmen (z.B. eine Gestalt), nähen, sticheln
# önt - gießen, schütten
# őrs - Wache, Spähtrupp
# ősz - Herbst, grau
# ősi - urtümlich
# övé - sein, seine, ihr, ihre
# pác - Beize, Schlamassel
# pad - Bank (zum Sitzen)
# pap - Geistlicher
# pár - Paar, ein paar
# pék - Bäcker
# pép - Brei
# per - Prozess, Klage, Rechtsstreit, Streit
# pír - erröten, Röte
# por - Staub, Pulver
# pót - zusätzlich, ergänzend
# póz - Pose
# púp - Buckel, Höcker
# rab - Gefangener, Häftling
# rág - kauen, nagen
# raj - Schwarm (Tiere), Gruppe, Geschwader
# rak - legen, stellen, setzen, bauen
# rák - Krebs
# ráz - rütteln, schütteln
# rég - längst, vor langer Zeit
# rém - schrecklich, Gespenst, Schreckgespenst, Scheusal
# rés - Lücke, Spalt, Schlitz, Riss
# rét - Wiese
# rév - Reede, Hafen
# réz - Kupfer
# rím - Reim
# rom - Ruine, Trümmer
# rőf - Elle (Längeneinheit)
# rög - Erdscholle, Pfropf (Vene), Klumpen, Brocken
# rúd - Stange, Stab
# rúg - treten (einen Fußtritt versetzen), (ein Tor) schießen
# rum - Rum
# rút - hässlich, garstig
# rüh - Räude, Krätze
# sál - Schal
# sár - Kot, Schmutz, Schlamm
# sas - Adler
# sás - Riedgras, Segge
# sav - Säure
# sáv - Bahn, Band, Streifen, Fahrstreifen
# seb - Wunde
# sem - auch nicht
# sík - Ebene, eben, flach
# sín - Schiene (Verband, Eisenbahn)
# síp - Pfeife (Trillerpfeife)
# sír - weinen, Grab
# sok - viel
# som - Kornelkirsche, Dirndl
# sor - Reihe, Zeile
# sós - salzig
# sóz - salzen
# sör - Bier
# sőt - sogar, vielmehr
# súg - flüstern, vorsagen, soufflieren
# sül - braten, gebraten werden, backen, gebacken werden
# sün - Igel
# süt - braten, backen, scheinen (Sonne)
# szó - Wort
# sző - weben
# szú - Borkenkäfer
# tag - Glied, Stück, Mitglied
# tág - weit, breit
# táj - Gegend, Landschaft
# tál - Schüssel
# tan - Lehre (Ausbildung; Wissenschaft)
# táp - Futter, Futtermittel
# tar - kahl, glatzköpfig
# tár - Lager, Sammlung, Magazin (Patronen), weit öffnen
# tat - Heck
# táv - Distanz, Strecke
# tea - Tee
# tej - Milch
# tél - Winter
# tép - reißen, zerreißen, zupfen
# tér - Platz, Gebiet, Raum
# tét - Spieleinsatz
# tíz - zehn
# tok - Behälter, Etui, Kapsel
# tol - schieben, rücken
# tor - Mahl, Schmaus, Freudenmal, Thorax
# tót - Slowake (historisch)
# tök - Kürbis
# töm - füllen, stopfen
# tör - brechen, reiben, streben (sich Mühe geben)
# tőr - Dolch
# tud - wissen, können, kennen
# túl - zu viel, übermäßig, jenseits, außer, darüber hinaus
# túr - wühlen ???
# tus - Dusche, Tusche, Treffer, Kolben (Waffe)
# tűr - dulden, ertragen, hinnehmen, vertragen
# tűz - Feuer, Brand, stechen, brennen, anstecken, aufspießen
# úgy - so, derart, ungefähr, etwa
# ujj - Finger, Ärmel
# úri - herrschaftlich, distinguiert, vornehm
# üde - frisch
# ügy - Angelegenheit, Sache, Affäre
# ürü - Hammel
# üst - Kessel
# vad - Wild, wild
# vád - Anklage, Klage
# vág - schneiden, hacken
# vaj - Butter
# váj - aushöhlen, ausschneiden, bohren, hauen, kratzen
# vak - blind, der Blinde
# vám - Zoll, Zollamt
# van - sein/haben
# var - Schorf, Grind
# vár - Burg, Festung, warten, erwarten
# vas - Eisen
# váz - Gerüst, Skelett
# véd - beschützen, verteidigen
# vég - Ende, Schluss
# vél - meinen, glauben, unterstellen
# vén - sehr alt, steinalt, der Greis, der Alte
# ver - schlagen
# vér - Blut
# vés - kerben, meißeln, gravieren
# vet - werfen, säen
# vét - Fehler machen, verstoßen, begehen, verbrechen, verschulden
# víg - fröhlich, lustig
# vív - fechten, kämpfen
# víz - Wasser
# von - ziehen, schleppen
# zab - Hafer
# zaj - Geräusch
# zár - Türschloss, Sperre, abschließen, sperren
# zöm - das Gros
# zug - Winkel
# zúg - rauschen, summen, brummen, heulen (Sirene)
# zúz - zerschlagen, zerquetschen, zermalmen, schlagen, hauen, zerren, stampfen
# zűr - Krach, Spektakel, Durcheinander
=== drei „Buchstaben“ - aber mit Doppelbuchstaben (Digraphen) ===
:Bei Verben ist hier die für Wörterbucheinträge übliche 3. Person Einzahl (ungarisch: E/1) aufgeführt.
:Wörter mit 3 Buchstaben, bei denen mindestens ein Buchstabe ein Digraph ist.
:Wenn wir die Doppelbuchstaben (Digraphen) als einen Buchstaben zählen, dann kommen wir auf einige weitere sehr kurze, ungarische Wörter.
:Digraph: cs, dz, gy, ly, ny, sz, ty, zs
:Trigraphen sind relativ selten: dzs
:Auch Wörter mit Buchstabendoppelungen werden hier mit aufgeführt. (Beispiel: cikk - Artikel, Ware)
:Von der Aussprache her gesehen handelt es sich um „3 Buchstaben“, so wie bei der vorherigen Liste.
# aszú - Eiswein, Auslese (Wein)
# begy - Kropf
# benn - drinnen
# bocs - Bärenjunges, (Kurzform für) Verzeihung
# bősz - wütend
# chekk - Scheck
# cikk - Artikel, Ware
# cucc - die Siebensachen
# csak - nur, bloß, erst
# csal - betrügen, täuschen
# csap - Wasserhahn, Zapfen, schlagen, hauen
# csáp - Fühler
# csat - Schnalle, Spange
# cseh - tschechisch, Tscheche
# csel - List, Täuschung
# csen - stehlen, mausen, stibitzen
# chikk - Zigarettenstummel, Zigarettenkippe
# csík - Streifen
# csíny - Streich, Ulk
# csíp - zwicken, stechen
# csók - Kuss
# csőd - Konkurs, Bankrott
# csőr - Schnabel
# csősz - Wächter, Feldhüter
# csúcs - Spitze - Gipfel
# csúf - hässlich
# csuk - schließen, einsperren, zuklinken
# csügg - hängen
# disz - Ornament, Verzierung, Schmuck
# ekkő - Schmuckstein (ék = Schmuck; kő = Stein; ausgesprochen wird es aber ohne dazwischen abzusetzen)
# enyv - Leim
# fagy - Frost
# fasz - Penis, Dödel, Schwanz
# fenn - oben, wach, laut (sprechen)
# fény - Glanz, Licht
# finn - finnisch, Finne
# fogy - abnehmen, verbrauchen, schwinden, vermindeern
# forr - sieden, kochen, gären
# függ - hängen
# genny - Eiter
# gúny - Spott, Hohn
# gyám - Vormund, Strebe
# gyár - Fabrik, Werk
# gyász - Trauer
# gyep - Rasen
# gyér - spärlich, knapp, dünn, ärmlich, schwach
# gyík - Eidechse
# gyom - Unkraut
# gyón - beichten
# gyök - Wurzel (Mathematik), Radix
# győz - siegen, gewinnen
# gyúl - sich entzünden
# gyúr - kneten, bearbeiten
# gyűr - zerknittern, zerdrücken, knüllen, knautschen, stopfen
# hagy - lassen, belassen, liegen lassen
# hall - hören, vernehmen, Halle
# hány - wie viel? ; sich übergeben
# hely - Ort, Stelle, Platz
# hisz - glauben
# hogy - dass; wie; auf welche Art;
# hossz - Länge
# húgy - Urin
# hull - fallen
# húsz - zwanzig
# jegy - Zeichen, Eintrittskarte
# kény - Willkür, Eigenmächtigkeit
# kész - fertig, bereit
# kinn - draußen
# kosz - Dreck, Schmutz
# lágy - weich
# lány - Mädchen
# légy - Fliege
# lenn - unten
# lény - Wesen
# lesz - werden
# lőcs - Ding
# lyuk - Loch
# makk - Eichel
# megy - gehen, fahren
# meggy - Sauerkirsche
# mell - Brust, Busen
# mész - Kalk
# moly - Motte
# mukk - Mucks
# nagy - groß
# négy - vier
# nyak - Hals
# nyák - Schleim
# nyal - lecken
# nyál - Speichel
# nyár - Sommer
# nyel - schlucken
# nyél - Stiel, Griff
# nyer - gewinnen
# nyíl - Pfeil
# nyír - schneiden, scheren, Birke
# nyit - öffnen
# nyög - ächzen, stöhnen, wimmern
# nyom - drücken, Spur, Fährte
# nyűg - Last, Plage, lästige Verpflichtung, Belastung
# olló - Schere
# oszt - teilen
# ölyv - Bussard
# össz - ganz, gesamt
# passz - Pass
# pötty - Tupfen
# rács - Gitter, Rost
# rész - Teil
# rizs - Reis
# rogy - sinken
# rossz - schlecht
# rozs - Roggen
# rúzs - Lippenstift
# rügy - Knospe, Trieb
# sakk - Schach
# segg - Hintern, Arsch
# sikk - der Schick
# sokk - Schock
# súly - Gewicht
# szab - zuschneiden, festsetzen
# szag - Geruch, Duft
# száj - Mund, Maul
# szak - Zeitabschnitt, Periode, Phase, Fachrichtung, Fach
# szál - Faden, Faser
# száll - fliegen, aussteigen
# szám - Zahl, Nummer
# szán - bedauern, bemitleiden, Schlitten
# szar - Scheiße (vulgär) (Kot)
# szár - Stängel, Stiel, Halm, Griff, Rohr
# szász - sächsisch, Sachse
# száz - Hundert
# szebb- schöner
# szed - pflücken, sammeln
# széf - Safe
# szeg - Nagel, schneiden, brechen
# szék - Stuhl, Sitz
# szel - schneiden
# szél - Wind, Rand, Saum
# szem - Auge, Getreidekorn
# szén - Kohle, Kohlenstoff
# szép - schön
# szer - Mittel, Stoff
# szesz - Alkohol
# szét - auseinander, entzwei
# szex - Sex
# szia - hallo! , Tschüss!
# szid - schimpfen
# szíj - Riemen, Gurt, Gürtel
# szil - Ulme (meinest aber: szilfa = Ulmen-[Baum])
# szín - Farbe, Bühne, Oberfläche, Rand
# szír - Syrer, syrisch
# szít – anstacheln, schüren, anfachen
# szív - Herz, saugen
# szól - sagen
# szór - streuen
# szög - Winkel
# szőr - (Körper-)Haar
# szúr - stechen
# szűk - eng, schmal, knapp, begrenzt, gedrängt
# szűz - Jungfrau, unberührt
# tény - Tatsache
# tesz - tun, machen
# tett - Tun, Tat, Handeln, Werk
# toll - Feder (Vogel), Stift
# tőgy - Euter
# túsz - Geisel
# túr - wühlen
# tyúk - Henne
# ugye - eben
# vagy - oder
# vágy - Verlangen, Lust, Sehnsucht, Wunsch
# vall - aussagen, gestehen
# váll - Schulter
# varr - nähen
# vesz - nehmen, kaufen
# vész - Unheil
# vicc - Witz
# visz - bringen
# zacc - Satz, Bodensatz, Kaffeesatz
# zsák - Sack
# zseb - Tasche (an der Kleidung, z. B. Hosentasche)
# szíj - Lasche
# zsír - Fett
# zsúr - Party, Fete
== Test 1 ==
:Der Test beschränkt sich auf die etwas häufigeren Wörter.
:1.)
# á_ _ - Spaten
# b_ b - Bohne
# _ _ l - Ziel
# _ _ m - Adresse, Titel
# _ _ r - Kreis, Runde
# k_ t - binden, knüpfen, stricken
# _ _ r - Lohn, Miete, Pacht
# _ í _ - besitzen, haben, leiden (ausstehen), vertragen
# b_ _ - Haut, Leder
# _ é _ - Firma
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff">Lösung</font> '''
|-
|
# ásó - Spaten
# bab - Bohne
# cél - Ziel
# cím - Adresse, Titel
# kör - Kreis, Runde
# köt - binden, knüpfen, stricken
# bér - Lohn, Miete, Pacht
# bír - besitzen, haben, leiden (ausstehen), vertragen
# bőr - Haut, Leder
# cég - Firma
|}
:2.)
# c_ ő - Rohr, Röhre, Schlauch
# _ _ c - Trotz
# _ _ l - Lied, Gesang, Song
# d_ _ - Mittag, Süden
# _ é _ - Hand
# _ i _ - klein
# _ _ d - Code
# _ ö _ - Kubus, Kubik-
# _ í _ - Reim
# _ _ d - Stange, Stab
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff">Lösung</font> '''
|-
|
# cső - Rohr, Röhre, Schlauch
# dac - Trotz
# dal - Lied, Gesang, Song
# dél - Mittag, Süden
# kéz - Hand
# kis - klein
# kód - Code
# köb - Kubus, Kubik-
# rím - Reim
# rúd - Stange, Stab
|}
:3.)
# _ ú _ - treten (einen Fußtritt versetzen), (ein Tor) schießen
# _ ö _ - Bier
# s_ n - Igel
# _ _ t - braten, backen, scheinen (Sonne)
# s_ _ - Wort
# _ é _ - Winter
# _ _ r - Platz, Gebiet
# _ í _ - zehn
# _ o _ - schieben
# _ _ j - Kopf, melken
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff">Lösung</font> '''
|-
|
# rúg - treten (einen Fußtritt versetzen), (ein Tor) schießen
# sör - Bier
# sün - Igel
# süt - braten, backen, scheinen (Sonne)
# szó - Wort
# tél - Winter
# tér - Platz, Gebiet
# tíz - zehn
# tol - schieben
# fej - Kopf, melken
|}
:4.)
# _ _ k - Bremse, Zaum
# k_ r - bitten, verlangen, fordern, wünschen
# _ e _ - hinauf
# _ é _ - Hälfte, halb, Angst haben, befürchten
# _ é _ - Metall
# f_ _ - Platz haben, hineinpassen
# _ i _ - Junge, Knabe, Sohn
# t_ m - füllen, stopfen
# _ _ r - brechen, reiben
# _ á _ - Burg, Festung, warten, erwarten
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff">Lösung</font> '''
|-
|
# fék - Bremse, Zaum
# kér - bitten, verlangen, fordern, wünschen
# fel - hinauf
# fél - Hälfte, halb, Angst haben, befürchten
# fém - Metall
# fér - Platz haben, hineinpassen
# fiú - Junge, Knabe, Sohn
# töm - füllen, stopfen
# tör - brechen, reiben
# vár - Burg, Festung, warten, erwarten
|}
:5.)
# v_ s - Eisen
# _é _ - beschützen, verteidigen
# _é_ - Ende, Schluss
# _ o _ - Grad, Stufe (nicht Treppe), Entwicklungszustand
# _ ö _ - Sahne, Rahm, Haut (Milch)
# _ _ z - kochen (Essen zubereiten)
# f_ _ - laufen, rennen, fliehen
# _ _ l - Ohr
# _ u _ - wissen, können, kennen
# _ _ - zu viel, übermäßig, jenseits, außer
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff">Lösung</font> '''
|-
|
# vas - Eisen
# véd - beschützen, verteidigen
# vég - Ende, Schluss
# fok - Grad, Stufe (nicht Treppe), Entwicklungszustand
# föl - Sahne, Rahm, Haut (Milch)
# főz - kochen (Essen zubereiten)
# fut - laufen, rennen, fliehen
# fül - Ohr
# tud - wissen, können, kennen
# túl - zu viel, übermäßig, jenseits, außer
|}
:6.)
# _ ú _ - wühlen
# _ _ z - Feuer, Brand, stechen, brennen
# _ _ y - so, derart, ungefähr, etwa
# _ _ j - Finger, Ärmel
# ü_ _ - Angelegenheit, Sache, Affäre
# _ _ d - Wild, wild
# _ á _ - Anklage, Klage
# _ _ g - schneiden, hacken
# v_ _ - Butter
# _ a _ - blind, der Blinde
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff">Lösung</font> '''
|-
|
# túr - wühlen
# tűz - Feuer, Brand, stechen, brennen
# úgy - so, derart, ungefähr, etwa
# ujj - Finger, Ärmel
# ügy - Angelegenheit, Sache, Affäre
# vad - Wild, wild
# vád - Anklage, Klage
# vág - schneiden, hacken
# vaj - Butter
# vak - blind, der Blinde
|}
:7.)
# _ _ m - Zoll, Zollamt
# v_ _ - sein/haben
# _ _ t - heizen, beheizen
# _ű _ - Weide, schnüren, einfädeln, flechten
# g_ t - Damm, Barriere, Hindernis
# g_ _ - Gas
# _ é _ - Maschine
# _ _ z - Mull, Mullbinde
# g_ _ - Tor (Tortreffer)
# _ _ b - Schaum
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff">Lösung</font> '''
|-
|
# vám - Zoll, Zollamt
# van - sein/haben
# fűt - heizen, beheizen
# fűz - Weide, schnüren, einfädeln, flechten
# gát - Damm, Barriere, Hindernis
# gáz - Gas
# gép - Maschine
# géz - Mull, Mullbinde
# gól - Tor (Tortreffer)
# hab - Schaum
|}
:8.)
# _ a _ - Haar
# h_ l - Fisch, sterben
# _ á _ - schlafen, übernachten
# _ á _ - Geschirr (Gurtzeug für Tiere), Epithel
# h_ _ - Bauch
# _ a _ - sechs
# b_ g - heulen, flennen
# _ _ r - Wein
# _ ö _ - Nebel
# k_ _ - Alter, Zeit
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff">Lösung</font> '''
|-
|
# haj - Haar
# hal - Fisch, sterben
# hál - schlafen, übernachten
# hám - Geschirr (Gurtzeug für Tiere), Epithel
# has - Bauch
# hat - sechs
# bőg - heulen, flennen
# bor - Wein
# köd - Nebel
# kor - Alter, Zeit
|}
:9.)
# _ ó _ - Krankheit
# _ í _ - Preis, Gebühr, Auszeichnung
# _ _ ó - Nuss
# _ _ b - Trommel, werfen, schmeißen
# d_ c - Strebe
# d_ _ - verstecken, hineinstecken, bumsen (Geschlechtsverkehr)
# _ _ h - Wut
# _ é _ - Bild
# _ d _ - trainieren
# e_ _ - eins
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff">Lösung</font> '''
|-
|
# kór - Krankheit
# díj - Preis, Gebühr, Auszeichnung
# dió - Nuss
# dob - Trommel, werfen, schmeißen
# dúc - Strebe
# dug - verstecken, hineinstecken, bumsen (Geschlechtsverkehr)
# düh - Wut
# kép - Bild
# edz - trainieren
# egy - eins
|}
:10.)
# _ _ t - fallen lassen
# _ ú _ - Brunnen
# l_ _ - Bein
# _ a v - Blatt, Karte
# _ _ t - sehen
# _ á v - Fieber
# _ _ c - Latte
# _ _ s - Messer
# _ é _ - Luft
# _ _ u - Ware
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff">Lösung</font> '''
|-
|
# ejt - fallen lassen
# kút - Brunnen
# láb - Bein
# lap - Blatt, Karte
# lát - sehen
# láz - Fieber
# léc - Latte
# kés - Messer
# lég - Luft
# áru - Ware
|}
:11.)
# _ _ j - Unglück
# _ a _ - linke/linker/linkes
# _ á _ - Bar, obgleich, obwohl, mindestens
# b_ l - Darm
# é_ c - Erz
# _ r _ - verstehen
# _ _ ő - Kraft, Zwang
# _ s _ - Regen
# _ _ j - Art, Rasse, Stamm, Nation
# f_ _ - es tut weh (nur 3. Person Plural)
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff">Lösung</font> '''
|-
|
# baj - Unglück
# bal - linke/linker/linkes
# bár - Bar, obgleich, obwohl, mindestens
# bél - Darm
# érc - Erz
# ért - verstehen
# erő - Kraft, Zwang
# eső - Regen
# faj - Art, Rasse, Stamm, Nation
# fáj - es tut weh (nur 3. Person Plural)
|}
:12.)
# _ a _ - Mauer, Wand
# f_ r - Hintern, Steiß, Heck
# _ _ g - Zahn, fangen
# _ n _ - Zahnfleisch
# i_ _ - hier
# _ á _ - gehen (zu Fuß), laufen (Maschine)
# _ é _ - Eis (nicht Speiseeis)
# _ e _ - Zeichen, Signal
# _ _ g - Recht
# _ ö _ - kommen
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff">Lösung</font> '''
|-
|
# fal - Mauer, Wand
# far - Hintern, Steiß, Heck
# fog - Zahn, fangen
# íny - Zahnfleisch
# itt - hier
# jár - gehen (zu Fuß), laufen (Maschine)
# jég - Eis (nicht Speiseeis)
# jel - Zeichen, Signal
# jog - Recht
# jön - kommen
|}
:13.)
# _ u _ - Schaf
# a_ó - Steuer (Geld)
# a_ _ - Gehirn
# _ _y - Bett
# _ _ z - betrachten, ansehen
# _ ő _ - weiblich
# o_ _ - dorthin
# _ l _ - löschen
# _ _ t - dort
# ó_ a - Uhr, Stunde
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff">Lösung</font> '''
|-
|
# juh - Schaf
# adó - Steuer (Geld)
# agy - Gehirn
# ágy - Bett
# néz - betrachten, ansehen
# női - weiblich
# oda - dorthin
# olt - löschen
# ott - dort
# óra - Uhr, Stunde
|}
:14.)
# _ r _ - Nase
# _ n _ - gießen, schütten
# _ _ z - Herbst
# _ t _ - seit
# _ á _ - Gegend, Landschaft
# _ á _ - Schüssel
# _ _ n - Lehre (Ausbildung)
# _ a _ - kahl
# _ á _ - Lager, Sammlung, Magazin, weit öffnen
# t_ _ - Tee
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff">Lösung</font> '''
|-
|
# orr - Nase
# önt - gießen, schütten
# ősz - Herbst
# óta - seit
# táj - Gegend, Landschaft
# tál - Schüssel
# tan - Lehre (Ausbildung)
# tar - kahl
# tár - Lager, Sammlung, Magazin, weit öffnen
# tea - Tee
|}
:15.)
# _ _ j - Milch
# _ _ d - Bank (zum Sitzen)
# p_ _ - Paar, ein paar
# _ é _ - Bäcker
# _ _ b - Gefangener, Häftling
# _ á _ - kauen, nagen
# _ a _ - Schwarm, Gruppe, Geschwader
# _ a _ - legen, stellen, setzen, bauen
# r_ k - Krebs
# _ _ z - rütteln, schütteln
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff">Lösung</font> '''
|-
|
# tej - Milch
# pad - Bank (zum Sitzen)
# pár - Paar, ein paar
# pék - Bäcker
# rab - Gefangener, Häftling
# rág - kauen, nagen
# raj - Schwarm, Gruppe, Geschwader
# rak - legen, stellen, setzen, bauen
# rák - Krebs
# ráz - rütteln, schütteln
|}
:16.)
# r_ _ - längst
# _ _ t - Wiese
# í_ y - so, auf diese Weise
# _ _ g - Hemd
# _ _ r - schlagen
# _ é _ - Blut
# _ _ t - werfen, säen
# v_ t - Fehler machen, verstoßen
# v_ _ - Wasser
# _ o _ - ziehen, schleppen
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff">Lösung</font> '''
|-
|
# rég - längst
# rét - Wiese
# így - so, auf diese Weise
# ing - Hemd
# ver - schlagen
# vér - Blut
# vet - werfen, säen
# vét - Fehler machen, verstoßen
# víz - Wasser
# von - ziehen, schleppen
|}
:17.)
# _ _ b - Hafer
# al_ - unter, hinunter
# _ _ r - wagen, sich trauen
# _ é _ - messen, wiegen, schöpfen
# _ _ z - Honig
# _ _ t - Rücken
# s_ _ - Schal
# _ á _ - Kot, Schmutz, Schlamm
# s_ v - Säure
# _ e _ - Wunde
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff">Lösung</font> '''
|-
|
# zab - Hafer
# alá - unter, hinunter
# mer - wagen, sich trauen
# mér - messen, wiegen, schöpfen
# méz - Honig
# hát - Rücken
# sál - Schal
# sár - Kot, Schmutz, Schlamm
# sav - Säure
# seb - Wunde
|}
:18.)
# _ _ m - auch nicht
# _ í _ - Schiene (Verband, Eisenbahn)
# _ í _ - Pfeife (Trillerpfeife)
# _ _ r - weinen
# _ a _ - Arm, Zustand, Fakultät
# k_ _ - Schaden, schade
# _ _ k - blau
# _ e _ - aufstehen
# s_ _ - viel
# _ o _ - Reihe, Zeile
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff">Lösung</font> '''
|-
|
# sem - auch nicht
# sín - Schiene (Verband, Eisenbahn)
# síp - Pfeife (Trillerpfeife)
# sír - weinen
# kar - Arm, Zustand, Fakultät
# kár - Schaden, schade
# kék - blau
# kel - aufstehen
# sok - viel
# sor - Reihe, Zeile
|}
:19.)
# _ á _ - Haus
# h_ _ - Schale, Rinde
# _ é _ - sieben, Woche
# _ _ d - Brücke
# h_ r - Nachricht, Meldung
# _ i _ - Glaube
# h_ _ - eitel
# _ _ v - rufen, nennen, treu, Anhänger (Fan)
# _ ó _ - Biber
# _ o _ - wo
# _ é _ - Name
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff">Lösung</font> '''
|-
|
# ház - Haus
# héj - Schale, Rinde
# hét - sieben, Woche
# híd - Brücke
# hír - Nachricht, Meldung
# hit - Glaube
# hiú - eitel
# hív - rufen, nennen, treu, Anhänger (Fan)
# hód - Biber
# hol - wo
# név - Name
|}
:20.)
# h_ _ - bringen, holen, tragen
# _ _ s - Held, heldenhaft
# _ ú _ - Saite, Sehne (am Bogen)
# _ ú _ - Fleisch
# _ _ z - ziehen, anziehen
# i_ _ - hierher
# _ á _ - Türschloss, abschließen
# á_l - Kinn, stehen, sich hinstellen, standhalten
# a_ _ - Unterteil, Grund, Rock
# _ _ a - Vater
# _ _ p - Volk
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff">Lösung</font> '''
|-
|
# hoz - bringen, holen, tragen
# hős - Held, heldenhaft
# húr - Saite, Sehne (am Bogen)
# hús - Fleisch
# húz - ziehen, anziehen
# ide - hierher
# zár - Türschloss, abschließen
# áll - Kinn, stehen, sich hinstellen, standhalten
# alj - Unterteil, Grund, Unterlage
# apa - Vater
# nép - Volk
|}
:21.)
# ar_ - Gesicht
# á_ t - schaden
# j_ t - gelangen, geraten, ausreichen, reichen
# _ _ d - Wanne
# _ a _ - bekommen
# _ é _ - Spion, Geheimagent
# k_ _ - Schwefel
# l_ _ - Milz, treten (schreiten)
# _ _ p - stehlen
# lúd - Gans
# z_ _ - Geräusch
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff">Lösung</font> '''
|-
|
# arc - Gesicht
# árt - schaden
# jut - gelangen, geraten, ausreichen, reichen
# kád - Wanne
# kap - bekommen
# kém - Spion, Geheimagent
# kén - Schwefel
# lép - Milz, treten (schreiten)
# lop - stehlen
# lúd - Gans
# zaj - Geräusch
|}
:22.)
# _ á _ - Leber
# m_ _ - brennen, beißen, ätzen
# _ _ r - schon, bereits
# _ á _ - Kopie, sonstige, anders, andere, etwas anderes
# _ e _ - und, aber, denn, ja
# _ _ g - noch, außerdem
# _ é _ - Biene
# _ d _ - Zeit, Wetter
# m_ s - waschen
# _ a _ - Tag, Sonne
# n_ _ - nicht, nein, Geschlecht, Gattung
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff">Lösung</font> '''
|-
|
# máj - Leber
# mar - brennen, beißen, ätzen
# már - schon, bereits
# más - Kopie, sonstige, anders, andere, etwas anderes
# meg - und, aber, denn, ja
# még - noch, außerdem
# méh - Biene
# idő - Zeit, Wetter
# mos - waschen
# nap - Tag, Sonne
# nem - nicht, nein, Geschlecht, Gattung
|}
== Test 2 ==
:1.)
# Steuer (Geld)
# Gehirn
# Bett
# unter, hinunter
# Kinn, stehen, sich hinstellen, standhalten
# Unterteil, Grund, Rock
# Vater
# Gesicht
# schaden
# Ware
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff">Lösung</font> '''
|-
|
# adó - Steuer (Geld)
# agy - Gehirn
# ágy - Bett
# alá - unter, hinunter
# áll - Kinn, stehen, sich hinstellen, standhalten
# alj - Unterteil, Grund, Rock
# apa - Vater
# arc - Gesicht
# árt - schaden
# áru - Ware
|}
:2.)
# Spaten
# Bohne
# Unglück
# linke/linker/linkes
# Bar, obgleich, obwohl, mindestens
# Darm
# Lohn, Miete, Pacht
# besitzen, haben, leiden (ausstehen), vertragen
# heulen, flennen
# Wein
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff">Lösung</font> '''
|-
|
# ásó - Spaten
# bab - Bohne
# baj - Unglück
# bal - linke/linker/linkes
# bár - Bar, obgleich, obwohl, mindestens
# bél - Darm
# bér - Lohn, Miete, Pacht
# bír - besitzen, haben, leiden (ausstehen), vertragen
# bőg - heulen, flennen
# bor - Wein
|}
:3.)
# treten (einen Fußtritt versetzen), (ein Tor) schießen
# Schal
# Kot, Schmutz, Schlamm
# Säure
# Wunde
# auch nicht
# Schiene (Verband, Eisenbahn)
# Pfeife (Trillerpfeife)
# weinen
# viel
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff">Lösung</font> '''
|-
|
# rúg - treten (einen Fußtritt versetzen), (ein Tor) schießen
# sál - Schal
# sár - Kot, Schmutz, Schlamm
# sav - Säure
# seb - Wunde
# sem - auch nicht
# sín - Schiene (Verband, Eisenbahn)
# síp - Pfeife (Trillerpfeife)
# sír - weinen
# sok - viel
|}
:4.)
# Reihe, Zeile
# Bier
# Igel
# Haut, Leder
# Firma
# Ziel
# Adresse, Titel
# Rohr, Röhre, Schlauch
# Trotz
# Lied, Gesang, Song
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff">Lösung</font> '''
|-
|
# sor - Reihe, Zeile
# sör - Bier
# sün - Igel
# bőr - Haut, Leder
# cég - Firma
# cél - Ziel
# cím - Adresse, Titel
# cső - Rohr, Röhre, Schlauch
# dac - Trotz
# dal - Lied, Gesang, Song
|}
:5.)
# Mittag, Süden
# Preis, Gebühr, Auszeichnung
# Nuss
# Trommel, werfen, schmeißen
# Strebe
# verstecken, hineinstecken, bumsen (Geschlechtsverkehr)
# Wut
# trainieren
# eins
# fallen lassen
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff">Lösung</font> '''
|-
|
# dél - Mittag, Süden
# díj - Preis, Gebühr, Auszeichnung
# dió - Nuss
# dob - Trommel, werfen, schmeißen
# dúc - Strebe
# dug - verstecken, hineinstecken, bumsen (Geschlechtsverkehr)
# düh - Wut
# edz - trainieren
# egy - eins
# ejt - fallen lassen
|}
:6.)
# Erz
# verstehen
# Kraft, Zwang
# Regen
# Art, Rasse, Stamm, Nation
# es tut weh (nur 3. Person Plural)
# Mauer, Wand
# Hintern, Steiß, Heck
# Kopf, melken
# Bremse, Zaum
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff">Lösung</font> '''
|-
|
# érc - Erz
# ért - verstehen
# erő - Kraft, Zwang
# eső - Regen
# faj - Art, Rasse, Stamm, Nation
# fáj - es tut weh (nur 3. Person Plural)
# fal - Mauer, Wand
# far - Hintern, Steiß, Heck
# fej - Kopf, melken
# fék - Bremse, Zaum
|}
:7.)
# hinauf
# Hälfte, halb, Angst haben, befürchten
# Metall
# Platz haben, hineinpassen
# Junge, Knabe, Sohn
# Zahn, fangen
# Grad, Stufe (nicht Treppe), Entwicklungszustand
# Sahne, Rahm, Haut (Milch)
# kochen (Essen zubereiten)
# laufen, rennen, fliehen
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff">Lösung</font> '''
|-
|
# fel - hinauf
# fél - Hälfte, halb, Angst haben, befürchten
# fém - Metall
# fér - Platz haben, hineinpassen
# fiú - Junge, Knabe, Sohn
# fog - Zahn, fangen
# fok - Grad, Stufe (nicht Treppe), Entwicklungszustand
# föl - Sahne, Rahm, Haut (Milch)
# főz - kochen (Essen zubereiten)
# fut - laufen, rennen, fliehen
|}
:8.)
# Ohr
# heizen, beheizen
# Weide, schnüren, einfädeln, flechten
# Damm, Barriere, Hindernis
# Gas
# Maschine
# Mull, Mullbinde
# Tor (Tortreffer)
# Schaum
# Haar
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff">Lösung</font> '''
|-
|
# fül - Ohr
# fűt - heizen, beheizen
# fűz - Weide, schnüren, einfädeln, flechten
# gát - Damm, Barriere, Hindernis
# gáz - Gas
# gép - Maschine
# géz - Mull, Mullbinde
# gól - Tor (Tortreffer)
# hab - Schaum
# haj - Haar
|}
:9.)
# Fisch, sterben
# schlafen, übernachten
# Geschirr (Gurtzeug für Tiere), Epithel
# Bauch
# sechs
# Rücken
# Haus
# Schale, Rinde
# sieben, Woche
# Brücke
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff">Lösung</font> '''
|-
|
# hal - Fisch, sterben
# hál - schlafen, übernachten
# hám - Geschirr (Gurtzeug für Tiere), Epithel
# has - Bauch
# hat - sechs
# hát - Rücken
# ház - Haus
# héj - Schale, Rinde
# hét - sieben, Woche
# híd - Brücke
|}
:10.)
# Nachricht, Meldung
# Glaube
# eitel
# rufen, nennen, treu, Anhänger (Fan)
# Biber
# wo
# bringen, holen, tragen
# Held, heldenhaft
# Saite, Sehne (am Bogen)
# Fleisch
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff">Lösung</font> '''
|-
|
# hír - Nachricht, Meldung
# hit - Glaube
# hiú - eitel
# hív - rufen, nennen, treu, Anhänger (Fan)
# hód - Biber
# hol - wo
# hoz - bringen, holen, tragen
# hős - Held, heldenhaft
# húr - Saite, Sehne (am Bogen)
# hús - Fleisch
|}
:11.)
# ziehen, anziehen
# hierher
# Zeit, Wetter
# so, auf diese Weise
# Hemd
# Zahnfleisch
# hier
# gehen (zu Fuß), laufen (Maschine)
# Eis (nicht Speiseeis)
# Zeichen, Signal
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff">Lösung</font> '''
|-
|
# húz - ziehen, anziehen
# ide - hierher
# idő - Zeit, Wetter
# így - so, auf diese Weise
# ing - Hemd
# íny - Zahnfleisch
# itt - hier
# jár - gehen (zu Fuß), laufen (Maschine)
# jég - Eis (nicht Speiseeis)
# jel - Zeichen, Signal
|}
:12.)
# Recht
# kommen
# Schaf
# gelangen, geraten, ausreichen, reichen
# Wanne
# bekommen
# Arm, Zustand, Fakultät
# Schaden, schade
# blau
# aufstehen
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff">Lösung</font> '''
|-
|
# jog - Recht
# jön - kommen
# juh - Schaf
# jut - gelangen, geraten, ausreichen, reichen
# kád - Wanne
# kap - bekommen
# kar - Arm, Zustand, Fakultät
# kár - Schaden, schade
# kék - blau
# kel - aufstehen
|}
:13.)
# Spion, Geheimagent
# Schwefel
# Bild
# bitten, verlangen, fordern, wünschen
# Messer
# Hand
# klein
# Code
# Kubus, Kubik-
# Nebel
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff">Lösung</font> '''
|-
|
# kém - Spion, Geheimagent
# kén - Schwefel
# kép - Bild
# kér - bitten, verlangen, fordern, wünschen
# kés - Messer
# kéz - Hand
# kis - klein
# kód - Code
# köb - Kubus, Kubik-
# köd - Nebel
|}
:14.)
# Alter, Zeit
# Krankheit
# Kreis, Runde
# binden, knüpfen, stricken
# Brunnen
# Bein
# Blatt, Karte
# sehen
# Fieber
# Latte
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff">Lösung</font> '''
|-
|
# kor - Alter, Zeit
# kór - Krankheit
# kör - Kreis, Runde
# köt - binden, knüpfen, stricken
# kút - Brunnen
# láb - Bein
# lap - Blatt, Karte
# lát - sehen
# láz - Fieber
# léc - Latte
|}
:15.)
# Luft
# Milz, treten (schreiten)
# stehlen
# Gans
# Leber
# brennen, beißen, ätzen
# schon, bereits
# Kopie, sonstige, anders, andere, etwas anderes
# und, aber, denn, ja
# noch, außerdem
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff">Lösung</font> '''
|-
|
# lég - Luft
# lép - Milz, treten (schreiten)
# lop - stehlen
# lúd - Gans
# máj - Leber
# mar - brennen, beißen, ätzen
# már - schon, bereits
# más - Kopie, sonstige, anders, andere, etwas anderes
# meg - und, aber, denn, ja
# még - noch, außerdem
|}
:16.)
# Biene
# wagen, sich trauen
# messen, wiegen, schöpfen
# Honig
# Fehler machen, verstoßen
# waschen
# Tag, Sonne
# nicht, nein, Geschlecht, Gattung
# Volk
# Name
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff">Lösung</font> '''
|-
|
# méh - Biene
# mer - wagen, sich trauen
# mér - messen, wiegen, schöpfen
# méz - Honig
# vét - Fehler machen, verstoßen
# mos - waschen
# nap - Tag, Sonne
# nem - nicht, nein, Geschlecht, Gattung
# nép - Volk
# név - Name
|}
:17.)
# betrachten, ansehen
# weiblich
# dorthin
# löschen
# dort
# Uhr, Stunde
# Nase
# gießen, schütten
# Herbst
# seit
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff">Lösung</font> '''
|-
|
# néz - betrachten, ansehen
# női - weiblich
# oda - dorthin
# olt - löschen
# ott - dort
# óra - Uhr, Stunde
# orr - Nase
# önt - gießen, schütten
# ősz - Herbst
# óta - seit
|}
:18.)
# Bank (zum Sitzen)
# Paar, ein paar
# Bäcker
# Gefangener, Häftling
# kauen, nagen
# Schwarm, Gruppe, Geschwader
# legen, stellen, setzen, bauen
# Krebs
# Wasser
# rütteln, schütteln
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff">Lösung</font> '''
|-
|
# pad - Bank (zum Sitzen)
# pár - Paar, ein paar
# pék - Bäcker
# rab - Gefangener, Häftling
# rág - kauen, nagen
# raj - Schwarm, Gruppe, Geschwader
# rak - legen, stellen, setzen, bauen
# rák - Krebs
# víz - Wasser
# ráz - rütteln, schütteln
|}
:19.)
# längst
# Wiese
# Reim
# Stange, Stab
# braten, backen, scheinen (Sonne)
# Wort
# Gegend, Landschaft
# Schüssel
# Lehre (Ausbildung)
# ziehen, schleppen
# werfen, säen
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff">Lösung</font> '''
|-
|
# rég - längst
# rét - Wiese
# rím - Reim
# rúd - Stange, Stab
# süt - braten, backen, scheinen (Sonne)
# szó - Wort
# táj - Gegend, Landschaft
# tál - Schüssel
# tan - Lehre (Ausbildung)
# von - ziehen, schleppen
# vet - werfen, säen
|}
:20.)
# kahl
# Lager, Sammlung, Magazin, weit öffnen
# Tee
# Milch
# Winter
# Hafer
# Platz, Gebiet
# zehn
# schieben
# füllen, stopfen
# Blut
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff">Lösung</font> '''
|-
|
# tar - kahl
# tár - Lager, Sammlung, Magazin, weit öffnen
# tea - Tee
# tej - Milch
# tél - Winter
# zab - Hafer
# tér - Platz, Gebiet
# tíz - zehn
# tol - schieben
# töm - füllen, stopfen
# vér - Blut
|}
:21.)
# brechen, reiben
# Türschloss, abschließen
# wissen, können, kennen
# zu viel, übermäßig, jenseits, außer
# wühlen
# Feuer, Brand, stechen, brennen
# so, derart, ungefähr, etwa
# Finger, Ärmel
# Angelegenheit, Sache, Affäre
# Wild, wild
# schlagen
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff">Lösung</font> '''
|-
|
# tör - brechen, reiben
# zár - Türschloss, abschließen
# tud - wissen, können, kennen
# túl - zu viel, übermäßig, jenseits, außer
# túr - wühlen
# tűz - Feuer, Brand, stechen, brennen
# úgy - so, derart, ungefähr, etwa
# ujj - Finger, Ärmel
# ügy - Angelegenheit, Sache, Affäre
# vad - Wild, wild
# ver - schlagen
|}
:22.)
# Anklage, Klage
# schneiden, hacken
# Geräusch
# Butter
# blind, der Blinde
# Zoll, Zollamt
# sein/haben
# Burg, Festung, warten, erwarten
# Eisen
# beschützen, verteidigen
# Ende, Schluss
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%"
|-
!'''<font color="ff00ff">Lösung</font> '''
|-
|
# vád - Anklage, Klage
# vág - schneiden, hacken
# zaj - Geräusch
# vaj - Butter
# vak - blind, der Blinde
# vám - Zoll, Zollamt
# van - sein/haben
# vár - Burg, Festung, warten, erwarten
# vas - Eisen
# véd - beschützen, verteidigen
# vég - Ende, Schluss
|}
5koeg9onbfvw522dbp4pz4o40tl4by8
Benutzer:Thirunavukkarasye-Raveendran/Kurzgeschichten 6
2
122589
1086431
1085207
2026-05-20T19:17:18Z
Thirunavukkarasye-Raveendran
47852
/* 101 */
1086431
wikitext
text/x-wiki
:'''Kurzgeschichten 6'''
== 101 ==
Die Pumpe - TEST - <abbr title="deshalb - es: por eso">deshalb</abbr>
Auf dem Dorfplatz steht eine alte Pumpe.
Die Pumpe ist seit zwei Jahren kaputt.
Sie gibt kein Wasser mehr.
Aber Rita sitzt jeden Tag davor.
Sie sitzt auf einer kleinen Bank.
Sie schaut die Pumpe an.
Früher hat sie hier jeden Tag Wasser geholt.
Lea kommt nach der Schule.
Sie ist Ritas Enkelin.
Sie ist dreizehn Jahre alt.
„Oma, was machst du?", fragt Lea.
„Ich sitze hier", sagt Rita.
„Aber warum?", fragt Lea.
Rita sagt nichts.
Lea setzt sich neben sie auf die Bank.
Sie hat ihr Schulheft dabei.
Sie macht ihre Hausaufgaben.
Rita schaut weiter die Pumpe an.
Ein Brief ist gekommen.
Lea hat ihn aus dem Briefkasten geholt.
Sie gibt ihn Rita.
Der Brief hat keinen Absender.
Rita macht den Brief auf.
Drinnen ist ein Blatt Papier.
Auf dem Papier ist eine Zeichnung.
Jemand hat einen Fluss gemalt.
Das Wasser ist blau.
Die Fische sind klein und schwarz.
Kein Wort steht auf dem Papier.
Nur die Zeichnung.
„Wer hat das gemalt?", fragt Lea.
„Ich glaube, mein Sohn David", sagt Rita.
„Wann kommt er zurück?", fragt Lea.
„Ich weiß es nicht", sagt Rita.
Sie steht auf.
Sie geht zur Pumpe.
Sie hängt das Papier an den Pumpengriff.
Das Papier hängt da.
Es bewegt sich ein bisschen im Wind.
„Das ist schön", sagt Lea.
Am nächsten Morgen steht Rita früh auf.
Sie geht zum Dorfplatz.
Das Papier hängt noch an der Pumpe.
Aber auf dem Pumpengriff liegt ein Stein.
Der Stein ist klein und glatt und rund.
Rita nimmt ihn in die Hand.
Er ist kalt.
Sie schaut sich um.
Niemand ist da.
Sie hält den Stein fest in der Hand.
Dann legt sie ihn wieder auf den Pumpengriff.
Sie setzt sich auf die Bank.
Die Sonne kommt heraus.
Es wird warm.
Rita hat die Hände auf den Knien.
Sie schaut die Pumpe an.
Sie schaut den Stein an.
Der Stein liegt ruhig da.
Lea kommt wieder nach der Schule.
„Oma, woher kommt der Stein?", fragt sie.
„Ich weiß es nicht", sagt Rita.
Lea nimmt den Stein und schaut ihn an.
„Der ist glatt", sagt sie.
Rita nickt.
Lea legt den Stein wieder auf den Pumpengriff.
Sie setzt sich zu Rita auf die Bank.
Die zwei sitzen zusammen da.
Die alte Pumpe steht vor ihnen.
Das Papier mit dem Fluss hängt daran.
Der Stein liegt oben auf dem Griff.
Rita legt ihre Hände auf die Knie.
Ihre Hände kennen noch den Pumpengriff.
Sie wissen noch, wie man pumpt.
----------------------------------------------
Die Brücke
Der Fluss unter der alten Brücke war trocken.
Das war schon seit drei Jahren so.
Tomás saß jeden Morgen auf der Brücke.
Er saß immer auf derselben Stelle, in der Mitte.
Früher hatte er von hier aus die Fische gesehen.
Jetzt sah er nur Steine und trockenen Sand.
Aber er kam trotzdem jeden Morgen.
Inés ist am Samstag gekommen.
Sie hat Brot und Oliven mitgebracht.
Sie hat sich neben ihren Vater gesetzt.
„Du bist schon wieder hier", hat sie gesagt.
„Natürlich", hat Tomás gesagt.
Inés hat das Brot aufgemacht und ihm ein Stück gegeben.
Tomás hat es genommen, aber er hat es nicht gegessen.
Er hat auf den trockenen Flusslauf geschaut.
„Es ist ein Paket angekommen", hat Inés gesagt.
Sie hat eine kleine Schachtel aus der Tasche genommen.
Die Schachtel war leicht und fast leer.
Darin war ein Stück blaues Tuch, klein und gefaltet.
Das Tuch war sehr weich und dunkelblau.
„Ist das von Pablo?", hat Tomás gefragt.
„Ich glaube schon", hat Inés gesagt.
„Es war kein Brief dabei."
Tomás hat das Tuch in die Hand genommen.
Er hat es eine Weile in der Hand gehalten.
Dann ist er aufgestanden und zur Brüstung gegangen.
Er hat das Tuch um die Brüstung gebunden.
Er hat es fest gemacht, dreimal gewickelt.
Inés hat zugeschaut, aber sie hat nichts gesagt.
Das blaue Tuch hat sich im Wind bewegt.
Es hat sich hin und her bewegt, langsam.
„Warum machst du das?", hat Inés gefragt.
Tomás hat nicht geantwortet.
Er ist wieder auf seine Stelle gegangen und hat sich gesetzt.
Inés hat sich neben ihn gesetzt.
Sie haben zusammen auf das blaue Tuch geschaut.
Eine Weile war es ganz still.
Am nächsten Morgen ist Tomás früh aufgestanden.
Er ist allein zur Brücke gegangen.
Das blaue Tuch war noch da.
Aber daneben hing jetzt ein rotes Tuch.
Das rote Tuch war neu und sauber.
Jemand hat es in der Nacht dort hingebunden.
Tomás hat nach links und nach rechts geschaut.
Er war allein.
Er hat das rote Tuch angefasst.
Es war noch warm.
Er hat Inés angerufen.
„Komm zur Brücke", hat er gesagt.
„Warum?", hat sie gefragt.
„Es ist ein rotes Tuch da. Neben dem blauen."
Inés hat nicht sofort geantwortet.
Dann hat sie gesagt: „Ich komme."
Sie ist eine Stunde später angekommen.
Sie haben die zwei Tücher angeschaut.
Blau und rot, nebeneinander im Wind.
„Wer war das?", hat Inés gefragt.
„Ich weiß es nicht", hat Tomás gesagt.
Sie haben sich auf die Brücke gesetzt, beide.
Unter ihnen war der trockene Fluss.
Über ihnen war der blaue Himmel.
Die zwei Tücher haben sich im Wind bewegt.
Tomás hat die Brüstung mit beiden Händen gehalten.
So hat er sie immer gehalten, wenn der Fluss voll war.
Inés hat das gesehen.
Sie haben nichts gesagt.
Die zwei Tücher haben sich bewegt.
----------------------------------------------
Das Waschbrett
Der Bach war seit fünf Jahren trocken.
Früher hatte Valentina dort jeden Montag ihre Wäsche gewaschen.
Jetzt saß sie auf dem flachen Stein, auf dem sie früher das Waschbrett abgestützt hatte.
Das Waschbrett lag vor ihr, schräg gegen den Stein gelehnt, das alte Holz grau und rissig.
Sie fuhr mit der Hand über die Rillen, auf und ab, langsam.
Es war dieselbe Bewegung wie früher, nur ohne Wasser und ohne Seife.
Die Sonne wärmte ihren Rücken, und die Vögel schwiegen.
Unten im trockenen Bachbett lagen Steine, die früher unter Wasser gewesen waren.
Camila kam gegen Mittag den Waldweg herunter.
Sie trug eine Tasche mit Brot, Käse und zwei Äpfeln.
„Du hast heute wieder nichts gegessen, oder?", sagte sie.
Valentina antwortete nicht, aber sie nahm den Apfel, den Camila ihr hinhielt.
Camila setzte sich neben ihre Tante auf den flachen Stein.
Der Stein war breit genug für zwei, wenn man eng beieinandersaß.
„Es ist ein Brief gekommen", sagte Camila.
Sie zog eine Postkarte aus ihrer Tasche.
Auf der Vorderseite war eine Brücke über einen Fluss, das Wasser breit und blau.
Auf der Rückseite stand nur eine Adresse in Mateos Handschrift, sonst nichts.
Kein Datum, kein Gruß, kein Name.
Valentina nahm die Karte und hielt sie lange in den Händen.
„Woher kommt sie?", fragte Camila.
„Der Stempel ist unleserlich", sagte Valentina.
Sie drehte die Karte um und schaute das Wasser auf dem Foto an.
Das Wasser auf dem Foto war breit und ruhig, mit kleinen Wellen.
Sie legte die Karte mit dem Bild nach unten auf den Stein.
Dann legte sie das Waschbrett darüber, als ob sie es festhalten wollte.
Camila sah zu, ohne etwas zu sagen.
Sie aß eine Scheibe Brot und schaute in das trockene Bachbett hinunter.
„Er lebt", sagte Valentina schließlich.
Sie sagte es nicht als Frage.
Camila blieb noch eine Stunde, dann musste sie zurück zur Tankstelle.
Sie hatte Spätschicht und durfte wirklich nicht zu spät kommen.
„Soll ich dich später abholen?", fragte sie.
„Nein", sagte Valentina. „Ich gehe allein."
Camila umarmte sie kurz und ging den Waldweg zurück.
Valentina blieb auf dem Stein sitzen, bis die Sonne tiefer stand.
Dann legte sie die Hände auf das Waschbrett und schloss die Augen.
Ihre Finger kannten die Rillen auswendig.
Am nächsten Morgen stand sie früher auf als sonst.
Sie nahm das Waschbrett und ging zum Bach.
Das Waschbrett lag noch genauso da, wie sie es am Abend hingestellt hatte.
Auch die Postkarte lag noch darunter.
Aber um den Griff des Waschbrettes war etwas gewickelt.
Es war ein kleiner Kranz aus nassen Grashalmen, fest geflochten.
Valentina kniete nieder und berührte das Gras.
Es war wirklich nass, nicht nur taufeucht.
Sie schaute den Bach entlang, nach links und nach rechts.
Niemand war zu sehen.
Sie roch an dem Gras.
Es roch nach Wasser, nach richtigem Wasser.
Sie stand auf und hob das Waschbrett hoch.
Die Postkarte lag unberührt darunter.
Sie nahm die Karte und steckte sie in ihre Schürzentasche.
Dann trug sie das Waschbrett zurück zum Stein und stellte es an seinen Platz.
Den Graskranz ließ sie dort, wo er war.
Sie wollte ihn nicht wegnehmen.
Am Abend rief sie Camila an.
„Heute Morgen war etwas am Waschbrett", sagte sie.
„Was denn?", fragte Camila.
„Ein Kranz aus nassem Gras. Fest geflochten."
„Woher kam das Wasser?", fragte Camila.
„Ich weiß es nicht", sagte Valentina.
Eine kurze Pause entstand.
„Mateo?", fragte Camila leise.
„Ich weiß es nicht", sagte Valentina wieder.
Sie legte das Telefon hin und saß am Tisch.
Vor ihr lag die Postkarte mit dem blauen Fluss.
Ihre Hände lagen auf dem Tisch, die Finger leicht gespreizt.
Sie waren dieselben Hände wie früher, als der Bach noch voll war.
Sie wussten noch, wie man Wäsche wäscht.
----------------------------------------------
Das Netz
Der Fluss hatte vor vier Jahren aufgehört zu fließen.
Zuerst wurde er flacher, dann schmaler, dann blieb nur noch Schlamm übrig, der in der Hitze hart wurde wie Beton.
Emilio hatte das alles beobachtet, von demselben Fleck aus, auf dem er jetzt saß.
Er war sechsundsechzig Jahre alt und konnte sich nicht vorstellen, woanders zu sitzen.
Vor ihm lag ein altes Fischnetz, grob geflochten, grau vor Alter.
Er zog die Fäden durch seine Finger, suchte nach gerissenen Stellen und flickte sie mit dünnem Draht.
Das hatte er früher immer gemacht, bevor er ausfuhr: das Netz kontrollieren.
Jetzt kontrollierte er das Netz, aber es gab keinen Fluss mehr.
Marisol kam nach ihrer Nachtschicht in der Klinik.
Sie trug noch die Arbeitskleidung, hatte nur einen Pullover drübergezogen.
Ihre Schritte auf dem Kiesweg klangen müde, aber sie beeilte sich trotzdem.
Sie stellte eine Plastikdose neben Emilio auf den Boden.
„Hühnersuppe aus der Krankenhausküche", sagte sie.
Emilio nickte, schob die Dose beiseite und arbeitete weiter am Netz.
Marisol setzte sich auf einen umgekippten Eimer und zog ihr Handy aus der Tasche.
„Jorge hat eine Sprachnachricht geschickt", sagte sie.
Sie drückte Play, und eine Stimme kam heraus, rauschig und weit weg.
Die Stimme sagte, dass es ihm gut gehe, dass die Arbeit anstrengend sei und dass er bald mehr verdiene.
Dann brach die Aufnahme ab, mittendrin, als ob das Signal abgerissen wäre.
Emilio hörte zu, ohne die Finger vom Netz zu nehmen.
„Wann hat er das geschickt?", fragte er.
„Vorgestern", sagte Marisol.
Emilio nickte.
Er faltete einen Teil des Netzes zusammen und legte ihn auf seinen Schoß.
„Warum isst du nicht?", fragte Marisol.
„Später", sagte Emilio.
Sie wusste, dass später nie kam, aber sie sagte es nicht.
Stattdessen aß sie selbst einen Löffel Suppe direkt aus der Dose.
Die Sonne stand schon hoch, und der trockene Flusslauf glänzte weiß wie Salz.
Emilio stand auf, nahm das Netz an beiden Enden und trug es hinunter ins Flussbett.
Marisol sah ihm nach, die Arme um die Knie geschlungen.
Er breitete das Netz auf dem harten Boden aus, langsam und sorgfältig, als ob unter ihm Wasser wäre.
Er richtete die Ränder aus und glättete die Maschen mit der flachen Hand.
Dann trat er zurück und betrachtete das Netz von oben.
Es lag da wie eine Erinnerung an etwas, das immer noch da sein sollte.
Marisol hatte das noch nie gesehen und wusste nicht, was sie sagen sollte.
Also sagte sie nichts.
Emilio kam zurück, setzte sich auf seinen Stein und schloss die Augen.
Am nächsten Morgen war Marisol schon wieder in der Klinik.
Emilio ging vor der größten Hitze zum Fluss hinunter.
Das Netz lag noch dort, wo er es hingelegt hatte.
Aber in jeder zweiten Masche lag ein kleiner Stein – rund, grau, glatt, wie vom Wasser geschliffen.
Er hockte sich hin und betrachtete die Steine.
Sie lagen nicht zufällig, das sah er sofort.
Jemand hatte sie so gelegt, dass sie in der Mitte dichter lagen und zu den Rändern hin auseinanderliefen, so wie Fische schwimmen, wenn ein Netz sich schließt.
Er berührte einen der Steine, bewegte ihn aber nicht.
Emilio stand auf, nahm das Netz an einem Ende und hob es langsam hoch.
Die Steine fielen auf den trockenen Boden und lagen jetzt durcheinander.
Er hielt das Netz gegen die Sonne.
Durch die Maschen sah er das leere Flussbett, aufgeteilt in kleine Vierecke.
Als ob der Fluss noch da wäre, aber in Stücke zerschnitten.
Er hielt das Netz so lange, bis seine Arme zu zittern begannen.
Dann ließ er es langsam sinken, faltete es zusammen und trug es zurück zum Stein.
Am Abend rief er Marisol an.
„Die Steine", sagte er nur.
„Was?", fragte sie.
„Im Netz. Steine. Jemand hat sie hineingelegt."
Eine Pause.
„Wer war das?", fragte Marisol.
„Ich weiß es nicht", sagte Emilio.
Wieder eine Pause.
Dann fragte sie: „Hast du die Suppe gegessen?"
„Ja", sagte er.
Das war nicht wahr.
Er legte das Handy weg und saß noch lange draußen, im Dunkeln.
Der Fluss war trocken, das wusste er.
Aber seine Hände hielten das Netz, und sie wussten noch, wie man es wirft, damit es offen bleibt.
----------------------------------------------
Der Holzkarpfen
Die Grube, in der früher der See gelegen hatte, war jetzt nur noch eine Mulde aus rissigem Lehm und gebleichtem Gras.
Aurelio kannte jeden Riss.
Er war siebenundzwanzig Jahre Fischer gewesen, und seine Hände wussten noch, wie Wasser sich anfühlt, wenn es unter dem Rumpf eines Bootes zittert.
Das Boot selbst lag dreißig Meter vom einstigen Ufer entfernt und moderte still vor sich hin.
Er saß jeden Morgen auf einem der alten Grenzsteine, die früher die Pachtgrenze zwischen dem See und Felipes Olivenhainen markiert hatten.
Felipe war längst fortgezogen.
Die Oliven waren verdorrt, bevor der See selbst versiegte.
Aurelio nahm ein Stück Treibholz aus der Tasche seiner gefütterten Jacke – dasselbe Stück, das er seit Wochen bei sich trug.
Mit einem kleinen Federmesser begann er, die Flanke des Holzes abzutragen, ohne nachzudenken, ohne einen Plan.
Seine Finger bewegten sich so, wie sie sich beim Ausnehmen von Fischen bewegt hatten: mit einer Sicherheit, die keiner Entscheidung bedurfte.
Das Holz wurde kleiner.
Eine Form zeichnete sich ab – etwas, das einem Karpfen ähnelte, jenem Karpfen, den er im Winter neunundneunzig mit seiner Frau Carmela aus dem zugefrorenen See gehackt hatte, weil nichts anderes da war.
Carmela hatte den Fisch gebraten, mit Knoblauch und getrockneten Tomaten, und das Fett hatte auf der Zunge gelegen wie ein Versprechen.
Sie war fünf Jahre später gestorben, an einem Sommer, der zu lang gedauert hatte.
Aurelio ließ das Messer eine Weile ruhen.
Die Stille des trockenen Seebettes hatte eine eigene Qualität: nicht die Stille von Einsamkeit, sondern die Stille von etwas, das aufgehört hatte zu sprechen, ohne sich zu verabschieden.
Pilar kam am Nachmittag des dritten Donnerstags.
Sie war früher gegangen als sonst, weil die Schichtleiterin ihr einen halben Freistag gegeben hatte.
Wegen guter Arbeit, hieß es – obwohl Aurelio vermutete, dass es eher die geschwollenen Knöchel waren, die jeder im Werk längst bemerkt hatte.
Sie trug eine große Tasche aus Synthetikgeflecht und hatte sich ein Tuch in den Nacken gebunden.
„Du hast wieder nicht gegessen", sagte sie, ohne ihn zu begrüßen.
Es war keine Frage.
Aurelio schob das Holzstück in die Jackentasche.
Pilar setzte sich neben ihn auf den Grenzstein, der kaum breit genug für zwei war, und zog eine kleine Blechdose aus der Tasche.
Darin lagen eingemachte Linsen, noch warm von der Fabrikküche, wo sie sie am Morgen aufgewärmt hatte.
Aurelio nahm die Dose, rührte darin herum, ohne zu essen.
Pilar sah über das trockene Bett hinweg, als könnte sie durch genug Konzentration das Wasser zurückrufen.
„Es hat einen Brief gegeben", sagte sie schließlich.
Keinen Umschlag, nur ein gefaltetes Blatt, das jemand beim Dorfverein der Auswanderer hinterlegt hatte – die Vorsitzende hatte es Pilar ohne Kommentar zugesteckt.
Sie faltete das Blatt auf ihrem Knie auseinander.
Darauf standen drei Wörter in einer Schrift, die Aurelio nicht sofort erkannte, obwohl er sie kannte: „Ich bin angekommen."
Er las den Satz zweimal, dann ein drittes Mal, als könnte die Wiederholung die fehlenden zwölf Jahre füllen.
Sein Sohn Rodrigo hatte das Dorf verlassen, als die ersten Risse im Seeboden sichtbar wurden, und niemand hatte seitdem etwas Verlässliches von ihm gehört.
Pilar biss auf die Innenseite ihrer Wange, was sie immer tat, wenn sie nicht weinte, weil sie nicht weinen wollte.
Aurelio faltete das Blatt sorgfältig in der Mitte, dann noch einmal, dann ein drittes Mal, bis es ein kleines, hartes Rechteck war.
Er stand auf, ging die zehn Schritte hinunter in das Bett des Sees.
Die Risse unter seinen Sohlen knackten leise.
Er kniete nieder, an der tiefsten Stelle der Mulde, wo früher der Kahn vertäut gewesen war.
Dort grub er mit dem Messergriff eine kleine Vertiefung in den Lehm.
Das Papier legte er hinein, glatt gedrückt, als müsste es atmen können.
Dann schob er die Holzfigur aus der Tasche – den halb fertigen Karpfen, noch roh, noch ohne Augen – und legte ihn daneben.
Pilar beobachtete ihn vom Grenzstein aus, ohne etwas zu sagen.
Sie rauchte die letzte Zigarette ihres Päckchens.
Der Rauch stieg senkrecht in die reglose Luft.
Am nächsten Morgen ging Aurelio noch vor Sonnenaufgang zum See.
Pilar schlief noch in der Hütte, auf der alten Matratze, die nach Lavendel roch, weil Carmela immer Lavendelbündel daruntergelegt hatte.
Er kniete sich wieder an dieselbe Stelle.
Die kleine Vertiefung war noch da, das Papier unberührt.
Aber der Holzkarpfen war um einen halben Handbreit verschoben.
Es hatte in dieser Nacht keinen Wind gegeben, daran erinnerte er sich genau.
Er nahm den Fisch, hielt ihn so, dass das frühe Licht über die unfertige Flanke glitt.
Jemand hatte mit einem spitzen Stein zwei kleine Punkte eingeritzt – an der Stelle, wo Augen sein sollten.
Keine Kinderhand konnte das gewesen sein: Die Rillen waren zu sicher, zu gleichmäßig, wie von jemandem, der schon lange weiß, wo die Augen eines Fisches sitzen.
Aurelio schloss die Finger um den Karpfen.
Er stand auf, ging zurück zum Grenzstein, setzte sich.
Die Sonne erschien hinter dem Höhenzug im Osten, breit und ohne Scham.
Pilar trat aus der Hütte, das Tuch noch nicht gebunden, die Augen schmal vor Schlaf.
Sie blieb stehen, als sie ihren Vater sah – die Hände im Schoß, den Holzfisch aufrecht zwischen den Fingern.
„Fahr nicht ohne Frühstück", sagte er.
Es war das erste Mal seit langen Wochen, dass er etwas gesagt hatte, bevor sie gesprochen hatte.
Pilar kam, setzte sich neben ihn, legte den Kopf nicht an seine Schulter, aber nah genug, dass ihre Arme sich berührten.
Das trockene Seebett lag vor ihnen, rissig, blass, von keiner Brise bewegt.
Aber Aurelio hielt den Fisch, und seine Hände wussten noch, wie man ihn hält, damit er nicht sinkt.
== 102 ==
Eine Orange für Rodrigo
Gloria steht jeden Morgen am Tor des Friedhofs.
Sie hat einen Korb mit frischen Orangen.
Sie verkauft sie für fünf Pesos das Stück.
Das macht sie seit vier Jahren.
Ihr Mann Rodrigo liegt hier begraben.
Er ist vor vier Jahren gestorben.
Sie denkt sehr oft an ihn.
Rodrigo hat Orangen sehr geliebt.
Jeden Abend hat er eine Orange gegessen.
Er hat immer die Schale abgezogen und die Stücke aufgeteilt.
Manchmal hat er Gloria ein Stück gegeben.
Jetzt kaufen die anderen Leute die Orangen.
Heute ist es warm und sonnig.
Ein paar Leute kommen und gehen.
Ein alter Herr kauft zwei Orangen.
Eine Frau mit einem Kind kauft drei Orangen.
Das Kind isst sofort eine.
Gegen Mittag kommt eine junge Frau.
Sie kommt aus dem Friedhof.
Sie trägt einen kleinen Strauß Blumen.
Die Blumen sind schon ein bisschen welk.
Die Frau schaut in den Korb.
„Wie viel kostet eine Orange?", fragt sie.
„Fünf Pesos", sagt Gloria.
Die Frau schaut in ihre Tasche.
„Ich habe leider kein Geld dabei, ich habe es vergessen", sagt sie.
Sie schaut verlegen.
Gloria sagt dann gar nichts.
„Für wen sind die Blumen?", fragt Gloria.
„Für meine Mutter", sagt die junge Frau.
„Sie ist letzte Woche gestorben."
Gloria denkt einen Moment nach.
Dann nimmt sie zwei Orangen aus dem Korb.
Sie gibt sie der jungen Frau.
„Das ist für den Weg nach Hause", sagt Gloria.
„Aber ich habe kein Geld", sagt die Frau noch einmal.
„Das macht nichts", sagt Gloria.
Die junge Frau nimmt die Orangen.
„Gracias", sagt sie leise.
Dann geht sie langsam weg.
Gloria schaut ihr nach.
Die Straße ist wieder ruhig.
Gloria dreht sich zum Friedhof um.
Sie schaut das große Tor an.
Sie denkt wieder an Rodrigo.
Er hat immer gesagt: „Eine Orange am Abend – das ist genug."
Gloria nimmt eine Orange aus dem Korb.
Sie schält sie langsam und ruhig.
Sie isst ein Stück davon.
Die Orange schmeckt heute sehr süß.
Am Abend kommen weniger Leute.
Gloria räumt den Korb auf.
Sie legt die letzten Orangen in eine Tüte.
Dann geht sie auf den Friedhof.
Sie geht zum Grab von Rodrigo.
Sie legt eine Orange auf den Stein.
„Guten Abend, Rodrigo", sagt sie.
Sie setzt sich auf die kleine Bank.
Sie schaut das Grab ruhig an.
Es ist ganz still auf dem Friedhof.
Ein Vogel singt irgendwo.
Gloria steht auf und geht nach Hause.
Die Orange bleibt auf dem Stein.
----------------------------------------------
Drei Pesos
Silvio hat einen großen Orangenbaum im Garten.
Jeden Morgen pflückt er die reifen Orangen.
Er legt die Orangen in einen geflochtenen Korb aus Stroh.
Dann stellt er den Korb an die Straße vor seinem Haus.
Manchmal kaufen die Leute aus dem Dorf welche, manchmal nicht.
Silvios bester Freund Marcos hat das Dorf vor zehn Jahren verlassen.
Er hat in die USA gewollt und ist einfach gefahren.
Danach hat Silvio nichts mehr von Marcos gehört.
Silvio denkt manchmal an ihn, aber er sagt es nicht laut.
Er pflückt die Orangen und stellt den Korb an die Straße, und so sieht sein Tag aus.
An einem Dienstag kommt Pablo vorbei, der Sohn der Nachbarin.
Er hat einen Rucksack auf dem Rücken und ein altes Fahrrad dabei.
„Ich verlasse heute das Dorf", sagt er zu Silvio.
„Und wohin gehst du?", fragt Silvio neugierig.
„In die Stadt, um Arbeit zu finden", sagt Pablo.
Er schaut neugierig in den Korb mit den Orangen.
„Was kostet bei Ihnen eine Orange?", fragt er.
„Fünf Pesos das Stück", antwortet Silvio.
Pablo sucht nach Geld in seiner Hosentasche.
Er zählt die Münzen: es sind nur drei Pesos.
„Ich habe leider nur drei Pesos", sagt er.
Silvio schaut ihn an, dann schaut er auf den Korb.
Er nimmt drei Orangen aus dem Korb heraus.
Er legt die drei Orangen in eine kleine Tüte.
Dann gibt er Pablo die Tüte mit den Orangen.
„Nimm einfach drei Orangen", sagt Silvio.
„Aber ich habe nur drei Pesos", sagt Pablo noch einmal.
„Ich weiß das schon", sagt Silvio ruhig.
Pablo nimmt die Tüte und hält sie einen Moment in der Hand.
„Danke, Silvio", sagt Pablo, und er meint es ernst.
Er steigt auf das Fahrrad und fährt die Straße hinunter.
Silvio schaut ihm nach, bis Pablo um die Kurve verschwunden ist.
Die Straße ist wieder still, und ein Hund bellt irgendwo im Dorf.
Silvio dreht sich um und geht zurück in den Garten.
Er pflückt noch mehr Orangen, denn die Sonne ist jetzt hoch.
Eine einzige Orange legt er für sich beiseite.
Es ist die schönste Orange vom heutigen Tag.
Er nimmt die Orange mit und geht ins Haus.
Im Wohnzimmer hängt ein altes Foto an der Wand.
Das Foto zeigt Silvio und Marcos als junge Männer.
Marcos hält eine Orange und lacht in die Kamera.
Silvio setzt sich auf den Stuhl vor dem Foto.
Er legt die schöne Orange auf den Tisch davor.
Er schaut das alte Foto von Marcos lange an.
Er denkt an Pablo und hofft, dass es ihm gut geht in der Stadt.
Er denkt an Marcos und fragt sich, ob er noch lebt.
Er hat seit zehn Jahren keine Nachricht von ihm bekommen.
Die Orange liegt noch immer auf dem Tisch.
Silvio atmet tief aus und schaut auf den Tisch.
Dann steht er auf und geht zurück in den Garten.
Die Sonne steht jetzt tiefer, und es wird kühler.
Silvio pflückt noch ein paar weitere Orangen.
Er legt die Orangen nach und nach in den Korb.
Dann trägt er den Korb ins Haus und stellt ihn in die Küche.
Im Wohnzimmer ist es jetzt schon etwas dunkel.
Er macht das Licht im Wohnzimmer nicht an.
Er setzt sich wieder auf denselben Stuhl vor dem Foto.
Die Orange liegt noch immer auf dem Tisch.
Silvio schaut die Orange an und denkt an Marcos.
Er sagt gar nichts und bewegt sich nicht.
Draußen bellt der Hund wieder, und es wird langsam dunkel.
Silvio sitzt noch immer auf demselben Stuhl.
Die Orange und das Foto sind jetzt kaum noch zu sehen.
----------------------------------------------
Die Überfahrt
Inés kam jeden Morgen um fünf Uhr ans Fährdock von Paraíso, bevor die erste Fähre die Leinen löste.
Sie stellte die Kiste auf einen alten Holztisch und legte die Orangen in Reihen.
Die größten kamen nach vorne, weil die Leute nach dem Aussehen kauften.
Das hatte ihr Sohn Tomás beigebracht, als er noch morgens mitgekommen war.
Tomás lebte seit zwei Jahren in Mexiko-Stadt und war nicht zurückgekommen.
Er schickte jeden Monat Geld, aber er rief selten an.
Wenn er anrief, sagte er immer: „Bald komme ich, Mamá."
Inés glaubte ihm nicht mehr, aber sie sagte es nicht.
Sie nahm das Messer und ritzte eine Orange an, damit die Leute den Geruch riechen konnten.
Der Saft tropfte auf das Holz, und sie wischte ihn mit dem Tuch ab.
Die ersten Passagiere kamen kurz nach sechs aus dem Parkhaus.
Sie trugen Koffer und schauten auf ihre Handys, ohne die Stände zu beachten.
Inés rief: „Frische Orangen, drei für zehn Pesos!"
Ein Mann kaufte eine, aß sie sofort im Gehen und warf die Schale ins Wasser.
Eine Frau kaufte zwei Orangen und steckte sie in ihre Tasche.
Inés nahm das Geld und legte es in die Schürze.
Gegen acht Uhr wurde es warm, und die Luft roch nach Salz und Diesel.
Die Sonne schien auf das Wasser, und das Licht war sehr hell.
Inés trank einen Schluck Wasser und schaute einen Moment auf das Meer hinaus.
Sie dachte an Tomás, obwohl sie das nicht wollte.
Sie erinnerte sich, wie er als kleines Kind am Dock gesessen hat.
Er warf Steine ins Wasser und lachte so laut, dass man es überall hören konnte.
Dann kam ein junger Mann zum Stand, mit einem großen Rucksack auf dem Rücken.
Er war verschwitzt und schaute die Orangen an, als würde er überlegen.
Dann lachte er kurz auf, weil er eine besonders große Orange sah.
Inés hörte das Lachen und hielt einen Moment inne, das Messer noch in der Hand.
Es war nicht Tomás' Lachen, aber es klang auf eine merkwürdige Weise ähnlich.
Der junge Mann sagte: „Was kosten die Orangen?"
„Drei für zehn", sagte Inés.
„Ich habe nur fünf Pesos", sagte er und zuckte mit den Schultern.
Er schaute sie an, und in seinem Gesicht war keine Erwartung, nur Resignation.
Inés schaute ihn an und sah, dass er dunkle Augen hatte und eine Art zu lachen, die sie an Tomás erinnerte.
„Wohin fährst du?", fragte sie.
„Nach Frontera", sagte er, „und dann weiter in die Stadt."
Er sagte „in die Stadt" so, als wäre das der Beginn von etwas Wichtigem.
Tomás hatte das damals auch so gesagt, an einem Montagmorgen.
Inés nahm vier Orangen und legte sie in eine Tüte.
„Nimm vier", sagte sie und schob ihm die Tüte hin.
„Aber ich habe doch nur fünf Pesos", sagte er noch einmal.
„Das reicht", sagte Inés, ohne ihn anzuschauen.
Der junge Mann nahm die Tüte und hielt sie einen Moment in der Hand.
„Gracias, señora", sagte er, und er meinte es ernst.
Er zögerte kurz, dann ging er zur Wartehalle.
Inés schaute ihm nach, bis er zwischen den anderen Leuten verschwand.
Er stellte den Rucksack ab und aß sofort eine Orange.
Sie sah, wie er dabei lachte, weil der Saft auf sein Hemd tropfte.
Sie drehte sich um und ordnete die Orangen auf der Kiste neu.
Die Fähre kam kurz vor neun an und legte am Dock an.
Die Passagiere gingen nach und nach an Bord, der junge Mann auch.
Inés sah ihn noch einmal kurz, dann war er in der Menge verschwunden.
Sie verkaufte noch einige Orangen an die letzten Leute am Dock.
Dann wurde es ruhig, und die Möwen kamen zurück ans Wasser.
Um elf räumte sie den Stand auf und legte die übrigen Orangen in die Kiste.
Auf dem Weg nach Hause kaufte sie Tomaten und Brot auf dem kleinen Markt.
Zu Hause stellte sie die Kiste in der Küche ab und setzte sich auf den Stuhl.
Auf dem Küchentisch lag ein Foto von Tomás, das er ihr vor drei Jahren geschickt hat.
Er lachte darauf, mit dem Rucksack auf dem Rücken, irgendwo in der Stadt.
Inés nahm eine Orange aus der Kiste und legte sie neben das Foto.
Sie schälte sie nicht, sondern saß einfach da und schaute die Orange an.
Dann nahm sie ihr Telefon und rief Tomás an.
Es klingelte fünfmal, dann kam die Mailbox.
Inés legte das Telefon auf den Tisch, ohne etwas zu sagen.
Sie blieb eine Weile so sitzen.
Draußen hupte ein Auto, die Nachbarin rief nach ihrem Hund.
Die Orange lag neben dem Foto von Tomás.
Inés schloss die Augen und lehnte sich zurück.
----------------------------------------------
Der Bus nach Monterrey
Dolores steht seit sieben Uhr morgens am Rand des Busbahnhofs von Veracruz und verkauft Orangen aus einer Holzkiste.
Es ist Montag, und montags kommen die Busse nach Norden früh.
Die Männer, die einsteigen, haben große Taschen und wenig Geld.
Dolores kennt dieses Gesicht, sie hat es vor acht Jahren auf dem Bahnsteig gesehen.
Damals ist ihr Bruder Miguel in den Bus gestiegen, und der Fahrer ist sofort losgefahren.
Miguel hatte ihr noch winken wollen, aber die Türen schlossen sich, bevor er am Fenster war.
Sie hat den Bus lange angeschaut, bis er um die Ecke verschwunden ist.
Seitdem hat Miguel nie mehr angerufen.
Dolores schält eine Orange, die Bewegung schnell und sicher nach so vielen Jahren.
Sie legt die Spalten auf eine saubere Plastiktüte, damit die Käufer sehen, wie saftig sie sind.
Ein Kind zieht seine Mutter am Arm und zeigt auf die Orangen, aber die Mutter schüttelt den Kopf und geht weiter.
Dolores schaut ihnen nach, bis sie hinter einer Säule verschwinden.
Gegen neun kommt der Bus aus Coatzacoalcos, und mit ihm eine Gruppe junger Männer mit Rucksäcken.
Sie kaufen Wasser und Brötchen beim anderen Händler und gehen an Dolores vorbei, ohne zu schauen.
Einer bleibt stehen.
Er ist vielleicht fünfundzwanzig, trägt einen ausgeblichenen Rucksack auf der linken Schulter, obwohl die rechte Schulter breiter ist.
Miguel hatte seinen Rucksack auch immer links getragen, obwohl man ihm oft gesagt hatte, dass das Rückenprobleme macht.
Der junge Mann schaut die Orangen an.
„Wie viel für eine?", fragt er.
Dolores nennt den Preis.
Er nickt und greift in die Hosentasche.
Er zählt Münzen auf die Kante der Kiste, weil die Holzoberfläche wackelt und die Münzen sonst heruntergleiten.
Dolores nimmt eine Orange, die mittelgroße, die zum Preis passt.
Dann nimmt sie noch zwei weitere und legt alle drei in eine Tüte.
„Für die lange Fahrt", sagt sie.
Der junge Mann schaut sie an.
„Ich hab nur für eine bezahlt."
„Das reicht", sagt Dolores.
Er steckt die Tüte in die Außentasche des Rucksacks.
Dann dreht er sich noch einmal um.
„Danke", sagt er, und er meint es wirklich, weil er dabei stehenbleibt und sie ansieht.
Dolores nickt.
„Wohin?", fragt sie, obwohl sie die Antwort schon kennt.
„Monterrey zuerst", sagt er.
„Und dann weiter."
Sie schaut ihn an, und er hält ihrem Blick stand, ohne zu wissen, warum sie ihn so ansieht.
„Pass auf dich auf", sagt Dolores.
Er geht.
Dolores sieht, wie er sich zu der Gruppe stellt und wie einer der anderen lacht und ihm auf die Schulter klopft.
Dann steigen sie in den Bus, und die Türen schließen sich.
Dolores schaut nicht nach.
Sie schaut auf die Kiste.
Drei Orangen fehlen.
Sie atmet aus.
Der Mittag kommt mit einer Hitze, die die Luft über dem Asphalt flimmern lässt.
Dolores trinkt Wasser aus einer Plastikflasche und isst nichts, obwohl ihre Schwestern immer sagen, dass man in der Hitze essen muss.
Die Busse nach Norden fahren bis zum frühen Nachmittag, dann kommen die Busse in die Dörfer.
Ein Mann mit einem Aktenkoffer kauft vier Orangen und besteht darauf, dass sie einzeln gewogen werden.
Dolores wiegt sie, ohne etwas zu sagen.
Eine Frau mit einem Kleinkind auf dem Arm kauft zwei und fragt, ob sie frisch sind.
„Heute Morgen angeliefert", sagt Dolores, was stimmt.
Gegen vier räumt sie die Kiste zusammen und legt die übrigen Orangen in eine Tüte.
Es sind mehr, als sie gehofft hatte.
Auf dem Heimweg kommt sie an der kleinen Kirche vorbei, in der sie früher mit Miguel zur Messe gegangen ist.
Die Tür steht offen, und durch den Spalt fällt ein schmaler Streifen Licht auf das Pflaster.
Sie geht hinein, obwohl sie das seit Jahren nicht getan hat.
Es ist kühl und still, die Luft riecht nach Wachs und altem Holz.
An der Seitenwand steht eine Nische mit einer Heiligenfigur, davor ein paar Kerzen, von denen einige schon heruntergebrannt sind.
Dolores legt zwei Orangen vor die Figur.
Sie kniet nicht, sie steht nur da und hält die Tüte mit den restlichen Orangen.
Sie denkt nicht an den jungen Mann.
Sie denkt an Miguel, wie er den Rucksack auf die linke Schulter gehoben hat, schief, wie er es immer tat.
Wie er ihr nicht gewinkt hat, weil der Bus schon fuhr.
Wie sie ihn trotzdem lange angeschaut hat, bis er weg war.
Eine Kerze brennt nieder, das Wachs tropft auf den Stein.
Dolores geht.
Die restlichen Orangen trägt sie nach Hause.
Sie isst keine davon.
----------------------------------------------
Die Kerbe im Holz
Rosario stellt die erste Kiste um halb sechs auf das Pflaster des Marktes von Puebla, bevor die Händler der Nachbarstände auch nur die Planen hochgezogen haben.
Sie hebt die Orangen einzeln heraus, dreht jede einmal in der Hand, legt die makellosen nach vorne.
Die übrigen – die mit weichen Stellen, den Dellen, die der Frost hinterlassen hat – kommen nach unten, wo sie niemand sieht.
Ihr Rücken schmerzt.
Das ist kein Gedanke mehr, sondern ein Zustand, den sie verwaltet wie das Wechselgeld in der Blechdose.
Vor vier Jahren wäre Pilar schon jetzt hier gewesen, die Haare noch nass vom Waschen, die Sandalen klappernd auf dem Stein.
Jetzt ist der Platz neben ihr leer, und Rosario füllt ihn mit Kisten.
Das Messer liegt auf dem Holzbrett, die Klinge zum Markt hin, so wie Pilar es immer falsch herum hingelegt hatte und Rosario es immer stumm umgedreht hat.
Heute lässt sie es liegen, wie es liegt.
Die ersten Käuferinnen kommen gegen sieben – Frauen mit Körben, die wissen, was sie wollen, und es ohne viel Worte sagen.
Rosario schneidet, wiegt, kassiert.
Ihre Hände tun das seit fünfunddreißig Jahren, und die Bewegungen haben eine Präzision, die kein Lernen mehr braucht.
Der Saft klebt unter den Nägeln, das Salz des Schweißes brennt in den Rissen der Haut.
Sie bemerkt es nicht.
Gegen elf, als die Hitze das Wellblechdach der Überdachung zum Knacken bringt, kommt der alte Mann.
Er schiebt sich zwischen den Ständen durch, einen Panamahut tief ins Gesicht gezogen, die Schultern leicht gebückt wie jemand, der es gewohnt ist, wenig Raum einzunehmen.
Er bleibt vor Rosarios Stand stehen und schaut die Orangen an, als müsste er eine Entscheidung treffen, die über Obst hinausgeht.
„Drei", sagt er.
Er greift in die Tasche seines Hemdes und zählt Münzen auf das Brett.
Rosario sieht seine Hände.
Die Knöchel sind geschwollen von Arthritis, die Haut dünn wie Zigarettenpapier – und an der Kuppe des rechten Daumens liegt eine alte, breit verheilte Narbe, als hätte einmal ein Messer dort quergelegen.
So eine Narbe hatte ihr Mann Aurelio gehabt, seit er als Zwölfjähriger in eine Säge gefallen war.
Aurelio ist seit sieben Jahren tot.
Rosario hört auf zu atmen.
Nicht lange – nur einen Atemzug lang, den Bruchteil einer Sekunde, in dem das Gehirn eine Gleichung aufstellt, die keine Lösung hat.
Der alte Mann hebt den Kopf.
Er hat das Gesicht eines Fremden, faltig und blass unter der Bräune, die Augen von einem hellen Grau, das Aurelios dunklem Braun in nichts ähnelt.
„Stimmt so?", fragt er.
Rosario schaut ihn an, dann auf seine Hand, dann auf die Orangen.
„Warten Sie", sagt sie.
Sie greift nicht nach den drei Orangen, die sie abgezählt hatte, sondern nach den größten auf der Pyramide – den schwersten, deren Schale noch feucht glänzt von der frühen Morgenkühle.
Sie legt sechs davon auf die Waage, ohne zu wiegen.
„Das sind sechs", sagt der alte Mann.
„Ja", sagt Rosario.
Sie schiebt sie ihm in die Tüte, schließt den Knoten zu, schaut ihn nicht an.
Er steht still.
„Was schulde ich Ihnen?"
„Nichts", sagt sie.
Ihre Stimme klingt ruhiger als sie ist, weil Ruhe das einzige ist, was sie in vierzig Jahren Markt als Strategie gelernt hat.
Der alte Mann nimmt den Hut ab, hält ihn vor der Brust.
Er sagt kein Danke.
Er sagt: „Ich kenne Sie nicht."
„Ich weiß", sagt Rosario.
Er geht.
Rosario sieht seinen Rücken zwischen den Ständen verschwinden, kleiner werden, bis er hinter dem Stand mit den Chilischoten aus dem Blickfeld tritt.
Die Münzen liegen noch auf dem Brett.
Sie legt sie in die Blechdose.
Eine Frau fragt nach dem Preis.
Rosario nennt ihn.
Die Nachmittagssonne wirft lange Schatten durch die Lücken im Dach, der Staub in der Luft wird sichtbar wie Gold.
Rosario denkt nicht mehr an Aurelios Narbe.
Sie denkt an Pilar, an die Art, wie das Mädchen eine Orange schälte – immer von oben, nie in einer Spirale wie Rosario, sondern in kleinen Stücken, die sie in den Mund steckte, ohne sie abzuziehen.
Die Bitterkeit der weißen Haut.
Pilar liebte das.
Gegen sechs klappt Rosario die Kisten zu, schiebt das Holzbrett unter den Stand, wickelt das Messer in ein Tuch.
Sie trägt die letzte Kiste selbst, obwohl der Junge vom Nachbarstand anbietet zu helfen.
Sie wohnt fünfzehn Minuten zu Fuß vom Markt entfernt, in einem Haus, dessen Türschwelle nach Jahrzehnten so ausgetreten ist wie das Bett eines alten Flusses.
Drinnen ist es kühl und dunkel.
An der Wand des vorderen Zimmers hängt ein Bild von Pilar, aufgenommen an einem Schulfest, das Mädchen mit einer Papierkrone auf dem Kopf.
Rosario zündet die Kerze auf dem Regal darunter an.
Sie legt eine Orange davor, die schwerste aus der heutigen Kiste.
Dann setzt sie sich auf den Stuhl am Fenster, das auf den kleinen Innenhof geht.
Sie schält die Orange nicht.
Sie hält sie in beiden Händen, die Schale rau und warm von der Hitze des Tages.
Draußen kräht eine Henne, jemand schüttet Wasser aus.
Rosario denkt, dass sie morgen früh wieder aufstehen wird.
Dass die Kisten schon auf dem Karren stehen.
Dass das Messer, wenn sie es morgen früh aufnimmt, noch scharf sein wird.
Sie weiß nicht, ob sie dem alten Mann die Orangen gegeben hat, weil seine Hand Aurelios Narbe trug, oder weil Pilar einmal gesagt hat, man solle nicht sparsam sein mit dem, was man hat.
Pilar hatte das über Wasser gesagt, über den Fluss.
Rosario drückt die Orange fester.
Die Kerze brennt.
== 103 ==
Opas Garten
Opa Werner ist gestorben.
Er war 78 Jahre alt.
Emma ist sehr traurig.
Ihre Mutter Sabine weint auch.
Die Beerdigung ist am Montag.
Viele Menschen kommen.
Emma kennt die meisten nicht.
Ein Mann sagt: "Werner war ein guter Mensch."
Emma nickt.
Sie denkt: Ja, das stimmt.
Nach der Beerdigung kommen alle ins Haus.
Es gibt Kuchen und Kaffee.
Emma isst nichts.
Sie geht in den Garten hinter dem Haus.
Hier hat Opa oft gesessen.
Sein Stuhl steht noch da.
Emma setzt sich auf den Stuhl.
Er ist kalt und aus Holz.
Sabine kommt nach draußen.
"Bist du okay?", fragt sie.
"Ja", sagt Emma.
Aber das stimmt nicht ganz.
Am nächsten Tag fahren Emma und Sabine zum Schrebergarten.
Das ist Opas Garten am Rand des Dorfes.
Sabine hat den Schlüssel.
Sie gehen rein.
Der Garten ist groß und grün.
Es gibt Tomaten, Salat und viele Blumen.
Alles wächst noch.
Emma schaut sich um.
Sabine sagt: "Opa hat hier jeden Tag gearbeitet."
"Ich weiß", sagt Emma.
In der kleinen Hütte findet Emma etwas.
Es ist eine rote Gießkanne.
Emma nimmt die Kanne.
Sie geht zum Wasserhahn.
Sie füllt die Kanne mit Wasser.
Sabine schaut ihr zu.
"Was machst du?", fragt sie.
"Ich gieße die Pflanzen", sagt Emma.
Emma geht zu den Tomaten.
Sie gießt langsam.
Das Wasser geht in die Erde.
Sabine hilft ihr.
Sie arbeiten zusammen.
Es ist still im Garten.
Dann findet Emma ein kleines Notizbuch.
Es liegt auf dem Tisch in der Hütte.
Emma öffnet es.
Opa hat viele Notizen gemacht.
"Tomaten: jeden Tag gießen", steht da.
"Salat: nicht zu viel Wasser."
"Blumen: am Sonntag düngen."
Emma liest alles.
Sabine liest auch.
"Er hat alles aufgeschrieben", sagt Sabine.
Emma sagt: "Weil er wollte, dass jemand weitermacht."
Sabine schaut Emma an.
Sie sagt nichts.
Aber Emma weiß: Das stimmt.
Emma nimmt das Notizbuch mit nach draußen.
Sie stellt zwei Stühle in die Sonne.
Einen für sich und einen für Sabine.
Dann stellt sie noch einen dritten Stuhl hin.
Sabine fragt: "Für wen ist der dritte Stuhl?"
Emma überlegt kurz.
Dann sagt sie: "Für Opa."
Sabine nickt.
Sie setzen sich.
Die Sonne ist warm.
Die Tomaten wachsen.
Der dritte Stuhl ist leer.
Aber er steht da.
Emma hält das Notizbuch in der Hand.
Sie liest die Notizen noch einmal.
Sabine sagt: "Wir kommen jetzt jeden Sonntag."
"Ja", sagt Emma.
"Jeden Sonntag", sagt sie noch einmal.
Die rote Gießkanne steht neben Opas Stuhl.
Emma kommt morgen wieder.
----------------------------------------------
Das erste Brot
Heinrich ist am Dienstag früh gestorben.
Er war Bäcker, und die Bäckerei hat ihm gehört.
Tom hat den Anruf bekommen und ist sofort nach Triberg gefahren.
Seine Schwester Anna war schon da.
Die Beerdigung war am Freitag.
Es hat geregnet, aber nicht stark.
Der Pfarrer hat gesprochen, und viele Leute haben zugehört.
Anna hat geweint, aber Tom nicht.
Viele Leute kannte Tom nicht.
Sie waren Kunden der Bäckerei.
Eine ältere Frau hat eine Brezel auf den Sarg gelegt.
Tom hat sie angeschaut.
Anna hat gesagt: "Papa hat ihr jeden Morgen eine Brezel reserviert."
Tom hat das nicht gewusst.
Nach der Beerdigung sind sie zur Bäckerei gegangen.
Die Bäckerei war seit einer Woche geschlossen.
Anna hatte den Schlüssel.
Im Laden hat es nach Brot und nach Vanille gerochen.
Tom hat die Augen kurz geschlossen.
Dann hat er sie wieder aufgemacht.
Hinter der Theke hat Heinrichs Schürze gehangen.
Die Schürze war weiß mit einem blauen Rand.
Anna hat die Schürze angeschaut, aber sie hat sie nicht angefasst.
Tom ist hinter die Theke gegangen.
Er hat die Schürze genommen und angezogen.
Anna hat ihn angeschaut.
"Was machst du?", hat sie gefragt.
"Ich weiß es nicht genau", hat Tom gesagt.
Aber er hat die Schürze angelassen.
Im Backraum war alles noch da.
Die Formen, das Mehl und die großen Maschinen standen wie immer.
Tom hat den Ofen angemacht.
"Willst du jetzt backen?", hat Anna gefragt.
"Ja", hat Tom gesagt.
"Am Abend?"
"Ja."
Tom hat Mehl und Wasser und Salz genommen.
Er hat Teig gemacht, und Anna hat ihm geholfen.
Sie haben wenig gesprochen.
Tom hat die Hände in den Teig gelegt, und es hat sich gut angefühlt.
Nach einer Stunde war der Teig fertig.
Tom hat kleine Brötchen geformt.
"Papa hat immer gesagt, Brötchen müssen rund sein", hat Anna gesagt.
"Ich weiß", hat Tom gesagt.
Er hat die Brötchen auf ein Blech gelegt und in den Ofen geschoben.
Es hat nach frischem Brot gerochen.
Der Geruch hat sich im ganzen Laden verteilt.
Anna hat geweint, aber nur kurz.
Tom hat ihr die Hand gegeben.
Sie haben gewartet.
Nach zwanzig Minuten waren die Brötchen fertig.
Tom hat das Blech herausgenommen.
Er hat ein Brötchen aufgeschnitten und Butter darauf gemacht.
Dann hat er es auf einen kleinen Teller gelegt.
Den Teller hat er an die Ecke der Theke gestellt.
Das war immer Heinrichs Platz gewesen.
Anna hat das gesehen.
Sie hat nichts gesagt.
Aber sie hat auch ein Brötchen genommen und gegessen.
Tom hat gegessen.
Die Brötchen waren warm und gut.
Draußen war es schon dunkel.
Der Laden war jetzt hell und warm.
Anna hat gefragt: "Was machen wir morgen?"
Tom hat nachgedacht.
"Wir machen auf", hat er gesagt.
"Die Bäckerei?"
"Ja."
Anna hat ihn angeschaut.
"Kannst du das?"
"Ich versuche es", hat Tom gesagt.
Er hat das letzte Brötchen auf Heinrichs Teller gelegt.
Das erste Brötchen war noch da.
Es war kalt geworden, aber niemand hat es weggenommen.
Tom hat das Licht im Backraum ausgemacht.
Im Laden hat er das Licht anlassen.
"Damit man von draußen sieht, dass jemand da ist", hat er gesagt.
Anna hat genickt.
----------------------------------------------
Elfriedes Knopfdose
Nina fuhr noch am selben Morgen mit dem Zug von Stuttgart nach Erfurt.
Lutz hatte nur gesagt: "Oma ist heute Nacht eingeschlafen."
Eingeschlafen – das war das Wort, das er benutzte.
Nina hatte das Handy weggelegt und war eine Stunde später am Bahnhof gewesen.
Lutz wartete draußen vor dem Eingang, die Schultern hochgezogen.
Er winkte ihr zu.
"Ich bin froh, dass du gekommen bist", sagte er.
Nina umarmte ihn kurz, und er ließ es geschehen.
Die Trauerfeier war klein, weil Elfriede das so gewollt hatte.
Keine Blumengestecke, keine Musik, keine langen Reden.
Der Pfarrer sprach zwanzig Minuten, dann war es vorbei.
Am Grab standen vielleicht dreißig Leute – Nachbarn, Freundinnen, Leute aus dem Chor.
Lutz stand ganz still, die Hände vor dem Bauch gefaltet.
Seine Augen waren rot, aber er weinte nicht.
Eine Nachbarin legte eine einzige gelbe Tulpe auf den Sarg.
Nina hatte nicht gewusst, dass das Elfriedes Lieblingsblume war.
Man vergisst vieles, wenn man zu lange wegbleibt.
Nach der Beerdigung fuhren sie mit dem Bus in die Johannesstraße.
Das Wohnhaus war ein grauer Plattenbau aus den Siebzigern.
Elfriede hatte dort vierzig Jahre lang gewohnt.
Im Fahrstuhl roch es nach Putzmittel und altem Teppich.
Lutz schloss die Wohnungstür auf, und beide blieben einen Moment im Flur stehen.
"Ich war seit zwei Wochen nicht mehr hier", sagte Lutz leise.
Die Wohnung war ordentlich, fast wie immer.
Auf dem Küchentisch lagen drei Servietten, sauber gefaltet, und daneben stand ein leeres Glas.
Nina sah das Glas an.
Elfriede hatte jeden Abend ein Glas Wasser auf den Tisch gestellt, seit Nina denken konnte.
Lutz öffnete den Kühlschrank.
"Sie hat letzte Woche noch eingekauft", sagte er.
Nina sah Karotten, eine halbe Sellerieknolle und ein Stück Fleisch in Folie.
Sie nahm die Karotten heraus und legte sie auf die Arbeitsfläche.
"Ich mache die Suppe", sagte sie.
Lutz schaute sie an.
"Welche Suppe?"
"Die, die sie immer gemacht hat."
In der Schublade neben dem Herd fand Nina eine alte Rezeptkarte.
Die Schrift war klein und schief, mit Bleistift geschrieben.
"Fleischbrühe mit Gemüse" stand oben drauf.
Darunter, in kleinen Buchstaben: "Nicht zu viel Salz, das schadet dem Herz."
Nina musste lachen.
Es war ein kurzes, echtes Lachen, das sie selbst überraschte.
Lutz lehnte an der Küchentür und sah ihr zu.
Nina schnitt die Karotten, und Lutz schälte den Sellerie.
Sie sprachen wenig, aber es war kein schlechtes Schweigen.
"Sie hat immer gesagt, beim Kochen denkt man besser", sagte Lutz irgendwann.
"Stimmt", sagte Nina.
Der Topf dampfte, und die Küche wurde langsam warm.
Es roch nach Brühe und nach den Sonntagen aus der Kindheit.
Nina stellte drei Teller auf den Tisch.
Lutz sah den dritten Teller an und schwieg.
"Sie soll nicht alleine essen", sagte Nina.
Lutz nickte langsam und setzte sich.
Der dritte Platz blieb leer.
Sie aßen langsam, ohne Radio, ohne Fernsehen.
Die alte Küchenuhr tickte, die Elfriede seit dreißig Jahren hatte.
Lutz schöpfte sich noch einmal nach.
"Es schmeckt fast genauso", sagte er.
"Fast", sagte Nina.
Nach dem Essen blieben sie noch lange am Tisch sitzen.
Lutz holte eine Flasche Rotwein aus dem Schrank.
"Sie hat den immer für Gäste aufgehoben", sagte er.
"Dann sind wir heute Gäste", sagte Nina.
Lutz lachte kurz.
Er zog eine alte Schachtel unter dem Tisch hervor.
Darin lagen Fotos, Briefe und eine kleine runde Dose.
"Was ist das?", fragte Nina.
Lutz öffnete die Dose.
Darin lagen Knöpfe – weiß, braun, rot, groß, klein, durcheinander.
"Sie hat nie einen weggeworfen", sagte Lutz.
Nina griff in die Dose und nahm einen großen blauen Knopf heraus.
Vier Löcher, rau an den Rändern.
"Der war an ihrer Sonntagsjacke", sagte Lutz.
Nina steckte ihn in ihre Jackentasche.
Sie redeten noch lange – über die Kindheit, über Elfriede, über Dinge, die sie lange nicht mehr besprochen hatten.
Als Nina ging, war es schon nach Mitternacht.
Sie stellte ihr Weinglas neben das leere Glas auf dem Tisch.
Lutz sah es und sagte nichts.
"Ich rufe dich morgen an", sagte er.
Nina nickte und ging.
Im Fahrstuhl nach unten spürte sie den Knopf in der Tasche.
----------------------------------------------
Der letzte Herbst am Gasthof
Felix hatte den Anruf erwartet, und doch traf er ihn wie ein Schlag.
Sein Vater Otto war am Morgen gestorben, ruhig, in seinem Sessel, das Radio noch an.
Drei Stunden später saß Felix im Zug nach Garmisch.
Er schaute nicht aus dem Fenster.
Das kleine Dorf Unterbach lag am Ende einer Nebenstraße, hinter dem letzten Hang, den der Herbst schon kahl gefegt hatte.
Herta, seine Tante, stand am Tor des Gasthofs, als er ankam.
Sie war kleiner geworden, oder er hatte sie so in Erinnerung behalten – groß und laut und immer mit einem Handtuch über der Schulter.
Jetzt stand sie einfach da.
Sie sagte: „Er ist ohne Schmerzen gegangen."
Felix nickte.
Er wusste nicht, ob das ein Trost war oder nur ein Satz, den man sagt, weil man sonst nichts hat.
Die Beerdigung fand zwei Tage später statt, auf dem kleinen Friedhof am Waldrand.
Der Pfarrer kannte Otto gut und sprach nicht lange.
Er erzählte von einem Mann, der seinen Gästen immer ein zweites Glas hingestellt hatte, bevor sie darum baten.
Felix musste kurz lächeln.
Das stimmte.
Ein paar alte Männer aus dem Dorf standen am Grab, die Hüte in den Händen.
Der Regen kam leise, kaum zu hören.
Als der Sarg in die Erde kam, legte Herta eine Kastanie darauf – eine einzige, glänzend braun.
Niemand fragte warum.
Felix dachte: Weil Otto jeden Herbst Kastanien gesammelt hat, seit er denken kann, und niemand je wusste wozu.
Jetzt wusste er es.
Nach der Beerdigung gingen alle zusammen in den Gasthof.
Herta hatte Rinderbrühe gemacht, so wie Otto sie immer wollte.
Die alten Männer aßen schweigend und gingen früh.
Als der letzte Gast gegangen war, blieb Felix in der Gaststube sitzen.
Herta räumte die Teller ab, ohne ihn zu bitten, ihr zu helfen.
Sie kannte ihn gut genug.
Die Gaststube roch nach Holz und Bier und nach dem Tabak, den Otto geraucht hatte, obwohl er es seit Jahren aufgegeben hatte.
Manche Gerüche bleiben, auch wenn die Person weg ist.
Felix stand auf und ging hinter die Theke.
Er fand die Flasche Schnapps im zweiten Regal, genau da, wo sie immer gestanden hatte.
Er schenkte zwei Gläser ein und stellte ein drittes, kleines, an die Ecke der Theke – auf den Platz des Vaters, wo Otto immer gesessen hatte.
Herta sah es und sagte nichts.
Sie nahm ihr Glas und trank einen kleinen Schluck.
„Er hätte dir das Doppelte eingeschenkt", sagte sie.
„Ich weiß", sagte Felix.
Sie schwiegen eine Weile.
Felix schaute sich in der Gaststube um – die Holzvertäfelung, die alten Fotos an der Wand, das Regal mit den Bierkrügen, die niemand mehr benutzte.
Auf einem der Fotos sah man Otto als jungen Mann, lachend, ein Bierfass auf der Schulter.
Felix hatte das Foto noch nie wirklich angeschaut.
Er nahm es von der Wand.
Herta sagte: „Du siehst ihm ähnlich."
Felix legte das Foto auf die Theke, neben das Glas des Vaters.
„Er hat nie gejammert", sagte Herta, während sie ein Tuch über die Tische zog, „nicht einmal am Ende."
Felix wusste das.
Sein Vater hatte Schmerzen gehabt, lange schon, aber er hatte weiter aufgemacht, weiter eingeschenkt, weiter zugehört.
Das war das Einzige, was er konnte, und es war genug.
Herta stellte sich neben Felix und sah auf das Foto.
„Was machst du jetzt mit dem Gasthof?", fragte sie.
Felix schaute auf das dritte Glas, das unberührt an der Ecke stand.
„Ich weiß es noch nicht."
Das war keine Ausrede.
Es war die Wahrheit, und Herta wusste das.
Sie sagte nichts weiter.
Später machte Felix das Licht in der Gaststube aus, aber er ließ die kleine Lampe über der Theke brennen.
Das hatte Otto immer so gemacht – damit man von draußen sieht, dass jemand da ist.
Draußen auf der Terrasse war es kalt, aber Felix setzte sich trotzdem auf die alte Bank unter dem Vordach.
Das Tal lag dunkel vor ihm, die Lichter des Dorfes klein und verstreut.
Die Berge dahinter waren nicht zu sehen, aber er wusste, dass sie da waren.
Herta brachte ihm eine Decke, ohne ein Wort.
Sie setzte sich neben ihn.
Eine Weile saßen sie so – in der Kälte, unter dem Tropfen des Dachs.
„Weißt du noch", sagte Felix, „dass er uns früher immer hierhergebracht hat, wenn wir nicht schlafen konnten?"
Herta lachte leise.
„Er hat gesagt, die Berge hören besser zu als die Menschen."
Felix nickte.
Er hatte das damals nicht geglaubt.
Jetzt saß er hier und dachte: Vielleicht stimmte es.
Die Berge standen wie immer.
Die Terrasse roch nach nassem Holz und Herbstlaub.
Felix holte die Schnapsflasche, die er mitgenommen hatte, und schenkte nach.
Das dritte Glas, das er aus der Gaststube mitgebracht hatte, stellte er auf das Geländer.
Er füllte es.
Herta sah ihn an und sagte nichts.
Felix hob sein Glas: „Auf den alten Narren."
Herta hob ihres.
Das dritte Glas stand auf dem Geländer, der Schnaps glänzte darin.
Der Wind kam von den Bergen, langsam und kalt, so wie immer in dieser Jahreszeit.
----------------------------------------------
Das Watt wartet nicht
Der Zug, der Kathrin durch das flache Marschland trug, fuhr seit einer Stunde gegen den Wind.
Drüben im Watt stand das Wasser, grau und reglos wie ein vergessenes Versprechen.
Sie sah hinaus.
Rolf hatte ihr drei Wörter geschrieben: Mutter. Heute Nacht. Komm.
Drei Wörter, wie er es immer tat – ohne Beiwerk, ohne Erklärung, als ob Kürze den Schmerz erträglicher machte, als ob Schweigen schützte.
Kathrin hatte das Handy beiseitegelegt und zwanzig Minuten lang die Deckenverkleidung angestarrt.
Husum empfing sie mit tiefhängendem Nebel und Rolf, der am Bahnhof stand, die Hände in den Taschen seiner Ölhaut.
Er nickte ihr zu.
Kein Wort, keine Umarmung – nur dieses Nicken, das seit Kindertagen bedeutete: Ich bin hier, es reicht.
Die Trauerfeier fand in der kleinen Backsteinkirche am Hafen statt, deren Turm Ingeborg Halm ihr ganzes Leben lang beim Frühstück gesehen hatte.
Der Pastor sprach über das Meer als Metapher, über Aufbruch und Wiederkehr, über Wasser, das trägt.
Rolf schüttelte kaum merklich den Kopf.
Kathrin verstand ihn: Ihre Mutter hatte das Meer nicht geliebt.
Sie hatte es respektiert, so wie man etwas respektiert, das einen täglich bedroht und ernährt zugleich.
Draußen regnete es waagerecht.
Der kleine Friedhof lag hinter der Kirche, eingezwängt zwischen alten Grabsteinen und dem Deich, auf dem der Wind heulte.
Als der Sarg hinabgelassen wurde, warf Rolf eine Handvoll Sand hinein – Wattschlick, den er morgens vom Hafensteg mitgebracht hatte, noch feucht, fast schwarz.
Kathrin fragte ihn nicht warum.
Sie wusste es.
Mutter hatte dort gestanden, jeden Morgen, solange ihre Knie es erlaubten, und das Wasser beobachtet, das kam und ging und nichts dafür wollte.
Nach der Bestattung gingen sie zu Fuß zurück – durch die leeren Gassen, vorbei an den Klinkerhaustüren, hinter denen das Leben weiterging.
Ein Hund bellte einmal, dann war er still.
Ingrid, die Nachbarin, drückte Kathrin ein Paket in die Hand: selbst gebackenes Graubrot und ein Glas Butterschmalz, weil das die Mutter immer gehabt haben wollte.
Kathrin hielt das Paket so, als ob es zerbrechlich wäre.
Das Elternhaus roch nach Teer und Lavendel, nach altem Holz und nach der Kälte, die kommt, wenn Räume nicht mehr beheizt werden, weil man wartet.
Rolf hatte den Ofen angemacht, bevor sie ankamen, aber die Wärme hatte noch nicht durchgegriffen.
Auf dem Küchentisch stand die Kaffeekanne, noch mit einem Rest von gestern.
Neben der Kanne stand eine Tasse.
Kathrin sah sie an: die weiße Tasse mit dem blauen Rand, die Mutter jeden Morgen benutzt hatte, seit Kathrin denken konnte.
Rolf hatte sie nicht weggeräumt.
Er hatte sie nicht einmal gespült.
Er setzte sich an den Tisch, ohne ein Wort.
Kathrin stellte die Kanne auf den Herd, obwohl der Kaffee vom Vortag war und nach nichts schmecken würde.
Das Aufwärmen war nicht für den Kaffee.
Als sie einschenkte – zwei volle Tassen und einen knappen Fingerbreit in die blaue Tasse der Mutter –, sah Rolf sie nicht an.
Aber er trank auch nicht, bevor die dritte Tasse stand.
Sie saßen lange so.
Einmal sagte Rolf: „Sie hat noch Freitagabend die Netze geflickt."
Kathrin nickte.
„Die Nadel liegt noch in dem Korb, den du ihr zu Weihnachten geschickt hast."
Das war eine Anklage und keine, je nachdem wie man es hören wollte.
Kathrin ließ es stehen.
Aus der Schublade zog Rolf einen vergilbten Briefumschlag, dessen Inhalt er kannte, ohne hineinzusehen – die alte Seekarte der Bucht, handgezeichnet, von einem Vater, den keiner von ihnen je kannte.
Mutter hatte sie aufbewahrt, weil es das Einzige war, das von ihm geblieben war.
Kathrin streckte die Hand aus, nahm die Karte, legte sie ungeöffnet auf den Tisch.
Schweigen ist in manchen Familien keine Abwesenheit von Sprache, sondern deren dichteste Form.
Irgendwann – es war schon nach Mitternacht – stand Rolf auf und warf Holz nach.
Die Flammen schlugen kurz auf, dann legten sie sich.
„Morgen früh fahre ich raus", sagte er, „du kannst mitkommen."
Es war keine Frage.
Kathrin sah auf die Tasse ihrer Mutter, die noch halb voll war und kalt.
„Ja", sagte sie.
Das Boot roch nach Diesel und Salzwasser und nach dem alten Tau, das Rolf nie ersetzte, weil Mutter es eingeflochten hatte.
Sie fuhren hinaus, noch vor Sonnenaufgang, das Watt auf beiden Seiten flach und silbern.
Kein Wort fiel, während das Boot den Priel entlangglitt.
Kathrin stand am Bug, der Wind schlug ihr das Haar ins Gesicht, sie ließ es.
Rolf steuerte auswendig, die Augen auf Punkte gerichtet, die nur er kannte.
Irgendwo, wo das Wasser tiefer wurde und die Küste sich hinter dem Dunst verlor, drosselte er den Motor.
Das Boot schaukelte.
Rolf griff in seine Jackentasche und zog eine kleine Blechdose heraus.
Kathrin verstand sofort: das, was von Mutter übrig geblieben war, was man in eine Dose füllen und aufs Meer bringen konnte.
Kein Wort darüber war zwischen ihnen gewechselt worden, kein Plan gemacht.
Manche Dinge weiß man, ohne sie besprechen zu müssen, wenn man dieselbe Kindheit hatte.
Rolf öffnete die Dose.
Kathrin streckte die Hand aus.
Er schüttete die Hälfte in ihre Handfläche.
Sie standen so – nebeneinander, die Hände offen, das Boot schaukelnd –, bis der Wind drehte.
Dann ließen sie los.
Die Asche flog nicht weit.
Das Wasser nahm sie sofort.
Rolf schloss die leere Dose und steckte sie wieder in die Tasche.
„Sie hat gesagt, das Watt gibt nichts zurück", sagte er.
„Stimmt nicht", sagte Kathrin.
Rolf sah sie an, fragte nicht.
Sie drehte sich zum Wasser um: Das Watt gab alles zurück – nur anders, nur später, nur wenn man nicht mehr danach suchte.
Rolf ließ den Motor wieder an.
Sie fuhren zurück, gegen den Wind.
Zuhause brannte der Ofen noch.
Die blaue Tasse stand auf dem Tisch.
== 104 ==
Das weiße Hemd
Anna ist nach Hause gekommen.
Sie hat einen Koffer mitgebracht.
Ihre Eltern wohnen in Landsberg.
Das Haus ist klein und weiß.
Die Mutter heißt Renate.
Renate steht an der Tür.
„Anna!", sagt sie.
Sie umarmt Anna.
Der Vater ist bei der Arbeit.
Anna hat ihr altes Zimmer.
Das Bett ist noch das alte.
Sie stellt den Koffer auf den Boden.
Sie setzt sich auf das Bett.
Sie schaut aus dem Fenster.
Der Garten ist noch da.
Der Apfelbaum hat Äpfel.
Nichts hat sich verändert.
Am nächsten Morgen geht Anna in die Bäckerei.
Sie will Brot kaufen.
Die Bäckerei ist in der Hauptstraße.
Anna öffnet die Tür.
Sie sieht Peter.
Peter steht vor der Theke.
Er hat ein kleines Mädchen dabei.
Das Mädchen ist ungefähr zwei Jahre alt.
„Hallo, Anna", sagt Peter.
Er ist überrascht.
„Hallo, Peter", sagt Anna.
Das Mädchen schaut Anna an.
Es hat braune Augen.
„Wie heißt du?", fragt Anna das Mädchen.
„Lea", sagt Peter.
„Sie heißt Lea Anna."
Anna hört das.
Sie sagt nichts.
Peter bezahlt sein Brot.
„Kommst du kurz raus?", fragt er.
Anna nickt.
Draußen ist es kalt.
Peter hat eine Jacke.
Anna hat keine.
„Wann bist du zurückgekommen?", fragt er.
„Gestern", sagt Anna.
„Wie war es im Kloster?"
„Es war gut", sagt Anna.
„Und dann bin ich gegangen."
Peter nickt.
Er schaut auf das Mädchen.
„Ihr zweiter Name ist Anna", sagt er.
Anna schaut ihn an.
„Warum?", fragt sie.
„Ich habe immer an dich gedacht", sagt Peter.
Anna nickt langsam.
„Sie ist hübsch", sagt Anna.
Sie geht.
Renate fragt nicht viel.
Das ist gut.
Anna geht in ihr Zimmer.
Sie denkt nicht an Peter.
Sie denkt an das Kloster.
Im Kloster ist es immer still.
Hier ist es auch still.
Aber es ist anders.
Am nächsten Morgen holt Anna das weiße Hemd aus dem Koffer.
Das Hemd hat sie im Kloster getragen.
Es ist ein bisschen schmutzig.
Anna wäscht es im Waschbecken.
Das Wasser wird grau.
Sie wringt das Hemd aus.
Dann legt sie es auf die Heizung.
Renate kommt herein.
Sie sieht das Hemd.
„Was ist das?", fragt sie.
„Ein Hemd aus dem Kloster", sagt Anna.
Renate nickt.
Sie geht wieder raus.
Anna trinkt Tee.
Das Hemd trocknet auf der Heizung.
Es ist weiß.
Anna lässt es dort.
----------------------------------------------
Die Schürze
Sara ist mit dem Zug nach Zirl gefahren.
Die Fahrt hat zwei Stunden gedauert.
Oma Hilde wohnt in einem kleinen Haus am Dorfrand.
Sara hat an der Tür geklingelt.
Oma Hilde hat sofort geöffnet.
„Du bist endlich da!", hat sie gesagt.
Sie hat Sara umarmt und ins Haus geführt.
Das Haus war warm und hat nach Suppe gerochen.
Sara war müde, aber sie war auch froh.
Sie hat den Rucksack ins alte Zimmer gebracht.
Das Zimmer war klein, aber es war ordentlich.
Auf dem Bett lag eine braune Wolldecke von früher.
Sara hat sich aufs Bett gesetzt und aus dem Fenster geschaut.
Die Berge waren nah und haben grau ausgesehen.
Oma Hilde hat Tee gebracht.
„Bist du hungrig?", hat sie gefragt.
„Ja, ein bisschen", hat Sara gesagt.
Am nächsten Morgen ist Sara in den Dorfladen gegangen.
Sie hat Seife und Shampoo gebraucht.
Der Laden war klein, aber es gab alles.
Sara hat die Regale angeschaut, als sie Felix gehört hat.
Sie hat seine Stimme sofort erkannt.
Felix hat an der Kasse gestanden und mit der Verkäuferin geredet.
Neben ihm hat eine Frau gestanden, sie hatte ein Kind auf dem Arm.
Das Kind war ungefähr zwei Jahre alt.
Felix hat Sara gesehen.
Er ist ein bisschen rot geworden.
„Hallo, Sara", hat er gesagt.
„Hallo, Felix", hat Sara gesagt.
Sie hat das Shampoo fest in der Hand gehalten.
Felix hat Sara der Frau vorgestellt.
„Das ist Lisa, meine Freundin", hat er gesagt.
Lisa hat kurz genickt.
„Und das ist Mia", hat Felix gesagt.
Das Kind hat Sara neugierig angeschaut.
„Hallo, Mia", hat Sara gesagt.
Das Kind hat gelacht.
Sara hat bezahlt und ist dann nach draußen gegangen.
Felix ist ihr gefolgt.
Lisa ist im Laden geblieben.
Draußen war es kühl und die Sonne hat auf die Berge geschienen.
„Wie lange bist du schon zurück?", hat Felix gefragt.
„Seit gestern", hat Sara gesagt.
Er hat genickt.
„Und wie geht es dir?"
„Gut", hat Sara gesagt.
„Ich glaube schon."
Er hat gezögert, dann hat er gesagt: „Mias zweiter Name ist Sara."
Sara hat nichts gesagt.
Sie hat auf die Berge geschaut.
„Warum?", hat sie dann gefragt.
„Ich habe dich nicht vergessen", hat er gesagt.
Das war schwer zu hören.
„Ich muss jetzt gehen", hat Sara gesagt.
Felix hat sie nicht aufgehalten.
Sara ist schnell nach Hause gegangen.
Oma Hilde hat gefragt: „Alles okay?"
„Ja", hat Sara gesagt, aber das hat nicht ganz gestimmt.
Sie hat sich ins Zimmer gesetzt und die Tür zugemacht.
Sie hat nicht an Felix gedacht, sondern an das Kloster.
Sie hat an die Stille dort gedacht und an den langen Gang.
Hier gab es keinen langen Gang, und das hat ihr gefehlt.
Am nächsten Morgen hat Sara die weiße Schürze aus dem Rucksack geholt.
Die Schürze hat sie im Kloster immer in der Küche getragen.
Sie hat sie in der Spüle mit Handseife gewaschen.
Das Wasser ist grau geworden.
Dann hat sie die Schürze auf den Balkon gehängt.
Oma Hilde hat es gesehen.
„Was ist das?", hat sie gefragt.
„Eine Schürze vom Kloster", hat Sara gesagt.
Oma Hilde hat genickt und ist wieder hineingegangen.
Sara hat den Kaffee getrunken und die Schürze angeschaut.
Die Schürze hat im Wind ein bisschen gewackelt.
Sara wollte sie nicht wegwerfen.
Aber sie hat nicht gewusst, wohin damit.
----------------------------------------------
Die weiße Haube
Lena war mit dem Bus nach Duisburg gefahren, die Fahrt hatte fast drei Stunden gedauert.
In ihrem Rucksack hatte sie nur das Nötigste für die ersten Tage.
Ihre Tante Gerda wohnte in der Wanheimer Straße, im zweiten Stock eines alten Hauses.
Lena klingelte, und Gerda öffnete die Tür so schnell, als hätte sie nur darauf gewartet.
„Ich hab schon auf dich gewartet", sagte Gerda.
Sie umarmte Lena kurz und ließ sie dann herein.
Die Wohnung roch nach Kaffee und dem alten Teppich, wie Lena es in Erinnerung hatte.
Lena stellte den Rucksack ab und schaute sich um, ohne etwas zu sagen.
An den Wänden hingen die gleichen Fotos wie früher.
Gerda hatte das Sofa als Bett vorbereitet, weil das Gästezimmer gerade renoviert wurde.
Lena setzte sich hin und betrachtete ein altes Foto, das sie als Kind zeigte.
„Hast du Hunger?", fragte Gerda.
„Nein, danke", sagte Lena, obwohl sie seit dem Mittag nichts gegessen hatte.
Am Abend wollte Lena an die frische Luft gehen.
Gerda erklärte ihr den Weg zum Rhein, und Lena machte sich allein auf den Weg.
Der Fluss lag schwarz und breit vor ihr, die Lichter der anderen Seite spiegelten sich im Wasser.
Die Luft roch nach Diesel und dem Fluss, und es war kälter als erwartet.
Ein Frachtschiff fuhr langsam am anderen Ufer entlang und verschwand in der Dunkelheit.
Lena blieb an der Reling stehen und schaute eine Weile auf das Wasser.
Dann hörte sie ein Lachen hinter sich, das sie sofort kannte.
Marco saß auf einer Decke am Ufer, neben einer Frau mit einem kleinen Mädchen auf dem Arm.
Lena erkannte ihn sofort, obwohl es schon dämmerte.
Vier Jahre änderten ein Gesicht nicht so sehr, wie sie gedacht hatte.
Er sah sie auch.
Er stand auf.
Lena überlegte kurz, ob sie einfach weitergehen sollte.
Aber er hatte sie schon gesehen, und es gab keinen Ausweg, der nicht unhöflich gewesen wäre.
„Hallo, Lena", sagte er.
„Hallo, Marco."
Er stellte sie der Frau vor.
„Das ist Nadine", sagte er.
Nadine nickte in Lenas Richtung, aber sie lächelte nicht.
„Und das hier ist Emma", sagte Marco und hob das Mädchen in die Höhe.
„Emma Lena."
Lena betrachtete das Kind, das braune Augen hatte und lachte.
„Warum?", fragte Lena.
Marco dachte kurz nach.
„Weil ich es wollte", sagte er, und es klang einfacher als es war.
Lena schaute aufs Wasser und sagte nichts für eine Weile.
„Sie ist hübsch", sagte Lena schließlich.
Nadine zog die Jacke des Mädchens zu und stand auf.
„Wir müssen heim", sagte sie.
Dann gingen die beiden, ohne zu warten, bis Lena noch etwas gesagt hätte.
Lena blieb allein am Ufer, und das Wasser bewegte sich ruhig weiter.
Sie ging langsam zurück zu Gerda, der Weg schien länger als vorhin.
Gerda saß noch am Tisch und trank einen Tee, fragte aber nichts.
Das war das Richtige.
Lena schlief schlecht auf dem Sofa und hörte den Straßenverkehr draußen.
Sie dachte nicht an Marco.
Sie dachte an den Klostergarten, wo sie jeden Morgen eine halbe Stunde allein war.
Hier gab es keinen Garten.
Gehen war leicht, aber Ankommen war schwerer als sie gedacht hatte.
Am Morgen stand sie früh auf, bevor Gerda aufwachte.
Sie holte die weiße Haube aus dem Rucksack, die sie als Novizin getragen hatte.
Sie wusch sie in einer Schüssel mit kaltem Wasser und etwas Seife.
Dann legte sie die Haube auf das Fensterbrett, damit sie trocknen konnte.
Gerda kam in die Küche und sah die Haube auf dem Fensterbrett.
Sie stellte zwei Tassen auf den Tisch, ohne etwas zu fragen.
Das war das Klügste, was sie tun konnte.
Lena machte Kaffee und schaute auf die Straße hinunter.
Unten fuhr ein Lkw vorbei, der Lärm war kurz und dann weg.
Die Haube lag weiß auf dem grauen Fensterbrett.
Der Himmel über Duisburg war bewölkt, kein blauer Fleck.
Ein kalter Luftzug kam durch den Spalt des Fensters.
Die Haube bewegte sich leicht.
Sie war dünn und fast durchsichtig nach all den Jahren des Waschens.
Lena trank den Kaffee und schaute weiter.
Sie wusste noch nicht, was sie später damit tun wollte.
Sie konnte sie nicht wegwerfen.
Nicht heute.
----------------------------------------------
Das Kleid im Koffer
Maren kam mit dem Zug, und der Bahnhof war wie immer zu klein für die Koffer, die die Leute mitbrachten.
Ihr eigener Koffer war alt und rollte schief, weil ein Rad gebrochen war.
Sie zog ihn durch die Unterführung und roch das Meer, noch bevor sie es sah.
Kurt stand vor dem Ausgang, die Hände in den Taschen, der Kragen hochgestellt gegen den Wind.
Er hatte nicht gewinkt.
„Der Zug hatte Verspätung", sagte Maren.
„Ich weiß", sagte er.
„Ich war trotzdem früh."
Sie gingen nebeneinander, ohne sich zu berühren.
Die Straße zur alten Fischergasse war so uneben wie früher.
Das Haus roch nach Öl und Salz und dem alten Linoleum im Flur, das Kurt nie ausgetauscht hatte.
Er hatte ihr altes Zimmer so gelassen, wie es war – das war seine Art von Willkommen.
Maren legte den Koffer auf das Bett, ohne ihn aufzumachen.
Sie setzte sich ans Fenster und sah auf den Hafen, wo die Kutter still im Wasser lagen.
Eine Möwe schrie einmal, dann war es still.
Kurt klopfte und fragte, ob sie Hunger hatte.
Sie sagte nein, obwohl sie seit dem Morgen nichts gegessen hatte.
Am Abend ging Kurt ins Hafenlokal, wie jeden Donnerstag.
Maren blieb eine Stunde allein, dann zog sie die Jacke an und folgte ihm.
Das Lokal war niedrig und warm, die Luft roch nach Frittierfett und nassem Holz.
Kurt saß an seinem Stammplatz, ein Glas Pils vor sich, und sprach mit dem Wirt.
Maren nahm einen Platz am Tresen und bestellte einen Tee, weil sie nicht wusste, was sie sonst hätte bestellen sollen.
Dann sah sie Stefan.
Er saß an einem der Ecktische, mit einer Frau, die Maren nicht kannte, und einem kleinen Jungen auf dem Schoß.
Der Junge schlief fast, der Kopf lag auf Stefans Schulter.
Stefan sah sie, und sein Gesicht veränderte sich kurz, bevor es wieder still wurde.
Er stand nicht auf.
Maren trank ihren Tee und bestellte einen Korn hinterher.
Später räumten die letzten Gäste das Lokal, die Stühle wurden hochgestellt, der Wirt wischte die Theke.
Kurt sagte ihr Bescheid und ging, weil er früh aufstehen musste.
Maren blieb noch, weil sie noch nicht nach Hause konnte.
Stefan brachte die Frau und den Jungen nach draußen, dann kam er zurück und setzte sich auf den Hocker neben ihr.
„Ich hab nicht gewusst, dass du zurückkommst", sagte er.
„Ich hab es selbst nicht lange gewusst."
Er bestellte auch einen Korn, aber er trank ihn nicht sofort.
„Wie lange warst du weg?"
„Drei Jahre und vier Monate."
Er nickte, als hätte er nachgezählt.
„Und jetzt?"
„Ich bin einfach zurück."
Der Wirt stellte die Gläser hoch und wartete, dass sie fertig waren.
Draußen war es windig und dunkel, die Laterne am Kai wackelte.
Stefan blieb stehen, die Hände in den Hosentaschen.
„Er heißt Lars", sagte er.
„Zweiter Vorname ist Maren."
Sie sah ihn an.
„Das ist ungewöhnlich."
„Petra hat es so gewollt."
Maren nickte langsam.
„Warum hat sie es so gewollt?"
Stefan schwieg eine Weile, dann sagte er: „Weil sie weiß, wie es war."
Maren sah zum Wasser, wo die Kutter im Dunkeln lagen.
„Er ist ein hübsches Kind."
„Ja", sagte Stefan.
Er wartete, ob sie noch etwas sagte.
Sie sagte nichts mehr.
Sie gingen in verschiedene Richtungen.
Maren schlief schlecht, weil das Bett noch so war wie früher und das Rauschen des Meeres nachts lauter klang, als sie es in Erinnerung hatte.
Am Morgen stand sie früh auf, während Kurt noch schlief.
Sie öffnete den Koffer und holte das Kleid heraus – das weiße, das sie als Novizin getragen hatte, lang und gerade geschnitten, von der Reise leicht verknittert.
Sie wusch es in der Badewanne mit Handseife, und das Wasser wurde grau.
Sie wrang es aus und trug es in den Garten, wo die Leine zwischen zwei alten Pfählen hing.
Es war kaum Wind, aber das Kleid bewegte sich trotzdem, als würde es atmen.
Kurt kam mit zwei Tassen Kaffee in den Garten und sah das Kleid an der Leine.
Er sagte nichts.
Das war das Einzige, was er hätte sagen können.
Maren nahm den Kaffee und trank ihn, während das Kleid langsam trocknete.
Das Weiß des Stoffes war im Morgenlicht fast zu hell.
Sie würde es aufbewahren.
Sie wusste noch nicht wo.
----------------------------------------------
Der weiße Kittel
Franka kam an einem Donnerstag zurück, nicht am Sonntag, wie sie es angekündigt hatte.
Der Rucksack schleifte ihr am Rücken, der Riemen hatte eine rote Spur in die Schulter gebrannt.
Die Auffahrt zum Weingut war noch dieselbe, aber das Tor schien kleiner geworden, als hätte die Zeit daran gezogen.
Kathi stand an der Keltertür, einen Messbecher in der Hand, und sah sie kommen, ohne die Hand zu heben.
„Du hättest anrufen können", sagte sie, als Franka nah genug war.
Franka antwortete nicht, weil es keine Antwort gab, die nicht gelogen hätte.
Kathi nahm ihr den Rucksack ab, um ihn wortlos ins Haus zu tragen.
Der Hof roch nach Most und Kompost und dem Schweiß des Augusts.
Franka stand eine Minute reglos auf dem Pflaster, bevor sie folgte.
Drinnen war das Licht dasselbe, das gelbe Nachmittagslicht durch die Weinreben, das sie seit ihrer Kindheit kannte.
Das Zimmer, das Kathi für sie herrgerichtet hatte, war klein – das ehemalige Vorratszimmer, weil ihr altes Zimmer jetzt vermietet wurde.
Auf dem Bett lag eine Decke, die Kathi offenbar aus dem Kloster bezogen hatte, schwer und gestärkt wie die des Dormitoriums.
Franka legte die Hand auf den Stoff, sagte nichts.
Das Kloster schickte einem seine eigenen Decken nach.
Am Abend war Weinfest.
Kathi hatte keinen Hinweis gegeben – entweder aus Rücksicht oder weil sie glaubte, Franka würde von selbst gehen.
Franka ging, weil sie nicht im Vorratszimmer sitzen wollte.
Der Festplatz war mit Lichterketten bespannt, die Tische standen eng, Fässer als Tresen, Gläser ohne Stiele.
Sie stand am Rand und trank einen Silvaner, den sie nicht schmeckte.
Benedikt sah sie zuerst, bevor sie ihn sah – das merkte sie daran, dass er für einen Moment aufhörte zu reden, bevor er weiterredete.
Er saß an einem der langen Tische, eine Frau neben ihm, und ein Kind auf dem Schoß, dessen goldene Haare im Schein der Lichterketten leuchteten.
Als ihre Blicke sich trafen, hob er die Hand, ein kleines, kaum lesbares Zeichen.
Sie nickte.
Er stand nicht auf.
Das Kind begann zu quengeln, er hob es hoch.
Franka schaute weg und sah auf den Hang, auf dem die Weinberge im letzten Licht standen, dunkelgrün und vollkommen, als hätten sie die Zeit angehalten.
Sie trank das Glas aus.
Jemand sprach sie an, ein Nachbar, der fragte, ob sie wieder für immer da sei.
Sie sagte: „Fürs Erste."
Der Nachbar nickte, als wäre das eine präzise Auskunft.
Später, als das Fest enger und lauter wurde, stellte Benedikt das Kind ab und kam doch herüber.
Er trug einen alten Wollpullover, den sie kannte – dunkelblau, am rechten Ärmel ein verblasster Fleck.
„Franka", sagte er, nur das, wie eine Feststellung.
„Benedikt", sagte sie genauso.
Er bestellte zwei Gläser, ohne zu fragen, stellte eines vor ihr ab.
„Wie war es?"
Sie überlegte, welche Wahrheit von den verfügbaren er meinen könnte, und entschied sich für die knappste.
„Still."
„Und jetzt?"
„Lauter."
Er lächelte kurz, das schiefe Lächeln, das an der rechten Seite früher anfing als an der linken.
Die Frau am Tisch sah herüber, blickte aber gleich weg, als hätte sie sich entschieden, nichts sehen zu wollen.
Franka fragte nach dem Kind.
„Lotte", sagte er.
„Sie wird im Oktober zwei."
Er trank.
„Zweiter Vorname ist Franziska."
Franka hielt das Glas fest.
„Warum?"
Er zuckte mit den Schultern, aber es war kein gleichgültiges Zucken.
„Hanna wollte es", sagte er schließlich, und es klang so, als wäre das die Version, auf die er sich geeinigt hatte.
Franka stellte das Glas ab und sah zum Hang.
„Sie ist hübsch."
„Sie hat deinen Mund."
Das war zu viel, und Franka dachte, ohne es denken zu wollen: Wäre sie damals geblieben, hätte das Kind einen anderen zweiten Namen.
Franka sagte: „Grüß sie, wenn sie größer ist."
Dann ging sie.
Der Weg vom Festplatz zum Weingut war so kurz, dass es ihr fast ein Vorwurf schien.
Kathi saß noch in der Küche, die Hände um eine Tasse, die Augen halb geschlossen.
Franka setzte sich ihr gegenüber, ohne zu reden.
Sie saßen so, bis die Uhr halb zwölf zeigte.
Dann sagte Kathi: „Du schläfst jetzt."
Es war kein Vorschlag.
Franka schlief nicht.
Sie lag im Vorratszimmer und hörte den Most gären, das leise Gluckern aus dem Keller, der Klang, der das ganze Haus wie eine Lunge atmen ließ.
Sie dachte nicht an Benedikt.
Sie dachte an die Küche im Kloster, die Stille zwischen dem Morgengebet und dem Frühstück, die gewollte, geübte, konservierte Stille, die nicht Abwesenheit von Geräusch war, sondern Abwesenheit von Anspruch.
Es gab hier keinen Ort, der sie nicht ansprach.
Am Morgen holte sie den weißen Kittel aus dem Rucksack – den langen, leichten, den sie als Novizin täglich getragen hatte, Baumwolle, die oft gewaschen worden war, bis sie fast durchsichtig wirkte.
Sie breitete ihn auf dem Bügelbrett aus.
Das Bügelbrett hatte früher ihrer Mutter gehört, das Bein war mit einem Kabelbinder geflickt.
Sie bügelte den Kittel langsam, Bahn für Bahn, die Falten glättend, die er im Rucksack gesammelt hatte.
Das Bügeleisen zischte bei jedem Stoß.
Kathi kam herein, sah es, sagte nichts.
Das war das Klügste, was sie hätte tun können.
Franka hängte den Kittel auf einen Bügel am Fensterrahmen, nicht auf die Leine draußen.
Nicht weil sie ihn verbergen wollte.
Sondern weil sie noch nicht bereit war, ihn dem Wetter auszusetzen.
Er hing dort, während der Morgen ins Zimmer kam, und warf einen weißen Schimmer an die Decke.
Er würde eine Weile dort hängen.
== 105 ==
Das weiße Kleid
Clara kommt nach Hause.
Sie hat drei Jahre in einem Kloster gelebt.
Jetzt ist sie wieder in ihrer Stadt.
Ihr Bruder Karl wartet am Bahnhof.
Er hat ein Auto.
„Hallo, Clara", sagt er.
„Hallo, Karl", sagt sie.
Sie fahren nach Hause.
Das Haus ist klein und ruhig.
Karl kocht Nudeln.
Sie essen zusammen.
Karl fragt nicht viel.
Das ist gut, weil Clara nicht reden möchte.
Nach dem Essen trinkt Karl ein Bier.
Clara trinkt Wasser.
Sie ist müde.
Am Abend geht Clara in die Gaststätte.
Die Gaststätte heißt „Zum goldenen Stern".
Sie setzt sich an einen Tisch.
Sie bestellt einen Tee.
Es sind viele Leute da.
Clara kennt einige von ihnen.
Dann sieht sie Max.
Max sitzt am Nebentisch.
Er hat eine Frau dabei.
Die Frau heißt Julia.
Sie haben ein kleines Kind.
Das Kind ist ein Mädchen.
Das Mädchen schläft.
Max hat Clara gesehen.
Er steht auf und kommt zu ihr.
„Hallo, Clara", sagt er.
„Hallo, Max", sagt sie.
Er setzt sich kurz zu ihr.
„Das ist Julia, meine Frau", sagt er.
Julia nickt, aber sie schaut weg.
„Wie heißt das Mädchen?", fragt Clara.
Max sagt: „Sie heißt Clara."
Clara schaut das Mädchen an.
Es schläft noch.
„Sie ist hübsch", sagt Clara.
Julia ruft Max.
Er geht zurück.
Clara trinkt ihren Tee.
Die Gaststätte macht zu.
Clara geht nach draußen.
Draußen ist es kalt und dunkel.
Max steht vor der Tür.
Julia und das Kind sind schon weg.
Clara bleibt stehen.
„Warum heißt sie Clara?", fragt Clara.
Max sagt: „Ich habe auf dich gewartet."
Clara sagt nichts.
Es ist still.
„Du hast nicht geschrieben", sagt Max.
„Nein", sagt Clara.
„Gute Nacht, Max."
„Gute Nacht."
Clara geht nach Hause.
In der Nacht schläft Clara nicht gut.
Am Morgen steht sie früh auf.
In ihrem Rucksack ist ein weißes Kleid.
Das Kleid hat sie im Kloster getragen.
Sie wäscht das Kleid mit Wasser und Seife.
Dann hängt sie das Kleid auf die Leine.
Die Leine ist im Garten.
Der Wind bewegt das Kleid.
Karl kommt aus dem Haus.
Er hat zwei Tassen Kaffee.
Er schaut das Kleid an.
Er sagt nichts.
Sie trinken zusammen Kaffee.
„Ziehst du das Kleid wieder an?", fragt Karl.
„Nein", sagt Clara.
„Wirfst du es weg?"
„Nein", sagt Clara.
Karl nickt.
Das weiße Kleid bewegt sich im Wind.
Clara schaut zu.
Sie bleibt lange im Garten stehen.
----------------------------------------------
Die weiße Schürze
Anna ist mit dem Bus nach Husum gefahren.
Vier Jahre lang hat sie in einem Kloster in Hamburg gewohnt.
Jetzt ist sie wieder zu Hause.
Ihre Schwester Inga hat vor dem Haus auf sie gewartet.
Inga hat die Tür aufgemacht und gesagt: „Komm rein, ich habe Tee gemacht."
Das Haus war warm und ruhig.
Sie haben zusammen am Tisch gesessen und Tee getrunken.
Inga hat nicht gefragt, warum Anna gegangen ist.
Das war gut.
In Annas Tasche war eine weiße Küchenschürze.
Sie hat die Schürze im Kloster in der Küche getragen.
Anna hat wenig gegessen, denn sie war müde.
Nach dem Abendessen hat Inga Wein getrunken.
Anna ist früh ins Bett gegangen.
Am nächsten Abend ist Anna in das Café am Hafen gegangen.
Das Café war klein, und es hat nach Kaffee und Kuchen gerochen.
Anna hat sich an einen Tisch gesetzt und einen Tee bestellt.
Draußen war das Meer grau, und die Möwen haben laut gerufen.
Anna hat einige Leute im Café gekannt, aber sie hat niemanden angesprochen.
Dann hat sie Sven gesehen.
Er hat an einem Tisch mit einer Frau und einem Baby gesessen.
Das Baby hat gelacht und die Hände bewegt.
Sven hat Anna gesehen und ist zu ihr gekommen.
„Hallo, Anna", hat er gesagt.
„Hallo, Sven", hat sie gesagt.
Er hat sich kurz zu ihr gesetzt.
„Das ist Petra, meine Frau", hat er gesagt und auf die Frau gezeigt.
Petra hat kurz genickt, aber sie ist sitzen geblieben.
„Und das Baby?", hat Anna gefragt.
Sven hat kurz gezögert.
„Sie heißt Anna", hat er gesagt.
Anna hat das Baby angeschaut.
Das Baby hatte blaue Augen und hat gelächelt.
„Sie ist süß", hat Anna gesagt.
„Du hast mir nie geschrieben", hat Sven gesagt.
„Aus einem Kloster schreibt man nicht so viele Briefe", hat Anna gesagt.
Sven hat nichts gesagt.
Petra hat gerufen, und Sven ist zurückgegangen.
Anna hat noch einen Tee bestellt.
Das Café hat um zehn Uhr geschlossen.
Sven hat draußen vor der Tür auf Anna gewartet.
Petra und das Baby waren schon weg.
Es war kalt, und der Wind hat vom Meer geblasen.
„Warum heißt deine Tochter Anna?", hat sie gefragt.
„Ich habe auf dich gewartet", hat Sven gesagt.
Das Meer war grau und laut.
Anna hat nichts gesagt.
„Gute Nacht, Sven."
„Gute Nacht, Anna."
Sie sind in verschiedene Richtungen gegangen.
In dieser Nacht hat Anna nicht gut geschlafen.
Am nächsten Morgen ist sie früh aufgestanden.
Sie hat die weiße Schürze aus der Tasche geholt.
Die Schürze war sauber, aber Anna hat sie trotzdem gewaschen.
Sie hat die Schürze in der Küche mit Wasser und Seife gewaschen.
Dann hat sie die Schürze auf die Leine im Garten gehängt.
Der Wind hat die Schürze hin und her bewegt.
Inga ist aus dem Haus gekommen.
Sie hat zwei Tassen Kaffee mitgebracht.
Inga hat die Schürze angeschaut, aber nichts gesagt.
Sie haben zusammen Kaffee getrunken.
„Ziehst du die Schürze wieder an?", hat Inga gefragt.
„Nein", hat Anna gesagt.
„Und wirfst du sie weg?"
„Nein", hat Anna wieder gesagt.
Inga hat genickt.
Der Wind hat die Schürze immer noch bewegt.
Anna hat lange zugeschaut.
Sie wollte die Schürze nicht wegwerfen, aber sie wollte sie auch nicht anziehen.
Das war schwierig.
Inga hat ihre leere Tasse abgestellt und ist ins Haus gegangen.
Anna ist noch lange im Garten gestanden.
Die weiße Schürze hat sich im Wind bewegt.
----------------------------------------------
Die weiße Haube
Luise stieg in Triberg aus dem Zug und blieb kurz auf dem Bahnsteig stehen.
Es roch nach Harz und feuchter Erde, wie immer hier im Schwarzwald.
Sie hatte fünf Jahre im Kloster verbracht, als Novizin der Franziskanerinnen in Freiburg.
Vier Wochen vor der Profess hatte sie zur Oberin gesagt: „Ich gehe."
Die Oberin hatte genickt und nichts gefragt.
Jetzt trug Luise einen kleinen Rucksack, und darin lag die weiße Haube aus ihrer Novizenzeit.
Werner wartete auf dem Parkplatz neben dem Bahnhof und aß ein Brötchen.
Er umarmte sie kurz und sagte: „Komm, das Abendessen ist fertig."
Sein Haus stand neben der Bäckerei, und im Flur roch es nach frischem Brot.
Sie aßen zusammen Suppe, und Werner sprach über die Arbeit und den neuen Ofen.
Er fragte nicht, warum sie das Kloster verlassen hatte.
Das war gut.
Nach dem Essen trank Werner ein Bier, während Luise Wasser trank und aus dem Fenster sah.
„Willst du morgen beim Backen helfen?", fragte er.
„Ja, gerne", sagte sie.
Am nächsten Abend ging Luise allein in den Gasthof „Zur Linde", der am Ende der Hauptstraße lag.
Sie wollte wissen, ob sie es noch konnte, einfach unter Leuten zu sitzen.
Im Gasthof war es laut, die Tische waren voll, und jemand spielte Karten in der Ecke.
Sie setzte sich an einen kleinen Tisch beim Fenster und bestellte einen Tee.
Die Wirtin brachte ihn, ohne etwas zu sagen.
Luise kannte die meisten Gesichter noch, aber sie sprach niemanden an.
Dann sah sie Clemens.
Er saß am Nebentisch mit einer jungen Frau und einem kleinen Mädchen.
Das Mädchen schlief auf seinem Schoß.
Clemens sah Luise auch und stand auf.
Er kam zu ihr herüber und blieb vor ihrem Tisch stehen.
„Luise", sagte er, „ich wusste nicht, dass du zurückkommst."
„Ich auch nicht wirklich", sagte sie.
Er setzte sich kurz zu ihr.
„Das ist Heike, meine Frau", sagte er.
Luise nickte in Richtung des Nebentisches.
„Und das Mädchen?", fragte sie.
Clemens räusperte sich.
„Sie heißt Luise."
Sie schaute zu dem Kind hinüber, das jetzt die Augen aufmachte.
Das Mädchen sah sie an und lachte kurz.
„Das war eine komische Entscheidung", sagte Luise.
„Ja", sagte er, „vielleicht."
Heike rief ihn, weil das Kind unruhig geworden war.
Clemens stand auf und ging zurück, ohne sich umzudrehen.
Luise trank ihren Tee aus und bestellte danach einen Schnaps.
Als der Gasthof schloss, stand Clemens draußen vor der Tür.
Heike und das Mädchen waren schon gegangen.
Er rauchte und sah auf die dunkle Straße, als Luise herauskam.
Sie blieb bei ihm stehen.
„Warum hast du sie so genannt?", fragte sie.
Er drückte die Zigarette auf dem Pflasterstein aus.
„Weil ich gedacht habe, du kommst zurück."
Luise sagte nichts darauf.
Aus der Ferne hörte man Wasser, das über Steine lief.
„Du hast mir nie geschrieben", sagte Clemens.
„Man schreibt keine Briefe aus dem Kloster", sagte sie.
Das stimmte nicht ganz, aber es war einfacher.
Clemens nickte langsam.
„Gute Nacht, Clemens", sagte sie.
„Gute Nacht", sagte er.
Sie gingen in verschiedene Richtungen, und Luise hörte seine Schritte, bis sie leiser wurden.
In dieser Nacht schlief sie nicht gut, weil die Gedanken nicht aufhörten.
Sie lag im alten Bett und hörte den Wind, der durch die Tannenbäume fuhr.
Früh am Morgen, als Werner noch schlief, stand sie auf.
Sie holte die weiße Haube aus dem Rucksack.
Die Haube war sauber, aber sie wusch sie trotzdem.
Sie wusch sie im Waschbecken mit kaltem Wasser und Seife.
Dann trug sie die Haube in den Garten und hängte sie auf die Leine zwischen zwei Hemden.
Der Wind kam vom Berg und war kalt.
Er bewegte die Haube hin und her, als wäre jemand darin.
Werner kam nach einer Weile aus dem Haus mit zwei Tassen Kaffee.
Er stellte eine Tasse auf den Gartentisch, ohne etwas zu sagen.
Sie standen nebeneinander und tranken.
„Du wirst sie nicht mehr anziehen", sagte Werner schließlich.
Es war keine Frage.
„Nein", sagte Luise.
„Und wegwerfen?"
Sie schüttelte den Kopf.
Werner stellte seine leere Tasse ab und sah noch einmal zur Haube.
„Dann hängt sie halt", sagte er, und dann ging er zurück in die Bäckerei.
Die weiße Haube bewegte sich im Wind, füllte sich mit Luft und fiel wieder zusammen.
Luise schaute zu, bis der Kaffee kalt war.
----------------------------------------------
Heimkehr im November
Veronika kam am Dienstagnachmittag in Krems an, als die Läden schon schlossen und die Straßen still wurden.
Fünf Jahre hatte sie im Kloster verbracht, zuletzt als Novizin der Zisterzienserinnen in Heiligenkreuz.
Sechs Wochen vor ihrer Profess hatte sie die Oberin gebeten, sie zu entlassen, und die Oberin hatte genickt, ohne lange zu fragen.
Das war alles.
Matthias wohnte am Stadtrand, in dem alten Reihenhaus, das der Vater ihnen hinterlassen hatte.
Er stand an der Haustür, als sie die Auffahrt hinaufkam, die Arme vor der Brust verschränkt, aber das Gesicht nicht unfreundlich.
„Du siehst müde aus", sagte er.
„Ich bin müde", sagte sie.
Er holte ihr Gepäck – eine Reisetasche und eine flache Schachtel, in der der weiße Leinenrock lag, den sie als Novizin getragen hatte.
In der Küche roch es nach Zwiebeln und gebratenem Fleisch und dem Kaffee, der schon seit dem Morgen in der Kanne stand.
Matthias machte neuen Kaffee, ohne zu fragen, ob sie welchen wollte, und sie trank ihn, obwohl sie sich an Tee gewöhnt hatte.
Er fragte nicht, warum sie gegangen war, und das war von ihm das Klügste, was er hätte tun können.
Veronika aß ein wenig von dem Brot, das er auf den Tisch gestellt hatte, und sah dabei aus dem Fenster auf den Garten.
Der Garten war leer und grau, die Erde aufgebrochen vom Frost.
Nach dem Essen stellte er zwei Gläser auf den Tisch und goss sich Wein ein; sie hielt ihr Glas hin.
Am Abend wollte sie nicht allein sein, also ging sie in die Gaststube am Marktplatz, die noch so aussah wie früher.
Sie setzte sich an einen Tisch beim Fenster, bestellte Mineralwasser und sah den Leuten zu, die hereinkamen.
Die Decke war niedrig, die Lampen warm, und der Raum roch nach Bier und Holzfeuer.
Veronika kannte einige der Gesichter, aber die meisten nur so ungefähr, wie man Dinge kennt, die man lange nicht gesehen hat.
Tobias sah sie als Erster.
Er saß mit seiner Frau an einem der Tische nebenan, und zwischen ihnen saß ein kleines Mädchen in einem roten Pullover, das mit einem Löffel auf den Tisch klopfte.
Tobias stand auf und kam zu ihr herüber, ruhig, wie jemand, der sich schon lange auf diesen Moment vorbereitet hat.
„Ich hätte nicht gedacht, dich hier zu sehen", sagte er.
„Ich selbst auch nicht", sagte sie.
Er zog den freien Stuhl heran und setzte sich, und für einen Moment war es still zwischen ihnen, obwohl der Raum laut war.
„Das ist Lena", sagte er und zeigte auf die Frau am Nebentisch, die herüberblickte und kurz nickte.
„Und das Kind ist Nora."
Er räusperte sich.
„Zweiter Vorname ist Veronika."
Sie sah ihn an, ohne etwas zu sagen.
„Das war eine seltsame Entscheidung", sagte sie schließlich.
„Ja", sagte er.
„Vielleicht."
Lena rief ihn, weil das Mädchen den Löffel fallen gelassen hatte und anfing zu weinen.
Tobias stand auf, nickte ihr zu und ging zurück.
Veronika bestellte ein Glas Wein und trank es langsam, mit dem Blick auf die Tür.
Draußen war der Marktplatz fast leer und der Abend kalt, wie es November eben ist.
Tobias stand an einer der Säulen und rauchte; Lena und das Mädchen waren schon fort.
Veronika blieb stehen, weil sie spürte, dass er noch etwas sagen wollte.
„Du hast nie geantwortet", sagte er, ohne sie anzusehen.
„Aus einem Kloster schreibt man keine Briefe", sagte sie.
Das stimmte nicht ganz, aber es war einfacher als die Wahrheit.
Er nickte langsam, wie jemand nickt, der eine Antwort nimmt, ohne ihr ganz zu glauben.
„Wärst du geblieben, wenn ich noch länger gewartet hätte?"
Veronika dachte einen Moment nach, bevor sie antwortete.
„Ich weiß es nicht."
„Das ist ehrlich", sagte er.
Er warf die Zigarette fort und zog die Jacke enger um sich.
„Gute Nacht, Veronika."
„Gute Nacht."
Sie gingen in verschiedene Richtungen, und keiner drehte sich um.
In dieser Nacht schlief sie kaum, und als sie schlief, träumte sie nichts, was sie sich hätte merken können.
Sie lag im Bett und hörte, wie Matthias in der Küche noch etwas aufräumte, dann Stille, dann den Wind.
Am frühen Morgen, bevor das Licht kam, stand sie auf und öffnete die Schachtel.
Der weiße Leinenrock lag zusammengefaltet darin, und er roch noch nach dem Kloster – nach Lavendel und altem Holz und etwas, für das sie keinen Namen hatte.
Sie trug ihn in das Bad, wusch ihn mit kaltem Wasser und Kernseife, schrubbte den Stoff so lange, bis er sich anders anfühlte.
Dann hängte sie ihn auf die Leine im Garten, zwischen zwei Betttüchern, die Matthias dort gelassen hatte.
Der Wind war kalt und kam in unregelmäßigen Stößen vom Feld.
Er blähte den Rock auf, zog ihn zur Seite, ließ ihn wieder fallen.
Dann blähte er ihn erneut, als wäre jemand darin, der versuchte, eine Form anzunehmen.
Aus dem Küchenfenster roch es nach frischem Kaffee.
Matthias kam mit zwei Tassen in den Garten und stellte eine davon auf den kleinen Gartentisch, ohne ein Wort zu sagen.
Er sah den Rock auf der Leine an, und Veronika sah ihn auch an.
Sie tranken.
„Wirst du ihn wieder tragen?", fragte er nach einer Weile.
„Nein."
„Und wegwerfen?"
Sie schüttelte den Kopf.
Matthias nickte, als hätte er das erwartet.
Der Rock bewegte sich im Wind, füllte sich und leerte sich, füllte sich wieder.
Veronika hielt die Tasse mit beiden Händen und ließ sich wärmen.
Sie würde den Rock hängen lassen, so lange, bis sie wusste, was er bedeutete.
Ob er eine Erinnerung war, ein Versprechen, das sie nicht gehalten hatte, oder einfach ein Stück Stoff.
Matthias stellte die leere Tasse ab und ging ins Haus.
Sie blieb stehen.
Der Rock auf der Leine tanzte.
----------------------------------------------
Das Tuch auf der Leine
Der Morgen, an dem Sorcha in Donegal ankam, roch nach Tang und nassem Schiefer und dem Salz, das der Wind vom Meer herüberblies.
Sechs Jahre hatte sie im Kloster oberhalb von Killybegs verbracht – sechs Jahre des Schweigens, des Frühgebets, der langsam erlernten Kunst, mit wenig auszukommen.
Einen Monat vor der Profess hatte sie der Priorin gegenübergestanden und gesagt, dass sie gehe.
Kein Drama.
Nur der Klang der eigenen Stimme, den sie in dem hohen Raum nicht wiedererkannte.
Der Bus hatte sie bis Dungloe gebracht, von dort war sie gelaufen.
Die Landschaft kannte sie noch, aber die Landschaft kannte sie nicht mehr.
Pádraic stand am Tor, die Hände in den Taschen, das Gesicht gegen das Morgenlicht gedreht, als hätte er damit gerechnet, jemand anderen zu sehen.
Er sagte: „Du bist da."
Sie sagte: „Ja."
Er nahm ihr die Tasche – eine einzige Leinentasche, darin kaum mehr als ein weißer Rock, zwei Bücher und das Breviar –, ohne zu fragen, ob sie sie tragen könne.
Das Haus roch nach Kohle und altem Fett und dem Hund, der seit zwei Jahren tot war.
Pádraic kochte Haferbrei, stellte zwei Schüsseln auf den Tisch, sagte nichts über die vergangenen sechs Jahre.
Das war seine Art, rücksichtsvoll zu sein.
Sorcha aß, trank Tee, sah auf die Felder, die ihr Vater bestellt hatte, bevor er krank wurde und starb.
Am Abend war es Pádraic, der zu Hause blieb; Sorcha ging allein in das Pub.
Sie wollte wissen, ob sie es noch konnte – ob ein Raum voller fremder Körperwärme und Stimmen sie nicht erdrücken würde.
Das Pub lag am Ende der Hauptstraße, der Schank niedrig, die Balken vom Rauch der Jahrzehnte dunkel imprägniert.
Sie setzte sich an den Tresen, bestellte Tee, trank ihn schwarz.
Die Wirtin sah sie an, sagte dann nichts.
Es gab wenige Menschen in dem Dorf, die Sorcha nicht kannte, und Ferdia gehörte nicht dazu.
Sie erkannte sein Lachen, bevor sie ihn überhaupt sah – den breiten, etwas zu lauten Laut, den er immer dann ausstieß, wenn er nicht wusste, wohin mit sich.
Er saß in der hinteren Ecke, einer Frau gegenüber, die Sorcha nicht kannte, und auf seinem Schoß schlief ein kleines Mädchen.
Das Mädchen war vielleicht drei Jahre alt.
Es schlief mit dem Mund halb offen und den Händen zu Fäusten geballt, wie Kinder schlafen, die sich im Schlaf noch gegen etwas wehren.
Ferdia sah auf, bemerkte sie, versteifte sich für eine Sekunde.
Dann nickte er, knapp, wie man jemandem nickt, den man irgendwann einmal gekannt hat.
Sorcha wandte sich ab und bestellte einen Whiskey.
Als sie hinausging, lehnte Ferdia an der Außenmauer, allein.
Die Frau und das Kind waren fort.
Er rauchte, sah aufs Meer, drehte sich um, als Sorcha die Tür hinter sich zuzog.
„Ich wusste nicht, dass du zurückkommst", sagte er.
„Ich auch nicht wirklich", sagte sie.
Das war nicht gelogen, nur unvollständig.
Er bot ihr keine Zigarette an; sie wäre froh gewesen, hätte er es getan.
„Wie heißt deine Tochter?", fragte sie.
Er zögerte eine Sekunde.
„Aoibhe."
Noch eine Pause.
„Zweiter Vorname ist Sorcha."
Die Wellen brachen unten gegen den Fels, gleichmäßig und gleichgültig.
„Das war keine gute Idee", sagte sie.
„Nein", sagte er.
„Warum hast du es getan?"
Er drückte die Zigarette am Mauerstein aus.
„Ich dachte, du könntest zurückkommen."
Das war etwas, das sie hätte wissen können und doch nicht gewusst hatte.
„Gute Nacht, Ferdia", sagte sie.
Er ließ sie gehen, ohne noch etwas zu sagen.
Zu Hause schlief sie kaum.
Sie lag auf dem alten Eisenbett und starrte die Risse im Deckenputz an, die sich nicht verändert hatten.
Das Breviar lag auf dem Nachttisch; sie schlug es nicht auf.
Irgendwann gegen vier hörte sie Pádraic husten – das zweimal abgebrochene Husten, das er seit Jahren hatte.
Dann war es wieder still.
Am frühen Morgen, als der Himmel noch das graugrüne Licht vor dem Morgengrauen trug, holte sie den weißen Rock aus der Tasche.
Er war nicht schmutzig – aber sie wusch ihn trotzdem, wie man Dinge wäscht, von denen man nicht weiß, was man sonst mit ihnen tun soll.
Das Emaillezuber stand noch an derselben Stelle wie immer, hinter der Stalltür.
Sie goss kaltes Wasser hinein, löste Seifenflocken auf, schrubbte den Stoff so lang, bis ihre Hände kalt und rau waren.
Dann hängte sie den Rock auf die Leine, zwischen den Betttüchern von Pádraic und einem alten Flanellhemd.
Der Wind kam vom Meer, stark und wechselhaft.
Er blähte den Stoff auf, zog ihn in die Form einer Gestalt, die niemanden darstellte und trotzdem aussah wie jemand – wie etwas, das sich in die Leere gedrängt hatte, um nicht nichts zu sein.
Sorcha blieb stehen.
Sie hörte Pádraic hinter sich – seine Schritte auf dem Kies, das Geräusch der Küchentür.
Er kam heraus, eine Tasse in jeder Hand, stellte eine davon auf den Holzblock neben ihr ab.
Lange sagte keiner von beiden etwas.
„Du wirst ihn nicht mehr anziehen", sagte Pádraic schließlich.
Es war keine Frage.
„Nein."
„Wegwerfen?"
Sie schüttelte den Kopf.
„Dann hängt er halt", sagte er.
Sie tranken.
Der Rock auf der Leine schlug gegen sich selbst, füllte sich, entspannte sich, schlug wieder.
Er würde ihn aushöhlen, dachte sie – der Wind, die See, das Licht –, bis nur noch die Form übrig wäre, ohne Gewicht und ohne Inhalt.
Oder er würde bleiben, so lange, bis er selbst vergaß, dass er einmal etwas bedeutet hatte.
Pádraic trank seinen Tee aus, nickte ihr zu, ging zurück ins Haus.
Sorcha blieb stehen.
Der Rock tanzte.
== 106 ==
Rosas Platz
Anni hat einen kleinen Kiosk.
Der Kiosk ist in Köthen.
Sie verkauft Zeitungen und Zeitschriften.
Rosa arbeitet mit ihr zusammen.
Rosa ist 63 Jahre alt.
Sie kommt jeden Morgen um sieben.
„Guten Morgen, Anni", sagt Rosa.
Sie stellen die Zeitungen zusammen auf.
Herr Pohl kommt jeden Morgen um acht.
Er kauft immer eine Tageszeitung.
„Eine Zeitung, bitte", sagt er.
Anni gibt ihm die Zeitung.
Er zahlt und geht.
Das ist jeden Morgen so.
Rosa macht Kaffee.
Sie reden ein bisschen.
Anni trinkt den Kaffee und wartet auf die nächsten Kunden.
Eines Tages liegt ein Brief an der Tür.
Anni liest den Brief.
Der Kiosk soll abgerissen werden.
Vielleicht im nächsten Jahr.
Rosa liest den Brief auch.
„Das haben die früher auch gesagt", sagt Rosa.
Anni legt den Brief weg.
Herr Pohl kommt um acht.
Er kauft seine Zeitung.
Anni gibt sie ihm und sagt „Guten Tag".
Der Kiosk ist den ganzen Tag offen.
Im März kommt Rosa nicht zur Arbeit.
Anni wartet, aber Rosa kommt nicht.
Sie öffnet den Kiosk allein.
Rosa hat nicht angerufen.
Mittags ruft Rosas Sohn an.
Er sagt: „Rosa ist krank."
„Was hat sie?", fragt Anni.
„Das Herz", sagt er.
Anni sagt: „Ich wünsche ihr gute Besserung."
Nach der Arbeit fährt sie ins Krankenhaus.
Sie bringt eine Zeitung mit.
Rosa liegt im Bett.
Sie sieht Anni an.
„Der Kiosk läuft noch", sagt Anni.
Rosa lächelt ein bisschen.
Anni sitzt eine Stunde bei ihr.
Dann fährt sie nach Hause.
Am nächsten Morgen öffnet sie den Kiosk allein.
Herr Pohl kommt um acht.
Er kauft seine Zeitung.
„Und Ihre Kollegin?", fragt er.
„Im Krankenhaus", sagt Anni.
Er nickt und geht.
Rosa ist vier Wochen später gestorben.
Anni hat es morgens erfahren.
Sie hat geweint.
Dann hat sie den Kiosk aufgemacht.
Ein Jahr ist vergangen.
Der Kiosk steht noch.
Den Abriss hat es noch nicht gegeben.
Anni öffnet jeden Morgen um sieben.
Sie stellt die Zeitungen allein auf.
Rosas Platz ist leer.
Aber Anni macht den Kaffee.
Herr Pohl kommt um acht.
Er kauft seine Zeitung.
„Guten Morgen", sagt Anni.
„Guten Morgen", sagt er.
Er zahlt und geht.
Anni trinkt ihren Kaffee.
Der Kiosk ist still.
Aber er ist offen.
----------------------------------------------
Gretes Tasse
Paula arbeitet in der kleinen Bücherei in Schwerin.
Die Bücherei ist in einem alten Haus in der Innenstadt.
Es gibt nicht viele Bücher, aber Paula kennt jedes davon.
Grete kommt jeden Morgen um acht.
Sie hat immer eine Tasche mit Äpfeln dabei.
„Guten Morgen, Paula", sagt sie und stellt die Tasche ab.
Paula hat schon Kaffee gemacht.
Sie trinken Kaffee und sprechen über die neuen Bücher.
Frau Heinemann kommt dienstags und donnerstags.
Sie leiht immer drei Bücher aus.
„Haben Sie etwas Neues?", fragt sie.
Paula sucht ein Buch heraus und erklärt, worum es geht.
Frau Heinemann nickt und nimmt das Buch.
Das machen sie seit vielen Jahren so.
Im März hat Paula einen Brief bekommen.
Die Bücherei soll schließen, steht im Brief.
Vielleicht im nächsten Jahr, aber vielleicht auch früher.
Grete hat den Brief auch gelesen.
„Das wussten wir doch", sagt sie.
Paula legt den Brief in die Schublade.
Sie macht weiter, denn Frau Heinemann kommt um zehn.
Frau Heinemann bringt drei Bücher zurück und leiht drei neue aus.
„Was passiert mit der Bücherei?", fragt sie.
„Wir wissen es noch nicht", sagt Paula.
Frau Heinemann nickt und geht.
Grete macht Kaffee.
Sie sagen nichts mehr über den Brief.
Im April ist Grete nicht zur Arbeit gekommen.
Sie hat nicht angerufen.
Paula hat die Bücherei allein geöffnet.
Sie hat auch den Kaffee allein gemacht.
Mittags hat Gretes Sohn angerufen.
Grete ist krank – sie hat Krebs.
Paula hat gesagt: „Ich wünsche ihr alles Gute."
Dann hat sie aufgelegt und ist an ihren Tisch gegangen.
Sie hat ein Buch aufgemacht, aber nicht gelesen.
Am Nachmittag ist sie ins Krankenhaus gefahren.
Sie hat Äpfel mitgenommen, weil Grete die immer dabei hatte.
Grete hat im Bett gelegen und war sehr müde.
„Wer macht den Kaffee?", hat Grete gefragt.
„Ich", hat Paula gesagt.
Sie hat eine Stunde neben Grete gesessen.
Dann ist sie zurückgefahren.
Am nächsten Tag hat sie die Bücherei wieder allein geöffnet.
Grete ist zwei Monate später gestorben.
Paula hat es von Gretes Sohn erfahren.
Sie hat an dem Tag trotzdem die Bücherei geöffnet.
Frau Heinemann ist gekommen und hat Bücher ausgeliehen.
Sie hat nichts gefragt.
Ein Jahr später ist die Bücherei noch offen.
Die Stadt hat das Geld für die neue Bücherei noch nicht.
Der Brief liegt noch in der Schublade.
Paula öffnet jeden Morgen um acht.
Sie macht allein Kaffee – eine Tasse.
Auf dem Tisch steht noch Gretes Tasse, aber Paula benutzt sie nicht.
Frau Heinemann kommt noch dienstags und donnerstags.
Sie leiht immer noch drei Bücher aus.
Eines Tages bringt sie Äpfel mit.
„Ich habe an Ihre Kollegin gedacht", sagt sie.
Paula nimmt die Äpfel und stellt sie auf den Tisch.
„Danke", sagt sie.
Frau Heinemann sucht ihre Bücher aus.
Paula stempelt sie ab, wie immer.
Draußen ist es kalt.
Drinnen ist es warm.
Frau Heinemann geht.
Paula räumt die Bücher auf.
Dann setzt sie sich und trinkt ihren Kaffee.
Die Bücherei ist still.
Aber sie ist noch offen.
----------------------------------------------
Immer donnerstags
Werner Kühn öffnet das Kino jeden Dienstag um sieben, auch wenn nur zwei Karten verkauft sind.
Das "Lichtblick" liegt in einer Nebenstraße in Plauen, im Erdgeschoss eines alten Kaufhauses.
Die Leinwand ist klein, die Sitze sind aus den achtziger Jahren und quietschen beim Aufstehen.
Ilse kommt immer um halb sieben, meistens schon vor Werner.
Sie stellt die Kasse an und legt die Programmhefte aus, bevor Werner aus dem Vorführraum kommt.
„Heute kommen vier Leute", sagt sie und zeigt auf den Zettel mit den Buchungen.
Werner nickt und geht zurück in den Vorführraum, um den Projektor zu prüfen.
Der Projektor ist alt, aber er läuft noch seit zweiunddreißig Jahren.
Herr Taubert kommt jeden Donnerstag, immer pünktlich, immer allein.
Er kauft eine Karte für die erste Reihe und trinkt eine Cola.
„Was läuft heute?", fragt er, obwohl er das Programm schon kennt.
Ilse nennt den Filmtitel, ohne dabei zu lächeln, und Herr Taubert nickt.
Herr Taubert setzt sich, die Cola in der Hand, und wartet, bis es dunkel wird.
Werner läuft den Film an und schaut durch das kleine Fenster im Vorführraum.
Die vier Zuschauer sitzen weit auseinander, jeder auf seinem eigenen Platz im Saal.
Nach der Vorstellung trinken Werner und Ilse Tee in der Garderobe.
„Wann kommt der nächste Film?", fragt Ilse, wenn die Kasse abgerechnet ist.
Werner nennt das Datum und schreibt es auf den Zettel neben der Kasse.
Das machen sie seit achtzehn Jahren so.
Eines Morgens lag ein Brief an der Tür.
Es war kein normaler Brief, denn er kam von der Stadtverwaltung.
Werner las ihn zweimal, dann steckte er ihn in die Jackentasche.
Das Gebäude sollte abgerissen werden, wahrscheinlich im nächsten Jahr.
Ilse kam herein und fragte, was für ein Brief das sei.
„Nichts Neues", sagte Werner und steckte den Brief tiefer in die Tasche.
Ilse schaute ihn an, aber sie fragte nicht weiter.
Sie legte die Programmhefte aus und stellte die Kasse an.
Herr Taubert kam donnerstags, die Cola in der Hand, und setzte sich.
Das Kino lief weiter.
Im Februar blieb Ilse zum ersten Mal ohne Ankündigung weg.
Sie hat nicht angerufen, und das passierte noch nie.
Werner öffnete allein und stellte die Kasse an.
Er hat die Programmhefte ausgelegt, aber er wusste nicht genau, wo Ilse sie sonst hinlegte.
Mittags rief Ilses Tochter an – ihre Stimme klang ruhig.
Ilse lag im Krankenhaus, Herzinfarkt, seit gestern Nacht.
Werner sagte: „Ich komme heute Abend."
Er schloss nach der letzten Vorstellung ab und fuhr mit dem Bus ins Krankenhaus.
Ilse lag im Bett, blass, mit einem Schlauch unter der Nase.
„Du hast die Hefte falsch hingelegt", sagte sie leise.
Werner lachte nicht, aber es wäre beinahe passiert.
Er saß eine Stunde neben ihr, dann fuhr er zurück.
Am nächsten Morgen öffnete er das Kino allein, ohne Ilse.
Ilse kam nicht mehr zurück.
Sie ist drei Wochen später gestorben, nachts, ohne dass Werner dabei war.
Ihre Tochter hat am Morgen angerufen, vor der ersten Vorstellung.
Werner legte auf und blieb eine Weile neben der Kasse stehen.
Dann lief er den Projektor an.
Herr Taubert kam donnerstags und setzte sich in die erste Reihe.
„Und Ihre Kollegin?", fragte er einmal, als er bezahlte.
„Die kommt nicht mehr", sagte Werner, ohne aufzusehen.
Herr Taubert nickte und ging ohne weitere Fragen in den Saal.
Ein Jahr später steht das Gebäude noch.
Der Abriss hat sich verzögert, weil die Stadt kein Geld für den Neubau hat.
Der Brief liegt noch in der Jackentasche – Werner hat ihn nicht mehr herausgenommen.
Er öffnet das Kino jeden Dienstag, auch wenn nur zwei Karten verkauft sind.
Es gibt jetzt eine Aushilfe, Melanie, zwanzig Jahre alt.
Sie legt die Hefte falsch hin, und Werner sagt nichts dazu.
Herr Taubert kommt noch, jeden Donnerstag.
Er fragt jetzt nicht mehr nach dem Film.
Er kauft seine Karte, setzt sich in die erste Reihe und wartet, bis es dunkel wird.
Eines Abends fragt Melanie: „Warum läuft das Kino noch?"
Werner überlegt kurz.
„Weil der Donnerstag kommt", sagt er.
Melanie versteht das nicht, aber sie fragt nicht weiter.
Werner geht in den Vorführraum und läuft den Film an.
Das Licht geht aus.
Auf der Leinwand bewegt sich etwas.
Herr Taubert sitzt in der ersten Reihe, allein.
Der Projektor surrt.
Werner bleibt im Vorführraum und schaut durch das kleine Fenster.
----------------------------------------------
Noch offen
Inge Hartmann öffnet ihren Blumenladen jeden Morgen um acht, auch wenn der Lieferwagen noch nicht da ist.
Der Laden liegt im Erdgeschoss eines Plattenbaus in Gera-Lusan, zwischen einem Handyladen und einem Friseur, der seit Monaten geschlossen hat.
Marta kommt meistens zehn Minuten später, mit einem Rucksack und einer Thermoskanne.
Sie stellt die Kanne auf die Theke und fängt an, die Blumen zu gießen, ohne erst die Jacke abzulegen.
„Die Tulpen hängen schon wieder", sagt Marta und schüttelt den Kopf.
Inge nimmt die schlechten Stängel heraus und legt sie in den Eimer hinter der Tür.
Sie bestellt die Blumen zweimal die Woche, aber manchmal kommt die Lieferung einen Tag zu spät.
Dann müssen sie mit dem arbeiten, was noch da ist.
Herr Döring kommt jeden Freitag um halb zehn.
Er kauft immer dasselbe: fünf Nelken, weiß, für das Grab seiner Frau.
Inge bindet sie mit grünem Band zusammen, ohne zu fragen, wie er sie haben will.
Das weiß sie seit drei Jahren.
„Wird wärmer heute", sagt er und legt das Geld auf die Theke.
„Wird es", sagt Inge, auch wenn das Thermometer draußen noch keine zehn Grad zeigt.
Marta gießt die Zimmerpflanzen im Schaufenster und summt dabei leise vor sich hin.
Herr Döring geht, Inge räumt die Kasse auf.
An einem Montag im April klebt ein Schreiben an der Eingangstür.
Es ist behördlich, auf festem Papier, mit Stempel und Datum.
Abbruchmaßnahmen seien geplant, steht dort, voraussichtlich ab Juni, der genaue Termin werde noch mitgeteilt.
Marta liest es über Inges Schulter.
„Das haben die schon letztes Jahr gesagt", sagt Marta.
Inge nimmt das Schreiben ab und legt es in die Schublade unter der Kasse.
Dann macht sie weiter, weil um neun die erste Kundin kommt.
Es ist Frau Wenzel, die einen Strauß für ihren Mann zum Geburtstag bestellt hat.
Inge bindet den Strauß, während Marta das Seidenpapier hält.
Sie arbeiten gut zusammen – Marta weiß fast immer, was Inge als Nächstes braucht.
Das ist seit sieben Jahren so.
Im Mai bleibt Marta eines Morgens weg.
Keine Nachricht, kein Anruf – das ist ungewöhnlich, denn Marta ist immer pünktlich.
Inge ruft auf dem Handy an, aber niemand nimmt ab.
Sie öffnet den Laden allein und kocht sich Kaffee in der kleinen Küche hinter dem Lager.
Gegen zehn ruft Martas Tochter an.
Marta hatte in der Nacht einen Schlaganfall – sie liegt auf der Intensivstation in Gera.
Inge sagt: „Ich komme heute Abend."
Sie schließt mittags kurz zu, fährt mit dem Bus ins Krankenhaus und bringt ein kleines Töpfchen Veilchen mit.
Marta liegt im Bett, die Augen halb offen, der linke Mundwinkel hängt nach unten.
Sie kann nicht sprechen, aber sie schaut Inge an.
Inge stellt die Veilchen auf den Nachttisch.
„Der Laden läuft", sagt Inge, obwohl das nicht ganz stimmt.
Sie sitzt eine halbe Stunde neben dem Bett, dann fährt sie zurück.
Am nächsten Morgen öffnet sie wieder allein.
Sie gießt die Tulpen, obwohl die Hälfte schon nicht mehr zu retten ist.
Herr Döring kommt Freitag und kauft seine fünf Nelken, wie immer.
„Und Ihre Kollegin?", fragt er.
„Im Krankenhaus", sagt Inge.
Herr Döring nickt und geht.
Marta stirbt drei Wochen später, an einem Dienstag.
Inge erfährt es über einen Anruf der Tochter, morgens um sieben, kurz bevor sie den Laden aufmacht.
Sie macht den Laden trotzdem auf.
Sie weiß nicht, was sie sonst tun soll.
Sie ordnet die Sträuße im Schaufenster neu, auch wenn niemand kommt.
Ein Jahr später steht der Block noch.
Die Abbruchmaßnahmen wurden mehrmals verschoben, zuletzt wegen Problemen bei einem Nachbarprojekt.
Das Schreiben unter der Kasse ist inzwischen vergilbt.
Inge öffnet den Laden jeden Morgen allein.
Sie hat eine neue Lieferantin gefunden, die freitags kommt statt mittwochs.
Die Blumen sind frischer als vorher.
Herr Döring kommt weiter jeden Freitag mit seinen fünf Nelken.
Manchmal bleibt er etwas länger, und sie reden über den Markt um die Ecke, der jetzt geschlossen hat.
Inge hat sich eine kleine Kaffeemaschine gekauft, für eine Tasse.
Sie stellt sie morgens an, während sie die Blumen gießt.
Die Thermoskanne steht noch auf dem Regal, leer.
Eines Morgens kommt eine junge Frau herein und fragt, ob Inge einen Strauß für eine Beerdigung binden kann.
Inge fragt, was die Person gemocht hat.
Die Frau sagt: „Weiß ich nicht genau – sie mochte es einfach."
Inge nimmt weiße Rosen, Lavendel und ein paar Zweige Eukalyptus.
Sie bindet den Strauß, ohne nachzufragen.
Die junge Frau schaut zu und sagt nichts.
Draußen ist der Himmel bewölkt, wie meistens in Gera im März.
Inge legt das Band um den Strauß und macht einen festen Knoten.
Die junge Frau nimmt die Blumen und geht.
Inge dreht sich um und gießt die nächste Pflanze.
----------------------------------------------
Das Leder hält
Gerhard Wuttke öffnet die Werkstatt täglich um halb acht, auch an Tagen, an denen der Himmel über Halle-Neustadt die Farbe nassen Betons hat.
Das Schloss der Stahltür hat einen Knick, der es erfordert, den Schlüssel gleichzeitig zu drücken und die Klinke nach unten zu ziehen – eine Geste, die er nicht mehr denkt.
Die Schuhmacherwerkstatt liegt im Sockelgeschoss eines elfgeschossigen Plattenbaus an der Magistrale, zwischen einem Nagelstudio ohne Kundschaft und einer Shisha-Bar, die erst abends öffnet.
Kurt ist fast immer schon da, wenn er kommt.
Er sitzt auf dem Drehhocker vor der Schleifmaschine, die Schürze umgebunden, und liest die Zeitung vom Vortag, die er aus dem Spätverkauf nebenan mitbringt.
„Schon kalt heute", sagt Kurt, ohne aufzusehen.
Gerhard hängt den Mantel an den Haken hinter der Tür, wäscht sich die Hände mit dem Spülmittel, das er in Fünf-Liter-Kanistern kauft, weil der Duft von Parfüm ihn stört.
Dann stellt er die Heizung an – ein altes Quarzgerät, das surrt wie eine Kaffeemaschine im Leerlauf.
Der erste Auftrag liegt auf der Werkbank: ein Herrenstiefel, linkes Teil, die Naht an der Spitze gebrochen, der Name des Besitzers auf einem Zettel mit Tesafilm befestigt.
Kurt hat ihn gestern Abend noch angesehen, ohne ein Wort zu sagen.
Gerhard nimmt den Stiefel, dreht ihn im Licht der Arbeitslampe, prüft den Bruch mit dem Daumennagel.
Es ist Maschinennaht – das Garn billig, das Wachs längst ausgehärtet, ein Schaden, für den acht Euro genügen.
Er legt den Stiefel zurück, setzt Wasser auf, wartet.
Kurts Hände zittern seit dem Herbst leicht, wenn er die Feile ansetzt – er sagt nichts dazu, und Gerhard fragt nicht.
Frau Brandt kommt um neun, wie jeden Dienstag seit elf Jahren, mit einem Paar Damenpumps, die nie etwas brauchen.
Die Pumps sind in Ordnung; sie kommt, weil das hier das einzige Geschäft in der Ladenzeile ist, in dem noch mit jemandem geredet werden kann.
„Der Neffe hat angerufen", sagt sie, während Gerhard die Absätze prüft, die er schon vor drei Wochen erneuert hat.
„Was will der?" – „Nichts Besonderes."
Er poliert die Kappen, auch wenn sie keiner Politur bedürfen, weil das die Zeit füllt und weil Frau Brandt es so gewohnt ist.
Sie zahlt fünf Euro, die er nicht verlangt hat, und geht.
An einem Dienstag im März hängt ein Papier an der Scheibe – kein Zettel, sondern ein A4-Blatt mit Amtsstempel, laminiert, mit einem Kabelbinder befestigt.
Gerhard liest es dreimal, dann holt er seine Lesebrille, die er nie aufhat, und liest es ein viertes Mal.
Abbruchvorbereitung ab Mai, voraussichtlich, Abschluss der Maßnahme innerhalb von achtzehn Monaten, Ansprechpartner: eine Nummer, die niemand abnimmt.
Kurt kommt herein, die Tasche noch an der Schulter, liest über Gerhards Schulter mit.
„Na ja", sagt Kurt.
Gerhard nimmt das Blatt ab, faltet es zweimal, legt es unter die Werkbank in die Schublade mit den alten Quittungsblöcken.
Dann macht er Kaffee und bringt Kurt eine Tasse, ohne gefragt zu haben.
Die Kunden kommen wie immer: ein Mann mit Wanderschuhen, deren Sohle sich ablöst, eine Frau mit einem Kinderschuh, den sie selbst repariert hat – falsch.
Gerhard arbeitet, Kurt schleift, die Heizung surrt.
Im April fehlt Kurt zum ersten Mal ohne Ankündigung.
Gerhard öffnet allein, stellt zwei Tassen Wasser auf, schüttet dann eine davon zurück.
Kurt ruft mittags an – Untersuchung im Krankenhaus, nichts Ernstes, er sei morgen wieder da.
Morgen kommt er nicht.
Auch übermorgen nicht.
Gerhard arbeitet durch – er schleift jetzt selbst, obwohl das Knie schmerzt, wenn er lange steht, und die Maschine einen anderen Anpressdruck verlangt, als er gewohnt ist.
Nach einer Woche ruft Kurts Frau an.
Sie sagt: Leber, Stadium drei, Chemotherapie wahrscheinlich, noch keine Gewissheit, man warte auf Befunde.
Gerhard sagt: „Schicken Sie ihm Grüße."
Er legt auf und steht dann eine Weile an der Werkbank, die Hände flach auf der Platte, ohne etwas zu tun.
Dann nimmt er einen Schuh.
Er fährt am Samstag mit der Tram ins Krankenhaus, eine Packung Tabak dabei, weil er nicht weiß, was man mitbringt, und Kurt früher geraucht hat.
Kurt liegt im Bett, dünner als zuletzt, das Gesicht gelblich im Licht der Neonröhre.
„Den Tabak kannst du selber rauchen", sagt Kurt.
Gerhard setzt sich auf den Plastikstuhl neben dem Bett.
Sie reden über die Schleifmaschine, die Kurt immer für zu schwach gehalten hatte, und über den Wanderschuh vom letzten Dienstag, dessen Sohle sich nachgezogen hatte wie Kaugummi.
Dann ist es still.
Auf dem Nachttisch steht ein Glas Wasser und eine Packung Kekse, die niemand geöffnet hat.
Gerhard fährt nach einer Stunde zurück.
Er besucht Kurt noch zweimal – einmal im Mai, einmal im Juli, kurz vor dem Ende.
Im August stirbt Kurt, an einem Donnerstag, an dem in der Werkstatt ein einziger Auftrag liegt: ein Paar Kinderstiefelchen mit gebrochener Naht.
Gerhard macht am nächsten Morgen auf, wie sonst.
Er stellt eine Tasse Wasser auf, schüttet sie weg, macht eine neue.
Der Block steht noch im März des folgenden Jahres.
Die Abbrucharbeiten haben sich verzögert, wegen eines Rechtsstreits zwischen der Wohnungsgesellschaft und einem Investor, dessen Interessen nie ganz klar geworden sind.
Das laminierte Blatt an der Scheibe ist verblichen, die Telefonnummer des Ansprechpartners nicht mehr vergeben.
Gerhard öffnet die Werkstatt allein, dreht den Schlüssel mit dem gewohnten Druck, zieht die Klinke nach unten.
Er hat niemanden eingestellt – ein Aushilfsgesuch an der Scheibe hatte er hängen, bis der Wind es abriss.
Frau Brandt kommt seit Oktober nicht mehr; ihr Sohn hat sie nach Merseburg geholt.
Es gibt neue Kunden, jüngere, die Schuhe mitbringen, die er früher nicht gesehen hätte: Sneakers mit abgelösten Sohlen, Kunstleder, das klebt statt zu halten.
Er repariert sie trotzdem.
An einem Mittwoch im März kommt ein Mann um die Vierzig herein, Wanderstiefel, linke Sohle gespalten, und fragt, ob das noch zu machen sei.
Gerhard nimmt den Stiefel, dreht ihn im Licht.
„Ja", sagt er.
Der Mann schaut sich um – den leeren Hocker, die Schleifmaschine, die zwei Haken an der Wand, von denen nur einer belegt ist.
„Machen Sie das allein?" – „Ja."
Der Mann nickt, lässt den Stiefel da, geht.
Draußen fahren Autos vorbei, der Himmel ist grau, über den Plattenbau zieht eine Krähe in gerader Linie.
Gerhard setzt sich auf den Drehhocker, zieht die Nadel auf, beginnt zu nähen.
Die Schleifmaschine läuft nicht – er braucht sie heute nicht.
Stille, abgesehen vom Leder, das unter der Nadel leicht quietscht.
Er näht weiter.
== 107 ==
Ein Zettel
Gerd Möller ist Wachmann.
Er passt auf eine alte Fabrik auf.
Die Fabrik hat früher Schuhe gemacht.
Jetzt ist die Fabrik leer.
Gerd kommt jeden Abend um acht Uhr.
Er setzt sich in die kleine Loge.
Er schaut auf die Monitore.
Alles ist dunkel und still.
Um zehn Uhr geht Gerd durch den Hof.
Er leuchtet mit der Taschenlampe.
Die Tore sind alle geschlossen.
Hier ist alles in Ordnung.
Dann geht er in die alte Halle.
Die alte Halle ist sehr groß und hoch.
Die Halle ist leer und dunkel.
Gerd hat früher hier gearbeitet.
Er hat Schilder und Zeichen auf Maschinen gemalt.
Das hat ihm gut gefallen.
Jetzt gibt es keine Maschinen mehr.
Gerd geht zurück in die Loge.
Er setzt sich auf den Stuhl.
Dann sieht er etwas auf dem Fensterbrett.
Es ist ein kleines Blatt Papier.
Er nimmt das Blatt und liest.
Da steht: „Hallo Papa. Ich war heute hier. Anna."
Das ist Annas Handschrift.
Anna ist Gerds Tochter.
Sie wohnt jetzt in Berlin.
Sie haben seit einem Jahr nicht gesprochen.
Gerd weiß nicht genau warum.
Er weiß nur, dass er traurig ist.
Er legt den Zettel auf den Tisch.
Er schaut den Zettel lange an.
Wie ist Anna hereingekommen?
Aber das Tor ist doch zu.
Das weiß Gerd leider nicht.
Vielleicht hat Anna noch einen alten Schlüssel.
Gerd schreibt in sein Heft: „Alles in Ordnung."
Aber das stimmt nicht wirklich.
Er trinkt noch einen Kaffee.
Gerd denkt die ganze Zeit an Anna.
Er fragt sich: Hat Anna die alte Halle gesehen?
Hat sie auf dem Hof gestanden?
Das weiß er leider nicht.
Um zwei Uhr geht Gerd noch einmal durch den Hof.
Auf dem Hof ist alles ruhig.
Dann kommt er zurück in die Loge.
Er setzt sich und wartet.
Die Nacht dauert noch lange.
Um sechs Uhr kommt der nächste Wachmann.
„War alles gut?", fragt er.
„Ja, alles gut", sagt Gerd.
Er gibt die Schlüssel ab.
Er zieht langsam die Jacke an.
Er steckt den Zettel in die Tasche.
Gerd geht jetzt nach Hause.
Die Stadt wacht langsam auf.
Ein paar Menschen gehen schon zur Arbeit.
Er geht ganz langsam die Straße entlang.
Er denkt immer noch an den Zettel.
Er denkt: Ich rufe Anna an.
Aber er ist nicht sicher.
Der Zettel bleibt einfach in der Tasche.
Das ist für heute genug, denkt er.
----------------------------------------------
Der Zettel auf dem Stuhl
Horst Bauer ist Wachmann auf dem alten Brauereigelände.
Er macht das schon seit drei Jahren.
Früher hat er hier in der Lagerhalle gearbeitet.
Er hat Kisten gestapelt und Waren kontrolliert.
Jetzt ist er für die Tore und die Kameras zuständig.
Das ist nicht sein Traumjob, aber es ist ein Job.
Siegfried macht immer die Tagschicht.
Um 20 Uhr kommt Horst an, und Siegfried wartet schon auf ihn.
„Heute war nichts", sagt Siegfried.
„Gut", sagt Horst.
Siegfried nimmt seine Tasche und geht.
Die Tür fällt hinter ihm ins Schloss.
Horst will sich auf seinen Stuhl setzen.
Aber auf dem Stuhl liegt ein kleines Stück Papier.
Er hebt es auf und liest.
Da steht: „Hallo Papa. Ich war kurz hier. Tut mir leid. – Klaus."
Das ist die Handschrift von Klaus.
Klaus ist sein Sohn, und er wohnt in Frankfurt.
Sie haben sich seit zwei Jahren nicht getroffen.
Sie haben sich gestritten, denn Klaus wollte nicht mehr nach Erfurt kommen.
Seitdem haben sie kaum noch telefoniert.
Horst faltet den Zettel zusammen und steckt ihn in die Jackentasche.
Er schaut auf die Monitore, aber alles ist ruhig.
Dann geht er raus und kontrolliert das Gelände.
Alle drei Tore sind geschlossen und in Ordnung.
Er geht durch die alte Brauereihalle.
Die Halle ist groß und dunkel.
Es riecht noch ein bisschen nach Hopfen und altem Holz.
Horst hat diesen Geruch immer gemocht.
Früher hat man hier gutes Bier gebraut.
Dann ist die Brauerei geschlossen worden, und alles hat sich verändert.
Horst geht zurück in die Loge.
Er schreibt ins Logbuch: „Tor 1, 2, 3: kontrolliert, kein Befund."
Er trinkt Kaffee und hört Radio.
Die Musik ist leise, und auf dem Hof ist es ganz still.
In der Stille denkt er immer wieder an Klaus.
Hat Klaus durch die Fenster der Halle geschaut?
Hat er die alten Maschinen gesucht, die nicht mehr da sind?
Warum hat er nichts gesagt und ist einfach wieder gegangen?
Das kann Horst sich einfach nicht erklären.
Um zwei Uhr macht Horst noch einen Rundgang.
Auf dem ganzen Gelände ist alles ruhig und dunkel.
Er kommt zurück und setzt sich wieder hin.
Er schaut auf die Uhr: Es ist fast halb drei.
Die Nacht dauert noch lange.
Um halb sieben kommt Falk für die Frühschicht.
Falk ist jung und kommt immer mit dem Fahrrad.
„War alles gut?", fragt er.
„Ja, alles gut", sagt Horst.
Er gibt Falk die Schlüssel ab und geht dann.
Draußen ist es inzwischen hell und frisch.
Horst geht zur Straßenbahnhaltestelle.
Er greift in die Tasche und fühlt den Zettel.
Er lässt den Zettel einfach in der Tasche.
Die Straßenbahn kommt, und Horst steigt ein.
Er setzt sich ans Fenster und sieht auf die Häuser.
Er fragt sich, ob er Klaus anrufen soll.
Er hat seine Nummer noch im Handy.
Vielleicht ruft er Klaus heute Abend an.
Vielleicht macht er das aber auch nicht.
Der Zettel bleibt in der Tasche.
----------------------------------------------
Das Blatt im Schaltkasten
Werner Krause kam zehn Minuten früher als nötig zur Schicht.
Er hängte die Jacke an den Haken und schaute auf die Monitore.
Dieter saß noch in der Loge und hatte die leere Kaffeetasse vor sich.
„Heute war nichts los", sagte Dieter und gähnte laut.
Werner nickte und zählte die Schlüssel auf dem Brett.
Alle zwölf Schlüssel hingen an ihrem Platz.
Dieter stand auf, zog seinen Mantel an und griff nach seiner Tasche.
„Bis morgen", sagte er, ohne sich umzudrehen.
Werner nickte noch einmal, und Dieter ging ohne weiteres Wort.
Dann war Werner allein mit dem gleichmäßigen Summen der Leuchtstoffröhre.
Die Baumwollspinnerei in Chemnitz stand seit neun Jahren leer.
Werner hatte hier zwölf Jahre als Elektriker gearbeitet, bis das Werk schloss.
Jetzt arbeitete er für eine Sicherheitsfirma aus Köln, die das Gelände bewachte.
Er kannte jeden Schaltkasten und jede kaputte Leitung noch auswendig.
Das war vielleicht der Grund, warum er damals den Job bekommen hatte.
Die Firma zahlte neun Euro die Stunde, und das war nicht viel.
Um 22:00 Uhr machte Werner den ersten Rundgang.
Er nahm die Taschenlampe und ging durch Halle 1.
Die Fenster waren mit Draht gesichert, und der Boden war staubig.
Dann betrat er Halle 2, wo früher sein Arbeitsplatz gewesen war.
Dort standen nur noch leere Paletten und ein alter Handwagen.
Er leuchtete mit der Taschenlampe an die Wände und an die Decke.
Dann ging er zum Schaltkasten an der Nordwand.
Das machte er jeden Abend, obwohl seit Jahren kein Strom mehr floss.
Werner öffnete die Schalttafel und überprüfte die Sicherungen.
Dann sah er zwischen zwei Sicherungshaltern ein weißes, gefaltetes Blatt.
Er zog es heraus und faltete es auf.
Die Schrift war klein, mit dem großen „I", das immer etwas nach links kippte.
Da stand: „Ich war noch einmal hier. Es war schön früher, oder? – I."
Er kannte diese Handschrift seit mehr als vierzig Jahren.
Es war die Handschrift seiner Schwester Inge.
Inge wohnte in Dortmund, wo sie seit der Wende in einer Versicherung arbeitete.
Sie hatten sich vor einigen Jahren gestritten und seitdem kaum gesprochen.
Werner wusste nicht mehr genau, worüber sie damals gestritten hatten.
Er schaute sich um, aber der Hof draußen war leer.
Auf keiner der Kameras war eine Bewegung zu sehen.
Er faltete den Zettel zusammen und steckte ihn in die Brusttasche.
Dann schloss er die Schalttafel langsam wieder und trat einen Schritt zurück.
Im Logbuch schrieb er: „Halle 2 kontrolliert. Kein Befund."
Das stimmte nicht ganz, aber er ließ es so stehen.
Er machte den zweiten Rundgang um Mitternacht und den dritten um 04:30 Uhr.
Werner trank kalten Kaffee und aß ein trockenes Brot dabei.
Er dachte an Inge, aber er kam zu keinem Schluss.
Wie hatte sie das Gelände betreten können, wenn das Tor doch abgeschlossen war?
Wahrscheinlich kannte sie noch den alten Weg durch den Hinterhof.
Das war der Weg, den früher alle Mitarbeiter des Werkes kannten.
Um 06:00 Uhr kam ein junger Mann für die Frühschicht.
Werner kannte ihn kaum und mochte ihn nicht besonders.
„War alles ruhig?", fragte der junge Mann.
„Ja", sagte Werner. „Alles ruhig."
Er gab die Schlüssel ab, unterschrieb die Übergabe und zog die Jacke an.
Dann ging er durch das Haupttor nach draußen.
Die Morgenluft war kalt und roch nach feuchtem Asphalt.
Werner ging zur Bushaltestelle, die dreihundert Meter entfernt war.
Er griff in die Brusttasche und spürte den Zettel, holte ihn aber nicht heraus.
Er dachte daran, ob er Inge anrufen sollte.
Er wusste nicht, was er ihr sagen würde, wenn sie sich meldete.
Schließlich kam der Bus, und Werner stieg ein.
Er setzte sich ans Fenster und sah auf die Stadt.
Manche Häuser waren frisch renoviert, manche noch wie früher.
Werner ließ den Zettel in der Brusttasche, und das fühlte sich richtig an.
So fuhr er durch die Stadt, und er dachte erst mal nicht weiter darüber nach.
----------------------------------------------
Was man nicht meldet
Rainer Schulz kommt um Viertel nach sieben zur Abendschicht.
Günter sitzt in der Loge, das Jackett über den Stuhl gehängt, und trinkt Tee aus einem zerbeulten Becher.
„Na?", fragt Günter.
„Na", sagt Rainer.
Das reicht als Übergabe.
Günter zieht das Jackett an, nimmt seine Tasche vom Haken und geht, ohne die Tür richtig zu schließen.
Der Wind drückt sie zu.
Rainer setzt sich, schiebt die Klappe des Logbuchs auf und trägt seinen Namen ein.
Die Fabrik wurde vor neun Jahren stillgelegt.
Früher haben hier sechshundert Leute Landmaschinen gebaut – Mähdrescher und Drillmaschinen für die Großbetriebe der DDR.
Rainer war Schweißer, Halle 3, sechs Jahre lang.
Jetzt bewacht er das Gelände für fünfzig Euro die Nacht, und das ist mehr, als er mit seinem letzten Job verdient hat.
Um 21:00 macht er den ersten Rundgang.
Er nimmt die Taschenlampe, obwohl die Außenleuchten brennen, weil er so etwas wie eine Routine braucht.
Tor A ist zu, Tor B ist zu, Tor C hängt schief in den Angeln, seit ein Lkw es vor zwei Jahren gestreift hat.
Die Sicherheitsfirma hat einen Reparaturauftrag gestellt, aber bisher ist niemand gekommen.
Rainer schüttelt kurz den Kopf und geht weiter.
Hinter Halle 2 steht noch der alte Kompressor auf einem Betonsockel, rostig, mit einem Warnschild, das sich halb abgelöst hat.
Rainer bleibt kurz stehen, nicht weil er den Kompressor interessant findet, sondern weil er an dieser Stelle immer stehenbleibt.
Er kann nicht erklären warum.
Vielleicht ist es der Geruch nach Öl und nassem Stein, der ihn jedes Mal kurz zurückwirft.
Er geht weiter, schreibt um 21:24 in das Logbuch: „Rundgang 1 abgeschlossen, kein Befund."
Dann gießt er sich Kaffee ein, stellt das Radio leiser und wartet auf die zweite Runde.
Kurz vor Mitternacht geht Rainer noch einmal raus.
Es hat angefangen zu regnen, leicht, und die Pfützen auf dem Hof leuchten schwach im Scheinwerferlicht.
Er geht zum Dienstwagen, einem alten Golf der Firma, der am Nebeneingang parkt, um den Kilometerstand zu notieren.
Da sieht er etwas unter dem Scheibenwischer: ein zusammengefaltetes Stück Papier.
Rainer holt es raus, faltet es auf.
Die Schrift ist klein und ordentlich, wie immer: „War kurz vorbei. Wollte mal schauen. – P."
Peter.
Sein Bruder Peter, der 1991 nach Stuttgart gegangen ist und seitdem ein anderes Leben führt.
Sie telefonieren vielleicht zweimal im Jahr, meistens an Geburtstagen.
Die Stille, die nach dem letzten Streit Einzug gehalten hatte, war seither nie mehr ganz weggegangen.
Rainer schaut in den Hof.
Keine Bewegung, keine Kamera hat angeschlagen, kein Alarm ist losgegangen.
Er dreht das Blatt um – auf der Rückseite steht nichts.
Er steckt es in seine Jackentasche.
Im Logbuch schreibt er: „Rundgang 2, 23:58 – kein Befund."
Er weiß, dass das nicht stimmt.
Aber er weiß auch nicht, was er sonst schreiben sollte.
Die Nacht ist lang danach.
Rainer trinkt zu viel Kaffee, schläft nicht, schaut auf die Kameras, auf denen nichts passiert.
Er fragt sich, ob Peter durch das Haupttor gekommen ist oder über den Zaun an der Südseite, wo die Matten schon durchgerostet sind.
Er fragt sich, ob Peter die Hallen von innen gesehen hat oder nur durch die Fenster geschaut hat.
Dann fragt er sich, warum er das alles überhaupt fragt.
Um 06:30 kommt Marcus für die Frühschicht.
Marcus ist achtundzwanzig, immer gut gelaunt, immer mit Kopfhörern um den Hals.
„Ruhige Nacht?", fragt er.
„Wie immer", sagt Rainer.
Er gibt die Schlüssel ab, unterschreibt die Übergabe und geht.
Draußen ist es hell, obwohl noch früh.
Die Luft riecht nach Regen und Gras.
Rainer geht zum Bus, die Hände in den Taschen.
Die eine Hand umschließt den Zettel, ohne ihn zu zerdrücken.
Er denkt daran, dass Peter extra gekommen sein muss.
Stuttgart ist weit.
Wahrscheinlich war er wegen irgendetwas in Rostock und hat einen Umweg gemacht.
Aber er hat auch nicht geklingelt und nichts gesagt.
Er hat einen Zettel hinterlassen.
Der Bus kommt, Rainer steigt ein.
Er setzt sich ans Fenster und sieht auf die Stadt.
Die Wohnblöcke, die Brachen, der graue Morgen – er kennt das alles.
Rainer ist nicht sicher, ob er Peter anrufen wird.
Wahrscheinlich nicht.
Aber der Zettel bleibt in der Tasche.
Das ist für jetzt genug.
----------------------------------------------
Die Handschrift des Schweigens
Karl-Heinz Posselt, neunundfünfzig Jahre alt, ehemaliger Dreher im VEB Chemiefaserwerk Schwarza, betritt die Pförtnerloge um 21:48 Uhr.
Egon sitzt noch da, die leere Thermoskanne neben sich, das Gesicht gelb im Monitorlicht.
„Heute war nichts", sagt Egon, ohne aufzublicken.
Karl-Heinz hängt die Jacke an den Haken, der schon seit Jahren schief sitzt, und antwortet nicht.
Die Monitore zeigen acht Bilder: leere Hallen, leere Höfe, ein paar Pfützen auf dem Asphalt, der seit der Wende niemand mehr erneuert hat.
Egon steht auf, knöpft seinen Mantel zu, grüßt mit einem Nicken und geht.
Das Surren der Leuchtstoffröhre ist das einzige Geräusch, das bleibt.
Karl-Heinz setzt sich, schiebt das Kontrollbuch zu sich hin, trägt Datum und Uhrzeit ein.
Er hat in dreizehn Jahren nie eine Zeile ausgelassen.
Das Nichtausfüllen eines Bogens wäre ihm vorgekommen wie das Eingeständnis, dass hier gar nichts mehr zu bewachen sei.
Das Radio läuft auf MDR Thüringen, irgendein Schlager aus den Siebzigern, den er nicht mehr benennen kann.
Er dreht es leiser, nicht aus.
Um 23:15 beginnt er den ersten Rundgang.
Die Taschenlampe – dieselbe seit fünf Jahren, nur die Batterie tauscht er einmal im Monat – leuchtet auf das nasse Pflaster.
Tor eins: geschlossen, Schloss in Ordnung.
Tor zwei: geschlossen.
Tor drei: die Kette hängt locker, wie immer, seit das Schloss im März klemmt und die Firma noch keinen Techniker geschickt hat.
Karl-Heinz zieht die Kette straffer, um wenigstens hier Ordnung zu halten, und prüft sie zweimal.
An der Außenwand der Halle B steht noch die Inschrift in verblassendem Rot: „Für Qualität – für den Plan – für uns alle."
Er liest sie nicht mehr; er weiß, was da steht.
Halle C ist sein Ziel.
Dort stand seine Drehbank – Standort 17, dritte Reihe von links, zweites Fenster –, bis man die Maschinen 1994 abtransportiert hat.
Heute stehen dort Europaletten mit Dämmplatten, die seit zwei Jahren niemand abgeholt hat.
Karl-Heinz setzt sich auf eine der Paletten, die er selbst so hingestellt hat, dass sie seine Knie tragen.
Die Taschenlampe legt er auf den Boden, den Strahl an die Decke gerichtet, wo früher die Schichttafel hing.
Er sitzt zwölf Minuten.
Er zählt nicht, er weiß es trotzdem.
Auf dem Rückweg zur Loge – es ist kurz nach Mitternacht, die Luft riecht nach feuchtem Beton und irgendwas Verbranntem aus dem Nachbargelände – bleibt er am zweiten Tor stehen.
In der Kette hängt etwas, das vorhin nicht da war: ein zusammengefalteter Zettel, in die Kettenlasche gesteckt.
Karl-Heinz faltet ihn auf.
Kugelschreiber, blaue Tinte, wenige Wörter: „Ich war hier. Hab mich umgeschaut. Macht das Tor mal zu. – M."
Das weite, fast geschwungene „M" kennt er seit dreißig Jahren.
Es ist Maikes Handschrift.
Er hatte nicht gedacht, dass sie wissen würde, wo das Werk liegt – und erst recht nicht, dass sie kommen würde.
Maike lebt in Köln, ist Logistikerin bei einem Pharmaunternehmen, hat zwei Kinder, die Karl-Heinz noch nie gesehen hat.
Der Bruch, der beim Begräbnis der Mutter entstanden war, wurde danach von keiner Seite mehr berührt.
Karl-Heinz schaut sich um: der Hof ist leer, die Kameras zeigen keine Bewegung.
Er faltet den Zettel wieder zusammen, zweimal, dann noch einmal.
Er schiebt ihn in die Innentasche seiner Uniformjacke, neben den Ausweis.
Im Logbuch steht um 00:31: „Rundgang abgeschlossen. Kein Befund."
Das stimmt nicht ganz.
Aber er hat keine Rubrik für das, was er gefunden hat.
Die Nacht geht weiter: zweiter Rundgang um 03:00, dritter um 05:30.
Karl-Heinz trinkt den Kaffee aus der Thermoskanne, der mittlerweile kalt und bitter ist, und isst zwei Scheiben Brot, die er morgens in Frischhaltefolie gewickelt hat.
Er denkt nicht an Maike.
Er denkt an sie so, wie man an einen Schmerz denkt, den man schon lange kennt: man weiß, dass er da ist, ohne ihn jeden Moment zu spüren.
Um 06:03 kommt die Frühschicht – Tobias, dreiundzwanzig, Glatze, Ohrring, immer zu spät und immer mit dem Handy in der Hand.
„Alles klar?", fragt Tobias, ohne die Augen vom Display zu heben.
„Klar", sagt Karl-Heinz.
Er übergibt die Schlüssel, die Kontrollliste, den Stift.
Tobias unterschreibt, ohne zu lesen.
Karl-Heinz zieht die Jacke an, die schwer ist wegen des Zettels, obwohl ein Zettel natürlich kein Gewicht hat.
Er geht durch das Haupttor, dreht sich noch einmal um.
Die Hallen stehen still im Morgenlicht, das jetzt gerade über die Dächer kommt.
Tor zwei ist geschlossen, die Kette hängt richtig.
Die Bushaltestelle ist dreihundert Meter entfernt.
Der Bus kommt in siebzehn Minuten, das weiß er auswendig.
Karl-Heinz steht an der Haltestelle, die Hände in den Jackentaschen, und fasst den Zettel nicht an.
Er denkt daran, was Maike gesehen haben könnte, als sie durch das Gelände gegangen ist.
Ob sie die Inschrift an Halle B gelesen hat.
Ob sie an Standort 17 gestanden hat.
Ob sie gewusst hat, dass er jetzt hier Wache schiebt, auf dem Gelände, das einmal sein Leben gewesen ist.
Der Bus kommt.
Karl-Heinz steigt ein, setzt sich ans Fenster.
Die Platte, in der er wohnt, ist siebenundzwanzig Minuten entfernt.
Er schläft nicht im Bus, obwohl er müde ist.
Er schaut auf die Stadt, die beim Fahren nicht schöner wird.
Der Zettel liegt in der Jacke.
Er wird ihn nicht rausholen.
Er wird ihn auch nicht wegwerfen.
Das ist alles, was er tun kann, und er weiß, dass es genug ist.
== 108 ==
Hertas Bank
Herta ist 72 Jahre alt.
Sie wohnt in einer kleinen Wohnung in Magdeburg.
Jeden Samstag geht sie in den Park.
Der Park liegt fünf Minuten von ihrer Wohnung entfernt.
Dort gibt es einen Teich.
Herta füttert die Enten.
Sie bringt immer altes Brot mit.
Die Bank am Teich ist ihr Platz.
Sie sitzt dort seit vielen Jahren.
Es ist eine Holzbank unter einem großen Baum.
Herta setzt sich immer auf die linke Seite.
An einem Samstag im April ist jemand auf der Bank.
Ein Mann sitzt dort mit einem kleinen Jungen.
Herta bleibt stehen.
Der Mann schaut sie an und lächelt.
„Guten Morgen", sagt er.
„Guten Morgen", sagt Herta.
Sie schaut auf die Bank.
Es ist kein Platz mehr frei.
Sie sagt nichts.
Sie geht weiter.
Am anderen Ende des Teiches ist ein freier Platz.
Sie setzt sich auf eine Mauer.
Die Mauer ist kalt und hart.
Herta wirft das Brot ins Wasser.
Die Enten kommen sofort.
Der Junge sieht die Enten und ruft.
Er hat auch Brot dabei.
Er wirft es weit ins Wasser.
Die Enten schwimmen zu ihm.
Herta schaut hinüber.
Der Junge lacht.
Der Mann sagt: „Nicht so viel auf einmal!"
Herta schaut wieder auf ihr Wasser.
Dort sind noch zwei Enten.
Sie wirft das letzte Brot.
Dann steht sie auf.
Sie geht nach Hause.
Zu Hause zieht sie die Jacke aus.
Sie setzt sich an den Küchentisch.
Sie macht sich Tee.
Sie wartet, bis das Wasser heiß ist.
Dann trinkt sie.
Durch das Fenster sieht sie einen Baum.
Die Blätter sind noch klein.
Es ist still in der Wohnung.
Sie denkt an die Bank.
Sie denkt: „Das ist meine Bank."
Dann trinkt sie den Tee aus.
Sie steht auf und spült die Tasse.
Am nächsten Samstag geht Herta wieder in den Park.
Sie hat Brot dabei.
Es ist ein schöner Morgen.
Die Bank ist frei.
Herta setzt sich auf die linke Seite.
Das Wasser ist ruhig.
Zwei Enten schwimmen nah am Ufer.
Herta wirft ihnen Brot.
Die Enten kommen näher.
Herta sitzt da und schaut.
Es ist wie immer.
Sie denkt kurz an den Jungen.
Der Junge ist letzte Woche hier gewesen.
Herta weiß nicht, ob er wiederkommt.
Sie wirft noch etwas Brot.
Die Enten fressen.
Die Sonne ist warm.
Herta sitzt auf ihrer Bank.
----------------------------------------------
Ernsts Tisch
Ernst Fischer ist 67 Jahre alt und seit drei Jahren in Rente.
Jeden Morgen geht er um acht Uhr zur Bäckerei Huber.
Er kauft zwei Brötchen und einen kleinen Kaffee.
Dann setzt er sich an den kleinen Tisch am Fenster.
Er sitzt immer links, weil er von da die Straße sehen kann.
Das macht er seit fünf Jahren so.
Die Verkäuferin heißt Sandra.
„Wie immer?", fragt Sandra, und Ernst sagt: „Ja, bitte."
Das ist jeden Morgen gleich.
Um acht Uhr zwanzig geht er wieder nach Hause.
Dann liest er die Zeitung.
Das ist sein Morgen.
An einem Montag im März ist der Tisch am Fenster besetzt.
Eine junge Frau sitzt dort mit einem Kinderwagen.
Das Kind schläft.
Ernst bleibt stehen und schaut.
„Entschuldigung", sagt er, aber er sagt nichts weiter.
Er setzt sich an den anderen Tisch, in der Mitte des Raumes.
Von dort kann er die Straße nicht sehen.
Er sieht nur die anderen Gäste und die Theke.
Er isst das erste Brötchen.
Der Kaffee ist heiß und gut.
Aber er schaut die ganze Zeit zur jungen Frau hinüber.
Sie schaut auf ihr Telefon.
Das Kind schläft weiter.
Der Kinderwagen ist groß und steht nah an der Wand.
Ernst isst das zweite Brötchen.
Er trinkt den Kaffee aus.
Er steht auf, zieht die Jacke an und geht.
Sandra schaut ihm nach.
Zu Hause räumt Ernst seine Jacke auf.
Er setzt sich in den Sessel im Wohnzimmer.
Er nimmt die Zeitung.
Aber er fängt nicht an zu lesen.
Er schaut aus dem Fenster.
Die Straße ist ruhig.
Er denkt an den Tisch in der Bäckerei.
Er denkt nicht lange, aber er denkt daran.
Er legt die Zeitung auf den Tisch.
Dann geht er in die Küche und macht sich einen Tee.
Er trinkt ihn am Küchentisch.
Das macht er sonst nicht.
Später nimmt er die Zeitung wieder und liest.
Aber es dauert länger als sonst.
Am nächsten Morgen geht Ernst um acht Uhr zur Bäckerei Huber.
Es ist kalt draußen.
Er trägt seinen langen Mantel.
„Wie immer?", fragt Sandra.
„Ja, bitte", sagt Ernst.
Er zahlt und dreht sich um.
Der Tisch am Fenster ist frei.
Ernst setzt sich hin, links, wie immer.
Er sieht die Straße.
Ein Auto fährt vorbei.
Dann kommt eine Frau mit einem Hund.
Die Bäckerei riecht nach frischem Brot.
Sandra wischt die Theke ab.
Ernst isst das erste Brötchen.
Dann das zweite.
Er trinkt den Kaffee.
Alles ist wie immer.
Und trotzdem ist etwas nicht ganz gleich.
Er weiß nicht, was es ist.
Er trinkt den letzten Schluck.
Er steht auf und geht raus.
Draußen ist es kalt.
Er geht nach Hause.
----------------------------------------------
Kardamom
Renate Vogt war seit zwei Jahren in Rente.
Den Dienstagmarkt in Gotha hatte sie nie verpasst.
Nicht im Winter, nicht im Sommer, nicht einmal als ihr Knie sie zwang, langsamer zu gehen.
Sie kaufte immer das Gleiche: Käse bei Herrn Feldmann, Brot bei der Bäckerei Krohn, Eier beim Hof Lemmert.
Die Reihenfolge war wichtig.
Sie hatte das nie jemandem erklärt, aber sie wusste es.
Der Markt öffnete um acht Uhr, und Renate stand um Viertel vor acht am Eingang.
Sie trug eine geflochtene Tasche aus Leinen und eine kleinere Plastiktüte für die Eier.
Sie kannte jeden Händler mit Namen.
Herr Feldmann hatte ihr einmal erzählt, dass er den Stand seit dreißig Jahren hatte.
Das gefiel ihr.
An einem Dienstag im April war der Marktplatz anders als sonst.
Zwischen dem Käsestand von Herrn Feldmann und der Bäckerei Krohn stand ein neuer Stand.
Renate blieb stehen.
Der Stand war bunt dekoriert, mit kleinen Holzschildern und vielen Gläsern.
Ein junger Mann mit einem roten Schal lächelte sie an.
„Guten Morgen! Darf ich Ihnen etwas anbieten?"
Renate antwortete nicht sofort.
Sie schaute auf die Gläser.
Es gab Gewürze, Öle, getrocknete Kräuter – Dinge, die sie nicht kannte.
„Ich suche den Käsestand", sagte sie schließlich.
„Herr Feldmann steht jetzt da drüben", sagte der junge Mann und zeigte nach links.
„Er ist ein bisschen gerückt, wegen uns."
Renate sah in die Richtung.
Tatsächlich: Herr Feldmann stand fünf Meter weiter links.
Das hatte er noch nie getan.
Renate stand noch einen Moment und schaute.
Hinter ihr wollte jemand vorbeigehen.
Sie trat zur Seite.
Aber die Reihenfolge stimmte nicht mehr.
Sie kaufte zuerst die Eier, dann das Brot, und suchte erst danach Herrn Feldmann.
Sie wusste, dass das keine wichtige Sache war.
Trotzdem störte es sie.
„Zwei Scheiben Bergkäse, wie immer?", fragte Herr Feldmann.
„Ja, bitte", sagte Renate.
„Der neue Stand macht uns etwas Mühe", sagte Herr Feldmann und lächelte dabei.
Renate antwortete nicht darauf.
Sie bezahlte und ging nach Hause.
Auf dem Rückweg kam sie noch einmal am neuen Stand vorbei.
Der junge Mann war gerade dabei, ein Glas zu öffnen.
„Möchten Sie etwas probieren?", fragte er.
„Nein, danke", sagte Renate.
Zu Hause räumte sie alles in den Kühlschrank.
Käse links, Eier rechts, Butter vorne.
Das war immer so gewesen.
Sie kochte sich einen Tee und setzte sich an den Tisch.
Durch das Fenster konnte sie die Straße sehen.
Es war noch früh.
Sie trank den Tee und dachte nicht an den neuen Stand.
Oder sie versuchte es.
Der Tee schmeckte wie immer.
Aber sie saß länger als sonst am Tisch.
Am nächsten Dienstag stand Renate wieder um Viertel vor acht am Markteingang.
Es war kühl, und sie trug ihre graue Jacke.
Sie wusste jetzt, dass Herr Feldmann fünf Meter weiter links stand.
Sie wusste auch, dass der neue Stand zwischen den alten Ständen war.
Sie kaufte Käse, dann Brot, dann Eier – diesmal in der richtigen Reihenfolge.
Auf dem Rückweg kam sie an dem neuen Stand vorbei.
Es roch nach Kardamom.
„Schönen Tag noch", sagte der junge Mann.
Renate nickte kurz.
Dann ging sie weiter.
Zu Hause räumte sie alles ein: Käse links, Eier rechts, Butter vorne.
Die Reihenfolge war wieder richtig.
Sie setzte sich an den Tisch und kochte Tee.
Aber irgendwas war anders, und sie wusste nicht genau, was es war.
Sie saß da und schaute aus dem Fenster.
Draußen war der Dienstag wie immer.
Die Straße war ruhig.
Sie trank den Tee.
----------------------------------------------
Auf beiden Seiten
Herbert Zollinger hatte die Heckenschere seit achtzehn Jahren, und er hatte sie noch nie reparieren müssen.
Das Gerät lief zuverlässig, wie alles, was er besaß.
Jeden dritten Samstag im Monat stand er um neun Uhr an der Thuja-Hecke, die sein Grundstück von der Straße trennte.
Er schnitt sie auf genau einen Meter zwanzig, und er kontrollierte das Ergebnis mit einem Metallmaßband.
Die Hecke war gleichmäßig, seit er das Reihenhaus vor sieben Jahren gekauft hatte.
Er lebte allein, seit seine Frau vor vier Jahren ausgezogen war.
Das störte ihn weniger, als er erwartet hatte.
Die Ordnung im Garten half.
Im Herbst zogen neue Nachbarn ein.
Der Mann hieß Marco, war Ende dreißig und arbeitete als Architekt in der Stadt.
Er kam am ersten Tag mit einer Flasche Rotwein an die Tür.
Herbert bedankte sich, stellte die Flasche ins Regal und öffnete sie nie.
Marco war laut, nicht unangenehm, aber laut.
Er hörte am Wochenende Musik im Garten, fuhr ein Fahrrad ohne Schutzbleche und schnitt den Rasen, wann es ihm passte.
Herbert notierte das nicht, aber er bemerkte es.
Im März schnitt Marco zum ersten Mal die Hecke auf seiner Seite.
Herbert sah es vom Esszimmerfenster aus, während er seinen Morgenkaffee trank.
Marco arbeitete schnell, aber ohne System.
Er schnitt einmal von links nach rechts, dann von oben nach unten, und das Ergebnis war ungleichmäßig.
Herbert schätzte die Höhe auf etwa einen Meter fünfzehn.
Er stellte die Kaffeetasse auf den Tisch und ging in den Keller.
Dort lag eine alte Kladde, in der er wichtige Dinge aufschrieb.
Er schrieb: „März, Marco schneidet Hecke, Höhe ca. 115 cm, unregelmäßig."
Dann legte er die Kladde zurück und ging wieder nach oben.
Er sagte Marco nichts.
Zwei Wochen später kam Marco an die Grundstücksgrenze.
Er trug eine Kaffeetasse und lächelte.
„Herr Zollinger, ich wollte fragen, ob wir eine gemeinsame Höhe festlegen sollten."
Herbert antwortete: „Die Höhe ist ein Meter zwanzig. Das war immer so."
Marco nickte, aber er wirkte nicht überzeugt.
„Ich finde ein Meter fünfzehn schöner", sagte er, „die Hecke sieht offener aus."
Herbert erwiderte nichts darauf.
Er wartete, bis Marco seine Tasse geleert hatte und gegangen war.
Dann ging Herbert ins Haus.
Am nächsten Samstag schnitt Marco seine Seite auf einen Meter fünfzehn – diesmal gerade und sauber.
Herbert stand am Fenster und sah zu.
Er holte sein Maßband und maß nach: fünf Zentimeter Unterschied auf der ganzen Länge.
Das war kein Fehler, das war eine Entscheidung.
Herbert legte das Maßband auf die Fensterbank und blieb stehen.
Er überlegte lange, ob er seine Seite nachschneiden sollte.
Er tat es nicht.
In den folgenden Wochen wuchs die Hecke auf Marcos Seite schneller, weil sie tiefer geschnitten worden war.
Herbert maß jeden Montag nach und schrieb die Werte in die Kladde.
Marcos Seite stand inzwischen bei einem Meter achtzehn, seine eigene noch bei einem Meter zwanzig.
Er schnitt nicht früher als geplant.
Er wartete den dritten Samstag ab.
An diesem Samstag stand Herbert um neun Uhr mit der Heckenschere am Grundstück.
Der Morgen war klar und kühl, und er konnte seinen Atem sehen.
Er legte die Schneide an die Heckenkrone und schaltete das Gerät ein.
Der Motor summte laut in der Stille.
Herbert schnitt zwei Meter, dann hörte er auf.
Er schaltete die Schere aus und stand einfach da.
Er dachte an Marco, der jetzt wahrscheinlich noch schlief.
Er dachte an die Kladde im Keller, in der er Dinge aufschrieb, die niemanden interessierten.
Er dachte daran, dass die Hecke auf beiden Seiten wachsen würde, egal was er tat.
Das war keine neue Erkenntnis.
Aber heute störte es ihn anders als sonst.
Er legte die Heckenschere auf den Rasen.
Er setzte sich auf die alte Holzbank neben dem Schuppen, die er selbst gebaut hatte und seitdem kaum benutzte.
Ein Vogel saß auf der Hecke und sang.
Herbert hörte zu.
Er blieb sitzen, bis Marco um halb zehn die Terrassentür öffnete und ihn sah.
Marco winkte.
Herbert hob kurz die Hand.
Dann stand er auf, räumte die Schere in den Schuppen und ging ins Haus.
Er frühstückte, spülte das Geschirr, stellte es ins Regal.
Nachmittags öffnete er die Kladde im Keller.
Er las die letzte Zeile: „März, Marco schneidet Hecke, Höhe ca. 115 cm."
Er schloss die Kladde, ohne etwas zu schreiben.
Draußen stand die Hecke, auf beiden Seiten.
Die eine war auf einem Meter zwanzig.
Die andere war inzwischen wieder nachgewachsen.
Herbert stellte die Kladde zurück ins Regal.
Er wusste nicht, ob er am nächsten Samstag schneiden würde.
Er wusste nur, dass er es könnte.
----------------------------------------------
Das Maß der Dinge
Walter Egger hatte die Grundstücksgrenze neu eingemessen, nachdem der Katasterplan vom Bauamt eingetroffen war – nicht weil er Zweifel hegte, sondern weil Genauigkeit, wie er es verstand, keiner Begründung bedurfte.
Der Meter vor der Buchenhecke gehörte ihm.
Das wusste er, und er war der Einzige, dem es wichtig war.
Siebenundzwanzig Jahre lang hatte er im Vermessungsamt Katasterkarten gezeichnet, Grenzpunkte gesetzt, Abstände protokolliert – Zahlen, die kein Mensch je anfocht.
Jetzt, mit fünfundsechzig, war die Hecke das Einzige, das noch gemessen werden wollte.
Sie wuchs auf 1,25 Meter, wenn er nicht eingriff – ein Ergebnis, das er durch Beobachtung über drei Vegetationsperioden belegt hatte.
Er schnitt sie auf 1,10, stets am zweiten Samstag im Monat, mit der elektrischen Schere, deren Klinge er im April beim Schleifservice in der Industriestraße abgab.
Das Ergebnis war gleichmäßig wie eine gefräste Fläche.
Im vergangenen Oktober hatten neue Nachbarn eingezogen.
Kai – so stellte er sich vor, ohne den Familiennamen zu nennen – arbeitete in einer Firma, die Anwendungen für Mobiltelefone entwickelte.
Das hatte er Walter beim ersten Gespräch erklärt, als wäre es eine Entschuldigung oder eine Empfehlung.
Walters Frau Hilde war vor drei Jahren gestorben, und seitdem hatte er sich angewöhnt, Gespräche mit Fremden in weniger als zwei Minuten zu beenden.
Kai schien das nicht zu merken.
Er grüßte täglich, blieb manchmal an der Hecke stehen, fragte nach dem Wetter oder dem Rasendünger.
Walter antwortete, was gefragt war.
Mehr nicht.
Ende März – die Hecke stand bei 1,08, noch unter dem Sollmaß – sah Walter vom Küchenfenster aus, wie Kai mit einer Teleskopschere hantierte.
Die Bewegungen waren ungeübt, ruckartig, ohne Blick auf die Horizontale.
Walter trank seinen Kaffee zu Ende, spülte die Tasse, stellte sie ins Abtropfgestell.
Dann nahm er den kleinen schwarzen Block aus der Schublade und notierte: „31.3., Kai schneidet, Ergebnis: unregelmäßig, Höhe ca. 1,02."
Er legte den Block zurück, schloss die Schublade.
Die Tatsache, dass Kai überhaupt geschnitten hatte, störte ihn mehr, als er erwartet hatte.
Nicht die Ungleichmäßigkeit an sich – die konnte er korrigieren.
Was ihn störte, war schwerer zu benennen.
Es war, als hätte jemand in seiner Partitur einen Takt verändert, ohne dass ein Fehler entstanden wäre, dem er hätte widersprechen können.
Er stand am Fenster, bis Kai ins Haus gegangen war.
Dann zog er die Gardine vor.
In den folgenden Tagen maß er die Hecke täglich, vom Grundstück aus, mit dem Zollstock, den er seit seiner Pensionierung an der Hintertür hängen hatte.
Die Seite, die Kai gestutzt hatte, wies Stufen auf – bis zu drei Zentimeter Höhenunterschied auf einer Länge von vier Metern.
Walter protokollierte jeden Messpunkt.
Er tat es nicht, um etwas zu unternehmen.
Er tat es, weil das Messen das Einzige war, das er wirklich konnte.
Am Donnerstag der dritten Aprilwoche kam Kai an die Hecke und sagte, es wäre vielleicht sinnvoll, eine gemeinsame Schnitthöhe festzulegen.
Walter antwortete, dass die Schnitthöhe seit Jahren 1,10 sei.
Kai sagte, das wisse er nicht, er sei neu hier.
Walter sah ihn an.
Der junge Mann hielt seinem Blick stand, ohne Feindseligkeit, aber auch ohne Nachgeben.
„Ich schlage 1,15 vor", sagte Kai, „das wäre doch ein Kompromiss."
Walter erwiderte, er kenne keinen Grund für einen Kompromiss dort, wo eine Regelung bereits bestehe.
Er drehte sich um.
Kai rief ihm noch etwas nach, aber Walter hatte die Küchentür bereits geschlossen.
Am nächsten Morgen war die Hecke auf Kais Seite auf 1,15 – sauber geschnitten, diesmal mit erkennbarer Richtscheit-Führung.
Walter stand davor mit dem Zollstock.
Fünf Zentimeter.
Er maß drei Mal, an drei verschiedenen Stellen.
Das Ergebnis blieb.
Er ging in den Schuppen, holte die elektrische Schere, rollte das Kabel ab.
Dann stellte er das Gerät zurück, ohne es eingeschaltet zu haben.
Er schrieb nichts in den Block.
Der zweite Samstag im Mai war bewölkt, windstill.
Walter stand um 9:00 Uhr an der Hecke, die Schere in der Hand, das Verlängerungskabel bereits ausgerollt.
Er schaltete sie ein.
Der Motor summte, die Klinge vibrierte, der Geruch von warmem Elektrokabel und frisch geschnittenem Grün lag in der Luft.
Er legte die Schneide an die Heckenkrone.
Dann hielt er inne.
Nicht weil ihm etwas fehlte.
Sondern weil er plötzlich nicht mehr wusste, wofür er schnitt.
Die Hecke würde wachsen, ob er schnitt oder nicht – das hatte sie immer getan, das würde sie immer tun.
Kai würde seine Seite auf 1,15 halten oder auf irgendetwas anderes, je nach Stimmung.
Die Grundstücksgrenze blieb, wo sie war – eingemessen, protokolliert, unbestreitbar.
Das änderte sich nicht.
Walter schaltete die Schere aus.
Er legte sie auf den Rasen, neben den Zollstock, der noch im Gras lag.
Er setzte sich auf den Holzrahmen des Hochbeetes, das Hilde vor zwölf Jahren angelegt hatte und das er seitdem als Ablage für Gartengeräte nutzte.
Ein Vogel saß auf der Hecke, auf Kais Seite, und putzte sein Gefieder.
Er blieb sitzen, bis der Vogel weiterflog.
Dann stand er auf, räumte das Gerät in den Schuppen, wickelte das Kabel auf, hängte die Schere an ihren Haken.
Er ging ins Haus, aß, was er am Vortag gekocht hatte.
Am Abend öffnete er den schwarzen Block und betrachtete die Einträge, die sich über drei Vegetationsjahre erstreckten.
Er schloss ihn, ohne etwas hineingeschrieben zu haben.
Draußen wuchs die Hecke.
== 109 ==
Das Buch
Emma arbeitet in der Stadtbücherei.
Sie ist einunddreißig Jahre alt.
Sie sitzt jeden Tag an der Rückgabe.
Die Bücherei ist klein und ruhig.
Emma mag das.
Heute ist Mittwoch.
Es ist kurz nach zehn Uhr.
Eine Frau bringt ein Buch zurück.
Emma scannt den Barcode.
Die Frau geht wieder.
Emma macht das Buch auf.
Sie prüft, ob alle Seiten in Ordnung sind.
Da fällt ein kleines Stück Papier heraus.
Emma hebt es auf.
Sie liest: „Ich lese viel. Niemand weiß das."
Sie liest die Sätze noch einmal.
Das Papier ist klein und weiß.
Es gibt keinen Namen.
Es gibt kein Datum.
Emma denkt: Wer hat das geschrieben?
Die Frau, die das Buch zurückgebracht hat?
Oder jemand anderes?
Sie weiß es nicht.
Sie legt das Papier in ihre Schreibtischschublade.
Dann legt sie das Buch ins Regal.
Um elf Uhr kommt ein Mann mit drei Büchern.
Emma scannt die Bücher.
Sie reden kurz über das Wetter.
Dann geht der Mann.
Es wird wieder ruhig.
Emma denkt wieder an das Papier.
Sie öffnet die Schublade.
Das Papier liegt noch darin.
„Niemand weiß das."
Das ist ein trauriger Satz, denkt Emma.
Oder ist er normal?
Viele Menschen haben Geheimnisse.
Vielleicht ist das so bei jedem.
Sie schließt die Schublade.
Sie macht ihre Arbeit weiter.
Um fünf Uhr macht die Bücherei zu.
Emma räumt ihren Schreibtisch auf.
Sie holt das Papier aus der Schublade.
Sie liest den Satz ein letztes Mal.
Dann wirft sie das Papier in den Papierkorb.
Sie nimmt ihre Jacke und ihre Tasche.
Sie schließt die Bücherei ab.
Draußen ist es noch hell.
Emma geht zu Fuß nach Hause.
Es sind nur zehn Minuten.
Sie denkt an den Satz.
„Ich lese viel. Niemand weiß das."
Lesen ist doch keine Schande, denkt sie.
Warum schreibt man das auf?
Vielleicht weil man es jemandem sagen möchte.
Aber man findet die Worte nicht.
Sie weiß es nicht.
Sie kommt nach Hause.
Sie macht die Tür auf.
Ihre Katze Mimi kommt zu ihr.
„Hallo Mimi", sagt Emma.
Die Katze schnurrt.
Emma geht in die Küche.
Sie kocht Tee.
Sie setzt sich ans Fenster.
Draußen geht jemand vorbei.
Emma schaut kurz hin.
Sie trinkt ihren Tee.
Sie denkt nicht mehr an den Zettel.
Oder vielleicht doch ein bisschen.
Es ist ein normaler Mittwoch.
Morgen ist es wieder so.
----------------------------------------------
Zimmer 14
Sandra arbeitet im Hotel Bergblick in Graz.
Sie putzt jeden Tag die Hotelzimmer.
Sie ist vierundvierzig Jahre alt.
Sie macht ihre Arbeit gut, denn sie ist sehr ordentlich.
Am Dienstagmorgen hat sie die Zimmerliste bekommen.
Zimmer 14 war frei, denn der Gast ist abgereist.
Sie hat den Reinigungswagen in den Gang geschoben.
Dann hat sie die Tür von Zimmer 14 aufgemacht.
Das Zimmer war klein, aber ordentlich.
Das Bett war ungemacht.
Sandra hat zuerst das Fenster aufgemacht.
Dann hat sie angefangen, das Bett zu machen.
Unter dem Kissen hat sie ein gefaltetes Stück Papier gefunden.
Das war kein Notizzettel vom Hotel.
Es war ein normales Stück Papier.
Sie hat es aufgemacht und gelesen.
„Ich war hier. Kein Mensch fragt mich, wie es mir geht."
Sandra hat den Satz noch einmal gelesen.
Auf der Rückseite war nichts.
Sie hat das Papier kurz angeschaut.
Wer hat das geschrieben?
Der Gast ist heute Morgen früh abgereist.
Seinen Namen hat sie nicht gewusst.
Sie hat das Papier gefaltet und in ihre Schürzentasche gesteckt.
Dann hat sie das Bett fertig gemacht.
Sie hat das Badezimmer geputzt, den Boden gewischt und frische Handtücher hingelegt.
Um zehn Uhr war das Zimmer fertig.
Sie hat die Tür hinter sich geschlossen und ist weitergegangen.
Auf dem Gang hat sie ihre Kollegin Miriam getroffen.
„Alles in Ordnung?", hat Miriam gefragt.
„Ja, alles gut", hat Sandra gesagt.
Sie hat nicht über den Zettel gesprochen.
Sie hat auch nicht genau gewusst, warum nicht.
Vielleicht war es einfach so.
Sie hat noch vier weitere Zimmer geputzt.
Um halb zwei war die Schicht vorbei.
Sandra ist in den Umkleideraum gegangen.
Sie hat ihre Schürze ausgezogen.
Der Zettel war noch in der Tasche.
Sie hat ihn kurz in der Hand gehalten.
Dann hat sie ihn in den Mülleimer geworfen.
Sie hat ihre Jacke angezogen und ihre Tasche genommen.
Draußen war es sonnig und warm.
Sandra ist zur Straßenbahnhaltestelle gegangen.
Sie hat auf die Bahn gewartet.
Sie hat an den Satz gedacht: „Kein Mensch fragt mich, wie es mir geht."
Das kannte sie.
Das kannte sie gut.
Nicht immer, aber manchmal.
Die Straßenbahn ist gekommen.
Sie ist eingestiegen und hat sich ans Fenster gesetzt.
Sie hat nach draußen geschaut.
Zu Hause hat sie Kaffee gekocht.
Ihr Mann war noch nicht da.
Die Kinder waren in der Schule.
Sie hat allein am Küchentisch gesessen.
Der Kaffee war heiß.
Sie hat langsam getrunken.
Nach einer Weile hat sie ihr Handy genommen und ihre Schwester angerufen.
„Wie geht's?", hat die Schwester gefragt.
„Gut", hat Sandra gesagt. „Und dir?"
Sie haben fast eine Stunde gesprochen.
Danach hat sich Sandra besser gefühlt.
Über den Zettel hat sie nicht gesprochen.
Abends ist ihr Mann nach Hause gekommen.
Er hat nicht gefragt, wie ihr Tag war.
Sandra hat auch nichts erzählt.
Das war normal bei ihnen.
----------------------------------------------
Hinter der Heizung
Klaus arbeitet seit zwanzig Jahren als Hausmeister an der Pestalozzi-Grundschule in Regensburg.
Er ist siebenundfünfzig Jahre alt und trägt immer denselben blauen Kittel.
Die Kinder kennen ihn, aber er redet nicht viel mit ihnen.
Er mag seine Arbeit, weil er meistens allein ist und niemand ihn dabei stört.
Jeden Oktober macht er den Heizungscheck in allen Zimmern, bevor der Winter anfängt.
Das dauert meistens zwei Tage.
An einem Donnerstag Anfang Oktober hat er seinen Werkzeugkoffer genommen und ist von Zimmer zu Zimmer gegangen.
Er hat jeden Heizkörper aufgeschraubt und geprüft, ob alles sauber war.
Im Zimmer 3b hat er die Abdeckung abgezogen und dahinter ein gefaltetes Stück Papier gefunden.
Er nahm es heraus, faltete es auf und hielt es ans Licht.
Die Schrift war klein und ein wenig zittrig, als ob die Hand dabei gezittert hätte.
„Ich war jeden Tag in diesem Raum. Niemand weiß, was ich gedacht habe."
Klaus las die Sätze zweimal.
Er drehte das Blatt um, aber auf der Rückseite stand nichts.
Er sah sich im leeren Zimmer um, fast so, als ob jemand ihn beobachten würde.
Die Stühle standen auf den Tischen, wie immer nach dem Unterricht.
Wer hatte das geschrieben?
Ein Kind? Ein Lehrer? Jemand, der hier schon lange nicht mehr war?
Er wusste es nicht.
Das Papier hatte eine gelbliche Farbe und fühlte sich weich und alt an.
Er steckte es in die Tasche seines Kittels.
Dann schraubte er die Abdeckung wieder fest und machte weiter.
Die anderen Zimmer waren kein Problem.
Um halb zwölf hat er Pause gemacht im Hausmeisterraum neben dem Keller.
Er hat sein Brot gegessen und Kaffee aus seiner Thermoskanne getrunken.
Das Blatt lag aufgefaltet auf dem kleinen Tisch vor ihm.
Er las den Satz noch einmal: „Niemand weiß, was ich gedacht habe."
Das stimmte eigentlich für jeden, dachte er.
Auch für ihn selbst.
Er überlegte kurz, ob er den Zettel dem Schulleiter zeigen sollte.
Aber was sollte der Schulleiter damit anfangen?
Da stand kein Name, kein Datum, keine Klasse.
Klaus faltete das Blatt zusammen und steckte es wieder in die Tasche.
Er hat seinen Kaffee fertiggetrunken und das Geschirr abgewaschen.
Dann ist er wieder an die Arbeit gegangen.
Am Nachmittag hat er noch die Wasserrohre im Keller kontrolliert.
Alles war in Ordnung.
Um fünf Uhr hat er alle Türen abgeschlossen und die Fenster geprüft.
Er hat seinen Koffer genommen und ist zum Fahrradständer vor dem Schuleingang gegangen.
Es war schon dunkel und kalt.
Er fuhr nach Hause.
Zu Hause begrüßte ihn sein Hund Bruno.
Klaus hängte seinen Kittel an den Haken neben der Tür.
Das Blatt war noch in der Tasche.
Er hat Kartoffelsuppe gekocht und am Küchentisch gegessen.
Dabei lief der Fernseher, aber er hörte nicht richtig zu.
Nach dem Essen hat er den Zettel aus der Kitteltasche geholt und ihn noch einmal gelesen.
Dann hat er den Mülleimer geöffnet und den Zettel hineingeworfen.
Bruno kam und legte sich auf seine Füße.
Klaus blieb sitzen.
Er dachte immer noch an den Satz, obwohl der Zettel jetzt weg war.
Niemand weiß, was ich gedacht habe.
Das stimmte wahrscheinlich für viele Menschen.
Für die Kinder, die jeden Tag in Zimmer 3b gesessen hatten.
Für die Lehrer.
Und für ihn selbst auch.
Man spricht darüber nicht.
Das ist einfach so.
Er streichelte Bruno und saß noch eine Weile.
Im Schichtprotokoll hatte er eingetragen: „Heizungscheck abgeschlossen – keine Auffälligkeiten."
Das war richtig.
Es war nur nicht alles.
----------------------------------------------
Was bleibt
Hanna Breitner ist seit sieben Jahren im Stadtarchiv von Feldkirch angestellt.
Sie mag ihre Arbeit.
Die Ordnung der alten Dokumente gibt ihr das Gefühl, dass die Vergangenheit irgendwo sicher aufgehoben ist.
Jeden Morgen trinkt sie einen Kaffee, bevor sie die erste Schachtel öffnet – das ist ihre Regel, und sie hält sie ein.
An einem Montag im März bekommt sie den Auftrag, alte Gemeindeakten aus den siebziger Jahren zu sichten.
Die Schachteln kommen aus dem Keller und riechen nach Staub und altem Papier.
Hanna zieht Handschuhe an, weil die Tinte manchmal abfärbt.
Sie öffnet die erste Schachtel und beginnt zu sortieren: Protokolle, Rechnungen, Briefwechsel.
Alles liegt durcheinander, aber das ist bei alten Beständen normal.
Ihr Kollege Tobias sitzt am anderen Ende des Raumes und tippt.
Er fragt sie manchmal etwas, aber meistens arbeiten sie schweigend nebeneinander.
In der dritten Schachtel findet sie ein gefaltetes Blatt, das zwischen zwei Protokollheften steckt.
Es ist kein Amtsdokument.
Die Handschrift ist klein und sehr gerade, als hätte jemand langsam und sorgfältig geschrieben.
„Ich habe hier gewartet. Jetzt wartet niemand mehr. Das war es dann."
Hanna liest den Satz zweimal.
Sie dreht das Blatt um, aber die Rückseite ist leer.
Es gibt kein Datum, keinen Namen, keine Unterschrift.
Sie legt das Blatt auf den Tisch neben sich.
Sie überlegt, ob sie Tobias fragen soll.
Aber was soll sie fragen?
Sie nimmt das Blatt wieder in die Hand.
Das Papier ist vergilbt, aber es fühlt sich fest an.
Irgendjemand hat diesen Satz geschrieben und ihn zwischen die Akten gelegt – absichtlich oder aus Versehen, das weiß sie nicht.
Tobias steht auf und geht zur Kaffeemaschine.
„Willst du auch einen?"
„Nein danke", sagt Hanna.
Sie wartet, bis er sich wieder hinsetzt.
Dann faltet sie das Blatt zusammen und steckt es in die Tasche ihres Kittels.
Sie weiß nicht genau, warum sie das tut.
Sie öffnet die vierte Schachtel und arbeitet weiter.
Um zwölf Uhr geht sie in die Pause.
Sie isst ihr Brot am kleinen Tisch im Pausenraum, allein, weil Tobias nach draußen gegangen ist.
Sie denkt an den Satz: „Das war es dann."
Was war es dann?
Eine Stelle?
Eine Beziehung?
Ein ganzes Leben?
Sie weiß es nicht und wird es nie wissen.
Das ist das Merkwürdige daran.
Nach der Pause hängt sie den Kittel an den Haken.
Das Blatt ist noch in der Tasche.
Sie arbeitet weiter, bis um fünf Uhr die Dienstzeit endet.
Dann schreibt sie in ihr Tagesprotokoll: „Schachteln 1 bis 4 gesichtet, Protokolle und Rechnungen identifiziert, lose Blätter ohne Zuordnung separiert."
Das ist nicht gelogen, aber es ist auch nicht die ganze Wahrheit.
Sie holt den Kittel vom Haken, zieht das Blatt aus der Tasche und sieht es noch einmal an.
Dann faltet sie es kleiner und steckt es in die Innentasche ihres Mantels.
Sie geht nach unten, tritt auf die Straße.
Es ist schon dunkel, die Laternen sind an.
Sie geht zum Bahnhof, kauft sich ein Wasser, setzt sich in den Zug.
Der Zug fährt pünktlich ab.
Durch das Fenster sieht sie, wie die Lichter der Stadt weniger werden und dann die dunklen Felder kommen.
Sie versucht, nicht mehr an den Zettel zu denken.
Es gelingt ihr nicht ganz.
Zu Hause zieht sie den Mantel aus und hängt ihn in den Schrank.
Es ist noch da.
Sie kocht Nudeln, isst, räumt auf.
Danach setzt sie sich ans Fenster und sieht auf die ruhige Straße.
Nach einer Weile steht sie auf, geht zum Schrank und holt das Blatt heraus.
Sie liest den Satz ein letztes Mal.
Dann geht sie in die Küche, hält das Blatt über den Mülleimer und lässt es fallen.
Sie wäscht die Hände.
Bevor sie schlafen geht, öffnet sie den Mülleimer noch einmal.
Das Blatt liegt oben auf den Nudelresten.
Sie klappt den Deckel zu.
Sie geht ins Bett und löscht das Licht.
Die Person, die diesen Satz geschrieben hat, hatte niemanden mehr – das spürt sie.
Hanna hat Tobias, den Kaffee am Morgen und die Schachteln.
Das ist nicht wenig.
Das sagt sie sich, während die Dunkelheit gleichmäßig und still über ihr liegt.
----------------------------------------------
Das Inventar
Das Notariat Schauenburg & Partner liegt im zweiten Stock eines Gründerzeithauses an der Freien Straße in Basel, hinter einer Tür mit Mattglasscheibe, durch die das Licht immer gedämpft wirkt.
Gerhard Moos arbeitet hier seit neunundzwanzig Jahren.
Er ist Sachbearbeiter für Nachlassangelegenheiten, ein Amt, das niemand begehrt.
Jeden Morgen um acht Uhr fünfzehn hängt er seinen Mantel an den dritten Haken von links – nicht den zweiten, nicht den vierten.
Die Kollegen haben aufgehört, ihn darüber zu befragen.
Sein Schreibtisch ist die einzige Fläche im Büro, auf der kein fremdes Objekt zu finden ist.
Er hat einundfünfzig Jahre, einen Einzelsitz in der Straßenbahn und zu Hause einen Sessel, der genau auf ihn eingestellt ist.
Die Aktenpulte, die er betreut, tragen die Namen von Menschen, die nicht mehr sprechen können.
Das findet er tröstlich.
An einem Dienstag im November, an dem der Regen leise gegen die Scheiben trommelt, öffnet er den Nachlasskarton eines gewissen Konrad Ettlin, verstorben im August, ohne Hinterbliebene.
Der Inhalt ist ärmlich: zwei Kontoauszüge, ein abgelaufener Reisepass, eine Quittung über die Reparatur eines Rasenmähers.
Dann liegt da, zwischen die Kontoauszüge geschoben, ein einzelnes Blatt auf kariertem Schulheftpapier.
Er hält es zunächst für eine interne Notiz aus der Kanzlei.
Die Handschrift ist unregelmäßig, die Zeile zieht leicht nach rechts.
„Ich war's. Die anderen wissen es nicht. Sollen sie es auch nicht."
Gerhard liest den Satz.
Er liest ihn ein zweites Mal.
Er legt den Zettel auf die Tischfläche und betrachtet ihn, ohne ihn zu berühren.
Was er damit anfangen soll, ist eine Frage, die sich sofort in mehrere darunter fallende Fragen aufteilt: Handelt es sich um ein Geständnis, um eine Drohung, oder um den Überrest eines privaten Witzes, der nie erzählt wurde?
Ein Toter witzelt nicht.
Er schiebt den Gedanken zur Seite.
Das Blatt muss irgendwo hin.
Er dreht den Zettel um.
Die Rückseite ist leer.
Sein Blick wandert zum Fenster, wo der Regen unregelmäßige Muster gegen das Glas schreibt.
Dann steht er auf, geht zur Aktenkammer, zieht den Ordner heraus, der die noch unverarbeiteten Dokumente aufnimmt: Rubrik „Nicht zuordenbar, zur Prüfung".
Er heftet den Zettel ein, schreibt den Eingang mit Datum und Aktennummer in das Prüfregister, schließt den Ordner.
Zurück an seinem Schreibtisch trägt er in die Nachlassdatei Ettlin ein: „Bearbeitung abgeschlossen, keine Hinweise auf Dritte."
Der Cursor blinkt.
Er klickt auf Speichern.
Am Mittwoch fehlt das Dokument in der Prüfliste.
Nicht der Ordner – der hängt an seinem Platz – aber der Eintrag ist verschwunden, als wäre er nie vorhanden gewesen.
Gerhard scrollt durch das Register, dann noch einmal, dann ein drittes Mal.
Es gibt keine Löschung, keinen Bearbeitungshinweis, keinen Namen.
Er geht zur Partnerin Dr. Wälti, klopft an die angelehnte Tür.
Sie ist am Telefon, hebt kurz die Hand, er wartet.
Als sie auflegt, fragt er, ob jemand im Ordner „Nicht zuordenbar" Änderungen vorgenommen habe.
Sie sieht ihn über die Brillenränder an.
„Welcher Ordner?"
Er erklärt es.
Sie nickt langsam, mit dem Gesichtsausdruck jemandes, der eine Ausführung hört, die ihn nichts angeht.
„Vielleicht haben Sie ihn falsch abgeheftet."
Das hat er nicht.
Er sagt: „Möglicherweise."
Zurück am Schreibtisch öffnet er die Nachlassdatei Ettlin.
Der Eintrag steht dort, wie er ihn geschrieben hat: sauber, vollständig, ohne Lücke.
Alles ist korrekt.
Kein Zettel, kein Widerspruch, kein Nachweis, dass irgendetwas gewesen war.
Er klappt den Laptop zu.
Um siebzehn Uhr dreißig zieht er seinen Mantel vom dritten Haken, nickt dem Kollegen Feusi zu, der ihn nicht ansieht, und geht die Treppe hinunter.
Die Freie Straße ist nass, die Schaufenster spiegeln das Licht der Straßenlaternen.
Er läuft nicht schnell.
In der Straßenbahn setzt er sich auf den Einzelsitz hinter dem Fahrer.
Das ist sein Platz.
Durch das Fenster sieht er, wie die Häuser vorbeiziehen – die Reihen der Fassaden, hinter denen Leute leben, ohne dass er wüsste, wer sie sind oder was sie getan haben.
Zu Hause hängt er den Mantel auf, wäscht die Hände, erhitzt eine Portion Linsen aus dem Vorrat, den er am Sonntag vorgekocht hat.
Er isst am Küchentisch, der Stuhl gegenüber ist leer.
Er sieht ihn nicht an.
Danach spült er ab, stellt das Geschirr in die Ablage, wischt die Platte trocken.
Er setzt sich in den Sessel, schlägt das Buch auf, das er seit drei Wochen auf Seite siebzig liegen lässt, und liest zwei Seiten.
Dann legt er es auf die Armlehne.
Was Ettlin getan haben mag, weiß er nicht.
Was er selbst getan hat, weiß er.
Er hat den Zettel eingeheftet, den Eintrag gemacht, die Frage gestellt.
Mehr war nicht nötig.
Das Verfahren war korrekt.
Er schließt die Augen.
Die Deckenlampe wirft ein gleichmäßiges Licht, das er durch die Lider spürt.
Er öffnet sie wieder.
Er geht ins Schlafzimmer, zieht sich aus, hängt die Hose sorgfältig über den Stuhl.
Bevor er das Licht löscht, sieht er kurz in den Spiegel.
Er trägt den Ausdruck eines Mannes, der alles richtig gemacht hat – und der weiß, dass er dennoch nicht schlafen wird.
Er löscht das Licht.
Im Dunkeln liegt er auf dem Rücken, die Arme neben dem Körper.
Der Regen hat aufgehört.
Das Schweigen ist vollständig.
Gerhard weiß genau, wie viel darin Platz hat.
== 110 ==
1
Die falsche Tasse
Polizistin Sabine kommt in das Wohnhaus am Marktplatz.
Es ist Mittwochmorgen, kurz nach neun Uhr.
Der Hausverwalter Franz Feldmann ist tot.
Er liegt in seiner Küche auf dem Boden.
Sabine schaut sich alles an.
Die Küche ist sauber und aufgeräumt.
Auf dem Tisch steht eine Kaffeetasse.
Sabine fragt die Nachbarin: Hat er Kaffee getrunken?
Die Nachbarin schüttelt den Kopf.
„Nein", sagt sie. „Er hat nur Tee getrunken."
Sabine fotografiert die Tasse.
Sie sieht auch den Stuhl.
Er steht nicht richtig am Tisch.
Jemand hat ihn verschoben.
Sabine schreibt alles auf.
Sie klingelt bei den Nachbarn im Haus.
Frau König wohnt im zweiten Stock.
Sie sagt: Herr Feldmann war in Ordnung.
Sabine fragt: Gab es Probleme?
„Nein", sagt Frau König. „Alles war gut."
Herr Kraft wohnt im Erdgeschoss.
Er öffnet die Tür und sagt nichts.
Sabine sagt: Guten Morgen. Ich habe Fragen.
Kraft sagt: Bitte kommen Sie rein.
Sabine fragt: Wie war Herr Feldmann?
Kraft sagt: Er hat seine Arbeit gemacht.
Sabine fragt: Hat es Streit gegeben?
Kraft sagt: Nein, keinen Streit.
Sabine schaut ihn ruhig an.
Er sieht müde und blass aus.
Frau Berger aus dem dritten Stock kommt auch.
Sie sagt: Feldmann hat die Miete erhöht.
Sabine fragt: War das für alle so?
Frau Berger sagt: Ja, für alle. Das war im September.
Sabine schreibt alles auf.
Am nächsten Tag kommt Sabine wieder.
Sie klingelt noch einmal bei Herrn Kraft.
Er öffnet sofort die Tür.
Sabine legt ein Foto auf den Tisch.
Es ist ein Foto von der Kaffeetasse.
Kraft schaut das Foto lange an.
Sabine fragt: Trinken Sie Kaffee, Herr Kraft?
Kraft schaut auf den Boden.
Er sagt: Ja, das bin ich.
Er setzt sich auf einen Stuhl.
Er sagt: Ich wollte nur mit ihm reden.
Sabine fragt: Was ist dann passiert?
Kraft fängt an zu erzählen.
Feldmann hat die Miete erhöht.
Kraft hat nicht mehr genug Geld gehabt.
Er hat gesagt: Ich kann das nicht zahlen.
Feldmann hat gesagt: Das ist nicht mein Problem.
Kraft hat eine Tablette in den Kaffee getan.
Er hat den Kaffee zu Feldmann gebracht.
Kraft sagt: Ich wollte das nicht wirklich.
Sabine schreibt alles auf.
Sie sagt: Sie müssen jetzt mitkommen.
Kraft nickt und steht auf.
Er nimmt ruhig seinen Mantel.
Sabine fährt zurück in ihr Büro.
Sie schreibt ihren Bericht.
Sabine denkt an Frau König.
Frau König hat gesagt: Alles war gut.
Das war nicht die Wahrheit.
Alle haben gewusst, dass die Miete ein Problem war.
Aber keiner hat etwas getan.
Sabine trinkt einen Kaffee.
Sie denkt: Das ist immer so.
Die Wahrheit findet man immer.
Das Schlimmste ist, dass alle einfach weitergemacht haben.
----------------------------------------------
2
Der zweite Schlüssel
Dorfpolizist Werner Haas ist am Dienstag in die Bäckerei gegangen.
Der Bäcker Herbert Kuhn war seit dem Morgen tot.
Er lag auf dem Boden im hinteren Raum der Bäckerei.
Der Arzt hat gesagt: Es war ein Herzanfall.
Werner hat sich alles genau angeschaut.
Der Backofen war noch an, aber das Brot darin war schwarz.
Das war merkwürdig, denn Kuhn hat immer auf sein Brot geachtet.
Kein guter Bäcker lässt sein Brot verbrennen.
Neben dem Backofen stand eine Kaffeetasse.
Die Tasse war fast voll, aber der Kaffee darin war kalt.
Werner hat die Tasse und den Raum fotografiert.
An der Wand hing ein Schlüssel an einem Haken.
Daneben war ein zweiter Haken, aber der war leer.
Werner hat in sein Notizbuch geschrieben: Wo ist der zweite Schlüssel?
Er hat dann die Schubladen im Büro aufgemacht.
In der dritten Schublade lag ein Vertrag.
Es war ein Darlehensvertrag über viertausend Euro.
Der Name auf dem Vertrag war: Hildegard Naber.
Werner hat den Vertrag vorsichtig mitgenommen.
Am Nachmittag hat er mit Kuhns Frau Margarete gesprochen.
Margarete Kuhn war ruhig und hat wenig gesagt.
„Mein Mann war fleißig", sagte sie. „Er hatte keine Feinde."
Werner hat gefragt, ob jemand einen Schlüssel zur Bäckerei hatte.
Margarete hat gezögert und dann gesagt: Nur wir.
Werner hat das nicht geglaubt, aber er hat nichts gesagt.
Danach hat Werner mit dem Lehrling Jonas gesprochen.
Jonas war neunzehn Jahre alt und sehr nervös.
Er hat gesagt: Herr Kuhn war in Ordnung.
Werner hat ihn direkt gefragt: Wirklich?
Jonas hat genickt, aber er hat Werner nicht angeschaut.
Er wollte etwas sagen, aber dann hat er nichts gesagt.
Dann ist Werner zu Frau Naber gegangen, der Nachbarin.
Frau Naber hat die Tür sofort geöffnet und ihn hereingebeten.
Sie war sehr freundlich, vielleicht ein bisschen zu freundlich.
Werner hat gefragt: Haben Sie Herrn Kuhn gut gekannt?
„Ja, natürlich", sagte sie. „Wir waren Nachbarn seit zehn Jahren."
Werner hat gefragt: Gab es Probleme?
„Nein", sagte sie. „Überhaupt keine Probleme."
Auf dem Tisch lag eine Kuchendose von der Bäckerei.
Werner hat gefragt: Wann haben Sie die Dose bekommen?
„Gestern Abend", sagte Frau Naber. „Herbert hat sie mir gebracht."
Werner hat den Vertrag aus der Tasche geholt.
Er hat den Vertrag auf den Tisch gelegt.
Frau Naber hat den Vertrag angeschaut und nichts gesagt.
Werner hat gefragt: Haben Sie einen Schlüssel zur Bäckerei?
Nach einem kurzen Zögern hat sie genickt.
Werner hat gefragt: War das am Montagabend?
„Ja", sagte sie. „Das war am Montagabend."
Dann hat Frau Naber alles erzählt, ruhig und langsam.
„Ich habe ihm das Geld gegeben, denn ich habe ihm vertraut", sagte sie.
Kuhn hat sie immer vertröstet, aber er hat nie gezahlt.
„Ich wollte nur, dass er aufhört zu lügen", sagte sie.
Werner hat alles sorgfältig aufgeschrieben.
Er hat gefragt: Hat jemand von dem Geld gewusst?
Frau Naber hat die Schultern hochgezogen.
„Margarete hat davon gewusst", sagte sie.
Werner hat das auch notiert und ist ruhig geblieben.
Am Abend hat Werner seinen Bericht geschrieben.
Er hat an seinem Tisch gesessen und Tee getrunken.
Er hat an Jonas gedacht, der nicht aufgeschaut hatte.
Er hat an Margarete gedacht, die gesagt hatte: Nur wir.
Alle im Dorf hatten etwas gewusst, aber keiner hatte geholfen.
Werner hat den Bericht fertig geschrieben.
Er hat das Licht ausgemacht und ist nach Hause gegangen.
Er hat nicht mehr an Frau Naber gedacht.
Werner hat immer noch an den leeren Haken gedacht.
Der leere Haken hatte von Anfang an alles gesagt.
----------------------------------------------
3
Fremde Hände
Kriminalinspektor Lemberger kam am frühen Abend in Graseck an, als es draußen bereits dunkel war.
Das Berghotel „Zur Linde" lag am Ortsrand, umgeben von Fichten, die unter dem Schnee schwer aussahen.
Am Nachmittag hatte man den Hotelier Ottmar Sagl tot in der Küche gefunden.
Er lag auf dem Boden neben dem Herd, und der Arzt sprach von Herzstillstand.
Lemberger trat in die Küche und schaute sich um.
Es war alles sehr ordentlich.
Die Töpfe hingen in Reih und Glied an den Haken, und die Messer lagen sauber auf dem Brett.
Nur eine Suppenkelle hing am falschen Haken, ganz am Ende der Reihe.
Lemberger fotografierte die Kelle.
Er wusste noch nicht, ob das wichtig war.
Er öffnete das kleine Fenster über der Spüle und merkte, dass es nicht richtig geschlossen war.
Draußen waren es minus acht Grad.
Niemand ließ in diesem Winter ein Fenster offen, ohne einen Grund.
Das Medizinkästchen neben dem Kühlschrank war leer, obwohl laut Inventar eine Packung drin sein sollte.
Lemberger notierte das und ging in die Gaststube.
Er sprach als erstes mit der Köchin Rosa.
Sie war eine ruhige Frau, die beim Reden immer die Hände auf dem Tisch hatte.
Sagl war ein strenger Chef, sagte sie, aber eigentlich in Ordnung.
Lemberger fragte, was eigentlich in Ordnung bedeute.
Rosa zuckte die Schultern und sagte: Er hat halt seine Art gehabt.
Er sprach dann mit Emil, dem Portier.
Emil kannte Sagl seit zwanzig Jahren und hatte immer für ihn gearbeitet.
„Sagl hat immer pünktlich gezahlt", sagte Emil. „Das ist das Wichtigste."
Lemberger fragte, ob es Streit gegeben hatte.
Emil schüttelte den Kopf, aber er schaute dabei nicht auf.
Danach sprach Lemberger mit der Buchhalterin Helene Roth.
Sie war Ende vierzig und saß sehr gerade auf dem Stuhl.
Sie antwortete auf alle Fragen, aber ihre Antworten sagten nichts.
Lemberger fragte sie nach dem leeren Medizinkästchen.
Sie sagte: Ich weiß nicht, was da drin war.
Lemberger ließ sie gehen.
Aber er dachte die ganze Zeit an die Suppenkelle.
Am nächsten Morgen sprach er noch einmal mit Rosa.
Er fragte, ob die Kelle immer am letzten Haken gehangen hatte.
Rosa sagte sofort: Nein, die gehört ans zweite Ende, Herr Sagl war sehr genau damit.
Lemberger fragte, wer sonst noch in die Küche gegangen war.
Rosa dachte kurz nach und sagte: Nur Helene, manchmal wegen der Abrechnung.
Lemberger las danach die Personalakte von Helene Roth.
Sie arbeitete seit sieben Jahren im Hotel.
In den ersten drei Jahren hatte sie deutlich weniger verdient als ihre Kolleginnen.
Dann war ihr Lohn plötzlich gestiegen, ohne dass es eine Erklärung dafür gab.
Lemberger legte die Akte hin.
Er bat Helene Roth zum zweiten Gespräch.
Sie setzte sich wieder sehr gerade hin.
Lemberger legte die Akte auf den Tisch und schwieg.
Helene Roth schaute auf die Akte, dann auf ihn.
„Wann haben Sie es gemerkt?", fragte sie.
„Gerade eben", sagte Lemberger ruhig.
Sie nickte, als hätte sie das erwartet.
Das Geständnis war kurz und sehr sachlich.
Sagl hatte einen alten Fehler in ihrer Buchhaltung aufgehoben.
Er hatte nie damit gedroht, aber er hatte das Papier behalten.
Helene hatte gewusst, dass dieses Dokument noch irgendwo lag.
Das allein hatte schon gereicht.
Sie hatte drei Jahre lang mehr gearbeitet als alle anderen, für weniger Geld.
Dann hatte sie den Fehler selbst korrigiert, aber das Dokument war noch da gewesen.
„Ich wollte, dass das aufhört", sagte sie.
Lemberger fragte, ob sie jemanden um Hilfe gebeten hatte.
„Wen?", sagte sie, und das klang nicht bitter, nur sehr müde.
Lemberger schrieb alles auf und ließ sie dann gehen.
Er fuhr am Abend zurück in die Stadt.
Es hatte angefangen zu schneien, und die Straße durch den Berg war schmal.
Er dachte an Rosa, die gesagt hatte, Sagl war eigentlich in Ordnung.
Er dachte an Emil, der nicht aufgeschaut hatte.
Alle hatten gewusst, wie es im Hotel zuging.
Keiner hatte etwas gesagt.
Das war nicht Angst, das war einfach so.
Lemberger fuhr durch den Schnee und fragte sich, ob das Urteil irgendetwas ändern würde.
Für Helene Roth würde es ihr Leben verändern.
Für die anderen würde alles bleiben, wie es war.
----------------------------------------------
4
Das letzte Glas
Kommissarin Drechsel fuhr am Mittwochmorgen in das Dorf Niederbruck, weil der Tierarzt Dr. Halberstam tot in seiner Praxis gefunden orden war.
Sein Assistent hatte ihn entdeckt, als er morgens die Praxis aufschloss.
Der Arzt vom Gesundheitsamt sprach von einem Herzanfall.
Drechsel schrieb das in ihr Notizbuch und schaute sich um.
Halberstam lag hinter seinem Schreibtisch auf dem Boden, ruhig, als hätte er sich schlafen gelegt.
Auf dem Tisch stand ein Weinglas, das noch zur Hälfte gefüllt war.
Das war das Erste, was ihr auffiel: Der Mann hatte getrunken, aber das Glas war nicht leer.
Sie fotografierte alles, bevor sie irgendetwas anfasste.
Das Glas stand leicht schräg, so als hätte jemand es schnell abgestellt.
Die Flasche, aus der es eingeschenkt worden war, stand im Regal, der Korken war wieder eingesetzt.
Jemand hatte sich Zeit genommen, den Korken einzusetzen, aber nicht, das Glas gerade hinzustellen.
Drechsel notierte das.
Sie öffnete die Schreibtischschublade und fand Briefe, ordentlich mit einem Gummiband zusammengehalten.
Sie nahm sie mit.
Am Nachmittag begann sie mit den Befragungen.
Halberstams Frau Renate saß ihr gegenüber mit den Händen im Schoß und sprach ruhig über ihren Mann.
Er sei fleißig gewesen, verlässlich, und habe das Dorf über dreißig Jahre lang betreut.
Drechsel fragte, ob er Feinde gehabt habe.
Renate Halberstam schüttelte den Kopf, ohne zu zögern.
Das war so schnell, dass es wie eine einstudierte Antwort wirkte.
Der Assistent, ein junger Mann namens Florian, war nervöser.
Er sagte, Halberstam sei manchmal schwierig gewesen, wollte aber nicht erklären, was er damit meinte.
Drechsel ließ ihn reden, bis er von selbst aufhörte.
Der Pfarrer nannte Halberstam einen Mann mit Grundsätzen, und dabei lächelte er leicht, auf eine Art, die nicht warm war.
Drechsel fragte, welche Grundsätze er meine.
Der Pfarrer sagte, Halberstam habe immer gewusst, was er wert sei.
Das sagte er so, dass es kein Lob war.
Am nächsten Morgen las sie die Briefe.
Es waren keine Liebesbriefe.
Es waren Schreiben, in denen Halberstam anderen Dorfbewohnern erklärte, was er wisse und was es kosten würde, wenn er schwieg.
Die meisten waren nie abgeschickt worden – sie dienten wohl als Erinnerung, was er in der Hand hatte.
Einer war an eine Frau Brendel adressiert, die Grundschullehrerin.
Drechsel fuhr zu ihr.
Britta Brendel öffnete die Tür, bevor Drechsel klingeln konnte, als hätte sie gewartet.
Sie war eine kleine Frau mit ruhigen Augen, die nichts verrieten.
Drechsel legte den Brief auf den Tisch.
Brendel schaute ihn an, dann schaute sie Drechsel an.
Ich dachte, er hätte ihn vernichtet, sagte sie.
Drechsel sagte nichts.
Brendel setzte sich, als ob ihre Beine nachgegeben hätten.
Wie viel wissen Sie schon?, fragte sie.
Drechsel sagte: Genug.
Das Geständnis dauerte etwa zwanzig Minuten.
Brendel erzählte alles genau: das Glas, den Wein, das Mittel aus dem Medizinschrank ihres verstorbenen Mannes.
Halberstam hatte sie seit Jahren erpresst, weil er wusste, dass sie einmal einen Schulbericht gefälscht hatte.
Sie hatte das getan, um einen Schüler zu schützen – und er hatte es benutzt.
Er hat nie viel verlangt, sagte sie.
Nur genug, damit ich nicht vergesse, wer er ist.
Drechsel schrieb mit, ohne sie zu unterbrechen.
Als Brendel fertig war, fragte sie, ob sie ihre Katze versorgen lassen dürfe, bevor sie mitkomme.
Drechsel sagte ja.
Sie wartete in der Küche, während Brendel das Tier fütterte.
Sie dachte daran, dass die anderen Briefe noch auf ihrem Schreibtisch lagen.
Weitere vier Empfänger.
Keiner von ihnen hatte sie angerufen.
Abends schrieb Drechsel ihren Bericht im Auto, weil das Gasthaus im Dorf zu laut war.
Sie schrieb klar und sachlich, so wie sie immer schrieb.
Aber hinter dem letzten Satz saß sie noch eine Weile.
Sie dachte an Renate Halberstam, die so schnell den Kopf geschüttelt hatte.
Sie dachte an Florian, der schwierig gesagt hatte und nicht weitergeredet hatte.
Sie dachte an den Pfarrer, der über Grundsätze gesprochen hatte, als wäre das ein Witz.
Alle hatten etwas gewusst oder geahnt.
Keiner hatte etwas getan.
Nicht weil sie Angst hatten.
Sondern weil es leichter war, nichts zu tun.
Drechsel startete den Motor und fuhr aus dem Dorf.
Sie dachte, dass das Urteil über Brendel einfach sein würde.
Das andere – die vier unversandten Briefe, die schweigende Witwe, der lächelnde Pfarrer – das würde keiner verurteilen.
Das war das Schwierigste an diesem Beruf: nicht die Mörder, sondern die Gleichgültigkeit, die sie möglich gemacht hatte.
----------------------------------------------
5
Was der Nebel zurücklässt
Inspektor Ravensberg kam am frühen Morgen in Starkenfeld an, als der Nebel noch so tief über dem Hafen hing, dass man die Kaimauer kaum sehen konnte.
Das Haus des Notars Witkowski lag am Ende der Hauptstraße, zurückversetzt hinter einemgepflegten Eisenzaun, der aussah, als wäre er gestern erst gestrichen worden.
Die Haustür stand offen.
Drinnen war alles so aufgeräumt, dass Ravensberg unwillkürlich innehielt.
Witkowski lag im Arbeitszimmer auf dem Boden, beide Hände flach auf den Dielen, als hätte er sich im letzten Moment noch einmal besonnen.
Der Arzt, der ihn als Erster untersucht hatte, sprach von Herzversagen; Ravensberg notierte das Wort und setzte ein Fragezeichen dahinter.
Auf dem Schreibtisch stand eine halb geleerte Kaffeetasse, die leicht aus ihrer Untertasse gerückt war – ein kleines Missverhältnis in einem Raum, der sonst keines kannte.
Neben dem Kamin lag ein Buch aufgeschlagen auf dem Boden, obwohl der Sessel, aus dem es hätte fallen können, gut drei Meter entfernt stand.
Ravensberg hob es auf und legte es auf den Tisch.
Er fotografierte die Tasse, das Buch und die leicht angelehnte Schranktür, hinter der
Witkowskis Mandantenakten in akkurat beschrifteten Mappen hingen.
Eine fehlte.
Nicht der leere Platz war das Problem, sondern dass kein anderer Ordner gerückt worden war, um die Lücke zu kaschieren.
Jemand hatte die Mappe genommen und entweder nicht daran gedacht oder nicht daran denken wollen, dass das Fehlen auffallen würde.
Ravensberg stand eine Weile am Fenster und sah auf den Garten, in dem noch nichts blühte.
Er fuhr mit dem Finger über das Fensterbrett und fand keinen Staub.
Er begann seine Befragungen am selben Nachmittag, weil er wusste, dass in kleinen Orten Geschichten sich schneller verändern als Fakten.
Witkowskis Tochter Irene empfing ihn in einem Wohnzimmer, dessen Ordnung dieselbe Angestrengtheit hatte wie alles andere in diesem Haus.
Sie beschrieb ihren Vater als einen ruhigen, pflichtbewussten Mann, der keine Feinde gehabt habe und sich um die Angelegenheiten anderer nie gekümmert habe.
Ravensberg hörte zu, ohne zu unterbrechen, und vermerkte, dass sie das Wort Feinde benutzte, obwohl er es nicht eingeführt hatte.
Der Bürgermeister, ein Mann namens Hollenbeck, empfing ihn mit der geschäftsmäßigen Herzlichkeit von jemandem, der gelernt hat, Vertrauen zu simulieren.
Witkowski sei ein Stützpfeiler der Gemeinschaft gewesen, sagte er; man werde ihn vermissen.
Das sagte er so, wie man sagt, dass das Wetter schön war – als Feststellung über etwas, das sich nicht mehr ändern lässt und das man deshalb auch nicht mehr betrauern muss.
Nur der alte Brückenwächter Starobin, den Ravensberg beim Hafenausgang traf, sagte etwas anderes.
Er zuckte die Schultern und meinte, Witkowski habe seine Sachen gehabt wie jeder andere auch.
Ravensberg fragte, was für Sachen.
Starobin sah aufs Wasser.
Sachen eben, sagte er und ging.
Am dritten Tag bat Ravensberg Witkowskis Sekretärin Margot Seifried zu einem zweiten Gespräch.
Sie war eine Frau Ende fünfzig, die so still saß, als hätte sie gelernt, möglichst wenig Raum einzunehmen.
Er fragte sie nach der fehlenden Akte.
Sie schwieg einen Moment – nicht das Schweigen des Überlegens, sondern das Schweigen von jemandem, der prüft, wie viel Kraft das Weiterlügen noch kosten wird.
Dann sagte sie, Witkowski habe die Mappe selbst entnommen, kurz bevor er gestorben sei.
Ravensberg fragte, wann sie das gesehen habe.
Sie sagte, am Dienstagabend, gegen halb sieben.
Er fragte, was in der Akte gewesen sei.
Sie faltete die Hände.
Ein Darlehensvertrag, sagte sie.
Und?
Und ein Brief.
Von wem?
Sie sah ihn an, als wäre die Frage unnötig, weil die Antwort so offensichtlich war, dass das Aussprechen sie beleidigen würde.
Von mir, sagte sie schließlich.
Was folgte, war kein Zusammenbruch.
Margot Seifried schilderte den Ablauf mit einer Sachlichkeit, die Ravensberg an das Protokoll eines Buchhalters erinnerte: die Tassen, der Tee, der Zusatz aus dem Medizinschrank.
Der Grund war ein Dokument, das Witkowski seit Jahren aufbewahrt hatte und das ihr gesamtes Erspartes, das Erbe ihrer Mutter, für eine Schuld beanspruchte, die sie nie eingegangen war.
Er hatte sie damit nie erpresst – er hatte es nur aufbewahrt, mit der umsichtigen Sorgfalt eines Mannes, der alles verwahrt, was sich eines Tages als nützlich erweisen könnte.
Das war das Schlimmste, sagte sie: dass er nicht böse gewesen sei.
Nur berechnend, auf eine Weise, die so alltäglich war, dass sie selbst ihm gegenüber nie einen anderen Namen dafür gehabt hatte.
Ravensberg schrieb seinen Bericht in der einzigen Gaststätte des Ortes, am Fenster, mit Blick auf die Straße.
Er trank Kaffee, der nicht gut war.
Hollenbeck kam um halb neun herein, sah ihn und setzte sich ans andere Ende der Theke.
Sie sprachen nicht.
Ravensberg dachte daran, dass in diesem Ort alle gewusst oder geahnt hatten, was Witkowski tat.
Dass sie es nicht als ihr Problem betrachtet hatten, war keine Ausnahme – es war das Normalste der Welt.
Er zahlte, zog den Mantel an und ging zum Wagen.
Die Straße war leer, der Nebel war wieder da.
Auf der Fahrt zurück in die Stadt dachte er nicht an Margot Seifried.
Er dachte an Irene, die das Wort Feinde benutzt hatte, ohne dass er es eingeführt hatte, und die danach so ruhig weitergesprochen hatte, als wäre nichts gewesen.
Er dachte an Starobin, der aufs Wasser gesehen hatte.
Er dachte an Hollenbeck, der sich ans andere Ende gesetzt hatte.
Es wäre möglich gewesen, dass einer von ihnen in dieser Nacht in der Küche gestanden und Margot Seifried nicht aufgehalten hatte.
Es wäre ebenso möglich gewesen, dass keiner von ihnen es je für nötig gehalten hatte, irgendetwas aufzuhalten.
Ravensberg fuhr und wusste, dass er die Wahrheit gefunden hatte – ordentlich, vollständig, beweisbar.
Er wusste auch, dass sie das Leichteste an diesem Fall gewesen war.
== 111 ==
1
Das rote Heftchen
Tanja backt jeden Tag Brot.
Sie wohnt in Golikino.
Das ist ein kleines Dorf.
Ihre Nachbarin heißt Baba Ljuba.
Baba Ljuba ist alt.
Sie wohnt allein.
Eines Tages klopft Tanja an ihre Tür.
Baba Ljuba macht nicht auf.
Tanja öffnet die Tür.
Sie geht hinein.
Baba Ljuba sitzt am Tisch.
Sie bewegt sich nicht.
Sie ist gestorben.
Auf dem Tisch stehen zwei Tassen.
Tanja schaut die Tassen an.
Eine Tasse ist leer.
Eine Tasse ist halbvoll.
Der Tee ist noch warm.
"Wer war hier?", denkt Tanja.
Sie trinkt den Tee in der fremden Tasse.
Am nächsten Tag geht Tanja durch das Dorf.
Sie bringt Brot zu den Leuten.
Alle wissen, dass Baba Ljuba gestorben ist.
"Sie war sehr nett", sagt Frau Bobrowa.
"Das ist sehr traurig", sagt der alte Wassili.
Tanja fragt: "Hat jemand Baba Ljuba besucht?"
Frau Bobrowa schüttelt den Kopf.
"Nein, ich war nicht da", sagt sie.
Tanja geht zum Laden.
Sie kauft Mehl.
Sie fragt den Ladenbesitzer.
Er wird rot.
Er spricht über das Wetter.
Tanja fragt: "Wo ist Baba Ljubas rotes Heftchen?"
"Welches Heftchen?", fragt er.
Aber er schaut zur Seite.
Die Leute in Golikino schweigen.
Alle schweigen auf dieselbe Art.
Zwei Tage später geht Tanja zu Baba Ljubas Haus.
Sie öffnet die Schublade neben dem Bett.
Darin ist ein Stück Papier.
Tanja liest das Papier.
Da sind Namen von Leuten aus dem Dorf.
Neben den Namen stehen Zahlen.
Das ist ein Geheimnis.
Tanja sieht den Namen von Bürgermeister Nikolai.
Er ist dreimal da.
Tanja faltet das Papier zusammen.
Sie schaut aus dem Fenster.
Der Garten sieht nicht gut aus.
Das Gras ist sehr hoch.
Baba Ljuba hat lange nicht im Garten gearbeitet.
Tanja geht nach Hause.
Sie kocht Tee.
Sie legt das Papier auf den Tisch.
"Was mache ich jetzt?", denkt sie.
Bürgermeister Nikolai ist ein mächtiger Mann.
Er kennt alle im Dorf.
Tanja kennt seine Frau und seine Kinder.
Seine Kinder gehen zur Schule.
Baba Ljuba hat das Heftchen lange gehabt.
Sie hat nie etwas gesagt.
"Warum hat sie nichts gesagt?", fragt Tanja sich.
Tanja weiß die Antwort nicht.
Sie trinkt den Tee.
Sie denkt lange nach.
Dann nimmt sie die Bibel.
Sie legt das Papier in die Bibel.
Sie stellt das Buch ins Regal.
"Das bleibt hier", sagt sie.
Am nächsten Morgen bäckt Tanja wieder Brot.
Frau Bobrowa kommt und kauft ein Brot.
"Wie geht es dir?", fragt Frau Bobrowa.
"Gut", sagt Tanja.
Das Dorf lebt weiter.
----------------------------------------------
2
Rosas Notizbuch
Fjodor Saizew ist früher Lehrer gewesen, aber jetzt ist er in Rente.
Er wohnt in Kamenka, einem kleinen Dorf.
Seine Nachbarin Rosa Timofejewna war alt und hat allein gewohnt.
Am Mittwoch hat Fjodor sie besucht.
Er hat an die Tür geklopft, aber niemand hat geöffnet.
Die Tür war offen, und Fjodor ist hineingegangen.
Rosa hat am Tisch gesessen und sich nicht bewegt.
Sie ist gestorben.
Auf dem Tisch waren zwei Tassen.
Eine war leer und eine war halbvoll.
Fjodor hat die halbvolle Tasse angeschaut.
Der Tee war noch warm.
Rosa hatte nie Besuch gehabt, denn sie mochte keine Leute.
Aber heute standen da zwei Tassen.
Fjodor hat den Tee in der fremden Tasse getrunken.
Er hat nicht gewusst, warum er das getan hat.
Am nächsten Tag ist Fjodor durch das Dorf gegangen.
Er hat bei den Nachbarn geklingelt und sein Beileid gesagt.
Alle haben von Rosas Tod gewusst.
"Das ist sehr traurig", hat Nadja Morosowa gesagt.
"Sie war eine gute Nachbarin", hat der alte Grigorij gesagt.
Fjodor hat gefragt, wer Rosa zuletzt besucht hatte.
Nadja hat den Kopf geschüttelt.
"Ich weiß das nicht."
Beim Lebensmittelladen hat Fjodor Brot gekauft.
Er hat den Ladenbesitzer gefragt: "Hat jemand Rosa besucht?"
Der Ladenbesitzer ist rot geworden.
Er hat über den Herbstregen gesprochen.
Fjodor hat Rosas Notizbuch erwähnt.
"Welches Notizbuch?", hat der Mann gefragt.
Aber Fjodor hat gesehen, dass der Mann gelogen hat.
Die Leute in Kamenka haben nichts gesagt, aber alle auf die gleiche Art.
Das hat Fjodor nicht vergessen.
Drei Tage nach Rosas Tod ist Fjodor wieder in ihr Haus gegangen.
Er hat gesagt, er will das Fenster schließen.
Das Schlafzimmer war ordentlich und sauber.
Fjodor hat die Schublade am Bett aufgemacht.
Darin war ein Stück Papier.
Das war Rosas Handschrift.
Fjodor hat das Papier langsam gelesen.
Es war eine Abschrift aus Rosas Notizbuch.
Rosa hat Namen von Leuten aus dem Dorf aufgeschrieben.
Neben den Namen waren Daten und Beträge.
Die Leute haben Rosa für etwas bezahlt, aber nicht für Gemüse oder Eier.
Fjodor hat den Namen von Pawel Krutow gefunden.
Krutow war der Vorsitzende des Kolchos.
Sein Name war dreimal da.
Fjodor hat das Papier auf das Fensterbrett gelegt.
Er hat in den Garten geschaut.
Die Beete waren nicht gepflegt, denn Rosa war lange krank gewesen.
Fjodor ist nach Hause gegangen und hat Tee gekocht.
Das Papier hat er auf den Tisch gelegt.
Er hat gewusst, was er tun sollte.
Er sollte zur Polizei in die Stadt fahren.
Aber Krutow ist ein mächtiger Mann.
Krutow hat Fjodors Sohn geholfen, als er studieren wollte.
Und die anderen Namen – das waren Fjodors Nachbarn.
Rosa hat das Notizbuch viele Jahre gehabt, aber sie hat nie etwas gesagt.
Warum hat sie das getan?
Hat sie die Leute schützen wollen?
Oder hatte sie Angst gehabt?
Fjodor hat den Tee getrunken und nachgedacht.
Dann hat er das Papier gefaltet.
Er hat die Bibel vom Regal genommen.
Er hat das Papier in die Bibel gelegt.
Er hat das Buch zurückgestellt.
"Das ist nicht einfach", hat er laut gesagt.
Am nächsten Morgen ist Fjodor früh aufgestanden.
Er hat Kaffee getrunken und sich angezogen.
Dann ist er durch das Dorf spaziert.
Es war noch früh, und alles war still.
Die Kinder sind zur Schule gegangen.
Der Traktor hat auf dem Feld gearbeitet.
Kamenka war ein normales Dorf.
Und Fjodor wollte, dass es so bleibt.
----------------------------------------------
3
Das Wäschebuch
Katja Wolkowa führt seit zwanzig Jahren den Laden in Borjowka.
Sie verkauft dort Mehl, Salz und alles, was die Leute brauchen.
Marija Beljajewa hatte für fast jeden im Dorf die Wäsche gewaschen.
Am Donnerstag wollte Katja die fertige Wäsche bei ihr abholen.
Sie hat geklopft, aber niemand hat geöffnet.
Die Tür war offen, also ist Katja hineingegangen.
In der Küche roch es nach kaltem Herd und Kräutertee.
Marija saß am Tisch und rührte sich nicht.
Sie war gestorben.
Katja stand still und schaute.
Dann hat sie die zwei Tassen auf dem Tisch gesehen.
Beide waren benutzt, und der Tee in der zweiten Tasse war noch warm.
"Marija hatte doch nie Besuch", dachte Katja.
Die alte Frau hatte immer gesagt: "Besucher machen nur Mühe."
Trotzdem hat Katja sich gesetzt.
Sie hat die fremde Tasse genommen und den Tee ausgetrunken.
Er schmeckte nach Zitronenmelisse und Honig.
Katja wusste selbst nicht genau, warum sie das getan hatte.
Am nächsten Tag hat Katja die Wäsche an alle zurückgebracht.
Sie hat jeden Haushalt besucht, dem Marija Wäsche gewaschen hatte.
Alle wussten schon, dass Marija gestorben war.
"Das ist sehr traurig", sagte Frau Nossowa und nahm ihr Bündel.
Katja fragte, wer Marija zuletzt besucht hatte.
Frau Nossowa schaute zur Seite.
"Ich war nicht da. Ich weiß es nicht."
Bei Herrn Tscherenkow war es ähnlich.
Er ist rot geworden, als Katja die Frage gestellt hat.
"Welches Notizbuch meinen Sie?", hat der Doktor Ssawin gefragt.
Aber er hatte seltsam geschaut, als Katja es erwähnt hatte.
Die Leute sprachen über das Wetter, die Ernte, das Wochenende.
Nur über das Notizbuch hat keiner gesprochen.
Katja hat verstanden: Alle wussten Bescheid, aber keiner wollte reden.
Zwei Tage später ist sie noch einmal zu Marija gegangen.
Offiziell wollte sie der Katze Futter bringen.
Das Schlafzimmer war ordentlich und roch nach Lavendel.
Katja hat die kleine Schublade am Bett aufgemacht.
Ganz unten lag ein zusammengefaltetes Stück Papier.
Es war Marijas Handschrift: klein, sauber, ordentlich.
Katja hat das Blatt aufgemacht und gelesen.
Es war eine Abschrift aus dem Wäschebuch.
Marija hatte aufgeschrieben, was sie in den Taschen der Wäsche gefunden hatte.
Briefe, Fotos, Zettel – und daneben immer die Namen der Leute.
Dann waren da Mittel aufgelistet, die kein Arzt verschreibt.
Und daneben: wer sie bestellt hatte und wann.
Da war auch der Name von Direktor Gruschew.
Dreimal, mit Datum.
Katja hat das Blatt zusammengefaltet.
Sie hat aus dem Fenster geschaut.
Im Garten lagen Äpfel auf dem Boden, weil niemand sie gepflückt hatte.
Die Äste hingen tief, aber niemand war mehr da, der sich darum kümmerte.
Zu Hause hat Katja Tee gekocht und sich an den Tisch gesetzt.
Das Blatt lag vor ihr.
Sie wusste, was sie tun müsste.
"Ich sollte zur Polizei gehen", dachte sie.
Aber dann hat sie an Direktor Gruschew gedacht.
Er hatte ihrer Tochter Lena die Stelle in der Stadt vermittelt.
Ohne Gruschew wäre Lena heute noch hier.
Katja hat an die anderen Namen auf dem Blatt gedacht.
Das waren ihre Nachbarn und ihre Kunden.
Leute, die sie jeden Tag gesehen hat.
Marija hatte das Notizbuch jahrelang bei sich gehabt, aber sie hat nie etwas gesagt.
Vielleicht hatte Marija das aus einem guten Grund getan.
Vielleicht wollte sie die Leute schützen.
Katja hat den Tee getrunken, langsam, bis die Tasse leer war.
Dann hat sie die Bibel aus dem Regal genommen.
Sie hat das Blatt hineingelegt und das Buch zugeklappt.
Sie hat es zurück ins Regal gestellt.
"Das ist keine leichte Entscheidung", sagte sie halblaut.
Aber sie hat es getan.
Am nächsten Morgen hat Katja den Laden geöffnet wie immer.
Frau Nossowa ist früh gekommen und hat Salz gekauft.
"Wie geht es dir?", hat sie gefragt.
"Es geht", hat Katja geantwortet.
Das stimmte nicht ganz.
Aber es war genug.
----------------------------------------------
4
Die Schrift der Hebamme
Als Olga Alexandrowna die Küche der toten Fekla betrat, standen da zwei Tassen auf dem Tisch, und das frische Brot daneben war noch nicht ganz kalt.
Fekla Spiridowna, die Hebamme von Michailowka, war einundachtzig Jahre alt gewesen und am Dienstagmorgen gestorben.
Niemand hatte sie zuletzt besucht – so hieß es jedenfalls.
Aber zwei Tassen lügen nicht.
Olga kannte Fekla gut genug, um zu wissen, dass sie Brot nicht für sich allein buk.
Sie setzte sich auf den Stuhl, der nicht Feklas war.
Die andere Tasse war halbvoll, der Tee noch lauwarm.
Olga trank ihn aus, ohne lange zu überlegen.
Er schmeckte nach Pfefferminze und etwas, das sie nicht benennen konnte.
Es war ihr, als müsste sie das tun, obwohl sie nicht hätte sagen können, warum.
Das kleine Notizheft, das Fekla immer in der Schürzentasche getragen hatte, war nirgendwo auf dem Tisch.
Olga suchte kurz mit dem Blick, ohne aufzustehen.
Es lag nirgends in der Küche.
Das bedeutete etwas, auch wenn sie noch nicht wusste, was.
Am nächsten Morgen backte Olga einen Pflaumenkuchen und machte sich auf den Weg durch das Dorf.
Zuerst besuchte sie Anja Lubjankina, die als Erste von Feklas Tod gehört hatte.
Anja sprach viel über Feklas gütige Art und die bevorstehende Beerdigung, aber das Notizheft erwähnte sie mit keinem Wort.
Bei der Witwe Prochorowa war es genauso: viele Erinnerungen, aber immer die falschen.
Beim Lebensmittelhändler Suslow kaufte Olga Mehl und fragte beiläufig, ob jemand Fekla kurz vor ihrem Tod noch besucht hatte.
Suslow wurde verlegen und sprach über den Regen, obwohl es seit einer Woche nicht geregnet hatte.
Am Nachmittag traf sie die Tochter des Pfarrers, die sagte, sie habe an Feklas Fenster noch spät abends Licht gesehen.
Mehr wollte das Mädchen nicht sagen, und Olga drängte es nicht.
Das Dorf schwieg über das Notizheft so gleichmäßig, dass es wie Absicht wirkte.
Wer zufällig schweigt, schweigt unterschiedlich.
Hier schwiegen alle auf dieselbe Art.
Olga kannte dieses Schweigen aus ihrer Zeit als Briefträgerin.
Es war das Schweigen von Menschen, die einen Brief erhalten haben, über den man nicht spricht.
Sie saß abends auf der Bank vor ihrem Haus und rauchte, obwohl sie seit Jahren nicht mehr geraucht hatte.
Dann schrieb sie auf einem Zettel, wer das Thema gewechselt hatte, sobald sie Feklas Namen nannte.
Es waren fast alle.
Drei Tage nach Feklas Tod kehrte Olga in das leerstehende Haus zurück, um die Blumen zu gießen.
Das Schlafzimmer war aufgeräumt und roch nach altem Holz und trockenem Lavendel.
Olga öffnete die Schublade am Nachttisch, ohne genau zu wissen, was sie suchte.
Unter einem alten Tuch und einem Rosenkranz lag ein zusammengefaltetes Blatt Papier.
Die Handschrift war Feklas: runde Buchstaben mit kleinen Kreisen über dem ü.
Es war eine Abschrift von einigen Seiten aus dem Notizheft, in Bleistift geschrieben.
Olga las langsam.
Auf den ersten Seiten waren harmlose Kräutermittel gegen Fieber und Schlaflosigkeit aufgeführt.
Dann kamen andere Rezepturen, für Mittel, die kein Arzt verordnet hätte, und dahinter Namen von Personen, die sie bestellt hatten.
Manche der Namen kannte Olga aus dreißig Jahren im Dorf.
Den Namen von Pjotr Semjonowitsch Norin, dem Gemeinderatsvorsitzenden, fand sie dreimal, mit Datumsangaben.
Olga legte das Blatt auf das Fensterbrett und sah in den verwilderten Garten.
Die Sonnenblumen waren umgefallen, weil niemand sie rechtzeitig gebunden hatte.
Sie dachte daran, wie lange Fekla dieses Wissen bei sich getragen hatte, ohne jemanden damit zu belasten.
Vielleicht war das eine Art Schutz gewesen.
Für die anderen.
Nicht für Fekla.
Olga fuhr nach Hause, kochte Wasser auf und setzte sich an den Küchentisch.
Die Abschrift lag vor ihr, und sie betrachtete sie, ohne sie anzufassen.
Was das Gesetz von ihr wollte, wusste sie: zum Polizeiposten in Woronki fahren, zwanzig Kilometer.
Pjotr Semjonowitsch kannte den Polizeichef persönlich.
Das wusste das ganze Dorf.
Olga zog kurz in Betracht, ob Fekla sie als diese Person ausgewählt hatte.
Sie hatte die Abschrift nicht vernichtet, obwohl sie die Gelegenheit gehabt hatte.
Sie hatte sie in der Schublade gelassen, so als sollte jemand sie finden.
Olga fragte sich, ob sie gemeint war.
Aber dann dachte sie an Mascha, Pjotrs junge Frau, die in Michailowka aufgewachsen war und bei Olga manchmal Kaffee trank.
Sie dachte an Maschas Kinder, die in die Dorfschule gingen, die Pjotr mitfinanziert hatte.
Gerechtigkeit war nicht immer eine klare Rechnung.
Manchmal war sie gar keine Rechnung, sondern eine Frage, die man nicht laut stellen durfte.
Olga faltete das Blatt sorgfältig und schob es in die Bibel, die auf dem Regal stand.
Sie wählte eine Stelle in der Mitte, zwischen zwei Seiten, die sie selbst nicht kannte.
Dann trank sie den Tee.
Der Wind hatte zugenommen, und die Laterne vor dem Haus schwang hin und her.
Olga saß noch lange am Tisch, während draußen die Schatten länger wurden.
Sie dachte an die Briefe, die sie in dreißig Jahren getragen hatte: gute und schlechte, erwartete und gefürchtete.
Manche davon hätte sie nicht zustellen sollen.
Manche hätte sie verbrennen sollen.
Aber sie hatte immer zugestellt, weil das ihr Beruf gewesen war und weil sie damals nicht hatte wissen können, was die Briefe bedeuteten.
Heute hatte sie zum ersten Mal etwas nicht getan, was sie hätte tun sollen.
Sie wusch die Tasse, trocknete sie ab und stellte sie in den Schrank.
Draußen war es jetzt dunkel.
Sie schlief gut.
----------------------------------------------
5
Was der Tee noch wusste
Als Irina Pawlowna das Haus der toten Natascha Grigorjewna betrat, roch es nach Wacholder, trockenem Thymian und dem stillen Zustand von Räumen, in denen man aufgehört hat aufzuräumen.
Die Kräuterhändlerin aus Krasnoje war still gestorben, wie man hier zu sterben pflegte: ohne Zeugen, ohne das Aufheben, das Städter für ihre Toten veranstalteten.
Niemand hätte gefragt.
Wäre da nicht die Sache mit den Tassen gewesen.
Sie standen auf dem Küchentisch, beide benutzt, die eine schräg in die andere gestellt, als hätte jemand es eilig gehabt, aber nicht eilig genug.
Irina hatte Natascha vierzig Jahre lang gekannt, lange genug, um zu wissen, dass diese Frau kein Geschirr auf dem Tisch stehen ließ.
Nicht aus Reinlichkeit.
Aus Überzeugung.
Sie setzte sich auf den Stuhl, der nicht Nataschas war, und ließ sich Zeit.
Die zweite Tasse hob sie an die Nase: Kamille, Honig, und hinter beidem eine Bitternote, die eine ehemalige Feldsher nicht hätte ignorieren können.
Sie trank.
Es war kein Durst, der sie dazu trieb, sondern das Bedürfnis, durch das Trinken zu teilen, was die Tote zuletzt geteilt hatte, um zu verstehen, wer ihr gegenübergesessen hatte.
Der Tee war noch warm.
Draußen rief jemand nach einem Kind, und das Kind antwortete nicht.
Irina ließ den Blick durch die Küche wandern: die schiefe Ikone über dem Herd, die Einmachgläser, die schlafende Katze auf dem Fensterbrett.
Das Büchlein, das Natascha seit Jahren in der Schürzentasche getragen hatte, war nicht da.
Noch am Nachmittag brach Irina mit einem Glas eingemachter Pflaumen auf, das eigentlich für den Winter gedacht gewesen wäre.
Bei den Schwestern Worobiowa traf sie auf die Art von Schweigen, das schlechter verbirgt, was es verbirgt, je sorgfältiger es kultiviert wird.
Man sprach über Fedors kranken Enkel, über den Preis für Heizöl, über den ungewöhnlich frühen Frost – mit einer Präzision, die zeigte, dass man genau wusste, worüber man nicht sprach.
Irina hörte zu, trank den angebotenen Tee bis auf den Grund und machte keine Notizen.
Beim Krämer Parfjonowitsch erwähnte sie beiläufig, Natascha habe das Büchlein sonst nie aus der Hand gegeben, und wartete, was das auslösen würde.
Es löste nichts aus.
Parfjonowitsch nickte und sortierte Mehlsäcke, als hätte er die Bemerkung nicht gehört.
Der Pfarrer empfing sie zwischen welkenden Bohnenreihen und sprach so ausführlich über Nataschas stilles Wesen, dass Irina das Gegenteil hinter jedem Lob zu hören meinte.
Nur die alte Gromowa, deren Taubheit sie ehrlicher machte als ihre Nachbarn, murmelte beim Abschied: "Das Büchlein hat jemandem nicht gepasst."
Mehr sagte sie nicht.
Das Dorf schwieg über das Büchlein mit der konzertierten Unauffälligkeit von Menschen, die alle denselben blinden Fleck kultivieren, ohne dies je miteinander besprochen zu haben.
Aber gerade dieses Schweigen – seine Gleichförmigkeit, seine beinahe choreografierte Sorgfalt – war für Irina eine Auskunft.
Es hatte die Kontur einer Aussage, aus der man die erste Seite herausgerissen hatte.
Abends schrieb sie auf einem Zettel, wer gerötet hatte, wer den Blick gesenkt hatte und wer das Thema zu schnell gewechselt hatte.
Es waren zu viele.
Am dritten Tag kehrte sie unter dem Vorwand zurück, nach der Katze zu sehen.
Das Schlafzimmer roch nach Lavendel und angehaltenem Atem.
Die Ikone der Gottesmutter hing schief über dem Bett, was Natascha zu Lebzeiten nie geduldet hätte.
In der Schublade des Nachttischs, unter Wollknäueln, einem Rosenkranz und einem Gebetsbuch mit gesplittertem Einband, lag ein sorgfältig gefaltetes Blatt.
Irina erkannte die Handschrift sofort: die kleinen, gedrängten Buchstaben einer Frau, die sparsam gewesen war – mit Worten wie mit allem anderen.
Es war eine Abschrift – nicht das Büchlein selbst, das fehlte, sondern Nataschas eigenhändig angefertigte Kopie jener Seiten, die sie offenbar als stille Versicherung zurückbehalten hatte.
Sie faltete das Blatt auf dem Fensterbrett auseinander.
Die ersten Seiten enthielten Rezepturen, die Irina aus ihrer Feldsher-Zeit kannte: Baldriantinktur, Weidenbastabsud, Schafgarbenessig gegen Magenbeschwerden.
Dann kamen die anderen.
Rezepturen für Mittel, die kein Arzt verordnet hätte – gegen Schwangerschaften, gegen Schmerzen, die man nicht benennt –, und hinter jedem Eintrag Namen von Personen, die sie bestellt hatten.
Namen, die Irina kannte.
Der Name des Bürgermeisters Gerasim Bolschakow stand zweimal darunter, mit Datum und Menge, in der sachlichen Klarheit einer Buchführung ohne Urteil.
Irina legte das Blatt auf das Fensterbrett und sah in den Garten.
Die Brennnesseln standen mannshoch, die Beerensträucher ungepflegt, die Beete aufgegeben – als hätte Natascha sehr genau gewusst, dass sich das Jäten nicht mehr lohnen würde.
Die Katze saß draußen auf dem Gartenzaun und beobachtete sie durch das Glas.
Irina beobachtete sie zurück.
Zu Hause kochte sie Tee und setzte sich an ihren eigenen Tisch, der kleiner war als Nataschas und weniger Spuren trug.
Die Abschrift legte sie mit dem Rand bündig zur Tischkante, ohne sie zu berühren, und betrachtete sie.
Die Frage, was sie tun müsste, stellte sich nicht.
Das wusste sie.
Die Frage war, was aus Krasnoje würde, wenn sie es täte: aus den Familien, aus dem Gleichgewicht, das ein kleines Dorf braucht, um ein kleines Dorf zu bleiben.
Hätte sie die Abschrift zur Miliz in der Kreisstadt gebracht, wäre Bolschakow nicht der Einzige gewesen, dem ein Verfahren gedroht hätte – das war das Wesen der Liste.
Bolschakow hatte ihr vor drei Jahren die Rente gerettet, als die Bezirksbehörde einen Formfehler zum Anlass genommen hatte, die Zahlung einzufrieren.
Er war kein guter Mensch, aber er war das, was Krasnoje von einem Bürgermeister verlangen konnte.
Irina dachte an die anderen Namen auf dem Blatt.
Töchter, die jetzt Kinder hatten.
Söhne, die Felder bestellten.
Natascha hatte das Büchlein ihr Leben lang aufbewahrt, es aber nie benutzt.
Das musste etwas bedeuten.
Vielleicht: dass Schuld erinnert, aber nicht eingetrieben werden sollte.
Vielleicht auch nur, dass Natascha Angst gehabt hatte.
Beides war wahr, und beides spielte keine Rolle mehr.
Irina trank den Tee bis auf den Grund.
Dann faltete sie die Abschrift – einmal, zweimal, viermal – auf ein Format, das in das alte Gesangbuch passte, das ihr Mann ihr zur Hochzeit geschenkt hatte.
Zwischen Seite vierundzwanzig und fünfundzwanzig, wo der erste Psalm begann, den sie nicht mehr auswendig konnte.
Das Gesangbuch stellte sie zurück ins Regal, zwischen die Jahrbücher der Kolchose, die niemand mehr aufschlug.
Es war kein Frieden, was sie empfand, und es war auch keine Gewissheit.
Es war das Wissen, dass Krasnoje mit einem Wissen weiterleben würde, so wie es immer gelebt hatte: mit dem Großteil der Wahrheit unter den Dielen.
Draußen ging eine Gestalt über die Hauptstraße.
Am Gang erkannte Irina den Bürgermeister: der selbstgewisse Schritt eines Mannes, der vergessen hat, dass man vergessen werden kann.
Er schaute nicht herein.
Irina stand am Fenster, bis er außer Sichtweite war.
Dann spülte sie die Tasse, trocknete sie ab und stellte sie in den Schrank.
== 112 hier weiter ==
1
Alles in Ordnung
Paul Winter ist Polizist in Gotha.
Heute Morgen hat er eine neue Aufgabe bekommen.
Es geht um Hildegard Kunkel, 71 Jahre alt.
Sie wohnt in der Gartenstraße und lebt allein.
Niemand hat sie als vermisst gemeldet.
Ein Ladenbesitzer hat die Polizei angerufen.
Paul liest die Akte.
Es gibt keine Familie in der Kartei.
Paul schreibt "ungeklärt" auf das Formular.
Er weiß nicht genau, was das Wort bedeutet.
Aber es gibt kein anderes.
"Was machst du heute?", fragt sein Kollege Nico.
"Ich besuche einen Laden", sagt Paul.
Nico nickt.
Paul nimmt seine Jacke und geht.
Der Laden heißt "Szabo's Ecke" und ist fünf Minuten entfernt.
Der Besitzer heißt Árpád Szabo und ist ungefähr fünfzig Jahre alt.
"Frau Kunkel kommt jeden Tag", sagt er.
"Seit zwölf Tagen ist sie nicht mehr gekommen."
"Kennen Sie sie gut?", fragt Paul.
"Ja", sagt Szabo.
"Sie kauft immer Brot und Milch."
"Hat sie Familie?", fragt Paul.
"Ich glaube nicht."
"Sie lebt allein."
Paul schreibt alles auf.
"Hat sie etwas gesagt?", fragt er.
Szabo nickt.
"Sie hat gesagt, dass sie bald wegfährt."
"Wann hat sie das gesagt?", fragt Paul.
"Vor etwa zwei Wochen."
Paul notiert das.
"Haben Sie Angst?", fragt Paul.
"Ja", sagt Szabo.
"Sie ist eine nette Frau."
Paul bedankt sich.
"Ich hoffe, ihr geht es gut", sagt Szabo.
"Ich auch", sagt Paul.
Er geht zurück ins Büro.
Im Büro sucht Paul in der Datenbank.
Er findet einen Eintrag aus dem Jahr 2022.
Hildegard Kunkel ist damals auch verschwunden.
Sie ist nach zwei Wochen zurückgekommen.
Niemand weiß, wo sie gewesen ist.
Der Fall ist geschlossen worden.
Paul liest das zweimal.
Es gibt keine neue Information.
Er schreibt seinen Bericht.
Er schreibt: "Keine neuen Erkenntnisse."
Dann schreibt er: "Wiedervorlage in einer Woche."
"Und?", fragt Nico.
"Nichts", sagt Paul.
"Okay", sagt Nico.
Das Gespräch ist zu Ende.
Paul legt die Akte ins Regal.
Im Regal stehen viele andere Akten.
Sie sehen alle gleich aus.
Paul trinkt seinen Kaffee.
Er ist schon kalt.
Um halb sechs macht Paul seinen Computer aus.
"Tschüs", sagt er zu Nico.
"Tschüs", sagt Nico.
Paul geht die Treppe runter und dann nach Hause.
Draußen ist es dunkel.
Er geht zu Fuß.
Er kommt am Laden von Herrn Szabo vorbei.
Das Licht ist noch an.
Paul geht weiter.
Er denkt: "Morgen komme ich wieder."
Die Akte ist noch da.
Vielleicht gibt es neue Informationen.
Vielleicht nicht.
Das ist die Arbeit.
----------------------------------------------
2
Kein Alarm
Sandra Lehr arbeitet als Polizistin in Mainz.
Heute Morgen hat sie eine neue Akte bekommen.
Der Name auf der Akte ist Heinrich Obst.
Er ist 67 Jahre alt und wohnt in der Bremserstraße 9.
Bis jetzt hat ihn niemand als vermisst gemeldet oder angezeigt.
Ein Nachbar hat angerufen, denn das Balkonlicht bei Obst brennt seit zehn Tagen.
Sandra hat "ungeklärt" auf das Formular geschrieben.
Das Wort hat ihr nicht gefallen, aber es hat kein anderes gegeben.
"Was hast du heute?", hat ihr Kollege Klaus gefragt.
"Eine Akte ohne Anzeige", hat Sandra gesagt.
Klaus hat genickt und seinen Kaffee getrunken.
Sandra hat ihre Jacke genommen und ist gegangen.
Der Nachbar heißt Ralf Birk und wohnt gegenüber von Obst.
Er ist ungefähr sechzig Jahre alt und lebt allein.
Sandra hat an seiner Tür geklingelt.
Er hat die Tür sofort geöffnet.
"Ich mache mir Sorgen", hat er gesagt. "Das Licht geht nicht aus."
Sandra hat gefragt, ob er Heinrich Obst gut gekannt hat.
"Wir haben manchmal gesprochen", hat Birk gesagt. "Aber nicht oft."
"Hat er Familie?", hat Sandra gefragt.
"Er hat eine Schwester, glaube ich. Aber die kommt selten."
Sandra hat das aufgeschrieben.
"War er in letzter Zeit anders?", hat sie gefragt.
Birk hat nachgedacht.
"Er ist ruhiger geworden", hat er gesagt. "Aber ich weiß es nicht genau."
"Hat er etwas mitgenommen, zum Beispiel einen Koffer?", hat Sandra gefragt.
"Das habe ich nicht gesehen", hat Birk gesagt.
Sandra hat sich bedankt und ist zur Wohnungstür von Obst gegangen.
Sie hat geklingelt, aber niemand hat geöffnet.
Durch den Briefkastenschlitz hat sie Werbung auf dem Boden gesehen.
Dann ist Sandra zurück ins Büro gefahren.
Zurück im Büro hat Sandra in der Datenbank gesucht.
Es hat einen alten Eintrag gegeben: Heinrich Obst, 2021.
Er ist damals auch verschwunden.
Er ist nach zehn Tagen zurückgekommen.
Niemand hat gefragt, wo er gewesen ist.
Der Fall ist geschlossen worden, denn es hat kein Verbrechen gegeben.
Sandra hat das gelesen und kurz nachgedacht.
Sie hat eine Schwester in der Kartei gefunden: Ingrid Obst, Kaiserslautern.
Sie hat dort angerufen.
Die Schwester hat nicht gewusst, wo Heinrich ist.
"Er macht das manchmal", hat sie gesagt. "Er braucht Zeit für sich."
"Haben Sie Angst?", hat Sandra gefragt.
"Nein", hat die Schwester gesagt. "Er kommt immer wieder."
Sandra hat das aufgeschrieben.
Sie hat ihren Bericht fertig gemacht.
Unter "Ergebnis" hat sie geschrieben: Keine neuen Informationen.
Unter "Nächste Schritte" hat sie geschrieben: Wiedervorlage.
"Und?", hat Klaus gefragt.
"Nichts", hat Sandra gesagt.
"Wie erwartet", hat Klaus gesagt.
Sandra hat die Akte ins Regal gelegt.
Das Regal ist fast voll.
Alle anderen Akten sehen genauso aus.
Um Viertel nach fünf ist Sandra gegangen.
Es war schon dunkel.
Sie ist die Treppe runtergelaufen und durch die Hintertür hinausgegangen.
Auf der Straße war es kalt, aber sie hat nicht auf den Bus gewartet.
Sie ist gelaufen.
Sie hat an Ralf Birk gedacht, der sich wirklich Sorgen gemacht hat.
Das ist selten, hat sie gedacht.
Die meisten Menschen machen sich keine Sorgen.
Oder sie zeigen es nicht.
Sie hat auch an die Schwester gedacht: "Er kommt immer wieder."
Vielleicht hat das gestimmt.
Vielleicht ist Heinrich Obst irgendwo und es geht ihm gut.
Aber das hat nicht in der Akte gestanden, denn niemand hat es gewusst.
Neue Akte, neues Formular, dasselbe Ergebnis.
Das ist nicht schlimm, hat Sandra gedacht.
Sie hat die Straße überquert und ist nach Hause gegangen.
----------------------------------------------
3
Was das Formular nicht fragt
Lukas Pietsch kam um kurz nach acht ins Büro und hängte seine Jacke an den Haken.
Auf seinem Schreibtisch lag eine neue Akte, die jemand in der Nacht dorthin gelegt hatte.
Er machte sich einen Kaffee und setzte sich, bevor er die erste Seite aufschlug.
Der Name oben auf dem Formular war Margit Wendland, 58 Jahre, Beruf ungeklärt.
Niemand hatte sie als vermisst gemeldet.
Ihr Arbeitgeber hatte angerufen, weil sie seit acht Tagen nicht erschienen war.
"Sie hat sich nie abgemeldet", hatte die Frau am Telefon gesagt.
"Das ist nicht ihre Art."
Pietsch las die Akte bis zum Ende.
Es gab keine Angehörigen, die man hätte kontaktieren können.
Das Formular verlangte eine Kategorie.
Er schrieb "ungeklärt" und dachte nicht weiter darüber nach.
Es war das einzige Wort, das für solche Fälle vorgesehen war.
Sein Kollege Seeger fragte, was er heute mache.
"Eine Vermisste, vielleicht", sagte Pietsch.
Seeger nickte und schaute wieder aus dem Fenster.
Pietsch zog seinen Mantel an und nahm die Akte mit.
Die Wäscherei lag in einer Seitenstraße, zwanzig Minuten zu Fuß vom Revier.
Es roch nach Dampf und Waschmittel, und die Maschinen liefen alle gleichzeitig.
Die Inhaberin hieß Petra Stark und war ungefähr fünfzig Jahre alt.
Sie trocknete sich die Hände ab, als Pietsch hereinkam.
"Margit war neun Jahre bei uns", sagte sie.
"So etwas passiert uns nicht."
"Hat sie sich je krank abgemeldet?", fragte Pietsch.
"Natürlich, wie jeder."
"Aber sie hat immer Bescheid gegeben."
"Haben Sie versucht, sie zu erreichen?"
"Das Handy ist abgeschaltet."
Pietsch schrieb das in sein Heft.
"Hatte sie Freunde hier, soweit Sie das wissen?"
Stark schüttelte den Kopf.
"Sie hat nicht viel erzählt, das war eben ihre Art", sagte sie.
"War sie glücklich hier?", fragte Pietsch.
Stark sah ihn kurz an.
"Ich kann nur sagen, dass sie ihre Arbeit gemacht hat."
Pietsch bedankte sich und verließ die Wäscherei.
Zurück im Büro suchte Pietsch in der Datenbank nach Margit Wendland.
Es gab einen Eintrag aus dem Jahr 2019.
Sie war damals für fast zwei Wochen verschwunden und dann zurückgekehrt, ohne Erklärung.
Der Sachbearbeiter hatte "Fall abgeschlossen" notiert und nichts weiter.
Pietsch lehnte sich zurück und schaute kurz an die Decke.
Er dachte darüber nach, warum das System solche Fragen nicht stellte.
Das System fragte nach Fakten, nicht nach Gründen.
Er öffnete den Bericht auf seinem Computer und begann zu tippen.
Unter "Maßnahmen" schrieb er: Arbeitgeber befragt, Datenbank geprüft, keine neuen Erkenntnisse.
Unter "Nächste Schritte" schrieb er: Wiedervorlage in sieben Tagen.
Seeger stellte wortlos eine Tasse Kaffee auf seinen Schreibtisch.
"Irgendwas?", fragte er.
"Nichts. Wie immer", sagte Pietsch.
Er unterschrieb den Bericht und schloss das Fenster auf dem Bildschirm.
Die Akte legte er ins Regal neben der Tür, zu sieben anderen, die genauso aussahen.
Er hatte nicht das Gefühl, etwas Falsches getan zu haben.
Er hatte auch nicht das Gefühl, etwas Richtiges getan zu haben.
Er hatte einfach das getan, was das System von ihm erwartete.
Um halb sechs schloss Pietsch seinen Computer und stand auf.
Er zog seine Jacke an und nahm die Tasche vom Haken.
Seeger war schon gegangen, und das Büro war jetzt fast still.
Nur der Drucker am Ende des Raums summte leise vor sich hin.
Auf dem Parkplatz war es kalt, und die Straßenlaternen fingen gerade an zu leuchten.
Er holte sein Fahrrad aus dem Unterstand und fuhr los.
Die Stadt war ruhig, und die meisten Läden hatten schon geschlossen.
Er dachte an Margit Wendland, aber er wusste nicht, was er dabei denken sollte.
Vielleicht war sie irgendwo.
Vielleicht war sie zurückgekehrt, bevor er morgen ins Büro kam.
Wahrscheinlich nicht.
Die Akte würde morgen noch im Regal stehen, genau dort, wo er sie hingelegt hatte.
Pietsch bog in seine Straße ein und stieg vom Rad.
Zu Hause brannte Licht.
Er schloss das Fahrrad ab und ging die Treppe hinauf.
Morgen würde er wiederkommen.
Das war nicht gut und nicht schlimm.
Es war einfach das, was er jeden Morgen tat.
----------------------------------------------
4
Der offene Vorgang
Denis Halmann legte die Akte auf seinen Schreibtisch und öffnete sie, ohne sich zu setzen.
Es war ein Freitag im November, und das Revier in der Nähe des Bahnhofs war um diese Zeit fast leer.
Gudrun Fellner, 62 Jahre, zuletzt gesehen am 28. Oktober.
Keine Vermisstenanzeige, kein besorgter Angehöriger, kein Hinweis aus der Nachbarschaft.
Das Sozialamt hatte sich gemeldet, weil Fellner drei Termine in Folge nicht wahrgenommen hatte.
Das sei ungewöhnlich für sie gewesen, stand im Bericht.
Halmann fragte sich, ob "ungewöhnlich" das richtige Wort war.
Vielleicht war sie einfach gegangen.
Manche Menschen gingen, ohne es zu melden, und das war ihr gutes Recht.
Aber das Formular verlangte nach einer Bearbeitung, also bearbeitete er den Fall.
Er trank seinen Kaffee aus, obwohl er längst kalt war, und nahm seinen Mantel vom Haken.
Sein Kollege Bremer fragte, wohin er gehe, und Halmann nannte die Adresse, ohne weitere Erklärung.
"Klingt nach einem Nieten-Fall", sagte Bremer.
Halmann zog die Tür hinter sich zu und nahm die Treppe.
Das Sozialamt lag zehn Minuten entfernt, in einem Gebäude, das so aussah, als wäre es für etwas anderes gebaut worden.
An der Rezeption saß eine junge Frau mit einem Namensschild: K. Moser.
Sie war die Sachbearbeiterin, die den Fall gemeldet hatte, und sie wirkte erleichtert, dass jemand gekommen war.
"Ich kannte Frau Fellner nicht gut", sagte sie, "aber sie kam immer pünktlich."
Pünktlichkeit schien die einzige Eigenschaft zu sein, die Behörden an Menschen wahrnahmen, sodass alles andere an ihnen unsichtbar blieb.
Moser zeigte ihm die Terminliste auf ihrem Bildschirm: drei ausgefallene Termine, einer nach dem anderen, alle ohne Abmeldung.
Fellner habe manchmal von ihrer Tochter gesprochen, sagte Moser, aber einen Namen habe sie nie erwähnt.
Eine Adresse für die Tochter gebe es in der Akte nicht.
Halmann notierte das und fragte, ob Fellner je etwas gesagt habe, das ihn stutzen lassen sollte.
Moser dachte einen Moment nach.
"Sie hat mal gesagt, sie würde am liebsten irgendwohin fahren, wo sie niemand kennt", sagte sie.
"Das sagen viele", antwortete Halmann.
"Ja", sagte Moser, "aber bei ihr klang es nicht nach einem Wunsch, sondern nach einem Plan."
Halmann schrieb das auf, ohne zu wissen, ob es nützlich sein würde.
Meistens waren solche Hinweise entweder alles oder nichts.
Er bedankte sich und ging.
Zurück im Büro las Halmann die Akte noch einmal, diesmal gründlicher.
Gudrun Fellner hatte in den letzten vier Jahren dreimal die Adresse gewechselt, immer innerhalb desselben Stadtteils.
Es gab einen Eintrag aus dem Jahr 2020: Sie war verschwunden und nach zwei Wochen zurückgekehrt, ohne dass jemand gefragt hatte, woher.
Der Sachbearbeiter hatte den Fall geschlossen, weil es keinen Straftatbestand gab.
Das war korrekt.
Es war auch das Problem.
Das System konnte Menschen nur schützen, wenn sie in eine Kategorie passten, und Fellner passte in keine.
Sie war nicht Opfer, nicht Verdächtige, nicht hilflos im rechtlichen Sinne.
Sie war einfach weg.
Halmann rief bei der Meldebehörde an und fragte nach einer Ummeldung.
Es gab keine, nicht seit dem vergangenen Jahr.
Er rief die Notaufnahme des nächsten Krankenhauses an, weil das Protokoll es verlangte.
Dort war sie nicht.
Er trug alle Ergebnisse in den Bericht ein, obwohl "Ergebnisse" das falsche Wort war.
Es waren Nicht-Ergebnisse, einer nach dem anderen, wie Antworten auf Fragen, die man lieber nicht stellte.
Bremer kam herein und fragte, wie es laufe.
"Wie immer", sagte Halmann.
Bremer nickte und ging wieder.
Das war das Gespräch, das man führte, wenn man nichts zu sagen hatte und trotzdem nicht schweigen wollte.
Halmann schloss den Bericht und legte die Akte in das Regal für offene Fälle.
"Offen" bedeutete hier: nicht abgeschlossen, aber auch nicht mehr aktiv bearbeitet.
Es war ein Zustand, der genau für solche Fälle erfunden worden war.
Halmann fand das weder zynisch noch beruhigend.
Es war einfach so.
Um kurz nach sechs verließ Halmann das Revier und ging zur Bushaltestelle zwei Straßen weiter.
Es regnete nicht mehr, aber die Luft roch noch danach, schwer und kühl.
Er wartete auf den Bus und dachte an das, was Moser gesagt hatte: Es habe geklungen wie ein Plan.
Wenn das stimmte, war Fellner nicht verloren.
Sie war irgendwo, und vielleicht war dieses Irgendwo besser als das hier.
Aber das war keine Schlussfolgerung, die man in einen Bericht schreiben konnte.
Das System arbeitete mit Fakten, nicht mit Wahrscheinlichkeiten.
Schon gar nicht mit Hoffnung.
Der Bus kam fünf Minuten zu spät, was in dieser Stadt als pünktlich galt.
Halmann stieg ein, fand einen Platz am Fenster und sah zu, wie die Stadt an ihm vorbeizog.
Nasse Straßen, Lichtfenster, Menschen mit Schirmen oder ohne.
Er dachte nicht mehr an Fellner, weil das keinen Zweck hatte.
Oder er versuchte es zumindest.
Morgen würde er wieder ins Büro kommen, und die Akte würde dort sein, wo er sie gelassen hatte.
Vielleicht gab es neue Informationen, vielleicht nicht.
Das war der Rhythmus dieser Arbeit, und Halmann hatte sich damit abgefunden, nicht aus Resignation, sondern weil es das Klügste war.
Der Bus hielt.
Er stieg aus.
Zu Hause wartete nichts Besonderes, und das war an einem Tag wie diesem genug.
----------------------------------------------
5
Die Geduld des Verfahrens
Es war ein Mittwoch im Oktober, als Vera Natzke die Akte auf ihren Schreibtisch legte, mit der sachlichen Ruhe, die man erst nach Jahren lernt.
Stanislav Oborin, 69 Jahre alt, zuletzt gesehen am dritten Oktober, Verwandte nicht ermittelbar, keine Meldung.
Niemand hatte ihn vermisst gemeldet.
Entdeckt worden war sein Verschwinden durch ein Paket, das zweimal an seine Adresse zugestellt worden war und schließlich ungeöffnet an die Poststelle zurückgekehrt war.
Natzke kannte diese Art von Fall, bei der nicht die Abwesenheit selbst Alarm schlug, sondern ihr Echo in einem bürokratischen Nebengleis.
Das seit Jahren mit halbfertigen Akten belegte Büro hatte die gedämpfte Geschäftigkeit eines Orts, in dem nichts Wesentliches geschah, aber alles sorgfältig dokumentiert wurde.
Das Formular verlangte nach einer Kategorie.
Sie wählte "ungeklärt", weil dies das einzige Wort war, das die Bürokratie für eine Abwesenheit bereithielt, die kein Verbrechen und kein freiwilliger Abgang war.
Hinter ihr summte der Drucker.
Irgendwer druckte etwas aus, das vermutlich ebenfalls niemals gelesen werden würde.
Der Raum roch nach Papierstaub und altem Kaffee, nach den Jahren, in denen sich beides zu einer eigenen Atmosphäre verdichtet hatte.
Natzke mochte diesen Geruch, ohne dass sie dafür einen Grund hätte angeben können.
Er war einfach der Geruch des Orts, an dem sie arbeitete.
Sie blätterte zurück zur ersten Seite, auf der ein Passfoto klebte, das Oborin im Alter von 62 Jahren zeigte.
Das Gesicht war das eines Mannes, der in Fotos nie richtig hineinzusehen schien, als ließe er sich nur widerwillig festhalten.
Sie kannte diesen Ausdruck.
Viele der Gesichter in ihren Akten hatten ihn, als wäre das Fehlen in Menschen angelegt, bevor es sich im Außen vollzog.
Die Kollegin am Nebentisch fragte, ob Natzke an der Sammelbestellung für die Kantine teilnehmen wolle.
Natzke sagte nein, ohne aufzublicken.
Dann stand sie auf, nahm ihren Block und fuhr mit dem Aufzug ins Erdgeschoss.
Die Adresse in der Akte gehörte zu einem Mietblock in Lichtenberg: vier Stockwerke, verwitterte Fassade, ein Treppenhaus mit dem gedämpften Licht, das solche Häuser immer zu haben schienen.
Auf Klingeln öffnete die Nachbarin, Frau Kordt, vielleicht siebzig, mit dem misstrauischen Blick einer Person, die Besuche nicht gewöhnt ist.
Sie kannte Oborin vom Sehen.
Das hieß: Sie grüßte ihn manchmal am Briefkasten, wenn beide gleichzeitig die Post holten, was selten gewesen war.
An sein Gesicht konnte sie sich nur so erinnern, wie man sich an Dinge erinnert, die man nie absichtlich beobachtet hat.
"Er war ruhig", sagte sie, und Natzke hörte darin weniger eine Beschreibung als einen Entlassungsschein.
Ruhige Menschen machten keine Probleme, und wer keine Probleme machte, den bemerkte man nicht, und wen man nicht bemerkte, den vermisste man nicht.
Das war keine Böswilligkeit; es war die ungeschriebene Logik des städtischen Nebeneinanderlebens.
Frau Kordt bot keinen Kaffee an, und Natzke fragte nicht danach.
Sie notierte: "Nachbarin, keine relevanten Angaben."
Der Hausmeister, den sie im Keller antraf, war ein Mann, dessen Antworten so knapp ausfielen, als kosteten ihn Worte etwas.
Er sei einmal durch das Schlüsselloch gegangen, weil Milch vor der Tür gestanden habe, sagte er; das sei vor über einer Woche gewesen.
Ob er daraufhin die Polizei informiert habe, fragte Natzke.
Er zuckte die Schultern, als wäre das eine Idee gewesen, auf die zu kommen man erst einmal kommen müsste.
"Das ist nicht meine Aufgabe", sagte er, und technisch gesehen hatte er recht.
Sie fragte sich, ob er hätte anrufen sollen – nicht aus Pflicht, sondern weil es das gewesen wäre, was ein anderes System von ihm erwartet hätte.
Aber das war nicht das System, in dem sie beide lebten.
Natzke notierte seine Aussage mit der Vollständigkeit, die das Verfahren verlangte.
Sie fuhr zurück zum Revier.
Am frühen Nachmittag lag die Akte wieder vor ihr, diesmal auf dem Boden neben dem Stuhl, weil der Schreibtisch neu belegt war.
Beim zweiten, gründlicheren Durchlesen fand Natzke einen Eintrag aus dem Jahr 2018.
Stanislav Oborin war damals ebenfalls verschwunden gewesen, nicht durch eine Vermisstenanzeige entdeckt, sondern durch eine Anfrage des Sozialamts, das seine Akte nicht bedienen konnte.
Er war nach drei Wochen zurückgekehrt, ohne Erklärung, ohne Begleitung.
Der damalige Sachbearbeiter hatte vermerkt: "Sache erledigt."
Zwei Wörter, ein Punkt.
Natzke fragte sich, ob der Mann, der das geschrieben hatte, je in Betracht gezogen hatte, dass "erledigt" und "verstanden" nicht dasselbe waren.
Wahrscheinlich nicht, und wahrscheinlich war das auch vernünftig.
Das System hatte weder die Kapazität noch das Mandat, Fragen zu verfolgen, auf die die Betroffenen selbst keine Antwort wollten.
Sie legte die Akte zu einem Stapel, der bereits acht ähnliche enthielt, alle mit demselben geduldigen Weg durch die Bürokratie.
Dabei fiel ihr auf, dass "vergessen" das falsche Wort war.
Die Akten wurden nicht vergessen; sie wurden aufbewahrt, mit einer Sorgfalt, die das Gegenteil von Gleichgültigkeit war und trotzdem dasselbe erreichte.
Sie tippte ihren Bericht in das System, das langsam war und jede Eingabe mit einem leisen Ton quittierte, als läge ihm daran, höflich zu bleiben.
Das Feld "Ermittlungsstand" füllte sie mit einer Formel, die für solche Fälle vorgesehen war: knapp, korrekt, unverbindlich.
Das Feld darunter fragte nach den nächsten Schritten.
Sie schrieb: "Weiterverfolgung bei neuen Hinweisen."
Das war keine Lüge und keine Wahrheit; es war das, was das Formular brauchte, damit es geschlossen werden konnte.
Sie legte die Akte dorthin, wo alle endeten, deren Inhalt das System nicht lösen, aber auch nicht loslassen konnte.
Um halb sieben verließ Natzke das Gebäude durch den Seitenausgang, dessen Tür an der oberen Schraube seit Jahren lose saß.
Der Regen hatte aufgehört; die Pflastersteine auf dem Parkplatz glänzten unter den Natriumlampen, die ihr Licht so abgaben, als schuldeten sie es jemandem.
Sie zog ihren Mantel zu.
Ihr Auto stand am Ende der Reihe, ein dunkelblauer Polo, dessen Lack an der Fahrertür begann, den Winter zu zeigen.
Sie blieb einen Moment stehen, bevor sie einstieg, ohne dass sie hätte sagen können, warum.
Oborin war heute nirgends aufgetaucht, weder lebend noch anderweitig, und morgen würde seine Akte auf einem anderen Schreibtisch liegen, falls die Rotation es so vorsah.
Sie hatte heute nichts gelöst.
Das stimmte, und es stimmte auch nicht: Sie hatte das Verfahren um einen Tag vorangetrieben, in der Richtung, in die Verfahren sich immer bewegten – nach vorn, ohne vorwärtszukommen.
Das war keine Niederlage.
Jedenfalls war es das, was sie sich sagte.
Sie dachte an das Passfoto in der Akte, an den widerwilligen Blick des Mannes, der sich hatte festhalten lassen, als wäre er bereits dabei gewesen, zu verschwinden.
Vielleicht hatte er gewusst, wohin er ging, und vielleicht war das, verglichen mit dem, was das System über ihn wusste, ein Vorteil.
Natzke fuhr nach Hause.
Sie würde morgen wiederkommen.
Die Akte würde da sein oder nicht.
Beides war, auf seine Art, dasselbe.
== 113 ==
1
----------------------------------------------
2
----------------------------------------------
3
----------------------------------------------
4
----------------------------------------------
5
== 114 ==
1
----------------------------------------------
2
----------------------------------------------
3
----------------------------------------------
4
----------------------------------------------
5
== 115 ==
1
----------------------------------------------
2
----------------------------------------------
3
----------------------------------------------
4
----------------------------------------------
5
== 116 ==
1
----------------------------------------------
2
----------------------------------------------
3
----------------------------------------------
4
----------------------------------------------
5
== 117 ==
1
----------------------------------------------
2
----------------------------------------------
3
----------------------------------------------
4
----------------------------------------------
5
== 118 ==
1
----------------------------------------------
2
----------------------------------------------
3
----------------------------------------------
4
----------------------------------------------
5
== 119 ==
1
----------------------------------------------
2
----------------------------------------------
3
----------------------------------------------
4
----------------------------------------------
5
== 120 ==
1
----------------------------------------------
2
----------------------------------------------
3
----------------------------------------------
4
----------------------------------------------
5
r6hzsviljcpmhxtmw6lp1nyzza9ep3b
1086432
1086431
2026-05-20T19:18:43Z
Thirunavukkarasye-Raveendran
47852
/* 101 */
1086432
wikitext
text/x-wiki
:'''Kurzgeschichten 6'''
== 101 ==
Die Pumpe
Auf dem Dorfplatz steht eine alte Pumpe.
Die Pumpe ist seit zwei Jahren kaputt.
Sie gibt kein Wasser mehr.
Aber Rita sitzt jeden Tag davor.
Sie sitzt auf einer kleinen Bank.
Sie schaut die Pumpe an.
Früher hat sie hier jeden Tag Wasser geholt.
Lea kommt nach der Schule.
Sie ist Ritas Enkelin.
Sie ist dreizehn Jahre alt.
„Oma, was machst du?", fragt Lea.
„Ich sitze hier", sagt Rita.
„Aber warum?", fragt Lea.
Rita sagt nichts.
Lea setzt sich neben sie auf die Bank.
Sie hat ihr Schulheft dabei.
Sie macht ihre Hausaufgaben.
Rita schaut weiter die Pumpe an.
Ein Brief ist gekommen.
Lea hat ihn aus dem Briefkasten geholt.
Sie gibt ihn Rita.
Der Brief hat keinen Absender.
Rita macht den Brief auf.
Drinnen ist ein Blatt Papier.
Auf dem Papier ist eine Zeichnung.
Jemand hat einen Fluss gemalt.
Das Wasser ist blau.
Die Fische sind klein und schwarz.
Kein Wort steht auf dem Papier.
Nur die Zeichnung.
„Wer hat das gemalt?", fragt Lea.
„Ich glaube, mein Sohn David", sagt Rita.
„Wann kommt er zurück?", fragt Lea.
„Ich weiß es nicht", sagt Rita.
Sie steht auf.
Sie geht zur Pumpe.
Sie hängt das Papier an den Pumpengriff.
Das Papier hängt da.
Es bewegt sich ein bisschen im Wind.
„Das ist schön", sagt Lea.
Am nächsten Morgen steht Rita früh auf.
Sie geht zum Dorfplatz.
Das Papier hängt noch an der Pumpe.
Aber auf dem Pumpengriff liegt ein Stein.
Der Stein ist klein und glatt und rund.
Rita nimmt ihn in die Hand.
Er ist kalt.
Sie schaut sich um.
Niemand ist da.
Sie hält den Stein fest in der Hand.
Dann legt sie ihn wieder auf den Pumpengriff.
Sie setzt sich auf die Bank.
Die Sonne kommt heraus.
Es wird warm.
Rita hat die Hände auf den Knien.
Sie schaut die Pumpe an.
Sie schaut den Stein an.
Der Stein liegt ruhig da.
Lea kommt wieder nach der Schule.
„Oma, woher kommt der Stein?", fragt sie.
„Ich weiß es nicht", sagt Rita.
Lea nimmt den Stein und schaut ihn an.
„Der ist glatt", sagt sie.
Rita nickt.
Lea legt den Stein wieder auf den Pumpengriff.
Sie setzt sich zu Rita auf die Bank.
Die zwei sitzen zusammen da.
Die alte Pumpe steht vor ihnen.
Das Papier mit dem Fluss hängt daran.
Der Stein liegt oben auf dem Griff.
Rita legt ihre Hände auf die Knie.
Ihre Hände kennen noch den Pumpengriff.
Sie wissen noch, wie man pumpt.
----------------------------------------------
Die Brücke
Der Fluss unter der alten Brücke war trocken.
Das war schon seit drei Jahren so.
Tomás saß jeden Morgen auf der Brücke.
Er saß immer auf derselben Stelle, in der Mitte.
Früher hatte er von hier aus die Fische gesehen.
Jetzt sah er nur Steine und trockenen Sand.
Aber er kam trotzdem jeden Morgen.
Inés ist am Samstag gekommen.
Sie hat Brot und Oliven mitgebracht.
Sie hat sich neben ihren Vater gesetzt.
„Du bist schon wieder hier", hat sie gesagt.
„Natürlich", hat Tomás gesagt.
Inés hat das Brot aufgemacht und ihm ein Stück gegeben.
Tomás hat es genommen, aber er hat es nicht gegessen.
Er hat auf den trockenen Flusslauf geschaut.
„Es ist ein Paket angekommen", hat Inés gesagt.
Sie hat eine kleine Schachtel aus der Tasche genommen.
Die Schachtel war leicht und fast leer.
Darin war ein Stück blaues Tuch, klein und gefaltet.
Das Tuch war sehr weich und dunkelblau.
„Ist das von Pablo?", hat Tomás gefragt.
„Ich glaube schon", hat Inés gesagt.
„Es war kein Brief dabei."
Tomás hat das Tuch in die Hand genommen.
Er hat es eine Weile in der Hand gehalten.
Dann ist er aufgestanden und zur Brüstung gegangen.
Er hat das Tuch um die Brüstung gebunden.
Er hat es fest gemacht, dreimal gewickelt.
Inés hat zugeschaut, aber sie hat nichts gesagt.
Das blaue Tuch hat sich im Wind bewegt.
Es hat sich hin und her bewegt, langsam.
„Warum machst du das?", hat Inés gefragt.
Tomás hat nicht geantwortet.
Er ist wieder auf seine Stelle gegangen und hat sich gesetzt.
Inés hat sich neben ihn gesetzt.
Sie haben zusammen auf das blaue Tuch geschaut.
Eine Weile war es ganz still.
Am nächsten Morgen ist Tomás früh aufgestanden.
Er ist allein zur Brücke gegangen.
Das blaue Tuch war noch da.
Aber daneben hing jetzt ein rotes Tuch.
Das rote Tuch war neu und sauber.
Jemand hat es in der Nacht dort hingebunden.
Tomás hat nach links und nach rechts geschaut.
Er war allein.
Er hat das rote Tuch angefasst.
Es war noch warm.
Er hat Inés angerufen.
„Komm zur Brücke", hat er gesagt.
„Warum?", hat sie gefragt.
„Es ist ein rotes Tuch da. Neben dem blauen."
Inés hat nicht sofort geantwortet.
Dann hat sie gesagt: „Ich komme."
Sie ist eine Stunde später angekommen.
Sie haben die zwei Tücher angeschaut.
Blau und rot, nebeneinander im Wind.
„Wer war das?", hat Inés gefragt.
„Ich weiß es nicht", hat Tomás gesagt.
Sie haben sich auf die Brücke gesetzt, beide.
Unter ihnen war der trockene Fluss.
Über ihnen war der blaue Himmel.
Die zwei Tücher haben sich im Wind bewegt.
Tomás hat die Brüstung mit beiden Händen gehalten.
So hat er sie immer gehalten, wenn der Fluss voll war.
Inés hat das gesehen.
Sie haben nichts gesagt.
Die zwei Tücher haben sich bewegt.
----------------------------------------------
Das Waschbrett
Der Bach war seit fünf Jahren trocken.
Früher hatte Valentina dort jeden Montag ihre Wäsche gewaschen.
Jetzt saß sie auf dem flachen Stein, auf dem sie früher das Waschbrett abgestützt hatte.
Das Waschbrett lag vor ihr, schräg gegen den Stein gelehnt, das alte Holz grau und rissig.
Sie fuhr mit der Hand über die Rillen, auf und ab, langsam.
Es war dieselbe Bewegung wie früher, nur ohne Wasser und ohne Seife.
Die Sonne wärmte ihren Rücken, und die Vögel schwiegen.
Unten im trockenen Bachbett lagen Steine, die früher unter Wasser gewesen waren.
Camila kam gegen Mittag den Waldweg herunter.
Sie trug eine Tasche mit Brot, Käse und zwei Äpfeln.
„Du hast heute wieder nichts gegessen, oder?", sagte sie.
Valentina antwortete nicht, aber sie nahm den Apfel, den Camila ihr hinhielt.
Camila setzte sich neben ihre Tante auf den flachen Stein.
Der Stein war breit genug für zwei, wenn man eng beieinandersaß.
„Es ist ein Brief gekommen", sagte Camila.
Sie zog eine Postkarte aus ihrer Tasche.
Auf der Vorderseite war eine Brücke über einen Fluss, das Wasser breit und blau.
Auf der Rückseite stand nur eine Adresse in Mateos Handschrift, sonst nichts.
Kein Datum, kein Gruß, kein Name.
Valentina nahm die Karte und hielt sie lange in den Händen.
„Woher kommt sie?", fragte Camila.
„Der Stempel ist unleserlich", sagte Valentina.
Sie drehte die Karte um und schaute das Wasser auf dem Foto an.
Das Wasser auf dem Foto war breit und ruhig, mit kleinen Wellen.
Sie legte die Karte mit dem Bild nach unten auf den Stein.
Dann legte sie das Waschbrett darüber, als ob sie es festhalten wollte.
Camila sah zu, ohne etwas zu sagen.
Sie aß eine Scheibe Brot und schaute in das trockene Bachbett hinunter.
„Er lebt", sagte Valentina schließlich.
Sie sagte es nicht als Frage.
Camila blieb noch eine Stunde, dann musste sie zurück zur Tankstelle.
Sie hatte Spätschicht und durfte wirklich nicht zu spät kommen.
„Soll ich dich später abholen?", fragte sie.
„Nein", sagte Valentina. „Ich gehe allein."
Camila umarmte sie kurz und ging den Waldweg zurück.
Valentina blieb auf dem Stein sitzen, bis die Sonne tiefer stand.
Dann legte sie die Hände auf das Waschbrett und schloss die Augen.
Ihre Finger kannten die Rillen auswendig.
Am nächsten Morgen stand sie früher auf als sonst.
Sie nahm das Waschbrett und ging zum Bach.
Das Waschbrett lag noch genauso da, wie sie es am Abend hingestellt hatte.
Auch die Postkarte lag noch darunter.
Aber um den Griff des Waschbrettes war etwas gewickelt.
Es war ein kleiner Kranz aus nassen Grashalmen, fest geflochten.
Valentina kniete nieder und berührte das Gras.
Es war wirklich nass, nicht nur taufeucht.
Sie schaute den Bach entlang, nach links und nach rechts.
Niemand war zu sehen.
Sie roch an dem Gras.
Es roch nach Wasser, nach richtigem Wasser.
Sie stand auf und hob das Waschbrett hoch.
Die Postkarte lag unberührt darunter.
Sie nahm die Karte und steckte sie in ihre Schürzentasche.
Dann trug sie das Waschbrett zurück zum Stein und stellte es an seinen Platz.
Den Graskranz ließ sie dort, wo er war.
Sie wollte ihn nicht wegnehmen.
Am Abend rief sie Camila an.
„Heute Morgen war etwas am Waschbrett", sagte sie.
„Was denn?", fragte Camila.
„Ein Kranz aus nassem Gras. Fest geflochten."
„Woher kam das Wasser?", fragte Camila.
„Ich weiß es nicht", sagte Valentina.
Eine kurze Pause entstand.
„Mateo?", fragte Camila leise.
„Ich weiß es nicht", sagte Valentina wieder.
Sie legte das Telefon hin und saß am Tisch.
Vor ihr lag die Postkarte mit dem blauen Fluss.
Ihre Hände lagen auf dem Tisch, die Finger leicht gespreizt.
Sie waren dieselben Hände wie früher, als der Bach noch voll war.
Sie wussten noch, wie man Wäsche wäscht.
----------------------------------------------
Das Netz
Der Fluss hatte vor vier Jahren aufgehört zu fließen.
Zuerst wurde er flacher, dann schmaler, dann blieb nur noch Schlamm übrig, der in der Hitze hart wurde wie Beton.
Emilio hatte das alles beobachtet, von demselben Fleck aus, auf dem er jetzt saß.
Er war sechsundsechzig Jahre alt und konnte sich nicht vorstellen, woanders zu sitzen.
Vor ihm lag ein altes Fischnetz, grob geflochten, grau vor Alter.
Er zog die Fäden durch seine Finger, suchte nach gerissenen Stellen und flickte sie mit dünnem Draht.
Das hatte er früher immer gemacht, bevor er ausfuhr: das Netz kontrollieren.
Jetzt kontrollierte er das Netz, aber es gab keinen Fluss mehr.
Marisol kam nach ihrer Nachtschicht in der Klinik.
Sie trug noch die Arbeitskleidung, hatte nur einen Pullover drübergezogen.
Ihre Schritte auf dem Kiesweg klangen müde, aber sie beeilte sich trotzdem.
Sie stellte eine Plastikdose neben Emilio auf den Boden.
„Hühnersuppe aus der Krankenhausküche", sagte sie.
Emilio nickte, schob die Dose beiseite und arbeitete weiter am Netz.
Marisol setzte sich auf einen umgekippten Eimer und zog ihr Handy aus der Tasche.
„Jorge hat eine Sprachnachricht geschickt", sagte sie.
Sie drückte Play, und eine Stimme kam heraus, rauschig und weit weg.
Die Stimme sagte, dass es ihm gut gehe, dass die Arbeit anstrengend sei und dass er bald mehr verdiene.
Dann brach die Aufnahme ab, mittendrin, als ob das Signal abgerissen wäre.
Emilio hörte zu, ohne die Finger vom Netz zu nehmen.
„Wann hat er das geschickt?", fragte er.
„Vorgestern", sagte Marisol.
Emilio nickte.
Er faltete einen Teil des Netzes zusammen und legte ihn auf seinen Schoß.
„Warum isst du nicht?", fragte Marisol.
„Später", sagte Emilio.
Sie wusste, dass später nie kam, aber sie sagte es nicht.
Stattdessen aß sie selbst einen Löffel Suppe direkt aus der Dose.
Die Sonne stand schon hoch, und der trockene Flusslauf glänzte weiß wie Salz.
Emilio stand auf, nahm das Netz an beiden Enden und trug es hinunter ins Flussbett.
Marisol sah ihm nach, die Arme um die Knie geschlungen.
Er breitete das Netz auf dem harten Boden aus, langsam und sorgfältig, als ob unter ihm Wasser wäre.
Er richtete die Ränder aus und glättete die Maschen mit der flachen Hand.
Dann trat er zurück und betrachtete das Netz von oben.
Es lag da wie eine Erinnerung an etwas, das immer noch da sein sollte.
Marisol hatte das noch nie gesehen und wusste nicht, was sie sagen sollte.
Also sagte sie nichts.
Emilio kam zurück, setzte sich auf seinen Stein und schloss die Augen.
Am nächsten Morgen war Marisol schon wieder in der Klinik.
Emilio ging vor der größten Hitze zum Fluss hinunter.
Das Netz lag noch dort, wo er es hingelegt hatte.
Aber in jeder zweiten Masche lag ein kleiner Stein – rund, grau, glatt, wie vom Wasser geschliffen.
Er hockte sich hin und betrachtete die Steine.
Sie lagen nicht zufällig, das sah er sofort.
Jemand hatte sie so gelegt, dass sie in der Mitte dichter lagen und zu den Rändern hin auseinanderliefen, so wie Fische schwimmen, wenn ein Netz sich schließt.
Er berührte einen der Steine, bewegte ihn aber nicht.
Emilio stand auf, nahm das Netz an einem Ende und hob es langsam hoch.
Die Steine fielen auf den trockenen Boden und lagen jetzt durcheinander.
Er hielt das Netz gegen die Sonne.
Durch die Maschen sah er das leere Flussbett, aufgeteilt in kleine Vierecke.
Als ob der Fluss noch da wäre, aber in Stücke zerschnitten.
Er hielt das Netz so lange, bis seine Arme zu zittern begannen.
Dann ließ er es langsam sinken, faltete es zusammen und trug es zurück zum Stein.
Am Abend rief er Marisol an.
„Die Steine", sagte er nur.
„Was?", fragte sie.
„Im Netz. Steine. Jemand hat sie hineingelegt."
Eine Pause.
„Wer war das?", fragte Marisol.
„Ich weiß es nicht", sagte Emilio.
Wieder eine Pause.
Dann fragte sie: „Hast du die Suppe gegessen?"
„Ja", sagte er.
Das war nicht wahr.
Er legte das Handy weg und saß noch lange draußen, im Dunkeln.
Der Fluss war trocken, das wusste er.
Aber seine Hände hielten das Netz, und sie wussten noch, wie man es wirft, damit es offen bleibt.
----------------------------------------------
Der Holzkarpfen
Die Grube, in der früher der See gelegen hatte, war jetzt nur noch eine Mulde aus rissigem Lehm und gebleichtem Gras.
Aurelio kannte jeden Riss.
Er war siebenundzwanzig Jahre Fischer gewesen, und seine Hände wussten noch, wie Wasser sich anfühlt, wenn es unter dem Rumpf eines Bootes zittert.
Das Boot selbst lag dreißig Meter vom einstigen Ufer entfernt und moderte still vor sich hin.
Er saß jeden Morgen auf einem der alten Grenzsteine, die früher die Pachtgrenze zwischen dem See und Felipes Olivenhainen markiert hatten.
Felipe war längst fortgezogen.
Die Oliven waren verdorrt, bevor der See selbst versiegte.
Aurelio nahm ein Stück Treibholz aus der Tasche seiner gefütterten Jacke – dasselbe Stück, das er seit Wochen bei sich trug.
Mit einem kleinen Federmesser begann er, die Flanke des Holzes abzutragen, ohne nachzudenken, ohne einen Plan.
Seine Finger bewegten sich so, wie sie sich beim Ausnehmen von Fischen bewegt hatten: mit einer Sicherheit, die keiner Entscheidung bedurfte.
Das Holz wurde kleiner.
Eine Form zeichnete sich ab – etwas, das einem Karpfen ähnelte, jenem Karpfen, den er im Winter neunundneunzig mit seiner Frau Carmela aus dem zugefrorenen See gehackt hatte, weil nichts anderes da war.
Carmela hatte den Fisch gebraten, mit Knoblauch und getrockneten Tomaten, und das Fett hatte auf der Zunge gelegen wie ein Versprechen.
Sie war fünf Jahre später gestorben, an einem Sommer, der zu lang gedauert hatte.
Aurelio ließ das Messer eine Weile ruhen.
Die Stille des trockenen Seebettes hatte eine eigene Qualität: nicht die Stille von Einsamkeit, sondern die Stille von etwas, das aufgehört hatte zu sprechen, ohne sich zu verabschieden.
Pilar kam am Nachmittag des dritten Donnerstags.
Sie war früher gegangen als sonst, weil die Schichtleiterin ihr einen halben Freistag gegeben hatte.
Wegen guter Arbeit, hieß es – obwohl Aurelio vermutete, dass es eher die geschwollenen Knöchel waren, die jeder im Werk längst bemerkt hatte.
Sie trug eine große Tasche aus Synthetikgeflecht und hatte sich ein Tuch in den Nacken gebunden.
„Du hast wieder nicht gegessen", sagte sie, ohne ihn zu begrüßen.
Es war keine Frage.
Aurelio schob das Holzstück in die Jackentasche.
Pilar setzte sich neben ihn auf den Grenzstein, der kaum breit genug für zwei war, und zog eine kleine Blechdose aus der Tasche.
Darin lagen eingemachte Linsen, noch warm von der Fabrikküche, wo sie sie am Morgen aufgewärmt hatte.
Aurelio nahm die Dose, rührte darin herum, ohne zu essen.
Pilar sah über das trockene Bett hinweg, als könnte sie durch genug Konzentration das Wasser zurückrufen.
„Es hat einen Brief gegeben", sagte sie schließlich.
Keinen Umschlag, nur ein gefaltetes Blatt, das jemand beim Dorfverein der Auswanderer hinterlegt hatte – die Vorsitzende hatte es Pilar ohne Kommentar zugesteckt.
Sie faltete das Blatt auf ihrem Knie auseinander.
Darauf standen drei Wörter in einer Schrift, die Aurelio nicht sofort erkannte, obwohl er sie kannte: „Ich bin angekommen."
Er las den Satz zweimal, dann ein drittes Mal, als könnte die Wiederholung die fehlenden zwölf Jahre füllen.
Sein Sohn Rodrigo hatte das Dorf verlassen, als die ersten Risse im Seeboden sichtbar wurden, und niemand hatte seitdem etwas Verlässliches von ihm gehört.
Pilar biss auf die Innenseite ihrer Wange, was sie immer tat, wenn sie nicht weinte, weil sie nicht weinen wollte.
Aurelio faltete das Blatt sorgfältig in der Mitte, dann noch einmal, dann ein drittes Mal, bis es ein kleines, hartes Rechteck war.
Er stand auf, ging die zehn Schritte hinunter in das Bett des Sees.
Die Risse unter seinen Sohlen knackten leise.
Er kniete nieder, an der tiefsten Stelle der Mulde, wo früher der Kahn vertäut gewesen war.
Dort grub er mit dem Messergriff eine kleine Vertiefung in den Lehm.
Das Papier legte er hinein, glatt gedrückt, als müsste es atmen können.
Dann schob er die Holzfigur aus der Tasche – den halb fertigen Karpfen, noch roh, noch ohne Augen – und legte ihn daneben.
Pilar beobachtete ihn vom Grenzstein aus, ohne etwas zu sagen.
Sie rauchte die letzte Zigarette ihres Päckchens.
Der Rauch stieg senkrecht in die reglose Luft.
Am nächsten Morgen ging Aurelio noch vor Sonnenaufgang zum See.
Pilar schlief noch in der Hütte, auf der alten Matratze, die nach Lavendel roch, weil Carmela immer Lavendelbündel daruntergelegt hatte.
Er kniete sich wieder an dieselbe Stelle.
Die kleine Vertiefung war noch da, das Papier unberührt.
Aber der Holzkarpfen war um einen halben Handbreit verschoben.
Es hatte in dieser Nacht keinen Wind gegeben, daran erinnerte er sich genau.
Er nahm den Fisch, hielt ihn so, dass das frühe Licht über die unfertige Flanke glitt.
Jemand hatte mit einem spitzen Stein zwei kleine Punkte eingeritzt – an der Stelle, wo Augen sein sollten.
Keine Kinderhand konnte das gewesen sein: Die Rillen waren zu sicher, zu gleichmäßig, wie von jemandem, der schon lange weiß, wo die Augen eines Fisches sitzen.
Aurelio schloss die Finger um den Karpfen.
Er stand auf, ging zurück zum Grenzstein, setzte sich.
Die Sonne erschien hinter dem Höhenzug im Osten, breit und ohne Scham.
Pilar trat aus der Hütte, das Tuch noch nicht gebunden, die Augen schmal vor Schlaf.
Sie blieb stehen, als sie ihren Vater sah – die Hände im Schoß, den Holzfisch aufrecht zwischen den Fingern.
„Fahr nicht ohne Frühstück", sagte er.
Es war das erste Mal seit langen Wochen, dass er etwas gesagt hatte, bevor sie gesprochen hatte.
Pilar kam, setzte sich neben ihn, legte den Kopf nicht an seine Schulter, aber nah genug, dass ihre Arme sich berührten.
Das trockene Seebett lag vor ihnen, rissig, blass, von keiner Brise bewegt.
Aber Aurelio hielt den Fisch, und seine Hände wussten noch, wie man ihn hält, damit er nicht sinkt.
== 102 ==
Eine Orange für Rodrigo
Gloria steht jeden Morgen am Tor des Friedhofs.
Sie hat einen Korb mit frischen Orangen.
Sie verkauft sie für fünf Pesos das Stück.
Das macht sie seit vier Jahren.
Ihr Mann Rodrigo liegt hier begraben.
Er ist vor vier Jahren gestorben.
Sie denkt sehr oft an ihn.
Rodrigo hat Orangen sehr geliebt.
Jeden Abend hat er eine Orange gegessen.
Er hat immer die Schale abgezogen und die Stücke aufgeteilt.
Manchmal hat er Gloria ein Stück gegeben.
Jetzt kaufen die anderen Leute die Orangen.
Heute ist es warm und sonnig.
Ein paar Leute kommen und gehen.
Ein alter Herr kauft zwei Orangen.
Eine Frau mit einem Kind kauft drei Orangen.
Das Kind isst sofort eine.
Gegen Mittag kommt eine junge Frau.
Sie kommt aus dem Friedhof.
Sie trägt einen kleinen Strauß Blumen.
Die Blumen sind schon ein bisschen welk.
Die Frau schaut in den Korb.
„Wie viel kostet eine Orange?", fragt sie.
„Fünf Pesos", sagt Gloria.
Die Frau schaut in ihre Tasche.
„Ich habe leider kein Geld dabei, ich habe es vergessen", sagt sie.
Sie schaut verlegen.
Gloria sagt dann gar nichts.
„Für wen sind die Blumen?", fragt Gloria.
„Für meine Mutter", sagt die junge Frau.
„Sie ist letzte Woche gestorben."
Gloria denkt einen Moment nach.
Dann nimmt sie zwei Orangen aus dem Korb.
Sie gibt sie der jungen Frau.
„Das ist für den Weg nach Hause", sagt Gloria.
„Aber ich habe kein Geld", sagt die Frau noch einmal.
„Das macht nichts", sagt Gloria.
Die junge Frau nimmt die Orangen.
„Gracias", sagt sie leise.
Dann geht sie langsam weg.
Gloria schaut ihr nach.
Die Straße ist wieder ruhig.
Gloria dreht sich zum Friedhof um.
Sie schaut das große Tor an.
Sie denkt wieder an Rodrigo.
Er hat immer gesagt: „Eine Orange am Abend – das ist genug."
Gloria nimmt eine Orange aus dem Korb.
Sie schält sie langsam und ruhig.
Sie isst ein Stück davon.
Die Orange schmeckt heute sehr süß.
Am Abend kommen weniger Leute.
Gloria räumt den Korb auf.
Sie legt die letzten Orangen in eine Tüte.
Dann geht sie auf den Friedhof.
Sie geht zum Grab von Rodrigo.
Sie legt eine Orange auf den Stein.
„Guten Abend, Rodrigo", sagt sie.
Sie setzt sich auf die kleine Bank.
Sie schaut das Grab ruhig an.
Es ist ganz still auf dem Friedhof.
Ein Vogel singt irgendwo.
Gloria steht auf und geht nach Hause.
Die Orange bleibt auf dem Stein.
----------------------------------------------
Drei Pesos
Silvio hat einen großen Orangenbaum im Garten.
Jeden Morgen pflückt er die reifen Orangen.
Er legt die Orangen in einen geflochtenen Korb aus Stroh.
Dann stellt er den Korb an die Straße vor seinem Haus.
Manchmal kaufen die Leute aus dem Dorf welche, manchmal nicht.
Silvios bester Freund Marcos hat das Dorf vor zehn Jahren verlassen.
Er hat in die USA gewollt und ist einfach gefahren.
Danach hat Silvio nichts mehr von Marcos gehört.
Silvio denkt manchmal an ihn, aber er sagt es nicht laut.
Er pflückt die Orangen und stellt den Korb an die Straße, und so sieht sein Tag aus.
An einem Dienstag kommt Pablo vorbei, der Sohn der Nachbarin.
Er hat einen Rucksack auf dem Rücken und ein altes Fahrrad dabei.
„Ich verlasse heute das Dorf", sagt er zu Silvio.
„Und wohin gehst du?", fragt Silvio neugierig.
„In die Stadt, um Arbeit zu finden", sagt Pablo.
Er schaut neugierig in den Korb mit den Orangen.
„Was kostet bei Ihnen eine Orange?", fragt er.
„Fünf Pesos das Stück", antwortet Silvio.
Pablo sucht nach Geld in seiner Hosentasche.
Er zählt die Münzen: es sind nur drei Pesos.
„Ich habe leider nur drei Pesos", sagt er.
Silvio schaut ihn an, dann schaut er auf den Korb.
Er nimmt drei Orangen aus dem Korb heraus.
Er legt die drei Orangen in eine kleine Tüte.
Dann gibt er Pablo die Tüte mit den Orangen.
„Nimm einfach drei Orangen", sagt Silvio.
„Aber ich habe nur drei Pesos", sagt Pablo noch einmal.
„Ich weiß das schon", sagt Silvio ruhig.
Pablo nimmt die Tüte und hält sie einen Moment in der Hand.
„Danke, Silvio", sagt Pablo, und er meint es ernst.
Er steigt auf das Fahrrad und fährt die Straße hinunter.
Silvio schaut ihm nach, bis Pablo um die Kurve verschwunden ist.
Die Straße ist wieder still, und ein Hund bellt irgendwo im Dorf.
Silvio dreht sich um und geht zurück in den Garten.
Er pflückt noch mehr Orangen, denn die Sonne ist jetzt hoch.
Eine einzige Orange legt er für sich beiseite.
Es ist die schönste Orange vom heutigen Tag.
Er nimmt die Orange mit und geht ins Haus.
Im Wohnzimmer hängt ein altes Foto an der Wand.
Das Foto zeigt Silvio und Marcos als junge Männer.
Marcos hält eine Orange und lacht in die Kamera.
Silvio setzt sich auf den Stuhl vor dem Foto.
Er legt die schöne Orange auf den Tisch davor.
Er schaut das alte Foto von Marcos lange an.
Er denkt an Pablo und hofft, dass es ihm gut geht in der Stadt.
Er denkt an Marcos und fragt sich, ob er noch lebt.
Er hat seit zehn Jahren keine Nachricht von ihm bekommen.
Die Orange liegt noch immer auf dem Tisch.
Silvio atmet tief aus und schaut auf den Tisch.
Dann steht er auf und geht zurück in den Garten.
Die Sonne steht jetzt tiefer, und es wird kühler.
Silvio pflückt noch ein paar weitere Orangen.
Er legt die Orangen nach und nach in den Korb.
Dann trägt er den Korb ins Haus und stellt ihn in die Küche.
Im Wohnzimmer ist es jetzt schon etwas dunkel.
Er macht das Licht im Wohnzimmer nicht an.
Er setzt sich wieder auf denselben Stuhl vor dem Foto.
Die Orange liegt noch immer auf dem Tisch.
Silvio schaut die Orange an und denkt an Marcos.
Er sagt gar nichts und bewegt sich nicht.
Draußen bellt der Hund wieder, und es wird langsam dunkel.
Silvio sitzt noch immer auf demselben Stuhl.
Die Orange und das Foto sind jetzt kaum noch zu sehen.
----------------------------------------------
Die Überfahrt
Inés kam jeden Morgen um fünf Uhr ans Fährdock von Paraíso, bevor die erste Fähre die Leinen löste.
Sie stellte die Kiste auf einen alten Holztisch und legte die Orangen in Reihen.
Die größten kamen nach vorne, weil die Leute nach dem Aussehen kauften.
Das hatte ihr Sohn Tomás beigebracht, als er noch morgens mitgekommen war.
Tomás lebte seit zwei Jahren in Mexiko-Stadt und war nicht zurückgekommen.
Er schickte jeden Monat Geld, aber er rief selten an.
Wenn er anrief, sagte er immer: „Bald komme ich, Mamá."
Inés glaubte ihm nicht mehr, aber sie sagte es nicht.
Sie nahm das Messer und ritzte eine Orange an, damit die Leute den Geruch riechen konnten.
Der Saft tropfte auf das Holz, und sie wischte ihn mit dem Tuch ab.
Die ersten Passagiere kamen kurz nach sechs aus dem Parkhaus.
Sie trugen Koffer und schauten auf ihre Handys, ohne die Stände zu beachten.
Inés rief: „Frische Orangen, drei für zehn Pesos!"
Ein Mann kaufte eine, aß sie sofort im Gehen und warf die Schale ins Wasser.
Eine Frau kaufte zwei Orangen und steckte sie in ihre Tasche.
Inés nahm das Geld und legte es in die Schürze.
Gegen acht Uhr wurde es warm, und die Luft roch nach Salz und Diesel.
Die Sonne schien auf das Wasser, und das Licht war sehr hell.
Inés trank einen Schluck Wasser und schaute einen Moment auf das Meer hinaus.
Sie dachte an Tomás, obwohl sie das nicht wollte.
Sie erinnerte sich, wie er als kleines Kind am Dock gesessen hat.
Er warf Steine ins Wasser und lachte so laut, dass man es überall hören konnte.
Dann kam ein junger Mann zum Stand, mit einem großen Rucksack auf dem Rücken.
Er war verschwitzt und schaute die Orangen an, als würde er überlegen.
Dann lachte er kurz auf, weil er eine besonders große Orange sah.
Inés hörte das Lachen und hielt einen Moment inne, das Messer noch in der Hand.
Es war nicht Tomás' Lachen, aber es klang auf eine merkwürdige Weise ähnlich.
Der junge Mann sagte: „Was kosten die Orangen?"
„Drei für zehn", sagte Inés.
„Ich habe nur fünf Pesos", sagte er und zuckte mit den Schultern.
Er schaute sie an, und in seinem Gesicht war keine Erwartung, nur Resignation.
Inés schaute ihn an und sah, dass er dunkle Augen hatte und eine Art zu lachen, die sie an Tomás erinnerte.
„Wohin fährst du?", fragte sie.
„Nach Frontera", sagte er, „und dann weiter in die Stadt."
Er sagte „in die Stadt" so, als wäre das der Beginn von etwas Wichtigem.
Tomás hatte das damals auch so gesagt, an einem Montagmorgen.
Inés nahm vier Orangen und legte sie in eine Tüte.
„Nimm vier", sagte sie und schob ihm die Tüte hin.
„Aber ich habe doch nur fünf Pesos", sagte er noch einmal.
„Das reicht", sagte Inés, ohne ihn anzuschauen.
Der junge Mann nahm die Tüte und hielt sie einen Moment in der Hand.
„Gracias, señora", sagte er, und er meinte es ernst.
Er zögerte kurz, dann ging er zur Wartehalle.
Inés schaute ihm nach, bis er zwischen den anderen Leuten verschwand.
Er stellte den Rucksack ab und aß sofort eine Orange.
Sie sah, wie er dabei lachte, weil der Saft auf sein Hemd tropfte.
Sie drehte sich um und ordnete die Orangen auf der Kiste neu.
Die Fähre kam kurz vor neun an und legte am Dock an.
Die Passagiere gingen nach und nach an Bord, der junge Mann auch.
Inés sah ihn noch einmal kurz, dann war er in der Menge verschwunden.
Sie verkaufte noch einige Orangen an die letzten Leute am Dock.
Dann wurde es ruhig, und die Möwen kamen zurück ans Wasser.
Um elf räumte sie den Stand auf und legte die übrigen Orangen in die Kiste.
Auf dem Weg nach Hause kaufte sie Tomaten und Brot auf dem kleinen Markt.
Zu Hause stellte sie die Kiste in der Küche ab und setzte sich auf den Stuhl.
Auf dem Küchentisch lag ein Foto von Tomás, das er ihr vor drei Jahren geschickt hat.
Er lachte darauf, mit dem Rucksack auf dem Rücken, irgendwo in der Stadt.
Inés nahm eine Orange aus der Kiste und legte sie neben das Foto.
Sie schälte sie nicht, sondern saß einfach da und schaute die Orange an.
Dann nahm sie ihr Telefon und rief Tomás an.
Es klingelte fünfmal, dann kam die Mailbox.
Inés legte das Telefon auf den Tisch, ohne etwas zu sagen.
Sie blieb eine Weile so sitzen.
Draußen hupte ein Auto, die Nachbarin rief nach ihrem Hund.
Die Orange lag neben dem Foto von Tomás.
Inés schloss die Augen und lehnte sich zurück.
----------------------------------------------
Der Bus nach Monterrey
Dolores steht seit sieben Uhr morgens am Rand des Busbahnhofs von Veracruz und verkauft Orangen aus einer Holzkiste.
Es ist Montag, und montags kommen die Busse nach Norden früh.
Die Männer, die einsteigen, haben große Taschen und wenig Geld.
Dolores kennt dieses Gesicht, sie hat es vor acht Jahren auf dem Bahnsteig gesehen.
Damals ist ihr Bruder Miguel in den Bus gestiegen, und der Fahrer ist sofort losgefahren.
Miguel hatte ihr noch winken wollen, aber die Türen schlossen sich, bevor er am Fenster war.
Sie hat den Bus lange angeschaut, bis er um die Ecke verschwunden ist.
Seitdem hat Miguel nie mehr angerufen.
Dolores schält eine Orange, die Bewegung schnell und sicher nach so vielen Jahren.
Sie legt die Spalten auf eine saubere Plastiktüte, damit die Käufer sehen, wie saftig sie sind.
Ein Kind zieht seine Mutter am Arm und zeigt auf die Orangen, aber die Mutter schüttelt den Kopf und geht weiter.
Dolores schaut ihnen nach, bis sie hinter einer Säule verschwinden.
Gegen neun kommt der Bus aus Coatzacoalcos, und mit ihm eine Gruppe junger Männer mit Rucksäcken.
Sie kaufen Wasser und Brötchen beim anderen Händler und gehen an Dolores vorbei, ohne zu schauen.
Einer bleibt stehen.
Er ist vielleicht fünfundzwanzig, trägt einen ausgeblichenen Rucksack auf der linken Schulter, obwohl die rechte Schulter breiter ist.
Miguel hatte seinen Rucksack auch immer links getragen, obwohl man ihm oft gesagt hatte, dass das Rückenprobleme macht.
Der junge Mann schaut die Orangen an.
„Wie viel für eine?", fragt er.
Dolores nennt den Preis.
Er nickt und greift in die Hosentasche.
Er zählt Münzen auf die Kante der Kiste, weil die Holzoberfläche wackelt und die Münzen sonst heruntergleiten.
Dolores nimmt eine Orange, die mittelgroße, die zum Preis passt.
Dann nimmt sie noch zwei weitere und legt alle drei in eine Tüte.
„Für die lange Fahrt", sagt sie.
Der junge Mann schaut sie an.
„Ich hab nur für eine bezahlt."
„Das reicht", sagt Dolores.
Er steckt die Tüte in die Außentasche des Rucksacks.
Dann dreht er sich noch einmal um.
„Danke", sagt er, und er meint es wirklich, weil er dabei stehenbleibt und sie ansieht.
Dolores nickt.
„Wohin?", fragt sie, obwohl sie die Antwort schon kennt.
„Monterrey zuerst", sagt er.
„Und dann weiter."
Sie schaut ihn an, und er hält ihrem Blick stand, ohne zu wissen, warum sie ihn so ansieht.
„Pass auf dich auf", sagt Dolores.
Er geht.
Dolores sieht, wie er sich zu der Gruppe stellt und wie einer der anderen lacht und ihm auf die Schulter klopft.
Dann steigen sie in den Bus, und die Türen schließen sich.
Dolores schaut nicht nach.
Sie schaut auf die Kiste.
Drei Orangen fehlen.
Sie atmet aus.
Der Mittag kommt mit einer Hitze, die die Luft über dem Asphalt flimmern lässt.
Dolores trinkt Wasser aus einer Plastikflasche und isst nichts, obwohl ihre Schwestern immer sagen, dass man in der Hitze essen muss.
Die Busse nach Norden fahren bis zum frühen Nachmittag, dann kommen die Busse in die Dörfer.
Ein Mann mit einem Aktenkoffer kauft vier Orangen und besteht darauf, dass sie einzeln gewogen werden.
Dolores wiegt sie, ohne etwas zu sagen.
Eine Frau mit einem Kleinkind auf dem Arm kauft zwei und fragt, ob sie frisch sind.
„Heute Morgen angeliefert", sagt Dolores, was stimmt.
Gegen vier räumt sie die Kiste zusammen und legt die übrigen Orangen in eine Tüte.
Es sind mehr, als sie gehofft hatte.
Auf dem Heimweg kommt sie an der kleinen Kirche vorbei, in der sie früher mit Miguel zur Messe gegangen ist.
Die Tür steht offen, und durch den Spalt fällt ein schmaler Streifen Licht auf das Pflaster.
Sie geht hinein, obwohl sie das seit Jahren nicht getan hat.
Es ist kühl und still, die Luft riecht nach Wachs und altem Holz.
An der Seitenwand steht eine Nische mit einer Heiligenfigur, davor ein paar Kerzen, von denen einige schon heruntergebrannt sind.
Dolores legt zwei Orangen vor die Figur.
Sie kniet nicht, sie steht nur da und hält die Tüte mit den restlichen Orangen.
Sie denkt nicht an den jungen Mann.
Sie denkt an Miguel, wie er den Rucksack auf die linke Schulter gehoben hat, schief, wie er es immer tat.
Wie er ihr nicht gewinkt hat, weil der Bus schon fuhr.
Wie sie ihn trotzdem lange angeschaut hat, bis er weg war.
Eine Kerze brennt nieder, das Wachs tropft auf den Stein.
Dolores geht.
Die restlichen Orangen trägt sie nach Hause.
Sie isst keine davon.
----------------------------------------------
Die Kerbe im Holz
Rosario stellt die erste Kiste um halb sechs auf das Pflaster des Marktes von Puebla, bevor die Händler der Nachbarstände auch nur die Planen hochgezogen haben.
Sie hebt die Orangen einzeln heraus, dreht jede einmal in der Hand, legt die makellosen nach vorne.
Die übrigen – die mit weichen Stellen, den Dellen, die der Frost hinterlassen hat – kommen nach unten, wo sie niemand sieht.
Ihr Rücken schmerzt.
Das ist kein Gedanke mehr, sondern ein Zustand, den sie verwaltet wie das Wechselgeld in der Blechdose.
Vor vier Jahren wäre Pilar schon jetzt hier gewesen, die Haare noch nass vom Waschen, die Sandalen klappernd auf dem Stein.
Jetzt ist der Platz neben ihr leer, und Rosario füllt ihn mit Kisten.
Das Messer liegt auf dem Holzbrett, die Klinge zum Markt hin, so wie Pilar es immer falsch herum hingelegt hatte und Rosario es immer stumm umgedreht hat.
Heute lässt sie es liegen, wie es liegt.
Die ersten Käuferinnen kommen gegen sieben – Frauen mit Körben, die wissen, was sie wollen, und es ohne viel Worte sagen.
Rosario schneidet, wiegt, kassiert.
Ihre Hände tun das seit fünfunddreißig Jahren, und die Bewegungen haben eine Präzision, die kein Lernen mehr braucht.
Der Saft klebt unter den Nägeln, das Salz des Schweißes brennt in den Rissen der Haut.
Sie bemerkt es nicht.
Gegen elf, als die Hitze das Wellblechdach der Überdachung zum Knacken bringt, kommt der alte Mann.
Er schiebt sich zwischen den Ständen durch, einen Panamahut tief ins Gesicht gezogen, die Schultern leicht gebückt wie jemand, der es gewohnt ist, wenig Raum einzunehmen.
Er bleibt vor Rosarios Stand stehen und schaut die Orangen an, als müsste er eine Entscheidung treffen, die über Obst hinausgeht.
„Drei", sagt er.
Er greift in die Tasche seines Hemdes und zählt Münzen auf das Brett.
Rosario sieht seine Hände.
Die Knöchel sind geschwollen von Arthritis, die Haut dünn wie Zigarettenpapier – und an der Kuppe des rechten Daumens liegt eine alte, breit verheilte Narbe, als hätte einmal ein Messer dort quergelegen.
So eine Narbe hatte ihr Mann Aurelio gehabt, seit er als Zwölfjähriger in eine Säge gefallen war.
Aurelio ist seit sieben Jahren tot.
Rosario hört auf zu atmen.
Nicht lange – nur einen Atemzug lang, den Bruchteil einer Sekunde, in dem das Gehirn eine Gleichung aufstellt, die keine Lösung hat.
Der alte Mann hebt den Kopf.
Er hat das Gesicht eines Fremden, faltig und blass unter der Bräune, die Augen von einem hellen Grau, das Aurelios dunklem Braun in nichts ähnelt.
„Stimmt so?", fragt er.
Rosario schaut ihn an, dann auf seine Hand, dann auf die Orangen.
„Warten Sie", sagt sie.
Sie greift nicht nach den drei Orangen, die sie abgezählt hatte, sondern nach den größten auf der Pyramide – den schwersten, deren Schale noch feucht glänzt von der frühen Morgenkühle.
Sie legt sechs davon auf die Waage, ohne zu wiegen.
„Das sind sechs", sagt der alte Mann.
„Ja", sagt Rosario.
Sie schiebt sie ihm in die Tüte, schließt den Knoten zu, schaut ihn nicht an.
Er steht still.
„Was schulde ich Ihnen?"
„Nichts", sagt sie.
Ihre Stimme klingt ruhiger als sie ist, weil Ruhe das einzige ist, was sie in vierzig Jahren Markt als Strategie gelernt hat.
Der alte Mann nimmt den Hut ab, hält ihn vor der Brust.
Er sagt kein Danke.
Er sagt: „Ich kenne Sie nicht."
„Ich weiß", sagt Rosario.
Er geht.
Rosario sieht seinen Rücken zwischen den Ständen verschwinden, kleiner werden, bis er hinter dem Stand mit den Chilischoten aus dem Blickfeld tritt.
Die Münzen liegen noch auf dem Brett.
Sie legt sie in die Blechdose.
Eine Frau fragt nach dem Preis.
Rosario nennt ihn.
Die Nachmittagssonne wirft lange Schatten durch die Lücken im Dach, der Staub in der Luft wird sichtbar wie Gold.
Rosario denkt nicht mehr an Aurelios Narbe.
Sie denkt an Pilar, an die Art, wie das Mädchen eine Orange schälte – immer von oben, nie in einer Spirale wie Rosario, sondern in kleinen Stücken, die sie in den Mund steckte, ohne sie abzuziehen.
Die Bitterkeit der weißen Haut.
Pilar liebte das.
Gegen sechs klappt Rosario die Kisten zu, schiebt das Holzbrett unter den Stand, wickelt das Messer in ein Tuch.
Sie trägt die letzte Kiste selbst, obwohl der Junge vom Nachbarstand anbietet zu helfen.
Sie wohnt fünfzehn Minuten zu Fuß vom Markt entfernt, in einem Haus, dessen Türschwelle nach Jahrzehnten so ausgetreten ist wie das Bett eines alten Flusses.
Drinnen ist es kühl und dunkel.
An der Wand des vorderen Zimmers hängt ein Bild von Pilar, aufgenommen an einem Schulfest, das Mädchen mit einer Papierkrone auf dem Kopf.
Rosario zündet die Kerze auf dem Regal darunter an.
Sie legt eine Orange davor, die schwerste aus der heutigen Kiste.
Dann setzt sie sich auf den Stuhl am Fenster, das auf den kleinen Innenhof geht.
Sie schält die Orange nicht.
Sie hält sie in beiden Händen, die Schale rau und warm von der Hitze des Tages.
Draußen kräht eine Henne, jemand schüttet Wasser aus.
Rosario denkt, dass sie morgen früh wieder aufstehen wird.
Dass die Kisten schon auf dem Karren stehen.
Dass das Messer, wenn sie es morgen früh aufnimmt, noch scharf sein wird.
Sie weiß nicht, ob sie dem alten Mann die Orangen gegeben hat, weil seine Hand Aurelios Narbe trug, oder weil Pilar einmal gesagt hat, man solle nicht sparsam sein mit dem, was man hat.
Pilar hatte das über Wasser gesagt, über den Fluss.
Rosario drückt die Orange fester.
Die Kerze brennt.
== 103 ==
Opas Garten
Opa Werner ist gestorben.
Er war 78 Jahre alt.
Emma ist sehr traurig.
Ihre Mutter Sabine weint auch.
Die Beerdigung ist am Montag.
Viele Menschen kommen.
Emma kennt die meisten nicht.
Ein Mann sagt: "Werner war ein guter Mensch."
Emma nickt.
Sie denkt: Ja, das stimmt.
Nach der Beerdigung kommen alle ins Haus.
Es gibt Kuchen und Kaffee.
Emma isst nichts.
Sie geht in den Garten hinter dem Haus.
Hier hat Opa oft gesessen.
Sein Stuhl steht noch da.
Emma setzt sich auf den Stuhl.
Er ist kalt und aus Holz.
Sabine kommt nach draußen.
"Bist du okay?", fragt sie.
"Ja", sagt Emma.
Aber das stimmt nicht ganz.
Am nächsten Tag fahren Emma und Sabine zum Schrebergarten.
Das ist Opas Garten am Rand des Dorfes.
Sabine hat den Schlüssel.
Sie gehen rein.
Der Garten ist groß und grün.
Es gibt Tomaten, Salat und viele Blumen.
Alles wächst noch.
Emma schaut sich um.
Sabine sagt: "Opa hat hier jeden Tag gearbeitet."
"Ich weiß", sagt Emma.
In der kleinen Hütte findet Emma etwas.
Es ist eine rote Gießkanne.
Emma nimmt die Kanne.
Sie geht zum Wasserhahn.
Sie füllt die Kanne mit Wasser.
Sabine schaut ihr zu.
"Was machst du?", fragt sie.
"Ich gieße die Pflanzen", sagt Emma.
Emma geht zu den Tomaten.
Sie gießt langsam.
Das Wasser geht in die Erde.
Sabine hilft ihr.
Sie arbeiten zusammen.
Es ist still im Garten.
Dann findet Emma ein kleines Notizbuch.
Es liegt auf dem Tisch in der Hütte.
Emma öffnet es.
Opa hat viele Notizen gemacht.
"Tomaten: jeden Tag gießen", steht da.
"Salat: nicht zu viel Wasser."
"Blumen: am Sonntag düngen."
Emma liest alles.
Sabine liest auch.
"Er hat alles aufgeschrieben", sagt Sabine.
Emma sagt: "Weil er wollte, dass jemand weitermacht."
Sabine schaut Emma an.
Sie sagt nichts.
Aber Emma weiß: Das stimmt.
Emma nimmt das Notizbuch mit nach draußen.
Sie stellt zwei Stühle in die Sonne.
Einen für sich und einen für Sabine.
Dann stellt sie noch einen dritten Stuhl hin.
Sabine fragt: "Für wen ist der dritte Stuhl?"
Emma überlegt kurz.
Dann sagt sie: "Für Opa."
Sabine nickt.
Sie setzen sich.
Die Sonne ist warm.
Die Tomaten wachsen.
Der dritte Stuhl ist leer.
Aber er steht da.
Emma hält das Notizbuch in der Hand.
Sie liest die Notizen noch einmal.
Sabine sagt: "Wir kommen jetzt jeden Sonntag."
"Ja", sagt Emma.
"Jeden Sonntag", sagt sie noch einmal.
Die rote Gießkanne steht neben Opas Stuhl.
Emma kommt morgen wieder.
----------------------------------------------
Das erste Brot
Heinrich ist am Dienstag früh gestorben.
Er war Bäcker, und die Bäckerei hat ihm gehört.
Tom hat den Anruf bekommen und ist sofort nach Triberg gefahren.
Seine Schwester Anna war schon da.
Die Beerdigung war am Freitag.
Es hat geregnet, aber nicht stark.
Der Pfarrer hat gesprochen, und viele Leute haben zugehört.
Anna hat geweint, aber Tom nicht.
Viele Leute kannte Tom nicht.
Sie waren Kunden der Bäckerei.
Eine ältere Frau hat eine Brezel auf den Sarg gelegt.
Tom hat sie angeschaut.
Anna hat gesagt: "Papa hat ihr jeden Morgen eine Brezel reserviert."
Tom hat das nicht gewusst.
Nach der Beerdigung sind sie zur Bäckerei gegangen.
Die Bäckerei war seit einer Woche geschlossen.
Anna hatte den Schlüssel.
Im Laden hat es nach Brot und nach Vanille gerochen.
Tom hat die Augen kurz geschlossen.
Dann hat er sie wieder aufgemacht.
Hinter der Theke hat Heinrichs Schürze gehangen.
Die Schürze war weiß mit einem blauen Rand.
Anna hat die Schürze angeschaut, aber sie hat sie nicht angefasst.
Tom ist hinter die Theke gegangen.
Er hat die Schürze genommen und angezogen.
Anna hat ihn angeschaut.
"Was machst du?", hat sie gefragt.
"Ich weiß es nicht genau", hat Tom gesagt.
Aber er hat die Schürze angelassen.
Im Backraum war alles noch da.
Die Formen, das Mehl und die großen Maschinen standen wie immer.
Tom hat den Ofen angemacht.
"Willst du jetzt backen?", hat Anna gefragt.
"Ja", hat Tom gesagt.
"Am Abend?"
"Ja."
Tom hat Mehl und Wasser und Salz genommen.
Er hat Teig gemacht, und Anna hat ihm geholfen.
Sie haben wenig gesprochen.
Tom hat die Hände in den Teig gelegt, und es hat sich gut angefühlt.
Nach einer Stunde war der Teig fertig.
Tom hat kleine Brötchen geformt.
"Papa hat immer gesagt, Brötchen müssen rund sein", hat Anna gesagt.
"Ich weiß", hat Tom gesagt.
Er hat die Brötchen auf ein Blech gelegt und in den Ofen geschoben.
Es hat nach frischem Brot gerochen.
Der Geruch hat sich im ganzen Laden verteilt.
Anna hat geweint, aber nur kurz.
Tom hat ihr die Hand gegeben.
Sie haben gewartet.
Nach zwanzig Minuten waren die Brötchen fertig.
Tom hat das Blech herausgenommen.
Er hat ein Brötchen aufgeschnitten und Butter darauf gemacht.
Dann hat er es auf einen kleinen Teller gelegt.
Den Teller hat er an die Ecke der Theke gestellt.
Das war immer Heinrichs Platz gewesen.
Anna hat das gesehen.
Sie hat nichts gesagt.
Aber sie hat auch ein Brötchen genommen und gegessen.
Tom hat gegessen.
Die Brötchen waren warm und gut.
Draußen war es schon dunkel.
Der Laden war jetzt hell und warm.
Anna hat gefragt: "Was machen wir morgen?"
Tom hat nachgedacht.
"Wir machen auf", hat er gesagt.
"Die Bäckerei?"
"Ja."
Anna hat ihn angeschaut.
"Kannst du das?"
"Ich versuche es", hat Tom gesagt.
Er hat das letzte Brötchen auf Heinrichs Teller gelegt.
Das erste Brötchen war noch da.
Es war kalt geworden, aber niemand hat es weggenommen.
Tom hat das Licht im Backraum ausgemacht.
Im Laden hat er das Licht anlassen.
"Damit man von draußen sieht, dass jemand da ist", hat er gesagt.
Anna hat genickt.
----------------------------------------------
Elfriedes Knopfdose
Nina fuhr noch am selben Morgen mit dem Zug von Stuttgart nach Erfurt.
Lutz hatte nur gesagt: "Oma ist heute Nacht eingeschlafen."
Eingeschlafen – das war das Wort, das er benutzte.
Nina hatte das Handy weggelegt und war eine Stunde später am Bahnhof gewesen.
Lutz wartete draußen vor dem Eingang, die Schultern hochgezogen.
Er winkte ihr zu.
"Ich bin froh, dass du gekommen bist", sagte er.
Nina umarmte ihn kurz, und er ließ es geschehen.
Die Trauerfeier war klein, weil Elfriede das so gewollt hatte.
Keine Blumengestecke, keine Musik, keine langen Reden.
Der Pfarrer sprach zwanzig Minuten, dann war es vorbei.
Am Grab standen vielleicht dreißig Leute – Nachbarn, Freundinnen, Leute aus dem Chor.
Lutz stand ganz still, die Hände vor dem Bauch gefaltet.
Seine Augen waren rot, aber er weinte nicht.
Eine Nachbarin legte eine einzige gelbe Tulpe auf den Sarg.
Nina hatte nicht gewusst, dass das Elfriedes Lieblingsblume war.
Man vergisst vieles, wenn man zu lange wegbleibt.
Nach der Beerdigung fuhren sie mit dem Bus in die Johannesstraße.
Das Wohnhaus war ein grauer Plattenbau aus den Siebzigern.
Elfriede hatte dort vierzig Jahre lang gewohnt.
Im Fahrstuhl roch es nach Putzmittel und altem Teppich.
Lutz schloss die Wohnungstür auf, und beide blieben einen Moment im Flur stehen.
"Ich war seit zwei Wochen nicht mehr hier", sagte Lutz leise.
Die Wohnung war ordentlich, fast wie immer.
Auf dem Küchentisch lagen drei Servietten, sauber gefaltet, und daneben stand ein leeres Glas.
Nina sah das Glas an.
Elfriede hatte jeden Abend ein Glas Wasser auf den Tisch gestellt, seit Nina denken konnte.
Lutz öffnete den Kühlschrank.
"Sie hat letzte Woche noch eingekauft", sagte er.
Nina sah Karotten, eine halbe Sellerieknolle und ein Stück Fleisch in Folie.
Sie nahm die Karotten heraus und legte sie auf die Arbeitsfläche.
"Ich mache die Suppe", sagte sie.
Lutz schaute sie an.
"Welche Suppe?"
"Die, die sie immer gemacht hat."
In der Schublade neben dem Herd fand Nina eine alte Rezeptkarte.
Die Schrift war klein und schief, mit Bleistift geschrieben.
"Fleischbrühe mit Gemüse" stand oben drauf.
Darunter, in kleinen Buchstaben: "Nicht zu viel Salz, das schadet dem Herz."
Nina musste lachen.
Es war ein kurzes, echtes Lachen, das sie selbst überraschte.
Lutz lehnte an der Küchentür und sah ihr zu.
Nina schnitt die Karotten, und Lutz schälte den Sellerie.
Sie sprachen wenig, aber es war kein schlechtes Schweigen.
"Sie hat immer gesagt, beim Kochen denkt man besser", sagte Lutz irgendwann.
"Stimmt", sagte Nina.
Der Topf dampfte, und die Küche wurde langsam warm.
Es roch nach Brühe und nach den Sonntagen aus der Kindheit.
Nina stellte drei Teller auf den Tisch.
Lutz sah den dritten Teller an und schwieg.
"Sie soll nicht alleine essen", sagte Nina.
Lutz nickte langsam und setzte sich.
Der dritte Platz blieb leer.
Sie aßen langsam, ohne Radio, ohne Fernsehen.
Die alte Küchenuhr tickte, die Elfriede seit dreißig Jahren hatte.
Lutz schöpfte sich noch einmal nach.
"Es schmeckt fast genauso", sagte er.
"Fast", sagte Nina.
Nach dem Essen blieben sie noch lange am Tisch sitzen.
Lutz holte eine Flasche Rotwein aus dem Schrank.
"Sie hat den immer für Gäste aufgehoben", sagte er.
"Dann sind wir heute Gäste", sagte Nina.
Lutz lachte kurz.
Er zog eine alte Schachtel unter dem Tisch hervor.
Darin lagen Fotos, Briefe und eine kleine runde Dose.
"Was ist das?", fragte Nina.
Lutz öffnete die Dose.
Darin lagen Knöpfe – weiß, braun, rot, groß, klein, durcheinander.
"Sie hat nie einen weggeworfen", sagte Lutz.
Nina griff in die Dose und nahm einen großen blauen Knopf heraus.
Vier Löcher, rau an den Rändern.
"Der war an ihrer Sonntagsjacke", sagte Lutz.
Nina steckte ihn in ihre Jackentasche.
Sie redeten noch lange – über die Kindheit, über Elfriede, über Dinge, die sie lange nicht mehr besprochen hatten.
Als Nina ging, war es schon nach Mitternacht.
Sie stellte ihr Weinglas neben das leere Glas auf dem Tisch.
Lutz sah es und sagte nichts.
"Ich rufe dich morgen an", sagte er.
Nina nickte und ging.
Im Fahrstuhl nach unten spürte sie den Knopf in der Tasche.
----------------------------------------------
Der letzte Herbst am Gasthof
Felix hatte den Anruf erwartet, und doch traf er ihn wie ein Schlag.
Sein Vater Otto war am Morgen gestorben, ruhig, in seinem Sessel, das Radio noch an.
Drei Stunden später saß Felix im Zug nach Garmisch.
Er schaute nicht aus dem Fenster.
Das kleine Dorf Unterbach lag am Ende einer Nebenstraße, hinter dem letzten Hang, den der Herbst schon kahl gefegt hatte.
Herta, seine Tante, stand am Tor des Gasthofs, als er ankam.
Sie war kleiner geworden, oder er hatte sie so in Erinnerung behalten – groß und laut und immer mit einem Handtuch über der Schulter.
Jetzt stand sie einfach da.
Sie sagte: „Er ist ohne Schmerzen gegangen."
Felix nickte.
Er wusste nicht, ob das ein Trost war oder nur ein Satz, den man sagt, weil man sonst nichts hat.
Die Beerdigung fand zwei Tage später statt, auf dem kleinen Friedhof am Waldrand.
Der Pfarrer kannte Otto gut und sprach nicht lange.
Er erzählte von einem Mann, der seinen Gästen immer ein zweites Glas hingestellt hatte, bevor sie darum baten.
Felix musste kurz lächeln.
Das stimmte.
Ein paar alte Männer aus dem Dorf standen am Grab, die Hüte in den Händen.
Der Regen kam leise, kaum zu hören.
Als der Sarg in die Erde kam, legte Herta eine Kastanie darauf – eine einzige, glänzend braun.
Niemand fragte warum.
Felix dachte: Weil Otto jeden Herbst Kastanien gesammelt hat, seit er denken kann, und niemand je wusste wozu.
Jetzt wusste er es.
Nach der Beerdigung gingen alle zusammen in den Gasthof.
Herta hatte Rinderbrühe gemacht, so wie Otto sie immer wollte.
Die alten Männer aßen schweigend und gingen früh.
Als der letzte Gast gegangen war, blieb Felix in der Gaststube sitzen.
Herta räumte die Teller ab, ohne ihn zu bitten, ihr zu helfen.
Sie kannte ihn gut genug.
Die Gaststube roch nach Holz und Bier und nach dem Tabak, den Otto geraucht hatte, obwohl er es seit Jahren aufgegeben hatte.
Manche Gerüche bleiben, auch wenn die Person weg ist.
Felix stand auf und ging hinter die Theke.
Er fand die Flasche Schnapps im zweiten Regal, genau da, wo sie immer gestanden hatte.
Er schenkte zwei Gläser ein und stellte ein drittes, kleines, an die Ecke der Theke – auf den Platz des Vaters, wo Otto immer gesessen hatte.
Herta sah es und sagte nichts.
Sie nahm ihr Glas und trank einen kleinen Schluck.
„Er hätte dir das Doppelte eingeschenkt", sagte sie.
„Ich weiß", sagte Felix.
Sie schwiegen eine Weile.
Felix schaute sich in der Gaststube um – die Holzvertäfelung, die alten Fotos an der Wand, das Regal mit den Bierkrügen, die niemand mehr benutzte.
Auf einem der Fotos sah man Otto als jungen Mann, lachend, ein Bierfass auf der Schulter.
Felix hatte das Foto noch nie wirklich angeschaut.
Er nahm es von der Wand.
Herta sagte: „Du siehst ihm ähnlich."
Felix legte das Foto auf die Theke, neben das Glas des Vaters.
„Er hat nie gejammert", sagte Herta, während sie ein Tuch über die Tische zog, „nicht einmal am Ende."
Felix wusste das.
Sein Vater hatte Schmerzen gehabt, lange schon, aber er hatte weiter aufgemacht, weiter eingeschenkt, weiter zugehört.
Das war das Einzige, was er konnte, und es war genug.
Herta stellte sich neben Felix und sah auf das Foto.
„Was machst du jetzt mit dem Gasthof?", fragte sie.
Felix schaute auf das dritte Glas, das unberührt an der Ecke stand.
„Ich weiß es noch nicht."
Das war keine Ausrede.
Es war die Wahrheit, und Herta wusste das.
Sie sagte nichts weiter.
Später machte Felix das Licht in der Gaststube aus, aber er ließ die kleine Lampe über der Theke brennen.
Das hatte Otto immer so gemacht – damit man von draußen sieht, dass jemand da ist.
Draußen auf der Terrasse war es kalt, aber Felix setzte sich trotzdem auf die alte Bank unter dem Vordach.
Das Tal lag dunkel vor ihm, die Lichter des Dorfes klein und verstreut.
Die Berge dahinter waren nicht zu sehen, aber er wusste, dass sie da waren.
Herta brachte ihm eine Decke, ohne ein Wort.
Sie setzte sich neben ihn.
Eine Weile saßen sie so – in der Kälte, unter dem Tropfen des Dachs.
„Weißt du noch", sagte Felix, „dass er uns früher immer hierhergebracht hat, wenn wir nicht schlafen konnten?"
Herta lachte leise.
„Er hat gesagt, die Berge hören besser zu als die Menschen."
Felix nickte.
Er hatte das damals nicht geglaubt.
Jetzt saß er hier und dachte: Vielleicht stimmte es.
Die Berge standen wie immer.
Die Terrasse roch nach nassem Holz und Herbstlaub.
Felix holte die Schnapsflasche, die er mitgenommen hatte, und schenkte nach.
Das dritte Glas, das er aus der Gaststube mitgebracht hatte, stellte er auf das Geländer.
Er füllte es.
Herta sah ihn an und sagte nichts.
Felix hob sein Glas: „Auf den alten Narren."
Herta hob ihres.
Das dritte Glas stand auf dem Geländer, der Schnaps glänzte darin.
Der Wind kam von den Bergen, langsam und kalt, so wie immer in dieser Jahreszeit.
----------------------------------------------
Das Watt wartet nicht
Der Zug, der Kathrin durch das flache Marschland trug, fuhr seit einer Stunde gegen den Wind.
Drüben im Watt stand das Wasser, grau und reglos wie ein vergessenes Versprechen.
Sie sah hinaus.
Rolf hatte ihr drei Wörter geschrieben: Mutter. Heute Nacht. Komm.
Drei Wörter, wie er es immer tat – ohne Beiwerk, ohne Erklärung, als ob Kürze den Schmerz erträglicher machte, als ob Schweigen schützte.
Kathrin hatte das Handy beiseitegelegt und zwanzig Minuten lang die Deckenverkleidung angestarrt.
Husum empfing sie mit tiefhängendem Nebel und Rolf, der am Bahnhof stand, die Hände in den Taschen seiner Ölhaut.
Er nickte ihr zu.
Kein Wort, keine Umarmung – nur dieses Nicken, das seit Kindertagen bedeutete: Ich bin hier, es reicht.
Die Trauerfeier fand in der kleinen Backsteinkirche am Hafen statt, deren Turm Ingeborg Halm ihr ganzes Leben lang beim Frühstück gesehen hatte.
Der Pastor sprach über das Meer als Metapher, über Aufbruch und Wiederkehr, über Wasser, das trägt.
Rolf schüttelte kaum merklich den Kopf.
Kathrin verstand ihn: Ihre Mutter hatte das Meer nicht geliebt.
Sie hatte es respektiert, so wie man etwas respektiert, das einen täglich bedroht und ernährt zugleich.
Draußen regnete es waagerecht.
Der kleine Friedhof lag hinter der Kirche, eingezwängt zwischen alten Grabsteinen und dem Deich, auf dem der Wind heulte.
Als der Sarg hinabgelassen wurde, warf Rolf eine Handvoll Sand hinein – Wattschlick, den er morgens vom Hafensteg mitgebracht hatte, noch feucht, fast schwarz.
Kathrin fragte ihn nicht warum.
Sie wusste es.
Mutter hatte dort gestanden, jeden Morgen, solange ihre Knie es erlaubten, und das Wasser beobachtet, das kam und ging und nichts dafür wollte.
Nach der Bestattung gingen sie zu Fuß zurück – durch die leeren Gassen, vorbei an den Klinkerhaustüren, hinter denen das Leben weiterging.
Ein Hund bellte einmal, dann war er still.
Ingrid, die Nachbarin, drückte Kathrin ein Paket in die Hand: selbst gebackenes Graubrot und ein Glas Butterschmalz, weil das die Mutter immer gehabt haben wollte.
Kathrin hielt das Paket so, als ob es zerbrechlich wäre.
Das Elternhaus roch nach Teer und Lavendel, nach altem Holz und nach der Kälte, die kommt, wenn Räume nicht mehr beheizt werden, weil man wartet.
Rolf hatte den Ofen angemacht, bevor sie ankamen, aber die Wärme hatte noch nicht durchgegriffen.
Auf dem Küchentisch stand die Kaffeekanne, noch mit einem Rest von gestern.
Neben der Kanne stand eine Tasse.
Kathrin sah sie an: die weiße Tasse mit dem blauen Rand, die Mutter jeden Morgen benutzt hatte, seit Kathrin denken konnte.
Rolf hatte sie nicht weggeräumt.
Er hatte sie nicht einmal gespült.
Er setzte sich an den Tisch, ohne ein Wort.
Kathrin stellte die Kanne auf den Herd, obwohl der Kaffee vom Vortag war und nach nichts schmecken würde.
Das Aufwärmen war nicht für den Kaffee.
Als sie einschenkte – zwei volle Tassen und einen knappen Fingerbreit in die blaue Tasse der Mutter –, sah Rolf sie nicht an.
Aber er trank auch nicht, bevor die dritte Tasse stand.
Sie saßen lange so.
Einmal sagte Rolf: „Sie hat noch Freitagabend die Netze geflickt."
Kathrin nickte.
„Die Nadel liegt noch in dem Korb, den du ihr zu Weihnachten geschickt hast."
Das war eine Anklage und keine, je nachdem wie man es hören wollte.
Kathrin ließ es stehen.
Aus der Schublade zog Rolf einen vergilbten Briefumschlag, dessen Inhalt er kannte, ohne hineinzusehen – die alte Seekarte der Bucht, handgezeichnet, von einem Vater, den keiner von ihnen je kannte.
Mutter hatte sie aufbewahrt, weil es das Einzige war, das von ihm geblieben war.
Kathrin streckte die Hand aus, nahm die Karte, legte sie ungeöffnet auf den Tisch.
Schweigen ist in manchen Familien keine Abwesenheit von Sprache, sondern deren dichteste Form.
Irgendwann – es war schon nach Mitternacht – stand Rolf auf und warf Holz nach.
Die Flammen schlugen kurz auf, dann legten sie sich.
„Morgen früh fahre ich raus", sagte er, „du kannst mitkommen."
Es war keine Frage.
Kathrin sah auf die Tasse ihrer Mutter, die noch halb voll war und kalt.
„Ja", sagte sie.
Das Boot roch nach Diesel und Salzwasser und nach dem alten Tau, das Rolf nie ersetzte, weil Mutter es eingeflochten hatte.
Sie fuhren hinaus, noch vor Sonnenaufgang, das Watt auf beiden Seiten flach und silbern.
Kein Wort fiel, während das Boot den Priel entlangglitt.
Kathrin stand am Bug, der Wind schlug ihr das Haar ins Gesicht, sie ließ es.
Rolf steuerte auswendig, die Augen auf Punkte gerichtet, die nur er kannte.
Irgendwo, wo das Wasser tiefer wurde und die Küste sich hinter dem Dunst verlor, drosselte er den Motor.
Das Boot schaukelte.
Rolf griff in seine Jackentasche und zog eine kleine Blechdose heraus.
Kathrin verstand sofort: das, was von Mutter übrig geblieben war, was man in eine Dose füllen und aufs Meer bringen konnte.
Kein Wort darüber war zwischen ihnen gewechselt worden, kein Plan gemacht.
Manche Dinge weiß man, ohne sie besprechen zu müssen, wenn man dieselbe Kindheit hatte.
Rolf öffnete die Dose.
Kathrin streckte die Hand aus.
Er schüttete die Hälfte in ihre Handfläche.
Sie standen so – nebeneinander, die Hände offen, das Boot schaukelnd –, bis der Wind drehte.
Dann ließen sie los.
Die Asche flog nicht weit.
Das Wasser nahm sie sofort.
Rolf schloss die leere Dose und steckte sie wieder in die Tasche.
„Sie hat gesagt, das Watt gibt nichts zurück", sagte er.
„Stimmt nicht", sagte Kathrin.
Rolf sah sie an, fragte nicht.
Sie drehte sich zum Wasser um: Das Watt gab alles zurück – nur anders, nur später, nur wenn man nicht mehr danach suchte.
Rolf ließ den Motor wieder an.
Sie fuhren zurück, gegen den Wind.
Zuhause brannte der Ofen noch.
Die blaue Tasse stand auf dem Tisch.
== 104 ==
Das weiße Hemd
Anna ist nach Hause gekommen.
Sie hat einen Koffer mitgebracht.
Ihre Eltern wohnen in Landsberg.
Das Haus ist klein und weiß.
Die Mutter heißt Renate.
Renate steht an der Tür.
„Anna!", sagt sie.
Sie umarmt Anna.
Der Vater ist bei der Arbeit.
Anna hat ihr altes Zimmer.
Das Bett ist noch das alte.
Sie stellt den Koffer auf den Boden.
Sie setzt sich auf das Bett.
Sie schaut aus dem Fenster.
Der Garten ist noch da.
Der Apfelbaum hat Äpfel.
Nichts hat sich verändert.
Am nächsten Morgen geht Anna in die Bäckerei.
Sie will Brot kaufen.
Die Bäckerei ist in der Hauptstraße.
Anna öffnet die Tür.
Sie sieht Peter.
Peter steht vor der Theke.
Er hat ein kleines Mädchen dabei.
Das Mädchen ist ungefähr zwei Jahre alt.
„Hallo, Anna", sagt Peter.
Er ist überrascht.
„Hallo, Peter", sagt Anna.
Das Mädchen schaut Anna an.
Es hat braune Augen.
„Wie heißt du?", fragt Anna das Mädchen.
„Lea", sagt Peter.
„Sie heißt Lea Anna."
Anna hört das.
Sie sagt nichts.
Peter bezahlt sein Brot.
„Kommst du kurz raus?", fragt er.
Anna nickt.
Draußen ist es kalt.
Peter hat eine Jacke.
Anna hat keine.
„Wann bist du zurückgekommen?", fragt er.
„Gestern", sagt Anna.
„Wie war es im Kloster?"
„Es war gut", sagt Anna.
„Und dann bin ich gegangen."
Peter nickt.
Er schaut auf das Mädchen.
„Ihr zweiter Name ist Anna", sagt er.
Anna schaut ihn an.
„Warum?", fragt sie.
„Ich habe immer an dich gedacht", sagt Peter.
Anna nickt langsam.
„Sie ist hübsch", sagt Anna.
Sie geht.
Renate fragt nicht viel.
Das ist gut.
Anna geht in ihr Zimmer.
Sie denkt nicht an Peter.
Sie denkt an das Kloster.
Im Kloster ist es immer still.
Hier ist es auch still.
Aber es ist anders.
Am nächsten Morgen holt Anna das weiße Hemd aus dem Koffer.
Das Hemd hat sie im Kloster getragen.
Es ist ein bisschen schmutzig.
Anna wäscht es im Waschbecken.
Das Wasser wird grau.
Sie wringt das Hemd aus.
Dann legt sie es auf die Heizung.
Renate kommt herein.
Sie sieht das Hemd.
„Was ist das?", fragt sie.
„Ein Hemd aus dem Kloster", sagt Anna.
Renate nickt.
Sie geht wieder raus.
Anna trinkt Tee.
Das Hemd trocknet auf der Heizung.
Es ist weiß.
Anna lässt es dort.
----------------------------------------------
Die Schürze
Sara ist mit dem Zug nach Zirl gefahren.
Die Fahrt hat zwei Stunden gedauert.
Oma Hilde wohnt in einem kleinen Haus am Dorfrand.
Sara hat an der Tür geklingelt.
Oma Hilde hat sofort geöffnet.
„Du bist endlich da!", hat sie gesagt.
Sie hat Sara umarmt und ins Haus geführt.
Das Haus war warm und hat nach Suppe gerochen.
Sara war müde, aber sie war auch froh.
Sie hat den Rucksack ins alte Zimmer gebracht.
Das Zimmer war klein, aber es war ordentlich.
Auf dem Bett lag eine braune Wolldecke von früher.
Sara hat sich aufs Bett gesetzt und aus dem Fenster geschaut.
Die Berge waren nah und haben grau ausgesehen.
Oma Hilde hat Tee gebracht.
„Bist du hungrig?", hat sie gefragt.
„Ja, ein bisschen", hat Sara gesagt.
Am nächsten Morgen ist Sara in den Dorfladen gegangen.
Sie hat Seife und Shampoo gebraucht.
Der Laden war klein, aber es gab alles.
Sara hat die Regale angeschaut, als sie Felix gehört hat.
Sie hat seine Stimme sofort erkannt.
Felix hat an der Kasse gestanden und mit der Verkäuferin geredet.
Neben ihm hat eine Frau gestanden, sie hatte ein Kind auf dem Arm.
Das Kind war ungefähr zwei Jahre alt.
Felix hat Sara gesehen.
Er ist ein bisschen rot geworden.
„Hallo, Sara", hat er gesagt.
„Hallo, Felix", hat Sara gesagt.
Sie hat das Shampoo fest in der Hand gehalten.
Felix hat Sara der Frau vorgestellt.
„Das ist Lisa, meine Freundin", hat er gesagt.
Lisa hat kurz genickt.
„Und das ist Mia", hat Felix gesagt.
Das Kind hat Sara neugierig angeschaut.
„Hallo, Mia", hat Sara gesagt.
Das Kind hat gelacht.
Sara hat bezahlt und ist dann nach draußen gegangen.
Felix ist ihr gefolgt.
Lisa ist im Laden geblieben.
Draußen war es kühl und die Sonne hat auf die Berge geschienen.
„Wie lange bist du schon zurück?", hat Felix gefragt.
„Seit gestern", hat Sara gesagt.
Er hat genickt.
„Und wie geht es dir?"
„Gut", hat Sara gesagt.
„Ich glaube schon."
Er hat gezögert, dann hat er gesagt: „Mias zweiter Name ist Sara."
Sara hat nichts gesagt.
Sie hat auf die Berge geschaut.
„Warum?", hat sie dann gefragt.
„Ich habe dich nicht vergessen", hat er gesagt.
Das war schwer zu hören.
„Ich muss jetzt gehen", hat Sara gesagt.
Felix hat sie nicht aufgehalten.
Sara ist schnell nach Hause gegangen.
Oma Hilde hat gefragt: „Alles okay?"
„Ja", hat Sara gesagt, aber das hat nicht ganz gestimmt.
Sie hat sich ins Zimmer gesetzt und die Tür zugemacht.
Sie hat nicht an Felix gedacht, sondern an das Kloster.
Sie hat an die Stille dort gedacht und an den langen Gang.
Hier gab es keinen langen Gang, und das hat ihr gefehlt.
Am nächsten Morgen hat Sara die weiße Schürze aus dem Rucksack geholt.
Die Schürze hat sie im Kloster immer in der Küche getragen.
Sie hat sie in der Spüle mit Handseife gewaschen.
Das Wasser ist grau geworden.
Dann hat sie die Schürze auf den Balkon gehängt.
Oma Hilde hat es gesehen.
„Was ist das?", hat sie gefragt.
„Eine Schürze vom Kloster", hat Sara gesagt.
Oma Hilde hat genickt und ist wieder hineingegangen.
Sara hat den Kaffee getrunken und die Schürze angeschaut.
Die Schürze hat im Wind ein bisschen gewackelt.
Sara wollte sie nicht wegwerfen.
Aber sie hat nicht gewusst, wohin damit.
----------------------------------------------
Die weiße Haube
Lena war mit dem Bus nach Duisburg gefahren, die Fahrt hatte fast drei Stunden gedauert.
In ihrem Rucksack hatte sie nur das Nötigste für die ersten Tage.
Ihre Tante Gerda wohnte in der Wanheimer Straße, im zweiten Stock eines alten Hauses.
Lena klingelte, und Gerda öffnete die Tür so schnell, als hätte sie nur darauf gewartet.
„Ich hab schon auf dich gewartet", sagte Gerda.
Sie umarmte Lena kurz und ließ sie dann herein.
Die Wohnung roch nach Kaffee und dem alten Teppich, wie Lena es in Erinnerung hatte.
Lena stellte den Rucksack ab und schaute sich um, ohne etwas zu sagen.
An den Wänden hingen die gleichen Fotos wie früher.
Gerda hatte das Sofa als Bett vorbereitet, weil das Gästezimmer gerade renoviert wurde.
Lena setzte sich hin und betrachtete ein altes Foto, das sie als Kind zeigte.
„Hast du Hunger?", fragte Gerda.
„Nein, danke", sagte Lena, obwohl sie seit dem Mittag nichts gegessen hatte.
Am Abend wollte Lena an die frische Luft gehen.
Gerda erklärte ihr den Weg zum Rhein, und Lena machte sich allein auf den Weg.
Der Fluss lag schwarz und breit vor ihr, die Lichter der anderen Seite spiegelten sich im Wasser.
Die Luft roch nach Diesel und dem Fluss, und es war kälter als erwartet.
Ein Frachtschiff fuhr langsam am anderen Ufer entlang und verschwand in der Dunkelheit.
Lena blieb an der Reling stehen und schaute eine Weile auf das Wasser.
Dann hörte sie ein Lachen hinter sich, das sie sofort kannte.
Marco saß auf einer Decke am Ufer, neben einer Frau mit einem kleinen Mädchen auf dem Arm.
Lena erkannte ihn sofort, obwohl es schon dämmerte.
Vier Jahre änderten ein Gesicht nicht so sehr, wie sie gedacht hatte.
Er sah sie auch.
Er stand auf.
Lena überlegte kurz, ob sie einfach weitergehen sollte.
Aber er hatte sie schon gesehen, und es gab keinen Ausweg, der nicht unhöflich gewesen wäre.
„Hallo, Lena", sagte er.
„Hallo, Marco."
Er stellte sie der Frau vor.
„Das ist Nadine", sagte er.
Nadine nickte in Lenas Richtung, aber sie lächelte nicht.
„Und das hier ist Emma", sagte Marco und hob das Mädchen in die Höhe.
„Emma Lena."
Lena betrachtete das Kind, das braune Augen hatte und lachte.
„Warum?", fragte Lena.
Marco dachte kurz nach.
„Weil ich es wollte", sagte er, und es klang einfacher als es war.
Lena schaute aufs Wasser und sagte nichts für eine Weile.
„Sie ist hübsch", sagte Lena schließlich.
Nadine zog die Jacke des Mädchens zu und stand auf.
„Wir müssen heim", sagte sie.
Dann gingen die beiden, ohne zu warten, bis Lena noch etwas gesagt hätte.
Lena blieb allein am Ufer, und das Wasser bewegte sich ruhig weiter.
Sie ging langsam zurück zu Gerda, der Weg schien länger als vorhin.
Gerda saß noch am Tisch und trank einen Tee, fragte aber nichts.
Das war das Richtige.
Lena schlief schlecht auf dem Sofa und hörte den Straßenverkehr draußen.
Sie dachte nicht an Marco.
Sie dachte an den Klostergarten, wo sie jeden Morgen eine halbe Stunde allein war.
Hier gab es keinen Garten.
Gehen war leicht, aber Ankommen war schwerer als sie gedacht hatte.
Am Morgen stand sie früh auf, bevor Gerda aufwachte.
Sie holte die weiße Haube aus dem Rucksack, die sie als Novizin getragen hatte.
Sie wusch sie in einer Schüssel mit kaltem Wasser und etwas Seife.
Dann legte sie die Haube auf das Fensterbrett, damit sie trocknen konnte.
Gerda kam in die Küche und sah die Haube auf dem Fensterbrett.
Sie stellte zwei Tassen auf den Tisch, ohne etwas zu fragen.
Das war das Klügste, was sie tun konnte.
Lena machte Kaffee und schaute auf die Straße hinunter.
Unten fuhr ein Lkw vorbei, der Lärm war kurz und dann weg.
Die Haube lag weiß auf dem grauen Fensterbrett.
Der Himmel über Duisburg war bewölkt, kein blauer Fleck.
Ein kalter Luftzug kam durch den Spalt des Fensters.
Die Haube bewegte sich leicht.
Sie war dünn und fast durchsichtig nach all den Jahren des Waschens.
Lena trank den Kaffee und schaute weiter.
Sie wusste noch nicht, was sie später damit tun wollte.
Sie konnte sie nicht wegwerfen.
Nicht heute.
----------------------------------------------
Das Kleid im Koffer
Maren kam mit dem Zug, und der Bahnhof war wie immer zu klein für die Koffer, die die Leute mitbrachten.
Ihr eigener Koffer war alt und rollte schief, weil ein Rad gebrochen war.
Sie zog ihn durch die Unterführung und roch das Meer, noch bevor sie es sah.
Kurt stand vor dem Ausgang, die Hände in den Taschen, der Kragen hochgestellt gegen den Wind.
Er hatte nicht gewinkt.
„Der Zug hatte Verspätung", sagte Maren.
„Ich weiß", sagte er.
„Ich war trotzdem früh."
Sie gingen nebeneinander, ohne sich zu berühren.
Die Straße zur alten Fischergasse war so uneben wie früher.
Das Haus roch nach Öl und Salz und dem alten Linoleum im Flur, das Kurt nie ausgetauscht hatte.
Er hatte ihr altes Zimmer so gelassen, wie es war – das war seine Art von Willkommen.
Maren legte den Koffer auf das Bett, ohne ihn aufzumachen.
Sie setzte sich ans Fenster und sah auf den Hafen, wo die Kutter still im Wasser lagen.
Eine Möwe schrie einmal, dann war es still.
Kurt klopfte und fragte, ob sie Hunger hatte.
Sie sagte nein, obwohl sie seit dem Morgen nichts gegessen hatte.
Am Abend ging Kurt ins Hafenlokal, wie jeden Donnerstag.
Maren blieb eine Stunde allein, dann zog sie die Jacke an und folgte ihm.
Das Lokal war niedrig und warm, die Luft roch nach Frittierfett und nassem Holz.
Kurt saß an seinem Stammplatz, ein Glas Pils vor sich, und sprach mit dem Wirt.
Maren nahm einen Platz am Tresen und bestellte einen Tee, weil sie nicht wusste, was sie sonst hätte bestellen sollen.
Dann sah sie Stefan.
Er saß an einem der Ecktische, mit einer Frau, die Maren nicht kannte, und einem kleinen Jungen auf dem Schoß.
Der Junge schlief fast, der Kopf lag auf Stefans Schulter.
Stefan sah sie, und sein Gesicht veränderte sich kurz, bevor es wieder still wurde.
Er stand nicht auf.
Maren trank ihren Tee und bestellte einen Korn hinterher.
Später räumten die letzten Gäste das Lokal, die Stühle wurden hochgestellt, der Wirt wischte die Theke.
Kurt sagte ihr Bescheid und ging, weil er früh aufstehen musste.
Maren blieb noch, weil sie noch nicht nach Hause konnte.
Stefan brachte die Frau und den Jungen nach draußen, dann kam er zurück und setzte sich auf den Hocker neben ihr.
„Ich hab nicht gewusst, dass du zurückkommst", sagte er.
„Ich hab es selbst nicht lange gewusst."
Er bestellte auch einen Korn, aber er trank ihn nicht sofort.
„Wie lange warst du weg?"
„Drei Jahre und vier Monate."
Er nickte, als hätte er nachgezählt.
„Und jetzt?"
„Ich bin einfach zurück."
Der Wirt stellte die Gläser hoch und wartete, dass sie fertig waren.
Draußen war es windig und dunkel, die Laterne am Kai wackelte.
Stefan blieb stehen, die Hände in den Hosentaschen.
„Er heißt Lars", sagte er.
„Zweiter Vorname ist Maren."
Sie sah ihn an.
„Das ist ungewöhnlich."
„Petra hat es so gewollt."
Maren nickte langsam.
„Warum hat sie es so gewollt?"
Stefan schwieg eine Weile, dann sagte er: „Weil sie weiß, wie es war."
Maren sah zum Wasser, wo die Kutter im Dunkeln lagen.
„Er ist ein hübsches Kind."
„Ja", sagte Stefan.
Er wartete, ob sie noch etwas sagte.
Sie sagte nichts mehr.
Sie gingen in verschiedene Richtungen.
Maren schlief schlecht, weil das Bett noch so war wie früher und das Rauschen des Meeres nachts lauter klang, als sie es in Erinnerung hatte.
Am Morgen stand sie früh auf, während Kurt noch schlief.
Sie öffnete den Koffer und holte das Kleid heraus – das weiße, das sie als Novizin getragen hatte, lang und gerade geschnitten, von der Reise leicht verknittert.
Sie wusch es in der Badewanne mit Handseife, und das Wasser wurde grau.
Sie wrang es aus und trug es in den Garten, wo die Leine zwischen zwei alten Pfählen hing.
Es war kaum Wind, aber das Kleid bewegte sich trotzdem, als würde es atmen.
Kurt kam mit zwei Tassen Kaffee in den Garten und sah das Kleid an der Leine.
Er sagte nichts.
Das war das Einzige, was er hätte sagen können.
Maren nahm den Kaffee und trank ihn, während das Kleid langsam trocknete.
Das Weiß des Stoffes war im Morgenlicht fast zu hell.
Sie würde es aufbewahren.
Sie wusste noch nicht wo.
----------------------------------------------
Der weiße Kittel
Franka kam an einem Donnerstag zurück, nicht am Sonntag, wie sie es angekündigt hatte.
Der Rucksack schleifte ihr am Rücken, der Riemen hatte eine rote Spur in die Schulter gebrannt.
Die Auffahrt zum Weingut war noch dieselbe, aber das Tor schien kleiner geworden, als hätte die Zeit daran gezogen.
Kathi stand an der Keltertür, einen Messbecher in der Hand, und sah sie kommen, ohne die Hand zu heben.
„Du hättest anrufen können", sagte sie, als Franka nah genug war.
Franka antwortete nicht, weil es keine Antwort gab, die nicht gelogen hätte.
Kathi nahm ihr den Rucksack ab, um ihn wortlos ins Haus zu tragen.
Der Hof roch nach Most und Kompost und dem Schweiß des Augusts.
Franka stand eine Minute reglos auf dem Pflaster, bevor sie folgte.
Drinnen war das Licht dasselbe, das gelbe Nachmittagslicht durch die Weinreben, das sie seit ihrer Kindheit kannte.
Das Zimmer, das Kathi für sie herrgerichtet hatte, war klein – das ehemalige Vorratszimmer, weil ihr altes Zimmer jetzt vermietet wurde.
Auf dem Bett lag eine Decke, die Kathi offenbar aus dem Kloster bezogen hatte, schwer und gestärkt wie die des Dormitoriums.
Franka legte die Hand auf den Stoff, sagte nichts.
Das Kloster schickte einem seine eigenen Decken nach.
Am Abend war Weinfest.
Kathi hatte keinen Hinweis gegeben – entweder aus Rücksicht oder weil sie glaubte, Franka würde von selbst gehen.
Franka ging, weil sie nicht im Vorratszimmer sitzen wollte.
Der Festplatz war mit Lichterketten bespannt, die Tische standen eng, Fässer als Tresen, Gläser ohne Stiele.
Sie stand am Rand und trank einen Silvaner, den sie nicht schmeckte.
Benedikt sah sie zuerst, bevor sie ihn sah – das merkte sie daran, dass er für einen Moment aufhörte zu reden, bevor er weiterredete.
Er saß an einem der langen Tische, eine Frau neben ihm, und ein Kind auf dem Schoß, dessen goldene Haare im Schein der Lichterketten leuchteten.
Als ihre Blicke sich trafen, hob er die Hand, ein kleines, kaum lesbares Zeichen.
Sie nickte.
Er stand nicht auf.
Das Kind begann zu quengeln, er hob es hoch.
Franka schaute weg und sah auf den Hang, auf dem die Weinberge im letzten Licht standen, dunkelgrün und vollkommen, als hätten sie die Zeit angehalten.
Sie trank das Glas aus.
Jemand sprach sie an, ein Nachbar, der fragte, ob sie wieder für immer da sei.
Sie sagte: „Fürs Erste."
Der Nachbar nickte, als wäre das eine präzise Auskunft.
Später, als das Fest enger und lauter wurde, stellte Benedikt das Kind ab und kam doch herüber.
Er trug einen alten Wollpullover, den sie kannte – dunkelblau, am rechten Ärmel ein verblasster Fleck.
„Franka", sagte er, nur das, wie eine Feststellung.
„Benedikt", sagte sie genauso.
Er bestellte zwei Gläser, ohne zu fragen, stellte eines vor ihr ab.
„Wie war es?"
Sie überlegte, welche Wahrheit von den verfügbaren er meinen könnte, und entschied sich für die knappste.
„Still."
„Und jetzt?"
„Lauter."
Er lächelte kurz, das schiefe Lächeln, das an der rechten Seite früher anfing als an der linken.
Die Frau am Tisch sah herüber, blickte aber gleich weg, als hätte sie sich entschieden, nichts sehen zu wollen.
Franka fragte nach dem Kind.
„Lotte", sagte er.
„Sie wird im Oktober zwei."
Er trank.
„Zweiter Vorname ist Franziska."
Franka hielt das Glas fest.
„Warum?"
Er zuckte mit den Schultern, aber es war kein gleichgültiges Zucken.
„Hanna wollte es", sagte er schließlich, und es klang so, als wäre das die Version, auf die er sich geeinigt hatte.
Franka stellte das Glas ab und sah zum Hang.
„Sie ist hübsch."
„Sie hat deinen Mund."
Das war zu viel, und Franka dachte, ohne es denken zu wollen: Wäre sie damals geblieben, hätte das Kind einen anderen zweiten Namen.
Franka sagte: „Grüß sie, wenn sie größer ist."
Dann ging sie.
Der Weg vom Festplatz zum Weingut war so kurz, dass es ihr fast ein Vorwurf schien.
Kathi saß noch in der Küche, die Hände um eine Tasse, die Augen halb geschlossen.
Franka setzte sich ihr gegenüber, ohne zu reden.
Sie saßen so, bis die Uhr halb zwölf zeigte.
Dann sagte Kathi: „Du schläfst jetzt."
Es war kein Vorschlag.
Franka schlief nicht.
Sie lag im Vorratszimmer und hörte den Most gären, das leise Gluckern aus dem Keller, der Klang, der das ganze Haus wie eine Lunge atmen ließ.
Sie dachte nicht an Benedikt.
Sie dachte an die Küche im Kloster, die Stille zwischen dem Morgengebet und dem Frühstück, die gewollte, geübte, konservierte Stille, die nicht Abwesenheit von Geräusch war, sondern Abwesenheit von Anspruch.
Es gab hier keinen Ort, der sie nicht ansprach.
Am Morgen holte sie den weißen Kittel aus dem Rucksack – den langen, leichten, den sie als Novizin täglich getragen hatte, Baumwolle, die oft gewaschen worden war, bis sie fast durchsichtig wirkte.
Sie breitete ihn auf dem Bügelbrett aus.
Das Bügelbrett hatte früher ihrer Mutter gehört, das Bein war mit einem Kabelbinder geflickt.
Sie bügelte den Kittel langsam, Bahn für Bahn, die Falten glättend, die er im Rucksack gesammelt hatte.
Das Bügeleisen zischte bei jedem Stoß.
Kathi kam herein, sah es, sagte nichts.
Das war das Klügste, was sie hätte tun können.
Franka hängte den Kittel auf einen Bügel am Fensterrahmen, nicht auf die Leine draußen.
Nicht weil sie ihn verbergen wollte.
Sondern weil sie noch nicht bereit war, ihn dem Wetter auszusetzen.
Er hing dort, während der Morgen ins Zimmer kam, und warf einen weißen Schimmer an die Decke.
Er würde eine Weile dort hängen.
== 105 ==
Das weiße Kleid
Clara kommt nach Hause.
Sie hat drei Jahre in einem Kloster gelebt.
Jetzt ist sie wieder in ihrer Stadt.
Ihr Bruder Karl wartet am Bahnhof.
Er hat ein Auto.
„Hallo, Clara", sagt er.
„Hallo, Karl", sagt sie.
Sie fahren nach Hause.
Das Haus ist klein und ruhig.
Karl kocht Nudeln.
Sie essen zusammen.
Karl fragt nicht viel.
Das ist gut, weil Clara nicht reden möchte.
Nach dem Essen trinkt Karl ein Bier.
Clara trinkt Wasser.
Sie ist müde.
Am Abend geht Clara in die Gaststätte.
Die Gaststätte heißt „Zum goldenen Stern".
Sie setzt sich an einen Tisch.
Sie bestellt einen Tee.
Es sind viele Leute da.
Clara kennt einige von ihnen.
Dann sieht sie Max.
Max sitzt am Nebentisch.
Er hat eine Frau dabei.
Die Frau heißt Julia.
Sie haben ein kleines Kind.
Das Kind ist ein Mädchen.
Das Mädchen schläft.
Max hat Clara gesehen.
Er steht auf und kommt zu ihr.
„Hallo, Clara", sagt er.
„Hallo, Max", sagt sie.
Er setzt sich kurz zu ihr.
„Das ist Julia, meine Frau", sagt er.
Julia nickt, aber sie schaut weg.
„Wie heißt das Mädchen?", fragt Clara.
Max sagt: „Sie heißt Clara."
Clara schaut das Mädchen an.
Es schläft noch.
„Sie ist hübsch", sagt Clara.
Julia ruft Max.
Er geht zurück.
Clara trinkt ihren Tee.
Die Gaststätte macht zu.
Clara geht nach draußen.
Draußen ist es kalt und dunkel.
Max steht vor der Tür.
Julia und das Kind sind schon weg.
Clara bleibt stehen.
„Warum heißt sie Clara?", fragt Clara.
Max sagt: „Ich habe auf dich gewartet."
Clara sagt nichts.
Es ist still.
„Du hast nicht geschrieben", sagt Max.
„Nein", sagt Clara.
„Gute Nacht, Max."
„Gute Nacht."
Clara geht nach Hause.
In der Nacht schläft Clara nicht gut.
Am Morgen steht sie früh auf.
In ihrem Rucksack ist ein weißes Kleid.
Das Kleid hat sie im Kloster getragen.
Sie wäscht das Kleid mit Wasser und Seife.
Dann hängt sie das Kleid auf die Leine.
Die Leine ist im Garten.
Der Wind bewegt das Kleid.
Karl kommt aus dem Haus.
Er hat zwei Tassen Kaffee.
Er schaut das Kleid an.
Er sagt nichts.
Sie trinken zusammen Kaffee.
„Ziehst du das Kleid wieder an?", fragt Karl.
„Nein", sagt Clara.
„Wirfst du es weg?"
„Nein", sagt Clara.
Karl nickt.
Das weiße Kleid bewegt sich im Wind.
Clara schaut zu.
Sie bleibt lange im Garten stehen.
----------------------------------------------
Die weiße Schürze
Anna ist mit dem Bus nach Husum gefahren.
Vier Jahre lang hat sie in einem Kloster in Hamburg gewohnt.
Jetzt ist sie wieder zu Hause.
Ihre Schwester Inga hat vor dem Haus auf sie gewartet.
Inga hat die Tür aufgemacht und gesagt: „Komm rein, ich habe Tee gemacht."
Das Haus war warm und ruhig.
Sie haben zusammen am Tisch gesessen und Tee getrunken.
Inga hat nicht gefragt, warum Anna gegangen ist.
Das war gut.
In Annas Tasche war eine weiße Küchenschürze.
Sie hat die Schürze im Kloster in der Küche getragen.
Anna hat wenig gegessen, denn sie war müde.
Nach dem Abendessen hat Inga Wein getrunken.
Anna ist früh ins Bett gegangen.
Am nächsten Abend ist Anna in das Café am Hafen gegangen.
Das Café war klein, und es hat nach Kaffee und Kuchen gerochen.
Anna hat sich an einen Tisch gesetzt und einen Tee bestellt.
Draußen war das Meer grau, und die Möwen haben laut gerufen.
Anna hat einige Leute im Café gekannt, aber sie hat niemanden angesprochen.
Dann hat sie Sven gesehen.
Er hat an einem Tisch mit einer Frau und einem Baby gesessen.
Das Baby hat gelacht und die Hände bewegt.
Sven hat Anna gesehen und ist zu ihr gekommen.
„Hallo, Anna", hat er gesagt.
„Hallo, Sven", hat sie gesagt.
Er hat sich kurz zu ihr gesetzt.
„Das ist Petra, meine Frau", hat er gesagt und auf die Frau gezeigt.
Petra hat kurz genickt, aber sie ist sitzen geblieben.
„Und das Baby?", hat Anna gefragt.
Sven hat kurz gezögert.
„Sie heißt Anna", hat er gesagt.
Anna hat das Baby angeschaut.
Das Baby hatte blaue Augen und hat gelächelt.
„Sie ist süß", hat Anna gesagt.
„Du hast mir nie geschrieben", hat Sven gesagt.
„Aus einem Kloster schreibt man nicht so viele Briefe", hat Anna gesagt.
Sven hat nichts gesagt.
Petra hat gerufen, und Sven ist zurückgegangen.
Anna hat noch einen Tee bestellt.
Das Café hat um zehn Uhr geschlossen.
Sven hat draußen vor der Tür auf Anna gewartet.
Petra und das Baby waren schon weg.
Es war kalt, und der Wind hat vom Meer geblasen.
„Warum heißt deine Tochter Anna?", hat sie gefragt.
„Ich habe auf dich gewartet", hat Sven gesagt.
Das Meer war grau und laut.
Anna hat nichts gesagt.
„Gute Nacht, Sven."
„Gute Nacht, Anna."
Sie sind in verschiedene Richtungen gegangen.
In dieser Nacht hat Anna nicht gut geschlafen.
Am nächsten Morgen ist sie früh aufgestanden.
Sie hat die weiße Schürze aus der Tasche geholt.
Die Schürze war sauber, aber Anna hat sie trotzdem gewaschen.
Sie hat die Schürze in der Küche mit Wasser und Seife gewaschen.
Dann hat sie die Schürze auf die Leine im Garten gehängt.
Der Wind hat die Schürze hin und her bewegt.
Inga ist aus dem Haus gekommen.
Sie hat zwei Tassen Kaffee mitgebracht.
Inga hat die Schürze angeschaut, aber nichts gesagt.
Sie haben zusammen Kaffee getrunken.
„Ziehst du die Schürze wieder an?", hat Inga gefragt.
„Nein", hat Anna gesagt.
„Und wirfst du sie weg?"
„Nein", hat Anna wieder gesagt.
Inga hat genickt.
Der Wind hat die Schürze immer noch bewegt.
Anna hat lange zugeschaut.
Sie wollte die Schürze nicht wegwerfen, aber sie wollte sie auch nicht anziehen.
Das war schwierig.
Inga hat ihre leere Tasse abgestellt und ist ins Haus gegangen.
Anna ist noch lange im Garten gestanden.
Die weiße Schürze hat sich im Wind bewegt.
----------------------------------------------
Die weiße Haube
Luise stieg in Triberg aus dem Zug und blieb kurz auf dem Bahnsteig stehen.
Es roch nach Harz und feuchter Erde, wie immer hier im Schwarzwald.
Sie hatte fünf Jahre im Kloster verbracht, als Novizin der Franziskanerinnen in Freiburg.
Vier Wochen vor der Profess hatte sie zur Oberin gesagt: „Ich gehe."
Die Oberin hatte genickt und nichts gefragt.
Jetzt trug Luise einen kleinen Rucksack, und darin lag die weiße Haube aus ihrer Novizenzeit.
Werner wartete auf dem Parkplatz neben dem Bahnhof und aß ein Brötchen.
Er umarmte sie kurz und sagte: „Komm, das Abendessen ist fertig."
Sein Haus stand neben der Bäckerei, und im Flur roch es nach frischem Brot.
Sie aßen zusammen Suppe, und Werner sprach über die Arbeit und den neuen Ofen.
Er fragte nicht, warum sie das Kloster verlassen hatte.
Das war gut.
Nach dem Essen trank Werner ein Bier, während Luise Wasser trank und aus dem Fenster sah.
„Willst du morgen beim Backen helfen?", fragte er.
„Ja, gerne", sagte sie.
Am nächsten Abend ging Luise allein in den Gasthof „Zur Linde", der am Ende der Hauptstraße lag.
Sie wollte wissen, ob sie es noch konnte, einfach unter Leuten zu sitzen.
Im Gasthof war es laut, die Tische waren voll, und jemand spielte Karten in der Ecke.
Sie setzte sich an einen kleinen Tisch beim Fenster und bestellte einen Tee.
Die Wirtin brachte ihn, ohne etwas zu sagen.
Luise kannte die meisten Gesichter noch, aber sie sprach niemanden an.
Dann sah sie Clemens.
Er saß am Nebentisch mit einer jungen Frau und einem kleinen Mädchen.
Das Mädchen schlief auf seinem Schoß.
Clemens sah Luise auch und stand auf.
Er kam zu ihr herüber und blieb vor ihrem Tisch stehen.
„Luise", sagte er, „ich wusste nicht, dass du zurückkommst."
„Ich auch nicht wirklich", sagte sie.
Er setzte sich kurz zu ihr.
„Das ist Heike, meine Frau", sagte er.
Luise nickte in Richtung des Nebentisches.
„Und das Mädchen?", fragte sie.
Clemens räusperte sich.
„Sie heißt Luise."
Sie schaute zu dem Kind hinüber, das jetzt die Augen aufmachte.
Das Mädchen sah sie an und lachte kurz.
„Das war eine komische Entscheidung", sagte Luise.
„Ja", sagte er, „vielleicht."
Heike rief ihn, weil das Kind unruhig geworden war.
Clemens stand auf und ging zurück, ohne sich umzudrehen.
Luise trank ihren Tee aus und bestellte danach einen Schnaps.
Als der Gasthof schloss, stand Clemens draußen vor der Tür.
Heike und das Mädchen waren schon gegangen.
Er rauchte und sah auf die dunkle Straße, als Luise herauskam.
Sie blieb bei ihm stehen.
„Warum hast du sie so genannt?", fragte sie.
Er drückte die Zigarette auf dem Pflasterstein aus.
„Weil ich gedacht habe, du kommst zurück."
Luise sagte nichts darauf.
Aus der Ferne hörte man Wasser, das über Steine lief.
„Du hast mir nie geschrieben", sagte Clemens.
„Man schreibt keine Briefe aus dem Kloster", sagte sie.
Das stimmte nicht ganz, aber es war einfacher.
Clemens nickte langsam.
„Gute Nacht, Clemens", sagte sie.
„Gute Nacht", sagte er.
Sie gingen in verschiedene Richtungen, und Luise hörte seine Schritte, bis sie leiser wurden.
In dieser Nacht schlief sie nicht gut, weil die Gedanken nicht aufhörten.
Sie lag im alten Bett und hörte den Wind, der durch die Tannenbäume fuhr.
Früh am Morgen, als Werner noch schlief, stand sie auf.
Sie holte die weiße Haube aus dem Rucksack.
Die Haube war sauber, aber sie wusch sie trotzdem.
Sie wusch sie im Waschbecken mit kaltem Wasser und Seife.
Dann trug sie die Haube in den Garten und hängte sie auf die Leine zwischen zwei Hemden.
Der Wind kam vom Berg und war kalt.
Er bewegte die Haube hin und her, als wäre jemand darin.
Werner kam nach einer Weile aus dem Haus mit zwei Tassen Kaffee.
Er stellte eine Tasse auf den Gartentisch, ohne etwas zu sagen.
Sie standen nebeneinander und tranken.
„Du wirst sie nicht mehr anziehen", sagte Werner schließlich.
Es war keine Frage.
„Nein", sagte Luise.
„Und wegwerfen?"
Sie schüttelte den Kopf.
Werner stellte seine leere Tasse ab und sah noch einmal zur Haube.
„Dann hängt sie halt", sagte er, und dann ging er zurück in die Bäckerei.
Die weiße Haube bewegte sich im Wind, füllte sich mit Luft und fiel wieder zusammen.
Luise schaute zu, bis der Kaffee kalt war.
----------------------------------------------
Heimkehr im November
Veronika kam am Dienstagnachmittag in Krems an, als die Läden schon schlossen und die Straßen still wurden.
Fünf Jahre hatte sie im Kloster verbracht, zuletzt als Novizin der Zisterzienserinnen in Heiligenkreuz.
Sechs Wochen vor ihrer Profess hatte sie die Oberin gebeten, sie zu entlassen, und die Oberin hatte genickt, ohne lange zu fragen.
Das war alles.
Matthias wohnte am Stadtrand, in dem alten Reihenhaus, das der Vater ihnen hinterlassen hatte.
Er stand an der Haustür, als sie die Auffahrt hinaufkam, die Arme vor der Brust verschränkt, aber das Gesicht nicht unfreundlich.
„Du siehst müde aus", sagte er.
„Ich bin müde", sagte sie.
Er holte ihr Gepäck – eine Reisetasche und eine flache Schachtel, in der der weiße Leinenrock lag, den sie als Novizin getragen hatte.
In der Küche roch es nach Zwiebeln und gebratenem Fleisch und dem Kaffee, der schon seit dem Morgen in der Kanne stand.
Matthias machte neuen Kaffee, ohne zu fragen, ob sie welchen wollte, und sie trank ihn, obwohl sie sich an Tee gewöhnt hatte.
Er fragte nicht, warum sie gegangen war, und das war von ihm das Klügste, was er hätte tun können.
Veronika aß ein wenig von dem Brot, das er auf den Tisch gestellt hatte, und sah dabei aus dem Fenster auf den Garten.
Der Garten war leer und grau, die Erde aufgebrochen vom Frost.
Nach dem Essen stellte er zwei Gläser auf den Tisch und goss sich Wein ein; sie hielt ihr Glas hin.
Am Abend wollte sie nicht allein sein, also ging sie in die Gaststube am Marktplatz, die noch so aussah wie früher.
Sie setzte sich an einen Tisch beim Fenster, bestellte Mineralwasser und sah den Leuten zu, die hereinkamen.
Die Decke war niedrig, die Lampen warm, und der Raum roch nach Bier und Holzfeuer.
Veronika kannte einige der Gesichter, aber die meisten nur so ungefähr, wie man Dinge kennt, die man lange nicht gesehen hat.
Tobias sah sie als Erster.
Er saß mit seiner Frau an einem der Tische nebenan, und zwischen ihnen saß ein kleines Mädchen in einem roten Pullover, das mit einem Löffel auf den Tisch klopfte.
Tobias stand auf und kam zu ihr herüber, ruhig, wie jemand, der sich schon lange auf diesen Moment vorbereitet hat.
„Ich hätte nicht gedacht, dich hier zu sehen", sagte er.
„Ich selbst auch nicht", sagte sie.
Er zog den freien Stuhl heran und setzte sich, und für einen Moment war es still zwischen ihnen, obwohl der Raum laut war.
„Das ist Lena", sagte er und zeigte auf die Frau am Nebentisch, die herüberblickte und kurz nickte.
„Und das Kind ist Nora."
Er räusperte sich.
„Zweiter Vorname ist Veronika."
Sie sah ihn an, ohne etwas zu sagen.
„Das war eine seltsame Entscheidung", sagte sie schließlich.
„Ja", sagte er.
„Vielleicht."
Lena rief ihn, weil das Mädchen den Löffel fallen gelassen hatte und anfing zu weinen.
Tobias stand auf, nickte ihr zu und ging zurück.
Veronika bestellte ein Glas Wein und trank es langsam, mit dem Blick auf die Tür.
Draußen war der Marktplatz fast leer und der Abend kalt, wie es November eben ist.
Tobias stand an einer der Säulen und rauchte; Lena und das Mädchen waren schon fort.
Veronika blieb stehen, weil sie spürte, dass er noch etwas sagen wollte.
„Du hast nie geantwortet", sagte er, ohne sie anzusehen.
„Aus einem Kloster schreibt man keine Briefe", sagte sie.
Das stimmte nicht ganz, aber es war einfacher als die Wahrheit.
Er nickte langsam, wie jemand nickt, der eine Antwort nimmt, ohne ihr ganz zu glauben.
„Wärst du geblieben, wenn ich noch länger gewartet hätte?"
Veronika dachte einen Moment nach, bevor sie antwortete.
„Ich weiß es nicht."
„Das ist ehrlich", sagte er.
Er warf die Zigarette fort und zog die Jacke enger um sich.
„Gute Nacht, Veronika."
„Gute Nacht."
Sie gingen in verschiedene Richtungen, und keiner drehte sich um.
In dieser Nacht schlief sie kaum, und als sie schlief, träumte sie nichts, was sie sich hätte merken können.
Sie lag im Bett und hörte, wie Matthias in der Küche noch etwas aufräumte, dann Stille, dann den Wind.
Am frühen Morgen, bevor das Licht kam, stand sie auf und öffnete die Schachtel.
Der weiße Leinenrock lag zusammengefaltet darin, und er roch noch nach dem Kloster – nach Lavendel und altem Holz und etwas, für das sie keinen Namen hatte.
Sie trug ihn in das Bad, wusch ihn mit kaltem Wasser und Kernseife, schrubbte den Stoff so lange, bis er sich anders anfühlte.
Dann hängte sie ihn auf die Leine im Garten, zwischen zwei Betttüchern, die Matthias dort gelassen hatte.
Der Wind war kalt und kam in unregelmäßigen Stößen vom Feld.
Er blähte den Rock auf, zog ihn zur Seite, ließ ihn wieder fallen.
Dann blähte er ihn erneut, als wäre jemand darin, der versuchte, eine Form anzunehmen.
Aus dem Küchenfenster roch es nach frischem Kaffee.
Matthias kam mit zwei Tassen in den Garten und stellte eine davon auf den kleinen Gartentisch, ohne ein Wort zu sagen.
Er sah den Rock auf der Leine an, und Veronika sah ihn auch an.
Sie tranken.
„Wirst du ihn wieder tragen?", fragte er nach einer Weile.
„Nein."
„Und wegwerfen?"
Sie schüttelte den Kopf.
Matthias nickte, als hätte er das erwartet.
Der Rock bewegte sich im Wind, füllte sich und leerte sich, füllte sich wieder.
Veronika hielt die Tasse mit beiden Händen und ließ sich wärmen.
Sie würde den Rock hängen lassen, so lange, bis sie wusste, was er bedeutete.
Ob er eine Erinnerung war, ein Versprechen, das sie nicht gehalten hatte, oder einfach ein Stück Stoff.
Matthias stellte die leere Tasse ab und ging ins Haus.
Sie blieb stehen.
Der Rock auf der Leine tanzte.
----------------------------------------------
Das Tuch auf der Leine
Der Morgen, an dem Sorcha in Donegal ankam, roch nach Tang und nassem Schiefer und dem Salz, das der Wind vom Meer herüberblies.
Sechs Jahre hatte sie im Kloster oberhalb von Killybegs verbracht – sechs Jahre des Schweigens, des Frühgebets, der langsam erlernten Kunst, mit wenig auszukommen.
Einen Monat vor der Profess hatte sie der Priorin gegenübergestanden und gesagt, dass sie gehe.
Kein Drama.
Nur der Klang der eigenen Stimme, den sie in dem hohen Raum nicht wiedererkannte.
Der Bus hatte sie bis Dungloe gebracht, von dort war sie gelaufen.
Die Landschaft kannte sie noch, aber die Landschaft kannte sie nicht mehr.
Pádraic stand am Tor, die Hände in den Taschen, das Gesicht gegen das Morgenlicht gedreht, als hätte er damit gerechnet, jemand anderen zu sehen.
Er sagte: „Du bist da."
Sie sagte: „Ja."
Er nahm ihr die Tasche – eine einzige Leinentasche, darin kaum mehr als ein weißer Rock, zwei Bücher und das Breviar –, ohne zu fragen, ob sie sie tragen könne.
Das Haus roch nach Kohle und altem Fett und dem Hund, der seit zwei Jahren tot war.
Pádraic kochte Haferbrei, stellte zwei Schüsseln auf den Tisch, sagte nichts über die vergangenen sechs Jahre.
Das war seine Art, rücksichtsvoll zu sein.
Sorcha aß, trank Tee, sah auf die Felder, die ihr Vater bestellt hatte, bevor er krank wurde und starb.
Am Abend war es Pádraic, der zu Hause blieb; Sorcha ging allein in das Pub.
Sie wollte wissen, ob sie es noch konnte – ob ein Raum voller fremder Körperwärme und Stimmen sie nicht erdrücken würde.
Das Pub lag am Ende der Hauptstraße, der Schank niedrig, die Balken vom Rauch der Jahrzehnte dunkel imprägniert.
Sie setzte sich an den Tresen, bestellte Tee, trank ihn schwarz.
Die Wirtin sah sie an, sagte dann nichts.
Es gab wenige Menschen in dem Dorf, die Sorcha nicht kannte, und Ferdia gehörte nicht dazu.
Sie erkannte sein Lachen, bevor sie ihn überhaupt sah – den breiten, etwas zu lauten Laut, den er immer dann ausstieß, wenn er nicht wusste, wohin mit sich.
Er saß in der hinteren Ecke, einer Frau gegenüber, die Sorcha nicht kannte, und auf seinem Schoß schlief ein kleines Mädchen.
Das Mädchen war vielleicht drei Jahre alt.
Es schlief mit dem Mund halb offen und den Händen zu Fäusten geballt, wie Kinder schlafen, die sich im Schlaf noch gegen etwas wehren.
Ferdia sah auf, bemerkte sie, versteifte sich für eine Sekunde.
Dann nickte er, knapp, wie man jemandem nickt, den man irgendwann einmal gekannt hat.
Sorcha wandte sich ab und bestellte einen Whiskey.
Als sie hinausging, lehnte Ferdia an der Außenmauer, allein.
Die Frau und das Kind waren fort.
Er rauchte, sah aufs Meer, drehte sich um, als Sorcha die Tür hinter sich zuzog.
„Ich wusste nicht, dass du zurückkommst", sagte er.
„Ich auch nicht wirklich", sagte sie.
Das war nicht gelogen, nur unvollständig.
Er bot ihr keine Zigarette an; sie wäre froh gewesen, hätte er es getan.
„Wie heißt deine Tochter?", fragte sie.
Er zögerte eine Sekunde.
„Aoibhe."
Noch eine Pause.
„Zweiter Vorname ist Sorcha."
Die Wellen brachen unten gegen den Fels, gleichmäßig und gleichgültig.
„Das war keine gute Idee", sagte sie.
„Nein", sagte er.
„Warum hast du es getan?"
Er drückte die Zigarette am Mauerstein aus.
„Ich dachte, du könntest zurückkommen."
Das war etwas, das sie hätte wissen können und doch nicht gewusst hatte.
„Gute Nacht, Ferdia", sagte sie.
Er ließ sie gehen, ohne noch etwas zu sagen.
Zu Hause schlief sie kaum.
Sie lag auf dem alten Eisenbett und starrte die Risse im Deckenputz an, die sich nicht verändert hatten.
Das Breviar lag auf dem Nachttisch; sie schlug es nicht auf.
Irgendwann gegen vier hörte sie Pádraic husten – das zweimal abgebrochene Husten, das er seit Jahren hatte.
Dann war es wieder still.
Am frühen Morgen, als der Himmel noch das graugrüne Licht vor dem Morgengrauen trug, holte sie den weißen Rock aus der Tasche.
Er war nicht schmutzig – aber sie wusch ihn trotzdem, wie man Dinge wäscht, von denen man nicht weiß, was man sonst mit ihnen tun soll.
Das Emaillezuber stand noch an derselben Stelle wie immer, hinter der Stalltür.
Sie goss kaltes Wasser hinein, löste Seifenflocken auf, schrubbte den Stoff so lang, bis ihre Hände kalt und rau waren.
Dann hängte sie den Rock auf die Leine, zwischen den Betttüchern von Pádraic und einem alten Flanellhemd.
Der Wind kam vom Meer, stark und wechselhaft.
Er blähte den Stoff auf, zog ihn in die Form einer Gestalt, die niemanden darstellte und trotzdem aussah wie jemand – wie etwas, das sich in die Leere gedrängt hatte, um nicht nichts zu sein.
Sorcha blieb stehen.
Sie hörte Pádraic hinter sich – seine Schritte auf dem Kies, das Geräusch der Küchentür.
Er kam heraus, eine Tasse in jeder Hand, stellte eine davon auf den Holzblock neben ihr ab.
Lange sagte keiner von beiden etwas.
„Du wirst ihn nicht mehr anziehen", sagte Pádraic schließlich.
Es war keine Frage.
„Nein."
„Wegwerfen?"
Sie schüttelte den Kopf.
„Dann hängt er halt", sagte er.
Sie tranken.
Der Rock auf der Leine schlug gegen sich selbst, füllte sich, entspannte sich, schlug wieder.
Er würde ihn aushöhlen, dachte sie – der Wind, die See, das Licht –, bis nur noch die Form übrig wäre, ohne Gewicht und ohne Inhalt.
Oder er würde bleiben, so lange, bis er selbst vergaß, dass er einmal etwas bedeutet hatte.
Pádraic trank seinen Tee aus, nickte ihr zu, ging zurück ins Haus.
Sorcha blieb stehen.
Der Rock tanzte.
== 106 ==
Rosas Platz
Anni hat einen kleinen Kiosk.
Der Kiosk ist in Köthen.
Sie verkauft Zeitungen und Zeitschriften.
Rosa arbeitet mit ihr zusammen.
Rosa ist 63 Jahre alt.
Sie kommt jeden Morgen um sieben.
„Guten Morgen, Anni", sagt Rosa.
Sie stellen die Zeitungen zusammen auf.
Herr Pohl kommt jeden Morgen um acht.
Er kauft immer eine Tageszeitung.
„Eine Zeitung, bitte", sagt er.
Anni gibt ihm die Zeitung.
Er zahlt und geht.
Das ist jeden Morgen so.
Rosa macht Kaffee.
Sie reden ein bisschen.
Anni trinkt den Kaffee und wartet auf die nächsten Kunden.
Eines Tages liegt ein Brief an der Tür.
Anni liest den Brief.
Der Kiosk soll abgerissen werden.
Vielleicht im nächsten Jahr.
Rosa liest den Brief auch.
„Das haben die früher auch gesagt", sagt Rosa.
Anni legt den Brief weg.
Herr Pohl kommt um acht.
Er kauft seine Zeitung.
Anni gibt sie ihm und sagt „Guten Tag".
Der Kiosk ist den ganzen Tag offen.
Im März kommt Rosa nicht zur Arbeit.
Anni wartet, aber Rosa kommt nicht.
Sie öffnet den Kiosk allein.
Rosa hat nicht angerufen.
Mittags ruft Rosas Sohn an.
Er sagt: „Rosa ist krank."
„Was hat sie?", fragt Anni.
„Das Herz", sagt er.
Anni sagt: „Ich wünsche ihr gute Besserung."
Nach der Arbeit fährt sie ins Krankenhaus.
Sie bringt eine Zeitung mit.
Rosa liegt im Bett.
Sie sieht Anni an.
„Der Kiosk läuft noch", sagt Anni.
Rosa lächelt ein bisschen.
Anni sitzt eine Stunde bei ihr.
Dann fährt sie nach Hause.
Am nächsten Morgen öffnet sie den Kiosk allein.
Herr Pohl kommt um acht.
Er kauft seine Zeitung.
„Und Ihre Kollegin?", fragt er.
„Im Krankenhaus", sagt Anni.
Er nickt und geht.
Rosa ist vier Wochen später gestorben.
Anni hat es morgens erfahren.
Sie hat geweint.
Dann hat sie den Kiosk aufgemacht.
Ein Jahr ist vergangen.
Der Kiosk steht noch.
Den Abriss hat es noch nicht gegeben.
Anni öffnet jeden Morgen um sieben.
Sie stellt die Zeitungen allein auf.
Rosas Platz ist leer.
Aber Anni macht den Kaffee.
Herr Pohl kommt um acht.
Er kauft seine Zeitung.
„Guten Morgen", sagt Anni.
„Guten Morgen", sagt er.
Er zahlt und geht.
Anni trinkt ihren Kaffee.
Der Kiosk ist still.
Aber er ist offen.
----------------------------------------------
Gretes Tasse
Paula arbeitet in der kleinen Bücherei in Schwerin.
Die Bücherei ist in einem alten Haus in der Innenstadt.
Es gibt nicht viele Bücher, aber Paula kennt jedes davon.
Grete kommt jeden Morgen um acht.
Sie hat immer eine Tasche mit Äpfeln dabei.
„Guten Morgen, Paula", sagt sie und stellt die Tasche ab.
Paula hat schon Kaffee gemacht.
Sie trinken Kaffee und sprechen über die neuen Bücher.
Frau Heinemann kommt dienstags und donnerstags.
Sie leiht immer drei Bücher aus.
„Haben Sie etwas Neues?", fragt sie.
Paula sucht ein Buch heraus und erklärt, worum es geht.
Frau Heinemann nickt und nimmt das Buch.
Das machen sie seit vielen Jahren so.
Im März hat Paula einen Brief bekommen.
Die Bücherei soll schließen, steht im Brief.
Vielleicht im nächsten Jahr, aber vielleicht auch früher.
Grete hat den Brief auch gelesen.
„Das wussten wir doch", sagt sie.
Paula legt den Brief in die Schublade.
Sie macht weiter, denn Frau Heinemann kommt um zehn.
Frau Heinemann bringt drei Bücher zurück und leiht drei neue aus.
„Was passiert mit der Bücherei?", fragt sie.
„Wir wissen es noch nicht", sagt Paula.
Frau Heinemann nickt und geht.
Grete macht Kaffee.
Sie sagen nichts mehr über den Brief.
Im April ist Grete nicht zur Arbeit gekommen.
Sie hat nicht angerufen.
Paula hat die Bücherei allein geöffnet.
Sie hat auch den Kaffee allein gemacht.
Mittags hat Gretes Sohn angerufen.
Grete ist krank – sie hat Krebs.
Paula hat gesagt: „Ich wünsche ihr alles Gute."
Dann hat sie aufgelegt und ist an ihren Tisch gegangen.
Sie hat ein Buch aufgemacht, aber nicht gelesen.
Am Nachmittag ist sie ins Krankenhaus gefahren.
Sie hat Äpfel mitgenommen, weil Grete die immer dabei hatte.
Grete hat im Bett gelegen und war sehr müde.
„Wer macht den Kaffee?", hat Grete gefragt.
„Ich", hat Paula gesagt.
Sie hat eine Stunde neben Grete gesessen.
Dann ist sie zurückgefahren.
Am nächsten Tag hat sie die Bücherei wieder allein geöffnet.
Grete ist zwei Monate später gestorben.
Paula hat es von Gretes Sohn erfahren.
Sie hat an dem Tag trotzdem die Bücherei geöffnet.
Frau Heinemann ist gekommen und hat Bücher ausgeliehen.
Sie hat nichts gefragt.
Ein Jahr später ist die Bücherei noch offen.
Die Stadt hat das Geld für die neue Bücherei noch nicht.
Der Brief liegt noch in der Schublade.
Paula öffnet jeden Morgen um acht.
Sie macht allein Kaffee – eine Tasse.
Auf dem Tisch steht noch Gretes Tasse, aber Paula benutzt sie nicht.
Frau Heinemann kommt noch dienstags und donnerstags.
Sie leiht immer noch drei Bücher aus.
Eines Tages bringt sie Äpfel mit.
„Ich habe an Ihre Kollegin gedacht", sagt sie.
Paula nimmt die Äpfel und stellt sie auf den Tisch.
„Danke", sagt sie.
Frau Heinemann sucht ihre Bücher aus.
Paula stempelt sie ab, wie immer.
Draußen ist es kalt.
Drinnen ist es warm.
Frau Heinemann geht.
Paula räumt die Bücher auf.
Dann setzt sie sich und trinkt ihren Kaffee.
Die Bücherei ist still.
Aber sie ist noch offen.
----------------------------------------------
Immer donnerstags
Werner Kühn öffnet das Kino jeden Dienstag um sieben, auch wenn nur zwei Karten verkauft sind.
Das "Lichtblick" liegt in einer Nebenstraße in Plauen, im Erdgeschoss eines alten Kaufhauses.
Die Leinwand ist klein, die Sitze sind aus den achtziger Jahren und quietschen beim Aufstehen.
Ilse kommt immer um halb sieben, meistens schon vor Werner.
Sie stellt die Kasse an und legt die Programmhefte aus, bevor Werner aus dem Vorführraum kommt.
„Heute kommen vier Leute", sagt sie und zeigt auf den Zettel mit den Buchungen.
Werner nickt und geht zurück in den Vorführraum, um den Projektor zu prüfen.
Der Projektor ist alt, aber er läuft noch seit zweiunddreißig Jahren.
Herr Taubert kommt jeden Donnerstag, immer pünktlich, immer allein.
Er kauft eine Karte für die erste Reihe und trinkt eine Cola.
„Was läuft heute?", fragt er, obwohl er das Programm schon kennt.
Ilse nennt den Filmtitel, ohne dabei zu lächeln, und Herr Taubert nickt.
Herr Taubert setzt sich, die Cola in der Hand, und wartet, bis es dunkel wird.
Werner läuft den Film an und schaut durch das kleine Fenster im Vorführraum.
Die vier Zuschauer sitzen weit auseinander, jeder auf seinem eigenen Platz im Saal.
Nach der Vorstellung trinken Werner und Ilse Tee in der Garderobe.
„Wann kommt der nächste Film?", fragt Ilse, wenn die Kasse abgerechnet ist.
Werner nennt das Datum und schreibt es auf den Zettel neben der Kasse.
Das machen sie seit achtzehn Jahren so.
Eines Morgens lag ein Brief an der Tür.
Es war kein normaler Brief, denn er kam von der Stadtverwaltung.
Werner las ihn zweimal, dann steckte er ihn in die Jackentasche.
Das Gebäude sollte abgerissen werden, wahrscheinlich im nächsten Jahr.
Ilse kam herein und fragte, was für ein Brief das sei.
„Nichts Neues", sagte Werner und steckte den Brief tiefer in die Tasche.
Ilse schaute ihn an, aber sie fragte nicht weiter.
Sie legte die Programmhefte aus und stellte die Kasse an.
Herr Taubert kam donnerstags, die Cola in der Hand, und setzte sich.
Das Kino lief weiter.
Im Februar blieb Ilse zum ersten Mal ohne Ankündigung weg.
Sie hat nicht angerufen, und das passierte noch nie.
Werner öffnete allein und stellte die Kasse an.
Er hat die Programmhefte ausgelegt, aber er wusste nicht genau, wo Ilse sie sonst hinlegte.
Mittags rief Ilses Tochter an – ihre Stimme klang ruhig.
Ilse lag im Krankenhaus, Herzinfarkt, seit gestern Nacht.
Werner sagte: „Ich komme heute Abend."
Er schloss nach der letzten Vorstellung ab und fuhr mit dem Bus ins Krankenhaus.
Ilse lag im Bett, blass, mit einem Schlauch unter der Nase.
„Du hast die Hefte falsch hingelegt", sagte sie leise.
Werner lachte nicht, aber es wäre beinahe passiert.
Er saß eine Stunde neben ihr, dann fuhr er zurück.
Am nächsten Morgen öffnete er das Kino allein, ohne Ilse.
Ilse kam nicht mehr zurück.
Sie ist drei Wochen später gestorben, nachts, ohne dass Werner dabei war.
Ihre Tochter hat am Morgen angerufen, vor der ersten Vorstellung.
Werner legte auf und blieb eine Weile neben der Kasse stehen.
Dann lief er den Projektor an.
Herr Taubert kam donnerstags und setzte sich in die erste Reihe.
„Und Ihre Kollegin?", fragte er einmal, als er bezahlte.
„Die kommt nicht mehr", sagte Werner, ohne aufzusehen.
Herr Taubert nickte und ging ohne weitere Fragen in den Saal.
Ein Jahr später steht das Gebäude noch.
Der Abriss hat sich verzögert, weil die Stadt kein Geld für den Neubau hat.
Der Brief liegt noch in der Jackentasche – Werner hat ihn nicht mehr herausgenommen.
Er öffnet das Kino jeden Dienstag, auch wenn nur zwei Karten verkauft sind.
Es gibt jetzt eine Aushilfe, Melanie, zwanzig Jahre alt.
Sie legt die Hefte falsch hin, und Werner sagt nichts dazu.
Herr Taubert kommt noch, jeden Donnerstag.
Er fragt jetzt nicht mehr nach dem Film.
Er kauft seine Karte, setzt sich in die erste Reihe und wartet, bis es dunkel wird.
Eines Abends fragt Melanie: „Warum läuft das Kino noch?"
Werner überlegt kurz.
„Weil der Donnerstag kommt", sagt er.
Melanie versteht das nicht, aber sie fragt nicht weiter.
Werner geht in den Vorführraum und läuft den Film an.
Das Licht geht aus.
Auf der Leinwand bewegt sich etwas.
Herr Taubert sitzt in der ersten Reihe, allein.
Der Projektor surrt.
Werner bleibt im Vorführraum und schaut durch das kleine Fenster.
----------------------------------------------
Noch offen
Inge Hartmann öffnet ihren Blumenladen jeden Morgen um acht, auch wenn der Lieferwagen noch nicht da ist.
Der Laden liegt im Erdgeschoss eines Plattenbaus in Gera-Lusan, zwischen einem Handyladen und einem Friseur, der seit Monaten geschlossen hat.
Marta kommt meistens zehn Minuten später, mit einem Rucksack und einer Thermoskanne.
Sie stellt die Kanne auf die Theke und fängt an, die Blumen zu gießen, ohne erst die Jacke abzulegen.
„Die Tulpen hängen schon wieder", sagt Marta und schüttelt den Kopf.
Inge nimmt die schlechten Stängel heraus und legt sie in den Eimer hinter der Tür.
Sie bestellt die Blumen zweimal die Woche, aber manchmal kommt die Lieferung einen Tag zu spät.
Dann müssen sie mit dem arbeiten, was noch da ist.
Herr Döring kommt jeden Freitag um halb zehn.
Er kauft immer dasselbe: fünf Nelken, weiß, für das Grab seiner Frau.
Inge bindet sie mit grünem Band zusammen, ohne zu fragen, wie er sie haben will.
Das weiß sie seit drei Jahren.
„Wird wärmer heute", sagt er und legt das Geld auf die Theke.
„Wird es", sagt Inge, auch wenn das Thermometer draußen noch keine zehn Grad zeigt.
Marta gießt die Zimmerpflanzen im Schaufenster und summt dabei leise vor sich hin.
Herr Döring geht, Inge räumt die Kasse auf.
An einem Montag im April klebt ein Schreiben an der Eingangstür.
Es ist behördlich, auf festem Papier, mit Stempel und Datum.
Abbruchmaßnahmen seien geplant, steht dort, voraussichtlich ab Juni, der genaue Termin werde noch mitgeteilt.
Marta liest es über Inges Schulter.
„Das haben die schon letztes Jahr gesagt", sagt Marta.
Inge nimmt das Schreiben ab und legt es in die Schublade unter der Kasse.
Dann macht sie weiter, weil um neun die erste Kundin kommt.
Es ist Frau Wenzel, die einen Strauß für ihren Mann zum Geburtstag bestellt hat.
Inge bindet den Strauß, während Marta das Seidenpapier hält.
Sie arbeiten gut zusammen – Marta weiß fast immer, was Inge als Nächstes braucht.
Das ist seit sieben Jahren so.
Im Mai bleibt Marta eines Morgens weg.
Keine Nachricht, kein Anruf – das ist ungewöhnlich, denn Marta ist immer pünktlich.
Inge ruft auf dem Handy an, aber niemand nimmt ab.
Sie öffnet den Laden allein und kocht sich Kaffee in der kleinen Küche hinter dem Lager.
Gegen zehn ruft Martas Tochter an.
Marta hatte in der Nacht einen Schlaganfall – sie liegt auf der Intensivstation in Gera.
Inge sagt: „Ich komme heute Abend."
Sie schließt mittags kurz zu, fährt mit dem Bus ins Krankenhaus und bringt ein kleines Töpfchen Veilchen mit.
Marta liegt im Bett, die Augen halb offen, der linke Mundwinkel hängt nach unten.
Sie kann nicht sprechen, aber sie schaut Inge an.
Inge stellt die Veilchen auf den Nachttisch.
„Der Laden läuft", sagt Inge, obwohl das nicht ganz stimmt.
Sie sitzt eine halbe Stunde neben dem Bett, dann fährt sie zurück.
Am nächsten Morgen öffnet sie wieder allein.
Sie gießt die Tulpen, obwohl die Hälfte schon nicht mehr zu retten ist.
Herr Döring kommt Freitag und kauft seine fünf Nelken, wie immer.
„Und Ihre Kollegin?", fragt er.
„Im Krankenhaus", sagt Inge.
Herr Döring nickt und geht.
Marta stirbt drei Wochen später, an einem Dienstag.
Inge erfährt es über einen Anruf der Tochter, morgens um sieben, kurz bevor sie den Laden aufmacht.
Sie macht den Laden trotzdem auf.
Sie weiß nicht, was sie sonst tun soll.
Sie ordnet die Sträuße im Schaufenster neu, auch wenn niemand kommt.
Ein Jahr später steht der Block noch.
Die Abbruchmaßnahmen wurden mehrmals verschoben, zuletzt wegen Problemen bei einem Nachbarprojekt.
Das Schreiben unter der Kasse ist inzwischen vergilbt.
Inge öffnet den Laden jeden Morgen allein.
Sie hat eine neue Lieferantin gefunden, die freitags kommt statt mittwochs.
Die Blumen sind frischer als vorher.
Herr Döring kommt weiter jeden Freitag mit seinen fünf Nelken.
Manchmal bleibt er etwas länger, und sie reden über den Markt um die Ecke, der jetzt geschlossen hat.
Inge hat sich eine kleine Kaffeemaschine gekauft, für eine Tasse.
Sie stellt sie morgens an, während sie die Blumen gießt.
Die Thermoskanne steht noch auf dem Regal, leer.
Eines Morgens kommt eine junge Frau herein und fragt, ob Inge einen Strauß für eine Beerdigung binden kann.
Inge fragt, was die Person gemocht hat.
Die Frau sagt: „Weiß ich nicht genau – sie mochte es einfach."
Inge nimmt weiße Rosen, Lavendel und ein paar Zweige Eukalyptus.
Sie bindet den Strauß, ohne nachzufragen.
Die junge Frau schaut zu und sagt nichts.
Draußen ist der Himmel bewölkt, wie meistens in Gera im März.
Inge legt das Band um den Strauß und macht einen festen Knoten.
Die junge Frau nimmt die Blumen und geht.
Inge dreht sich um und gießt die nächste Pflanze.
----------------------------------------------
Das Leder hält
Gerhard Wuttke öffnet die Werkstatt täglich um halb acht, auch an Tagen, an denen der Himmel über Halle-Neustadt die Farbe nassen Betons hat.
Das Schloss der Stahltür hat einen Knick, der es erfordert, den Schlüssel gleichzeitig zu drücken und die Klinke nach unten zu ziehen – eine Geste, die er nicht mehr denkt.
Die Schuhmacherwerkstatt liegt im Sockelgeschoss eines elfgeschossigen Plattenbaus an der Magistrale, zwischen einem Nagelstudio ohne Kundschaft und einer Shisha-Bar, die erst abends öffnet.
Kurt ist fast immer schon da, wenn er kommt.
Er sitzt auf dem Drehhocker vor der Schleifmaschine, die Schürze umgebunden, und liest die Zeitung vom Vortag, die er aus dem Spätverkauf nebenan mitbringt.
„Schon kalt heute", sagt Kurt, ohne aufzusehen.
Gerhard hängt den Mantel an den Haken hinter der Tür, wäscht sich die Hände mit dem Spülmittel, das er in Fünf-Liter-Kanistern kauft, weil der Duft von Parfüm ihn stört.
Dann stellt er die Heizung an – ein altes Quarzgerät, das surrt wie eine Kaffeemaschine im Leerlauf.
Der erste Auftrag liegt auf der Werkbank: ein Herrenstiefel, linkes Teil, die Naht an der Spitze gebrochen, der Name des Besitzers auf einem Zettel mit Tesafilm befestigt.
Kurt hat ihn gestern Abend noch angesehen, ohne ein Wort zu sagen.
Gerhard nimmt den Stiefel, dreht ihn im Licht der Arbeitslampe, prüft den Bruch mit dem Daumennagel.
Es ist Maschinennaht – das Garn billig, das Wachs längst ausgehärtet, ein Schaden, für den acht Euro genügen.
Er legt den Stiefel zurück, setzt Wasser auf, wartet.
Kurts Hände zittern seit dem Herbst leicht, wenn er die Feile ansetzt – er sagt nichts dazu, und Gerhard fragt nicht.
Frau Brandt kommt um neun, wie jeden Dienstag seit elf Jahren, mit einem Paar Damenpumps, die nie etwas brauchen.
Die Pumps sind in Ordnung; sie kommt, weil das hier das einzige Geschäft in der Ladenzeile ist, in dem noch mit jemandem geredet werden kann.
„Der Neffe hat angerufen", sagt sie, während Gerhard die Absätze prüft, die er schon vor drei Wochen erneuert hat.
„Was will der?" – „Nichts Besonderes."
Er poliert die Kappen, auch wenn sie keiner Politur bedürfen, weil das die Zeit füllt und weil Frau Brandt es so gewohnt ist.
Sie zahlt fünf Euro, die er nicht verlangt hat, und geht.
An einem Dienstag im März hängt ein Papier an der Scheibe – kein Zettel, sondern ein A4-Blatt mit Amtsstempel, laminiert, mit einem Kabelbinder befestigt.
Gerhard liest es dreimal, dann holt er seine Lesebrille, die er nie aufhat, und liest es ein viertes Mal.
Abbruchvorbereitung ab Mai, voraussichtlich, Abschluss der Maßnahme innerhalb von achtzehn Monaten, Ansprechpartner: eine Nummer, die niemand abnimmt.
Kurt kommt herein, die Tasche noch an der Schulter, liest über Gerhards Schulter mit.
„Na ja", sagt Kurt.
Gerhard nimmt das Blatt ab, faltet es zweimal, legt es unter die Werkbank in die Schublade mit den alten Quittungsblöcken.
Dann macht er Kaffee und bringt Kurt eine Tasse, ohne gefragt zu haben.
Die Kunden kommen wie immer: ein Mann mit Wanderschuhen, deren Sohle sich ablöst, eine Frau mit einem Kinderschuh, den sie selbst repariert hat – falsch.
Gerhard arbeitet, Kurt schleift, die Heizung surrt.
Im April fehlt Kurt zum ersten Mal ohne Ankündigung.
Gerhard öffnet allein, stellt zwei Tassen Wasser auf, schüttet dann eine davon zurück.
Kurt ruft mittags an – Untersuchung im Krankenhaus, nichts Ernstes, er sei morgen wieder da.
Morgen kommt er nicht.
Auch übermorgen nicht.
Gerhard arbeitet durch – er schleift jetzt selbst, obwohl das Knie schmerzt, wenn er lange steht, und die Maschine einen anderen Anpressdruck verlangt, als er gewohnt ist.
Nach einer Woche ruft Kurts Frau an.
Sie sagt: Leber, Stadium drei, Chemotherapie wahrscheinlich, noch keine Gewissheit, man warte auf Befunde.
Gerhard sagt: „Schicken Sie ihm Grüße."
Er legt auf und steht dann eine Weile an der Werkbank, die Hände flach auf der Platte, ohne etwas zu tun.
Dann nimmt er einen Schuh.
Er fährt am Samstag mit der Tram ins Krankenhaus, eine Packung Tabak dabei, weil er nicht weiß, was man mitbringt, und Kurt früher geraucht hat.
Kurt liegt im Bett, dünner als zuletzt, das Gesicht gelblich im Licht der Neonröhre.
„Den Tabak kannst du selber rauchen", sagt Kurt.
Gerhard setzt sich auf den Plastikstuhl neben dem Bett.
Sie reden über die Schleifmaschine, die Kurt immer für zu schwach gehalten hatte, und über den Wanderschuh vom letzten Dienstag, dessen Sohle sich nachgezogen hatte wie Kaugummi.
Dann ist es still.
Auf dem Nachttisch steht ein Glas Wasser und eine Packung Kekse, die niemand geöffnet hat.
Gerhard fährt nach einer Stunde zurück.
Er besucht Kurt noch zweimal – einmal im Mai, einmal im Juli, kurz vor dem Ende.
Im August stirbt Kurt, an einem Donnerstag, an dem in der Werkstatt ein einziger Auftrag liegt: ein Paar Kinderstiefelchen mit gebrochener Naht.
Gerhard macht am nächsten Morgen auf, wie sonst.
Er stellt eine Tasse Wasser auf, schüttet sie weg, macht eine neue.
Der Block steht noch im März des folgenden Jahres.
Die Abbrucharbeiten haben sich verzögert, wegen eines Rechtsstreits zwischen der Wohnungsgesellschaft und einem Investor, dessen Interessen nie ganz klar geworden sind.
Das laminierte Blatt an der Scheibe ist verblichen, die Telefonnummer des Ansprechpartners nicht mehr vergeben.
Gerhard öffnet die Werkstatt allein, dreht den Schlüssel mit dem gewohnten Druck, zieht die Klinke nach unten.
Er hat niemanden eingestellt – ein Aushilfsgesuch an der Scheibe hatte er hängen, bis der Wind es abriss.
Frau Brandt kommt seit Oktober nicht mehr; ihr Sohn hat sie nach Merseburg geholt.
Es gibt neue Kunden, jüngere, die Schuhe mitbringen, die er früher nicht gesehen hätte: Sneakers mit abgelösten Sohlen, Kunstleder, das klebt statt zu halten.
Er repariert sie trotzdem.
An einem Mittwoch im März kommt ein Mann um die Vierzig herein, Wanderstiefel, linke Sohle gespalten, und fragt, ob das noch zu machen sei.
Gerhard nimmt den Stiefel, dreht ihn im Licht.
„Ja", sagt er.
Der Mann schaut sich um – den leeren Hocker, die Schleifmaschine, die zwei Haken an der Wand, von denen nur einer belegt ist.
„Machen Sie das allein?" – „Ja."
Der Mann nickt, lässt den Stiefel da, geht.
Draußen fahren Autos vorbei, der Himmel ist grau, über den Plattenbau zieht eine Krähe in gerader Linie.
Gerhard setzt sich auf den Drehhocker, zieht die Nadel auf, beginnt zu nähen.
Die Schleifmaschine läuft nicht – er braucht sie heute nicht.
Stille, abgesehen vom Leder, das unter der Nadel leicht quietscht.
Er näht weiter.
== 107 ==
Ein Zettel
Gerd Möller ist Wachmann.
Er passt auf eine alte Fabrik auf.
Die Fabrik hat früher Schuhe gemacht.
Jetzt ist die Fabrik leer.
Gerd kommt jeden Abend um acht Uhr.
Er setzt sich in die kleine Loge.
Er schaut auf die Monitore.
Alles ist dunkel und still.
Um zehn Uhr geht Gerd durch den Hof.
Er leuchtet mit der Taschenlampe.
Die Tore sind alle geschlossen.
Hier ist alles in Ordnung.
Dann geht er in die alte Halle.
Die alte Halle ist sehr groß und hoch.
Die Halle ist leer und dunkel.
Gerd hat früher hier gearbeitet.
Er hat Schilder und Zeichen auf Maschinen gemalt.
Das hat ihm gut gefallen.
Jetzt gibt es keine Maschinen mehr.
Gerd geht zurück in die Loge.
Er setzt sich auf den Stuhl.
Dann sieht er etwas auf dem Fensterbrett.
Es ist ein kleines Blatt Papier.
Er nimmt das Blatt und liest.
Da steht: „Hallo Papa. Ich war heute hier. Anna."
Das ist Annas Handschrift.
Anna ist Gerds Tochter.
Sie wohnt jetzt in Berlin.
Sie haben seit einem Jahr nicht gesprochen.
Gerd weiß nicht genau warum.
Er weiß nur, dass er traurig ist.
Er legt den Zettel auf den Tisch.
Er schaut den Zettel lange an.
Wie ist Anna hereingekommen?
Aber das Tor ist doch zu.
Das weiß Gerd leider nicht.
Vielleicht hat Anna noch einen alten Schlüssel.
Gerd schreibt in sein Heft: „Alles in Ordnung."
Aber das stimmt nicht wirklich.
Er trinkt noch einen Kaffee.
Gerd denkt die ganze Zeit an Anna.
Er fragt sich: Hat Anna die alte Halle gesehen?
Hat sie auf dem Hof gestanden?
Das weiß er leider nicht.
Um zwei Uhr geht Gerd noch einmal durch den Hof.
Auf dem Hof ist alles ruhig.
Dann kommt er zurück in die Loge.
Er setzt sich und wartet.
Die Nacht dauert noch lange.
Um sechs Uhr kommt der nächste Wachmann.
„War alles gut?", fragt er.
„Ja, alles gut", sagt Gerd.
Er gibt die Schlüssel ab.
Er zieht langsam die Jacke an.
Er steckt den Zettel in die Tasche.
Gerd geht jetzt nach Hause.
Die Stadt wacht langsam auf.
Ein paar Menschen gehen schon zur Arbeit.
Er geht ganz langsam die Straße entlang.
Er denkt immer noch an den Zettel.
Er denkt: Ich rufe Anna an.
Aber er ist nicht sicher.
Der Zettel bleibt einfach in der Tasche.
Das ist für heute genug, denkt er.
----------------------------------------------
Der Zettel auf dem Stuhl
Horst Bauer ist Wachmann auf dem alten Brauereigelände.
Er macht das schon seit drei Jahren.
Früher hat er hier in der Lagerhalle gearbeitet.
Er hat Kisten gestapelt und Waren kontrolliert.
Jetzt ist er für die Tore und die Kameras zuständig.
Das ist nicht sein Traumjob, aber es ist ein Job.
Siegfried macht immer die Tagschicht.
Um 20 Uhr kommt Horst an, und Siegfried wartet schon auf ihn.
„Heute war nichts", sagt Siegfried.
„Gut", sagt Horst.
Siegfried nimmt seine Tasche und geht.
Die Tür fällt hinter ihm ins Schloss.
Horst will sich auf seinen Stuhl setzen.
Aber auf dem Stuhl liegt ein kleines Stück Papier.
Er hebt es auf und liest.
Da steht: „Hallo Papa. Ich war kurz hier. Tut mir leid. – Klaus."
Das ist die Handschrift von Klaus.
Klaus ist sein Sohn, und er wohnt in Frankfurt.
Sie haben sich seit zwei Jahren nicht getroffen.
Sie haben sich gestritten, denn Klaus wollte nicht mehr nach Erfurt kommen.
Seitdem haben sie kaum noch telefoniert.
Horst faltet den Zettel zusammen und steckt ihn in die Jackentasche.
Er schaut auf die Monitore, aber alles ist ruhig.
Dann geht er raus und kontrolliert das Gelände.
Alle drei Tore sind geschlossen und in Ordnung.
Er geht durch die alte Brauereihalle.
Die Halle ist groß und dunkel.
Es riecht noch ein bisschen nach Hopfen und altem Holz.
Horst hat diesen Geruch immer gemocht.
Früher hat man hier gutes Bier gebraut.
Dann ist die Brauerei geschlossen worden, und alles hat sich verändert.
Horst geht zurück in die Loge.
Er schreibt ins Logbuch: „Tor 1, 2, 3: kontrolliert, kein Befund."
Er trinkt Kaffee und hört Radio.
Die Musik ist leise, und auf dem Hof ist es ganz still.
In der Stille denkt er immer wieder an Klaus.
Hat Klaus durch die Fenster der Halle geschaut?
Hat er die alten Maschinen gesucht, die nicht mehr da sind?
Warum hat er nichts gesagt und ist einfach wieder gegangen?
Das kann Horst sich einfach nicht erklären.
Um zwei Uhr macht Horst noch einen Rundgang.
Auf dem ganzen Gelände ist alles ruhig und dunkel.
Er kommt zurück und setzt sich wieder hin.
Er schaut auf die Uhr: Es ist fast halb drei.
Die Nacht dauert noch lange.
Um halb sieben kommt Falk für die Frühschicht.
Falk ist jung und kommt immer mit dem Fahrrad.
„War alles gut?", fragt er.
„Ja, alles gut", sagt Horst.
Er gibt Falk die Schlüssel ab und geht dann.
Draußen ist es inzwischen hell und frisch.
Horst geht zur Straßenbahnhaltestelle.
Er greift in die Tasche und fühlt den Zettel.
Er lässt den Zettel einfach in der Tasche.
Die Straßenbahn kommt, und Horst steigt ein.
Er setzt sich ans Fenster und sieht auf die Häuser.
Er fragt sich, ob er Klaus anrufen soll.
Er hat seine Nummer noch im Handy.
Vielleicht ruft er Klaus heute Abend an.
Vielleicht macht er das aber auch nicht.
Der Zettel bleibt in der Tasche.
----------------------------------------------
Das Blatt im Schaltkasten
Werner Krause kam zehn Minuten früher als nötig zur Schicht.
Er hängte die Jacke an den Haken und schaute auf die Monitore.
Dieter saß noch in der Loge und hatte die leere Kaffeetasse vor sich.
„Heute war nichts los", sagte Dieter und gähnte laut.
Werner nickte und zählte die Schlüssel auf dem Brett.
Alle zwölf Schlüssel hingen an ihrem Platz.
Dieter stand auf, zog seinen Mantel an und griff nach seiner Tasche.
„Bis morgen", sagte er, ohne sich umzudrehen.
Werner nickte noch einmal, und Dieter ging ohne weiteres Wort.
Dann war Werner allein mit dem gleichmäßigen Summen der Leuchtstoffröhre.
Die Baumwollspinnerei in Chemnitz stand seit neun Jahren leer.
Werner hatte hier zwölf Jahre als Elektriker gearbeitet, bis das Werk schloss.
Jetzt arbeitete er für eine Sicherheitsfirma aus Köln, die das Gelände bewachte.
Er kannte jeden Schaltkasten und jede kaputte Leitung noch auswendig.
Das war vielleicht der Grund, warum er damals den Job bekommen hatte.
Die Firma zahlte neun Euro die Stunde, und das war nicht viel.
Um 22:00 Uhr machte Werner den ersten Rundgang.
Er nahm die Taschenlampe und ging durch Halle 1.
Die Fenster waren mit Draht gesichert, und der Boden war staubig.
Dann betrat er Halle 2, wo früher sein Arbeitsplatz gewesen war.
Dort standen nur noch leere Paletten und ein alter Handwagen.
Er leuchtete mit der Taschenlampe an die Wände und an die Decke.
Dann ging er zum Schaltkasten an der Nordwand.
Das machte er jeden Abend, obwohl seit Jahren kein Strom mehr floss.
Werner öffnete die Schalttafel und überprüfte die Sicherungen.
Dann sah er zwischen zwei Sicherungshaltern ein weißes, gefaltetes Blatt.
Er zog es heraus und faltete es auf.
Die Schrift war klein, mit dem großen „I", das immer etwas nach links kippte.
Da stand: „Ich war noch einmal hier. Es war schön früher, oder? – I."
Er kannte diese Handschrift seit mehr als vierzig Jahren.
Es war die Handschrift seiner Schwester Inge.
Inge wohnte in Dortmund, wo sie seit der Wende in einer Versicherung arbeitete.
Sie hatten sich vor einigen Jahren gestritten und seitdem kaum gesprochen.
Werner wusste nicht mehr genau, worüber sie damals gestritten hatten.
Er schaute sich um, aber der Hof draußen war leer.
Auf keiner der Kameras war eine Bewegung zu sehen.
Er faltete den Zettel zusammen und steckte ihn in die Brusttasche.
Dann schloss er die Schalttafel langsam wieder und trat einen Schritt zurück.
Im Logbuch schrieb er: „Halle 2 kontrolliert. Kein Befund."
Das stimmte nicht ganz, aber er ließ es so stehen.
Er machte den zweiten Rundgang um Mitternacht und den dritten um 04:30 Uhr.
Werner trank kalten Kaffee und aß ein trockenes Brot dabei.
Er dachte an Inge, aber er kam zu keinem Schluss.
Wie hatte sie das Gelände betreten können, wenn das Tor doch abgeschlossen war?
Wahrscheinlich kannte sie noch den alten Weg durch den Hinterhof.
Das war der Weg, den früher alle Mitarbeiter des Werkes kannten.
Um 06:00 Uhr kam ein junger Mann für die Frühschicht.
Werner kannte ihn kaum und mochte ihn nicht besonders.
„War alles ruhig?", fragte der junge Mann.
„Ja", sagte Werner. „Alles ruhig."
Er gab die Schlüssel ab, unterschrieb die Übergabe und zog die Jacke an.
Dann ging er durch das Haupttor nach draußen.
Die Morgenluft war kalt und roch nach feuchtem Asphalt.
Werner ging zur Bushaltestelle, die dreihundert Meter entfernt war.
Er griff in die Brusttasche und spürte den Zettel, holte ihn aber nicht heraus.
Er dachte daran, ob er Inge anrufen sollte.
Er wusste nicht, was er ihr sagen würde, wenn sie sich meldete.
Schließlich kam der Bus, und Werner stieg ein.
Er setzte sich ans Fenster und sah auf die Stadt.
Manche Häuser waren frisch renoviert, manche noch wie früher.
Werner ließ den Zettel in der Brusttasche, und das fühlte sich richtig an.
So fuhr er durch die Stadt, und er dachte erst mal nicht weiter darüber nach.
----------------------------------------------
Was man nicht meldet
Rainer Schulz kommt um Viertel nach sieben zur Abendschicht.
Günter sitzt in der Loge, das Jackett über den Stuhl gehängt, und trinkt Tee aus einem zerbeulten Becher.
„Na?", fragt Günter.
„Na", sagt Rainer.
Das reicht als Übergabe.
Günter zieht das Jackett an, nimmt seine Tasche vom Haken und geht, ohne die Tür richtig zu schließen.
Der Wind drückt sie zu.
Rainer setzt sich, schiebt die Klappe des Logbuchs auf und trägt seinen Namen ein.
Die Fabrik wurde vor neun Jahren stillgelegt.
Früher haben hier sechshundert Leute Landmaschinen gebaut – Mähdrescher und Drillmaschinen für die Großbetriebe der DDR.
Rainer war Schweißer, Halle 3, sechs Jahre lang.
Jetzt bewacht er das Gelände für fünfzig Euro die Nacht, und das ist mehr, als er mit seinem letzten Job verdient hat.
Um 21:00 macht er den ersten Rundgang.
Er nimmt die Taschenlampe, obwohl die Außenleuchten brennen, weil er so etwas wie eine Routine braucht.
Tor A ist zu, Tor B ist zu, Tor C hängt schief in den Angeln, seit ein Lkw es vor zwei Jahren gestreift hat.
Die Sicherheitsfirma hat einen Reparaturauftrag gestellt, aber bisher ist niemand gekommen.
Rainer schüttelt kurz den Kopf und geht weiter.
Hinter Halle 2 steht noch der alte Kompressor auf einem Betonsockel, rostig, mit einem Warnschild, das sich halb abgelöst hat.
Rainer bleibt kurz stehen, nicht weil er den Kompressor interessant findet, sondern weil er an dieser Stelle immer stehenbleibt.
Er kann nicht erklären warum.
Vielleicht ist es der Geruch nach Öl und nassem Stein, der ihn jedes Mal kurz zurückwirft.
Er geht weiter, schreibt um 21:24 in das Logbuch: „Rundgang 1 abgeschlossen, kein Befund."
Dann gießt er sich Kaffee ein, stellt das Radio leiser und wartet auf die zweite Runde.
Kurz vor Mitternacht geht Rainer noch einmal raus.
Es hat angefangen zu regnen, leicht, und die Pfützen auf dem Hof leuchten schwach im Scheinwerferlicht.
Er geht zum Dienstwagen, einem alten Golf der Firma, der am Nebeneingang parkt, um den Kilometerstand zu notieren.
Da sieht er etwas unter dem Scheibenwischer: ein zusammengefaltetes Stück Papier.
Rainer holt es raus, faltet es auf.
Die Schrift ist klein und ordentlich, wie immer: „War kurz vorbei. Wollte mal schauen. – P."
Peter.
Sein Bruder Peter, der 1991 nach Stuttgart gegangen ist und seitdem ein anderes Leben führt.
Sie telefonieren vielleicht zweimal im Jahr, meistens an Geburtstagen.
Die Stille, die nach dem letzten Streit Einzug gehalten hatte, war seither nie mehr ganz weggegangen.
Rainer schaut in den Hof.
Keine Bewegung, keine Kamera hat angeschlagen, kein Alarm ist losgegangen.
Er dreht das Blatt um – auf der Rückseite steht nichts.
Er steckt es in seine Jackentasche.
Im Logbuch schreibt er: „Rundgang 2, 23:58 – kein Befund."
Er weiß, dass das nicht stimmt.
Aber er weiß auch nicht, was er sonst schreiben sollte.
Die Nacht ist lang danach.
Rainer trinkt zu viel Kaffee, schläft nicht, schaut auf die Kameras, auf denen nichts passiert.
Er fragt sich, ob Peter durch das Haupttor gekommen ist oder über den Zaun an der Südseite, wo die Matten schon durchgerostet sind.
Er fragt sich, ob Peter die Hallen von innen gesehen hat oder nur durch die Fenster geschaut hat.
Dann fragt er sich, warum er das alles überhaupt fragt.
Um 06:30 kommt Marcus für die Frühschicht.
Marcus ist achtundzwanzig, immer gut gelaunt, immer mit Kopfhörern um den Hals.
„Ruhige Nacht?", fragt er.
„Wie immer", sagt Rainer.
Er gibt die Schlüssel ab, unterschreibt die Übergabe und geht.
Draußen ist es hell, obwohl noch früh.
Die Luft riecht nach Regen und Gras.
Rainer geht zum Bus, die Hände in den Taschen.
Die eine Hand umschließt den Zettel, ohne ihn zu zerdrücken.
Er denkt daran, dass Peter extra gekommen sein muss.
Stuttgart ist weit.
Wahrscheinlich war er wegen irgendetwas in Rostock und hat einen Umweg gemacht.
Aber er hat auch nicht geklingelt und nichts gesagt.
Er hat einen Zettel hinterlassen.
Der Bus kommt, Rainer steigt ein.
Er setzt sich ans Fenster und sieht auf die Stadt.
Die Wohnblöcke, die Brachen, der graue Morgen – er kennt das alles.
Rainer ist nicht sicher, ob er Peter anrufen wird.
Wahrscheinlich nicht.
Aber der Zettel bleibt in der Tasche.
Das ist für jetzt genug.
----------------------------------------------
Die Handschrift des Schweigens
Karl-Heinz Posselt, neunundfünfzig Jahre alt, ehemaliger Dreher im VEB Chemiefaserwerk Schwarza, betritt die Pförtnerloge um 21:48 Uhr.
Egon sitzt noch da, die leere Thermoskanne neben sich, das Gesicht gelb im Monitorlicht.
„Heute war nichts", sagt Egon, ohne aufzublicken.
Karl-Heinz hängt die Jacke an den Haken, der schon seit Jahren schief sitzt, und antwortet nicht.
Die Monitore zeigen acht Bilder: leere Hallen, leere Höfe, ein paar Pfützen auf dem Asphalt, der seit der Wende niemand mehr erneuert hat.
Egon steht auf, knöpft seinen Mantel zu, grüßt mit einem Nicken und geht.
Das Surren der Leuchtstoffröhre ist das einzige Geräusch, das bleibt.
Karl-Heinz setzt sich, schiebt das Kontrollbuch zu sich hin, trägt Datum und Uhrzeit ein.
Er hat in dreizehn Jahren nie eine Zeile ausgelassen.
Das Nichtausfüllen eines Bogens wäre ihm vorgekommen wie das Eingeständnis, dass hier gar nichts mehr zu bewachen sei.
Das Radio läuft auf MDR Thüringen, irgendein Schlager aus den Siebzigern, den er nicht mehr benennen kann.
Er dreht es leiser, nicht aus.
Um 23:15 beginnt er den ersten Rundgang.
Die Taschenlampe – dieselbe seit fünf Jahren, nur die Batterie tauscht er einmal im Monat – leuchtet auf das nasse Pflaster.
Tor eins: geschlossen, Schloss in Ordnung.
Tor zwei: geschlossen.
Tor drei: die Kette hängt locker, wie immer, seit das Schloss im März klemmt und die Firma noch keinen Techniker geschickt hat.
Karl-Heinz zieht die Kette straffer, um wenigstens hier Ordnung zu halten, und prüft sie zweimal.
An der Außenwand der Halle B steht noch die Inschrift in verblassendem Rot: „Für Qualität – für den Plan – für uns alle."
Er liest sie nicht mehr; er weiß, was da steht.
Halle C ist sein Ziel.
Dort stand seine Drehbank – Standort 17, dritte Reihe von links, zweites Fenster –, bis man die Maschinen 1994 abtransportiert hat.
Heute stehen dort Europaletten mit Dämmplatten, die seit zwei Jahren niemand abgeholt hat.
Karl-Heinz setzt sich auf eine der Paletten, die er selbst so hingestellt hat, dass sie seine Knie tragen.
Die Taschenlampe legt er auf den Boden, den Strahl an die Decke gerichtet, wo früher die Schichttafel hing.
Er sitzt zwölf Minuten.
Er zählt nicht, er weiß es trotzdem.
Auf dem Rückweg zur Loge – es ist kurz nach Mitternacht, die Luft riecht nach feuchtem Beton und irgendwas Verbranntem aus dem Nachbargelände – bleibt er am zweiten Tor stehen.
In der Kette hängt etwas, das vorhin nicht da war: ein zusammengefalteter Zettel, in die Kettenlasche gesteckt.
Karl-Heinz faltet ihn auf.
Kugelschreiber, blaue Tinte, wenige Wörter: „Ich war hier. Hab mich umgeschaut. Macht das Tor mal zu. – M."
Das weite, fast geschwungene „M" kennt er seit dreißig Jahren.
Es ist Maikes Handschrift.
Er hatte nicht gedacht, dass sie wissen würde, wo das Werk liegt – und erst recht nicht, dass sie kommen würde.
Maike lebt in Köln, ist Logistikerin bei einem Pharmaunternehmen, hat zwei Kinder, die Karl-Heinz noch nie gesehen hat.
Der Bruch, der beim Begräbnis der Mutter entstanden war, wurde danach von keiner Seite mehr berührt.
Karl-Heinz schaut sich um: der Hof ist leer, die Kameras zeigen keine Bewegung.
Er faltet den Zettel wieder zusammen, zweimal, dann noch einmal.
Er schiebt ihn in die Innentasche seiner Uniformjacke, neben den Ausweis.
Im Logbuch steht um 00:31: „Rundgang abgeschlossen. Kein Befund."
Das stimmt nicht ganz.
Aber er hat keine Rubrik für das, was er gefunden hat.
Die Nacht geht weiter: zweiter Rundgang um 03:00, dritter um 05:30.
Karl-Heinz trinkt den Kaffee aus der Thermoskanne, der mittlerweile kalt und bitter ist, und isst zwei Scheiben Brot, die er morgens in Frischhaltefolie gewickelt hat.
Er denkt nicht an Maike.
Er denkt an sie so, wie man an einen Schmerz denkt, den man schon lange kennt: man weiß, dass er da ist, ohne ihn jeden Moment zu spüren.
Um 06:03 kommt die Frühschicht – Tobias, dreiundzwanzig, Glatze, Ohrring, immer zu spät und immer mit dem Handy in der Hand.
„Alles klar?", fragt Tobias, ohne die Augen vom Display zu heben.
„Klar", sagt Karl-Heinz.
Er übergibt die Schlüssel, die Kontrollliste, den Stift.
Tobias unterschreibt, ohne zu lesen.
Karl-Heinz zieht die Jacke an, die schwer ist wegen des Zettels, obwohl ein Zettel natürlich kein Gewicht hat.
Er geht durch das Haupttor, dreht sich noch einmal um.
Die Hallen stehen still im Morgenlicht, das jetzt gerade über die Dächer kommt.
Tor zwei ist geschlossen, die Kette hängt richtig.
Die Bushaltestelle ist dreihundert Meter entfernt.
Der Bus kommt in siebzehn Minuten, das weiß er auswendig.
Karl-Heinz steht an der Haltestelle, die Hände in den Jackentaschen, und fasst den Zettel nicht an.
Er denkt daran, was Maike gesehen haben könnte, als sie durch das Gelände gegangen ist.
Ob sie die Inschrift an Halle B gelesen hat.
Ob sie an Standort 17 gestanden hat.
Ob sie gewusst hat, dass er jetzt hier Wache schiebt, auf dem Gelände, das einmal sein Leben gewesen ist.
Der Bus kommt.
Karl-Heinz steigt ein, setzt sich ans Fenster.
Die Platte, in der er wohnt, ist siebenundzwanzig Minuten entfernt.
Er schläft nicht im Bus, obwohl er müde ist.
Er schaut auf die Stadt, die beim Fahren nicht schöner wird.
Der Zettel liegt in der Jacke.
Er wird ihn nicht rausholen.
Er wird ihn auch nicht wegwerfen.
Das ist alles, was er tun kann, und er weiß, dass es genug ist.
== 108 ==
Hertas Bank
Herta ist 72 Jahre alt.
Sie wohnt in einer kleinen Wohnung in Magdeburg.
Jeden Samstag geht sie in den Park.
Der Park liegt fünf Minuten von ihrer Wohnung entfernt.
Dort gibt es einen Teich.
Herta füttert die Enten.
Sie bringt immer altes Brot mit.
Die Bank am Teich ist ihr Platz.
Sie sitzt dort seit vielen Jahren.
Es ist eine Holzbank unter einem großen Baum.
Herta setzt sich immer auf die linke Seite.
An einem Samstag im April ist jemand auf der Bank.
Ein Mann sitzt dort mit einem kleinen Jungen.
Herta bleibt stehen.
Der Mann schaut sie an und lächelt.
„Guten Morgen", sagt er.
„Guten Morgen", sagt Herta.
Sie schaut auf die Bank.
Es ist kein Platz mehr frei.
Sie sagt nichts.
Sie geht weiter.
Am anderen Ende des Teiches ist ein freier Platz.
Sie setzt sich auf eine Mauer.
Die Mauer ist kalt und hart.
Herta wirft das Brot ins Wasser.
Die Enten kommen sofort.
Der Junge sieht die Enten und ruft.
Er hat auch Brot dabei.
Er wirft es weit ins Wasser.
Die Enten schwimmen zu ihm.
Herta schaut hinüber.
Der Junge lacht.
Der Mann sagt: „Nicht so viel auf einmal!"
Herta schaut wieder auf ihr Wasser.
Dort sind noch zwei Enten.
Sie wirft das letzte Brot.
Dann steht sie auf.
Sie geht nach Hause.
Zu Hause zieht sie die Jacke aus.
Sie setzt sich an den Küchentisch.
Sie macht sich Tee.
Sie wartet, bis das Wasser heiß ist.
Dann trinkt sie.
Durch das Fenster sieht sie einen Baum.
Die Blätter sind noch klein.
Es ist still in der Wohnung.
Sie denkt an die Bank.
Sie denkt: „Das ist meine Bank."
Dann trinkt sie den Tee aus.
Sie steht auf und spült die Tasse.
Am nächsten Samstag geht Herta wieder in den Park.
Sie hat Brot dabei.
Es ist ein schöner Morgen.
Die Bank ist frei.
Herta setzt sich auf die linke Seite.
Das Wasser ist ruhig.
Zwei Enten schwimmen nah am Ufer.
Herta wirft ihnen Brot.
Die Enten kommen näher.
Herta sitzt da und schaut.
Es ist wie immer.
Sie denkt kurz an den Jungen.
Der Junge ist letzte Woche hier gewesen.
Herta weiß nicht, ob er wiederkommt.
Sie wirft noch etwas Brot.
Die Enten fressen.
Die Sonne ist warm.
Herta sitzt auf ihrer Bank.
----------------------------------------------
Ernsts Tisch
Ernst Fischer ist 67 Jahre alt und seit drei Jahren in Rente.
Jeden Morgen geht er um acht Uhr zur Bäckerei Huber.
Er kauft zwei Brötchen und einen kleinen Kaffee.
Dann setzt er sich an den kleinen Tisch am Fenster.
Er sitzt immer links, weil er von da die Straße sehen kann.
Das macht er seit fünf Jahren so.
Die Verkäuferin heißt Sandra.
„Wie immer?", fragt Sandra, und Ernst sagt: „Ja, bitte."
Das ist jeden Morgen gleich.
Um acht Uhr zwanzig geht er wieder nach Hause.
Dann liest er die Zeitung.
Das ist sein Morgen.
An einem Montag im März ist der Tisch am Fenster besetzt.
Eine junge Frau sitzt dort mit einem Kinderwagen.
Das Kind schläft.
Ernst bleibt stehen und schaut.
„Entschuldigung", sagt er, aber er sagt nichts weiter.
Er setzt sich an den anderen Tisch, in der Mitte des Raumes.
Von dort kann er die Straße nicht sehen.
Er sieht nur die anderen Gäste und die Theke.
Er isst das erste Brötchen.
Der Kaffee ist heiß und gut.
Aber er schaut die ganze Zeit zur jungen Frau hinüber.
Sie schaut auf ihr Telefon.
Das Kind schläft weiter.
Der Kinderwagen ist groß und steht nah an der Wand.
Ernst isst das zweite Brötchen.
Er trinkt den Kaffee aus.
Er steht auf, zieht die Jacke an und geht.
Sandra schaut ihm nach.
Zu Hause räumt Ernst seine Jacke auf.
Er setzt sich in den Sessel im Wohnzimmer.
Er nimmt die Zeitung.
Aber er fängt nicht an zu lesen.
Er schaut aus dem Fenster.
Die Straße ist ruhig.
Er denkt an den Tisch in der Bäckerei.
Er denkt nicht lange, aber er denkt daran.
Er legt die Zeitung auf den Tisch.
Dann geht er in die Küche und macht sich einen Tee.
Er trinkt ihn am Küchentisch.
Das macht er sonst nicht.
Später nimmt er die Zeitung wieder und liest.
Aber es dauert länger als sonst.
Am nächsten Morgen geht Ernst um acht Uhr zur Bäckerei Huber.
Es ist kalt draußen.
Er trägt seinen langen Mantel.
„Wie immer?", fragt Sandra.
„Ja, bitte", sagt Ernst.
Er zahlt und dreht sich um.
Der Tisch am Fenster ist frei.
Ernst setzt sich hin, links, wie immer.
Er sieht die Straße.
Ein Auto fährt vorbei.
Dann kommt eine Frau mit einem Hund.
Die Bäckerei riecht nach frischem Brot.
Sandra wischt die Theke ab.
Ernst isst das erste Brötchen.
Dann das zweite.
Er trinkt den Kaffee.
Alles ist wie immer.
Und trotzdem ist etwas nicht ganz gleich.
Er weiß nicht, was es ist.
Er trinkt den letzten Schluck.
Er steht auf und geht raus.
Draußen ist es kalt.
Er geht nach Hause.
----------------------------------------------
Kardamom
Renate Vogt war seit zwei Jahren in Rente.
Den Dienstagmarkt in Gotha hatte sie nie verpasst.
Nicht im Winter, nicht im Sommer, nicht einmal als ihr Knie sie zwang, langsamer zu gehen.
Sie kaufte immer das Gleiche: Käse bei Herrn Feldmann, Brot bei der Bäckerei Krohn, Eier beim Hof Lemmert.
Die Reihenfolge war wichtig.
Sie hatte das nie jemandem erklärt, aber sie wusste es.
Der Markt öffnete um acht Uhr, und Renate stand um Viertel vor acht am Eingang.
Sie trug eine geflochtene Tasche aus Leinen und eine kleinere Plastiktüte für die Eier.
Sie kannte jeden Händler mit Namen.
Herr Feldmann hatte ihr einmal erzählt, dass er den Stand seit dreißig Jahren hatte.
Das gefiel ihr.
An einem Dienstag im April war der Marktplatz anders als sonst.
Zwischen dem Käsestand von Herrn Feldmann und der Bäckerei Krohn stand ein neuer Stand.
Renate blieb stehen.
Der Stand war bunt dekoriert, mit kleinen Holzschildern und vielen Gläsern.
Ein junger Mann mit einem roten Schal lächelte sie an.
„Guten Morgen! Darf ich Ihnen etwas anbieten?"
Renate antwortete nicht sofort.
Sie schaute auf die Gläser.
Es gab Gewürze, Öle, getrocknete Kräuter – Dinge, die sie nicht kannte.
„Ich suche den Käsestand", sagte sie schließlich.
„Herr Feldmann steht jetzt da drüben", sagte der junge Mann und zeigte nach links.
„Er ist ein bisschen gerückt, wegen uns."
Renate sah in die Richtung.
Tatsächlich: Herr Feldmann stand fünf Meter weiter links.
Das hatte er noch nie getan.
Renate stand noch einen Moment und schaute.
Hinter ihr wollte jemand vorbeigehen.
Sie trat zur Seite.
Aber die Reihenfolge stimmte nicht mehr.
Sie kaufte zuerst die Eier, dann das Brot, und suchte erst danach Herrn Feldmann.
Sie wusste, dass das keine wichtige Sache war.
Trotzdem störte es sie.
„Zwei Scheiben Bergkäse, wie immer?", fragte Herr Feldmann.
„Ja, bitte", sagte Renate.
„Der neue Stand macht uns etwas Mühe", sagte Herr Feldmann und lächelte dabei.
Renate antwortete nicht darauf.
Sie bezahlte und ging nach Hause.
Auf dem Rückweg kam sie noch einmal am neuen Stand vorbei.
Der junge Mann war gerade dabei, ein Glas zu öffnen.
„Möchten Sie etwas probieren?", fragte er.
„Nein, danke", sagte Renate.
Zu Hause räumte sie alles in den Kühlschrank.
Käse links, Eier rechts, Butter vorne.
Das war immer so gewesen.
Sie kochte sich einen Tee und setzte sich an den Tisch.
Durch das Fenster konnte sie die Straße sehen.
Es war noch früh.
Sie trank den Tee und dachte nicht an den neuen Stand.
Oder sie versuchte es.
Der Tee schmeckte wie immer.
Aber sie saß länger als sonst am Tisch.
Am nächsten Dienstag stand Renate wieder um Viertel vor acht am Markteingang.
Es war kühl, und sie trug ihre graue Jacke.
Sie wusste jetzt, dass Herr Feldmann fünf Meter weiter links stand.
Sie wusste auch, dass der neue Stand zwischen den alten Ständen war.
Sie kaufte Käse, dann Brot, dann Eier – diesmal in der richtigen Reihenfolge.
Auf dem Rückweg kam sie an dem neuen Stand vorbei.
Es roch nach Kardamom.
„Schönen Tag noch", sagte der junge Mann.
Renate nickte kurz.
Dann ging sie weiter.
Zu Hause räumte sie alles ein: Käse links, Eier rechts, Butter vorne.
Die Reihenfolge war wieder richtig.
Sie setzte sich an den Tisch und kochte Tee.
Aber irgendwas war anders, und sie wusste nicht genau, was es war.
Sie saß da und schaute aus dem Fenster.
Draußen war der Dienstag wie immer.
Die Straße war ruhig.
Sie trank den Tee.
----------------------------------------------
Auf beiden Seiten
Herbert Zollinger hatte die Heckenschere seit achtzehn Jahren, und er hatte sie noch nie reparieren müssen.
Das Gerät lief zuverlässig, wie alles, was er besaß.
Jeden dritten Samstag im Monat stand er um neun Uhr an der Thuja-Hecke, die sein Grundstück von der Straße trennte.
Er schnitt sie auf genau einen Meter zwanzig, und er kontrollierte das Ergebnis mit einem Metallmaßband.
Die Hecke war gleichmäßig, seit er das Reihenhaus vor sieben Jahren gekauft hatte.
Er lebte allein, seit seine Frau vor vier Jahren ausgezogen war.
Das störte ihn weniger, als er erwartet hatte.
Die Ordnung im Garten half.
Im Herbst zogen neue Nachbarn ein.
Der Mann hieß Marco, war Ende dreißig und arbeitete als Architekt in der Stadt.
Er kam am ersten Tag mit einer Flasche Rotwein an die Tür.
Herbert bedankte sich, stellte die Flasche ins Regal und öffnete sie nie.
Marco war laut, nicht unangenehm, aber laut.
Er hörte am Wochenende Musik im Garten, fuhr ein Fahrrad ohne Schutzbleche und schnitt den Rasen, wann es ihm passte.
Herbert notierte das nicht, aber er bemerkte es.
Im März schnitt Marco zum ersten Mal die Hecke auf seiner Seite.
Herbert sah es vom Esszimmerfenster aus, während er seinen Morgenkaffee trank.
Marco arbeitete schnell, aber ohne System.
Er schnitt einmal von links nach rechts, dann von oben nach unten, und das Ergebnis war ungleichmäßig.
Herbert schätzte die Höhe auf etwa einen Meter fünfzehn.
Er stellte die Kaffeetasse auf den Tisch und ging in den Keller.
Dort lag eine alte Kladde, in der er wichtige Dinge aufschrieb.
Er schrieb: „März, Marco schneidet Hecke, Höhe ca. 115 cm, unregelmäßig."
Dann legte er die Kladde zurück und ging wieder nach oben.
Er sagte Marco nichts.
Zwei Wochen später kam Marco an die Grundstücksgrenze.
Er trug eine Kaffeetasse und lächelte.
„Herr Zollinger, ich wollte fragen, ob wir eine gemeinsame Höhe festlegen sollten."
Herbert antwortete: „Die Höhe ist ein Meter zwanzig. Das war immer so."
Marco nickte, aber er wirkte nicht überzeugt.
„Ich finde ein Meter fünfzehn schöner", sagte er, „die Hecke sieht offener aus."
Herbert erwiderte nichts darauf.
Er wartete, bis Marco seine Tasse geleert hatte und gegangen war.
Dann ging Herbert ins Haus.
Am nächsten Samstag schnitt Marco seine Seite auf einen Meter fünfzehn – diesmal gerade und sauber.
Herbert stand am Fenster und sah zu.
Er holte sein Maßband und maß nach: fünf Zentimeter Unterschied auf der ganzen Länge.
Das war kein Fehler, das war eine Entscheidung.
Herbert legte das Maßband auf die Fensterbank und blieb stehen.
Er überlegte lange, ob er seine Seite nachschneiden sollte.
Er tat es nicht.
In den folgenden Wochen wuchs die Hecke auf Marcos Seite schneller, weil sie tiefer geschnitten worden war.
Herbert maß jeden Montag nach und schrieb die Werte in die Kladde.
Marcos Seite stand inzwischen bei einem Meter achtzehn, seine eigene noch bei einem Meter zwanzig.
Er schnitt nicht früher als geplant.
Er wartete den dritten Samstag ab.
An diesem Samstag stand Herbert um neun Uhr mit der Heckenschere am Grundstück.
Der Morgen war klar und kühl, und er konnte seinen Atem sehen.
Er legte die Schneide an die Heckenkrone und schaltete das Gerät ein.
Der Motor summte laut in der Stille.
Herbert schnitt zwei Meter, dann hörte er auf.
Er schaltete die Schere aus und stand einfach da.
Er dachte an Marco, der jetzt wahrscheinlich noch schlief.
Er dachte an die Kladde im Keller, in der er Dinge aufschrieb, die niemanden interessierten.
Er dachte daran, dass die Hecke auf beiden Seiten wachsen würde, egal was er tat.
Das war keine neue Erkenntnis.
Aber heute störte es ihn anders als sonst.
Er legte die Heckenschere auf den Rasen.
Er setzte sich auf die alte Holzbank neben dem Schuppen, die er selbst gebaut hatte und seitdem kaum benutzte.
Ein Vogel saß auf der Hecke und sang.
Herbert hörte zu.
Er blieb sitzen, bis Marco um halb zehn die Terrassentür öffnete und ihn sah.
Marco winkte.
Herbert hob kurz die Hand.
Dann stand er auf, räumte die Schere in den Schuppen und ging ins Haus.
Er frühstückte, spülte das Geschirr, stellte es ins Regal.
Nachmittags öffnete er die Kladde im Keller.
Er las die letzte Zeile: „März, Marco schneidet Hecke, Höhe ca. 115 cm."
Er schloss die Kladde, ohne etwas zu schreiben.
Draußen stand die Hecke, auf beiden Seiten.
Die eine war auf einem Meter zwanzig.
Die andere war inzwischen wieder nachgewachsen.
Herbert stellte die Kladde zurück ins Regal.
Er wusste nicht, ob er am nächsten Samstag schneiden würde.
Er wusste nur, dass er es könnte.
----------------------------------------------
Das Maß der Dinge
Walter Egger hatte die Grundstücksgrenze neu eingemessen, nachdem der Katasterplan vom Bauamt eingetroffen war – nicht weil er Zweifel hegte, sondern weil Genauigkeit, wie er es verstand, keiner Begründung bedurfte.
Der Meter vor der Buchenhecke gehörte ihm.
Das wusste er, und er war der Einzige, dem es wichtig war.
Siebenundzwanzig Jahre lang hatte er im Vermessungsamt Katasterkarten gezeichnet, Grenzpunkte gesetzt, Abstände protokolliert – Zahlen, die kein Mensch je anfocht.
Jetzt, mit fünfundsechzig, war die Hecke das Einzige, das noch gemessen werden wollte.
Sie wuchs auf 1,25 Meter, wenn er nicht eingriff – ein Ergebnis, das er durch Beobachtung über drei Vegetationsperioden belegt hatte.
Er schnitt sie auf 1,10, stets am zweiten Samstag im Monat, mit der elektrischen Schere, deren Klinge er im April beim Schleifservice in der Industriestraße abgab.
Das Ergebnis war gleichmäßig wie eine gefräste Fläche.
Im vergangenen Oktober hatten neue Nachbarn eingezogen.
Kai – so stellte er sich vor, ohne den Familiennamen zu nennen – arbeitete in einer Firma, die Anwendungen für Mobiltelefone entwickelte.
Das hatte er Walter beim ersten Gespräch erklärt, als wäre es eine Entschuldigung oder eine Empfehlung.
Walters Frau Hilde war vor drei Jahren gestorben, und seitdem hatte er sich angewöhnt, Gespräche mit Fremden in weniger als zwei Minuten zu beenden.
Kai schien das nicht zu merken.
Er grüßte täglich, blieb manchmal an der Hecke stehen, fragte nach dem Wetter oder dem Rasendünger.
Walter antwortete, was gefragt war.
Mehr nicht.
Ende März – die Hecke stand bei 1,08, noch unter dem Sollmaß – sah Walter vom Küchenfenster aus, wie Kai mit einer Teleskopschere hantierte.
Die Bewegungen waren ungeübt, ruckartig, ohne Blick auf die Horizontale.
Walter trank seinen Kaffee zu Ende, spülte die Tasse, stellte sie ins Abtropfgestell.
Dann nahm er den kleinen schwarzen Block aus der Schublade und notierte: „31.3., Kai schneidet, Ergebnis: unregelmäßig, Höhe ca. 1,02."
Er legte den Block zurück, schloss die Schublade.
Die Tatsache, dass Kai überhaupt geschnitten hatte, störte ihn mehr, als er erwartet hatte.
Nicht die Ungleichmäßigkeit an sich – die konnte er korrigieren.
Was ihn störte, war schwerer zu benennen.
Es war, als hätte jemand in seiner Partitur einen Takt verändert, ohne dass ein Fehler entstanden wäre, dem er hätte widersprechen können.
Er stand am Fenster, bis Kai ins Haus gegangen war.
Dann zog er die Gardine vor.
In den folgenden Tagen maß er die Hecke täglich, vom Grundstück aus, mit dem Zollstock, den er seit seiner Pensionierung an der Hintertür hängen hatte.
Die Seite, die Kai gestutzt hatte, wies Stufen auf – bis zu drei Zentimeter Höhenunterschied auf einer Länge von vier Metern.
Walter protokollierte jeden Messpunkt.
Er tat es nicht, um etwas zu unternehmen.
Er tat es, weil das Messen das Einzige war, das er wirklich konnte.
Am Donnerstag der dritten Aprilwoche kam Kai an die Hecke und sagte, es wäre vielleicht sinnvoll, eine gemeinsame Schnitthöhe festzulegen.
Walter antwortete, dass die Schnitthöhe seit Jahren 1,10 sei.
Kai sagte, das wisse er nicht, er sei neu hier.
Walter sah ihn an.
Der junge Mann hielt seinem Blick stand, ohne Feindseligkeit, aber auch ohne Nachgeben.
„Ich schlage 1,15 vor", sagte Kai, „das wäre doch ein Kompromiss."
Walter erwiderte, er kenne keinen Grund für einen Kompromiss dort, wo eine Regelung bereits bestehe.
Er drehte sich um.
Kai rief ihm noch etwas nach, aber Walter hatte die Küchentür bereits geschlossen.
Am nächsten Morgen war die Hecke auf Kais Seite auf 1,15 – sauber geschnitten, diesmal mit erkennbarer Richtscheit-Führung.
Walter stand davor mit dem Zollstock.
Fünf Zentimeter.
Er maß drei Mal, an drei verschiedenen Stellen.
Das Ergebnis blieb.
Er ging in den Schuppen, holte die elektrische Schere, rollte das Kabel ab.
Dann stellte er das Gerät zurück, ohne es eingeschaltet zu haben.
Er schrieb nichts in den Block.
Der zweite Samstag im Mai war bewölkt, windstill.
Walter stand um 9:00 Uhr an der Hecke, die Schere in der Hand, das Verlängerungskabel bereits ausgerollt.
Er schaltete sie ein.
Der Motor summte, die Klinge vibrierte, der Geruch von warmem Elektrokabel und frisch geschnittenem Grün lag in der Luft.
Er legte die Schneide an die Heckenkrone.
Dann hielt er inne.
Nicht weil ihm etwas fehlte.
Sondern weil er plötzlich nicht mehr wusste, wofür er schnitt.
Die Hecke würde wachsen, ob er schnitt oder nicht – das hatte sie immer getan, das würde sie immer tun.
Kai würde seine Seite auf 1,15 halten oder auf irgendetwas anderes, je nach Stimmung.
Die Grundstücksgrenze blieb, wo sie war – eingemessen, protokolliert, unbestreitbar.
Das änderte sich nicht.
Walter schaltete die Schere aus.
Er legte sie auf den Rasen, neben den Zollstock, der noch im Gras lag.
Er setzte sich auf den Holzrahmen des Hochbeetes, das Hilde vor zwölf Jahren angelegt hatte und das er seitdem als Ablage für Gartengeräte nutzte.
Ein Vogel saß auf der Hecke, auf Kais Seite, und putzte sein Gefieder.
Er blieb sitzen, bis der Vogel weiterflog.
Dann stand er auf, räumte das Gerät in den Schuppen, wickelte das Kabel auf, hängte die Schere an ihren Haken.
Er ging ins Haus, aß, was er am Vortag gekocht hatte.
Am Abend öffnete er den schwarzen Block und betrachtete die Einträge, die sich über drei Vegetationsjahre erstreckten.
Er schloss ihn, ohne etwas hineingeschrieben zu haben.
Draußen wuchs die Hecke.
== 109 ==
Das Buch
Emma arbeitet in der Stadtbücherei.
Sie ist einunddreißig Jahre alt.
Sie sitzt jeden Tag an der Rückgabe.
Die Bücherei ist klein und ruhig.
Emma mag das.
Heute ist Mittwoch.
Es ist kurz nach zehn Uhr.
Eine Frau bringt ein Buch zurück.
Emma scannt den Barcode.
Die Frau geht wieder.
Emma macht das Buch auf.
Sie prüft, ob alle Seiten in Ordnung sind.
Da fällt ein kleines Stück Papier heraus.
Emma hebt es auf.
Sie liest: „Ich lese viel. Niemand weiß das."
Sie liest die Sätze noch einmal.
Das Papier ist klein und weiß.
Es gibt keinen Namen.
Es gibt kein Datum.
Emma denkt: Wer hat das geschrieben?
Die Frau, die das Buch zurückgebracht hat?
Oder jemand anderes?
Sie weiß es nicht.
Sie legt das Papier in ihre Schreibtischschublade.
Dann legt sie das Buch ins Regal.
Um elf Uhr kommt ein Mann mit drei Büchern.
Emma scannt die Bücher.
Sie reden kurz über das Wetter.
Dann geht der Mann.
Es wird wieder ruhig.
Emma denkt wieder an das Papier.
Sie öffnet die Schublade.
Das Papier liegt noch darin.
„Niemand weiß das."
Das ist ein trauriger Satz, denkt Emma.
Oder ist er normal?
Viele Menschen haben Geheimnisse.
Vielleicht ist das so bei jedem.
Sie schließt die Schublade.
Sie macht ihre Arbeit weiter.
Um fünf Uhr macht die Bücherei zu.
Emma räumt ihren Schreibtisch auf.
Sie holt das Papier aus der Schublade.
Sie liest den Satz ein letztes Mal.
Dann wirft sie das Papier in den Papierkorb.
Sie nimmt ihre Jacke und ihre Tasche.
Sie schließt die Bücherei ab.
Draußen ist es noch hell.
Emma geht zu Fuß nach Hause.
Es sind nur zehn Minuten.
Sie denkt an den Satz.
„Ich lese viel. Niemand weiß das."
Lesen ist doch keine Schande, denkt sie.
Warum schreibt man das auf?
Vielleicht weil man es jemandem sagen möchte.
Aber man findet die Worte nicht.
Sie weiß es nicht.
Sie kommt nach Hause.
Sie macht die Tür auf.
Ihre Katze Mimi kommt zu ihr.
„Hallo Mimi", sagt Emma.
Die Katze schnurrt.
Emma geht in die Küche.
Sie kocht Tee.
Sie setzt sich ans Fenster.
Draußen geht jemand vorbei.
Emma schaut kurz hin.
Sie trinkt ihren Tee.
Sie denkt nicht mehr an den Zettel.
Oder vielleicht doch ein bisschen.
Es ist ein normaler Mittwoch.
Morgen ist es wieder so.
----------------------------------------------
Zimmer 14
Sandra arbeitet im Hotel Bergblick in Graz.
Sie putzt jeden Tag die Hotelzimmer.
Sie ist vierundvierzig Jahre alt.
Sie macht ihre Arbeit gut, denn sie ist sehr ordentlich.
Am Dienstagmorgen hat sie die Zimmerliste bekommen.
Zimmer 14 war frei, denn der Gast ist abgereist.
Sie hat den Reinigungswagen in den Gang geschoben.
Dann hat sie die Tür von Zimmer 14 aufgemacht.
Das Zimmer war klein, aber ordentlich.
Das Bett war ungemacht.
Sandra hat zuerst das Fenster aufgemacht.
Dann hat sie angefangen, das Bett zu machen.
Unter dem Kissen hat sie ein gefaltetes Stück Papier gefunden.
Das war kein Notizzettel vom Hotel.
Es war ein normales Stück Papier.
Sie hat es aufgemacht und gelesen.
„Ich war hier. Kein Mensch fragt mich, wie es mir geht."
Sandra hat den Satz noch einmal gelesen.
Auf der Rückseite war nichts.
Sie hat das Papier kurz angeschaut.
Wer hat das geschrieben?
Der Gast ist heute Morgen früh abgereist.
Seinen Namen hat sie nicht gewusst.
Sie hat das Papier gefaltet und in ihre Schürzentasche gesteckt.
Dann hat sie das Bett fertig gemacht.
Sie hat das Badezimmer geputzt, den Boden gewischt und frische Handtücher hingelegt.
Um zehn Uhr war das Zimmer fertig.
Sie hat die Tür hinter sich geschlossen und ist weitergegangen.
Auf dem Gang hat sie ihre Kollegin Miriam getroffen.
„Alles in Ordnung?", hat Miriam gefragt.
„Ja, alles gut", hat Sandra gesagt.
Sie hat nicht über den Zettel gesprochen.
Sie hat auch nicht genau gewusst, warum nicht.
Vielleicht war es einfach so.
Sie hat noch vier weitere Zimmer geputzt.
Um halb zwei war die Schicht vorbei.
Sandra ist in den Umkleideraum gegangen.
Sie hat ihre Schürze ausgezogen.
Der Zettel war noch in der Tasche.
Sie hat ihn kurz in der Hand gehalten.
Dann hat sie ihn in den Mülleimer geworfen.
Sie hat ihre Jacke angezogen und ihre Tasche genommen.
Draußen war es sonnig und warm.
Sandra ist zur Straßenbahnhaltestelle gegangen.
Sie hat auf die Bahn gewartet.
Sie hat an den Satz gedacht: „Kein Mensch fragt mich, wie es mir geht."
Das kannte sie.
Das kannte sie gut.
Nicht immer, aber manchmal.
Die Straßenbahn ist gekommen.
Sie ist eingestiegen und hat sich ans Fenster gesetzt.
Sie hat nach draußen geschaut.
Zu Hause hat sie Kaffee gekocht.
Ihr Mann war noch nicht da.
Die Kinder waren in der Schule.
Sie hat allein am Küchentisch gesessen.
Der Kaffee war heiß.
Sie hat langsam getrunken.
Nach einer Weile hat sie ihr Handy genommen und ihre Schwester angerufen.
„Wie geht's?", hat die Schwester gefragt.
„Gut", hat Sandra gesagt. „Und dir?"
Sie haben fast eine Stunde gesprochen.
Danach hat sich Sandra besser gefühlt.
Über den Zettel hat sie nicht gesprochen.
Abends ist ihr Mann nach Hause gekommen.
Er hat nicht gefragt, wie ihr Tag war.
Sandra hat auch nichts erzählt.
Das war normal bei ihnen.
----------------------------------------------
Hinter der Heizung
Klaus arbeitet seit zwanzig Jahren als Hausmeister an der Pestalozzi-Grundschule in Regensburg.
Er ist siebenundfünfzig Jahre alt und trägt immer denselben blauen Kittel.
Die Kinder kennen ihn, aber er redet nicht viel mit ihnen.
Er mag seine Arbeit, weil er meistens allein ist und niemand ihn dabei stört.
Jeden Oktober macht er den Heizungscheck in allen Zimmern, bevor der Winter anfängt.
Das dauert meistens zwei Tage.
An einem Donnerstag Anfang Oktober hat er seinen Werkzeugkoffer genommen und ist von Zimmer zu Zimmer gegangen.
Er hat jeden Heizkörper aufgeschraubt und geprüft, ob alles sauber war.
Im Zimmer 3b hat er die Abdeckung abgezogen und dahinter ein gefaltetes Stück Papier gefunden.
Er nahm es heraus, faltete es auf und hielt es ans Licht.
Die Schrift war klein und ein wenig zittrig, als ob die Hand dabei gezittert hätte.
„Ich war jeden Tag in diesem Raum. Niemand weiß, was ich gedacht habe."
Klaus las die Sätze zweimal.
Er drehte das Blatt um, aber auf der Rückseite stand nichts.
Er sah sich im leeren Zimmer um, fast so, als ob jemand ihn beobachten würde.
Die Stühle standen auf den Tischen, wie immer nach dem Unterricht.
Wer hatte das geschrieben?
Ein Kind? Ein Lehrer? Jemand, der hier schon lange nicht mehr war?
Er wusste es nicht.
Das Papier hatte eine gelbliche Farbe und fühlte sich weich und alt an.
Er steckte es in die Tasche seines Kittels.
Dann schraubte er die Abdeckung wieder fest und machte weiter.
Die anderen Zimmer waren kein Problem.
Um halb zwölf hat er Pause gemacht im Hausmeisterraum neben dem Keller.
Er hat sein Brot gegessen und Kaffee aus seiner Thermoskanne getrunken.
Das Blatt lag aufgefaltet auf dem kleinen Tisch vor ihm.
Er las den Satz noch einmal: „Niemand weiß, was ich gedacht habe."
Das stimmte eigentlich für jeden, dachte er.
Auch für ihn selbst.
Er überlegte kurz, ob er den Zettel dem Schulleiter zeigen sollte.
Aber was sollte der Schulleiter damit anfangen?
Da stand kein Name, kein Datum, keine Klasse.
Klaus faltete das Blatt zusammen und steckte es wieder in die Tasche.
Er hat seinen Kaffee fertiggetrunken und das Geschirr abgewaschen.
Dann ist er wieder an die Arbeit gegangen.
Am Nachmittag hat er noch die Wasserrohre im Keller kontrolliert.
Alles war in Ordnung.
Um fünf Uhr hat er alle Türen abgeschlossen und die Fenster geprüft.
Er hat seinen Koffer genommen und ist zum Fahrradständer vor dem Schuleingang gegangen.
Es war schon dunkel und kalt.
Er fuhr nach Hause.
Zu Hause begrüßte ihn sein Hund Bruno.
Klaus hängte seinen Kittel an den Haken neben der Tür.
Das Blatt war noch in der Tasche.
Er hat Kartoffelsuppe gekocht und am Küchentisch gegessen.
Dabei lief der Fernseher, aber er hörte nicht richtig zu.
Nach dem Essen hat er den Zettel aus der Kitteltasche geholt und ihn noch einmal gelesen.
Dann hat er den Mülleimer geöffnet und den Zettel hineingeworfen.
Bruno kam und legte sich auf seine Füße.
Klaus blieb sitzen.
Er dachte immer noch an den Satz, obwohl der Zettel jetzt weg war.
Niemand weiß, was ich gedacht habe.
Das stimmte wahrscheinlich für viele Menschen.
Für die Kinder, die jeden Tag in Zimmer 3b gesessen hatten.
Für die Lehrer.
Und für ihn selbst auch.
Man spricht darüber nicht.
Das ist einfach so.
Er streichelte Bruno und saß noch eine Weile.
Im Schichtprotokoll hatte er eingetragen: „Heizungscheck abgeschlossen – keine Auffälligkeiten."
Das war richtig.
Es war nur nicht alles.
----------------------------------------------
Was bleibt
Hanna Breitner ist seit sieben Jahren im Stadtarchiv von Feldkirch angestellt.
Sie mag ihre Arbeit.
Die Ordnung der alten Dokumente gibt ihr das Gefühl, dass die Vergangenheit irgendwo sicher aufgehoben ist.
Jeden Morgen trinkt sie einen Kaffee, bevor sie die erste Schachtel öffnet – das ist ihre Regel, und sie hält sie ein.
An einem Montag im März bekommt sie den Auftrag, alte Gemeindeakten aus den siebziger Jahren zu sichten.
Die Schachteln kommen aus dem Keller und riechen nach Staub und altem Papier.
Hanna zieht Handschuhe an, weil die Tinte manchmal abfärbt.
Sie öffnet die erste Schachtel und beginnt zu sortieren: Protokolle, Rechnungen, Briefwechsel.
Alles liegt durcheinander, aber das ist bei alten Beständen normal.
Ihr Kollege Tobias sitzt am anderen Ende des Raumes und tippt.
Er fragt sie manchmal etwas, aber meistens arbeiten sie schweigend nebeneinander.
In der dritten Schachtel findet sie ein gefaltetes Blatt, das zwischen zwei Protokollheften steckt.
Es ist kein Amtsdokument.
Die Handschrift ist klein und sehr gerade, als hätte jemand langsam und sorgfältig geschrieben.
„Ich habe hier gewartet. Jetzt wartet niemand mehr. Das war es dann."
Hanna liest den Satz zweimal.
Sie dreht das Blatt um, aber die Rückseite ist leer.
Es gibt kein Datum, keinen Namen, keine Unterschrift.
Sie legt das Blatt auf den Tisch neben sich.
Sie überlegt, ob sie Tobias fragen soll.
Aber was soll sie fragen?
Sie nimmt das Blatt wieder in die Hand.
Das Papier ist vergilbt, aber es fühlt sich fest an.
Irgendjemand hat diesen Satz geschrieben und ihn zwischen die Akten gelegt – absichtlich oder aus Versehen, das weiß sie nicht.
Tobias steht auf und geht zur Kaffeemaschine.
„Willst du auch einen?"
„Nein danke", sagt Hanna.
Sie wartet, bis er sich wieder hinsetzt.
Dann faltet sie das Blatt zusammen und steckt es in die Tasche ihres Kittels.
Sie weiß nicht genau, warum sie das tut.
Sie öffnet die vierte Schachtel und arbeitet weiter.
Um zwölf Uhr geht sie in die Pause.
Sie isst ihr Brot am kleinen Tisch im Pausenraum, allein, weil Tobias nach draußen gegangen ist.
Sie denkt an den Satz: „Das war es dann."
Was war es dann?
Eine Stelle?
Eine Beziehung?
Ein ganzes Leben?
Sie weiß es nicht und wird es nie wissen.
Das ist das Merkwürdige daran.
Nach der Pause hängt sie den Kittel an den Haken.
Das Blatt ist noch in der Tasche.
Sie arbeitet weiter, bis um fünf Uhr die Dienstzeit endet.
Dann schreibt sie in ihr Tagesprotokoll: „Schachteln 1 bis 4 gesichtet, Protokolle und Rechnungen identifiziert, lose Blätter ohne Zuordnung separiert."
Das ist nicht gelogen, aber es ist auch nicht die ganze Wahrheit.
Sie holt den Kittel vom Haken, zieht das Blatt aus der Tasche und sieht es noch einmal an.
Dann faltet sie es kleiner und steckt es in die Innentasche ihres Mantels.
Sie geht nach unten, tritt auf die Straße.
Es ist schon dunkel, die Laternen sind an.
Sie geht zum Bahnhof, kauft sich ein Wasser, setzt sich in den Zug.
Der Zug fährt pünktlich ab.
Durch das Fenster sieht sie, wie die Lichter der Stadt weniger werden und dann die dunklen Felder kommen.
Sie versucht, nicht mehr an den Zettel zu denken.
Es gelingt ihr nicht ganz.
Zu Hause zieht sie den Mantel aus und hängt ihn in den Schrank.
Es ist noch da.
Sie kocht Nudeln, isst, räumt auf.
Danach setzt sie sich ans Fenster und sieht auf die ruhige Straße.
Nach einer Weile steht sie auf, geht zum Schrank und holt das Blatt heraus.
Sie liest den Satz ein letztes Mal.
Dann geht sie in die Küche, hält das Blatt über den Mülleimer und lässt es fallen.
Sie wäscht die Hände.
Bevor sie schlafen geht, öffnet sie den Mülleimer noch einmal.
Das Blatt liegt oben auf den Nudelresten.
Sie klappt den Deckel zu.
Sie geht ins Bett und löscht das Licht.
Die Person, die diesen Satz geschrieben hat, hatte niemanden mehr – das spürt sie.
Hanna hat Tobias, den Kaffee am Morgen und die Schachteln.
Das ist nicht wenig.
Das sagt sie sich, während die Dunkelheit gleichmäßig und still über ihr liegt.
----------------------------------------------
Das Inventar
Das Notariat Schauenburg & Partner liegt im zweiten Stock eines Gründerzeithauses an der Freien Straße in Basel, hinter einer Tür mit Mattglasscheibe, durch die das Licht immer gedämpft wirkt.
Gerhard Moos arbeitet hier seit neunundzwanzig Jahren.
Er ist Sachbearbeiter für Nachlassangelegenheiten, ein Amt, das niemand begehrt.
Jeden Morgen um acht Uhr fünfzehn hängt er seinen Mantel an den dritten Haken von links – nicht den zweiten, nicht den vierten.
Die Kollegen haben aufgehört, ihn darüber zu befragen.
Sein Schreibtisch ist die einzige Fläche im Büro, auf der kein fremdes Objekt zu finden ist.
Er hat einundfünfzig Jahre, einen Einzelsitz in der Straßenbahn und zu Hause einen Sessel, der genau auf ihn eingestellt ist.
Die Aktenpulte, die er betreut, tragen die Namen von Menschen, die nicht mehr sprechen können.
Das findet er tröstlich.
An einem Dienstag im November, an dem der Regen leise gegen die Scheiben trommelt, öffnet er den Nachlasskarton eines gewissen Konrad Ettlin, verstorben im August, ohne Hinterbliebene.
Der Inhalt ist ärmlich: zwei Kontoauszüge, ein abgelaufener Reisepass, eine Quittung über die Reparatur eines Rasenmähers.
Dann liegt da, zwischen die Kontoauszüge geschoben, ein einzelnes Blatt auf kariertem Schulheftpapier.
Er hält es zunächst für eine interne Notiz aus der Kanzlei.
Die Handschrift ist unregelmäßig, die Zeile zieht leicht nach rechts.
„Ich war's. Die anderen wissen es nicht. Sollen sie es auch nicht."
Gerhard liest den Satz.
Er liest ihn ein zweites Mal.
Er legt den Zettel auf die Tischfläche und betrachtet ihn, ohne ihn zu berühren.
Was er damit anfangen soll, ist eine Frage, die sich sofort in mehrere darunter fallende Fragen aufteilt: Handelt es sich um ein Geständnis, um eine Drohung, oder um den Überrest eines privaten Witzes, der nie erzählt wurde?
Ein Toter witzelt nicht.
Er schiebt den Gedanken zur Seite.
Das Blatt muss irgendwo hin.
Er dreht den Zettel um.
Die Rückseite ist leer.
Sein Blick wandert zum Fenster, wo der Regen unregelmäßige Muster gegen das Glas schreibt.
Dann steht er auf, geht zur Aktenkammer, zieht den Ordner heraus, der die noch unverarbeiteten Dokumente aufnimmt: Rubrik „Nicht zuordenbar, zur Prüfung".
Er heftet den Zettel ein, schreibt den Eingang mit Datum und Aktennummer in das Prüfregister, schließt den Ordner.
Zurück an seinem Schreibtisch trägt er in die Nachlassdatei Ettlin ein: „Bearbeitung abgeschlossen, keine Hinweise auf Dritte."
Der Cursor blinkt.
Er klickt auf Speichern.
Am Mittwoch fehlt das Dokument in der Prüfliste.
Nicht der Ordner – der hängt an seinem Platz – aber der Eintrag ist verschwunden, als wäre er nie vorhanden gewesen.
Gerhard scrollt durch das Register, dann noch einmal, dann ein drittes Mal.
Es gibt keine Löschung, keinen Bearbeitungshinweis, keinen Namen.
Er geht zur Partnerin Dr. Wälti, klopft an die angelehnte Tür.
Sie ist am Telefon, hebt kurz die Hand, er wartet.
Als sie auflegt, fragt er, ob jemand im Ordner „Nicht zuordenbar" Änderungen vorgenommen habe.
Sie sieht ihn über die Brillenränder an.
„Welcher Ordner?"
Er erklärt es.
Sie nickt langsam, mit dem Gesichtsausdruck jemandes, der eine Ausführung hört, die ihn nichts angeht.
„Vielleicht haben Sie ihn falsch abgeheftet."
Das hat er nicht.
Er sagt: „Möglicherweise."
Zurück am Schreibtisch öffnet er die Nachlassdatei Ettlin.
Der Eintrag steht dort, wie er ihn geschrieben hat: sauber, vollständig, ohne Lücke.
Alles ist korrekt.
Kein Zettel, kein Widerspruch, kein Nachweis, dass irgendetwas gewesen war.
Er klappt den Laptop zu.
Um siebzehn Uhr dreißig zieht er seinen Mantel vom dritten Haken, nickt dem Kollegen Feusi zu, der ihn nicht ansieht, und geht die Treppe hinunter.
Die Freie Straße ist nass, die Schaufenster spiegeln das Licht der Straßenlaternen.
Er läuft nicht schnell.
In der Straßenbahn setzt er sich auf den Einzelsitz hinter dem Fahrer.
Das ist sein Platz.
Durch das Fenster sieht er, wie die Häuser vorbeiziehen – die Reihen der Fassaden, hinter denen Leute leben, ohne dass er wüsste, wer sie sind oder was sie getan haben.
Zu Hause hängt er den Mantel auf, wäscht die Hände, erhitzt eine Portion Linsen aus dem Vorrat, den er am Sonntag vorgekocht hat.
Er isst am Küchentisch, der Stuhl gegenüber ist leer.
Er sieht ihn nicht an.
Danach spült er ab, stellt das Geschirr in die Ablage, wischt die Platte trocken.
Er setzt sich in den Sessel, schlägt das Buch auf, das er seit drei Wochen auf Seite siebzig liegen lässt, und liest zwei Seiten.
Dann legt er es auf die Armlehne.
Was Ettlin getan haben mag, weiß er nicht.
Was er selbst getan hat, weiß er.
Er hat den Zettel eingeheftet, den Eintrag gemacht, die Frage gestellt.
Mehr war nicht nötig.
Das Verfahren war korrekt.
Er schließt die Augen.
Die Deckenlampe wirft ein gleichmäßiges Licht, das er durch die Lider spürt.
Er öffnet sie wieder.
Er geht ins Schlafzimmer, zieht sich aus, hängt die Hose sorgfältig über den Stuhl.
Bevor er das Licht löscht, sieht er kurz in den Spiegel.
Er trägt den Ausdruck eines Mannes, der alles richtig gemacht hat – und der weiß, dass er dennoch nicht schlafen wird.
Er löscht das Licht.
Im Dunkeln liegt er auf dem Rücken, die Arme neben dem Körper.
Der Regen hat aufgehört.
Das Schweigen ist vollständig.
Gerhard weiß genau, wie viel darin Platz hat.
== 110 ==
1
Die falsche Tasse
Polizistin Sabine kommt in das Wohnhaus am Marktplatz.
Es ist Mittwochmorgen, kurz nach neun Uhr.
Der Hausverwalter Franz Feldmann ist tot.
Er liegt in seiner Küche auf dem Boden.
Sabine schaut sich alles an.
Die Küche ist sauber und aufgeräumt.
Auf dem Tisch steht eine Kaffeetasse.
Sabine fragt die Nachbarin: Hat er Kaffee getrunken?
Die Nachbarin schüttelt den Kopf.
„Nein", sagt sie. „Er hat nur Tee getrunken."
Sabine fotografiert die Tasse.
Sie sieht auch den Stuhl.
Er steht nicht richtig am Tisch.
Jemand hat ihn verschoben.
Sabine schreibt alles auf.
Sie klingelt bei den Nachbarn im Haus.
Frau König wohnt im zweiten Stock.
Sie sagt: Herr Feldmann war in Ordnung.
Sabine fragt: Gab es Probleme?
„Nein", sagt Frau König. „Alles war gut."
Herr Kraft wohnt im Erdgeschoss.
Er öffnet die Tür und sagt nichts.
Sabine sagt: Guten Morgen. Ich habe Fragen.
Kraft sagt: Bitte kommen Sie rein.
Sabine fragt: Wie war Herr Feldmann?
Kraft sagt: Er hat seine Arbeit gemacht.
Sabine fragt: Hat es Streit gegeben?
Kraft sagt: Nein, keinen Streit.
Sabine schaut ihn ruhig an.
Er sieht müde und blass aus.
Frau Berger aus dem dritten Stock kommt auch.
Sie sagt: Feldmann hat die Miete erhöht.
Sabine fragt: War das für alle so?
Frau Berger sagt: Ja, für alle. Das war im September.
Sabine schreibt alles auf.
Am nächsten Tag kommt Sabine wieder.
Sie klingelt noch einmal bei Herrn Kraft.
Er öffnet sofort die Tür.
Sabine legt ein Foto auf den Tisch.
Es ist ein Foto von der Kaffeetasse.
Kraft schaut das Foto lange an.
Sabine fragt: Trinken Sie Kaffee, Herr Kraft?
Kraft schaut auf den Boden.
Er sagt: Ja, das bin ich.
Er setzt sich auf einen Stuhl.
Er sagt: Ich wollte nur mit ihm reden.
Sabine fragt: Was ist dann passiert?
Kraft fängt an zu erzählen.
Feldmann hat die Miete erhöht.
Kraft hat nicht mehr genug Geld gehabt.
Er hat gesagt: Ich kann das nicht zahlen.
Feldmann hat gesagt: Das ist nicht mein Problem.
Kraft hat eine Tablette in den Kaffee getan.
Er hat den Kaffee zu Feldmann gebracht.
Kraft sagt: Ich wollte das nicht wirklich.
Sabine schreibt alles auf.
Sie sagt: Sie müssen jetzt mitkommen.
Kraft nickt und steht auf.
Er nimmt ruhig seinen Mantel.
Sabine fährt zurück in ihr Büro.
Sie schreibt ihren Bericht.
Sabine denkt an Frau König.
Frau König hat gesagt: Alles war gut.
Das war nicht die Wahrheit.
Alle haben gewusst, dass die Miete ein Problem war.
Aber keiner hat etwas getan.
Sabine trinkt einen Kaffee.
Sie denkt: Das ist immer so.
Die Wahrheit findet man immer.
Das Schlimmste ist, dass alle einfach weitergemacht haben.
----------------------------------------------
2
Der zweite Schlüssel
Dorfpolizist Werner Haas ist am Dienstag in die Bäckerei gegangen.
Der Bäcker Herbert Kuhn war seit dem Morgen tot.
Er lag auf dem Boden im hinteren Raum der Bäckerei.
Der Arzt hat gesagt: Es war ein Herzanfall.
Werner hat sich alles genau angeschaut.
Der Backofen war noch an, aber das Brot darin war schwarz.
Das war merkwürdig, denn Kuhn hat immer auf sein Brot geachtet.
Kein guter Bäcker lässt sein Brot verbrennen.
Neben dem Backofen stand eine Kaffeetasse.
Die Tasse war fast voll, aber der Kaffee darin war kalt.
Werner hat die Tasse und den Raum fotografiert.
An der Wand hing ein Schlüssel an einem Haken.
Daneben war ein zweiter Haken, aber der war leer.
Werner hat in sein Notizbuch geschrieben: Wo ist der zweite Schlüssel?
Er hat dann die Schubladen im Büro aufgemacht.
In der dritten Schublade lag ein Vertrag.
Es war ein Darlehensvertrag über viertausend Euro.
Der Name auf dem Vertrag war: Hildegard Naber.
Werner hat den Vertrag vorsichtig mitgenommen.
Am Nachmittag hat er mit Kuhns Frau Margarete gesprochen.
Margarete Kuhn war ruhig und hat wenig gesagt.
„Mein Mann war fleißig", sagte sie. „Er hatte keine Feinde."
Werner hat gefragt, ob jemand einen Schlüssel zur Bäckerei hatte.
Margarete hat gezögert und dann gesagt: Nur wir.
Werner hat das nicht geglaubt, aber er hat nichts gesagt.
Danach hat Werner mit dem Lehrling Jonas gesprochen.
Jonas war neunzehn Jahre alt und sehr nervös.
Er hat gesagt: Herr Kuhn war in Ordnung.
Werner hat ihn direkt gefragt: Wirklich?
Jonas hat genickt, aber er hat Werner nicht angeschaut.
Er wollte etwas sagen, aber dann hat er nichts gesagt.
Dann ist Werner zu Frau Naber gegangen, der Nachbarin.
Frau Naber hat die Tür sofort geöffnet und ihn hereingebeten.
Sie war sehr freundlich, vielleicht ein bisschen zu freundlich.
Werner hat gefragt: Haben Sie Herrn Kuhn gut gekannt?
„Ja, natürlich", sagte sie. „Wir waren Nachbarn seit zehn Jahren."
Werner hat gefragt: Gab es Probleme?
„Nein", sagte sie. „Überhaupt keine Probleme."
Auf dem Tisch lag eine Kuchendose von der Bäckerei.
Werner hat gefragt: Wann haben Sie die Dose bekommen?
„Gestern Abend", sagte Frau Naber. „Herbert hat sie mir gebracht."
Werner hat den Vertrag aus der Tasche geholt.
Er hat den Vertrag auf den Tisch gelegt.
Frau Naber hat den Vertrag angeschaut und nichts gesagt.
Werner hat gefragt: Haben Sie einen Schlüssel zur Bäckerei?
Nach einem kurzen Zögern hat sie genickt.
Werner hat gefragt: War das am Montagabend?
„Ja", sagte sie. „Das war am Montagabend."
Dann hat Frau Naber alles erzählt, ruhig und langsam.
„Ich habe ihm das Geld gegeben, denn ich habe ihm vertraut", sagte sie.
Kuhn hat sie immer vertröstet, aber er hat nie gezahlt.
„Ich wollte nur, dass er aufhört zu lügen", sagte sie.
Werner hat alles sorgfältig aufgeschrieben.
Er hat gefragt: Hat jemand von dem Geld gewusst?
Frau Naber hat die Schultern hochgezogen.
„Margarete hat davon gewusst", sagte sie.
Werner hat das auch notiert und ist ruhig geblieben.
Am Abend hat Werner seinen Bericht geschrieben.
Er hat an seinem Tisch gesessen und Tee getrunken.
Er hat an Jonas gedacht, der nicht aufgeschaut hatte.
Er hat an Margarete gedacht, die gesagt hatte: Nur wir.
Alle im Dorf hatten etwas gewusst, aber keiner hatte geholfen.
Werner hat den Bericht fertig geschrieben.
Er hat das Licht ausgemacht und ist nach Hause gegangen.
Er hat nicht mehr an Frau Naber gedacht.
Werner hat immer noch an den leeren Haken gedacht.
Der leere Haken hatte von Anfang an alles gesagt.
----------------------------------------------
3
Fremde Hände
Kriminalinspektor Lemberger kam am frühen Abend in Graseck an, als es draußen bereits dunkel war.
Das Berghotel „Zur Linde" lag am Ortsrand, umgeben von Fichten, die unter dem Schnee schwer aussahen.
Am Nachmittag hatte man den Hotelier Ottmar Sagl tot in der Küche gefunden.
Er lag auf dem Boden neben dem Herd, und der Arzt sprach von Herzstillstand.
Lemberger trat in die Küche und schaute sich um.
Es war alles sehr ordentlich.
Die Töpfe hingen in Reih und Glied an den Haken, und die Messer lagen sauber auf dem Brett.
Nur eine Suppenkelle hing am falschen Haken, ganz am Ende der Reihe.
Lemberger fotografierte die Kelle.
Er wusste noch nicht, ob das wichtig war.
Er öffnete das kleine Fenster über der Spüle und merkte, dass es nicht richtig geschlossen war.
Draußen waren es minus acht Grad.
Niemand ließ in diesem Winter ein Fenster offen, ohne einen Grund.
Das Medizinkästchen neben dem Kühlschrank war leer, obwohl laut Inventar eine Packung drin sein sollte.
Lemberger notierte das und ging in die Gaststube.
Er sprach als erstes mit der Köchin Rosa.
Sie war eine ruhige Frau, die beim Reden immer die Hände auf dem Tisch hatte.
Sagl war ein strenger Chef, sagte sie, aber eigentlich in Ordnung.
Lemberger fragte, was eigentlich in Ordnung bedeute.
Rosa zuckte die Schultern und sagte: Er hat halt seine Art gehabt.
Er sprach dann mit Emil, dem Portier.
Emil kannte Sagl seit zwanzig Jahren und hatte immer für ihn gearbeitet.
„Sagl hat immer pünktlich gezahlt", sagte Emil. „Das ist das Wichtigste."
Lemberger fragte, ob es Streit gegeben hatte.
Emil schüttelte den Kopf, aber er schaute dabei nicht auf.
Danach sprach Lemberger mit der Buchhalterin Helene Roth.
Sie war Ende vierzig und saß sehr gerade auf dem Stuhl.
Sie antwortete auf alle Fragen, aber ihre Antworten sagten nichts.
Lemberger fragte sie nach dem leeren Medizinkästchen.
Sie sagte: Ich weiß nicht, was da drin war.
Lemberger ließ sie gehen.
Aber er dachte die ganze Zeit an die Suppenkelle.
Am nächsten Morgen sprach er noch einmal mit Rosa.
Er fragte, ob die Kelle immer am letzten Haken gehangen hatte.
Rosa sagte sofort: Nein, die gehört ans zweite Ende, Herr Sagl war sehr genau damit.
Lemberger fragte, wer sonst noch in die Küche gegangen war.
Rosa dachte kurz nach und sagte: Nur Helene, manchmal wegen der Abrechnung.
Lemberger las danach die Personalakte von Helene Roth.
Sie arbeitete seit sieben Jahren im Hotel.
In den ersten drei Jahren hatte sie deutlich weniger verdient als ihre Kolleginnen.
Dann war ihr Lohn plötzlich gestiegen, ohne dass es eine Erklärung dafür gab.
Lemberger legte die Akte hin.
Er bat Helene Roth zum zweiten Gespräch.
Sie setzte sich wieder sehr gerade hin.
Lemberger legte die Akte auf den Tisch und schwieg.
Helene Roth schaute auf die Akte, dann auf ihn.
„Wann haben Sie es gemerkt?", fragte sie.
„Gerade eben", sagte Lemberger ruhig.
Sie nickte, als hätte sie das erwartet.
Das Geständnis war kurz und sehr sachlich.
Sagl hatte einen alten Fehler in ihrer Buchhaltung aufgehoben.
Er hatte nie damit gedroht, aber er hatte das Papier behalten.
Helene hatte gewusst, dass dieses Dokument noch irgendwo lag.
Das allein hatte schon gereicht.
Sie hatte drei Jahre lang mehr gearbeitet als alle anderen, für weniger Geld.
Dann hatte sie den Fehler selbst korrigiert, aber das Dokument war noch da gewesen.
„Ich wollte, dass das aufhört", sagte sie.
Lemberger fragte, ob sie jemanden um Hilfe gebeten hatte.
„Wen?", sagte sie, und das klang nicht bitter, nur sehr müde.
Lemberger schrieb alles auf und ließ sie dann gehen.
Er fuhr am Abend zurück in die Stadt.
Es hatte angefangen zu schneien, und die Straße durch den Berg war schmal.
Er dachte an Rosa, die gesagt hatte, Sagl war eigentlich in Ordnung.
Er dachte an Emil, der nicht aufgeschaut hatte.
Alle hatten gewusst, wie es im Hotel zuging.
Keiner hatte etwas gesagt.
Das war nicht Angst, das war einfach so.
Lemberger fuhr durch den Schnee und fragte sich, ob das Urteil irgendetwas ändern würde.
Für Helene Roth würde es ihr Leben verändern.
Für die anderen würde alles bleiben, wie es war.
----------------------------------------------
4
Das letzte Glas
Kommissarin Drechsel fuhr am Mittwochmorgen in das Dorf Niederbruck, weil der Tierarzt Dr. Halberstam tot in seiner Praxis gefunden orden war.
Sein Assistent hatte ihn entdeckt, als er morgens die Praxis aufschloss.
Der Arzt vom Gesundheitsamt sprach von einem Herzanfall.
Drechsel schrieb das in ihr Notizbuch und schaute sich um.
Halberstam lag hinter seinem Schreibtisch auf dem Boden, ruhig, als hätte er sich schlafen gelegt.
Auf dem Tisch stand ein Weinglas, das noch zur Hälfte gefüllt war.
Das war das Erste, was ihr auffiel: Der Mann hatte getrunken, aber das Glas war nicht leer.
Sie fotografierte alles, bevor sie irgendetwas anfasste.
Das Glas stand leicht schräg, so als hätte jemand es schnell abgestellt.
Die Flasche, aus der es eingeschenkt worden war, stand im Regal, der Korken war wieder eingesetzt.
Jemand hatte sich Zeit genommen, den Korken einzusetzen, aber nicht, das Glas gerade hinzustellen.
Drechsel notierte das.
Sie öffnete die Schreibtischschublade und fand Briefe, ordentlich mit einem Gummiband zusammengehalten.
Sie nahm sie mit.
Am Nachmittag begann sie mit den Befragungen.
Halberstams Frau Renate saß ihr gegenüber mit den Händen im Schoß und sprach ruhig über ihren Mann.
Er sei fleißig gewesen, verlässlich, und habe das Dorf über dreißig Jahre lang betreut.
Drechsel fragte, ob er Feinde gehabt habe.
Renate Halberstam schüttelte den Kopf, ohne zu zögern.
Das war so schnell, dass es wie eine einstudierte Antwort wirkte.
Der Assistent, ein junger Mann namens Florian, war nervöser.
Er sagte, Halberstam sei manchmal schwierig gewesen, wollte aber nicht erklären, was er damit meinte.
Drechsel ließ ihn reden, bis er von selbst aufhörte.
Der Pfarrer nannte Halberstam einen Mann mit Grundsätzen, und dabei lächelte er leicht, auf eine Art, die nicht warm war.
Drechsel fragte, welche Grundsätze er meine.
Der Pfarrer sagte, Halberstam habe immer gewusst, was er wert sei.
Das sagte er so, dass es kein Lob war.
Am nächsten Morgen las sie die Briefe.
Es waren keine Liebesbriefe.
Es waren Schreiben, in denen Halberstam anderen Dorfbewohnern erklärte, was er wisse und was es kosten würde, wenn er schwieg.
Die meisten waren nie abgeschickt worden – sie dienten wohl als Erinnerung, was er in der Hand hatte.
Einer war an eine Frau Brendel adressiert, die Grundschullehrerin.
Drechsel fuhr zu ihr.
Britta Brendel öffnete die Tür, bevor Drechsel klingeln konnte, als hätte sie gewartet.
Sie war eine kleine Frau mit ruhigen Augen, die nichts verrieten.
Drechsel legte den Brief auf den Tisch.
Brendel schaute ihn an, dann schaute sie Drechsel an.
Ich dachte, er hätte ihn vernichtet, sagte sie.
Drechsel sagte nichts.
Brendel setzte sich, als ob ihre Beine nachgegeben hätten.
Wie viel wissen Sie schon?, fragte sie.
Drechsel sagte: Genug.
Das Geständnis dauerte etwa zwanzig Minuten.
Brendel erzählte alles genau: das Glas, den Wein, das Mittel aus dem Medizinschrank ihres verstorbenen Mannes.
Halberstam hatte sie seit Jahren erpresst, weil er wusste, dass sie einmal einen Schulbericht gefälscht hatte.
Sie hatte das getan, um einen Schüler zu schützen – und er hatte es benutzt.
Er hat nie viel verlangt, sagte sie.
Nur genug, damit ich nicht vergesse, wer er ist.
Drechsel schrieb mit, ohne sie zu unterbrechen.
Als Brendel fertig war, fragte sie, ob sie ihre Katze versorgen lassen dürfe, bevor sie mitkomme.
Drechsel sagte ja.
Sie wartete in der Küche, während Brendel das Tier fütterte.
Sie dachte daran, dass die anderen Briefe noch auf ihrem Schreibtisch lagen.
Weitere vier Empfänger.
Keiner von ihnen hatte sie angerufen.
Abends schrieb Drechsel ihren Bericht im Auto, weil das Gasthaus im Dorf zu laut war.
Sie schrieb klar und sachlich, so wie sie immer schrieb.
Aber hinter dem letzten Satz saß sie noch eine Weile.
Sie dachte an Renate Halberstam, die so schnell den Kopf geschüttelt hatte.
Sie dachte an Florian, der schwierig gesagt hatte und nicht weitergeredet hatte.
Sie dachte an den Pfarrer, der über Grundsätze gesprochen hatte, als wäre das ein Witz.
Alle hatten etwas gewusst oder geahnt.
Keiner hatte etwas getan.
Nicht weil sie Angst hatten.
Sondern weil es leichter war, nichts zu tun.
Drechsel startete den Motor und fuhr aus dem Dorf.
Sie dachte, dass das Urteil über Brendel einfach sein würde.
Das andere – die vier unversandten Briefe, die schweigende Witwe, der lächelnde Pfarrer – das würde keiner verurteilen.
Das war das Schwierigste an diesem Beruf: nicht die Mörder, sondern die Gleichgültigkeit, die sie möglich gemacht hatte.
----------------------------------------------
5
Was der Nebel zurücklässt
Inspektor Ravensberg kam am frühen Morgen in Starkenfeld an, als der Nebel noch so tief über dem Hafen hing, dass man die Kaimauer kaum sehen konnte.
Das Haus des Notars Witkowski lag am Ende der Hauptstraße, zurückversetzt hinter einemgepflegten Eisenzaun, der aussah, als wäre er gestern erst gestrichen worden.
Die Haustür stand offen.
Drinnen war alles so aufgeräumt, dass Ravensberg unwillkürlich innehielt.
Witkowski lag im Arbeitszimmer auf dem Boden, beide Hände flach auf den Dielen, als hätte er sich im letzten Moment noch einmal besonnen.
Der Arzt, der ihn als Erster untersucht hatte, sprach von Herzversagen; Ravensberg notierte das Wort und setzte ein Fragezeichen dahinter.
Auf dem Schreibtisch stand eine halb geleerte Kaffeetasse, die leicht aus ihrer Untertasse gerückt war – ein kleines Missverhältnis in einem Raum, der sonst keines kannte.
Neben dem Kamin lag ein Buch aufgeschlagen auf dem Boden, obwohl der Sessel, aus dem es hätte fallen können, gut drei Meter entfernt stand.
Ravensberg hob es auf und legte es auf den Tisch.
Er fotografierte die Tasse, das Buch und die leicht angelehnte Schranktür, hinter der
Witkowskis Mandantenakten in akkurat beschrifteten Mappen hingen.
Eine fehlte.
Nicht der leere Platz war das Problem, sondern dass kein anderer Ordner gerückt worden war, um die Lücke zu kaschieren.
Jemand hatte die Mappe genommen und entweder nicht daran gedacht oder nicht daran denken wollen, dass das Fehlen auffallen würde.
Ravensberg stand eine Weile am Fenster und sah auf den Garten, in dem noch nichts blühte.
Er fuhr mit dem Finger über das Fensterbrett und fand keinen Staub.
Er begann seine Befragungen am selben Nachmittag, weil er wusste, dass in kleinen Orten Geschichten sich schneller verändern als Fakten.
Witkowskis Tochter Irene empfing ihn in einem Wohnzimmer, dessen Ordnung dieselbe Angestrengtheit hatte wie alles andere in diesem Haus.
Sie beschrieb ihren Vater als einen ruhigen, pflichtbewussten Mann, der keine Feinde gehabt habe und sich um die Angelegenheiten anderer nie gekümmert habe.
Ravensberg hörte zu, ohne zu unterbrechen, und vermerkte, dass sie das Wort Feinde benutzte, obwohl er es nicht eingeführt hatte.
Der Bürgermeister, ein Mann namens Hollenbeck, empfing ihn mit der geschäftsmäßigen Herzlichkeit von jemandem, der gelernt hat, Vertrauen zu simulieren.
Witkowski sei ein Stützpfeiler der Gemeinschaft gewesen, sagte er; man werde ihn vermissen.
Das sagte er so, wie man sagt, dass das Wetter schön war – als Feststellung über etwas, das sich nicht mehr ändern lässt und das man deshalb auch nicht mehr betrauern muss.
Nur der alte Brückenwächter Starobin, den Ravensberg beim Hafenausgang traf, sagte etwas anderes.
Er zuckte die Schultern und meinte, Witkowski habe seine Sachen gehabt wie jeder andere auch.
Ravensberg fragte, was für Sachen.
Starobin sah aufs Wasser.
Sachen eben, sagte er und ging.
Am dritten Tag bat Ravensberg Witkowskis Sekretärin Margot Seifried zu einem zweiten Gespräch.
Sie war eine Frau Ende fünfzig, die so still saß, als hätte sie gelernt, möglichst wenig Raum einzunehmen.
Er fragte sie nach der fehlenden Akte.
Sie schwieg einen Moment – nicht das Schweigen des Überlegens, sondern das Schweigen von jemandem, der prüft, wie viel Kraft das Weiterlügen noch kosten wird.
Dann sagte sie, Witkowski habe die Mappe selbst entnommen, kurz bevor er gestorben sei.
Ravensberg fragte, wann sie das gesehen habe.
Sie sagte, am Dienstagabend, gegen halb sieben.
Er fragte, was in der Akte gewesen sei.
Sie faltete die Hände.
Ein Darlehensvertrag, sagte sie.
Und?
Und ein Brief.
Von wem?
Sie sah ihn an, als wäre die Frage unnötig, weil die Antwort so offensichtlich war, dass das Aussprechen sie beleidigen würde.
Von mir, sagte sie schließlich.
Was folgte, war kein Zusammenbruch.
Margot Seifried schilderte den Ablauf mit einer Sachlichkeit, die Ravensberg an das Protokoll eines Buchhalters erinnerte: die Tassen, der Tee, der Zusatz aus dem Medizinschrank.
Der Grund war ein Dokument, das Witkowski seit Jahren aufbewahrt hatte und das ihr gesamtes Erspartes, das Erbe ihrer Mutter, für eine Schuld beanspruchte, die sie nie eingegangen war.
Er hatte sie damit nie erpresst – er hatte es nur aufbewahrt, mit der umsichtigen Sorgfalt eines Mannes, der alles verwahrt, was sich eines Tages als nützlich erweisen könnte.
Das war das Schlimmste, sagte sie: dass er nicht böse gewesen sei.
Nur berechnend, auf eine Weise, die so alltäglich war, dass sie selbst ihm gegenüber nie einen anderen Namen dafür gehabt hatte.
Ravensberg schrieb seinen Bericht in der einzigen Gaststätte des Ortes, am Fenster, mit Blick auf die Straße.
Er trank Kaffee, der nicht gut war.
Hollenbeck kam um halb neun herein, sah ihn und setzte sich ans andere Ende der Theke.
Sie sprachen nicht.
Ravensberg dachte daran, dass in diesem Ort alle gewusst oder geahnt hatten, was Witkowski tat.
Dass sie es nicht als ihr Problem betrachtet hatten, war keine Ausnahme – es war das Normalste der Welt.
Er zahlte, zog den Mantel an und ging zum Wagen.
Die Straße war leer, der Nebel war wieder da.
Auf der Fahrt zurück in die Stadt dachte er nicht an Margot Seifried.
Er dachte an Irene, die das Wort Feinde benutzt hatte, ohne dass er es eingeführt hatte, und die danach so ruhig weitergesprochen hatte, als wäre nichts gewesen.
Er dachte an Starobin, der aufs Wasser gesehen hatte.
Er dachte an Hollenbeck, der sich ans andere Ende gesetzt hatte.
Es wäre möglich gewesen, dass einer von ihnen in dieser Nacht in der Küche gestanden und Margot Seifried nicht aufgehalten hatte.
Es wäre ebenso möglich gewesen, dass keiner von ihnen es je für nötig gehalten hatte, irgendetwas aufzuhalten.
Ravensberg fuhr und wusste, dass er die Wahrheit gefunden hatte – ordentlich, vollständig, beweisbar.
Er wusste auch, dass sie das Leichteste an diesem Fall gewesen war.
== 111 ==
1
Das rote Heftchen
Tanja backt jeden Tag Brot.
Sie wohnt in Golikino.
Das ist ein kleines Dorf.
Ihre Nachbarin heißt Baba Ljuba.
Baba Ljuba ist alt.
Sie wohnt allein.
Eines Tages klopft Tanja an ihre Tür.
Baba Ljuba macht nicht auf.
Tanja öffnet die Tür.
Sie geht hinein.
Baba Ljuba sitzt am Tisch.
Sie bewegt sich nicht.
Sie ist gestorben.
Auf dem Tisch stehen zwei Tassen.
Tanja schaut die Tassen an.
Eine Tasse ist leer.
Eine Tasse ist halbvoll.
Der Tee ist noch warm.
"Wer war hier?", denkt Tanja.
Sie trinkt den Tee in der fremden Tasse.
Am nächsten Tag geht Tanja durch das Dorf.
Sie bringt Brot zu den Leuten.
Alle wissen, dass Baba Ljuba gestorben ist.
"Sie war sehr nett", sagt Frau Bobrowa.
"Das ist sehr traurig", sagt der alte Wassili.
Tanja fragt: "Hat jemand Baba Ljuba besucht?"
Frau Bobrowa schüttelt den Kopf.
"Nein, ich war nicht da", sagt sie.
Tanja geht zum Laden.
Sie kauft Mehl.
Sie fragt den Ladenbesitzer.
Er wird rot.
Er spricht über das Wetter.
Tanja fragt: "Wo ist Baba Ljubas rotes Heftchen?"
"Welches Heftchen?", fragt er.
Aber er schaut zur Seite.
Die Leute in Golikino schweigen.
Alle schweigen auf dieselbe Art.
Zwei Tage später geht Tanja zu Baba Ljubas Haus.
Sie öffnet die Schublade neben dem Bett.
Darin ist ein Stück Papier.
Tanja liest das Papier.
Da sind Namen von Leuten aus dem Dorf.
Neben den Namen stehen Zahlen.
Das ist ein Geheimnis.
Tanja sieht den Namen von Bürgermeister Nikolai.
Er ist dreimal da.
Tanja faltet das Papier zusammen.
Sie schaut aus dem Fenster.
Der Garten sieht nicht gut aus.
Das Gras ist sehr hoch.
Baba Ljuba hat lange nicht im Garten gearbeitet.
Tanja geht nach Hause.
Sie kocht Tee.
Sie legt das Papier auf den Tisch.
"Was mache ich jetzt?", denkt sie.
Bürgermeister Nikolai ist ein mächtiger Mann.
Er kennt alle im Dorf.
Tanja kennt seine Frau und seine Kinder.
Seine Kinder gehen zur Schule.
Baba Ljuba hat das Heftchen lange gehabt.
Sie hat nie etwas gesagt.
"Warum hat sie nichts gesagt?", fragt Tanja sich.
Tanja weiß die Antwort nicht.
Sie trinkt den Tee.
Sie denkt lange nach.
Dann nimmt sie die Bibel.
Sie legt das Papier in die Bibel.
Sie stellt das Buch ins Regal.
"Das bleibt hier", sagt sie.
Am nächsten Morgen bäckt Tanja wieder Brot.
Frau Bobrowa kommt und kauft ein Brot.
"Wie geht es dir?", fragt Frau Bobrowa.
"Gut", sagt Tanja.
Das Dorf lebt weiter.
----------------------------------------------
2
Rosas Notizbuch
Fjodor Saizew ist früher Lehrer gewesen, aber jetzt ist er in Rente.
Er wohnt in Kamenka, einem kleinen Dorf.
Seine Nachbarin Rosa Timofejewna war alt und hat allein gewohnt.
Am Mittwoch hat Fjodor sie besucht.
Er hat an die Tür geklopft, aber niemand hat geöffnet.
Die Tür war offen, und Fjodor ist hineingegangen.
Rosa hat am Tisch gesessen und sich nicht bewegt.
Sie ist gestorben.
Auf dem Tisch waren zwei Tassen.
Eine war leer und eine war halbvoll.
Fjodor hat die halbvolle Tasse angeschaut.
Der Tee war noch warm.
Rosa hatte nie Besuch gehabt, denn sie mochte keine Leute.
Aber heute standen da zwei Tassen.
Fjodor hat den Tee in der fremden Tasse getrunken.
Er hat nicht gewusst, warum er das getan hat.
Am nächsten Tag ist Fjodor durch das Dorf gegangen.
Er hat bei den Nachbarn geklingelt und sein Beileid gesagt.
Alle haben von Rosas Tod gewusst.
"Das ist sehr traurig", hat Nadja Morosowa gesagt.
"Sie war eine gute Nachbarin", hat der alte Grigorij gesagt.
Fjodor hat gefragt, wer Rosa zuletzt besucht hatte.
Nadja hat den Kopf geschüttelt.
"Ich weiß das nicht."
Beim Lebensmittelladen hat Fjodor Brot gekauft.
Er hat den Ladenbesitzer gefragt: "Hat jemand Rosa besucht?"
Der Ladenbesitzer ist rot geworden.
Er hat über den Herbstregen gesprochen.
Fjodor hat Rosas Notizbuch erwähnt.
"Welches Notizbuch?", hat der Mann gefragt.
Aber Fjodor hat gesehen, dass der Mann gelogen hat.
Die Leute in Kamenka haben nichts gesagt, aber alle auf die gleiche Art.
Das hat Fjodor nicht vergessen.
Drei Tage nach Rosas Tod ist Fjodor wieder in ihr Haus gegangen.
Er hat gesagt, er will das Fenster schließen.
Das Schlafzimmer war ordentlich und sauber.
Fjodor hat die Schublade am Bett aufgemacht.
Darin war ein Stück Papier.
Das war Rosas Handschrift.
Fjodor hat das Papier langsam gelesen.
Es war eine Abschrift aus Rosas Notizbuch.
Rosa hat Namen von Leuten aus dem Dorf aufgeschrieben.
Neben den Namen waren Daten und Beträge.
Die Leute haben Rosa für etwas bezahlt, aber nicht für Gemüse oder Eier.
Fjodor hat den Namen von Pawel Krutow gefunden.
Krutow war der Vorsitzende des Kolchos.
Sein Name war dreimal da.
Fjodor hat das Papier auf das Fensterbrett gelegt.
Er hat in den Garten geschaut.
Die Beete waren nicht gepflegt, denn Rosa war lange krank gewesen.
Fjodor ist nach Hause gegangen und hat Tee gekocht.
Das Papier hat er auf den Tisch gelegt.
Er hat gewusst, was er tun sollte.
Er sollte zur Polizei in die Stadt fahren.
Aber Krutow ist ein mächtiger Mann.
Krutow hat Fjodors Sohn geholfen, als er studieren wollte.
Und die anderen Namen – das waren Fjodors Nachbarn.
Rosa hat das Notizbuch viele Jahre gehabt, aber sie hat nie etwas gesagt.
Warum hat sie das getan?
Hat sie die Leute schützen wollen?
Oder hatte sie Angst gehabt?
Fjodor hat den Tee getrunken und nachgedacht.
Dann hat er das Papier gefaltet.
Er hat die Bibel vom Regal genommen.
Er hat das Papier in die Bibel gelegt.
Er hat das Buch zurückgestellt.
"Das ist nicht einfach", hat er laut gesagt.
Am nächsten Morgen ist Fjodor früh aufgestanden.
Er hat Kaffee getrunken und sich angezogen.
Dann ist er durch das Dorf spaziert.
Es war noch früh, und alles war still.
Die Kinder sind zur Schule gegangen.
Der Traktor hat auf dem Feld gearbeitet.
Kamenka war ein normales Dorf.
Und Fjodor wollte, dass es so bleibt.
----------------------------------------------
3
Das Wäschebuch
Katja Wolkowa führt seit zwanzig Jahren den Laden in Borjowka.
Sie verkauft dort Mehl, Salz und alles, was die Leute brauchen.
Marija Beljajewa hatte für fast jeden im Dorf die Wäsche gewaschen.
Am Donnerstag wollte Katja die fertige Wäsche bei ihr abholen.
Sie hat geklopft, aber niemand hat geöffnet.
Die Tür war offen, also ist Katja hineingegangen.
In der Küche roch es nach kaltem Herd und Kräutertee.
Marija saß am Tisch und rührte sich nicht.
Sie war gestorben.
Katja stand still und schaute.
Dann hat sie die zwei Tassen auf dem Tisch gesehen.
Beide waren benutzt, und der Tee in der zweiten Tasse war noch warm.
"Marija hatte doch nie Besuch", dachte Katja.
Die alte Frau hatte immer gesagt: "Besucher machen nur Mühe."
Trotzdem hat Katja sich gesetzt.
Sie hat die fremde Tasse genommen und den Tee ausgetrunken.
Er schmeckte nach Zitronenmelisse und Honig.
Katja wusste selbst nicht genau, warum sie das getan hatte.
Am nächsten Tag hat Katja die Wäsche an alle zurückgebracht.
Sie hat jeden Haushalt besucht, dem Marija Wäsche gewaschen hatte.
Alle wussten schon, dass Marija gestorben war.
"Das ist sehr traurig", sagte Frau Nossowa und nahm ihr Bündel.
Katja fragte, wer Marija zuletzt besucht hatte.
Frau Nossowa schaute zur Seite.
"Ich war nicht da. Ich weiß es nicht."
Bei Herrn Tscherenkow war es ähnlich.
Er ist rot geworden, als Katja die Frage gestellt hat.
"Welches Notizbuch meinen Sie?", hat der Doktor Ssawin gefragt.
Aber er hatte seltsam geschaut, als Katja es erwähnt hatte.
Die Leute sprachen über das Wetter, die Ernte, das Wochenende.
Nur über das Notizbuch hat keiner gesprochen.
Katja hat verstanden: Alle wussten Bescheid, aber keiner wollte reden.
Zwei Tage später ist sie noch einmal zu Marija gegangen.
Offiziell wollte sie der Katze Futter bringen.
Das Schlafzimmer war ordentlich und roch nach Lavendel.
Katja hat die kleine Schublade am Bett aufgemacht.
Ganz unten lag ein zusammengefaltetes Stück Papier.
Es war Marijas Handschrift: klein, sauber, ordentlich.
Katja hat das Blatt aufgemacht und gelesen.
Es war eine Abschrift aus dem Wäschebuch.
Marija hatte aufgeschrieben, was sie in den Taschen der Wäsche gefunden hatte.
Briefe, Fotos, Zettel – und daneben immer die Namen der Leute.
Dann waren da Mittel aufgelistet, die kein Arzt verschreibt.
Und daneben: wer sie bestellt hatte und wann.
Da war auch der Name von Direktor Gruschew.
Dreimal, mit Datum.
Katja hat das Blatt zusammengefaltet.
Sie hat aus dem Fenster geschaut.
Im Garten lagen Äpfel auf dem Boden, weil niemand sie gepflückt hatte.
Die Äste hingen tief, aber niemand war mehr da, der sich darum kümmerte.
Zu Hause hat Katja Tee gekocht und sich an den Tisch gesetzt.
Das Blatt lag vor ihr.
Sie wusste, was sie tun müsste.
"Ich sollte zur Polizei gehen", dachte sie.
Aber dann hat sie an Direktor Gruschew gedacht.
Er hatte ihrer Tochter Lena die Stelle in der Stadt vermittelt.
Ohne Gruschew wäre Lena heute noch hier.
Katja hat an die anderen Namen auf dem Blatt gedacht.
Das waren ihre Nachbarn und ihre Kunden.
Leute, die sie jeden Tag gesehen hat.
Marija hatte das Notizbuch jahrelang bei sich gehabt, aber sie hat nie etwas gesagt.
Vielleicht hatte Marija das aus einem guten Grund getan.
Vielleicht wollte sie die Leute schützen.
Katja hat den Tee getrunken, langsam, bis die Tasse leer war.
Dann hat sie die Bibel aus dem Regal genommen.
Sie hat das Blatt hineingelegt und das Buch zugeklappt.
Sie hat es zurück ins Regal gestellt.
"Das ist keine leichte Entscheidung", sagte sie halblaut.
Aber sie hat es getan.
Am nächsten Morgen hat Katja den Laden geöffnet wie immer.
Frau Nossowa ist früh gekommen und hat Salz gekauft.
"Wie geht es dir?", hat sie gefragt.
"Es geht", hat Katja geantwortet.
Das stimmte nicht ganz.
Aber es war genug.
----------------------------------------------
4
Die Schrift der Hebamme
Als Olga Alexandrowna die Küche der toten Fekla betrat, standen da zwei Tassen auf dem Tisch, und das frische Brot daneben war noch nicht ganz kalt.
Fekla Spiridowna, die Hebamme von Michailowka, war einundachtzig Jahre alt gewesen und am Dienstagmorgen gestorben.
Niemand hatte sie zuletzt besucht – so hieß es jedenfalls.
Aber zwei Tassen lügen nicht.
Olga kannte Fekla gut genug, um zu wissen, dass sie Brot nicht für sich allein buk.
Sie setzte sich auf den Stuhl, der nicht Feklas war.
Die andere Tasse war halbvoll, der Tee noch lauwarm.
Olga trank ihn aus, ohne lange zu überlegen.
Er schmeckte nach Pfefferminze und etwas, das sie nicht benennen konnte.
Es war ihr, als müsste sie das tun, obwohl sie nicht hätte sagen können, warum.
Das kleine Notizheft, das Fekla immer in der Schürzentasche getragen hatte, war nirgendwo auf dem Tisch.
Olga suchte kurz mit dem Blick, ohne aufzustehen.
Es lag nirgends in der Küche.
Das bedeutete etwas, auch wenn sie noch nicht wusste, was.
Am nächsten Morgen backte Olga einen Pflaumenkuchen und machte sich auf den Weg durch das Dorf.
Zuerst besuchte sie Anja Lubjankina, die als Erste von Feklas Tod gehört hatte.
Anja sprach viel über Feklas gütige Art und die bevorstehende Beerdigung, aber das Notizheft erwähnte sie mit keinem Wort.
Bei der Witwe Prochorowa war es genauso: viele Erinnerungen, aber immer die falschen.
Beim Lebensmittelhändler Suslow kaufte Olga Mehl und fragte beiläufig, ob jemand Fekla kurz vor ihrem Tod noch besucht hatte.
Suslow wurde verlegen und sprach über den Regen, obwohl es seit einer Woche nicht geregnet hatte.
Am Nachmittag traf sie die Tochter des Pfarrers, die sagte, sie habe an Feklas Fenster noch spät abends Licht gesehen.
Mehr wollte das Mädchen nicht sagen, und Olga drängte es nicht.
Das Dorf schwieg über das Notizheft so gleichmäßig, dass es wie Absicht wirkte.
Wer zufällig schweigt, schweigt unterschiedlich.
Hier schwiegen alle auf dieselbe Art.
Olga kannte dieses Schweigen aus ihrer Zeit als Briefträgerin.
Es war das Schweigen von Menschen, die einen Brief erhalten haben, über den man nicht spricht.
Sie saß abends auf der Bank vor ihrem Haus und rauchte, obwohl sie seit Jahren nicht mehr geraucht hatte.
Dann schrieb sie auf einem Zettel, wer das Thema gewechselt hatte, sobald sie Feklas Namen nannte.
Es waren fast alle.
Drei Tage nach Feklas Tod kehrte Olga in das leerstehende Haus zurück, um die Blumen zu gießen.
Das Schlafzimmer war aufgeräumt und roch nach altem Holz und trockenem Lavendel.
Olga öffnete die Schublade am Nachttisch, ohne genau zu wissen, was sie suchte.
Unter einem alten Tuch und einem Rosenkranz lag ein zusammengefaltetes Blatt Papier.
Die Handschrift war Feklas: runde Buchstaben mit kleinen Kreisen über dem ü.
Es war eine Abschrift von einigen Seiten aus dem Notizheft, in Bleistift geschrieben.
Olga las langsam.
Auf den ersten Seiten waren harmlose Kräutermittel gegen Fieber und Schlaflosigkeit aufgeführt.
Dann kamen andere Rezepturen, für Mittel, die kein Arzt verordnet hätte, und dahinter Namen von Personen, die sie bestellt hatten.
Manche der Namen kannte Olga aus dreißig Jahren im Dorf.
Den Namen von Pjotr Semjonowitsch Norin, dem Gemeinderatsvorsitzenden, fand sie dreimal, mit Datumsangaben.
Olga legte das Blatt auf das Fensterbrett und sah in den verwilderten Garten.
Die Sonnenblumen waren umgefallen, weil niemand sie rechtzeitig gebunden hatte.
Sie dachte daran, wie lange Fekla dieses Wissen bei sich getragen hatte, ohne jemanden damit zu belasten.
Vielleicht war das eine Art Schutz gewesen.
Für die anderen.
Nicht für Fekla.
Olga fuhr nach Hause, kochte Wasser auf und setzte sich an den Küchentisch.
Die Abschrift lag vor ihr, und sie betrachtete sie, ohne sie anzufassen.
Was das Gesetz von ihr wollte, wusste sie: zum Polizeiposten in Woronki fahren, zwanzig Kilometer.
Pjotr Semjonowitsch kannte den Polizeichef persönlich.
Das wusste das ganze Dorf.
Olga zog kurz in Betracht, ob Fekla sie als diese Person ausgewählt hatte.
Sie hatte die Abschrift nicht vernichtet, obwohl sie die Gelegenheit gehabt hatte.
Sie hatte sie in der Schublade gelassen, so als sollte jemand sie finden.
Olga fragte sich, ob sie gemeint war.
Aber dann dachte sie an Mascha, Pjotrs junge Frau, die in Michailowka aufgewachsen war und bei Olga manchmal Kaffee trank.
Sie dachte an Maschas Kinder, die in die Dorfschule gingen, die Pjotr mitfinanziert hatte.
Gerechtigkeit war nicht immer eine klare Rechnung.
Manchmal war sie gar keine Rechnung, sondern eine Frage, die man nicht laut stellen durfte.
Olga faltete das Blatt sorgfältig und schob es in die Bibel, die auf dem Regal stand.
Sie wählte eine Stelle in der Mitte, zwischen zwei Seiten, die sie selbst nicht kannte.
Dann trank sie den Tee.
Der Wind hatte zugenommen, und die Laterne vor dem Haus schwang hin und her.
Olga saß noch lange am Tisch, während draußen die Schatten länger wurden.
Sie dachte an die Briefe, die sie in dreißig Jahren getragen hatte: gute und schlechte, erwartete und gefürchtete.
Manche davon hätte sie nicht zustellen sollen.
Manche hätte sie verbrennen sollen.
Aber sie hatte immer zugestellt, weil das ihr Beruf gewesen war und weil sie damals nicht hatte wissen können, was die Briefe bedeuteten.
Heute hatte sie zum ersten Mal etwas nicht getan, was sie hätte tun sollen.
Sie wusch die Tasse, trocknete sie ab und stellte sie in den Schrank.
Draußen war es jetzt dunkel.
Sie schlief gut.
----------------------------------------------
5
Was der Tee noch wusste
Als Irina Pawlowna das Haus der toten Natascha Grigorjewna betrat, roch es nach Wacholder, trockenem Thymian und dem stillen Zustand von Räumen, in denen man aufgehört hat aufzuräumen.
Die Kräuterhändlerin aus Krasnoje war still gestorben, wie man hier zu sterben pflegte: ohne Zeugen, ohne das Aufheben, das Städter für ihre Toten veranstalteten.
Niemand hätte gefragt.
Wäre da nicht die Sache mit den Tassen gewesen.
Sie standen auf dem Küchentisch, beide benutzt, die eine schräg in die andere gestellt, als hätte jemand es eilig gehabt, aber nicht eilig genug.
Irina hatte Natascha vierzig Jahre lang gekannt, lange genug, um zu wissen, dass diese Frau kein Geschirr auf dem Tisch stehen ließ.
Nicht aus Reinlichkeit.
Aus Überzeugung.
Sie setzte sich auf den Stuhl, der nicht Nataschas war, und ließ sich Zeit.
Die zweite Tasse hob sie an die Nase: Kamille, Honig, und hinter beidem eine Bitternote, die eine ehemalige Feldsher nicht hätte ignorieren können.
Sie trank.
Es war kein Durst, der sie dazu trieb, sondern das Bedürfnis, durch das Trinken zu teilen, was die Tote zuletzt geteilt hatte, um zu verstehen, wer ihr gegenübergesessen hatte.
Der Tee war noch warm.
Draußen rief jemand nach einem Kind, und das Kind antwortete nicht.
Irina ließ den Blick durch die Küche wandern: die schiefe Ikone über dem Herd, die Einmachgläser, die schlafende Katze auf dem Fensterbrett.
Das Büchlein, das Natascha seit Jahren in der Schürzentasche getragen hatte, war nicht da.
Noch am Nachmittag brach Irina mit einem Glas eingemachter Pflaumen auf, das eigentlich für den Winter gedacht gewesen wäre.
Bei den Schwestern Worobiowa traf sie auf die Art von Schweigen, das schlechter verbirgt, was es verbirgt, je sorgfältiger es kultiviert wird.
Man sprach über Fedors kranken Enkel, über den Preis für Heizöl, über den ungewöhnlich frühen Frost – mit einer Präzision, die zeigte, dass man genau wusste, worüber man nicht sprach.
Irina hörte zu, trank den angebotenen Tee bis auf den Grund und machte keine Notizen.
Beim Krämer Parfjonowitsch erwähnte sie beiläufig, Natascha habe das Büchlein sonst nie aus der Hand gegeben, und wartete, was das auslösen würde.
Es löste nichts aus.
Parfjonowitsch nickte und sortierte Mehlsäcke, als hätte er die Bemerkung nicht gehört.
Der Pfarrer empfing sie zwischen welkenden Bohnenreihen und sprach so ausführlich über Nataschas stilles Wesen, dass Irina das Gegenteil hinter jedem Lob zu hören meinte.
Nur die alte Gromowa, deren Taubheit sie ehrlicher machte als ihre Nachbarn, murmelte beim Abschied: "Das Büchlein hat jemandem nicht gepasst."
Mehr sagte sie nicht.
Das Dorf schwieg über das Büchlein mit der konzertierten Unauffälligkeit von Menschen, die alle denselben blinden Fleck kultivieren, ohne dies je miteinander besprochen zu haben.
Aber gerade dieses Schweigen – seine Gleichförmigkeit, seine beinahe choreografierte Sorgfalt – war für Irina eine Auskunft.
Es hatte die Kontur einer Aussage, aus der man die erste Seite herausgerissen hatte.
Abends schrieb sie auf einem Zettel, wer gerötet hatte, wer den Blick gesenkt hatte und wer das Thema zu schnell gewechselt hatte.
Es waren zu viele.
Am dritten Tag kehrte sie unter dem Vorwand zurück, nach der Katze zu sehen.
Das Schlafzimmer roch nach Lavendel und angehaltenem Atem.
Die Ikone der Gottesmutter hing schief über dem Bett, was Natascha zu Lebzeiten nie geduldet hätte.
In der Schublade des Nachttischs, unter Wollknäueln, einem Rosenkranz und einem Gebetsbuch mit gesplittertem Einband, lag ein sorgfältig gefaltetes Blatt.
Irina erkannte die Handschrift sofort: die kleinen, gedrängten Buchstaben einer Frau, die sparsam gewesen war – mit Worten wie mit allem anderen.
Es war eine Abschrift – nicht das Büchlein selbst, das fehlte, sondern Nataschas eigenhändig angefertigte Kopie jener Seiten, die sie offenbar als stille Versicherung zurückbehalten hatte.
Sie faltete das Blatt auf dem Fensterbrett auseinander.
Die ersten Seiten enthielten Rezepturen, die Irina aus ihrer Feldsher-Zeit kannte: Baldriantinktur, Weidenbastabsud, Schafgarbenessig gegen Magenbeschwerden.
Dann kamen die anderen.
Rezepturen für Mittel, die kein Arzt verordnet hätte – gegen Schwangerschaften, gegen Schmerzen, die man nicht benennt –, und hinter jedem Eintrag Namen von Personen, die sie bestellt hatten.
Namen, die Irina kannte.
Der Name des Bürgermeisters Gerasim Bolschakow stand zweimal darunter, mit Datum und Menge, in der sachlichen Klarheit einer Buchführung ohne Urteil.
Irina legte das Blatt auf das Fensterbrett und sah in den Garten.
Die Brennnesseln standen mannshoch, die Beerensträucher ungepflegt, die Beete aufgegeben – als hätte Natascha sehr genau gewusst, dass sich das Jäten nicht mehr lohnen würde.
Die Katze saß draußen auf dem Gartenzaun und beobachtete sie durch das Glas.
Irina beobachtete sie zurück.
Zu Hause kochte sie Tee und setzte sich an ihren eigenen Tisch, der kleiner war als Nataschas und weniger Spuren trug.
Die Abschrift legte sie mit dem Rand bündig zur Tischkante, ohne sie zu berühren, und betrachtete sie.
Die Frage, was sie tun müsste, stellte sich nicht.
Das wusste sie.
Die Frage war, was aus Krasnoje würde, wenn sie es täte: aus den Familien, aus dem Gleichgewicht, das ein kleines Dorf braucht, um ein kleines Dorf zu bleiben.
Hätte sie die Abschrift zur Miliz in der Kreisstadt gebracht, wäre Bolschakow nicht der Einzige gewesen, dem ein Verfahren gedroht hätte – das war das Wesen der Liste.
Bolschakow hatte ihr vor drei Jahren die Rente gerettet, als die Bezirksbehörde einen Formfehler zum Anlass genommen hatte, die Zahlung einzufrieren.
Er war kein guter Mensch, aber er war das, was Krasnoje von einem Bürgermeister verlangen konnte.
Irina dachte an die anderen Namen auf dem Blatt.
Töchter, die jetzt Kinder hatten.
Söhne, die Felder bestellten.
Natascha hatte das Büchlein ihr Leben lang aufbewahrt, es aber nie benutzt.
Das musste etwas bedeuten.
Vielleicht: dass Schuld erinnert, aber nicht eingetrieben werden sollte.
Vielleicht auch nur, dass Natascha Angst gehabt hatte.
Beides war wahr, und beides spielte keine Rolle mehr.
Irina trank den Tee bis auf den Grund.
Dann faltete sie die Abschrift – einmal, zweimal, viermal – auf ein Format, das in das alte Gesangbuch passte, das ihr Mann ihr zur Hochzeit geschenkt hatte.
Zwischen Seite vierundzwanzig und fünfundzwanzig, wo der erste Psalm begann, den sie nicht mehr auswendig konnte.
Das Gesangbuch stellte sie zurück ins Regal, zwischen die Jahrbücher der Kolchose, die niemand mehr aufschlug.
Es war kein Frieden, was sie empfand, und es war auch keine Gewissheit.
Es war das Wissen, dass Krasnoje mit einem Wissen weiterleben würde, so wie es immer gelebt hatte: mit dem Großteil der Wahrheit unter den Dielen.
Draußen ging eine Gestalt über die Hauptstraße.
Am Gang erkannte Irina den Bürgermeister: der selbstgewisse Schritt eines Mannes, der vergessen hat, dass man vergessen werden kann.
Er schaute nicht herein.
Irina stand am Fenster, bis er außer Sichtweite war.
Dann spülte sie die Tasse, trocknete sie ab und stellte sie in den Schrank.
== 112 hier weiter ==
1
Alles in Ordnung
Paul Winter ist Polizist in Gotha.
Heute Morgen hat er eine neue Aufgabe bekommen.
Es geht um Hildegard Kunkel, 71 Jahre alt.
Sie wohnt in der Gartenstraße und lebt allein.
Niemand hat sie als vermisst gemeldet.
Ein Ladenbesitzer hat die Polizei angerufen.
Paul liest die Akte.
Es gibt keine Familie in der Kartei.
Paul schreibt "ungeklärt" auf das Formular.
Er weiß nicht genau, was das Wort bedeutet.
Aber es gibt kein anderes.
"Was machst du heute?", fragt sein Kollege Nico.
"Ich besuche einen Laden", sagt Paul.
Nico nickt.
Paul nimmt seine Jacke und geht.
Der Laden heißt "Szabo's Ecke" und ist fünf Minuten entfernt.
Der Besitzer heißt Árpád Szabo und ist ungefähr fünfzig Jahre alt.
"Frau Kunkel kommt jeden Tag", sagt er.
"Seit zwölf Tagen ist sie nicht mehr gekommen."
"Kennen Sie sie gut?", fragt Paul.
"Ja", sagt Szabo.
"Sie kauft immer Brot und Milch."
"Hat sie Familie?", fragt Paul.
"Ich glaube nicht."
"Sie lebt allein."
Paul schreibt alles auf.
"Hat sie etwas gesagt?", fragt er.
Szabo nickt.
"Sie hat gesagt, dass sie bald wegfährt."
"Wann hat sie das gesagt?", fragt Paul.
"Vor etwa zwei Wochen."
Paul notiert das.
"Haben Sie Angst?", fragt Paul.
"Ja", sagt Szabo.
"Sie ist eine nette Frau."
Paul bedankt sich.
"Ich hoffe, ihr geht es gut", sagt Szabo.
"Ich auch", sagt Paul.
Er geht zurück ins Büro.
Im Büro sucht Paul in der Datenbank.
Er findet einen Eintrag aus dem Jahr 2022.
Hildegard Kunkel ist damals auch verschwunden.
Sie ist nach zwei Wochen zurückgekommen.
Niemand weiß, wo sie gewesen ist.
Der Fall ist geschlossen worden.
Paul liest das zweimal.
Es gibt keine neue Information.
Er schreibt seinen Bericht.
Er schreibt: "Keine neuen Erkenntnisse."
Dann schreibt er: "Wiedervorlage in einer Woche."
"Und?", fragt Nico.
"Nichts", sagt Paul.
"Okay", sagt Nico.
Das Gespräch ist zu Ende.
Paul legt die Akte ins Regal.
Im Regal stehen viele andere Akten.
Sie sehen alle gleich aus.
Paul trinkt seinen Kaffee.
Er ist schon kalt.
Um halb sechs macht Paul seinen Computer aus.
"Tschüs", sagt er zu Nico.
"Tschüs", sagt Nico.
Paul geht die Treppe runter und dann nach Hause.
Draußen ist es dunkel.
Er geht zu Fuß.
Er kommt am Laden von Herrn Szabo vorbei.
Das Licht ist noch an.
Paul geht weiter.
Er denkt: "Morgen komme ich wieder."
Die Akte ist noch da.
Vielleicht gibt es neue Informationen.
Vielleicht nicht.
Das ist die Arbeit.
----------------------------------------------
2
Kein Alarm
Sandra Lehr arbeitet als Polizistin in Mainz.
Heute Morgen hat sie eine neue Akte bekommen.
Der Name auf der Akte ist Heinrich Obst.
Er ist 67 Jahre alt und wohnt in der Bremserstraße 9.
Bis jetzt hat ihn niemand als vermisst gemeldet oder angezeigt.
Ein Nachbar hat angerufen, denn das Balkonlicht bei Obst brennt seit zehn Tagen.
Sandra hat "ungeklärt" auf das Formular geschrieben.
Das Wort hat ihr nicht gefallen, aber es hat kein anderes gegeben.
"Was hast du heute?", hat ihr Kollege Klaus gefragt.
"Eine Akte ohne Anzeige", hat Sandra gesagt.
Klaus hat genickt und seinen Kaffee getrunken.
Sandra hat ihre Jacke genommen und ist gegangen.
Der Nachbar heißt Ralf Birk und wohnt gegenüber von Obst.
Er ist ungefähr sechzig Jahre alt und lebt allein.
Sandra hat an seiner Tür geklingelt.
Er hat die Tür sofort geöffnet.
"Ich mache mir Sorgen", hat er gesagt. "Das Licht geht nicht aus."
Sandra hat gefragt, ob er Heinrich Obst gut gekannt hat.
"Wir haben manchmal gesprochen", hat Birk gesagt. "Aber nicht oft."
"Hat er Familie?", hat Sandra gefragt.
"Er hat eine Schwester, glaube ich. Aber die kommt selten."
Sandra hat das aufgeschrieben.
"War er in letzter Zeit anders?", hat sie gefragt.
Birk hat nachgedacht.
"Er ist ruhiger geworden", hat er gesagt. "Aber ich weiß es nicht genau."
"Hat er etwas mitgenommen, zum Beispiel einen Koffer?", hat Sandra gefragt.
"Das habe ich nicht gesehen", hat Birk gesagt.
Sandra hat sich bedankt und ist zur Wohnungstür von Obst gegangen.
Sie hat geklingelt, aber niemand hat geöffnet.
Durch den Briefkastenschlitz hat sie Werbung auf dem Boden gesehen.
Dann ist Sandra zurück ins Büro gefahren.
Zurück im Büro hat Sandra in der Datenbank gesucht.
Es hat einen alten Eintrag gegeben: Heinrich Obst, 2021.
Er ist damals auch verschwunden.
Er ist nach zehn Tagen zurückgekommen.
Niemand hat gefragt, wo er gewesen ist.
Der Fall ist geschlossen worden, denn es hat kein Verbrechen gegeben.
Sandra hat das gelesen und kurz nachgedacht.
Sie hat eine Schwester in der Kartei gefunden: Ingrid Obst, Kaiserslautern.
Sie hat dort angerufen.
Die Schwester hat nicht gewusst, wo Heinrich ist.
"Er macht das manchmal", hat sie gesagt. "Er braucht Zeit für sich."
"Haben Sie Angst?", hat Sandra gefragt.
"Nein", hat die Schwester gesagt. "Er kommt immer wieder."
Sandra hat das aufgeschrieben.
Sie hat ihren Bericht fertig gemacht.
Unter "Ergebnis" hat sie geschrieben: Keine neuen Informationen.
Unter "Nächste Schritte" hat sie geschrieben: Wiedervorlage.
"Und?", hat Klaus gefragt.
"Nichts", hat Sandra gesagt.
"Wie erwartet", hat Klaus gesagt.
Sandra hat die Akte ins Regal gelegt.
Das Regal ist fast voll.
Alle anderen Akten sehen genauso aus.
Um Viertel nach fünf ist Sandra gegangen.
Es war schon dunkel.
Sie ist die Treppe runtergelaufen und durch die Hintertür hinausgegangen.
Auf der Straße war es kalt, aber sie hat nicht auf den Bus gewartet.
Sie ist gelaufen.
Sie hat an Ralf Birk gedacht, der sich wirklich Sorgen gemacht hat.
Das ist selten, hat sie gedacht.
Die meisten Menschen machen sich keine Sorgen.
Oder sie zeigen es nicht.
Sie hat auch an die Schwester gedacht: "Er kommt immer wieder."
Vielleicht hat das gestimmt.
Vielleicht ist Heinrich Obst irgendwo und es geht ihm gut.
Aber das hat nicht in der Akte gestanden, denn niemand hat es gewusst.
Neue Akte, neues Formular, dasselbe Ergebnis.
Das ist nicht schlimm, hat Sandra gedacht.
Sie hat die Straße überquert und ist nach Hause gegangen.
----------------------------------------------
3
Was das Formular nicht fragt
Lukas Pietsch kam um kurz nach acht ins Büro und hängte seine Jacke an den Haken.
Auf seinem Schreibtisch lag eine neue Akte, die jemand in der Nacht dorthin gelegt hatte.
Er machte sich einen Kaffee und setzte sich, bevor er die erste Seite aufschlug.
Der Name oben auf dem Formular war Margit Wendland, 58 Jahre, Beruf ungeklärt.
Niemand hatte sie als vermisst gemeldet.
Ihr Arbeitgeber hatte angerufen, weil sie seit acht Tagen nicht erschienen war.
"Sie hat sich nie abgemeldet", hatte die Frau am Telefon gesagt.
"Das ist nicht ihre Art."
Pietsch las die Akte bis zum Ende.
Es gab keine Angehörigen, die man hätte kontaktieren können.
Das Formular verlangte eine Kategorie.
Er schrieb "ungeklärt" und dachte nicht weiter darüber nach.
Es war das einzige Wort, das für solche Fälle vorgesehen war.
Sein Kollege Seeger fragte, was er heute mache.
"Eine Vermisste, vielleicht", sagte Pietsch.
Seeger nickte und schaute wieder aus dem Fenster.
Pietsch zog seinen Mantel an und nahm die Akte mit.
Die Wäscherei lag in einer Seitenstraße, zwanzig Minuten zu Fuß vom Revier.
Es roch nach Dampf und Waschmittel, und die Maschinen liefen alle gleichzeitig.
Die Inhaberin hieß Petra Stark und war ungefähr fünfzig Jahre alt.
Sie trocknete sich die Hände ab, als Pietsch hereinkam.
"Margit war neun Jahre bei uns", sagte sie.
"So etwas passiert uns nicht."
"Hat sie sich je krank abgemeldet?", fragte Pietsch.
"Natürlich, wie jeder."
"Aber sie hat immer Bescheid gegeben."
"Haben Sie versucht, sie zu erreichen?"
"Das Handy ist abgeschaltet."
Pietsch schrieb das in sein Heft.
"Hatte sie Freunde hier, soweit Sie das wissen?"
Stark schüttelte den Kopf.
"Sie hat nicht viel erzählt, das war eben ihre Art", sagte sie.
"War sie glücklich hier?", fragte Pietsch.
Stark sah ihn kurz an.
"Ich kann nur sagen, dass sie ihre Arbeit gemacht hat."
Pietsch bedankte sich und verließ die Wäscherei.
Zurück im Büro suchte Pietsch in der Datenbank nach Margit Wendland.
Es gab einen Eintrag aus dem Jahr 2019.
Sie war damals für fast zwei Wochen verschwunden und dann zurückgekehrt, ohne Erklärung.
Der Sachbearbeiter hatte "Fall abgeschlossen" notiert und nichts weiter.
Pietsch lehnte sich zurück und schaute kurz an die Decke.
Er dachte darüber nach, warum das System solche Fragen nicht stellte.
Das System fragte nach Fakten, nicht nach Gründen.
Er öffnete den Bericht auf seinem Computer und begann zu tippen.
Unter "Maßnahmen" schrieb er: Arbeitgeber befragt, Datenbank geprüft, keine neuen Erkenntnisse.
Unter "Nächste Schritte" schrieb er: Wiedervorlage in sieben Tagen.
Seeger stellte wortlos eine Tasse Kaffee auf seinen Schreibtisch.
"Irgendwas?", fragte er.
"Nichts. Wie immer", sagte Pietsch.
Er unterschrieb den Bericht und schloss das Fenster auf dem Bildschirm.
Die Akte legte er ins Regal neben der Tür, zu sieben anderen, die genauso aussahen.
Er hatte nicht das Gefühl, etwas Falsches getan zu haben.
Er hatte auch nicht das Gefühl, etwas Richtiges getan zu haben.
Er hatte einfach das getan, was das System von ihm erwartete.
Um halb sechs schloss Pietsch seinen Computer und stand auf.
Er zog seine Jacke an und nahm die Tasche vom Haken.
Seeger war schon gegangen, und das Büro war jetzt fast still.
Nur der Drucker am Ende des Raums summte leise vor sich hin.
Auf dem Parkplatz war es kalt, und die Straßenlaternen fingen gerade an zu leuchten.
Er holte sein Fahrrad aus dem Unterstand und fuhr los.
Die Stadt war ruhig, und die meisten Läden hatten schon geschlossen.
Er dachte an Margit Wendland, aber er wusste nicht, was er dabei denken sollte.
Vielleicht war sie irgendwo.
Vielleicht war sie zurückgekehrt, bevor er morgen ins Büro kam.
Wahrscheinlich nicht.
Die Akte würde morgen noch im Regal stehen, genau dort, wo er sie hingelegt hatte.
Pietsch bog in seine Straße ein und stieg vom Rad.
Zu Hause brannte Licht.
Er schloss das Fahrrad ab und ging die Treppe hinauf.
Morgen würde er wiederkommen.
Das war nicht gut und nicht schlimm.
Es war einfach das, was er jeden Morgen tat.
----------------------------------------------
4
Der offene Vorgang
Denis Halmann legte die Akte auf seinen Schreibtisch und öffnete sie, ohne sich zu setzen.
Es war ein Freitag im November, und das Revier in der Nähe des Bahnhofs war um diese Zeit fast leer.
Gudrun Fellner, 62 Jahre, zuletzt gesehen am 28. Oktober.
Keine Vermisstenanzeige, kein besorgter Angehöriger, kein Hinweis aus der Nachbarschaft.
Das Sozialamt hatte sich gemeldet, weil Fellner drei Termine in Folge nicht wahrgenommen hatte.
Das sei ungewöhnlich für sie gewesen, stand im Bericht.
Halmann fragte sich, ob "ungewöhnlich" das richtige Wort war.
Vielleicht war sie einfach gegangen.
Manche Menschen gingen, ohne es zu melden, und das war ihr gutes Recht.
Aber das Formular verlangte nach einer Bearbeitung, also bearbeitete er den Fall.
Er trank seinen Kaffee aus, obwohl er längst kalt war, und nahm seinen Mantel vom Haken.
Sein Kollege Bremer fragte, wohin er gehe, und Halmann nannte die Adresse, ohne weitere Erklärung.
"Klingt nach einem Nieten-Fall", sagte Bremer.
Halmann zog die Tür hinter sich zu und nahm die Treppe.
Das Sozialamt lag zehn Minuten entfernt, in einem Gebäude, das so aussah, als wäre es für etwas anderes gebaut worden.
An der Rezeption saß eine junge Frau mit einem Namensschild: K. Moser.
Sie war die Sachbearbeiterin, die den Fall gemeldet hatte, und sie wirkte erleichtert, dass jemand gekommen war.
"Ich kannte Frau Fellner nicht gut", sagte sie, "aber sie kam immer pünktlich."
Pünktlichkeit schien die einzige Eigenschaft zu sein, die Behörden an Menschen wahrnahmen, sodass alles andere an ihnen unsichtbar blieb.
Moser zeigte ihm die Terminliste auf ihrem Bildschirm: drei ausgefallene Termine, einer nach dem anderen, alle ohne Abmeldung.
Fellner habe manchmal von ihrer Tochter gesprochen, sagte Moser, aber einen Namen habe sie nie erwähnt.
Eine Adresse für die Tochter gebe es in der Akte nicht.
Halmann notierte das und fragte, ob Fellner je etwas gesagt habe, das ihn stutzen lassen sollte.
Moser dachte einen Moment nach.
"Sie hat mal gesagt, sie würde am liebsten irgendwohin fahren, wo sie niemand kennt", sagte sie.
"Das sagen viele", antwortete Halmann.
"Ja", sagte Moser, "aber bei ihr klang es nicht nach einem Wunsch, sondern nach einem Plan."
Halmann schrieb das auf, ohne zu wissen, ob es nützlich sein würde.
Meistens waren solche Hinweise entweder alles oder nichts.
Er bedankte sich und ging.
Zurück im Büro las Halmann die Akte noch einmal, diesmal gründlicher.
Gudrun Fellner hatte in den letzten vier Jahren dreimal die Adresse gewechselt, immer innerhalb desselben Stadtteils.
Es gab einen Eintrag aus dem Jahr 2020: Sie war verschwunden und nach zwei Wochen zurückgekehrt, ohne dass jemand gefragt hatte, woher.
Der Sachbearbeiter hatte den Fall geschlossen, weil es keinen Straftatbestand gab.
Das war korrekt.
Es war auch das Problem.
Das System konnte Menschen nur schützen, wenn sie in eine Kategorie passten, und Fellner passte in keine.
Sie war nicht Opfer, nicht Verdächtige, nicht hilflos im rechtlichen Sinne.
Sie war einfach weg.
Halmann rief bei der Meldebehörde an und fragte nach einer Ummeldung.
Es gab keine, nicht seit dem vergangenen Jahr.
Er rief die Notaufnahme des nächsten Krankenhauses an, weil das Protokoll es verlangte.
Dort war sie nicht.
Er trug alle Ergebnisse in den Bericht ein, obwohl "Ergebnisse" das falsche Wort war.
Es waren Nicht-Ergebnisse, einer nach dem anderen, wie Antworten auf Fragen, die man lieber nicht stellte.
Bremer kam herein und fragte, wie es laufe.
"Wie immer", sagte Halmann.
Bremer nickte und ging wieder.
Das war das Gespräch, das man führte, wenn man nichts zu sagen hatte und trotzdem nicht schweigen wollte.
Halmann schloss den Bericht und legte die Akte in das Regal für offene Fälle.
"Offen" bedeutete hier: nicht abgeschlossen, aber auch nicht mehr aktiv bearbeitet.
Es war ein Zustand, der genau für solche Fälle erfunden worden war.
Halmann fand das weder zynisch noch beruhigend.
Es war einfach so.
Um kurz nach sechs verließ Halmann das Revier und ging zur Bushaltestelle zwei Straßen weiter.
Es regnete nicht mehr, aber die Luft roch noch danach, schwer und kühl.
Er wartete auf den Bus und dachte an das, was Moser gesagt hatte: Es habe geklungen wie ein Plan.
Wenn das stimmte, war Fellner nicht verloren.
Sie war irgendwo, und vielleicht war dieses Irgendwo besser als das hier.
Aber das war keine Schlussfolgerung, die man in einen Bericht schreiben konnte.
Das System arbeitete mit Fakten, nicht mit Wahrscheinlichkeiten.
Schon gar nicht mit Hoffnung.
Der Bus kam fünf Minuten zu spät, was in dieser Stadt als pünktlich galt.
Halmann stieg ein, fand einen Platz am Fenster und sah zu, wie die Stadt an ihm vorbeizog.
Nasse Straßen, Lichtfenster, Menschen mit Schirmen oder ohne.
Er dachte nicht mehr an Fellner, weil das keinen Zweck hatte.
Oder er versuchte es zumindest.
Morgen würde er wieder ins Büro kommen, und die Akte würde dort sein, wo er sie gelassen hatte.
Vielleicht gab es neue Informationen, vielleicht nicht.
Das war der Rhythmus dieser Arbeit, und Halmann hatte sich damit abgefunden, nicht aus Resignation, sondern weil es das Klügste war.
Der Bus hielt.
Er stieg aus.
Zu Hause wartete nichts Besonderes, und das war an einem Tag wie diesem genug.
----------------------------------------------
5
Die Geduld des Verfahrens
Es war ein Mittwoch im Oktober, als Vera Natzke die Akte auf ihren Schreibtisch legte, mit der sachlichen Ruhe, die man erst nach Jahren lernt.
Stanislav Oborin, 69 Jahre alt, zuletzt gesehen am dritten Oktober, Verwandte nicht ermittelbar, keine Meldung.
Niemand hatte ihn vermisst gemeldet.
Entdeckt worden war sein Verschwinden durch ein Paket, das zweimal an seine Adresse zugestellt worden war und schließlich ungeöffnet an die Poststelle zurückgekehrt war.
Natzke kannte diese Art von Fall, bei der nicht die Abwesenheit selbst Alarm schlug, sondern ihr Echo in einem bürokratischen Nebengleis.
Das seit Jahren mit halbfertigen Akten belegte Büro hatte die gedämpfte Geschäftigkeit eines Orts, in dem nichts Wesentliches geschah, aber alles sorgfältig dokumentiert wurde.
Das Formular verlangte nach einer Kategorie.
Sie wählte "ungeklärt", weil dies das einzige Wort war, das die Bürokratie für eine Abwesenheit bereithielt, die kein Verbrechen und kein freiwilliger Abgang war.
Hinter ihr summte der Drucker.
Irgendwer druckte etwas aus, das vermutlich ebenfalls niemals gelesen werden würde.
Der Raum roch nach Papierstaub und altem Kaffee, nach den Jahren, in denen sich beides zu einer eigenen Atmosphäre verdichtet hatte.
Natzke mochte diesen Geruch, ohne dass sie dafür einen Grund hätte angeben können.
Er war einfach der Geruch des Orts, an dem sie arbeitete.
Sie blätterte zurück zur ersten Seite, auf der ein Passfoto klebte, das Oborin im Alter von 62 Jahren zeigte.
Das Gesicht war das eines Mannes, der in Fotos nie richtig hineinzusehen schien, als ließe er sich nur widerwillig festhalten.
Sie kannte diesen Ausdruck.
Viele der Gesichter in ihren Akten hatten ihn, als wäre das Fehlen in Menschen angelegt, bevor es sich im Außen vollzog.
Die Kollegin am Nebentisch fragte, ob Natzke an der Sammelbestellung für die Kantine teilnehmen wolle.
Natzke sagte nein, ohne aufzublicken.
Dann stand sie auf, nahm ihren Block und fuhr mit dem Aufzug ins Erdgeschoss.
Die Adresse in der Akte gehörte zu einem Mietblock in Lichtenberg: vier Stockwerke, verwitterte Fassade, ein Treppenhaus mit dem gedämpften Licht, das solche Häuser immer zu haben schienen.
Auf Klingeln öffnete die Nachbarin, Frau Kordt, vielleicht siebzig, mit dem misstrauischen Blick einer Person, die Besuche nicht gewöhnt ist.
Sie kannte Oborin vom Sehen.
Das hieß: Sie grüßte ihn manchmal am Briefkasten, wenn beide gleichzeitig die Post holten, was selten gewesen war.
An sein Gesicht konnte sie sich nur so erinnern, wie man sich an Dinge erinnert, die man nie absichtlich beobachtet hat.
"Er war ruhig", sagte sie, und Natzke hörte darin weniger eine Beschreibung als einen Entlassungsschein.
Ruhige Menschen machten keine Probleme, und wer keine Probleme machte, den bemerkte man nicht, und wen man nicht bemerkte, den vermisste man nicht.
Das war keine Böswilligkeit; es war die ungeschriebene Logik des städtischen Nebeneinanderlebens.
Frau Kordt bot keinen Kaffee an, und Natzke fragte nicht danach.
Sie notierte: "Nachbarin, keine relevanten Angaben."
Der Hausmeister, den sie im Keller antraf, war ein Mann, dessen Antworten so knapp ausfielen, als kosteten ihn Worte etwas.
Er sei einmal durch das Schlüsselloch gegangen, weil Milch vor der Tür gestanden habe, sagte er; das sei vor über einer Woche gewesen.
Ob er daraufhin die Polizei informiert habe, fragte Natzke.
Er zuckte die Schultern, als wäre das eine Idee gewesen, auf die zu kommen man erst einmal kommen müsste.
"Das ist nicht meine Aufgabe", sagte er, und technisch gesehen hatte er recht.
Sie fragte sich, ob er hätte anrufen sollen – nicht aus Pflicht, sondern weil es das gewesen wäre, was ein anderes System von ihm erwartet hätte.
Aber das war nicht das System, in dem sie beide lebten.
Natzke notierte seine Aussage mit der Vollständigkeit, die das Verfahren verlangte.
Sie fuhr zurück zum Revier.
Am frühen Nachmittag lag die Akte wieder vor ihr, diesmal auf dem Boden neben dem Stuhl, weil der Schreibtisch neu belegt war.
Beim zweiten, gründlicheren Durchlesen fand Natzke einen Eintrag aus dem Jahr 2018.
Stanislav Oborin war damals ebenfalls verschwunden gewesen, nicht durch eine Vermisstenanzeige entdeckt, sondern durch eine Anfrage des Sozialamts, das seine Akte nicht bedienen konnte.
Er war nach drei Wochen zurückgekehrt, ohne Erklärung, ohne Begleitung.
Der damalige Sachbearbeiter hatte vermerkt: "Sache erledigt."
Zwei Wörter, ein Punkt.
Natzke fragte sich, ob der Mann, der das geschrieben hatte, je in Betracht gezogen hatte, dass "erledigt" und "verstanden" nicht dasselbe waren.
Wahrscheinlich nicht, und wahrscheinlich war das auch vernünftig.
Das System hatte weder die Kapazität noch das Mandat, Fragen zu verfolgen, auf die die Betroffenen selbst keine Antwort wollten.
Sie legte die Akte zu einem Stapel, der bereits acht ähnliche enthielt, alle mit demselben geduldigen Weg durch die Bürokratie.
Dabei fiel ihr auf, dass "vergessen" das falsche Wort war.
Die Akten wurden nicht vergessen; sie wurden aufbewahrt, mit einer Sorgfalt, die das Gegenteil von Gleichgültigkeit war und trotzdem dasselbe erreichte.
Sie tippte ihren Bericht in das System, das langsam war und jede Eingabe mit einem leisen Ton quittierte, als läge ihm daran, höflich zu bleiben.
Das Feld "Ermittlungsstand" füllte sie mit einer Formel, die für solche Fälle vorgesehen war: knapp, korrekt, unverbindlich.
Das Feld darunter fragte nach den nächsten Schritten.
Sie schrieb: "Weiterverfolgung bei neuen Hinweisen."
Das war keine Lüge und keine Wahrheit; es war das, was das Formular brauchte, damit es geschlossen werden konnte.
Sie legte die Akte dorthin, wo alle endeten, deren Inhalt das System nicht lösen, aber auch nicht loslassen konnte.
Um halb sieben verließ Natzke das Gebäude durch den Seitenausgang, dessen Tür an der oberen Schraube seit Jahren lose saß.
Der Regen hatte aufgehört; die Pflastersteine auf dem Parkplatz glänzten unter den Natriumlampen, die ihr Licht so abgaben, als schuldeten sie es jemandem.
Sie zog ihren Mantel zu.
Ihr Auto stand am Ende der Reihe, ein dunkelblauer Polo, dessen Lack an der Fahrertür begann, den Winter zu zeigen.
Sie blieb einen Moment stehen, bevor sie einstieg, ohne dass sie hätte sagen können, warum.
Oborin war heute nirgends aufgetaucht, weder lebend noch anderweitig, und morgen würde seine Akte auf einem anderen Schreibtisch liegen, falls die Rotation es so vorsah.
Sie hatte heute nichts gelöst.
Das stimmte, und es stimmte auch nicht: Sie hatte das Verfahren um einen Tag vorangetrieben, in der Richtung, in die Verfahren sich immer bewegten – nach vorn, ohne vorwärtszukommen.
Das war keine Niederlage.
Jedenfalls war es das, was sie sich sagte.
Sie dachte an das Passfoto in der Akte, an den widerwilligen Blick des Mannes, der sich hatte festhalten lassen, als wäre er bereits dabei gewesen, zu verschwinden.
Vielleicht hatte er gewusst, wohin er ging, und vielleicht war das, verglichen mit dem, was das System über ihn wusste, ein Vorteil.
Natzke fuhr nach Hause.
Sie würde morgen wiederkommen.
Die Akte würde da sein oder nicht.
Beides war, auf seine Art, dasselbe.
== 113 ==
1
----------------------------------------------
2
----------------------------------------------
3
----------------------------------------------
4
----------------------------------------------
5
== 114 ==
1
----------------------------------------------
2
----------------------------------------------
3
----------------------------------------------
4
----------------------------------------------
5
== 115 ==
1
----------------------------------------------
2
----------------------------------------------
3
----------------------------------------------
4
----------------------------------------------
5
== 116 ==
1
----------------------------------------------
2
----------------------------------------------
3
----------------------------------------------
4
----------------------------------------------
5
== 117 ==
1
----------------------------------------------
2
----------------------------------------------
3
----------------------------------------------
4
----------------------------------------------
5
== 118 ==
1
----------------------------------------------
2
----------------------------------------------
3
----------------------------------------------
4
----------------------------------------------
5
== 119 ==
1
----------------------------------------------
2
----------------------------------------------
3
----------------------------------------------
4
----------------------------------------------
5
== 120 ==
1
----------------------------------------------
2
----------------------------------------------
3
----------------------------------------------
4
----------------------------------------------
5
1oxbyct519pio7ob1vm2ejlp1pl4rjq